编程人生: 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