很多人认为计算机变得如此智能,所以在不久的未来将不再需要程序员。另外一些人认为程序员是天才,他们在电脑前能不断地解决复杂的数学难题。甚至不少程序员对他们是做什么的都没有清晰的概念。在这篇文章中,笔者想给不知情的人解释一下程序员到底是做什么的。
程序员是将人类想法翻译成计算机语言的译者。
他们是两种世界之间的纽带。你认为维护这个纽带很容易吗?
人类世界的背景
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
中文翻译:伯乐在线 敏捷翻译
分享到:
相关推荐
书中通过对摩托车维护的具体例子,引申出对哲学、质量以及技术工作本质的思考,对于程序员来说,可以从中获得很多启发。 #### 7. 《哥德尔、埃舍尔、巴赫:集异璧之大成》(Godel, Escher, Bach: An Eternal Golden...
他们会专注于技术的本质,而不是盲目追求潮流或者夸夸其谈。 第三,死气沉沉和不求甚解的程序员容易停滞不前。编程需要持续的热情和探索精神,只有对新知识充满好奇,不断学习,才能保持竞争力。 最后,强调客观...
"程序员的数学系列.pptx" 《程序员的数学系列》是一本面向程序员群体的数学读物,旨在帮助他们掌握数学基础知识,从而更好地应对编程中的实际...同时,数学还能启发程序员思考问题的本质,帮助他们发现新的解决方案。
【程序员的本质】 程序员,顾名思义,是将人类思维转化为计算机语言的专业人员。他们的工作不仅仅是编写代码,更是充当人类与计算机之间的桥梁,将抽象的需求和想法转化为具体可执行的程序。这一过程并非易事,因为...
跳槽能带来新的机遇,如更高的薪资、更大的挑战以及更丰富的经验积累,但同时也需要谨慎处理,确保每次跳槽都能带来实质性的职业进步。 标签中的“项目经理”指出,程序员可以通过积累经验,逐渐从技术岗位转向管理...
能够抽取问题的本质特征,忽略无关紧要的细节,可以帮助程序员编写更清晰、可维护的代码。 3. 系统思维:系统思维是理解整个系统以及其子系统是如何工作的能力。程序员需要能够理解软件是如何在不同的层次上交互的...
对于想要深入学习C++的程序员来说,阅读高质量的书籍是提升技能的关键。以下是一份详细的C++程序员必读书目清单,分为五个阶段,逐步引导读者从入门到精通。 阶段1:基础入门 1. 《Essential C++》:这本书适合C++...
- **审题技巧**:仔细阅读题目要求,理解问题的本质,明确解题的目标。 - **时间管理**:合理分配答题时间,优先解决自己擅长的问题,避免在难题上浪费过多时间。 - **代码规范性**:保持代码清晰易读,注释充分,...
程序员在编写代码、阅读文档和解决问题的过程中,经常需要接触和使用大量的专业英语词汇。这些词汇涉及到编程语言、数据库、编程框架、算法设计、数据结构、软件工程以及计算机基础理论等多个方面。以下是基于提供的...
其中,学习的核心本质并不仅仅是掌握编程语言,更是培养一种解决问题的能力,即“软件开发能力”。 “软件开发能力”包含数学能力和语文能力。数学能力意味着理解和应用数据结构来解决实际问题,设计高效算法来优化...
很多程序员在学习过程中,习惯于浅尝辄止,满足于完成任务,而没有深入探究问题的本质。此外,过度依赖搜索引擎解决问题,而不是通过阅读文档、书籍或自己思考来解决问题,也会限制个人的成长。 **避免策略**:建立...
通过以上几个方面的深入探讨,《程序员跳槽全攻略》不仅提供了关于求职行为本质的深刻见解,还为准备跳槽的程序员们提供了实用的操作指南。无论是对于初入职场的新手还是希望职业进一步发展的资深人士,这本书都具有...
由于提供的【部分内容】仅是一些链接,无法提供实质性的知识内容,因此上述知识点均基于对标题和描述的理解,以及对程序员和项目经理角色的常识性分析。希望这些知识点能够帮助有志于成为项目经理的程序员们,更好地...
《程序员面试金典 第5版》英文版是一本广受欢迎的书籍,专为准备进入IT行业的程序员们提供了全面而深入...通过阅读和实践书中的内容,你将更好地理解编程的本质,掌握解决实际问题的策略,从而在激烈的竞争中脱颖而出。
"WORD(已排版),方便直接打印"表明资料是用Microsoft Word格式整理的,且已经过排版处理,适合阅读和打印,这为学习者提供了便利,可以在纸质上进行学习和笔记。 【标签解析】 "程序员"这一标签明确了这份资料的...
### Windows程序员需要学习的知识点 #### 一、操作系统API与Windows API 对于Windows程序员而言,首先需要掌握的是操作系统API(Application Programming Interface),尤其是Windows API。Windows API是Microsoft...
【标题】"2008年程序员真题与答案"所涵盖的知识点主要涉及当年的程序员资格考试,这个考试通常包括上午的基础知识部分和下午的编程能力或应用技术部分。以下将分别对这两个部分进行详细解析: 1. **基础知识**: -...