2019独角兽企业重金招聘Python工程师标准>>>
编程人生: 15位软件先驱的访谈录(一)
Jamie Zawinski
(jwz) Lisp 黑客,Netscape早期开发者,夜总会老板.
早期学过 APL, Fortran, Lisp. XEmacs 的作者.
编写自己回头还能理解的代码, 这点至关重要.
总之 C 相当令人不快. 一直以来, 我总是尽可能避开 C.
至于 C++, 除了叫人反感之外, 一无是处.
... 各个C++ 编译器千差万别, 相互之间存在许多不兼容问题.
Perl 太可怕了 ... 是门卑劣的语言, 语法太过古怪, 数据结构一团糟...
问: 你感觉到代码的美吗? 美感是否在可维护性之上?
答: 是, 当然是. 任何东西只要表达恰当, 不论精炼, 抑或平淡, 都是
具有美感的. 例如组织合理的语句, 一幅涂鸦, 或是寥寥数笔够了出的
极其逼真的漫画, 这些都有共通之处.
问: 接下来我们聊些编程的细节. 你怎么设计自己的代码? 如何组织代码
的结构? ...
答: 好, 首先我会随意鼓捣一番, 写些短小的演示程序, 那些都是最后
不会再用的. 比如搞清楚怎样将窗口显示到屏幕上, 等等...
接着, 我每个...调用创建一个空函数(stub), 然后再开始慢慢逐个实现,
弄清楚自己准备如何实现这个, 怎么实现那个.
... 更棘手的任务其实是弄清楚怎样搭建构建(?)系统, 以合理的方式让它
工作起来. 为此我做了大量实验, 代码也挪来挪去... 然后回头清理代码.
通常当你第二或第三次剪切粘贴同一段代码时, 就得停下来把这段代码抽取
成子程序了.
... 我采取的第一步是自顶向下或自底向上开始. 无论采用哪种方式, 我都会
先在屏幕上显示一个窗口, 包含若干按钮, 然后逐步深入, 开始构建那些按钮
的功能. ... 采用哪种方式都可以, 还可以两边齐头并进, 到中间会合.
我发现尽早在屏幕上显示一些东西, 有助于集中注意力去解决问题.
这能帮我决定下一步做什么. ...如果能真切地看到一些东西, 心里也会觉得踏实.
=================================================
Fitzpatrick:
像科学家那样思考, 一次改变一样东西. 有耐心, 试着去了解
问题的本质. 尤其是在调试或者设计那些不太正常的东西时更应该这样.
我看到过年轻程序员在那里抱怨 "哦, 见鬼, 这个东西运行不了", 然后就把
它彻底重写了. 其实应该停下看看究竟发生了什么. 要学会增量地开发,
这样每一步你都能进行验证.
调查结果证明, 那些会交际的孩子一生都能赚钱, 而不是那些成绩好的.
必须要懂科学的方法(一次改变一样东西).
我不觉得自己现在是在和谁竞争, 我也不太关心别人是不是比我更好,
因为我觉得已经有无数人比我好了. 我发现我们总是处于中间位置,
而我也很乐意保持在这个位置上.
=================================================
Crockford:
强调以子集方式来管理复杂度的重要性,
同时介绍了他所使用的一种代码阅读方法: 从清理代码开始.
Javascript 成为世界上最流行的语言纯属偶然. Ajax 的出世改变了一切...
认为改进 JavaScript 最好的办法就是瘦身. 取其精华, 弃其糟粕.
我认为一小时的代码阅读抵得上两周的QA. 代码阅读必须伴随着整个项目的生命周期.
编程与写作的类似: 写作时要正确书写标点符号和大写字母, 合理使用逗号. 如何组织句子,
段落. 在编程中这些指的是如何将问题分解为功能或类的集合.
问: 有什么具体的举措可以提升代码的可读性?
答: 子集的想法非常重要, 尤其是 JavaScript, 这门语言包含了太多的糟粕...
如 C 语言的 swtich 缺省贯通是个设计缺憾; ++ 操作符带来很多安全问题.
问: 你如何阅读别人编写的代码?
答: 清理. 我会把代码放到文本编辑器中并开始修复. 首先, 我会
统一标点符号, 适当缩进, 等等这类事情.
... 长远来看自己完成会更加高效, 因为这有助于我加深对代码的理解.
代码的可读性是我的第一要义. 它比速度还重要, 可以与正确性一争高下.
微软的操作系统也面临同样的问题, 过去几年他们发布了太多糟糕的东西,
现在只能尽力兼容它们了.
这种限制对于下一代操作系统的设计是极具破坏力的, 最后他们将寸步难行.
问: 你觉得文学编程的主要特征是什么?
答: Knuth 的主要贡献在于提出了以各种顺序编写代码的想法. ...
他还帮助你摆脱了函数大小的困扰.
问: 招聘程序员时, 如何识别优秀人才?
答: 代码阅读. 我会让应聘者带来他们写过的优秀代码...
对年轻程序员的建议: 多读, 多写.
====================================================
KISS 原则: Keep It Small and Simple 让它小且简单
YAGNI 原则: You Aren't Gonna Need It 并不需要它
不成熟的优化是万恶之源 ---- Knuth
拿不准的时候, 就穷举 ---- Ken Thompson