`
java-mans
  • 浏览: 11454208 次
文章分类
社区版块
存档分类
最新评论

不与人沟通的程序员不是好程序员

阅读更多


  很多人认为计算机变得如此智能,所以在不久的未来将不再需要程序员。另外一些人认为程序员是天才,他们在电脑前能不断地解决复杂的数学难题。甚至不少程序员对他们是做什么的都没有清晰的概念。

  在这篇文章中,我想给不知情的人解释一下程序员到底是做什么的:

  程序员是将人类想法翻译成计算机语言的译者。

  他们是两种世界之间的纽带。你认为维护这个纽带很容易吗?


  人类世界的背景

  The problem with people is that they’re only human. - Bill Watterson
  人类的问题是,他们只是人而已。——比尔·沃特森

  人类是生物进化的产物,并且拥有独特而宝贵的器官——大脑,它能为程序员提供想法。大脑有组合复杂的新大脑皮层(对人类而言是独特的),还有从哺乳动物和爬行动物继承的旧结构。旧的大脑结构主要负责生殖(性)和生存(寻找食物或者躲避危险)。新大脑皮层进化成能够更好地支持这些功能,但是,它开始产生奇怪的副作用——意识、思考和好奇心。幸亏这些副作用的影响,人类产生了文明并在数千年后发明了计算机。

  一些人相信经过数千年的发展,人类应该变成完全沉闷的、理性的、可预测的生物,但是这并没有发生。人类旧的大脑结构、复杂的心理和社会行为往往使人们不理性,不可预测并带有欺骗性。并且,人类有糟糕的记忆力、强烈的情感和个人兴趣。但是,程序员没法选择与更理性的物种工作,他们不得不与人类共事并且把人类的想法翻译成计算机语言。

  计算机世界背景

  Part of the inhumanity of the computer is that, once it is competently programmed and working smoothly, it is completely honest. – Isaac Asimov
  计算机非人性的一部分表现是,一旦完成编译并且顺利运行,它将忠实地完成工作。——艾萨克·阿西莫夫

  计算机是人类文明的最佳发明。它由CPU、主板、内存、硬盘驱动器、显示器和其他部分构成。计算机将我们的文明推入一个新的水平,使我们的生活更有意义并充满乐趣,还弥补了我们大脑的缺陷。很可能计算机比人类更聪明。(不过,我有点关心如果这成为现实后,计算机还需要人类程序员吗?)

  现代计算机具有完全逻辑性、直接性和顺从性。如果你知道它应该做什么并且知道如何命令它,那么和计算机一起工作是快乐的。唯一的问题是,计算机只会做你告诉它去做的。因此,你应该有清晰的思路并且在见你的上司或客户时保证计算机不出岔子。

  在人类和计算机之间的翻译

  翻译中会遇到三个主要的挑战:

1. 语言歧义。人类语言是模糊、复杂并且双关的,例如:“这个程序不能提供良好的用户体验”。文化、背景和上下文语境都会对沟通和含义造成影响。与之相反,所有计算机语言都是准确、直接的,与上下文无关。

2. 细节层次。人类的沟通是笼统而不带有过多细节的,例如:“我想让这该死的程序运行起来”。这样可以节省时间与精力,但由于缺少详细信息,会产生两个比较大的问题——误解和不确定性。而计算机需要所有细节——每件事都要说清楚。

3. 思维模式。人类习惯于思考需求、结果与解决方案之间的关系,例如:“这份报告应该在2秒内运行,而不是2个小时”。然而,计算机需要算法——按照步骤去达到想要得到的结果。

  为了写出优秀的软件,程序员们必须克服这些困难,理解人们的想法并将之转换成计算机语言。

  一名优秀程序员所具备的能力

程序员的本质

  我们可以看到,一名优秀程序员应该具备应付两个不同世界的两套技能。

  理解人类的需求并提出解决方案:

1. 沟通——与人建立联系的能力,能够同他人亲密的交谈,并有勇气去尝试分享自己的观点。
2. 意图——从谈话中提取有用的信息,理解并使之有意义。
3. 逻辑——为不懂让步的计算机整理、剔除那些人类思想中含糊而有争议的内容。
4. 创造力——挖掘、转变人类的想法,从而创建优秀的解决方案。
5. 构思——利用人类友好的接口和便捷的互动性来包装编程思想。
6. 大局观——清楚解决方案是如何适应全世界的用户、企业以及其他,从而使你的程序更有用。

  告诉计算机该做什么,并建立解决方案:

1. 逻辑(再次强调)——把程序员的想法组织整理成有凝聚力的软件思想和计算机指令
2. 技术——发现并理解科技黑箱(对于99%的人来说是黑箱)。
3. 编程语言——学习美观的、富有逻辑的、清晰明了的语言,从而把程序员的想法提供给电脑。
4. 算法——精通让计算机完成任务最高效的方法。
5. 建模——在软件代码中建立抽象和模型,从而掌握并操控想法。
6. 实践(比如代码重构、单元测试、持续集成)——周期性活动,以保持系统可靠、健康与可改变。

  面向人类和面向硬件对象/系统的程序员有很大不同。

  不与人沟通的程序员不是好程序员。一个优秀的解决方案需要计算机世界与人类世界的双重技能。只有连接起两个世界,才能成为一个真正的优秀程序员。

此文来自龙铭洪博客,转载请注明:http://blog.csdn.net/long892230

分享到:
评论

相关推荐

    沟通技巧-程序员也该懂的技巧

    对于大多数程序员都是给人不善交流沟通的感觉,但实际开发中程序员有大量的沟通需要,需求的把控,产品的设计都是要通过沟通才能防止需求理解错误而导致的设计失误和大量返工,所以沟通之道,程序员非常需要哦!

    程序员如何提高英语水平.pdf

    正 英语可以说是计算机技术世界的官方语言,其重要性...这对"程序员如何能提高英语水平"这个课题来说正好是个很好的切入点。所谓"提高英语水平"可以解释为"能使用英语有效地把手边的软件开发工作做好,令外国客户满意"。

    【高清完整pdf】高效程序员的45个习惯 敏捷开发修炼之道

    3. 对事不对人 4. 排除万难,奋勇前进 第3章 学无止境 5. 跟踪变化 6. 对团队投资 7. 懂得丢弃 8. 打破砂锅问到底 9. 把握开发节奏 第4章 交付用户想要的软件 10. 让客户做决定 11. 让设计指导而不是操纵开发 12. ...

    程序员面试攻略+第2版

    强调沟通方法是本书的亮点,本书包括如何编写一份重点突出的个人简历,如何与猎头公司和人力资源代表打交道,在面试时如何与面试考官进行沟通等内容。 本书不仅适合求职者,也适合人力资源负责人和项目经理兼面试...

    程序员面试攻略 绝对第2版 绝对中文.part1

    强调沟通方法是本书的亮点,本书包括如何编写一份重点突出的个人简历,如何与猎头公司和人力资源代表打交道,在面试时如何与面试考官进行沟通等内容。 本书不仅适合求职者,也适合人力资源负责人和项目经理兼面试...

    编程修养(程序员需要注意的关于编程的注意事项)

    什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?... 3、与人积极交流沟通的能力,有团队精神。 4、谦虚谨慎,戒骄戒燥。 5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。

    北漂5年程序员现状:有人年薪百万,有人基层搬砖

    在大学身为班长的李亚军有较好的领导能力,他开始在跨组合作的项目中主动承担起许多程序员不愿意去做的沟通联系工作。 后来部门结构调整,他 TL 离职,李亚军便承担起组长的工作,开始边开发边管理的忙碌过渡期。他...

    适合程序员的简历模板,可以直接修改

    引起注意:介绍语言应该具有吸引人的特点,能够引起雇主的注意。可以使用精炼、生动或独特的词语来表达个人特质和技能。 自我定位:介绍语言应清楚地传达你作为程序员的定位和专长领域。你可以强调你的编程语言、...

    程序员的数学课2021年

    │ 02 逻辑与沟通,怎样才能讲出有逻辑的话?.mp4 │ 05 求极值:如何找到复杂业务的最优解?.mp4 │ 06 向量及其导数:计算机如何完成对海量高维度数据计算?.mp4 │ 07 线性回归:如何在离散点中寻找数据...

    软件工程师十个“不职业”行为

     软件是看不见也摸不着的,它的进度也看不见摸不着,需要软件工程师严格自律、善于沟通;  “软件开发是创造性的劳动,创造性劳动依赖个人主观能动性,没有自我激励是不可能成为出色的软件工程师的;”  ...

    【127套】Java前端后端个人简历模板互联网IT行业程序员

    第二部分:你会什么技术,把你擅长的技术单独罗列出来,这样面试官一眼就能知道,你这个人技术的宽度如何,符不符合我们公司的技术栈,是不是我们需要的人才,但是这一步大多数人的简历都没有写  第三部分:工作...

    神级程序员python知识框架

    Python 编程,Python 要...曾经我们以为不需要每个人都会读书写字,但随着人们读写能力的提高,人与人之间的沟通变得更好学习Python,做数据分析,跟语文、数学、游泳、开车一样,是通用技能,现在打好基础,以后学什么都轻松。

    PHP程序员面试 切忌急功近利(更需要注重以后的发展)

    好的程序员需要具备沟通交流的技能,他们要有跟他人一起合作的能力。团队里不止你一个人! 事实上,人们会说:最好折中一下对技术上的要求,这样可以找出更能适应企业文化的人。 你不如这样说更合适:找不到那种技术...

    编程修养(带标签)养成良好编程习惯提高个人编程能力

    什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比 较快?我觉得都不是。对于一些技术细节来说和...3、与人积极交流沟通的能力,有团队精神。 4、谦虚谨慎,戒骄戒燥。 5、写出的代码质量高。

    程序员面试刷题的书哪个好-anlifenxi:anlifenxi

    程序员面试刷题的书哪个好 产品相关信息 1.你选择的产品是? 我所选择的分析产品是微信。 2.为什么选择该产品作为分析?  选择该产品的理由是个人比较喜欢聊天。对聊天工具所具有的一定功能有所了解,不过平时用的...

    可二次开发程序员表白代码.zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、...【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    FlexyCard程序员工程师web简历模板下载5089.zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、...【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    编程修养--C语言规范

    3、与人积极交流沟通的能力,有团队精神。 4、谦虚谨慎,戒骄戒燥。 5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。 这些都是程序员的修养,这里我想谈谈"编程修养",也就是上述中的第5 点...

Global site tag (gtag.js) - Google Analytics