好的程序员就是要和人沟通

  Computers are useless. They can only give you answers. – Picasso

  计算机其实没有什么作用。因为他们只能告诉你答案。——毕加索

  有很多人(甚至包括我岳母)认为计算机变得如此智能,所以也许在不久的未来就将不再需要程序员。而另外一些人认为程序员就是天才,他们可以坐在电脑前不断地解决复杂的数学难题。但是甚至有不少的程序员对他们是做什么的都没有民去恶清晰的概念。

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

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

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

  

  人类世界的背景

  The problem with people is that they’re only human. - Bill Watterson

  人类的问题是,他们只是人而已。——比尔·沃特森

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

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

  计算机世界背景

  Part of the inhumanity of the computer is that, once itiscompetently 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. 实践(比如代码重构、单元测试、持续集成)——周期性活动,以保持系统可靠、健康与可改变。(关于代码重构,可参见伯乐在线职场博客《明星软件工程师的10种特质》这篇文章中的第3点。)

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

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

  译文出处:伯乐在线- 职场博客 - 程序员

  译文链接:http://www.jobbole.com/entry.php/821

时间: 2024-09-17 03:28:31

好的程序员就是要和人沟通的相关文章

程序员为啥不被人喜欢

林语堂有提到不被人喜欢的十种原因: 一.腰有十文钱必振衣作响.  二.每与人言必谈及贵戚.  三.遇美人必急索登床.  四.见到问路之人必作傲睨之态.  五.与朋友相聚便喋喋高吟其酸腐诗文.  六.头已花白却喜唱艳曲.  七.施人一小惠便广布于众.  八.与人交谈便借刁言以逞才.  九.借人之债时其脸如丐,被人索偿时则其态如王.  十.见人常多蜜语而背地却常揭人短处. 我们反过来看看,作为程序员,哪些特质容易招人喜欢,让我们试试看能不能做一个被人喜欢的程序员. 编码又快又好 程序稳定Bug少 积

做程序员工资高福利好?其实是压力山大 很多人都快疯了

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 软件程序员在如今看来是一个既能挣钱又有工作保障的职业,但是,这种职业对你的精神健康却会造成巨大的伤害. 有两种事情几乎能让程序员疯掉. 一个是被人们称作"骗子综合征(imposter syndrome)"的东西.患这种症状的人通常是发现一起共事的所有程序员都比自己聪明.比自己有天份.比自己有才能.你生活中一直恐惧中,担心其他人会最终发现你是个冒牌货.你的技术和能力是装出来的. 经常会有女性程序员坦白说遭受"骗子综合征(i

做程序员压力山大,很多人都快疯了

软件程序员在如今看来是一个既能挣钱又有工作保障的职业,但是,这种职业对你的精神健康却会造成巨大的伤害. 有两种事情几乎能让程序员疯掉. 一个是被人们称作"骗子综合征(imposter syndrome)"的东西.患这种症状的人通常是发现一起共事的所有程序员都比自己聪明.比自己有天份.比自己有才能.你生活中一直恐惧中,担心其他人会最终发现你是个冒牌货.你的技术和能力是装出来的. 经常会有女性程序员坦白说遭受"骗子综合征(imposter syndrome)"的折磨,这

为什么很少见人傻钱多的程序员炫富?

程序员一直都是一个备受人们关注的群体,据IDC2015年的统计数据,全球约有1850万名程序员,中国占10%.随着近年全国互联网创业热潮的兴起,"互联网+"."云计算"以及"智能硬件"等领域发展迅速,市场对程序员的需求更为旺盛.除了需求旺盛之外,程序员的工资水平也相对较高.有人说,程序员行业刚刚步入中产阶层,其实...这帮程序猴子们早就迈进中产了,只不过他们从来不炫富,或者说他们根本不知道自己有多少钱...Org,对于程序员而言,电脑和键盘.鼠标

何为程序员思维

看到这个题目,我想起了很多很多........... 首先,我说明我为什么要写这篇文章了. 一个原因是逸惋惜峥嵘岁月岁月稠,当初读大学的时候,学习计算机技术的课程,我过多的走向了两种极端的状况.一种情况,我愿意把他归结于本末倒置,例如我学习<C++面向对象程序设计>的时候,更多的是研究C++的语法,却忽略了面向对象的思想,到头来,C++语法学会了,但是最重要的面向对象却没有理解,也不知道他能够真正的做些什么.另一个情况,我把它理解为目标很宏大,理解很困难,例如,我学习软件过程的时候,开始,课程

程序员成长规划

引言 我的程序员成长之路 程序员的成长经历往往很相似,大部分的人走过了最前面相同的一段路,而有的人则走得更远.总结自己这些年来的历程,这也许能让年轻的程序员少走一些弯路,成长得更快:或许更好一些,能让大家从中得到一些启发,早日进入优秀程序员的阶段,实现梦想,释放激情. 第一阶段,最初是在学校里学习计算机基础知识,学习经典的程序设计语言,编写测试用的小程序.这个过程可以说是对计算机和程序设计的入门阶段.这个阶段主要是培养了自己对计算机软件的兴趣,打下了良好的计算机基础知识. 第二阶段,而后参加工作

典型的 C++ 程序员成长经历

一个典型的 C++ 程序员成长经历: 1.  完整的学一遍 C++ 所有语言特性,典型书籍 "The C++ Programming Language" Part1, Part2, "C++ Primer"     感觉 C++ 像大杂烩(多编程范型),各种精妙的语法特性 (friend, virtual/RTTI, const/mutable, exception, template),太多精妙的东西容易导致记忆琐碎化,学了又忘了,尤其是那些很少用的部分    

从程序员到项目经理:完美主义也是一种错

追求完美是一种可贵的精神,完美主义也历来被认为是一种优秀的品格.可是在项目中,完美主义也是一种错,虽然是一种"美丽的错误".项目讲求平衡,要的是合格,而不是优秀:要的是70分,而不是100分! 1.两极分化的程序员 相信在很多人眼里,程序员都是工作一丝不苟.对代码精雕细琢.精益求精的人.瞧,他们在电脑前面一坐就是大半天,如果不是追求完美之人,谁能这样坐得住板凳? 可 是依我所见,在"追求完美"这个问题上,程序员其实是严重的两极分化.有一部分程序员确实对自己的代码要求

一位年轻女程序员的困惑

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断淘宝客 站长团购 云主机 技术大厅 我毕业一年了,学的是信息技术专业,毕业的时候还没有想好要做什么,想做翻译,但是英语虽然有6级证,但是口语不好.会一点日语.因为做程序员工作好找,就进了这一行.(我在大连找工作.) 其实当时想法挺单纯的,就是觉得做程序员比较其他工作和人的交往不那么多,而且搞技术的不会有太多黑暗龌龊的东西. 可是工作了以后我发现其实不是,有时候很多人不是