書呆子的復(fù)仇
- 軟件業(yè)有場永不停息的戰(zhàn)斗,書生氣的開發(fā)者與官僚主義的經(jīng)理之間總是發(fā)生沖突。
- 經(jīng)理,《呆伯特》,a)對技術(shù)一無所知;b)對技術(shù)有強烈的個人觀點。他要求你一定要使用某種語言進(jìn)行開發(fā)。
- Lisp語言,1958年約翰.麥卡錫提出,他的學(xué)生史蒂夫.拉塞爾實現(xiàn)。
- Lisp語言的9個思想:
- 條件結(jié)構(gòu)
- 函數(shù)也是一種數(shù)據(jù)類型
- 遞歸
- 變量的動態(tài)類型
- 垃圾回收機制
- 程序由表達(dá)式組成
- 符號類型
- 代碼使用符號和常量組成的樹形表示法
- 無論什么時候(讀取器,編譯器,運行期),整個語言都可以使用。
語言設(shè)計的思想逐漸在向Lisp靠攏
- 使用不常見的語言的三個問題:1.程序可能無法很好地和使用其他語言寫的程序系統(tǒng)工作。這個問題取決于你能否控制整個系統(tǒng)。把軟件運行在服務(wù)器端可沒有估計地使用最先進(jìn)的技術(shù)。隨著軟件從桌面端向服務(wù)器端轉(zhuǎn)移,這種限制將越來越少。2.可能找不到很多函數(shù)庫。函數(shù)庫的重要性取決于你的應(yīng)用程序。規(guī)模越大的項目,語言本身編程能力的強大,比是否有方便的函數(shù)庫更重要。3.可能不容易雇到程序員。這個問題不存在,少于10個人的團(tuán)隊最適合開發(fā)軟件。如果10個人都找不到,那是選錯了成立軟件公司的城市。
- 衡量語言的編程能力的最簡單的方法可能就是看代碼數(shù)量。(這不同于衡量程序員的編程能力)
- 經(jīng)理不會考慮選擇不當(dāng)?shù)木幊陶Z言而導(dǎo)致項目失敗的可能性,他關(guān)心的是不承擔(dān)失敗的責(zé)任,對他而言最安全的做法就是跟隨大多數(shù)人的選擇,即“業(yè)界最佳實踐”
- 2個重要結(jié)論:1.不同的語言的編程能力不一樣。2. 大多數(shù)經(jīng)理故意忽視第一點。
- 格林斯潘第十定律:任何C或Fortran程序復(fù)雜到一定程度之后,都會包含一個零食開發(fā)的,只有一半功能的、不完全符合規(guī)格的、到處是bug的、運行速度很慢的Common Lisp實現(xiàn)。
- 解決一個難題,若干個因素同時發(fā)揮作用:1. 使用一種強大的語言;2. 為這個難題寫一個事實上的解釋器; 3。你自己變成這個難題的人肉編譯器。當(dāng)我在自己的程序中發(fā)現(xiàn)用到了模式,我覺得這表明某個地方出錯了。程序的形式應(yīng)該僅僅反應(yīng)它索要解決的問題。代碼中其他任何外加的形式都是一個信號,(至少對我來說)表明我對問題的抽象還不夠深,也經(jīng)常提醒我,自己正在手工完成的事情,本應(yīng)該寫代碼通過宏的擴(kuò)展自動實現(xiàn)。