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