为什么有的程序员比别人高效10倍甚至10

为什么有的程序员比别人高效10倍甚至倍?那些星光熠熠的IT大牛们是如何长成的?他们是怎么踏入编程这一行的?他们都看什么书?他们认为优秀程序员应该拥有的技能是什么?

这些问题不仅你好奇,全世界的程序员们都很想知道。于是,在一个炎热无聊的下午,一位波兰程序员突发奇想:

我可以通过网上公开的信息找到这些牛人的email,向他们提几个问题试试,看看他们是否会回复我的邮件。

他真的去做了,也真的做成了!

这位程序员回忆说:这绝对是一次价值非凡的体验。因为这些牛人都是他认为很有趣、很佩服,也确实干了很多大事的人。

明星/阵容

LinusTorvalds

Linuxkernel作者。

DaveThomas

《PragmaticProgrammer

程序员修炼之道》和《ProgrammingRuby》和其他优秀书籍的作者。

DavidHeinemeierHansson

写了RailsFramework-web开发框架。

SteveYegge

可能是最不为人所知的,但也是回答得最有趣的一个,他的博客很有名,也是关于编程的。他也是游戏“Wyvern”的作者。

PeterNorvig

Google的研究部主管,著名的Lisper,写过很著名的AI方面的书。

GuidoVanRossum

Python发明者。

BjarneStroustrup

C++之父。

JamesGosling

Java之父。

TimBray

XML与Atom规范缔造者之一。

现在上主菜1.您如何学的编程?上过什么学校?

DaveThomas:

读中学时我在当地一间专科学院上过电脑课。我整个儿被迷住了:我爱上了编程,并四处找开设有软件课程的学校。后来我上了ImperialCollege,LondonUniversity的分部。当时他们才刚开设软件课程第二年,说起来很难相信:教职员工和学生们一起工作,把那些东西弄好,大家从中都获益匪浅。在那里读的本科课程给我打下了强大的软件开发基础。我本想呆到博士毕业,但还没等到开始读博士就被人挖走了。

你问题的重点是“你怎样学的编程?”真正的答案是“我还在学编程。”我想优秀的开发者整个生涯都不断在学习。这可不仅是学习新语言和新库的问题:优秀的开发者经年不断的磨练自己的技术,提升自己的体验。

TimBray:

我原来想当数学教师来着。数学教学大纲里要求学生研修几门计算机课程。(结果就糊里糊涂成了计算机科学家?)

2.您认为程序员最应该拥有什么样的技能?

SteveYegge:

笔头和口头沟通的技能。除非你事先把自己的意见清楚地传达给每一个人,否则当程序员们开始工作时,你说什么他们都听不见。程序员应该不倦阅读,付诸文字,上写作课,甚至学会公开演讲。

LinusTorvalds:

是那种我称之为“品味”的东西。

我向来不以“有多专业”为标准来评价与我共事的人:有的人很会写代码,一下就能弄出一大坨,但他们给别人代码造成的影响则还要大坨,而这显然是由他们自己的代码风格和他们选择的解决方法所造成的。这就能告诉我他们有没有品味,而真相就是,没品味的人通常也不太好让他去判断别人代码的好坏,而他自己的代码到最后也不会是十分的好。

在开源的项目里,有一种能力非常重要,那就是沟通好你想干什么、怎么干的能力。向别人解释清楚你为什么非要用某种方式干某些事情的能力十分重要,并非人人有这个能力。

这么说吧,到最后也会有人搞出能用的代码来,虽然代码没什么品味,但是是可以正常工作的。这时你往往会需要另一个人(一个“品味”过关的人)去整理那些代码,使它的适用范围更广。仅仅是写出干净的代码、解决难题,不过是作为程序员必需有的最基本的能力而已。

DavidHeinemeierHansson:

强烈的价值观。有能力问自己:我做的事情有价值吗?太多太多的程序员把太多太多的精力浪费在无关痛痒的事情上面,却忽略了那些真正重要的事情。

PeterNorvig:

我觉得没有,专注算是吧。

DaveThomas:

激情。

JamesGosling:

会自我鞭策。想真正做得好,你得热爱你所做的东西。

BjarneStroustrup

清晰思考的能力:一个程序员必须理解问题并表述解决方案。

TimBray:

以事实为依据,不跟着感觉走。

3.您觉得数学和物理对程序员重要吗?为什么?

SteveYegge:

数学上有一个分支对程序员非常重要,它叫“离散数学”或“具体数学”。包括概率学,组合学,图论,归纳证明和其它有用的东西。我会鼓励所有程序员去学离散数学,无论他们能学多少。即使一点点也比完全不会强。

至于传统数学,我倒不常用到,但当我需要用到它就会很方便。举例来说,之前我只在工作中用到过一次微积分。我必需为某个服务从象正弦波那样的曲线图中计算出每日交通高峰期负载。最简单的方法就是求出特定时间内1/24曲线的积分。如果我不懂微积分,我就做不出合理正确的估算。

在我写Wyvern游戏的时候,我扎实的平面几何知识作用极大。日常基本工作中用得更多的是代数和线性代数。但是很少用到三角学和微分方程,微积分也很少用。

我会说我的数学基础带给我5%至10%的进步。如果我懂的更多,毫无疑问我会变得更好,所以每个星期我都抽出几个钟头来学习数学。

我喜欢物理,毕生都在探索尝试掌握量子力学的基本结构。但我没觉得物理对我作为一个程序员的工作有任何帮助。当然了,如果我在物理领域工作,象3D游戏编程,或某种类型的模拟,那就不同了。

LinusTorvalds:

我个人认为扎实的数学基础是好事情。我不大清楚物理会如何,但我深信懂数学,有良好的数学基础有助于使你成为更好的程序员。

DavidHeinemeierHansson:

一点用都没有。至少在商业目的的web编程上,一个人的笔头功夫好会比这重要的多。

PeterNorvig:

是的,电脑的很多方面来自数学:归纳,递归,逻辑等。

DaveThomas:

也许吧。但是老实说,我没见到他们之间有多大的关联。

然而,我的的确确发现一个人的音乐才华与他的编程技能有很大的关联。我也不知道为什么,我怀疑大脑的某个区域在提升你音乐才能的同时也会提升你的软件开发技巧。

GuidoVanRossum:

数学,是的(是一部分;我不管微分方程,但是代数和逻辑就很重要)。物理嘛,我认为没有,但保持对不同事物的兴趣是一件好事。

JamesGosling:

是的!它们教会你逻辑和推理。。。。拥有火眼金睛。在分析算法时数学无物可替。

BjarneStroustrup

这取决于程序员和编程工作。某些形式的数学分类还是非常有用,物理用的少,但学习物理是学习实用数学的最佳方法之一。

TimBray:

就我个人来说,我几乎从没用过我大学学到的数学知识。

4.您认为是什么使得有的程序员比别人高效10倍甚至倍?

SteveYegge:

我想如果你停下来想一下为什么运动员不是都一样好的话,你就会知道答案的。爱迪生关于天才的那段话也会给你启示。

LinusTorvalds:

我真的不知道。我想有些人就是能够更好地把精力集中在那些有用的事情上,我想他们天生就是会这样。我认识的很多程序员从小就这样。

DavidHeinemeierHansson:

把难题转化成“易”题的能力。

PeterNorvig:

调整头脑去适应问题的能力。

DaveThomas:

他们关心自己所做的。

GuidoVanRossum:

遗传性头脑结构差异。

JamesGosling:

他们深思熟虑。他们不会仓促行事,七拼八凑。他们对结果胸有成竹。

BjarneStroustrup

首先,缺乏专业且足够的训练,导致基础太差。第二,有些人有“智慧”(清晰思考和直达事物本质的能力)、经验和工具知识。编程在这些方面有很大空间,因为编程是理论和实践的结合,二者都离不开领域知识。

总结起来,优秀的程序员有着相似的特征:

他们勤奋、专注、能深入地思考问题,洞悉事物本质,并且善于提取关键要素,化繁为简,谋定而后动。

这些,或许就是他们比别人更高效的原因吧!

本文节选自:伯乐在线。译文主要由flynetcn翻译。伯乐在线补上了BjarneStroustrup的对应译文。原文标题《Stiffasks,greatprogrammersanswer》。









































治疗白癜风最好的药物
中科获“聚力共健”品牌影响力



转载请注明:http://www.jiaju1314.com/xxzl/xxzl/10280.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了