書評 《軟件隨想錄》


Joel的隨想錄,也就是他Blog上的文章的摘選;整本書看下來輕松,其中有不少文字在為他公司打廣告、為自己搖旗吶喊;比如在選擇程序員方面,他所認為的一些重要的因素,比如提供獨立的辦公室、更自由的空間、更多及更大的屏幕,都是他公司所能提供的;

但是大家不要忘了,他的公司員工的人數是個位數(從書中的得出),書中所提出的各種因素,在擴大到一定規模后,不具有普遍的適用性和可行性;

在過濾掉這些元素后,我整理了以下觀點;

 

1 Unix與Windows文化之爭

從程序開發的起點,Unix和Windows就有完全不同的目標;Unix是以命令行程序做為基本,也就是首要目標;程序的所有功能通過命令行方式都是可以完成的;這樣帶來的好處就是,可以結合Unix的內置工具來任意組合,比如批處理,比如后續的自動化處理,從而讓開發出來的程序適應更多、更豐富的應用場景;

至於圖形化終端,等我有空了再來開發吧,或者,互聯網的朋友,誰有空,你們都可以來做這個;業務邏輯,在后台調用命令行工具即可;

Windows的目標就是一個漂亮的GUI程序。業務邏輯和GUI是融合在一塊的;會有不錯的用戶交互體驗;當然,想批處理,想自動化處理,抱歉,不支持。一步步按照我們的游戲規則來吧;

當然,我們需要認識,兩者面向的終端用戶並不完全相同;Windows占據着桌面領域,GUI交互體驗為重中之重;而Unix系列則面向服務器領域,命令行支持為其根本;

2 大學教學 陽春白雪 VS 下里巴人

在公開場合,Joel批評java的次數不在少數;在大學教學方面,更是多次警告只學java的危害;語言只教java,這會整體降低這門學科的難度,並將大學教學演變為職業教育;而C語言才是正道;C語言看上去有些過時,但其中卻包含大學教學中不可或缺的的利器:指針和遞歸;指針和遞歸能鍛煉程序員的思維,培養邏輯能力,對智力提出更多的挑戰;這有點類似拉丁語在大學中的地位;即使社會上不再應用,在大學教學中,仍然重要;

計算機科學的組成:證明(遞歸)、算法(遞歸)、操作系統(指針)、編譯器和語言;如果不懂指針,對於Linux內核,將一籌末展;

最后,說說大學教學的兩面:

陽春白雪:教學C語言、Unix、函數式編程和狀態機;

下里巴人:教學JAVA和VC編程;甚至21天精通SQL SERVER.

3 為“匈牙利命名法”正名

我們更多人熟悉的是系統型匈牙利命名法,即在變量的命名前加上該變量的類型;比如整型的命名加上n、字符的命名加上sz:

int nSize;

char szStr[10];

這種命名方式引來大量程序員的不滿,過於麻煩和迂腐,帶來的好處微弱;而微軟最終也不再推薦這種命名法;

這種應用場景卻非發明者的本意。作者的真實使用方式,我們稱之為,應用型匈牙利命名法;

其應用的場景根據變量的種類,而不是類型來加前綴;比如都是字符串、已編碼的可以直接在html上展示的字符串,我們加上se前綴;而為編碼,直接在html上展示將可能導致亂碼的字符串,我們加上unse前綴;

這樣,在程序編寫及review的過程中,很多潛在的錯誤就能一目了然:

seHtm = unseStr;

看到這樣語句,顯然就有問題;至少我們應該有個轉換函數:

seHtm = Encode(unseStr);

ok,發現這種命名法的真正優勢所在了么?

4 軟件質量之爭: 技術派 VS 務實派

軟件質量改進是我們這個行業永久的話題;

技術派希望將質量問題用軟件自動處理;這樣,他們發明了單元測試、測試驅動開發、自動化測試動態邏輯;目的就是為證明程序沒有錯誤;

而務實派並不關心軟件的質量有沒有問題;他們認為軟件的質量能夠達到一定的水准就可以,只要有人願意為之買單即可;務實派認識到:消滅Bug是一件邊際報酬遞減的事情;將軟件bug率從10%降到5%比50%降到20%可能要付出的更多的代價;

在當今的商業主導環境中,務實派顯然更占優勢;

5 選好大方向: 內部程序員 VS 專業程序員

內部程序員為公司內部開發軟件,軟件不面向外部,這樣的內部開發工作會有以下問題:

1.技術難度低;內部使用的軟件,決定了規模不會很大,這樣,在性能方面的要求就低。隨便寫,只要功能實現,性能方面的影響基本不用你去考慮,當然,公司也沒有時間讓你來考慮這些;這樣導致的結果就是你的技術無法得到提升,寫了20年的代碼,水平還是在原地踏步;

2.內部使用的軟件,這樣的開發工作與公司的主營業務偏離;這樣,你得到晉升的希望渺茫;

3.無法選用自己想用的語言;現代化的語言,需要招來更有水平的小伙子來后續維護;傳統的VB能輕松搞定的事,為什么還要多花錢來給自己找麻煩?

4.夠用則以;這是內部項目的最大問題所在;項目功能夠用了,ok,你可以開始下一個項目;不用在完善、不用考慮可能出現的5%的bug率;沒事,內部可以接受;用上面務實派的觀點,與外部軟件相比,內部軟件的質量水准在一個相當低的層次上;

好了,不用再列舉了,在工作方向的選擇上,你應該知道該怎么辦了吧?

6 寫程序,更要表達思想: 普通程序員 VS 領袖

寫作,是行業的基本功。寫代碼之余,多鍛煉寫出優秀、清秀的技術文章,清晰的表達你的思想;說服他人,你的力量就得到放大;當有足夠的程序員認可你的文章,認可你的思想,你就成為了這個行業的領袖;

例如,SourceForge上有不少優美、有用的代碼,但都被埋葬、沉沒,就因為沒有清晰、易於理解操作的說明文檔;

最后的最后,Joel建議除了專業知識外,其它學科的學習也相當有必要:比如微觀經濟學;

思維導圖:


Posted by: 大CC | 14OCT,2013

博客:blog.me115.com

微博:新浪微博


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM