初學(xué)者學(xué)習C++及編程入門_第1頁
初學(xué)者學(xué)習C++及編程入門_第2頁
初學(xué)者學(xué)習C++及編程入門_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、初學(xué)者學(xué)習 C+及編程入門Javascript 是世界上最受誤會的語言,其實 C+何嘗不是。坊間流傳的錯誤的 C+學(xué)習方法一抓就是一大把。我自己在學(xué)習C+的過程中也走了很多彎路,鋪張了不少時間。 為什么會存在這么多錯誤生疏?緣由主要有三個,一是 C+語言的細節(jié)太多。二是一些有名的 C+書籍總在(不管有意還是無意)示意語言細節(jié)的重要性和好玩。三是現(xiàn)代 C+庫的開發(fā)哲學(xué)必需用到一些犄角旮旯的語言細節(jié)(但留意,是庫設(shè)計,不是日常編程)。這些共同塑造了 C+社群的整體心態(tài)和哲學(xué)。單是第一條還未必能夠成氣候,其它語言的細節(jié)也不少(盡管比起 C+起來還是小巫見大巫),就拿Javascript 來說,作用域

2、規(guī)章,名字查找,closure,for/in,這些都是細節(jié),而且其中還有違反直覺的。但很多動態(tài)語言的程序員的理念我猜大約是學(xué)到哪用到哪罷。但 C+ 就不一樣了,學(xué) C+之人有一種類似于被示意的潛在心態(tài),就是肯定要先把語言核心根本上吃透了才能下手寫出秀麗的程序。這首先就錯了。這個意識形成的緣由在其次點,C+書籍。市面上的C+書籍不計其數(shù),但有一個共同的缺點,就是講語言細節(jié)的書太多C+ gotchas,Effective C+,More Effective C+,但無可厚非的是,C+是這樣一門語言:要拿它滿足現(xiàn)代編程理念的需求,尤其是 C+庫開發(fā)的需求,還必需得關(guān)注語言細節(jié), 乃至于在C+中利用語

3、言細節(jié)已經(jīng)成了一門學(xué)問。比方C+模板在設(shè)計之初根本沒有想到 模板元編程這回事,更沒想到C+模板系統(tǒng)是圖靈完備的,這也就導(dǎo)致了Modern C+Design和C+ Template Metaprogramming的驚世駭俗。這些技術(shù)的消滅為什么驚世駭俗,打個比方,就好比是一塊大家都認為已經(jīng)生疏無比, 再無隱秘可言的土地上,突然某天有人挖到原來地下還隱藏著最豐富的石油。在這之前的 C+雖然也有一些細節(jié),但也還算簡潔把握,那可是C+程序員們的happy old times,由于C+的一切都一覽無余,everything is figured out。然而Modern C+ Design的出世告知人們

4、,“瞧,還有多少細節(jié)你們沒有把握啊?!庇谑?C+程序員們久違的激情被重燃起來,奮不顧身的踏入細節(jié)的沼澤中。尤其是,模板編程將 C+的細節(jié)進一步挖掘到了極致我們干嘛關(guān)心涉及類對象的隱式轉(zhuǎn)換的優(yōu)先級凹凸?看看 boost:is_base_of 就可以知道有多詭異了。但最大的問題還在于,對于這些細節(jié)的關(guān)注還真有它適宜的理由:我們要開覺察代模板 庫,要開發(fā)active library,就必需動用模板編程技術(shù),要動用模板編程技術(shù),就必需利用語言的犄角旮旯,enable_if,type_traits,甚至連早就古井無波的C 宏也在亂世中重生,看看boost:preprocessor 有多詭異就知道了,連C

5、 宏的圖靈完備性(預(yù)編譯期的)都被挖掘出來了。為什么要做這些?好玩?標榜?都不是,開發(fā)庫的實際需求。但這也正是最大的哀痛了。在 boost里面因?qū)嶋H需求而動用語言細節(jié)最終竟然能奇特的完成任務(wù)的最好教材就是boost:foreach, 這個小設(shè)施對語言細節(jié)的開掘到達了驚天地泣鬼神的地步,不信你先試著自己去看看它的源 代碼,再看看作者介紹它的文章吧。而boost:typeof 也不甘其后C+語言里面有太多被“覺察”而不是被“制造”的技術(shù)。莫非最初無意設(shè)置這些語言規(guī)章的家伙們都是Oracles?由于沒有variadic templates,人們用宏加上缺省模板參數(shù)來實現(xiàn)類似效果。由于沒有concep

6、ts,人們用模板加上析構(gòu)函數(shù)的細節(jié)來完成類似工作。由于沒有typeof,人們用模板元編程和宏加上無盡的細節(jié)來實現(xiàn)目標 C+開發(fā)者們的 DIY 精神不行謂不強。然而,假設(shè)僅僅是由于要開發(fā)優(yōu)秀的庫,那么涉及這些細節(jié)都還是情有可原的,至少在C+09 消滅并且編譯器廠商跟上之前,這些都還能說是不得已而為之。但我們寬闊的C+ 程序員呢?群眾是簡潔被誤導(dǎo)的,我也曾經(jīng)是。以為把握了更多的語言細節(jié)就更牛,但實際 卻是那些語言細節(jié)十有八九是尋常編程用都用不到的。C+中眾多的細節(jié)雖然在庫設(shè)計者手 里面有其用武之地,但一般程序員則根本無需過多關(guān)注,尤其是沒有實際動機的關(guān)注。一般 性的編碼實踐準則,以及根本的編程力量

7、和根本功,乃至根本的程序設(shè)計理論以及算法設(shè)計。才是真正需要花時間把握的東西。學(xué)習最正確編碼實踐比學(xué)習C+更重要??磧?yōu)秀的代碼也比埋頭用差勁的編碼方式寫垃圾代碼要有效。直接、清楚、明白、KISS 地表達意圖比玩編碼花招要重要避開去過問任何語言細節(jié),除非必要。這個必要是指在實際編程當中遇到問題,這樣就算需要過問細節(jié),也是最省事的,懶散者原則嘛。一個把握了根本的編程理念并有較強學(xué)習力量的程序員在用一門生疏的語言編程時就算拿著那本語言的從索引翻起也可以編出 合格的程序來。十年學(xué)會編程不是指對每門語言都得十年,那一輩子才能學(xué)幾門語言哪,假設(shè)按字母挨次學(xué)的話一輩子都別期望學(xué)到Ruby 了;十年學(xué)習編程更不

8、是指先把語言特性從粗到細全都吃透才敢下手編程,在實踐中提高才是最重要的。至于這種摳語言細節(jié)的哲學(xué)為何能在社群里面呈野火燎原之勢,就是一個心理學(xué)的問題 了。想像人們在論壇上爭辯問題時,一個對語言把握很細致的人確定能夠得到更多的佩服, 而由于論壇上的問題大多是小問題,所以解決實際問題的真正力量并不能得到顯現(xiàn),也就是 說,學(xué)問型的人能夠得到更多佩服,后者便成為動力和仿效的砝碼。然而真正的編程力量是 與語言細節(jié)沒關(guān)系的,嫻熟運用一門語言能夠幫你最正確表達你的意圖,但嫻熟運用一門語言 絕不意味著要把它的邊邊角角全都記住。懂得一些常識,有了編程的根本直覺,遇到一些細 節(jié)錯誤的時候再去查書,是最節(jié)約時間的方

9、法。C+的書,Bjarne 的The C+ Programming Language是高屋建瓴的。大規(guī)模C+程序設(shè)計是挺務(wù)實的。Accelerated C+是最正確入門的。C+ Templates是僅作參考的。C+ Template Metaprogramming是精力過剩者可以玩一玩的,一般程序員碰都別碰的。ISO.IEC C+ Standard 14882不是拿來讀的。Bjarne 最近在做C+的教育,書是確定可以期盼的。P.S. 關(guān)于如何學(xué)習編程,g9 的 blog 上有很多精彩的文章:這里,這里,這里,這里實際上,我建議你去把g9 老大的blog 翻個底朝天 :P再P.S. 書單?我是

10、遑于給出一個類似C+初學(xué)者必讀這種書單的。C+的書不計其數(shù), 被公認的好書也不勝枚舉。只不過有些書簡潔給初學(xué)者造成一種錯覺,就是“學(xué)習 C+就應(yīng)當是這個樣子的”。比方有朋友提到的高質(zhì)量C/C+編程,這本書有價值,但不適合初 學(xué)者,初學(xué)者讀這樣的書簡潔一葉障目不見泰山。實際上,正確的態(tài)度是,細節(jié)是必要的。但細節(jié)是次要的。其實學(xué)習編程我覺得應(yīng)當最先學(xué)習如何用偽碼表達思想呢,君不見Introduction to Algorithm里面的代碼?TAOCP中的代碼?哦,對了它們是自己建立的語言,但這種僅教學(xué)目的的語言的目的就是為了避開讓寫程序的人一開頭就忘了寫程序是為了完成功能,以為寫程序就是和語言細節(jié)

11、作斗爭了。Bjarne 說程序的正確性最重要,boost 的編碼標準里面也將正確性列在性能前面。此外,一旦建立了正確的學(xué)習編程的理念,其實什么書(只要不是太垃圾的)都有些用處。都當成參考書,用的時候從名目或索引翻,根本就對了。再再P.S. myan 老大和g9 老大都給出了很多精彩的見解。我不得不再加上一個P.S。具體我就不摘錄了,假設(shè)你讀到這里,請務(wù)必往下看他們的評論。轉(zhuǎn)載者別忘了轉(zhuǎn)載他們的評論:-) 很多朋友都問我同一個問題,到底要不要學(xué)習 C+。其實這個問題問得很沒有意義?!皩W(xué) C+” 和“不學(xué) C+”這個二分法是沒意義的,為什么?由于這個問題很外表,甚至很急躁。重要的不是你把握的語言,

12、而是你把握的力量,借用myan 老大的話,“重要的是這個磨練過程, 而不是結(jié)果,要的是你粗大的腿,而不是你身上背的那袋鹽巴?!?。此外學(xué)習 C+的意義其實真的是醉翁之意不在酒,像 C/C+這種系統(tǒng)級語言,在學(xué)習的過程中必需要涉及到一些底層學(xué)問,如內(nèi)存治理、編譯連接系統(tǒng)、匯編語言、硬件體系構(gòu)造等等等等學(xué)問(留意,這不 包括過分犄角旮旯的語言枝節(jié))。這些東西也就是所謂的內(nèi)功了(其實最最重要的內(nèi)功還是長期學(xué)習所磨練出來的自學(xué)力量)。對此大嘴Joel 在Joel On Software里面提到的漏洞抽象定律闡述得就格外秀麗。所以,答案是,讓你成為高手的并不是你把握什么語言,精通C+未必就能讓你成為 高手

13、,不精通C+也未必就能讓你成為低手。我想大家都不會疑心g9 老大假設(shè)要抄起C+ 做一個工程的話會比大多數(shù)自認嫻熟C+的人要做得秀麗。所以關(guān)鍵的不是語言這個表層的 東西,而是底下的本質(zhì)沖突。固然,不是說那就什么語言都不要學(xué)了,依據(jù)一種曹操的規(guī)律, “天下語言,唯 imperative 與 declarative 耳”。C+是前者里面最簡單的一種,支持最廣泛的編程范式。借用當時數(shù)學(xué)系入學(xué)大會上一個教師的話,“你數(shù)學(xué)都學(xué)了,還有什么不能學(xué)的 呢?”。學(xué)語言是一個途徑,假設(shè)你把它用來磨練自己,可以。假設(shè)你把它用來作為學(xué)習系統(tǒng)底層學(xué)問的鑰匙,可以。假設(shè)你把它用來作為學(xué)習如何編寫優(yōu)秀的代碼,如何組織大型的程 序,如何進展抽象設(shè)計,可以。假設(shè)掉書袋,光啃細節(jié),我認為不行以(除非你必需要用到 細節(jié),像boost 庫的coder 們)。計算機等級考試寶典(二級C 語言程序設(shè)計)系計算機等級考試寶典試題輔導(dǎo)軟件, 適用于計算機等級考試寶典,軟件試題庫設(shè)計緊扣最計算機等級考試寶典大綱、考試教材, 符合計算機等級考試寶典題型與考試科目,復(fù)習輔導(dǎo)資料、考試資料豐富,免費試用、試題 庫巨大(注冊版試題量達 7 百多題、19 萬多字),輔導(dǎo)軟件收錄計算機等級考試寶典考前沖刺、歷年試題,試題

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論