



全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
初學(xué)者學(xué)習(xí)C+及編程入門Javascript是世界上最受誤解的語(yǔ)言,其實(shí)C+何嘗不是。坊間流傳的錯(cuò)誤的C+學(xué)習(xí)方法一抓就是一大把。我自己在學(xué)習(xí)C+的過(guò)程中也走了許多彎路,浪費(fèi)了不少時(shí)間。為什么會(huì)存在這么多錯(cuò)誤認(rèn)識(shí)?原因主要有三個(gè),一是C+語(yǔ)言的細(xì)節(jié)太多。二是一些著名的C+書籍總在(不管有意還是無(wú)意)暗示語(yǔ)言細(xì)節(jié)的重要性和有趣。三是現(xiàn)代C+庫(kù)的開發(fā)哲學(xué)必須用到一些犄角旮旯的語(yǔ)言細(xì)節(jié)(但注意,是庫(kù)設(shè)計(jì),不是日常編程)。這些共同塑造了C+社群的整體心態(tài)和哲學(xué)。 單是第一條還未必能夠成氣候,其它語(yǔ)言的細(xì)節(jié)也不少(盡管比起C+起來(lái)還是小巫見(jiàn)大巫),就拿Javascript來(lái)說(shuō),作用域規(guī)則,名字查找,closure,for/in,這些都是細(xì)節(jié),而且其中還有違反直覺(jué)的。但許多動(dòng)態(tài)語(yǔ)言的程序員的理念我猜大約是學(xué)到哪用到哪罷。但C+就不一樣了,學(xué)C+之人有一種類似于被暗示的潛在心態(tài),就是一定要先把語(yǔ)言核心基本上吃透了才能下手寫出漂亮的程序。這首先就錯(cuò)了。這個(gè)意識(shí)形成的原因在第二點(diǎn),C+書籍。市面上的C+書籍不計(jì)其數(shù),但有一個(gè)共同的缺點(diǎn),就是講語(yǔ)言細(xì)節(jié)的書太多C+ gotchas,Effective C+,More Effective C+,但無(wú)可厚非的是,C+是這樣一門語(yǔ)言:要拿它滿足現(xiàn)代編程理念的需求,尤其是C+庫(kù)開發(fā)的需求,還必須得關(guān)注語(yǔ)言細(xì)節(jié),乃至于在C+中利用語(yǔ)言細(xì)節(jié)已經(jīng)成了一門學(xué)問(wèn)。比如C+模板在設(shè)計(jì)之初根本沒(méi)有想到模板元編程這回事,更沒(méi)想到C+模板系統(tǒng)是圖靈完備的,這也就導(dǎo)致了Modern C+ Design和C+ Template Metaprogramming的驚世駭俗。 這些技術(shù)的出現(xiàn)為什么驚世駭俗,打個(gè)比方,就好比是一塊大家都認(rèn)為已經(jīng)熟悉無(wú)比,再無(wú)秘密可言的土地上,突然某天有人挖到原來(lái)地下還蘊(yùn)藏著最豐富的石油。在這之前的C+雖然也有一些細(xì)節(jié),但也還算容易掌握,那可是C+程序員們的happy old times,因?yàn)镃+的一切都一覽無(wú)余,everything is figured out。然而Modern C+ Design的出世告訴人們,“瞧,還有多少細(xì)節(jié)你們沒(méi)有掌握啊?!庇谑荂+程序員們久違的激情被重燃起來(lái),奮不顧身的踏入細(xì)節(jié)的沼澤中。尤其是,模板編程將C+的細(xì)節(jié)進(jìn)一步挖掘到了極致我們干嘛關(guān)心涉及類對(duì)象的隱式轉(zhuǎn)換的優(yōu)先級(jí)高低?看看boost:is_base_of就可以知道有多詭異了。但最大的問(wèn)題還在于,對(duì)于這些細(xì)節(jié)的關(guān)注還真有它合適的理由:我們要開發(fā)現(xiàn)代模板庫(kù),要開發(fā)active library,就必須動(dòng)用模板編程技術(shù),要?jiǎng)佑媚0寰幊碳夹g(shù),就必須利用語(yǔ)言的犄角旮旯,enable_if,type_traits,甚至連早就古井無(wú)波的C宏也在亂世中重生,看看boost:preprocessor有多詭異就知道了,連C宏的圖靈完備性(預(yù)編譯期的)都被挖掘出來(lái)了。為什么要做這些?好玩?標(biāo)榜?都不是,開發(fā)庫(kù)的實(shí)際需求。但這也正是最大的悲哀了。在boost 里面因?qū)嶋H需求而動(dòng)用語(yǔ)言細(xì)節(jié)最終居然能神奇的完成任務(wù)的最好教材就是boost:foreach,這個(gè)小設(shè)施對(duì)語(yǔ)言細(xì)節(jié)的發(fā)掘達(dá)到了驚天地泣鬼神的地步,不信你先試著自己去看看它的源代碼,再看看作者介紹它的文章吧。而boost:typeof也不甘其后C+語(yǔ)言里面有太多被“發(fā)現(xiàn)”而不是被“發(fā)明”的技術(shù)。難道最初無(wú)意設(shè)置這些語(yǔ)言規(guī)則的家伙們都是Oracles? 因?yàn)闆](méi)有variadic templates,人們用宏加上缺省模板參數(shù)來(lái)實(shí)現(xiàn)類似效果。因?yàn)闆](méi)有concepts,人們用模板加上析構(gòu)函數(shù)的細(xì)節(jié)來(lái)完成類似工作。因?yàn)闆](méi)有typeof,人們用模板元編程和宏加上無(wú)盡的細(xì)節(jié)來(lái)實(shí)現(xiàn)目標(biāo) C+開發(fā)者們的DIY精神不可謂不強(qiáng)。 然而,如果僅僅是因?yàn)橐_發(fā)優(yōu)秀的庫(kù),那么涉及這些細(xì)節(jié)都還是情有可原的,至少在C+09出現(xiàn)并且編譯器廠商跟上之前,這些都還能說(shuō)是不得已而為之。但我們廣大的C+程序員呢?大眾是容易被誤導(dǎo)的,我也曾經(jīng)是。以為掌握了更多的語(yǔ)言細(xì)節(jié)就更牛,但實(shí)際卻是那些語(yǔ)言細(xì)節(jié)十有八九是平時(shí)編程用都用不到的。C+中眾多的細(xì)節(jié)雖然在庫(kù)設(shè)計(jì)者手里面有其用武之地,但普通程序員則根本無(wú)需過(guò)多關(guān)注,尤其是沒(méi)有實(shí)際動(dòng)機(jī)的關(guān)注。一般性的編碼實(shí)踐準(zhǔn)則,以及基本的編程能力和基本功,乃至基本的程序設(shè)計(jì)理論以及算法設(shè)計(jì)。才是真正需要花時(shí)間掌握的東西。學(xué)習(xí)最佳編碼實(shí)踐比學(xué)習(xí)C+更重要??磧?yōu)秀的代碼也比埋頭用差勁的編碼方式寫垃圾代碼要有效。直接、清晰、明了、KISS地表達(dá)意圖比玩編碼花招要重要 避免去過(guò)問(wèn)任何語(yǔ)言細(xì)節(jié),除非必要。這個(gè)必要是指在實(shí)際編程當(dāng)中遇到問(wèn)題,這樣就算需要過(guò)問(wèn)細(xì)節(jié),也是最省事的,懶惰者原則嘛。一個(gè)掌握了基本的編程理念并有較強(qiáng)學(xué)習(xí)能力的程序員在用一門陌生的語(yǔ)言編程時(shí)就算拿著那本語(yǔ)言的圣經(jīng)從索引翻起也可以編出合格的程序來(lái)。十年學(xué)會(huì)編程不是指對(duì)每門語(yǔ)言都得十年,那一輩子才能學(xué)幾門語(yǔ)言哪,如果按字母順序?qū)W的話一輩子都別指望學(xué)到Ruby了;十年學(xué)習(xí)編程更不是指先把語(yǔ)言特性從粗到細(xì)全都吃透才敢下手編程,在實(shí)踐中提高才是最重要的。 至于這種摳語(yǔ)言細(xì)節(jié)的哲學(xué)為何能在社群里面呈野火燎原之勢(shì),就是一個(gè)心理學(xué)的問(wèn)題了。想像人們?cè)谡搲嫌懻搯?wèn)題時(shí),一個(gè)對(duì)語(yǔ)言把握很細(xì)致的人肯定能夠得到更多的佩服,而由于論壇上的問(wèn)題大多是小問(wèn)題,所以解決實(shí)際問(wèn)題的真正能力并不能得到顯現(xiàn),也就是說(shuō),知識(shí)型的人能夠得到更多佩服,后者便成為動(dòng)力和仿效的砝碼。然而真正的編程能力是與語(yǔ)言細(xì)節(jié)沒(méi)關(guān)系的,熟練運(yùn)用一門語(yǔ)言能夠幫你最佳表達(dá)你的意圖,但熟練運(yùn)用一門語(yǔ)言絕不意味著要把它的邊邊角角全都記住。懂得一些常識(shí),有了編程的基本直覺(jué),遇到一些細(xì)節(jié)錯(cuò)誤的時(shí)候再去查書,是最節(jié)省時(shí)間的辦法。 C+的書,Bjarne的圣經(jīng)The C+ Programming Language是高屋建瓴的。大規(guī)模C+程序設(shè)計(jì)是挺務(wù)實(shí)的。Accelerated C+是最佳入門的。C+ Templates是僅作參考的。C+ Template Metaprogramming是精力過(guò)剩者可以玩一玩的,普通程序員碰都別碰的。ISO.IEC C+ Standard 14882不是拿來(lái)讀的。Bjarne最近在做C+的教育,新書是絕對(duì)可以期待的。P.S. 關(guān)于如何學(xué)習(xí)編程,g9的blog上有許多精彩的文章:這里,這里,這里,這里 實(shí)際上,我建議你去把g9老大的blog翻個(gè)底朝天 :P再P.S. 書單?我是遑于給出一個(gè)類似C+初學(xué)者必讀這種書單的。C+的書不計(jì)其數(shù),被公認(rèn)的好書也不勝枚舉。只不過(guò)有些書容易給初學(xué)者造成一種錯(cuò)覺(jué),就是“學(xué)習(xí)C+就應(yīng)該是這個(gè)樣子的”。比如有朋友提到的高質(zhì)量C/C+編程,這本書有價(jià)值,但不適合初學(xué)者,初學(xué)者讀這樣的書容易一葉障目不見(jiàn)泰山。實(shí)際上,正確的態(tài)度是,細(xì)節(jié)是必要的。但細(xì)節(jié)是次要的。其實(shí)學(xué)習(xí)編程我覺(jué)得應(yīng)該最先學(xué)習(xí)如何用偽碼表達(dá)思想呢,君不見(jiàn)Introduction to Algorithm里面的代碼?TAOCP中的代碼?哦,對(duì)了它們是自己建立的語(yǔ)言,但這種僅教學(xué)目的的語(yǔ)言的目的就是為了避免讓寫程序的人一開始就忘了寫程序是為了完成功能,以為寫程序就是和語(yǔ)言細(xì)節(jié)作斗爭(zhēng)了。Bjarne說(shuō)程序的正確性最重要,boost的編碼標(biāo)準(zhǔn)里面也將正確性列在性能前面。 此外,一旦建立了正確的學(xué)習(xí)編程的理念,其實(shí)什么書(只要不是太垃圾的)都有些用處。都當(dāng)成參考書,用的時(shí)候從目錄或索引翻,基本就對(duì)了。再再P.S. myan老大和g9老大都給出了許多精彩的見(jiàn)解。我不得不再加上一個(gè)P.S。具體我就不摘錄了,如果你讀到這里,請(qǐng)務(wù)必往下看他們的評(píng)論。轉(zhuǎn)載者別忘了轉(zhuǎn)載他們的評(píng)論:-)許多朋友都問(wèn)我同一個(gè)問(wèn)題,到底要不要學(xué)習(xí)C+。其實(shí)這個(gè)問(wèn)題問(wèn)得很沒(méi)有意義?!皩W(xué)C+”和“不學(xué)C+”這個(gè)二分法是沒(méi)意義的,為什么?因?yàn)檫@個(gè)問(wèn)題很表面,甚至很浮躁。重要的不是你掌握的語(yǔ)言,而是你掌握的能力,借用myan老大的話,“重要的是這個(gè)磨練過(guò)程,而不是結(jié)果,要的是你粗壯的腿,而不是你身上背的那袋鹽巴。”。此外學(xué)習(xí)C+的意義其實(shí)真的是醉翁之意不在酒,像C/C+這種系統(tǒng)級(jí)語(yǔ)言,在學(xué)習(xí)的過(guò)程中必須要涉及到一些底層知識(shí),如內(nèi)存管理、編譯連接系統(tǒng)、匯編語(yǔ)言、硬件體系結(jié)構(gòu)等等等等知識(shí)(注意,這不包括過(guò)分犄角旮旯的語(yǔ)言枝節(jié))。這些東西也就是所謂的內(nèi)功了(其實(shí)最最重要的內(nèi)功還是長(zhǎng)期學(xué)習(xí)所磨練出來(lái)的自學(xué)能力)。對(duì)此大嘴Joel在Joel On Software里面提到的漏洞抽象定律闡述得就非常漂亮。所以,答案是,讓你成為高手的并不是你掌握什么語(yǔ)言,精通C+未必就能讓你成為高手,不精通C+也未必就能讓你成為低手。我想大家都不會(huì)懷疑g9老大如果要抄起C+做一個(gè)項(xiàng)目的話會(huì)比大多數(shù)自認(rèn)熟練C+的人要做得漂亮。所以關(guān)鍵的不是語(yǔ)言這個(gè)表層的東西,而是底下的本質(zhì)矛盾。當(dāng)然,不是說(shuō)那就什么語(yǔ)言都不要學(xué)了,按照一種曹操的邏輯,“天下語(yǔ)言,唯imperative與declarative耳”。C+是前者里面最復(fù)雜的一種,支持最廣泛的編程范式。借用當(dāng)初數(shù)學(xué)系入學(xué)大會(huì)上一個(gè)老師的話,“你數(shù)學(xué)都學(xué)了,還有什么不能學(xué)的呢?”。學(xué)語(yǔ)言是一個(gè)途徑,如果你把它用來(lái)磨練自己,可以。如果你把它用來(lái)作為學(xué)習(xí)系統(tǒng)底層知識(shí)的鑰匙,可以。如果你把它用來(lái)作為學(xué)習(xí)如何編寫優(yōu)秀的代碼,如何組織大型的程序,如何進(jìn)行抽象設(shè)計(jì),可以。如果掉書袋,光啃細(xì)節(jié),我認(rèn)為不可以(除非你必須要用到細(xì)節(jié),像boost庫(kù)的coder們)。計(jì)算機(jī)等級(jí)考試寶典(二級(jí)C語(yǔ)言程序設(shè)計(jì))系計(jì)算機(jī)等級(jí)考試寶典試題輔導(dǎo)軟件,適用于計(jì)算機(jī)等級(jí)考試寶典,軟件試題庫(kù)設(shè)計(jì)緊扣最新計(jì)算機(jī)等級(jí)考試寶典大綱、考試教材,符合計(jì)算機(jī)等級(jí)考試寶典題型與考試科目,復(fù)習(xí)輔導(dǎo)資料、考試資料豐富,免費(fèi)試用、試題庫(kù)巨大(注冊(cè)版試題量達(dá)7百多題、19萬(wàn)多字),輔導(dǎo)軟件收錄計(jì)算機(jī)等級(jí)考試寶典考前
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 玻璃質(zhì)檢員崗位面試問(wèn)題及答案
- 泵類質(zhì)檢員崗位面試問(wèn)題及答案
- 無(wú)人機(jī)反制工程師崗位面試問(wèn)題及答案
- 廣西桂林市七星區(qū)桂林十八中2025屆高二下化學(xué)期末質(zhì)量跟蹤監(jiān)視試題含解析
- 河南省汝州市實(shí)驗(yàn)中學(xué)2025年高一化學(xué)第二學(xué)期期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 杭州市群租房管理辦法
- 村鎮(zhèn)建房用地管理辦法
- 公共健身廣場(chǎng)管理辦法
- 華潤(rùn)供熱稽查管理辦法
- 科技賦能心理健康:AI心理咨詢系統(tǒng)探索
- 碳中和技術(shù)概論全套教學(xué)課件
- 【人教版】八年級(jí)化學(xué)上冊(cè)期末測(cè)試卷(含答案)
- 基礎(chǔ)護(hù)理學(xué)第七版題附有答案
- 2024中汽中心校園招聘筆試參考題庫(kù)含答案解析
- 監(jiān)理業(yè)務(wù)手冊(cè)范本
- 化工反應(yīng)工程課模設(shè)計(jì)
- 學(xué)與教的心理學(xué)第6版(師范專業(yè)心理學(xué))PPT完整全套教學(xué)課件
- 甲狀腺相關(guān)性眼病的診治進(jìn)展課件
- 小升初易錯(cuò)成語(yǔ)總結(jié)
- 郵輪基礎(chǔ)英語(yǔ)PPT全套教學(xué)課件
- 初一語(yǔ)文現(xiàn)代文閱讀題及答案
評(píng)論
0/150
提交評(píng)論