`

程序员的本质--->>转自php100

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

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

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

  人类世界的背景

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

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

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

相关推荐

    程序员常见问题解决方式

    - 导航至"计算机配置" -> "Windows 设置" -> "安全设置" -> "本地策略" -> "安全选项"。 - 查找"网络访问:本地帐户的共享和安全模型",将其设置为"经典模式",确保远程访问不受限。 2、80端口被占用 如果80端口被...

    php课后习题及答案php

    <html><title>…</title><body>…</body></html>:<title> 应该放在 <head> 标签内。 - C. <html><title>…</title><frame>…</frame></html>:同 A 选项。 - D. <html><head>…</head><body>…</body></html>:...

    Smarty实例教程

    Smarty是一个流行的PHP模板引擎,它的主要目标是实现程序员和美工之间的工作分离,从而提高开发效率和维护性。在多人协作的项目中,这种分离尤其重要,因为它允许程序员专注于业务逻辑,而设计师可以自由地设计和...

    初级程序员PHP面试题

    根据给定的文件信息,以下是对“初级程序员PHP面试题”中所涉及的关键知识点的详细解析: ### 1. GET与POST的区别 GET与POST是HTTP请求中的两种常见方法,它们在数据传输方面存在本质差异。 - **GET**: 通过URL...

    从大学生到程序员 从大学生到程序员

    从大学生到程序员,这是一个从学术环境到职业领域的转变过程,涉及到多方面的知识和技能学习。首先,我们要明白学习的目标和动机。作为一个大学生,选择成为程序员可能是出于个人兴趣、职业发展或者追求经济独立和...

    CodeIgniter:php敏捷开发框架web快速开发详解

    下列网址可以找到一个针对十种框架的简明图表分析:http://www.phpit.net/article/ten-different-php-frameworks/。 如果你访问上述网址中相关产品的官方网站,你将会注意到,每个论坛都有一个共同的热点,就是到底...

    php-text-2-brainfuck:文本转脑转换器

    在编程领域,有一些独特的编程语言被设计用来挑战程序员的思维极限,其中最著名的就是Brainfuck。Brainfuck是一种极简主义的编程语言,其语法极其简单,但理解与编写却极具挑战性。它只有8个命令字符,分别为:`.`, ...

    PHP_smarty

    Smarty 是一款用 PHP 编写的高性能模板引擎,它的核心理念是实现逻辑与表现层的分离,即让程序员专注于业务逻辑开发,而不必担心页面设计的问题,同时,设计师也能独立进行页面设计,无需了解复杂的后端逻辑。...

    smarty实例教程

    Smarty是一个专为PHP设计的模板引擎,它的主要目标是实现应用程序的逻辑与界面设计的分离,使得程序员和美工能够独立工作,互不影响。在大型项目或者多人协作的环境中,这种分离尤其重要,因为它可以提高开发效率并...

    php+mysql笔记

    - **数据库本质**:强调数据库本质上也是一种文件,但其组织形式更为高效,特别适合于数据的管理,包括增、删、改、查等操作。 #### 四、MySQL安装与验证 - **安装MySQL**:第268讲介绍了如何安装MySQL。 - **验证...

    php-leetcode题解之二叉树的最大深度.zip

    在本压缩包“php-leetcode题解之二叉树的最大深度.zip”中,主要涵盖了使用PHP语言解决LeetCode上的一个经典算法问题——“二叉树的最大深度”。LeetCode是一个在线平台,提供了各种编程挑战,旨在提升程序员的技能...

    程序员教你用20种编程语言说:中秋快乐!

    通过学习多种编程语言,程序员可以更好地理解编程的本质和软件开发的模式,这在解决复杂的编程问题时尤其重要。 利用20种编程语言说出“中秋快乐”不仅是一种技术上的炫技,更是对编程语言多样性的体现,同时也传递...

    大道PHP 第四章 序言 doc

    3. **全面的PHP视频资源**:配合图书内容,提供了超过100堂的视频讲座,涵盖了20多项重要技术,降低了PHP程序员的学习门槛。 4. **权威、系统的开发实践视角**:由多位经验丰富的PHP一线开发人员历时两年编写,不仅...

    PHP的十个不容忽视的问题

    - **自定义扩展**:如果需要的功能不在PECL库中,还可以自行开发或雇佣程序员编写。 #### 三、PHP与其他语言的互操作性 ##### 3.1 跨语言调用 - **多语言支持**:PHP支持与多种语言进行交互,如Java、C#、Python、...

    程序员常见的WEB安全漏洞2022优秀文档.pptx

    程序员常见的WEB安全漏洞2022优秀文档 在这个优秀的文档中,我们将讨论程序员常见的Web安全漏洞,包括SQL注入攻击和跨站脚本攻击(XSS)。这两个漏洞都是非常常见的Web安全漏洞,对于程序员来说非常重要。 SQL注入...

    51CTO下载-开发月刊011期.pdf

    - **循环结构**: LOGO语言中的循环可以通过`REPEAT`命令实现,如`REPEAT 4 [FD 100 LEFT 90]`,表示重复四次,每次前进100步然后向左转90度。 #### 4. LOGO语言中的基本指令 - **移动相关指令**: - `Forward`: ...

    2023年软件开发程序员个人总结.doc

    ASP.NET的实现模型基于B/S架构,理解POST和GET的本质对于掌握ASP.NET的工作原理至关重要。服务器控件和事件处理机制,如AutoPostBack和SelectedIndexChanged,都是基于HTTP请求和响应进行的。 在项目管理和团队协作...

    20XX年程序员年度工作总结.docx

    【程序员年度工作总结】 这篇工作总结主要涵盖了以下几个IT领域的知识点: 1. **面向对象设计与设计模式**:文中提到,面向对象编程不仅仅是对软件开发技术的理论总结,更是从更高层次抽象出代码模块之间的关系。...

    10天学会php

    对于PHP程序员而言,这意味着: 1. **利用现有代码**:PHP社区庞大,每天都有无数开发者贡献代码。通过阅读和使用他人的代码,可以加速自己的开发进程,避免重复造轮子。例如,可以从CrazyCoder等网站获取资源。 2...

Global site tag (gtag.js) - Google Analytics