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

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

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

人类世界的背景

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

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

Andriy Solovey相关推荐

  1. [FW]软件开发中的11个系统思维定律

    "我会更加努力地工作"--一匹名叫Boxer的马(出自乔治·奥威尔的<动物农庄>) 彼得·圣吉在其著作<第五项修炼>中提到的系统思维定律同样适用于软件开发. ...

  2. 支撑软件开发人员的三种精神

    blueski推荐 [2011-5-4] 出处:jobbole.com 作者:不详 导读:原文作者Andriy Solovey在softwarecreation.org上发表的一篇<Three ...

  3. 程序员是懒惰反复无常的伪知识分子,果真如此吗?

    "计算机编程中极少人是真正的艺术家,大多数人充其量不过是房屋粉刷匠而已."---Tim Bryce 管理顾问 Tim Bryce 不喜欢程序员,而许多程序员也不喜欢他.(注:Tim ...

  4. NIPS | 谷歌AI大军来袭,看450多名员工如何横扫今年大会

    一年一度的AI盛会NIPS又开始了. 会前数周,就有大神预计,驱车参会的谷歌员工会挤满加州从山景城到长滩的道路,就像这样: 图片来源:杜克大学陈怡然教授微博 但是,NIPS 2017的火爆程度,明显超 ...

  5. 从ReLU到GELU,一文概览神经网络的激活函数

    点击视学算法标星,更快获取CVML新技术 本文转载自机器之心. 选自mlfromscratch 作者:Casper Hansen 机器之心编译 参与:熊猫.杜伟 激活函数对神经网络的重要性自不必多言, ...

  6. 对比学习(Contrastive Learning)综述

    A.引入   https://zhuanlan.zhihu.com/p/346686467 A.引入 深度学习的成功往往依赖于海量数据的支持,其中对于数据的标记与否,可以分为监督学习和无监督学习. 1 ...

  7. “它将改变一切”,DeepMind AI解决生物学50年来重大挑战,破解蛋白质分子折叠问题...

    来源:机器之心 本文约3800字,建议阅读9分钟 AlphaFold 2,128块TPU大力出奇迹,让别人无路可走. CASP14 组织者.年近七旬的 UC Davis 科学家 Andriy Krys ...

  8. 独家 | 浅谈强化学习原理(附代码链接)

    作者:Michel Kana 翻译:王琦 校对:王雨桐 本文约4900字,建议阅读15分钟. 本文介绍了强化学习的基本原理,并通过代码实例来讲解如何找到最优策略. Google在2017年年底发布了A ...

  9. 「它将改变一切」,DeepMind AI解决生物学50年来重大挑战,破解蛋白质分子折叠问题...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 生物学界最大的谜团之一,蛋白质折叠问题被 AI 破解了. CASP14 ...

最新文章

  1. 大数据会说话也“慧”说话
  2. 2022-03-09
  3. SAP Spartacus cxFocus增添了refresh Focus功能后的一些考虑
  4. 单词嵌入_单词嵌入与单词袋:推荐系统的奇怪案例
  5. 【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)
  6. C++析构函数执行顺序
  7. 找通项公式在线计算机,在线硬盘分区计算器工具
  8. linux的sonar安装,Linux安装sonar
  9. python 字符串 find_Python 字符串 find() 方法
  10. 简明的后台样式查询模板
  11. C++_结构体中const使用场景_结构体_毕业设计案例_使用结构体数组_随机数种子---C++语言工作笔记027
  12. 玉米叶片病害识别与分类的优化密集卷积神经网络模型
  13. 【find】Linux中find常见用法示例
  14. mac sudo: /etc/sudoers is world writable
  15. 3D模型欣赏:《Sword girl》古风 女战士角色 次世代 zbrush雕刻
  16. maven本地仓库配置
  17. 【APS】90张专业PPT学习高级计划与排程(APS)
  18. 一心多用多线程-细谈java线程池submit与execute的区别
  19. 原始传奇显示区名的服务器,《原始传奇》新人新区需要了解的一些问题
  20. matlab点云数据dem,一种基于点云数据的DEM生成方法

热门文章

  1. WSGI和uwsgi和uWSGI---概念
  2. css的四种样式及其优先级
  3. 【Mysql】mysql命令常用语句
  4. 博客园主题TJBK老版本代码
  5. 山寨机主,警惕你手机里的小偷
  6. 【ArcGIS微课1000例】0029:ArcGIS绘制平行线(构造平行公路)
  7. mysql获取每周的周一周日的规则写法
  8. 彻底解决黄牛党的方案
  9. 二叉树实现四则运算计算器(含源码演示和详细说明)
  10. 搜狗用这个骚技术,把百度气的吐血了!