Bjarne Stroustrup
程序設(shè)計(jì)是這樣一門藝術(shù),它將問題求解方案描述成計(jì)算機(jī)可以執(zhí)行的形式。程序設(shè)計(jì)中很多工作都花費(fèi)在尋找求解方案以及對其求精上。通常,只有在真正編寫程序求解一個問題的過程中才會對問題本身理解透徹。
為什么學(xué)習(xí)C++這門程序設(shè)計(jì)語言呢?學(xué)習(xí)程序設(shè)計(jì)是不可能不借助一門程序設(shè)計(jì)語言的,而C++直接支持現(xiàn)實(shí)世界中的軟件所使用的那些關(guān)鍵概念和技術(shù)。C++是使用最為廣泛的程序設(shè)計(jì)語言之一,其應(yīng)用領(lǐng)域幾乎沒有局限。從大洋深處到火星表面,到處都能發(fā)現(xiàn)C++程序的身影。C++是由一個開放的國際標(biāo)準(zhǔn)組織全面考量、精心設(shè)計(jì)的。在任何一種計(jì)算機(jī)平臺上都能找到高質(zhì)量的和/或免費(fèi)的C++實(shí)現(xiàn)。而且,你用C++所學(xué)到的程序設(shè)計(jì)思想,大多數(shù)都可直接用于其他程序設(shè)計(jì)語言,如C、C#、Fortran以及Jave。最后一個原因,我喜歡C++適合編寫優(yōu)美、高效的代碼這一特點(diǎn)。
本書不是初學(xué)程序設(shè)計(jì)的簡單入門教材,我寫此書的用意也不在此。我為本書設(shè)定的目標(biāo)是——能讓你學(xué)到基本的實(shí)用編程技術(shù)的最簡單的書籍。這是一個非常雄心勃勃的目標(biāo),因?yàn)楹芏喱F(xiàn)代軟件所依賴的技術(shù),不過才出現(xiàn)短短幾年時(shí)間而已。
我的基本假設(shè)是,你希望編寫供他人使用的程序,并愿意認(rèn)真負(fù)責(zé)地,以較高質(zhì)量完成這個工作;也就是說,我假定你希望達(dá)到專業(yè)水準(zhǔn)。因此,我為本書選擇的主題覆蓋了開始學(xué)習(xí)實(shí)用編程技術(shù)所需要的內(nèi)容,而不只是那些容易講授和容易學(xué)習(xí)的內(nèi)容。如果某種技術(shù)是你做好基本編程工作所需要的,那么本書就會介紹它,同時(shí)展示用以支持這種技術(shù)的編程思想和語言工具。并提供相應(yīng)的練習(xí),期望你通過做這些練習(xí)來熟悉這種技術(shù)。但如果你只想了解“玩具程序”,那么你能學(xué)到的將遠(yuǎn)比我所提供的少得多。另一方面,我不會用一些實(shí)用性很低的內(nèi)容來浪費(fèi)你的時(shí)間,本書介紹的內(nèi)容都是你在實(shí)踐中幾乎肯定會用到的。
如果你只是希望直接使用別人編寫的程序,而不想了解其內(nèi)部原理,也不想親自向代碼中加入重要的內(nèi)容,那么本書不適合你。請考慮是否采用另一本書或另一種程序設(shè)計(jì)語言會更好些。如果這大概就是你對程序設(shè)計(jì)的看法,那么請同時(shí)考慮一下你從何得來的這種觀點(diǎn),它真的滿足你的需求嗎。本書面向的是那些確實(shí)希望編寫和理解復(fù)雜計(jì)算機(jī)程序的人。
考慮到本書的結(jié)構(gòu)和注重實(shí)踐的特點(diǎn),它也可以作為程序設(shè)計(jì)方面的第二本書,適合那些已經(jīng)了解一點(diǎn)C++的人,和那些會用其他語言編程,現(xiàn)在想學(xué)習(xí)C++的人。如果你屬于其中一類,我不好估計(jì)你學(xué)習(xí)這本書要花費(fèi)多長時(shí)間。但我可以給你的建議是,多做練習(xí)。因?yàn)槟阍趯W(xué)習(xí)中常見的一個問題是習(xí)慣用熟悉的、舊的方式編寫程序,而不是在適當(dāng)?shù)牡胤讲捎眯录夹g(shù),多做練習(xí)會幫助你克服這個問題。如果你曾經(jīng)按某種更為傳統(tǒng)的方式學(xué)習(xí)過C++,那么在進(jìn)行到第7章之前,你會發(fā)現(xiàn)一些令你驚奇的和有用的內(nèi)容。
學(xué)習(xí)程序設(shè)計(jì)要靠編程實(shí)踐。在這一點(diǎn)上,程序設(shè)計(jì)與其他需要實(shí)踐學(xué)習(xí)的技藝是相似的。你不可能僅僅通過讀書就學(xué)會游泳、演奏樂器或者開車,你必須進(jìn)行實(shí)踐。同樣,你也不可能不讀程序和寫程序就學(xué)會程序設(shè)計(jì)。另一方面,程序設(shè)計(jì)遠(yuǎn)非只是遵循一些語法規(guī)則和閱讀手冊那么簡單。本書的重點(diǎn)不在于C++的語法,而在于理解基礎(chǔ)思想、原理和技術(shù),這是一名好程序員所必備的。只有設(shè)計(jì)良好的代碼才有機(jī)會成為一個正確、可靠和易維護(hù)的系統(tǒng)的一部分。而且,“基礎(chǔ)”意味著延續(xù)性:當(dāng)現(xiàn)在的程序設(shè)計(jì)語言和工具演變甚至被取代后,這些基礎(chǔ)知識仍會保持其重要性。
那么計(jì)算機(jī)科學(xué)、軟件工程、信息技術(shù)等等又如何呢?它們都屬于程序設(shè)計(jì)范疇嗎?當(dāng)然不是!但程序設(shè)計(jì)是一門基礎(chǔ)性的學(xué)科,是所有計(jì)算機(jī)相關(guān)領(lǐng)域的基礎(chǔ),在計(jì)算機(jī)科學(xué)領(lǐng)域占有重要的地位。
代碼可以很有用,同樣也可以很優(yōu)美。本書會幫你了解優(yōu)美的代碼意味著什么,并幫你掌握構(gòu)造優(yōu)美代碼的原理和實(shí)踐技巧。