出版時(shí)間:2006-3 出版社:電子工業(yè)出版社 作者:[美] 史蒂夫·邁克康奈爾 頁(yè)數(shù):914 譯者:金戈,湯凌,陳碩,張菲 譯,裘宗燕 審校
Tag標(biāo)簽:無(wú)
前言
普通的軟件工程實(shí)踐與最優(yōu)秀的軟件實(shí)踐差距巨大——多半比其他工程學(xué)科中的這種差距都要大。因此傳播優(yōu)秀實(shí)踐經(jīng)驗(yàn)的工具是十分重要的?!狥red Brooks 我寫這本書的首要目的,就是希望縮小本行業(yè)中一般商業(yè)實(shí)踐與大師級(jí)人物及專家們之間的知識(shí)差距。許多強(qiáng)大的編程技術(shù)在被編程領(lǐng)域的大眾接觸之前,都已在學(xué)術(shù)論文和期刊里塵封了多年。雖然近年來(lái)前衛(wèi)的軟件開發(fā)實(shí)踐迅速發(fā)展,但普通的實(shí)踐手段并沒(méi)有太大變化。很多程序的開發(fā)仍然是漏洞百出、遲于交付并且超出預(yù)算,還有很多根本就無(wú)法滿足用戶的需求。軟件業(yè)界以及學(xué)術(shù)界的研究人員們已經(jīng)發(fā)現(xiàn)了不少行之有效的實(shí)踐經(jīng)驗(yàn),足以解決自20世紀(jì)70年代以來(lái)編程領(lǐng)域中日益蔓延的大多數(shù)問(wèn)題??墒沁@些實(shí)踐經(jīng)驗(yàn)很少在高度專業(yè)化的技術(shù)期刊之外對(duì)外發(fā)表,所以時(shí)至今日大多數(shù)編程的機(jī)構(gòu)和組織還沒(méi)能用上這些技術(shù)。有研究表明,一項(xiàng)研發(fā)成果從其誕生之日起,到進(jìn)入商業(yè)實(shí)踐階段,通常要經(jīng)歷 5到15年的時(shí)間甚至更長(zhǎng)(Raghavan和Chand 1989;Rogers 1995;Parnas 1999)。這本手冊(cè)就是想縮短這一漫長(zhǎng)的過(guò)程,讓那些關(guān)鍵性的研發(fā)成果現(xiàn)在就能為更多編程人員所用。Who Should Read This Book 誰(shuí)應(yīng)當(dāng)閱讀本書 本書中所匯集的研究成果和編程經(jīng)驗(yàn),將幫助你創(chuàng)建更高質(zhì)量的軟件,使你能更快速地進(jìn)行開發(fā),遇到的問(wèn)題更少。本書將幫你弄明白過(guò)去為什么會(huì)遇到那些問(wèn)題,并告訴你如何在將來(lái)避免它們。這里所描述的編程實(shí)踐將幫助你把控更大型的項(xiàng)目,還能在項(xiàng)目的需求發(fā)生變動(dòng)時(shí)幫助你成功地維護(hù)并修改已經(jīng)開發(fā)出來(lái)的軟件。Experienced Programmers 經(jīng)驗(yàn)豐富的程序員 對(duì)于經(jīng)驗(yàn)豐富的程序員而言,本書正是他們想要的一本翔實(shí)、易用的軟件開發(fā)指南。本書關(guān)注的是“構(gòu)建(construction)”,即整個(gè)軟件生命周期中最為人熟知的部分;本書把強(qiáng)大的軟件開發(fā)技術(shù)寫得讓自學(xué)的程序員和參加過(guò)正規(guī)訓(xùn)練的程序員都能讀懂。Technical Leads 技術(shù)領(lǐng)導(dǎo) 許多技術(shù)領(lǐng)導(dǎo)(或者說(shuō)是技術(shù)帶頭人)都曾在他們的團(tuán)隊(duì)中使用《代碼大全》(第一版)培訓(xùn)經(jīng)驗(yàn)不足的程序員。當(dāng)然,本書也可以用來(lái)填補(bǔ)你自己的知識(shí)缺陷。如果你是一位經(jīng)驗(yàn)豐富的程序員,你不一定會(huì)同意我給出的所有結(jié)論(如果不是這樣,我倒會(huì)覺(jué)得奇怪)。但如果你閱讀本書并思索其中的每一個(gè)問(wèn)題之后,那么幾乎不會(huì)有人再能提出什么你未曾思考過(guò)的軟件構(gòu)建方面的問(wèn)題了。Self-Taught Programmers 自學(xué)的程序員 如果你沒(méi)有受過(guò)太多的正規(guī)訓(xùn)練,本書正是你的良伴。每年約有50000 個(gè)新手進(jìn)入這一專業(yè)領(lǐng)域(BLS 2004, Hecker 2004),但每年卻只有35000 個(gè)人獲得與軟件相關(guān)的學(xué)位(NCES 2002)。從這些數(shù)據(jù)中我們可以很快得出一個(gè)結(jié)論——很多程序員并沒(méi)有接受過(guò)軟件開發(fā)方面的正規(guī)教育。在許多新興的專業(yè)人員社群中都可以看到自學(xué)的編程人員——工程師、會(huì)計(jì)師、科學(xué)家、教師以及小公司的老板們;編程序是他們工作的一部分,但他們并不一定把自己看作是程序員。無(wú)論你在編程方面受過(guò)何種程度的教育,本手冊(cè)都會(huì)讓你能對(duì)各種行之有效的編程實(shí)踐有深入的了解。Students 學(xué)生 與有經(jīng)驗(yàn)但缺乏正規(guī)培訓(xùn)的程序員對(duì)應(yīng)的,是那些剛剛畢業(yè)的大學(xué)生。新近畢業(yè)的學(xué)生大多擁有豐富的理論知識(shí),但卻缺乏創(chuàng)建產(chǎn)品級(jí)的程序( production programs)的實(shí)踐技術(shù)。關(guān)于編寫優(yōu)秀代碼的實(shí)踐知識(shí),就像部落里祭祀儀式上的舞蹈一樣,只能慢慢地從軟件架構(gòu)師、項(xiàng)目負(fù)責(zé)人、分析師以及更有經(jīng)驗(yàn)的程序員那里傳承下來(lái)。更多的時(shí)候,這些知識(shí)就是程序員個(gè)人反復(fù)的嘗試和犯錯(cuò)后的結(jié)晶。本書則是這些緩慢、傳統(tǒng)的智慧傳承方式的一種替代方案,它匯集了以往只能從他人經(jīng)驗(yàn)中獵取和收集的大量實(shí)用的經(jīng)驗(yàn)技巧和有效的開發(fā)策略。對(duì)于那些正在從學(xué)術(shù)環(huán)境轉(zhuǎn)向?qū)I(yè)環(huán)境的學(xué)生來(lái)說(shuō),這是一本必備的讀物。Where Else Can You Find This Information 還能從何處找到這些信息 本書綜合整理了來(lái)自四面八方的多種軟件構(gòu)建技術(shù)。這些技術(shù)是軟件構(gòu)建領(lǐng)域長(zhǎng)年累月積聚下來(lái)的智慧財(cái)富,它們不僅分散,而且其中大部分素材常年散落于紙面之外(Hildebrand 1989,McConnell 1997a)。其實(shí),內(nèi)行的程序員們所用的那些強(qiáng)大有效的編程技術(shù)并不神秘。但是這些內(nèi)行人士面對(duì)手頭日復(fù)一日緊張沖刺的項(xiàng)目,幾乎沒(méi)有誰(shuí)花些時(shí)間和大家分享他們所學(xué)到的知識(shí)和技能。因此,程序員們可能很難找到很好的關(guān)于編程的信息來(lái)源。而本書所描述的技術(shù)則填補(bǔ)了入門圖書和高級(jí)編程圖書之間的空白。當(dāng)你讀過(guò)了《Java編程入門》、《高級(jí)Java編程》和《高高級(jí)Java編程》之后,如果你還想學(xué)更多的編程知識(shí),那還能讀點(diǎn)什么呢?你可以閱讀Intel或 Motorola的硬件參考手冊(cè),閱讀Microsoft Windows或Linux操作系統(tǒng)的函數(shù)手冊(cè),甚至是去閱讀講另外一門編程語(yǔ)言的書籍——你確實(shí)無(wú)法在一個(gè)缺乏這種詳細(xì)參考資料的環(huán)境中使用語(yǔ)言或者程序。但本書是為數(shù)不多的探究編程本質(zhì)的書籍之一。無(wú)論你在何種環(huán)境下、用何種語(yǔ)言編寫程序,書中某些最有益處的編程技術(shù)都能派上用場(chǎng)。其他的書一般都忽略了這些實(shí)踐知識(shí),而這也正是本書專注于這些知識(shí)的原因。本書中的信息是從許多來(lái)源中提煉出來(lái)的,如下圖所示。想完全獲得在本書中看到的這些信息的另外途徑只有一條,那就是通讀堆積如山的書籍和成百上千本技術(shù)期刊,還得再加上大量的實(shí)際經(jīng)驗(yàn)。即便你把這些事情都做到了,本書仍然會(huì)對(duì)你很有益處,因?yàn)樗阉羞@些資料都集于一處,便于查閱。Key Benefits of This Handbook 閱讀本書的收益 無(wú)論你是何種背景,本書都能助你在更短的時(shí)間內(nèi)寫出更棒的程序,還不會(huì)那么頭疼。全面的軟件構(gòu)建參考本書討論了軟件構(gòu)建活動(dòng)的方方面面,比如說(shuō)軟件的質(zhì)量,還有編程的思維方式。它還會(huì)深入闡述構(gòu)建活動(dòng)中的重要細(xì)節(jié),如創(chuàng)建一個(gè)類的步驟,使用數(shù)據(jù)和控制結(jié)構(gòu)時(shí)的各種事項(xiàng),還有調(diào)試、重構(gòu)、代碼調(diào)優(yōu)的技術(shù)與策略等。你無(wú)須逐頁(yè)通讀所有主題。本書寫得讓你很容易就能找到感興趣的特定話題。隨時(shí)備用的核對(duì)表本書包括了大量的核對(duì)表(checklist),你可以用它來(lái)評(píng)估軟件架構(gòu)、設(shè)計(jì)方法、類和子程序的質(zhì)量、變量命名、控制結(jié)構(gòu)、代碼格式、測(cè)試用例等等。與時(shí)俱進(jìn)的信息本書介紹了一些當(dāng)今最為入時(shí)的技術(shù),其中有許多還未被廣泛采用。正因?yàn)楸緯鴶X取了實(shí)踐與研究?jī)烧叩木?,它所介紹的這些技術(shù)將經(jīng)久不衰,受用多年。以更廣的視角檢視軟件開發(fā)本書將給你一個(gè)機(jī)會(huì),讓你凌駕于日復(fù)一日、忙于救火的混亂場(chǎng)面之上,看看到底什么是可行的,而什么又是不可行的。實(shí)踐中的程序員們很少有時(shí)間去閱讀數(shù)以百計(jì)的書籍與期刊,而本手冊(cè)萃取了其中的精華。本書所匯集的理論研究與實(shí)踐經(jīng)驗(yàn)將活躍你的思維,激勵(lì)你對(duì)自己項(xiàng)目的思考,使你的行動(dòng)更有策略,避免反復(fù)陷入完全一樣的戰(zhàn)斗。絕不注水有些軟件書籍,其中精髓部分的凈重也就1克,卻注入了重達(dá) 10克的水分。本書則會(huì)公平地探討每項(xiàng)技術(shù)的優(yōu)劣。關(guān)于你自己項(xiàng)目的特定需求,你了解得要比任何人都清楚。因此本書僅是給你公正客觀的信息,讓你能夠具體情況具體分析,做出正確的決策。有關(guān)概念適用于大多數(shù)常見(jiàn)的語(yǔ)言本書中介紹的技術(shù)能讓你可以更好地利用你的編程語(yǔ)言,無(wú)論是C++、C#、Java、VisualBasic,還是其他類似語(yǔ)言。豐富的代碼示例本書中收集了近500個(gè)用于展現(xiàn)優(yōu)、劣代碼之差異的示例。之所以給出這么多示例也是出于個(gè)人的偏好。因?yàn)閺氖纠形易钅軐W(xué)到東西,我想其他程序員也該可以通過(guò)這種方式學(xué)得更好吧。這些示例是用了多種不同的語(yǔ)言所寫成,因?yàn)閷W(xué)習(xí)并掌握不止一門語(yǔ)言通常是專業(yè)程序員職業(yè)生涯中的分水嶺。一旦一名程序員意識(shí)到編程原則是超越特定語(yǔ)言語(yǔ)法的東西時(shí),通往能夠?qū)嵸|(zhì)地改善編程質(zhì)量并提高工作效率的知識(shí)的大門也就向他敞開了。為了避免以多種語(yǔ)言寫成的例子成為讀者的負(fù)擔(dān),我會(huì)盡量避免使用各語(yǔ)言中那些深?yuàn)W的特性——除非當(dāng)時(shí)就是需要探討它。為了弄懂一個(gè)代碼片段要表達(dá)的問(wèn)題,你無(wú)須完全理解所有的細(xì)枝末節(jié)。如果你集中關(guān)注示例所展示的問(wèn)題,那么無(wú)論它是用什么語(yǔ)言寫成的,你都能讀懂。為讓你更容易理解這些示例,我還給其中的關(guān)鍵部分加了注解。引用其他信息來(lái)源本書匯集了為數(shù)眾多關(guān)于軟件構(gòu)建方面的可用信息,但這并不算完。在本書所有的章節(jié)中,“更多資源”一節(jié)都會(huì)介紹其他一些書籍和文章,你希望進(jìn)一步深入了解感興趣的話題時(shí)可以閱讀它們。配套網(wǎng)站在本書的配套網(wǎng)站cc2e.com上會(huì)提供更新的核對(duì)表、參考書目、雜志文章、網(wǎng)頁(yè)鏈接等內(nèi)容。要訪問(wèn)《代碼大全》(第二版)中的相關(guān)信息,請(qǐng)如本段文字左側(cè)所示,在瀏覽器中輸入“cc2e.com/”,后跟一個(gè)四位阿拉伯?dāng)?shù)字即可。這樣的網(wǎng)址參考鏈接在本書中會(huì)有很多。Why This Handbook Was Written 為什么要寫這本手冊(cè) 在軟件工程界,人們都清楚地認(rèn)識(shí)到,應(yīng)該把軟件開發(fā)中行之有效的實(shí)踐知識(shí)歸納、編撰成一本開發(fā)手冊(cè)。計(jì)算機(jī)科學(xué)與技術(shù)委員會(huì)( ComputerScienceandTechnologyBoard)的一份報(bào)告指出,要想大幅提高軟件開發(fā)的質(zhì)量和工作效率,需要把已知的行之有效的軟件開發(fā)實(shí)踐知識(shí)歸納、統(tǒng)一并廣為傳播(CSTB1990,McConnell1997a)。該委員會(huì)還指出,傳播這些知識(shí)的策略應(yīng)建立在軟件工程手冊(cè)這個(gè)概念的基礎(chǔ)之上。The Topic of Construction Has Been Neglected 軟件構(gòu)建的話題常被忽視 曾幾何時(shí),軟件開發(fā)和編寫代碼被認(rèn)為是同一件事情。但隨著軟件開發(fā)周期中的各個(gè)活動(dòng)被人們逐漸認(rèn)識(shí),該領(lǐng)域中一些最棒的頭頭腦腦們就開始花更多時(shí)間去分析和爭(zhēng)論諸如項(xiàng)目管理方法、需求、設(shè)計(jì)、測(cè)試等問(wèn)題了。在這場(chǎng)學(xué)習(xí)研究新興領(lǐng)域的浪潮中,代碼構(gòu)建這個(gè)與軟件開發(fā)骨肉相連的環(huán)節(jié)反而被忽視了。關(guān)于軟件構(gòu)建的討論之所以步履蹣跚,也是因?yàn)橛腥苏J(rèn)為,如果將構(gòu)建活動(dòng)視作軟件開發(fā)中的一項(xiàng)特定活動(dòng),就暗示著也必須把它視作其中一個(gè)特定階段。然而實(shí)際上,軟件開發(fā)中的各項(xiàng)活動(dòng)和各個(gè)階段無(wú)須以特定的關(guān)系一一對(duì)應(yīng)起來(lái);而且無(wú)論其他的軟件活動(dòng)是分階段(phase)進(jìn)行、還是迭代式(interation)進(jìn)行,或者以某種其他方式進(jìn)行,都不妨礙我們探討“ 構(gòu)建活動(dòng)”。Construction Is Important 構(gòu)建活動(dòng)是重要的 構(gòu)建活動(dòng)被學(xué)者和作者所忽略的另一個(gè)原因是源于一個(gè)錯(cuò)誤的觀念,他們認(rèn)為與其他軟件開發(fā)活動(dòng)相比,構(gòu)建是一個(gè)相對(duì)機(jī)械化的過(guò)程,并沒(méi)有太多可改進(jìn)的機(jī)會(huì)。然而事實(shí)并非如此。“代碼構(gòu)建”一般占據(jù)了小型項(xiàng)目65%的工作量,而在中型項(xiàng)目上也達(dá)到了50%。同時(shí),“構(gòu)建”也要為小型項(xiàng)目中75%的錯(cuò)誤負(fù)責(zé),在中到大型項(xiàng)目上這一比例為50%到75%。任何一個(gè)要為50%到75%的錯(cuò)誤負(fù)責(zé)的活動(dòng)環(huán)節(jié)顯然都是應(yīng)該加以改善的。(第27章中對(duì)這些統(tǒng)計(jì)數(shù)據(jù)有更多詳細(xì)的探討。) 也有一些評(píng)論家指出,雖然構(gòu)建階段發(fā)生的錯(cuò)誤在所有錯(cuò)誤中占有很大的比例,但修正這些錯(cuò)誤的代價(jià)往往比“修正那些由于需求和架構(gòu)所導(dǎo)致的錯(cuò)誤”要低很多,這也就暗示著構(gòu)建活動(dòng)因此不那么重要。誠(chéng)然,修正由構(gòu)建活動(dòng)所導(dǎo)致的錯(cuò)誤的代價(jià)比較低這一說(shuō)法是正確的,但它也引起了誤導(dǎo)— —因?yàn)槿绻恍拚@些錯(cuò)誤,代價(jià)反而會(huì)高得令人難以置信。研究人員發(fā)現(xiàn),軟件中一些代價(jià)最為昂貴的錯(cuò)誤,其罪魁禍?zhǔn)壮3J且恍┬》秶拇a錯(cuò)誤,其代價(jià)甚至可以飆至上億美元的程度(Weinberg1983,SEN1990)。可以用較低代價(jià)修正的錯(cuò)誤,并不意味著這些錯(cuò)誤的修正不重要。人們忽視構(gòu)建活動(dòng)的另一種原因則頗具諷刺意味——就因?yàn)樗擒浖_發(fā)中唯一一項(xiàng)肯定能完成的活動(dòng)。對(duì)于需求,人們可以自以為是而不去潛心分析;對(duì)于架構(gòu),人們可以偷工減料而不去精心設(shè)計(jì);對(duì)于測(cè)試,人們可以短斤少兩甚至跳過(guò)不做,而不去整體計(jì)劃并付諸實(shí)施。但只要寫出來(lái)的是程序,總歸要進(jìn)行構(gòu)建活動(dòng),這也說(shuō)明,只要改進(jìn)軟件構(gòu)建這一環(huán)節(jié),就一定對(duì)軟件開發(fā)實(shí)踐有好處。No Comparable Book Is Available 沒(méi)有可媲美的同類書籍 既然看到構(gòu)建活動(dòng)有著如此清晰的重要性,我曾相信,當(dāng)我構(gòu)思此書時(shí)已有人寫過(guò)關(guān)于有效的軟件構(gòu)建實(shí)踐的書籍了。對(duì)這樣一本介紹如何有效地進(jìn)行編程的書籍的需求是顯而易見(jiàn)的,但是我卻只找到很少幾本關(guān)于軟件構(gòu)建這一題材的書,而且那些書也僅是涉及到這個(gè)話題的一部分罷了。有些書寫于15年前,還是和一些深?yuàn)W的語(yǔ)言——如ALGOL、PL/I、Ratfor以及 Smalltalk等——緊密相關(guān)的。有些則是出自并不實(shí)際編寫產(chǎn)品代碼的教授之手。教授們寫出來(lái)的技術(shù)內(nèi)容對(duì)于學(xué)生們的項(xiàng)目而言還行得通,但他們通常不知道如何在完整規(guī)模的開發(fā)環(huán)境中施展這些技術(shù);還有些書是為了宣傳作者最新鐘情的某種方法論,卻忽略了那些被時(shí)間反復(fù)證明是行之有效的成熟實(shí)踐技術(shù)的巨大寶庫(kù)。簡(jiǎn)而言之,我沒(méi)有找到哪怕是一本試圖歸納總結(jié)來(lái)自專家經(jīng)驗(yàn)、業(yè)界研究以及學(xué)術(shù)成果的實(shí)踐編程技術(shù)的書籍。關(guān)于這個(gè)話題的討論要能和現(xiàn)今的編程語(yǔ)言、面向?qū)ο缶幊碳夹g(shù)以及前沿的開發(fā)實(shí)踐緊密結(jié)合。很明顯需要有人寫出一本這樣的書出來(lái),而他必須了解當(dāng)今的理論發(fā)展水平,同時(shí)也編寫過(guò)足夠多的能反映實(shí)踐狀況的產(chǎn)品級(jí)代碼。我把本書構(gòu)思成關(guān)于代碼構(gòu)建活動(dòng)的完整探討——一個(gè)程序員給其他程序員寫的書。AuthorNote 作者注 歡迎您對(duì)本書中所探討的話題進(jìn)行質(zhì)詢,例如您的勘誤報(bào)告,或其他相關(guān)的內(nèi)容。請(qǐng)發(fā)郵件與我聯(lián)系,我的郵箱是stevemmc@construx.com,也可以訪問(wèn)我的網(wǎng)站:www.SteveMcConnell.com。
內(nèi)容概要
代碼大全(第2版)是著名Ⅱ暢銷書作者、《IEEESoftware》雜志前主編、具有20年編程與項(xiàng)目管理經(jīng)驗(yàn)的SteveMcConneU十余年前的經(jīng)典著作的全新演繹:第2版做了全面的更新,增加了很多與時(shí)俱進(jìn)的內(nèi)容,包括對(duì)新語(yǔ)言、新的開發(fā)過(guò)程與方法論的討論,等等。這是一本百科全書式的軟件構(gòu)建手冊(cè),涵蓋了軟件構(gòu)建活動(dòng)的方方面面,尤其強(qiáng)調(diào)提高軟件質(zhì)量的種種實(shí)踐方法。
作者特別注重源代碼的可讀性,詳細(xì)討論了類和函數(shù)命名、變量命名、數(shù)據(jù)類型和控制結(jié)構(gòu)、代碼布局等編程的最基本要素,也討論了防御式編程、表驅(qū)動(dòng)法、協(xié)同構(gòu)建、開發(fā)者測(cè)試、性能優(yōu)化等有效開發(fā)實(shí)踐,這些都服務(wù)于軟件的首要技術(shù)使命:管理復(fù)雜度。為了培養(yǎng)程序員編寫高質(zhì)量代碼的習(xí)慣,書中展示了大量高質(zhì)量代碼示例(以及用作對(duì)比的低質(zhì)量代碼),提高軟件質(zhì)量是降低開發(fā)成本的重要途徑。除此之外,本書歸納總結(jié)了來(lái)自專家的經(jīng)驗(yàn)、業(yè)界研究以及學(xué)術(shù)成果,列舉了大量軟件開發(fā)領(lǐng)域的真實(shí)案例與統(tǒng)計(jì)數(shù)據(jù),提高本書的說(shuō)服力。
本書中所論述的技術(shù)不僅填補(bǔ)了初級(jí)與高級(jí)編程實(shí)踐之間的空白,而且也為程序員們提供了一個(gè)有關(guān)軟件開發(fā)技術(shù)的信息來(lái)源。本書對(duì)經(jīng)驗(yàn)豐富的程序員、技術(shù)帶頭人、自學(xué)的程序員及沒(méi)有太多編程經(jīng)驗(yàn)的學(xué)生都是大有裨益的??梢哉f(shuō),只要您具有一定的編程基礎(chǔ),想成為一名優(yōu)秀的程序員,閱讀本書都不會(huì)讓您失望。
作者簡(jiǎn)介
史蒂夫·邁克康奈爾(Steve
McConnell)被公認(rèn)為軟件開發(fā)社區(qū)中的首要作者和發(fā)言人之一。他是Construx
Software公司的首席軟件工程師。他所編著的圖書包括曾被《軟件開發(fā)》雜志授予優(yōu)異產(chǎn)品震撼大獎(jiǎng)的《代碼大全》和《快速軟件開發(fā)》,以及《軟件項(xiàng)目生存指南》等。
書籍目錄
前言
鳴謝
核對(duì)表目錄
表目錄
圖目錄
第1部分 打好基礎(chǔ)
第1章 歡迎進(jìn)入軟件構(gòu)建的世界“
1.1 什么是軟件構(gòu)建
1.2 軟件構(gòu)建為何如此重要
1.3 如何閱讀本書
第2章 用隱喻來(lái)更充分地理解軟件開發(fā)
2.1 隱喻的重要性
2.2 如何使用軟件隱喻
2.3 常見(jiàn)的軟件隱喻
第3章 三思而后行:前期準(zhǔn)備
3.1 前期準(zhǔn)備的重要性
3.2 辨明你所從事的軟件的類型
3.3 問(wèn)題定義的先決條件
3.4 需求的先決條件
3.5 架構(gòu)的先決條件
3.6 花費(fèi)在前期準(zhǔn)備上的時(shí)間長(zhǎng)度
第4章 關(guān)鍵的“構(gòu)建”決策
4.1 選擇編程語(yǔ)言
4.2 編程約定
4.3 你在技術(shù)浪潮中的位置
4.4 選擇主要的構(gòu)建實(shí)踐方法
第5章 軟件構(gòu)建中的設(shè)計(jì)
5.1 設(shè)計(jì)中的挑戰(zhàn)
5.2 關(guān)鍵的設(shè)計(jì)概念
5.3 設(shè)計(jì)構(gòu)造塊:?jiǎn)l(fā)式方法
5.4 設(shè)計(jì)實(shí)踐
5.5 對(duì)流行的設(shè)計(jì)方法的評(píng)論
第6章 可以工作的類
6.1 類的基礎(chǔ):抽象數(shù)據(jù)類型(ADTs)
6.2 良好的類接口
6.3 有關(guān)設(shè)計(jì)和實(shí)現(xiàn)的問(wèn)題
6.4 創(chuàng)建類的原因
6.5 與具體編程語(yǔ)言相關(guān)的問(wèn)題
6.6 超越類:包
第7章 高質(zhì)量的子程序
7.1 創(chuàng)建子程序的正當(dāng)理由
7.2 在子程序?qū)由显O(shè)計(jì)
7.3 好的子程序名字
7.4 子程序可以寫多長(zhǎng)
7.5 如何使用子程序參數(shù)
7.6 使用函數(shù)時(shí)要特別考慮的問(wèn)題
7.7 宏子程序和內(nèi)聯(lián)子程序
第8章 防御式編程
8.1 保護(hù)程序免遭非法輸入數(shù)據(jù)的破壞
8.2 斷言
8.3 錯(cuò)誤處理技術(shù)
8.4 異常
8.5 隔離程序,使之包容由錯(cuò)誤造成的損害
8.6 輔助調(diào)試的代碼
8.7 確定在產(chǎn)品代碼中該保留多少防御式代碼
8.8 對(duì)防御式編程采取防御的姿態(tài)
第9章 偽代碼編程過(guò)程
9.1 創(chuàng)建類和子程序的步驟概述
9.2 偽代碼
9.3 通過(guò)偽代碼編程過(guò)程創(chuàng)建子程序
9.4 偽代碼編程過(guò)程的替代方案
第3部分 變量
第10章 使用變量的一般事項(xiàng)
10.1 數(shù)據(jù)認(rèn)知
10.2 輕松掌握變量定義
10.3 變量初始化原則
10.4 作用域
10.5 持續(xù)性
10.6 綁定時(shí)間
10.7 數(shù)據(jù)類型和控制結(jié)構(gòu)之問(wèn)的關(guān)系
10.8 為變量指定單一用途
第11章 變量名的力量
11.1 選擇好變量名的注意事項(xiàng)
11.2 為特定類型的數(shù)據(jù)命名
11.3 命名規(guī)則的力量
11.4 非正式命名規(guī)則
11.5 標(biāo)準(zhǔn)前綴
11.6 創(chuàng)建具備可讀性的短名字
11.7 應(yīng)該避免的名字
第12章 基本數(shù)據(jù)類型
12.1 數(shù)值概論
12.2 整數(shù)
12.3 浮點(diǎn)數(shù)
12.4 字符和字符串
12.5 布爾變量
12.6 枚舉類型
12.7 具名常量
12.8 數(shù)組
12.9 創(chuàng)建你自己的類型(類型別名)
第13章 不常見(jiàn)的數(shù)據(jù)類型
13.1 結(jié)構(gòu)體
……
第4部分 語(yǔ)句
第5部分 代碼改善
第6部分 系統(tǒng)考慮
第7部分 軟件工藝
參考文獻(xiàn)
索引
章節(jié)摘錄
書摘 相對(duì)于前面那個(gè)呆板的用寫作所做的隱喻,一些軟件開發(fā)人員則認(rèn)為應(yīng)當(dāng)將創(chuàng)造軟件想象成類似播種和耕作的情形。你一次設(shè)計(jì)系統(tǒng)的一小部分、寫出一段代碼、做一點(diǎn)測(cè)試,并將成果一點(diǎn)點(diǎn)添加到整個(gè)系統(tǒng)中。通過(guò)這種小步前進(jìn),你可以把每次可能遇到的麻煩減到最小?! ∮袝r(shí)候人們會(huì)用很糟的隱喻去描述一種很好的技術(shù),此時(shí)需要保全這一技術(shù),并去尋找更好的隱喻。這個(gè)例子里的增量技術(shù)是很有價(jià)值的,但把它比作播種和耕作卻非常糟糕?! 懊看巫鲆稽c(diǎn)”這個(gè)主意可能在某些方面與農(nóng)作物生長(zhǎng)類似,但把軟件開發(fā)類比為耕作就很不貼切,也沒(méi)有太多意義,而且我們很容易用下面即將介紹的更好的隱喻替代它。人們也很難把耕作這個(gè)隱喻引申到“一次做一點(diǎn)事情”之外。 如果你認(rèn)同耕作這種隱喻,就請(qǐng)想象一下圖2—2的情況:你會(huì)發(fā)現(xiàn)自己談?wù)摰氖牵簩?duì)系統(tǒng)計(jì)劃施肥、對(duì)細(xì)節(jié)設(shè)計(jì)疏果,并通過(guò)有效的管理土地來(lái)增加代碼的產(chǎn)量,最終取得代碼大豐收。你還會(huì)說(shuō)“輪種C++和大麥”,或者讓土地閑置一年以增加硬盤里面氮肥的供應(yīng)量?! ≤浖鬟@一隱喻的弱點(diǎn)在于它暗示了人們將無(wú)法對(duì)開發(fā)軟件的過(guò)程和方式進(jìn)行任何直接的控制。你在春天播下代碼的種子,然后按照農(nóng)歷節(jié)氣向土地佬兒許幾個(gè)愿,你將會(huì)在秋天收獲到豐盛的代碼。P14-15看《代碼大全》鬧程序革命!
媒體關(guān)注與評(píng)論
書評(píng)“《代碼大全》第1版在我看來(lái)堪稱軟件工程領(lǐng)域的經(jīng)典之作一而第2版則更棒!” ——Ralph Johnson,伊利諾伊州立大學(xué); 《設(shè)計(jì)模式》(Design Patterns)作者之一 “無(wú)論您是新手還是經(jīng)驗(yàn)豐富的開發(fā)人員,《代碼大全》(第2版)都能教會(huì)您思考編程的最佳方法。” ——Jeffrey Richter(www.wintetlect.com),((Microsoft NET框架實(shí)用編程》(Appfied Microsoft.NET FrameworkProgramming)作者 “這本書是講述軟件構(gòu)建的權(quán)威指南一準(zhǔn)備孤身前往荒島的程序員只要帶上這本書就足夠了?!? ——Diomidis Spinellis,《代碼閱讀方法與實(shí)踐》(Code Reading:The Open Source Perspective)作者 “Steve McConnell是一位既在一線實(shí)踐,又能把其中奧妙講個(gè)明白的少數(shù)人之一?!? ——John Vlissides,IBM研究院; 《設(shè)計(jì)模式》(Design Patterns)作者之一 “Steve McConnell比任何人都懂得如何構(gòu)建軟件;我們十分慶幸他能把其所有的深邃見(jiàn)解和實(shí)踐經(jīng)驗(yàn)寫成這樣一本重要而新穎的圖書?!? ——“Visual Basic之父”Alan Cooper,《軟件觀念革命》(About Face 2.0)作者
編輯推薦
兩屆震撼大獎(jiǎng)得主,數(shù)十年軟件開發(fā)智慧,十二年前的經(jīng)典,十二年后再鑄輝煌!《代碼大全(第2版)》——Amazon全五星一致推薦!開發(fā)者必讀著作!圖書館必備典藏!
名人推薦
“《代碼大全》第1版在我看來(lái)堪稱軟件工程領(lǐng)域的經(jīng)典之作——而第2版則更棒!” ——Ralph Johnson,伊利諾伊州立大學(xué);《設(shè)計(jì)模式》(Design Pattems)作者之一 “無(wú)論您是新手還是經(jīng)驗(yàn)豐富的開發(fā)人員, 《代碼大全》(第2版)都能教會(huì)您思考編程的最佳方法?!?——Jeffrey Richter,《Microsoft.NET框架實(shí)用編程》(Applied Microsoft.NET Framework Programming)作者 “這本書是講述軟件構(gòu)建的權(quán)威指南——準(zhǔn)備孤身前往荒島的程序員只要帶上這本書就足夠了?!?——Diomidis Spinellis,《代碼閱讀方法與實(shí)踐》(Code Reading:The Open Source Perspective)作者 “Steve McConnell是一位既在一線實(shí)踐,又能把其中奧妙講明白的少數(shù)人之一。” ——John Vlissides,IBM研究院;《設(shè)計(jì)模式》(Design Patterns)作者之一 ”Steve McConnell比任何人都懂得如何構(gòu)建軟件;我們十分慶幸他能把其所有的深邃見(jiàn)解和實(shí)踐經(jīng)驗(yàn)寫成這樣一本重要而新穎的圖書?!?——“Visual Basic之父”Alan Cooper,《軟件觀念革命》(About Face 2.0)作者
圖書封面
圖書標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載