顶级程序员的心得 Coders at Work (II)

简介:

正在读 “Coders at Work”,   对15 位顶级程序员的采访, 总共600页。 这些看似冗长的问答中有不少精辟的言论。 我摘录了一些关于挑选,面试程序员,优秀程序员的特点,和程序设计的句子。下面是 3 个程序员的心得,和我的几句解释。 Peter Norvig 讲了NASA 的一个著名事故的一些故事,我也重构了一下,写在后面.

 

Coder

What they say about good programmer, interview, and design

My interpretation

Simon Peyton Jones

Haskell architect, MSR-Cambridge researcher

Beautiful Code: agrees with Tony Hoare that good code should obviously have no bugs, rather than having no obvious bugs.   but “looking at the bare code may not be enough,   it’s not a characteristic of beautiful code that you should be able to just look at the bare code and see why it’s right.   (AVL tree is one example)

漂亮的代码:

 Tony Hoare 说的那样 它们明显没有bug; 而不是没有明显的bug.

但是“漂亮”并不意味着看着源代码就能马上读懂。 例如 AVL 光看代码你不懂为什么这些子树要转来转去。但是如果你理解了它的核心思想,看到它维护了这个不变量 (invariant) 从而保证 log 级的访问速度,你就会说,啊,明显理当如此。

Peter Norvig

In charge of Research at Google,  NASA.

 

Made fun of PowerPoint AutoContent Wizard

 

image

Advice to school:

Teach more on team work. “when I was in school, working as a team was called cheating”.

 

Successful programmer:

The bravado and willingness to “go ahead” with incomplete but essential info.

 

Interview:

I don’t like the trick puzzle questions.  It’s important to have someone that you can get along with.  More,  Can they technically do what they said they can do?   You really want to have people write code on the board.

 

XP, pair programming:

10% of the time is to share is important,  but if doing it most of the time, it won’t be as effective.

 

UML:

I never liked any of these UML-type of tools.  If you can’t do it in the language itself that’s a weakness of the language.

学校教育:

应该教更多的团队合作,“我上学的时候,团队合作被认为是作弊” (现在有些学校还是这样)

 

成功的程序员:

他们更多的是“我只要懂得我需要的,就可以开始干活了”, 而不是“我得完全理解某个领域,才能开始”。

 

面试:

不喜欢用智力题目,要依赖于面对面的问答来判断这个应聘者是否能够和团队合得来,更重要的是,让他们在黑板上写代码,看看他们是否真的能“说到做到”。

 

XP, 结对编程:

10% 的时间用来交流是很重要的,但是如果大部分时间都用来结对,那效率不会太高。

 

UML:

我从来不喜欢这类工具,如果你不能在计算机语言中表达(UML 要表达的东西) 那这是这种语言的弱点。

Guy Steele

Help created Common Lisp and Scheme, Emacs

image

Code writing:

When you are writing code you’re writing as much for human readers as for the computer.

 

If efficiency is important, I’ll often resort to a trick. And then I realize that will mislead a human.  And you have to comment it or do something to flag that, to make it more readable.

代码:

当你写代码的时候,你写给机器看,同时也写给人看。

 

如果效率很重要,我会用一些小技巧。 这些技巧会误导读代码的人,你得加上注释,或者类似的东西标注一下,让它更可读。

 

Peter Norvig 同学在NASA 工作的时候,参与了NASA 的一个著名事故的调查 ( 1999 火星气候卫星” 因导航出现重大错误而坠入火星大气层)  从他在这本书的问答中,我们可以看到一个大略的错误发生过程:

 

1)      软件外包公司对于 mission-critical 的软件模块有很完备的检查和测试,但是对于其他模块则没有完备的管理。

2)      程序员写了一个不重要的log 功能,其中用英制 (英尺表示力,  但是 NASA 用“牛顿” 千克*/(*)

3)      外包公司接到一个新的工程,他们进行了软件重用,log 功能中记录的力被重用为导航功能的输入参数,成为 mission-critical 的模块。 //错误一个模块从 non-mission-critical 变成 mission-critical 没有经历必要的复审和测试。

4)      这个新的工程由发包公司 Lockheed (洛克希德公司交给了客户 JPL (喷气推进实验室)

5)      火箭带着卫星发射了,在10个月的飞行中,JPL  可以每天两次启动小推进器,来调整太空船的航向,在这一过程中,有人发现了导航功能的一些不正常现象于是 -

a.       JPL 发邮件给 Lockheed, 说 – 这个模块有些参数看起来好像不正常

b.      Lockheed 回邮件...

c.       JPL 再发邮件

d.      最后没有人再发邮件了

e.      JPL的同志认为, Lockheed 的同志们估计已经搞定了。

f.        Lockheed 的同志认为, JPL 的同志们没再追问这个问题,可能已经不是问题了。

错误这个问题从来没有收录到NASA 的错误跟踪系统 (Bug tracking system),只是在email 中交流,导致最后没有人对这个问题负责。在错误跟踪系统中,总得有一个人“拥有”这一个bug,这样可以避免推诿责任 (MSF 也很重视这一点)

十个月之后, 1999923 日,卫星抵达火星大气层,错误的导航参数造成卫星坠入大气层烧毁。 单单卫星的造价就高达一亿两千五百万美元。






本文转自SoftwareTeacher博客园博客,原文链接:http://www.cnblogs.com/xinz/archive/2009/12/24/1882456.html,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
Dubbo Java 中间件
探寻源码宝藏:介绍开源项目"source-code-hunter"
最近处于金三银四的面试黄金期,许多同学在面试中反映现在要求非常高,阅读源码几乎是必问项。然而,阅读源码时常常觉得晦涩难懂,令人头疼。今天在浏览 GitHub 时,我发现了一个名为 source-code-hunter 的宝藏项目。这个项目从源码层面深入剖析和挖掘互联网行业主流技术的底层实现原理,为广大开发者提供了便利,助其提升技术深度。目前该项目已经涵盖了 Spring 全家桶、Mybatis、Netty、Dubbo 框架,以及 Redis、Tomcat 等中间件的内容,恰好适合最近正在面试或希望提升技术深度的同学参考学习。
54 1
探寻源码宝藏:介绍开源项目"source-code-hunter"
|
7月前
|
Java
BAT必刷!GitHub顶级“2023并发编程全优笔记”晋升公司架构组!
开头 相信在金三银四面试的小伙伴应该最近有不少,很多小伙伴也跟我说过现在的问题问的是越来越底层。问题肯定是有很多的,但统一都认为很难的的一个就是多线程并发编程!
|
程序员 Go
Go 程序员的演变,最后的 “Rob Pike” 这个梗看懂了吗?
Go 程序员的演变,最后的 “Rob Pike” 这个梗看懂了吗?
|
缓存 Dubbo 应用服务中间件
我给Apache顶级项目贡献了点源码。 (上)
我给Apache顶级项目贡献了点源码。 (上)
161 0
我给Apache顶级项目贡献了点源码。 (上)
|
负载均衡 Dubbo 应用服务中间件
我给Apache顶级项目贡献了点源码。 (下)
我给Apache顶级项目贡献了点源码。 (下)
140 0
我给Apache顶级项目贡献了点源码。 (下)
|
负载均衡 Dubbo 算法
我给Apache顶级项目贡献了点源码。 (中)
我给Apache顶级项目贡献了点源码。 (中)
96 0
我给Apache顶级项目贡献了点源码。 (中)
|
机器学习/深度学习 数据可视化 数据挖掘
如何开始一项可能帮助你走向人生巅峰的“业余项目”(Side Project)?
你知道什么是side project 吗? 你知道如何开始一个side project 吗?一个业余项目,不仅可以给你带去知识、技能、满足感,也可能从此改变你的职业生涯。俗话说,万事开头难,本文作者列了5条经验,帮助你快速地、有目标的进入一个side project。
1781 0