Douglas Crockford是Yahoo!的资深JavaScript架构师,发明了JSON这一应用广泛的数据交换格式。从电视专业到偶然接触了编程,在后来的职业生涯中穿梭在媒体和编程之间。
0、收获
读到编程人生第三位,发现以下共同点:
- 读书很多。
- 读代码也很多。
- 善于把学到的知识找到应用的地方。
Crockford的访谈还包含下面的内容,值得思考和学习:
- 了解编程的历史,有助于在技术领域的探索。
- 通过清理学习别人的代码。
- 拜访客户,才能真正知道客户是怎么使用程序的。
- 编程不论年龄(好吧,这个我很喜欢)。
- 增量开发,这样会比较容易成功。
- 定期重构代码,我理解为“自省”。这样可以保证心动不会偏离方向。
1、自学程序怎么学?
多读。读好书。
有计算机学位的朋友怎么建议?
多读,多写。好好学习写作和阅读。
2、为什么要回顾编程的历史?
很多程序员并不想了解所用语言和工具的出处,想当然地认为是一些社区搞出来并提供给他们用的(嗯,我也曾经这么认为)。其实有很多饶有趣味的故事谈到了他们来自何处、受谁的影响、谁做的这件事、什么地方是错误的、什么地方本来就是错误的但未被看作是错误。
有朝一日重新探索这些技术,定会受益无穷。比如Smalltalk、Lisp。
3、为什么感觉编程很难?
部分原因是大多数事件我们都在做新的东西。如果之前做过,那就可以重用了。
深有同感:如果每次都是重新来过,那个压力和工作量都是不得了。所以平时还是需要一些积累,课下或者下班时间多学习。
4、如何阅读别人的代码?
清理。把代码放到文本编辑器中并开始修复。
首先会统一标点符号,适当缩进,等等这类的事情。虽然有工具可以完成样的事情,但从长远来看,自己完成会更佳高效,因为这会有助于加深对代码的理解。
我的理解,自己动手再讲出来,这个过程本身是工具无法替代的。
5、为什么开发者要访问客户?
Crockford认为,最有效率的手段是把一些测试带给最终的用户:访问客户去。这么做会使开发能深刻意识到客户实际上会怎样使用系统,该如何做才能满足客户的需求。缺少对客户的尊重是一件非常可怕的事情。
6、设计软件会怎么做?喜欢自顶向下、从下往上还是先中间后两边?
都有。这也手段可以让你时刻把握系统的设计。最后需要分而治之,将系统分解为可管理的模块。
当遇到各种问题时,需要同时使用这些技术。一直坚持下去,直到真正搞清楚系统的结构为止。
一旦弄清楚了结构,其他的事情都是自然而然的了。
搞清系统结构,我觉得是一个长期的过程。每次看都会有新的收获。
7、编程只是年轻人的专利吗?
Crockford曾经也这么认为,但自从“睡眠呼吸暂停症”得到缓解后,又开始了编程,而且编程水平可能比以前还要好。
8、如何应对“第二系统效应”?
打算重新实现Habitat(软件)时,结果发现很难。
如果采取增量的方式,相信会取得成功。如果试图在一个阶段中完成所有这些事情,这太困难了。
亲身经历过“第二系统效应”:其实生活中很多情况也是如此,如果想要一步到位,可能很多优秀的产品都永远出不来。
ps:第二系统效应由于期待过多、过度设计导致最终失败。详见“第二系统效应”。
9、为什么要每7个周期进行一次重构?
通常团队应该知道什么时候,管理层很久以后才会发现。
团队会定期遭遇问题,比如制造了过多的bug,代码太长了,速读太慢了,进度延后了。
他们知道原因所在,这并非是愚蠢或懒惰造成的,而是代码与目标发生了偏离。
10、“隐藏关卡”
- 要在工作中与QA友好相处,最好的办法是QA与开发合并:)
- Crockford参与过语言的开发,在语言设计方面有丰富的经验。
- 对阅读Knuth的《计算机程序设计艺术》的建议,跳过星号太多的部分,但了解这些知识是非常必要的。
- 他是“软对象”(soft object 指JavaScript中类型的特性)的忠实粉丝。
- 他认为写作和编程能力同样重要,当然还有沟通的能力。