`
java-mans
  • 浏览: 11981717 次
文章分类
社区版块
存档分类
最新评论

不与人沟通的程序员不是好程序员

 
阅读更多


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

  在这篇文章中,我想给不知情的人解释一下程序员到底是做什么的:

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

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


  人类世界的背景

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

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

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

此文来自龙铭洪博客,转载请注明:http://blog.csdn.net/long892230

分享到:
评论

相关推荐

    沟通技巧-程序员也该懂的技巧

    程序员往往需要与产品经理、设计师、测试人员甚至是非技术团队成员进行交流,因此,他们必须掌握有效的沟通技巧以确保需求被准确理解,避免设计失误和减少不必要的返工。 沟通技巧培训经常提到的一个重要概念是“约...

    程序员的酸甜苦辣 程序员的酸甜苦辣

    如何在技术领域保持专业,同时又能处理好与他人的关系,是程序员生涯中不可或缺的一环。这就像菜肴中的盐,虽然看似微不足道,但却是味道的关键。 总的来说,“程序员的酸甜苦辣”是对IT从业者生活状态的生动描绘。...

    程序员考试 程序员考试

    操作系统是管理计算机硬件与软件资源的核心系统,理解操作系统的原理能帮助程序员更好地优化程序性能,处理进程调度、内存管理等问题。 ### 4. 计算机网络知识 计算机网络涉及数据传输、网络协议(如TCP/IP)、...

    程序员第二步:从程序员到项目经理

    9. IT行业的相关知识:尽管从程序员转型为项目经理不需要直接编写代码,但仍然需要对当前IT行业技术趋势有基本了解,以便更好地理解技术团队的工作,并能和客户及干系人进行有效对话。 10. 适应性与学习能力:项目...

    程序员(程序员受益终身的文档)

    在与人交流时,程序员可能会出现不善于倾听和表达的问题,这在团队合作中尤其显得突出,影响了工作效率和个人形象。 #### 沟通的重要性 在团队协作中,有效的沟通是确保项目成功的关键。它有助于清晰地传达需求、...

    程序员的缺点与无法忍受的事

    【程序员的缺点与无法忍受的事】 在这个科技日新月异的时代,程序员作为推动技术发展的重要力量,他们的工作方式和性格特点往往与常人...通过有效的沟通、培训和管理,可以缓解程序员与他人间的冲突,促进项目的成功。

    程序员面试宝典 程序员

    2. **算法与数据结构**:熟练掌握常见的排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等)和搜索算法(线性搜索、二分搜索等)是程序员的基础技能。同时,理解不同数据结构(如栈、队列、树...

    程序员的个人发展

    程序员不应该只是埋头写代码,而应该站在更高的层面,理解业务逻辑和行业背景。这样,开发出来的软件才能更加贴合实际应用场景,具有更强的市场竞争力。通过系统性地学习行业知识,程序员可以在技术与商业之间架起...

    程序员的酒桌术语

    在这个过程中,形成了一些特有的“酒桌术语”,这些术语既包含了对工作状态的描述,也蕴含着程序员之间的幽默与自嘲。下面将详细介绍这些术语及其含义。 #### 二、术语详解 ##### 1. **“霍尔蒙”** - **含义**:...

    程序员如何做导师

    在谈论程序员如何做导师之前,首先需要...导师的角色不是简单的知识传递者,而是一个引路人,帮助学生成长为更全面的技术人才。这个过程需要导师和学生之间的双向沟通和理解,共同进步,最终实现团队和个体的共同成长。

    程序员笑话大全.docx

    1. 文档的重要性:在软件开发中,编写文档是为了让其他人更好地理解代码逻辑和功能,防止出现沟通障碍。程序猿往往认为写文档是繁琐的工作,但同时也意识到没有文档的代码同样难以维护。 2. 编程学习路径:描述中的...

    一本关于程序员面试的书籍,希望大家喜欢

    除了技术知识,这本书还可能包含面试技巧、简历编写指南、职场沟通策略等内容,帮助程序员全方位提升面试表现。无论你是初入职场的新手,还是寻求职业发展的资深开发者,《程序员面试宝典》都是一本值得阅读和参考的...

    程序员悲哀之歌.txt

    鉴于此,我们可以围绕“程序员悲哀之歌”这一主题来展开一些与程序员职业相关的常见问题和挑战,以此作为生成知识点的基础。以下是对可能涉及的知识点进行的详细阐述: ### 知识点一:编程压力与心理健康 #### ...

    程序员读24史

    历史提供了一个广阔的舞台,让程序员能够更好地理解不同文化和价值观,这对于在全球化背景下工作的程序员来说,是必不可少的素质。 总的来说,程序员阅读二十四史,不仅可以丰富个人的文化底蕴,还能提升问题解决...

    程序员分成几种不同的境界

    根据对职业的理解和技能水平,我们可以将程序员分为不同境界,这些境界不仅体现在技术能力上,还包括了项目管理、创新思维、沟通技巧以及个人品质等多个方面。 五流程序员,他们主要关注技术和工具的更新。这一层次...

    程序员面试100问秘籍

    在数据结构与算法部分,面试者需要展示对常见数据结构(如链表、树、图等)的操作能力,掌握各种排序和搜索算法的原理和实现(包括但不限于快速排序、归并排序、二分查找等),并能够在实际问题中灵活应用这些算法。...

    程序员必备高清壁纸.zip

    在这个信息技术日益渗透到我们生活方方面面的时代,程序员已经成为了现代社会中不可或缺的重要角色。他们夜以继日地在键盘上敲击,用代码构建数字世界的城堡。然而,长时间面对屏幕的工作环境难免会让人感到疲惫。...

    程序员想如何突围而出

    在当今社会,信息技术(IT)行业的吸引力对众多渴望技术成就和个人发展的年轻人而言不可小觑。然而,随着时间的推移,这些年轻的程序员们逐渐意识到,这个职业道路并不像起初想象的那样简单。面对高强度的工作、不断...

    程序员怎么选择发展方向

    本文旨在从不同的角度探讨程序员可以选择的职业路径,并深入分析每条路径的特点与挑战。 #### 专家级程序员 对于对特定技术领域充满热情并愿意深耕细作的程序员来说,成为**专家级程序员**是一条明确的发展路径。...

    程序员地区城市分布,新一线城市程序员大军崛起

    在中国,程序员的职业选择与地域分布紧密相关。传统上,一线城市——北京、上海、广州和深圳,是程序员就业的主要集中地。这些城市因其经济发展、企业密度和文化多元性等因素,一直是IT人才的磁石。然而,随着时代的...

Global site tag (gtag.js) - Google Analytics