第一名:《 More Effective C++中文版 》 2697票
作者:Scott Meyers 譯者:侯捷 中國電力出版社
電影的續(xù)集總讓人失望,《 Effective C++中文版 》的續(xù)集卻依然給你驚喜,這本書榮登2003最佳圖書榜首不是偶然,它秉承了《 Effective C++中文版 》的風(fēng)格,列出35個改善C++程序技術(shù)與設(shè)計思維的方法。Meyers沒有說教語法細(xì)節(jié),也不求大湊全,而是以多年經(jīng)驗(yàn)為基礎(chǔ),向大家解釋了如何更有效率地撰寫軟件:使效率更高、更穩(wěn)健強(qiáng)固、更一致化、更具移植性、更富重用性,簡單地說就是撰寫更好的C++軟件。讀者看過后會由衷地感嘆“原來C++程序是可以這樣寫的!”書中每一句話都體現(xiàn)著C++程序的編程思想,你會發(fā)現(xiàn)越品越有味道。
自從《 Effective C++中文版 》出版后,許多人一直期待著這本書。由侯捷親自翻譯保證了譯本的質(zhì)量,但也有一部分讀者對侯先生的翻譯風(fēng)格表示不適應(yīng)。這本書能排在這個位置說明目前國內(nèi)對C++的學(xué)習(xí)熱情還是非常高的!但是,由于本書原版寫于1996年,所以沒有涉及C++中最新的技術(shù),如泛型 、STL這些目前很流行的東西。
第二名:《 人月神話(影印版) 》 2664票
影印版是未翻譯的英文書,該書中文版為《 人月神話 》
作者:Frederick P. Brooks Jr. 中國電力出版社
即使《 人月神話 》中文版已于2002年上市,影印版還是受到了如此熱烈的歡迎,可見大家對《 人月神話 》的認(rèn)可。自從1975年首版到今,《 人月神話 》不斷地被重印,這本身就構(gòu)成了軟件領(lǐng)域的神話。在這本經(jīng)典著作中,Brooks深刻地闡述了復(fù)雜項目管理中存在的問題,讓你思考四個變量(成本、時間、質(zhì)量、范圍)之間的一些故事,以及“人月”、“概念完整性”等重要的項目管理概念。
相比于1975年版,這本20周年紀(jì)念版更收錄了包括《沒有銀彈》在內(nèi)的幾篇經(jīng)典論文,并對首版二十年來軟件項目管理的發(fā)展做了一個回顧。特別是著名的論文《沒有銀彈》,引領(lǐng)你對軟件開發(fā)的發(fā)展做一個深入的思考。雖然我們的計算機(jī)性能不知比1975年時提高多少倍,制造了多少高效的開發(fā)工具,但我們依然能從《 人月神話 》中得到有益的啟示。
在風(fēng)格上,每章前面的圖片和詩給人耳目一新的感覺。
第三名:《 Borland傳奇 》2177票
作者:李維 電子工業(yè)出版社
一本非技術(shù)書能在評選中獲得如此高的位置足以說明它的精彩。在這本書中李維向大家介紹了Borland杰出的技術(shù)大師、跌宕起伏的企業(yè)發(fā)展,讓讀者看著大呼過癮!本書部分內(nèi)容曾在《程序員》雜志上連載,其間讀者反響強(qiáng)烈,即使不使用Borland開發(fā)工具的朋友也為Borland精彩的故事所吸引。
很多中國程序員是伴隨著Borland成長起來的,他們學(xué)習(xí)編程時的起步就是Turbo C、Turbo Pascal,這些朋友對Borland格外有感情,卻對Borland的發(fā)展了解不多,這本書正好填補(bǔ)了這個空隙。以史為鏡,可以知興亡,在本書中,作者觀察分析了Borland的演變以及軟件發(fā)展的趨勢等重要問題,這些故事本身不僅非常有意思,而且能和讀者的實(shí)際學(xué)習(xí)、工作聯(lián)系起來,更能引發(fā)對深層次問題的思考,Borland這樣的企業(yè)究竟應(yīng)該側(cè)重技術(shù)還是市場?自己怎樣在軟件技術(shù)的發(fā)展潮流中找到方向?
由于李維是本土作家,全書語言流暢,在文字上更貼近我們。書中用到的圖表很有表現(xiàn)力,對作者意思的表達(dá)起了很好的幫助作用。
第四名:《 Java編程思想(英文版·第3版) 》2120票
該書第二版的中文版為:《 Java編程思想(第2版) 》
作者:Bruce Eckel 機(jī)械工業(yè)出版社
這本書的影響力蓋過了Java之父James Gosling參與編著的《 Java編程語言(第三版) 》,受到全球程序員的廣泛認(rèn)同,它的前兩版曾多次榮獲Software Development , JavaWorld等機(jī)構(gòu)頒發(fā)的大獎,《 Java編程思想(第2版) 》在去年本刊舉辦的年度評選活動中獲得冠軍。
這本書全面介紹了從Java的基礎(chǔ)語法到最高級特性,并針對Java 1.4版做了更新。在內(nèi)容上有廣度,也有一定深度,不僅適合入門,也可供深入學(xué)習(xí)用,同時作者還著重闡釋了面向?qū)ο笤O(shè)計的理念。
Eckel開放了這本書的電子版,很值得我們尊敬,樹立了一個慈祥的教育家的形象,不過如果要系統(tǒng)學(xué)習(xí)的話最好買一本紙版,否則太累眼。本書在國內(nèi)上市不久就受到了如此熱烈的歡迎,再次證實(shí)了其前作的成功,看的出大家對這本書期待已久,如果出版中文版市場一定會很好。
第五名:《 Effective Java中文版 》2061票
作者:Joshua Bloch 譯者:潘愛民 機(jī)械工業(yè)出版社
這本薄薄的小書不僅獲得了2002年度Jolt大獎,還受到Java之父的推薦。它繼承了《 Effective C++中文版 》的名字和風(fēng)格,Bloch為我們帶來了57條極具實(shí)用價值的Java經(jīng)驗(yàn)規(guī)則,書中每條規(guī)則都以簡短、獨(dú)立的小文章形式出現(xiàn),這些小文章包含了詳細(xì)而精確的建議,以及對語言中許多細(xì)微之處的深入分析,并通過例子代碼加以進(jìn)一步說明。這本書實(shí)踐性很強(qiáng),作者把開發(fā)中的經(jīng)驗(yàn)和模式進(jìn)行講解,并舉實(shí)例進(jìn)行說明。同《 Effective C++中文版 》一樣,這本書也不適合初學(xué)者。
中文版由潘愛民翻譯,保證了譯本的質(zhì)量。
第六名:《 Java夜未眠 》1779票
作者:蔡學(xué)鏞 電子工業(yè)出版社
可以說這本書是TOP10中讀起來最輕松的書了,它是一本程序員寫給程序員的散文集。作者蔡學(xué)鏞作為享譽(yù)國內(nèi)外的Java高手,在本書中除了技術(shù)相關(guān)的文章之外,他也沒有僭越自己的專業(yè),隨筆中所提及的都是軟件產(chǎn)業(yè)里的甘苦點(diǎn)滴。無論您是程序員與否,本書都可以帶給現(xiàn)代社會的年輕人一個借鏡或指引。
作者以詼諧、戲謔的筆觸,寫出時下程序員共同的心聲,這本書很快就可以看完,而且文章都已發(fā)表在網(wǎng)絡(luò)上,之所以受到如此歡迎,源于它包含了作者對工作、對人生的更改思考,更貼近了程序員的生活,值得一提的是作者將所有的版稅捐助了希望工程。
第七名:《 人件(第2版) 》1684票
作者:Tom DeMarco,Timothy Lister 譯者:UMLChina翻譯組
清華大學(xué)出版社
同《人月神話》一樣,《人件》已成為軟件團(tuán)隊管理的經(jīng)典之作,它們共同被譽(yù)為軟件圖書中“兩朵最鮮艷的奇葩”。人們認(rèn)為,《人月神話》關(guān)注“軟件開發(fā)”本身,《人件》則關(guān)注軟件開發(fā)中的“人”,因此,在成千上萬的書架上,《人件》永遠(yuǎn)和《人月神話》并列在一起。這本書專門討論了軟件開發(fā)和維護(hù)團(tuán)隊的管理問題,并向人們的傳統(tǒng)認(rèn)識提出了挑戰(zhàn)。作者在書中推崇人本管理思想,正確指出知識型企業(yè)的核心是人,而不是技術(shù),呼吁給予軟件工作者充分的自由和信任。
它的宣傳語是“為程序員伸張權(quán)利”、“別把開發(fā)人員當(dāng)成牲口”,如果給企業(yè)管理層看效果會更好,可讀者中很多是被作為“人件”的程序員,于是在網(wǎng)絡(luò)上引發(fā)了大家對目前工作環(huán)境的討論(抱怨?)。但是,東西方文化的差異和我國的客觀條件是否能容許《人件》中的觀點(diǎn)?這很值得懷疑。
第八名:《 泛型編程與STL 》1644票
作者:Matthew H. Austern 譯者:侯捷 中國電力出版社
這本書揭露了 STL 的奧秘,引導(dǎo)你進(jìn)入泛型程序設(shè)計的思維模式,以你自己的可攜式組件和可交互作用的泛用型組件來擴(kuò)充 STL。閱讀這本書比較艱深,你必須對 STL 的運(yùn)用、泛型程序設(shè)計的基本精神、C++ template 技術(shù)都有相當(dāng)基礎(chǔ)了,才得一窺堂奧。
隨著STL的廣泛運(yùn)用,泛型這種編程技術(shù)逐漸被人們關(guān)注。如果你想深入探究STL原理,或者要自己用泛型編寫一個高效的程序庫,這本書一定會對你有所幫助。
第九名:《 重構(gòu)——改善既有代碼的設(shè)計(中文版) 》1530票
作者:Martin Fowler 譯者:侯捷 熊節(jié) 中國電力出版社
這是一本軟件工程領(lǐng)域的經(jīng)典著作,與另一巨著《 設(shè)計模式--可復(fù)用面向?qū)ο筌浖幕A(chǔ) 》并稱“軟工雙雄”。什么是重構(gòu)?我們在寫程序的時候,經(jīng)常需要反復(fù)推敲修改代碼,其實(shí)這就是重構(gòu)。這實(shí)際上就是軟件的持續(xù)改進(jìn)之路,我們不可能總是第一次就能做好,但是我們總是有機(jī)會完善。
本書除了討論重構(gòu)的各種技巧之外,還提供了超過70個可行重構(gòu)的詳細(xì)目錄,給出了重構(gòu)的工作原理,并以step by step的形式給出了應(yīng)用每一種重構(gòu)的指南。這些示例都是用Java語言寫成的,但其中的思想?yún)s可以運(yùn)用到任何面對象的編程語言中。
第十名:《 C# Primer中文版 》 1507票
作者:Stanley B.Lippman 譯者:侯捷 陳碩 華中科技大學(xué)出版社
這本書是為有一定編程基礎(chǔ)又想成為C#程序員的朋友寫的入門讀物,它內(nèi)容詳實(shí)、實(shí)例豐富,全面介紹了C#這門新的面向?qū)ο缶幊陶Z言,對已經(jīng)對面向?qū)ο蟪绦蛟O(shè)計有所了解的讀者,作者為他們提供在 C# 中使用面向?qū)ο蟮木幊谭椒ǖ谋貍渲R。它假設(shè)讀者有其它語言的基礎(chǔ),明白循環(huán)之類最基本的概念。
值得一提的是,本書的初譯陳碩是一位在讀本科大三的學(xué)生,你可能會對譯本的質(zhì)量懷疑,但這種懷疑是多余的。這本書登上TOP10表明.NET技術(shù)已經(jīng)在國內(nèi)開始被廣泛學(xué)習(xí),如果你想成為一名C#程序員而又不想花費(fèi)太多的時間和精力,就請試試看 Lippman 的這本《C# Primer》吧。
附11至16名:
11.《 加密與解密(第二版) 》(段鋼) 1435票
12.《 編程高手箴言 》(梁肇新) 1407票
13.《 C++設(shè)計新思維——泛型編程與設(shè)計模式之應(yīng)用 》(侯捷、於春景譯) 1372票
14.《 Inside VCL(深入核心——VCL架構(gòu)剖析) 》(李維) 1329票
15.《 .NET大局觀 》(侯捷、榮耀譯) 1258票
16.《[ISBN]7-5083-[/ISBN]》1211票
總結(jié):
從評選結(jié)果我們可以看出,講述具體技術(shù)的書籍的比例開始下降,軟件工程類和技術(shù)人文類圖書開始受到歡迎,這兩類書在TOP10占有5個名額,說明大家的視野已經(jīng)開始放開,特別是技術(shù)人文這種迎合程序員的非技術(shù)書一出現(xiàn)就受到大家的喜愛。
值得一提的是,TOP10中有四本書是侯捷翻譯或參與翻譯的,另外還有兩本他參與翻譯的《 C++設(shè)計新思維——泛型編程與設(shè)計模式之應(yīng)用 》和《 .NET大局觀 》也位居前16位,就目前看這種與別人合譯的模式很成功,也許這就是已經(jīng)形成的品牌效應(yīng)吧。
但是,像《 敏捷軟件開發(fā):原則、模式與實(shí)踐 》、《 測試驅(qū)動開發(fā)(中文版) 》這樣獲得今年Jolt大獎的優(yōu)秀圖書卻沒有上榜,這不能不說是個遺憾!所以我們在關(guān)注經(jīng)典圖書的同時也應(yīng)該適當(dāng)關(guān)注一下目前國際上最新的進(jìn)展。
在新的一年中,我們期待著更多本土作家、譯家為我來帶來豐盛的大餐!
《程序員》推薦三味書齋——軟件工程篇
創(chuàng)建人: 《程序員》
[ 查看本指南所提及的書籍 ]
主持人:熊節(jié)(Gigix):《程序員》雜志社技術(shù)編輯,C-View成員。
嘉 賓:劉藝(Newdream):大學(xué)教師,撰寫和編譯圖書多部。
汪穎(Adams):UMLChina成員,《人月神話》譯者。
Newdream:
隨著計算機(jī)技術(shù)的發(fā)展,由一兩個人關(guān)起門來打天下的軟件英雄時代一去不復(fù)返了?,F(xiàn)在的商業(yè)軟件大部分都是很多人協(xié)同工作的結(jié)果,應(yīng)用軟件也已經(jīng)由桌面應(yīng)用發(fā)展到分布式網(wǎng)絡(luò)應(yīng)用,軟件開發(fā)的難度和規(guī)模日益擴(kuò)大。不管我們愿不愿意,軟件工程正在從課堂上、書本上走下來,強(qiáng)迫我們?nèi)W(xué)習(xí)它,應(yīng)用它。工程是將理論知識應(yīng)用于實(shí)踐的科學(xué),而軟件工程則借鑒了傳統(tǒng)工程的原則和方法,以求高效地組織和開發(fā)高質(zhì)量軟件。
國內(nèi)軟件工程的研究雖然并不比國外晚,但在軟件工程的實(shí)用方面仍然滯后于美國等發(fā)達(dá)國家,特別是軟件工程的應(yīng)用人才奇缺。最近幾年,隨著大量國外軟件工程經(jīng)典圖書的引進(jìn),國內(nèi)的計算機(jī)研究和開發(fā)人員了解和學(xué)習(xí)了很多最新的軟件工程理論和技術(shù),從而推動了軟件工程的廣泛應(yīng)用?,F(xiàn)在越來越多的IT企業(yè)意識到軟件工程對保證產(chǎn)品質(zhì)量、降低開發(fā)風(fēng)險、提高管理效率的重要作用,而精通軟件工程的開發(fā)人員也成為大公司高薪爭聘對象。軟件工程圖書正在成為計算機(jī)圖書的一大熱點(diǎn)。
Gigix:
是的。兩位在軟件工程方面都有比較深的認(rèn)識,并且也都博覽群書。下面我們就來談?wù)勡浖こ痰臅伞?br>
Newdream:
對于軟件工程的初學(xué)者來說,清華大學(xué)出版社的中國計算機(jī)軟件專業(yè)技術(shù)水平考試指定用書《軟件工程》(分為初、中、高級)是一本不錯的入門讀物。該書的作者鄭人杰教授是我國知名的軟件工程專家。這本書通俗易讀,內(nèi)容系統(tǒng)權(quán)威,可以幫助讀者較全面地了解軟件工程方面的知識。但由于這本書側(cè)重應(yīng)試,因此實(shí)用性較差。
Adams:
新近業(yè)界推崇的CMM 2級從需求管理、配置管理、SQA、軟件計劃以及軟件跟蹤等KPA的角度,為規(guī)范化的軟件管理提供了理論依據(jù)——然而,它依然帶有學(xué)術(shù)派的色彩,使若干從業(yè)者有意猶未盡的感覺。《 軟件工程--實(shí)踐者的研究方法 》則涵蓋了上述領(lǐng)域,全面深入淺出地介紹了軟件工程學(xué)科的各個方面。其中,所涉及的實(shí)踐已在很大程度上超越了目前的軟工水平——不用再哀嘆路在何方,路就在腳下。
另外,《超越混沌——有效管理軟件開發(fā)項目》這本軟件工程的散文集里總結(jié)了許多經(jīng)驗(yàn)教訓(xùn),有空翻一翻,經(jīng)常會心有戚戚焉的感覺??上?,目前還沒有影印版。
Gigix:
Newdream的評價比較“中庸”,呵呵。
在我看來,軟件工程教材,能夠起到的惟一作用(如果的確有作用的話),就是指導(dǎo)軟件開發(fā)者的工作。如果不能指導(dǎo)實(shí)際工作,那些聽起來很美的詞匯、術(shù)語就沒有任何意義。因此,我總是認(rèn)為那本《 軟件工程--實(shí)踐者的研究方法 》算是目前為止最好的一本教材。對于名詞的解釋,那本《 軟件工程--實(shí)踐者的研究方法 》肯定不如某些國產(chǎn)教材來得好;但是這種一定程度的晦澀和復(fù)雜,對于正經(jīng)學(xué)習(xí)軟件工程是必要的。任何一個道理,如果說得過于抽象過于概括,那肯定會變成同義反復(fù)(也就是廢話)。國產(chǎn)教材往往就犯這個毛病。
好象我不應(yīng)該用“國產(chǎn)教材”這樣一個比較隱晦的稱呼?沒錯,說鄭人杰教授那套《軟件工程》教材,記得以前在學(xué)校的時候,大概有一年的時間在學(xué)鄭教授那套“欽定”教材。學(xué)完的感覺就是:他解釋的每個詞都很好,說的每句話都正確。整本書放之四海而皆準(zhǔn)——科技工作者的直覺告訴我,放之四海而皆準(zhǔn)的東西,多半都不可操作。
這也算是我挑選軟件工程書的一個辦法吧:不光要有辦法,還要有辦法的約束條件,以及辦法不適用的場合。也就是說,書中提供的知識必須是可證偽的。如果一本書不能說明自己提供的辦法在什么條件下失效,那讀者學(xué)到這些辦法之后還得自己去摸索它的約束條件,這本書又有什么作用呢?前一陣Smiling上有人譏笑“剛從學(xué)校出來的小朋友”,大抵就是這種情況。
Adams:
其實(shí),軟件工程歸根到底是實(shí)踐性的學(xué)科,它主要針對的是軟件開發(fā)中社會學(xué)——人的問題。因而,很難找到一篇放之四海而皆準(zhǔn)的圣經(jīng),每一位前人的著作都是來自于自己的項目、實(shí)踐,已經(jīng)為大家提供了非常好的參考。在同一位“大牛”李亮的交流中提到,“即使是相同性質(zhì)的項目,不同的團(tuán)隊(人員)也需要對原先積累的過程、方法進(jìn)行調(diào)整?!睋Q言之,“迷時師渡,悟了自渡”,各種書籍、文獻(xiàn)、前人的經(jīng)驗(yàn),在“工作在如此易于駕馭的介質(zhì)上。程序員,就像詩人一樣,幾乎僅僅工作在單純的思考中。程序員憑空地運(yùn)用自己的想象,來建造自己的‘城堡’”的學(xué)科中,只能充當(dāng)自己的老師,需要的還是自己的頓悟。
另一個角度而言,盡信書,不如無書。如果完全迷信書中的觀點(diǎn),也是不可行的。
Gigix:
剛才Adams引用的是《人月神話》中的句子吧?這本書恐怕是最近一段時間最熱門的一個話題了。記得前次有人在一個小論壇上問“這本書究竟怎么樣”,我的回答是:“如果沒有讀過‘人月’,如果不知道‘no silver bullet’,恐怕很難被認(rèn)為是一個合格的軟件工程師。”Adams沒有多談《人月神話》,大概是作為譯者的避嫌吧。
我知道的確有人不同意我的觀點(diǎn)。有個朋友認(rèn)為《人月神話》只是說出了一些指導(dǎo)性的原則、一些大而化之的概念,認(rèn)為不應(yīng)該過分地推崇它。但是,我認(rèn)為,國內(nèi)的情況,并不是普及過分,而是普及嚴(yán)重不足。這一點(diǎn)從許多的實(shí)例中就可以看出來。
所以,盡管可能被人罵為“盲從”,但我還是得說:作為一名軟件工程師,《人月神話》就是必讀書目。
Newdream:
Gigix談到普及《人月神話》的重要性,殊不知現(xiàn)在許多做軟件的人(他們也有軟件工程師、系統(tǒng)分析師等各種時髦的稱謂),根本就沒有軟件工程的概念。經(jīng)常見到一些言必談各種專業(yè)術(shù)語和詞匯,甚至懷揣系統(tǒng)分析員證書的人,卻連基本的軟件開發(fā)文檔都讀不懂。
記得有一次講面向?qū)ο蟮姆椒?,我舉的是COM+的例子,居然還有軟件工程師問哪里有對象,我說什么是COM,不就是組件對象模型(The Component Object Model)嗎,COM就是對象呀。像這種笑話很多,我們許多搞軟件開發(fā)的人還停留在崇尚編碼英雄的“小農(nóng)經(jīng)濟(jì)”時代,而軟件工程化則是軟件工業(yè)化生產(chǎn)時代的必由之路,沒有軟件工程思想的指導(dǎo),我們無法想象如何去應(yīng)對復(fù)雜多變的需求,如何組織和實(shí)施軟件開發(fā),如何進(jìn)行人員管理和團(tuán)隊協(xié)作。實(shí)際上正是近幾年來軟件工程在理論和實(shí)踐上的迅速發(fā)展,才使軟件行業(yè)的生產(chǎn)率得以提高,而這種提高并不是建立在新增多少軟件英雄或編程高手的基礎(chǔ)上。
所以普及和推廣軟件工程是一個十分嚴(yán)肅的話題。而這項工作需要面對不同層次和水準(zhǔn)的對象。你不可能指望每個開發(fā)人員都去讀《設(shè)計模式——可復(fù)用面向?qū)ο筌浖幕A(chǔ)》或《人月神話》,甚至連《軟件工程:實(shí)踐者的研究方法》這樣的教科書對于某些人也勉為其難。相反林銳的一篇《軟件工程思想》的隨筆卻成為眾多程序員追捧的軟件工程入門讀物,在網(wǎng)上廣為傳播。這篇文章的魅力在于它來自作者的經(jīng)驗(yàn)和體會,同時也向我們展示了一個夢想成為編程高手的程序員最終成長為一名軟件工程信徒的曲折心路歷程。最有趣的是文中“讓我們高舉程序主義、軟件工程思想的偉大旗幟,緊密團(tuán)結(jié)在以Microsoft為核心的軟件公司周圍,沿著比爾·蓋茨的生財之道,不分白天黑夜地編程,把建設(shè)有中國特色的軟件產(chǎn)業(yè)的偉大事業(yè)全面推向21世紀(jì)”的“經(jīng)典名句”已經(jīng)成為不少程序員津津樂道的口頭語。
無可否認(rèn),近兩年大量引進(jìn)的外國軟件工程經(jīng)典圖書確實(shí)為我們打開了眼界,據(jù)說單是機(jī)械工業(yè)出版社和中信出版社就引進(jìn)了70多種軟件工程外版圖書。由于出版界的努力,我們可以有幸閱讀到世界大師級的一流作品,但是我們還缺少來自開發(fā)第一線的、真正具有實(shí)踐體會的自己同行的作品。后者才是最貼近實(shí)際需要,為廣大程序員所接受的書籍。所以普及軟件工程的基礎(chǔ)知識和思想方法要比普及《人月神話》這樣的一兩本經(jīng)典名著更有重要意義。
Gigix:
記得剛畢業(yè)的時候,我也特別喜歡看一些軟件工程書,例如CMM、PSP、TSP之類的。但是過不多久就發(fā)現(xiàn):看不懂。真的是看不懂。書里每個字都認(rèn)識,每句話都明白,每一章節(jié)都覺得很有道理,就是湊到一起不知道對自己有什么用。后來反思一下,就是因?yàn)樽约旱膶?shí)踐經(jīng)驗(yàn)太少。別人分析的問題,說到的約束條件,自己一點(diǎn)感性認(rèn)識都沒有,所以看到別人拿出的解決方案也就只能感嘆“真有道理”了。Adams說“不要迷信”,可像這樣經(jīng)驗(yàn)尚淺,突然看到這么經(jīng)典的東西,想不迷信也難呀。
后來就轉(zhuǎn)去看一些比較貼近實(shí)際的東西,例如Martin Fowler最推崇的敏捷方法之類,感覺很好。像敏捷建模(agile modeling)、重構(gòu)、XP之類的技術(shù),體現(xiàn)的是軟件工程思想,又離低級實(shí)踐很近,比較容易為程序員所接受。例如XP,它不怎么講一套一套的大道理,只告訴你怎么設(shè)計、怎么編碼、怎么測試,就比較容易看懂。
直到現(xiàn)在我也還是看不懂某些軟件工程書(包括大學(xué)里的教材),像CMM之類的更是敬而遠(yuǎn)之。不過我也翻譯了兩本軟件工程方面的書:一本《最后期限》和一本《系統(tǒng)重構(gòu)》(臺灣版),感覺吃得很透。我想,自己的現(xiàn)象大概有一定的代表性:程序員不是不愿意接受軟工思想,只是被那些一本正經(jīng)的軟工書給嚇倒了。當(dāng)然,這里面有程序員經(jīng)驗(yàn)不足的原因(中國的程序員平均從業(yè)時間只有4年,美國是14年)。
當(dāng)然還有學(xué)校教育的問題。僅以我的經(jīng)驗(yàn)來說,學(xué)校的老師從來都沒認(rèn)為軟件工程是什么“實(shí)踐性很強(qiáng)”的課。其實(shí)要培養(yǎng)軟件工程的素養(yǎng),真的也不那么難:兩個人一起做做pair programming,每個模塊編碼之前先設(shè)計測試用例,有空的時候做做refactoring……從這些訓(xùn)練中得到好處了,自然也就有軟件工程的素養(yǎng)了。
Adams:
軟工書籍的不易于理解還有一個風(fēng)格和導(dǎo)向以及求學(xué)認(rèn)知的問題。國內(nèi)的部分圖書、教材與其說是誨人不倦,不如說是形而上學(xué)、拖沓冗長。記得一位前輩談起,“中國的數(shù)學(xué)教材,兩三頁紙橫跨上下兩三百年?!惫们也徽撨@種觀點(diǎn)是否有失偏頗,相信許多莘莘學(xué)子也會有這樣的困惑“教科書太過抽象,不知道在說什么”。記得,在學(xué)習(xí)匯編語言的時候,當(dāng)時頗流行一本“經(jīng)典”教材。若干年后,偶然翻到一本外文原版的書籍,才知道原是減頭去尾,斷章取義,把前人淺顯易懂的文字“抽象”“升華”——無言以對。
CMM等學(xué)術(shù)經(jīng)典在于它能夠提供一個框架,雖然太過簡練。而許多軟件工程的書籍,如《人月神話》、《軟件工程:實(shí)踐者的研究方法》恰恰填補(bǔ)了理論與實(shí)踐之間的空白,至少能為讀者切實(shí)實(shí)踐提供真正的指導(dǎo)?!对O(shè)計模式》、面向?qū)ο蟮葦?shù)據(jù)則從軟件開發(fā)的角度提供了過程(工程)的載體。正所謂,工欲善其事,必先利其器,另外還需要思想的指導(dǎo)。軟件工程就是起這樣的作用,不過正如馬列主義思想的誕生一樣,都需要不斷地實(shí)踐、實(shí)踐、再實(shí)踐。這的確是一個長期漫長的過程,沒有其它捷徑。
Newdream:
我非常同意汪穎關(guān)于風(fēng)格和導(dǎo)向的見解。的確這是不容忽視的問題。國內(nèi)的專業(yè)書籍和教材八股風(fēng)格居多,引經(jīng)據(jù)典,卻很少有自己的研究成果和實(shí)踐經(jīng)驗(yàn)。軟件工程方面亦然。當(dāng)然,這也和學(xué)術(shù)風(fēng)氣不好有關(guān)。好在現(xiàn)在是市場經(jīng)濟(jì)的時代,讀者對于作者和圖書有最大的選擇權(quán)和投票權(quán)。特別是大量優(yōu)秀外版圖書的引進(jìn),將對國內(nèi)的學(xué)人和作者產(chǎn)生巨大的沖擊。
關(guān)于軟件工程以實(shí)踐為本的導(dǎo)向,這是一個十分重要的觀點(diǎn),對大家如何去學(xué)習(xí)和掌握軟件工程的理論和方法有著積極的指導(dǎo)意義。一般,我會建議入門者先學(xué)習(xí)一兩本基礎(chǔ)教材,建立軟件工程的概念和框架體系。計算機(jī)專業(yè)的學(xué)生可以直接閱讀《軟件工程:實(shí)踐者的研究方法》,不過這本書也不是萬能的,國外網(wǎng)站上有不少讀者批評這本書只適合作教材、拿學(xué)位,對實(shí)際開發(fā)指導(dǎo)不夠。
如果作了程序員,還可以邊工作邊讀一些實(shí)踐性很強(qiáng)的開發(fā)指導(dǎo)書,比如《 編寫有效用例(英文版) 》、《Applying UML And Patterns (Second Eition)》、《Systems Analysis and Design Methods(Fifth Edition)》等。值得一提的是《Systems Analysis and Design Methods(Fifth Edition)》采用案例教學(xué)法,非常易學(xué)易用,高教出版社有影印版,價格便宜,原汁原味。這些書將伴隨你在實(shí)踐中解決問題,不斷提高你的水平。
有了程序員的經(jīng)驗(yàn),再讀《統(tǒng)一軟件開發(fā)過程》、《設(shè)計模式》、《人月神話》等名著才能真正掌握設(shè)計開發(fā)的要旨,領(lǐng)會軟件過程的精髓,進(jìn)一步鋪就通往系統(tǒng)分析員和項目主管的金光大道。
總之,程序員要提高自身的開發(fā)水平,決不可能通過閱讀幾本軟件工程經(jīng)典名著就可以一蹴而就。學(xué)習(xí)——實(shí)踐——再學(xué)習(xí)——再實(shí)踐才是唯一的成功之路。所以在不同的發(fā)展階段,要選好適合自己的軟件工程圖書,決不能好高騖遠(yuǎn)或人云亦云、盲從盲信。
程序員》推薦定位自己 有的放矢——一位技術(shù)作家眼中的Java圖書選購技巧
作者以Java圖書做范例,總結(jié)自已多年購書的經(jīng)驗(yàn),并全面剖析了當(dāng)前Java圖書市場的現(xiàn)狀,讀來很有深意。希望在閱讀本文后,讀者能真正購買到適合自己且“不太差”的圖書。
選購電腦書的原則是什么?可能的答案有:好懂、全面、深入、實(shí)用等,本人以為,最重要的是選購一本自己能看懂的書,然后才能考慮其它方面。
進(jìn)過書店的讀者都知道,電腦書的選購非常令人頭疼,你肯定是因?yàn)椴欢畷械膬?nèi)容才會購買,但是電腦技術(shù)的實(shí)踐性很強(qiáng)且越來越復(fù)雜。就編程技術(shù)來說,多數(shù)情況下需要上機(jī)編寫程序才能知道自己是否學(xué)會了。不過書店不會提供機(jī)器讓你編程序,甚至連小硬板凳都不提供,你只能站著或者蹲著看書,即便腰酸背疼腿抽筋地看到書店下班,也不一定能知道哪本書自己能看懂。那么,有沒有一些簡單的方法利于判斷呢?本文將以Java圖書為例,告訴讀者一些技巧。
關(guān)于電腦書的現(xiàn)狀,本人認(rèn)為基本的事實(shí)是好書不多、壞書不少,凡是看過幾本的讀者應(yīng)該或多或少有所體會,問題有多嚴(yán)重不便在此描述,就用下面的圖示作為支持本人觀點(diǎn)的一個證據(jù)吧:
這是新聞組上的一篇文章,這位叫落花吹雪的網(wǎng)友是計算機(jī)專業(yè)的畢業(yè)生,顯然不笨,可是居然“看書越看越糊涂”,以至于連“對象”一類最基本的OO(面向?qū)ο螅┬g(shù)語都不明白。
分析造成如此局面的原因同樣不是本文的目的,那是需要很多長篇大論才能徹底曝光的,本文只想告訴讀者,如果我們不得不在垃圾箱中找食物充饑,那怎樣才能找到比較衛(wèi)生的?
下面,本文將模擬讀者進(jìn)入書店選書的過程,看看讀者在該過程的各個階段,應(yīng)該注意哪些事項。中心思想是怎樣根據(jù)能看懂的內(nèi)容,對書的質(zhì)量和是否選購做出決定。當(dāng)然,通常情況下,書中的技術(shù)內(nèi)容在書店中很難看懂(因?yàn)椴荒茉跈C(jī)器上測試),但是有些非技術(shù)內(nèi)容可以看懂,例如書名、作者名等等。
選書的順序:外文原版/翻譯版/本國作者版
看到這個標(biāo)題,不會有人罵我是漢奸吧?這是本人選書的No.1原則,很多專家也都建議盡力閱讀外文原著(如果外文過關(guān)的話),例如侯捷先生。
走進(jìn)任何一家書店,可以把書店里的電腦書分成外文原版/翻譯版/本國作者版3類。首選外文原版的原因很多,作者以為最重要的原因是外文書原裝、原汁、原味的,誰讓電腦技術(shù)基本上都是洋人發(fā)明的呢??墒钱?dāng)這些原裝貨被翻譯過來或者由國內(nèi)作者再闡述一遍時,味道可能就變了,或者說有“中國特色”了,不幸的是很多情況下是變差了而不是變好了,下面就舉落花吹雪網(wǎng)友不明白的“對象”一詞為例。
本人剛開始接觸面向?qū)ο蠹夹g(shù)時,也象落花吹雪一樣,看書越看越糊涂,很久都不知道什么是對象?!皩ο蟆笔敲嫦?qū)ο蠹夹g(shù)的最基本概念,一般也是需要解釋的第一個概念,本人至今還記得看的第一本書(還是譯著)是這樣講解的(大意):
按照面向?qū)ο罄碚?,世界是由對象組成的。例如人是對象,電腦是對象,豬是對象,泥巴也是對象……
我是頭一次聽說世界是由對象組成的,而我學(xué)的馬克思主義哲學(xué)告訴我,世界是由物質(zhì)組成的,除了物質(zhì)什么都沒有,我對他老人家的觀點(diǎn)一直堅信不疑。那么“對象”又是什么東西?記得自己后來又翻了別的書,結(jié)果發(fā)現(xiàn)也是滿篇“對象”,難道世界真變成對象了?這種說法動搖了我堅如磐石的世界觀,可又沒有因此建立新的世界觀,所以感到極大的困惑,以后的內(nèi)容自然就無法看懂了。
終于有一天,看到了一本英文資料,才知道“對象”是Object的譯文。Object的含義是“物體”,這是中學(xué)生都認(rèn)識的簡單詞匯,如果你閱讀的是英文書而不是二手的譯著,即便第一次學(xué)習(xí)面向?qū)ο蠹夹g(shù),也不會不明白什么是Object,所以我就把上面的中文又翻譯回了英文:
Everything in the world is an object. A man is an object. A PC is an object.A pig is an object……
這段英文很簡單,沒有被歪曲的中文意思為:
世界上的一切都是物體。人是物體,電腦是物體,豬是物體……
看,“一切都是物體”的含義和我的世界觀基本一致了。從此,本人才慢慢學(xué)會了面向?qū)ο蠹夹g(shù)。順便說一句,《Think in Java》有一章的標(biāo)題就是Everything is an object.
原裝的英文通常很容易理解,但是當(dāng)它變成譯文或者中國作者再用自己的話講解時,常常變得莫名其妙,特別是專業(yè)術(shù)語,可能與英文原意差距極大,差距之大甚至可以寫笑話了,例如可以用中文“對象”證明一個人的太太是他養(yǎng)的豬和他養(yǎng)的豬就是他太太,推理如下:
因?yàn)榘凑彰嫦驅(qū)ο罄碚?,萬事萬物都是對象。
所以,豬是對象—他養(yǎng)的豬是對象—他養(yǎng)的豬是他的對象。
又因?yàn)樗膶ο缶褪撬奶奶褪撬膶ο蟆?br>所以,他養(yǎng)的豬是他的太太,他的太太就是他養(yǎng)的豬。
但是,你無法用英文證明Pig和Wife是同一個Object。這里本人對讀者有個請求,如果你知道“對象”的原創(chuàng)者是誰,請千萬不要把上面笑話中的“他”改成“你”,然后寄給原創(chuàng)者。
對英文術(shù)語的拙劣翻譯是翻譯版和國內(nèi)作者版圖書的通?。ㄆ渌≡诤竺嬷v述),除了“對象”,聞名遐爾的還有“套接字”(Socket插座)、“句柄”(Handle把手/手柄)等等一堆垃圾名詞,這是本人首選原版書的一個重要原因。但是,書店里的原版書太少,從國外買又太貴,補(bǔ)救方法是通過網(wǎng)絡(luò)尋找一些免費(fèi)學(xué)習(xí)資料。例如Sun網(wǎng)站上就有大量的教程,《Think in Java》也有免費(fèi)的電子版,目前該書的英文版也在書店里出現(xiàn)了。
書店里,有深度的Java書,大部分為國外作者所著(其它電腦技術(shù)圖書可能也是這樣),而國內(nèi)作者的書主要集中在Java入門知識和JSP領(lǐng)域。
封面/封底/內(nèi)容摘要/前言等
這些內(nèi)容是很容易看懂的,讀者應(yīng)該注意下面這些信息:
作者的資歷
國外作者的著作(英文書或者譯著)通常都有作者簡介,如非名家,多半也是專家,例如《Think in Java》的作者Bruce Eckel,Sun公司的著作等,否則就不好意思暴露身份了。
然而,國內(nèi)作者的著作多半沒有。所以,本人的建議是,選擇那些有資歷作者的著作,當(dāng)然,十有八九又得選國外作者的書了。
作者的聯(lián)系地址
同樣,國外作者的著作(英文書或者譯著)一般都有聯(lián)系地址。有地址意味著作者對自己的著作比較有信心,質(zhì)量有相當(dāng)?shù)谋WC,否則不是招罵嗎?以前,國內(nèi)圖書沒有作者的聯(lián)系地址,現(xiàn)在少數(shù)圖書也列上了作者地址,也許這是國內(nèi)作者質(zhì)量改善的信號。所以,本人的建議是,選擇那些有作者地址的圖書。
印刷次數(shù)和冊數(shù)
多數(shù)電腦書會印上自己的印刷次數(shù)和冊數(shù)。電腦書第一次印刷量一般為5000冊,如果重印了,說明圖書的質(zhì)量較高,例如《Think in Java》的中文版《 JAVA編程思想 》就印刷了數(shù)次。但是指定教材不能這樣判斷,質(zhì)量再差讀者也是不得不買。另外應(yīng)該注意的是,如果圖書涉及的技術(shù)較深,質(zhì)量再高可能也不會重印。
圖書的厚度
就Java而言,本人以為頁數(shù)少于200的Java書可能講不了什么東西。目前,書店里有Sun公司的一些比較薄的書,作者翻過一本有關(guān)EJB的,發(fā)現(xiàn)主要內(nèi)容是講體系、結(jié)構(gòu)、層次等等,不是教你編碼的,好象屬于研究方面的。
前言和內(nèi)容摘要
一本書的前言和內(nèi)容摘要主要有下面這些信息:
n本書的層次/主要內(nèi)容/讀者對象
關(guān)于這一點(diǎn)見下一節(jié)的說明。
n本書的特色
幾乎所有的書都自稱“通俗易懂”、“循序漸進(jìn)”或者有XX“特色”、“優(yōu)點(diǎn)”等,反正就是說自己是本好書。想想也可以理解,有哪個作者會說自己的書很差?本人的觀點(diǎn)是,大部分書的這些自吹自擂都不可信,只是廣告詞而已,除非它能說明自己是如何做到“通俗易懂”、“循序漸進(jìn)”的。
本人也寫了幾本Java書,甚至自稱“Bestbook”,為了說明自己不是空口無憑,花了不少篇幅來列舉證據(jù),包括印上讀者來信,也包括本人的聯(lián)系地址和網(wǎng)站。侯捷先生的書上也有不少讀者來信。然而,印上讀者來信的電腦書很少,包括國外作者的書。
確定圖書的類型
常見的Java書可分為下面幾種類型:
n 有關(guān)語法和API的
n 集成開發(fā)環(huán)境的
n 工程方面的
這是本人自己的分類,和讀者的理解可能不完全相同,下面就解釋一下。
《Think in Java》就屬于第一類,適合于入門者,無論是基礎(chǔ)知識的入門還是高級知識的入門。例如如果你不知道Servlet和EJB,盡管這些知識比較高級,仍然要選擇第一類的圖書。
集成開發(fā)環(huán)境通常描述菜單、按鈕之類的作用,很少涉及具體的語法和API,例如Jbuilder方面的書。如果你不會EJB,通過集成環(huán)境也幫不了你多少。選擇集成環(huán)境的圖書要在自己有語法和API基礎(chǔ)之后。
工程方面圖書的特點(diǎn)是綜合性較強(qiáng)、內(nèi)容較深,判斷的標(biāo)準(zhǔn)之一是例子的代碼是否很長。這類書容易和第一類圖書混淆,實(shí)際上,很多書自身就是混淆的,或者說得好聽點(diǎn):兼具兩類書的特點(diǎn)。
本人翻過一本W(wǎng)rox的書《 Wrox程序員參考系列:Java服務(wù)器高級編程 》,感覺就是這樣。它講了EJB、Servlet等,但是如果想學(xué)會,可能有相當(dāng)難度。目前Wrox的書(特點(diǎn)是封面上有很多人頭像)在國內(nèi)不少,本人更愿意把它們歸入工程類,即當(dāng)你先學(xué)會了EJB、Servlet等內(nèi)容后,再看這些書會比較容易,同時也有很大的收獲。
書店里還有一些以例子為主的書,例如怎樣做一個功能完整的網(wǎng)站等,這類書也應(yīng)該屬于工程類,它們對語法和API的講解通常很簡略。
有一些手冊之類的書,例如列出所有API含義的那種書,像字典一樣,顯然,你肯定不會把這些書當(dāng)課本用。
還有一些書猛一看有點(diǎn)像“夸夸其談”之作,特點(diǎn)是代碼很少,例如前面提到的Sun公司的一些薄書。本人感覺這些書的層次更高,必須有很高的水平才會覺得有用,例如《J2EE核心模式》,坦率地說,本人還沒到這種層次。
確定圖書的技術(shù)層次
從前言、內(nèi)容摘要甚至?xí)峡梢粤私獾綀D書的層次或者起點(diǎn),如“入門”或者“初級”、“中級”、“高級”等等。這些描述多半是誠實(shí)的,但是太籠統(tǒng)并且不一定完全正確,例如“初級”、“高級”究竟具體到什么程度?
《Think in Java》在Introduction一章專門有Prerequisites(預(yù)備知識)一節(jié),很詳細(xì)地描述了《Think in Java》需要讀者具備的技術(shù)基礎(chǔ),部分原文如下:
This book assumes that you have some programming familiarity: you understand that a program is a collection of statements, the idea of a subroutine/function/macro, control statements such as“if” and looping constructs such as “while,” etc.
本人所寫的Java書也比較詳細(xì)地描述了讀者需要具備的預(yù)備知識。
手里有一本John Zukowski所著《Mastering Java 2》的中文版《 Java 2從入門到精通(J2SE 1.4版) 》,書作者也是位專家,該書出版較早,目前書店里很難找到了。其前言和內(nèi)容摘要稱其適合各級開發(fā)人員,所以本人曾經(jīng)想把它當(dāng)入門書,但是發(fā)現(xiàn)很難看懂,原因是作者設(shè)定的入門門檻,比本人實(shí)際的門檻高,可那是本人把書買回來以后才發(fā)現(xiàn)的。
本人以為,在書店里確定圖書的技術(shù)門檻是否和自己的門檻高度一致非常困難,前言和內(nèi)容摘要的說法不可靠。
閱讀正文
前面說過,因?yàn)椴荒軠y試,在書店里通常無法看懂想學(xué)習(xí)的技術(shù)內(nèi)容,但是仍然有方法幫助你在一定程度上判斷該書的質(zhì)量:
n 閱讀已知的內(nèi)容
如果了解書中的部分內(nèi)容,先看看書中是怎樣講解的。
n 如果買書是為了解決某些問題
那就看看所選的書是否提供了答案,當(dāng)然你不一定能夠看懂。
n 作者的文筆
作者的文筆當(dāng)然影響圖書的質(zhì)量,本人以為文筆的底限是簡潔通順。就本人認(rèn)為,國內(nèi)作者和譯者的文筆通常很一般,老外的句子就活潑一些。本文前面談過英文術(shù)語的翻譯問題,這是譯著和國內(nèi)作者版共同的問題。然而,譯著的一個特有問題是語句不通順的情況很多,侯捷先生的文章列舉了不少例子。如果是國內(nèi)作者版,那語句不通的問題就比較少。判斷文筆的簡單方法之一是數(shù)數(shù)句子是否太長,例如一句話超過30個字可能讀起來就比較費(fèi)勁了。
某些書的前言和內(nèi)容摘要的文筆相當(dāng)好,不能以此判斷全書,你還是需要閱讀正文。
我的建議是,如果發(fā)現(xiàn)文筆不錯,書的質(zhì)量可能比較好,這起碼說明作者的寫作比較認(rèn)真。如果文筆一般,就不好說了,因?yàn)榭赡茏髡叩奈墓P就是如此。文筆差的書最好不買,不管文筆差的原因是什么,不好懂是肯定的。但是如果買譯著,可能就得忍著點(diǎn)了。
選書時的其它注意事項
n 不要被書名迷惑
現(xiàn)在的電腦書名非常誘人,例如“傻瓜書”、“輕松入門”、“快速精通”、“X日通”等等,這些很可能只是廣告詞而已。
n 不要只看前言和內(nèi)容摘要
如果把書名比喻成廣告標(biāo)題,那么前言和內(nèi)容摘要就是廣告內(nèi)容了。到書店隨便翻翻,沒有一本書的前言和內(nèi)容摘要寫得不引人入勝的,難道都可以買?
n 不要迷信出版社
某些出版社的名氣可能比其他出版社大,但是圖書的質(zhì)量主要取決于作者而不是出版社。
n 不要為裝璜漂亮的書所吸引
猩猩也能穿上名牌服裝,可它仍然是頭畜生。
n 書店里同類書非常多,可以對照比較。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。