青青子衿, 悠悠我心, 但为君故, 沉吟至今
« HTML5 杀不死移动应用新浪微博不是Twitter »

程序员的本质

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

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

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

程序员的本质

  人类世界的背景

  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. 实践(比如代码重构、单元测试、持续集成)——周期性活动,以保持系统可靠、健康与可改变。

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

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

  英文原文:Andriy Solovey  

  中文翻译:伯乐在线  敏捷翻译



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/2907.html
  • 文章排行:
  • 1.扣件
  • 今天来的比较快,上面还是有15个了。呵呵
  • 2011/11/29 23:26:46   支持(15)反对(8) 回复
  • 2.电动叉车
  • 我距离程序员还是差远了。
    注定是成为不了的
  • 2011/11/30 11:13:26   支持(12)反对(5) 回复
  • 3.爱微网
  • 在我朝,程序员的本质是程序猿~
  • 2011/11/30 20:29:55   支持(17)反对(10) 回复
  • 4.菠萝派
  • 我觉得程序员像当翻译一样,把需求通过计算机语言翻译给计算机,然后计算机为我们服务。
  • 2012/1/19 1:40:31   支持(18)反对(11) 回复
  • 5.卢松松
  • 就好像,以后不需要人干活,都用机器人是一个道理,呵呵
  • 2011/11/29 20:08:40   支持(21)反对(15) 回复
  • 7.sokoban
  • 这么短的篇幅说这么大的问题,过于空泛了。
  • 2011/11/29 20:09:07   支持(14)反对(9) 回复
  • 8.Yang_Ran
  • 编程语言就像是不同于英语的一门外语,大部分都只是学过而已,解决复杂的数学难题,八成要对应到作家了。
  • 2011/11/30 0:05:54   支持(15)反对(10) 回复
  • 9.冷山so
  • 程序猿、攻城狮、挨踢民工
  • 2011/11/29 20:23:18   支持(23)反对(19) 回复
  • 11.奔跑的浣熊
  • 我觉得程序员是很分裂很牛逼的人。在他们的世界里他们创造世界,在现实的世界要接受现实。
    jffwpr 于 2011-11-30 0:34:46 回复
    哈哈,一语道出了程序员感觉苦闷的地方。
    jffwpr 于 2011-11-30 0:41:00 回复
    做程序员的伤不起。
    asj 于 2011-11-30 9:26:53 回复
    大部分程序员都没有机会或能力在程序中去创造世界,但是基本上都很善于给后续的同行创造麻烦。
  • 2011/11/29 20:14:35   支持(16)反对(13) 回复
  • 12.微之生物
  • 怎么会?电脑智能靠的不是程序吗?
  • 2011/11/29 20:54:19   支持(14)反对(11) 回复
  • 13.mn
  • 其实互联网的牛人们的收入,是没法比的,程序员也是一个工种,其他的人也是一种工种,只是看着更多的一种脑力劳动,另外,来了,就给博主增加一些收入,有广告,呵呵,会常来的。
  • 2011/11/30 14:04:31   支持(11)反对(8) 回复
  • 15.wordpress啦
  • 要做到一个优秀的程序员也是很不容易的。
  • 2011/12/6 15:40:26   支持(14)反对(12) 回复
  • 16.飞仔网
  • 程序猿、攻城狮、挨踢民工
  • 2011/11/29 22:05:27   支持(15)反对(14) 回复
  • 18.猪头博客
  • 但是程序员 ,真的悲剧啊 。。。
  • 2011/11/30 0:21:36   支持(13)反对(12) 回复
  • 19.16622
  • 计算机是人类文明的最佳发明。 程序员也是伟大的!
  • 2011/11/30 10:35:59   支持(12)反对(11) 回复
  • 20.pc板
  • 程序员这个词对我来说还是太遥远了。。
  • 2011/11/30 13:28:26   支持(13)反对(12) 回复
  • 21.中国网络商务
  • 强的程序员应该是通晓实际业务流程,能够通过程序去优化、改善业务流程,只是简单的去写代码不利于发展
  • 2011/12/1 13:50:47   支持(19)反对(18) 回复
  • 22.牛国柱
  • 事实上,随着分工的细化,文章所列举的工作是产品经理在做了。
  • 2011/12/5 13:03:54   支持(12)反对(11) 回复
  • 23.JDoc
  • 答案不会自己浮出来,关键是要有解决方案。技术的本质,是一种解决方案。
  • 2011/11/29 20:28:09   支持(14)反对(14) 回复
  • 24.rechardchen
  • 黑客类题材看多了就这样。。
  • 2011/11/29 20:32:03   支持(13)反对(13) 回复
  • 27.园子
  • 只知道做程序员很累
    有很多代码要写。。。
  • 2011/11/30 16:13:29   支持(13)反对(13) 回复
  • 28.zsix
  • 程序员——思维——算法——脑力计算——最终还是需要脑力劳动
  • 2011/11/30 23:30:50   支持(8)反对(8) 回复
  • 29.时尚女包
  • 活着就是为了改变世界,程序员都是改变世界的一份子!
  • 2011/12/1 14:25:41   支持(15)反对(15) 回复
  • 30.这篇文章一般
  • 这篇文章真的很一般。
  • 2011/12/1 16:33:39   支持(11)反对(11) 回复
  • 31.1465968290579
  • hello ,
    哪位大神能够解释一下honest的用法,看了一下Beikao帝(Http://Www.Beikaodi.Com/word/honest.html)上的解释,不是太明白呢。
    time:1:24:50 PM
  • 2016/6/15 13:26:19   支持(0)反对(0) 回复
  • 32.audio77
  • 看大门呐.出出进进多少联系呢
  • 2011/11/30 0:24:17   支持(10)反对(11) 回复
  • 33.桑枫琳博客
  • 好的程序员不只是会写程序,还会变通
  • 2011/12/1 14:57:18   支持(13)反对(14) 回复
  • 34.包皮能不能割
  • 哥上学时不上进,所以离程序员很遥远
  • 2011/12/3 9:42:22   支持(13)反对(14) 回复
  • 35.吴青松说
  • 这种认识处于电影看多了的水平。。
  • 2011/11/29 20:18:28   支持(16)反对(18) 回复
  • 36.xzymoe
  • 这篇文章配的图片有点恶搞哦
  • 2011/11/30 10:04:52   支持(9)反对(11) 回复
  • 40.土木坛子
  • 程序员是褒义词还是贬义词?
  • 2011/11/30 7:11:03   支持(9)反对(12) 回复
  • 41.敏敏知音
  • 程序员是一项很苦的工作,不是高尚的工作,真的悲剧啊
  • 2011/11/30 7:50:33   支持(13)反对(16) 回复
  • 42.鸡啄米
  • 程序员纯粹的IT民工啊,累
  • 2011/11/30 8:43:58   支持(12)反对(15) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.