设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

对九个超级程序员的采访

2012-9-14 10:48| 发布者: 红黑魂| 查看: 15261| 评论: 1|来自: 酷壳网

摘要: 原文出处:酷壳 – CoolShell.cn原文:《QA With Nine Great Programmers》时间有限,我只能粗译,难免错误。这篇访谈源自2006年,最先发布在波兰程序员 Jaroslaw “sztywny” Rzeszótko (AKA “Stiff”) 的博客上 ...

原文出处:酷壳 – CoolShell.cn

原文:《Q&A With Nine Great Programmers》时间有限,我只能粗译,难免错误。

这篇访谈源自2006年,最先发布在波兰程序员 Jaroslaw “sztywny” Rzeszótko (AKA “Stiff”) 的博客上。但是这篇博文现在找不到了。非常感谢他能授权我重新发布这个博文。

在一个炎热无聊的下午,我突发奇想。我想通过电子邮件的方式对那些我非常感兴趣 和非常敬重的程序员问10个问题。准备这10个问题我只花了5分钟,这些都是我个人想问他们的问题,所以,我基本上没想太多要问他们什么。最后两个问题和 编程没有什么关系,我就是想问题这些人的一些兴趣爱好。另外,不是每一个人都想回答我的,这是我第一次做“访谈”,所以,我犯了一些错误,让一些问题没有 回答。不管怎么样,我得到了很多很有意思的内容,所以,这对我绝对是一次很有意义的经历。
 

并不是没一个人都回了我的邮件,也并不是每一个人都同意回答我的这些问题,也许在我发布这篇文章后我会得到那些回答,但是我已经迫不及待想把这些东西发布了,所以,我可能会更新这篇文章(更新:2006年3月8日,我收到了Bjarne Stroustrup的回信

– Jaroslaw

介绍

  • Dave Thomas – “Pragmatic Programmer”(注:douban) 和 “Programming Ruby”(注:douban) 以及其它一些优秀书籍的作者。 你可以在 这里 读读他对编程的一些想法。
  • Steve Yegge – 他可能并不那么知名,但是他给了很多有意思的回答。他有一个很火的关于编程的 blog,他也是游戏 ”Wyvern” 的作者。(陈皓注:他最火的是去年在google+上对google和amazon的吐槽,06年他应该在google了)

Q 1: 你是怎么学编程的?是从学校里学的吗?或者你没有上过学:) ?

Steve Yegge

在我17岁的时候,我在HP的计算器中用他们的RPN 栈语言自学编程的。在这之前,我尝试过学习编程一两次,但都没有学成。HP 28c 和 48g 的科学计算器是一个很牛的东西,而且还有不错的文档。我搞了一本3D图形的书,并很费力地把其中的Pascal语言转成RPN栈语言,并用48g画了一个 3D的线框架图。运行的还不错,在我买了PC和Turbo Pascal之后,我开始认真地学习编程。在我进入大学计算机科学专业之前,我已经是一个不错的程序员了。

我在华盛顿大学拿到了计算机科学学位,这绝对是有价值的,所以,我建议所有的程序员都应该得到计算机科学专业的学位。

Linus Torvalds

我没有在学校里学过编程,我在主要是读我自己想读的书,或是就直接去编程 (一开始在 Commodore VIC-20 学编程, 然后是 Sinclair QL上编程)。

当然,我觉得上大学非常有用。我没有去一个工科大学,我上了赫尔辛基大学,这是一个比较偏理论的大学,所以,那里的教育并没有那么多的编程的东西 (编程只是很少一部分),这里大多数的课程都倾向于教一些基础概念的东西,如:复杂性分析。看上去很无聊,甚至有点浪费时间,但是我还是觉得这些课有用, 我对大多数课都还比较enjoy。所以,我觉得我可能在这些方面是一个比较好的程序员。

David Heinemeier Hansson

我学编程是从用HTML做我的第一个网页开始的。那时,我想当我的网页能动态地显示一些内容,所以,我选择了ASP和PHP。在做完这个网页后,我知道了怎么去编程,于是我开始我的计算机科学和商业管理学位的学习。

Peter Norvig

我是从高中和大学课程中学编程的,但是我还是觉得我自己学得更多。

Dave Thomas

我是在高中学编程的。我完全地迷住了,我对编程爱得无法自拔,然后,我开始挑选那些提供软件开发课程的大学。最终,我去了伦敦大学的帝国学院。第二 年我就开始学习软件开发的课程了,那绝对是非凡的,学生和教员在一起工作把教材做得更好,每一个人都可以从中学到很多。这些课程给了我难以置信和非常雄厚 的软件开发背景。我在那里读到了博士,最后去创业了。

关于“我是怎么学编程的”这个问题,我的回答是“我现在还在学编程”。我认为好的程序员一生都在学编程。这并不是去学一门语言或是一个代码库,好的程序员会对他们的编程技艺一年又一年地精益求精。

Guido Van Rossum

我去的那个大学有一个大型主机和很多不同的计算机课程。这对我很重要。

James Gosling

起初,我是自学的。在我去上大学之前,我就找到了一份程序员的工作。但是我很高兴我去了大学,在那里有很多乐趣,最终我学到了博士。

Bjarne Stroustrup

我先上的是Aarhus大学, 然后是 剑桥大学(Cambridge),这两个大学教了我很多很有用的东西,这些东西为了以后的工作打下了基础。另外,我对编程和钱的关系学得非常好——知道了真实世界的问题,正确性,维护性,准时交付,等等,这些比教育可能更重要。

Tim Bray

我本来想去做一个数学老师的。但是,那个学数学的大学要我去学几个计算机的课。

Q 2: 你们觉得对程序员最重要的事是什么?

Steve Yegge

沟通能力(写和说)。除非你可以让你的想法更有效率地传递出去,否则你不可能做得比编程更多的事。程序员应该疯狂地阅读,锻炼写作能力,参加一些写作培训课程,甚至锻炼在公开场合演讲的能力。

Linus Torvalds

It’s a thing I call “taste”. 有一件事,我把它叫做“品味”。

我倾向于不从熟练程度来评判那些和我工作过的人。这些人能非常艰苦地写出很多代码,但是我想从他们对别人的代码的反应做出评判,这样我们就可以明白 他们自己写的代码怎么样,知道他们使用的方法怎么样。他们对别人的评判还告诉我,他们是不是有好的“品味”。是这样的,如果一个人没有“好的品味”,那么 他一般不会很好的评判他人的代码,他自己写的代码通常也不会很好。

哦,这并不只是唯一的事。还有一件事,尤其在开源项目里,那是他是否有能力能和别人进行简单的沟通,告诉别人他要干什么,怎么干。这个能力可以告诉别人为什么你干的事是非常重要的,并不是所有的人都有这个能力。

也就是说,有一些人可以写出很不错的代码,但他们并不一定能解释这些代码,他们也并不一定有好的品味,但是代码可以运行得不错。有时,你需要另一个 人(有那种不错的品味的人)把他的代码转成更好的形式。也就是说,任何一个程序员都需要那种可以用清晰的代码来解决复杂问题的基础能力。

David Heinemeier Hansson

很强的对有价值的事的感觉。你可以问问自己这个问题你有没有这种能力:我现在做的这个事值不值得做?很多程序员浪费了如大海一样的时间去做一些无意义的事。

Peter Norvig

我不觉得只有一个,如果要我说一个的话,我说是“专注”。

Dave Thomas

热情。

Guido Van Rossum

你的问题很难回答啊:-) 我猜,如果程序员会在早晨煎个鸡蛋做早餐,那真是无价的能力。

James Gosling

自我激发。你需要全身心地投入到你要做的事中。

Bjarne Stroustrup

把事想清楚的能力:程序必需要能清楚地理解问题并能清楚地表述解决方案。

Tim Bray

能为自己的直觉提供证据的能力。

Q 3: 你是否认为数学和/或物理是一种很重要的编程技能?为什么?

Steve Yegge

数学有很多的分支和程序员相关,他们是“离散数学”和“具体数学”。这些分支包括的学科有,概率论,组合数学,图论,归纳证明,和其它有用的东西。我会鼓励所有的程序员都去学习离散数学,无论能学多少,因为这总比什么都不懂强。

对于传统的数学,我也不经常用,但是我需要的时候这些数据知识会很管用。例如,在我之前的工作中我就用到了微积分。我需要估计每个小时中某服务的高 峰时间的流量负载,所以,他的负载是跟着太阳走的就像一个正弦曲线一样。最简单的方式就是把每个小时的负载曲线给整合起来。如果我不知道微积分,我就不知 道怎么更为准确地估计。

当年我在开发我的Wyvern游戏的时候,我的平面几何的知识对我非常有帮助。而且经常使用代数和线性代数的知识。但我很少在工作中使用三角学或微分方程,微积分同样也很少。

我想说,简单的数学基础让我的技能比一般程序员好过5%到10%。如果我了解更多的数学,我确信我会比今天做得更好,所以,我每周都会花几个小时学习数学。

我喜欢物理,我还在学习物理,我会花我一生去理解量子力学。但是我个却没有发现物理对我的程序员工作有多有用。当然,如果我从事一些和物理相关的工作,可能会有用,例如:3D游戏编程,或是某种物理特性仿真。

Linus Torvalds

我个人认为有很强的数学背景是一件好事。但我不确信物理是不是这样的,但是我深信懂数学的人会让你成为一个更好的程序员。这些智力模型都是相通的。

David Heinemeier Hansson

根本没用。至少对业务编程和Web应用来说没用。但是数学可能对一个人的写作有很重要的帮助。

Peter Norvig

是的。很多相法都是从数学来的:归纳,递归,逻辑,等等。

Dave Thomas

也许吧。但老实说,我没见到过懂这些学科和好的程序员有很大的相关性。

然而,我见过有音乐背景和好的编程技能有很强的相关性。我不知道这为什么,但是我怀疑大脑中的某个区域可以让人即可以写出好的音乐,也可以写出好的代码。(陈皓注:@Sir阿怪 貌似就是这个例子)

Guido Van Rossum

数学,当然(对于一些学科是很重要的,我不关心微分方程,但是代数和逻辑学是很重要的),物理,我不觉得对编程技能有关,当然物理在其它很多地方很有意思。

James Gosling

当然!数学教会了我逻辑和推导……让我有了一双懂分析的眼睛。当我们分析算法的时候,数学是无法被取代的。

Bjarne Stroustrup

这要看程序员自己和项目性质了。以前的数据很有用,物理一般,但是学好物理是是学习应用数据最好的一条路。

Tim Bray

对我来说,在我的编程生涯中我从来都没有用过大学里教的数学。

Q 4: 关于编程,你们认为接下来的大事是什么?X-Oriented编程,Y语言,量子电脑 ?

Steve Yegge

我认为Web编程会逐渐变成最最重要的客户端编程。而对于原来传统的客端端编程都会被废弃,如: GTK, Java Swing/SWT, Qt, 当然,所有的和平台有关的东西,例如 Cocoa 和 Win32/MFC/等。

当然,这不会一晚上就发生了。这会在第一个十年内缓慢地发生,而在第二个十年内,Web Apps最终会胜利。工具,语言,协议,和浏览器技术都会进步得非常快,并会完全超出你今天能干的事。每一年都会向前进一步,而从今天开始,我会最终决定 把我所有的应用开发全部切换到基于浏览器的应用。(陈皓注:我也是这么认为的,参看《来信,创业,移动互联网》)

微软和苹果最终不愿意这个事发生,所以,触发这个事的第一步会是一个开源的浏览器(如:Firefox)开始到了支配市场的地位,然后会出现某种Firefox的杀手级应用(这种杀手级应用可能会像iTunes一样,所有的人都会用它,只需要下载Firefox)

Linus Torvalds

我并不认为我们会看到一个“大的跳跃”。我们只会看到很多的工作帮助我们把那些沉闷辛苦的工作变得更简单——会有一个更高级别的语言,也许把简单的数据库集成到语言中来会是其中最主要一个。

例如,我个人相信“Visual Basic”在编程方面比“面向对象”做得更多。当然,人们都在取笑VB是一个很烂的编程语言,并且人们在谈论OO语言都十多年了。但我还觉得不是这样 的,Visual Basic 不是一个好的语言,但是我觉得VB那简单的数据库接口比OO更重要。

所以,我认为会语言有很多的改进,并且,硬件的改进会让编程更容易,但我并不期望会有巨大的生产力或是革命性的改进。

至少,你不会开始搞真正的AI的东西,我也不认为真的AI会变成某种你不需要编程的东西。

David Heinemeier Hansson

我从不试图预测未来。我也不相信命运一说。最好预测未来的方式就是去实现未来。

Peter Norvig

大规模的分布式处理

Dave Thomas

下一个最牛的事会被再下一个最牛的事所掩盖,然后再被再再下一个所掩盖,再再再下一个所掩盖……。这是一件没完没了的事,所以,我并不会试图去找最 牛的事,因为这会让人们忘了那些最真实的问题:把基本的东西做对。我们要让用户更满意,专注于交付有价值的东西,自豪于我们做的事。一个程序员可以使用很 多工具把这些事做得更好,而不是去追逐时尚和流行。

Guido Van Rossum

对不起,我没有那么多水晶球。我CGI被发明了5年后预测过它 :-)

James Gosling

有两个事是我现在最关心的,那就是要对付并行和复杂。

Bjarne Stroustrup

我不知道,我也不愿猜。

Tim Bray

不知道。

Q 5: 如果你有3个月学一个相对较新的技术,你会学什么?

Steve Yegge

我的确有3个月的业余时间,我准备学一下 Dojo (http://dojotoolkit.org) 和高级 AJAX 及 DHTML。我会通过开发一个相当牛的Web应用来学习他们。Dojo 真的酷,并且我确信它会越来越好。

Linus Torvalds

嗯,我真的很爱做 FPGA(可编程芯片),但我部是太忙了而不是坐来来开始学习。我喜爱和硬件打交道:很明显这个原因是因为我最终在做操作系统,因为操作系统(除了编译器)基本上都是在和硬件打交道,但我没有真正地自己去设计和做一个硬件。

David Heinemeier Hansson

Mac 的 Cocoa 编程

Peter Norvig

我想把 Javascript 学得更好,然也也想学 flash.

Dave Thomas

如果“新”是对于我来说,那么我会去学钢琴课。

如果“新”是说技术,我猜 我会选择学习某种和为残疾人服务的有关的技术。

Guido Van Rossum

单板滑雪。

James Gosling

搞点有乐趣的东西,我会学习最新的3D渲染技术。我可能会写一个光子映射渲染器。

Bjarne Stroustrup

3个月只有很少的东西你可以学,我觉得你只能参加某个成熟领域的培训。

Tim Bray

安全,加密,数字签名,身份标识,等等。对我来说,从没学过这些东西对我来说是个很大的问题。

Q 6: 你们觉得如何让一些程序员可能有超过其它程序员10倍或100倍的生产力?

Steve Yegge

我想你应该考虑一下为什么不是让所有的程序员都一样牛。托马斯爱迪生有一句关于天才的名言也许会给你一些启示。

Linus Torvalds

我真的不知道,我想,一些人之所以更牛是因为他们可以专注于那些重要的事,而更多的只不过是在应付。那些我所知道的真的很牛的程序员从很年轻的时候就在做事了。

David Heinemeier Hansson

把难题变简单的能力。

Peter Norvig

把整体问题一次性放入大脑的能力。

Dave Thomas

他们关心他们做的事。

Guido Van Rossum

大脑结构基因不同。

James Gosling

他们知道他们要做什么,他们不并不急于仓促行事。他们有他们要做的事的整个蓝图。

Bjarne Stroustrup

首先,缺少足够的职业培训,或基础不够。其次,这些人要即聪明(那种可以把事情想清楚,直达核心的能力),又有经验,并有使用工具的知识。编程需要把理论和实践结合起来 – 并不是使用没有实际业务的知识。

Tim Bray

令人惊讶的思维改变。

1

酷毙

雷人
1

鲜花

鸡蛋

漂亮

刚表态过的朋友 (2 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部