`
xpp02
  • 浏览: 1014591 次
社区版块
存档分类
最新评论

程序员的本质

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

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

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


分享到:
评论

相关推荐

    程序员的本质.docx

    程序员的本质.docx

    程序员面试宝典完整版 pdf

    这本书写得非常好,详尽讲述了作为一名程序员应该为面试做哪些准备,...作为大中专院校刚毕业的学生来说,正值找工作的关键时期,也许您能从这本书中获得实质性有价值的东西,程序员面度宝典完整版,分享给您下载阅读。

    以程序员视角来看计算机系统

    一本非常好的从程序员角度出发讲解计算机系统的书籍。从此书中我们可以看到计算机计算的本质到底是什么,如何构成的,各部分的协作,程序语言到机器语言,程序优化设计等等。

    从程序员的视角详细解读计算机系统.rar

    本书从程序员的视角详细阐述计算机系统的本质概念,并展示这些概念如何实实在在地影响应用程序的正确性、性能和实用性。全书共12章,主要内容包括信息的表示和处理、程序的机器级表示、处理器体系结构、优化程序性能...

    程序员编程艺术系列之经典算法研究 电子书【高清中文带书签】

    这才是计算机科学与编程的本质。于是,我们便把程序员面试题狂想曲系列更名为程序员编程艺术系列,然后把狂想曲创作组确定为编程艺术室。 并提出了我们的宗旨,即如下,编程艺术室致力于以下三点工作: 1. 针对一...

    《程序员》:基于需求的测试是软件测试的本质

    《程序员》:基于需求的测试是软件测试的本质.pdf

    源代码]程序员的数学基础课_从理论到Python实践.rar

    源代码]程序员的数学基础课_从理论到Python实践,从程序员的需求出发,精心挑选了程序员真正用得上的数学知识,通过生动的案例来解读知识中的难点,使程序员更容易对实际问题进行数学建模,进而构建出更优化的算法和...

    职业经营 1:程序员职业的本质(3).md

    程序员职业小白书,如何规划和经营你的职业

    宅男程序员写给老婆的计算机课程

    以下,开始本系列的第0篇——认清本质。只要掌握了编程的思想、数据结构、算法,使用不同的语言去表达是很容易的。 从今天起将开始的这个系列来自一位宅男程序员,这个系列是他写给老婆的电脑课程,后来经他老婆的...

    突破程序员基本功的16课.part1

    李刚老师在《疯狂Java:突破程序员基本功的16课(修订版)》中,试图为读者们展现出这些疑点、难点的实质,让读者能在瞬息之间,彻底掌握住这门语言的“内功心法”。  这不是一本包容了所有技术细节的手册,而是一...

    深入理解计算机系统(程序员角度的计算机系统)(原书第2版).part07

    本书从程序员的视角详细阐述计算机系统的本质概念,并展示这些概念如何实实在在地影响应用程序的正确性、性能和实用性。这是其中第七章

    JAVA程序员面试题

    JAVA程序员面试题 1.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的...

    JavaFX Script 语言教程(面向Swing 程序员).rar

    JavaFX Script 语言教程(面向Swing 程序员).rar JavaFX Script 语言教程(面向Swing 程序员).rar

    疯狂Java:突破程序员基本功的16课

    李刚老师在《疯狂Java:突破程序员基本功的16课(修订版)》中,试图为读者们展现出这些疑点、难点的实质,让读者能在瞬息之间,彻底掌握住这门语言的“内功心法”。 这不是一本包容了所有技术细节的手册,而是一本...

    《卓有成效的程序员》精选版

    卓有成效的程序员 作者 Neal Ford 这不是一本帮助最终用户更有效率...1、亚里斯多德“事物的本质性质和附属性质”理论 2、笛米特法则 3、“古老的”软件学说 多语言编程 1、历史与现状 2、路在何方 3、Ola的金字塔

    疯狂JAVA:突破程序员基本功的16课 源代码

    李刚老师在《疯狂Java:突破程序员基本功的16课》中,正是试图为读者们展现出这些疑点、难点的实质,让读者能在瞬息之间,彻底掌握住这门语言的“内功心法”。  这不是一本包容了所有技术细节的手册,而是一本Java...

    程序员必读-轻松掌握C语言精要

    轻松识破C语言陷阱,掌握不为人知的实质。程序员必读,轻松掌握C语言精要

    程序员简历模板

    求职”的本质其实就是人的流通,和一般的商业行为无异:一方求售、一方求货。未见其人,先睹其函。简历以书面形式传达一个人的学历、经历、专长、及其它,根据书写的格式、排列逻辑、语辞字汇,也可判读出撰写者的...

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

    通过阅读和实践这些材料,学生能够深入理解编程语言的本质,提高解决实际问题的能力,并学会如何将理论知识应用到实际项目中。总之,“可二次开发程序员表白代码.rar”不仅是一个富有创意和技术挑战的项目,它还鼓励...

Global site tag (gtag.js) - Google Analytics