日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

關(guān)于學(xué)習(xí)C++和編程的50個觀點|C++,編程,經(jīng)驗

 universy 2006-06-27

前 言

Long long time ago, on a topic far far away……是的,很久很久以前,kingofark無心之中寫了一篇關(guān)于學(xué)習(xí)C++和編程的發(fā)牢騷的文章。未曾料到的是,這篇文章被N個好心的網(wǎng)絡(luò)同胞流傳至今,以至于作者得意忘形的將文章簡稱為Ks50PV,在淺薄和浮躁中麻醉自己。

某個醉生夢死的深夜,kingofark關(guān)上電腦,屋內(nèi)一片墨黑,忽然發(fā)覺窗外的透徹和寧靜。湊到窗前向天空看去,驚訝的發(fā)現(xiàn)白光——不,Agent Mulder,不是UFO——來自圓月。筆者聯(lián)想到了牛郎織女——先輩們早已灰飛煙滅,只有故事被流傳下來,因為被流傳而流傳。

一篇文章不能因為被流傳而流傳,被流傳的不應(yīng)該是流傳本身。帶著這樣的沖動,kingofark又打開電腦……

眼前給大家展現(xiàn)的,是經(jīng)過kingofark重新審視,結(jié)合作者最新感受的修訂版。其中有些條款徹底的更換或者修改了。這一方面反映了國內(nèi)圖書市場近年來發(fā)生的變化,另一方面也反映出:其實有些時候,無知的人說得最多。歡迎大家批評討論甚至予以唾棄。

在這個修訂版中,作者沒有刪掉舊的條款,僅在新舊條款前加了“新”、“舊”二字以示區(qū)別。新舊條款下面伴有作者的評論。


1. 把C++當(dāng)成一門新的語言學(xué)習(xí)(和C沒啥關(guān)系!真的。);

是的,我們?nèi)匀粦?yīng)該抱著這樣一種心態(tài)來學(xué)習(xí)C++。前一段時間,C/C++ User’s Journal 上面有一連串關(guān)于C與C++關(guān)系的文章,Bjarne Stroustrup、Herb Sutter等幾位C++領(lǐng)域的大師從不同方面討論了C/C++今后發(fā)展的問題,頗為深刻。

看問題有深有淺,有高有低。我們不是大師,不要把C和C++說得好像自己的兩個兒子。

水果刀是一種刀。瑞士軍刀也是一種刀,但它何嘗不是剪刀、起子、鋸子、銼刀、牙簽、指南針、尺子、放大鏡……?誰在使用瑞士軍刀之前還要先培訓(xùn)如何使用水果刀?另外,在水果刀上面粘一個剪刀、起子、鋸子、銼刀、牙簽、指南針、尺子、放大鏡……我估計也不會太好用(不叫“瑞士軍刀”,叫“超級武器霸王3000”)。


舊:2. 看《Thinking In C++》,不要看《C++變成死相》;

新:2. 看《Accelerated C++》,看《C++ Gochas》;

如今《Thinking In C++ 2nd》也出了中文版,翻譯質(zhì)量好壞kingofark不想再談——畢竟有人(至少在www.china-pub.com上)覺得翻譯還不錯。經(jīng)常忍不住要去跟人爭辯翻譯質(zhì)量的kingofark忽然明白了蘿卜白菜定理的另一個推論:看書好像看A片,有人愛看歐美,有人愛看日臺,各得其樂。自己去衡量罷,不過最好不要參與圖書信息頁上面的無聊口舌戰(zhàn)。請記住一句話,一句就好:管它黑貓白貓,能抓老鼠就是好貓。

Andrew Koenig的《Accelerated C++》是一本真正具有實踐性的入門書。該書傳承了《Ruminations On C++》的闡述方法,通過一個又一個具體的設(shè)計實例充分體現(xiàn)使用C++進(jìn)行開發(fā)的真正優(yōu)勢之所在。事實上,筆者覺得Andy的書都是程序員必讀(還好不算多)。對于《Accelerated C++》的評論,國外網(wǎng)站上皆有,筆者不再累述。

Stephen C. Dewhurst的《C++ Gochas》是一本“奇特”的書。說“奇特”不是因為Gotcha這個單詞對于中國人難于理解(何況中譯書干脆把這個標(biāo)題扔掉不要了),而是在于:Dewhurst用酸中帶刺、笑里藏刀的口吻提醒程序員一些編寫C++程序(本來就)應(yīng)該注意到的問題。這些問題中,有編碼細(xì)節(jié)問題,有編碼習(xí)慣問題,甚至有個人修養(yǎng)問題。CUJ上有一篇對該書的評論,筆者認(rèn)為還比較中肯。筆者看了該書的樣章以后的感受是:忠言向來都逆耳;這本書中的觀點你可以不認(rèn)同,但其確實引出了一些應(yīng)該注意(而通常沒被注意)的問題,這對于一個程序員來說是非常值的關(guān)注的。


舊:3. 看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因為他們很難而我們自己是初學(xué)者所以就不看;

新:3. 看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因為它們很難而我們自己并不想搞“學(xué)術(shù)研究”所以就不看;

這兩本書的確都不適合初學(xué)者看,舊條款說得有些過激,想必當(dāng)初kingofark是希望刺激一下那些“浮躁的人(包括kingofark)”(見條款10-15)。

總聽人說“語言其實都是相通的”。問:什么時候才能融會貫通?答:通透其理的時候。

好好學(xué)吧您吶!


4. 不要被VC、BCB、BC、MC、TC等詞匯所迷惑——他們都是集成開發(fā)環(huán)境,而我們要學(xué)的是一門語言;


5. 不要放過任何一個看上去很簡單的編程小問題——它們往往并不那么簡單,或者可以引伸出很多知識點;

侯捷先生譯的《C++ Primer Answer Book》和裘宗燕老師譯的《C++ Solutions – Companion to TCPPL》都已經(jīng)出版了。作為在校學(xué)生或者C++自學(xué)者,通過這樣兩本書來操練自己的編碼實踐,實在是最合適不過了。


6. 會用Visual C++,并不說明你會C++;

會唱歌又會彈吉他,并不說明你會搞音樂創(chuàng)作——只不過有點“苗頭”而已(且不能拔)。


7. 學(xué)class并不難,template、STL、generic programming也不過如此——難的是長期堅持實踐和不遺余力的博覽群書;

博覽群書不一定必要,但是,To learn or not to learn…that is the question! 學(xué)習(xí)C++,這些內(nèi)容不可或缺。


舊:8. 如果不是天才的話,想學(xué)編程就不要想玩游戲——你以為你做到了,其實你的C++水平并沒有和你通關(guān)的能力一起變高——其實可以時刻記?。簩W(xué)C++是為了編游戲的;

新:8. 學(xué)編程與玩游戲,兩者“相互作用,相互影響,辯證統(tǒng)一”,可以分割;不過的確有很多人因為愛玩游戲而學(xué)編程,也有不少人因為不愛學(xué)編程而玩游戲;其實這里面的道理再簡單不過:如果你不是廚師——而自己會做一手好菜,自己當(dāng)然有余地飽嘗美味;如果你是廚師——拜托你不要光顧著吃,好好學(xué)廚藝行不行?回頭吃肥了跌進(jìn)豬圈人家認(rèn)不出你。

舊條款是一句理由不充分的氣話,源于當(dāng)時筆者對沉溺游戲的“科班學(xué)生”的焦慮。

關(guān)于游戲編程,其實也有不少好書,比如Andre Lamothe的《Tricks of The Windows Game Programming Gurus 2nd》《Tricks of 3D Game Programming Gurus》,通俗易懂、門檻兒低,深入淺出,大師的經(jīng)驗體會娓娓道來,精辟深刻,直入核心。對該作者的書,國外網(wǎng)站有評價,不用筆者費口舌了(好詞兒都用光了)。

筆者本人對游戲編程也蠻有興趣,非常喜歡Andre Lamothe的書。書有多好呢?這么說吧:《Tricks of The Windows Game Programming Gurus》中文版雖然譯得參差曖昧、差強(qiáng)人意(比如把數(shù)據(jù)結(jié)構(gòu)linked list譯為“連接的清單”),仍然還是瑕不掩瑜,可以讓人坐在電腦跟前打開VC,一口氣讀到深夜,體驗使用VC/DirectX SDK編寫游戲的樂趣。


舊:9. 看Visual C++的書,是學(xué)不了C++語言的;

新:9. 在工作環(huán)境中,請小聲與同事說話。

方便快捷(且易導(dǎo)致發(fā)胖)的快餐業(yè)McDonald、KFC到了中國,成了孩子們的牙祭和每周的節(jié)日,情侶們約會的廉價地點。一到周末,McDonald、KFC店內(nèi)“一片歡騰的景象”。所有人都大聲說話。

咖啡廳本來是過去從美片上面看到的那種“零零星星有著裝高雅的俊男美女在催情的柔光下竊竊私語”的夢幻般的地方。中國的咖啡廳,煙霧繚繞,音箱發(fā)出不柔和的八十年代懷舊歐美歌曲(且一般都不是原人原唱)——地方話,罵人話,話話別扭;手機(jī)聲,牌將聲,聲聲入耳。所有人都大聲說話。

軟件公司里面,開發(fā)人員探討技術(shù)問題,間歇中的打趣,是再正常不過的事情。A和女秘書B正在咯咯的打情罵俏;C為了告訴D文檔已經(jīng)做好了,伸長了脖子蓋過AB的聲音;一旁的E正在面紅脖子粗的與高手F激烈的討論一個技術(shù)難題,這時候絕對不準(zhǔn)有誰的聲音比他還高;G向作管理的H抱怨公司的軟件工程沒有做好,伴著唾液的“嘖嘖”濁音故意要讓自己的上司聽到。所有人都大聲說話。

請你記住一點:你大聲說話,同事只聽得見你的聲音;你小聲說話,同事還聽得見你的心情。交流需要的是心境。


10. 浮躁的人容易說:XX語言不行了,應(yīng)該學(xué)YY;——是你自己不行了吧???

11. 浮躁的人容易問:我到底該學(xué)什么;——別問,學(xué)就對了;

12. 浮躁的人容易問:XX有錢途嗎;——建議你去搶銀行;

舊:13. 浮躁的人容易說:我要中文版!我英文不行!——不行?學(xué)呀!

新:13. 浮躁的人容易說:我要中文版!我英文不行!——希望這不是你不好好學(xué)的原因。

14. 浮躁的人容易問:XX和YY哪個好;——告訴你吧,都好——只要你學(xué)就行;

15. 浮躁的人分兩種:a)只觀望而不學(xué)的人;b)只學(xué)而不堅持的人;

16. 把時髦的技術(shù)掛在嘴邊,還不如把過時的技術(shù)記在心里;


17. C++不僅僅是支持面向?qū)ο蟮某绦蛟O(shè)計語言;

C++是以multi-paradigm為目標(biāo)的通用型語言,學(xué)習(xí)起來應(yīng)該全面了解。標(biāo)準(zhǔn)庫為你做了很多,不用都是浪費。而如果你是做嵌入式,不妨參考一下Embedded C++的規(guī)范。

技術(shù)跟進(jìn),工具更新,并不一定就是盲目浮躁——鐮刀鋤頭怎比得過洋槍洋炮?筆者愿意相信,學(xué)生、年輕程序員、初學(xué)者都比較容易了解這些,同時也正需要被引導(dǎo)著去了解這些。但是在國內(nèi),大學(xué)教授、項目經(jīng)理、相信“人月不是神話”的領(lǐng)導(dǎo)者們——他們了解嗎?我疑心重重。

強(qiáng)奸,蹂躪無辜良民;奸淫幼女,摧殘純潔的心靈;出版淫穢音像圖書制品,毒害青少年兒童。偏偏這些事情在IT領(lǐng)域里面不算違法犯規(guī)。


18. 學(xué)習(xí)編程最好的方法之一就是閱讀源代碼;

JDK,CLI正是上佳的參考資料。至于C++方面,除了STL,還有Boost,Loki,ACE等等優(yōu)秀的代碼值得研究、參考,甚至抄襲(如果你有足夠技術(shù)能力的話)。


舊:19. 在任何時刻都不要認(rèn)為自己手中的書已經(jīng)足夠了;

新:19. 書不在多,好書則靈;

如今國內(nèi)的圖書市場較之過去幾年,最大的改變的就是大量國外圖書的引進(jìn)。書少的時候,沒有選擇的余地;書多的時候,選擇太多,無所適從。這里就有一個如何擇書的問題。接受推薦是一個不錯的選擇——不,我不是說某些圖書網(wǎng)站上的口舌對罵。

面對這種情況,讀者需要的其實是正確的引導(dǎo)。


舊:20. 請閱讀《The Standard C++ Bible》(中文版:標(biāo)準(zhǔn)C++寶典),掌握C++標(biāo)準(zhǔn);

新:20. 請參考《 TCPPL 3rd》《C++ Primer 3rd》《The Standard C++ Library》,掌握C++標(biāo)準(zhǔn);

基本上,以目前的圖書狀況來看,要掌握>C++標(biāo)準(zhǔn),看哪本書也看不到《The Standard C++ Bible》>(中文版:標(biāo)準(zhǔn)C++寶典)這一本上來。筆者在另外的文章里已經(jīng)發(fā)表過對這本書的看法。

說起權(quán)威的C++參考書,一定少不了《TCPPL 3rd》《C++ Primer 3rd》《The Standard C++ Library》。

Bible? 唔……看《TCPPL 3rd》《C++ Primer 3rd》《The Standard C++ Library》的讀者,大可不必信教。


21. 看得懂的書,請仔細(xì)看;看不懂的書,請硬著頭皮看;

要知道,很多時候其實不是看不懂,而是沒有自信,以為看不懂。

本條款對于學(xué)習(xí)外語同樣適用。


22. 別指望看第一遍書就能記住和掌握什么——請看第二遍、第三遍;

總有人(甚至是kingofark自己)抱怨說沒有足夠的時間看書。從某個角度來看,確實如此——但這不是你不看書的理由,對吧?


舊:23. 請看《Effective C++》《More Effective C++》《Exceptional C++》;

新:23. 請看《Effective C++》《More Effective C++》《Effective STL》《Exceptional C++》《More Exceptional C++》《Exceptional C++ Styles》《C++ Templates》《Ruminations On C++》《C Traps and Pitfalls》《Expert C Programming》;

寫這么多不是要誰都看都買。這些都是頂級好書,根據(jù)自己的情況擇來讀之,易收宏效。

Andrew Koenig的《C Traps and Pitfalls》是程序員必讀。令筆者不寒而栗的是,該書提到的許多錯誤筆者都犯過(而且一直在犯?。??!禘xpert C Programming》也是一本相當(dāng)好的書,其中譯本也不錯,可惜就筆者而言,書中對某些典故的翻譯欠妥(比如StarTrek,其作為西方的一種文化現(xiàn)象,已經(jīng)滲透到西方文明的方方面面,對其中一些典故的引用對于中國人來說,不經(jīng)解釋可能是不太容易理解的)。


24. 不要停留在集成開發(fā)環(huán)境的搖籃上,要學(xué)會控制集成開發(fā)環(huán)境,還要學(xué)會用命令行方式處理程序;

特別令人驚訝的是,筆者發(fā)現(xiàn)有些人(居然!)不知道VC還有一個叫做cl.exe 的命令行編譯器!運行一個超級陽春的Hello World (居然!)需要到IDE里面去建一個project!沒聽說過 bcc32、dumpbin、grep、nmake、makefile、javadoc……唔……呃……打個不恰當(dāng)?shù)谋确剑憾旆堑么┲竺抟\厚棉褲才能享受做愛的樂趣嗎?


25. 和別人一起討論有意義的C++知識點,而不是爭吵XX行不行或者YY與ZZ哪個好;

注:XX、YY、ZZ可以指代:某計算機(jī)語言;某專家;某種哲學(xué)體系;某種軟件開發(fā)理論;某種新技術(shù)新思維;某個“務(wù)虛(務(wù)實)的”觀點;某班的男生。


26. 請看《程序設(shè)計實踐》,并嚴(yán)格的按照其要求去做;

題外話:從Herb Sutter的網(wǎng)站www.gotw.ca上看到,Sutter與Alexandrescu欲合著一本C++ Coding Standard,應(yīng)該也是令人期待的一本書。


舊:27. 不要因為C和C++中有一些語法和關(guān)鍵字看上去相同,就認(rèn)為它們的意義和作用完全一樣;

新:27. 注意C與C++之間的區(qū)別。

在國內(nèi),有那么一群豬……噢不,我是說大學(xué)教師……噢不不,我是說項目經(jīng)理……不不不……對不起,其實我是想說“人”,對C/C++/Java/C#/……存有太多太多的誤解(一般很愚蠢,以至于別人都不知道該怎么解釋才好)。


舊:28. C++絕不是所謂的C的“擴(kuò)充”——如果C++一開始就起名叫Z語言,你一定不會把C和Z語言聯(lián)系得那么緊密;

新:28. 了解各個語言之間的關(guān)系和區(qū)別,切忌盲目褒貶、妄加評論;

關(guān)于C與C++的關(guān)系及C++的發(fā)展與演化,C++創(chuàng)造者Bjarne Stroustrup在《The Design And Evolution of C++》(中譯本,裘宗燕老師譯)里面已經(jīng)說得很清楚了。

學(xué)C++的朋友應(yīng)該看看本書,就當(dāng)是掃盲。


舊:29. 請不要認(rèn)為學(xué)過XX語言再改學(xué)C++會有什么問題——你只不過又在學(xué)一門全新的語言而已;

新:29. 請不要認(rèn)為學(xué)過XX語言再改學(xué)YY會有什么問題——你只不過又在學(xué)一門全新的語言而已;


30. 讀完了《Inside The C++ Object Model》以后再來認(rèn)定自己是不是已經(jīng)學(xué)會了C++;

事實上,這樣的高階書你不一定就非要去啃,關(guān)鍵是浮躁與不浮躁、自信與自滿的問題。


31. 學(xué)習(xí)編程的秘訣是:編程,編程,再編程;

這一點在Andrew koenig的書《Ruminations On C++》《Accelerated C++》里面有很好的體現(xiàn)。隨著Andy 的書一起作思維上的編程,自己再動動手,將是非常美妙的學(xué)習(xí)經(jīng)歷。


舊:32. 請留意下列書籍:《C++面向?qū)ο蟾咝Ь幊蹋–++ Effective Object-Oriented Software Construction)》《面向?qū)ο筌浖?gòu)造>(Object-Oriented Software Construction)》《設(shè)計模式(Design Patterns)》《The Art of Computer Programming》;

新:32. 請留意下列書籍:《Design by Contract,by Example》《Refactoring》《Design Patterns Explained》;

《Design by Contract,by Example》《Refactoring》《Design Patterns Explained》毫無疑問是好書,且中譯本令人期待。


舊:33. 記住:面向?qū)ο蠹夹g(shù)不只是C++專有的;

新:33. 記住:哇!面向?qū)ο蠹夹g(shù)又不只是C++專有的;

嗯?我怎么會說“又”這個字?


舊:34. 請把書上的程序例子親手輸入到電腦上實踐,即使配套光盤中有源代碼;

新:34. 善加利用配套光盤;


35. 把在書中看到的有意義的例子擴(kuò)充;


36. 請重視C++中的異常處理技術(shù),并將其切實的運用到自己的程序中;

36. 請重視DbC(Design by Contract)以及異常處理技術(shù),并將其切實的貫徹和運用到自己的程序中;

Exception Handling引發(fā)著無數(shù)的討論。關(guān)于exception handing的各種議題,看Herb Sutter的文章的確讓人有些“震驚”。Embedded C++倒是蠻干脆——STL,Exception Handling全部刪光光——可見什么事物總有個適用范圍。

DbC絕不僅僅是assertion。DbC要求各個組件各盡其責(zé),將交流和協(xié)作建立在非常明晰嚴(yán)格的條款之基礎(chǔ)上。DbC是不容忽視的,其所涉及的層面和深度,或許比我們想象的要廣,要深。


37. 經(jīng)?;仡欁约阂郧皩戇^的程序,并嘗試重寫,把自己學(xué)到的新知識運用進(jìn)去;


38. 不要漏掉書中任何一個練習(xí)題——請全部做完并記錄下解題思路;


39. C++語言和C++的集成開發(fā)環(huán)境要同時學(xué)習(xí)和掌握;


40. 既然決定了學(xué)C++,就請堅持學(xué)下去,因為學(xué)習(xí)程序設(shè)計語言的目的是掌握程序設(shè)計技術(shù),而程序設(shè)計技術(shù)是跨語言的;


41. 就讓C++語言的各種平臺和開發(fā)環(huán)境去激烈的競爭吧,我們要以學(xué)習(xí) >C++語言本身為主;


舊:42. 當(dāng)你寫C++程序?qū)懙揭话雲(yún)s發(fā)現(xiàn)自己用的方法很拙劣時,請不要馬上停手;請盡快將余下的部分粗略的完成以保證這個設(shè)計的完整性,然后分析自己的錯誤并重新設(shè)計和編寫(參見43);

新:42. 只有通過編碼實踐才能領(lǐng)會設(shè)計思維;


43. 別心急,設(shè)計C++的class確實不容易;自己程序中的class和自己的class設(shè)計水平是在不斷的編程實踐中完善和發(fā)展的;


44. 決不要因為程序“很小”就不遵循某些你不熟練的規(guī)則——好習(xí)慣是培養(yǎng)出來的,而不是一次記住的;


45. 每學(xué)到一個C++難點的時候,嘗試著對別人講解這個知識點并讓他理解——你能講清楚才說明你真的理解了;


46. 記錄下在和別人交流時發(fā)現(xiàn)的自己忽視或不理解的知識點;


47. 請不斷的對自己寫的程序提出更高的要求,哪怕你的程序版本號會變成Version 100.XX;

鄭重提醒:請學(xué)會使用版本控制工具!Visual Source Safe,CVS——使用它們作版本控制絕對比你新建一個名為“MyApp_New2”的目錄要好得多!在實際開發(fā)中,不使用版本控制工具的結(jié)果可以用一句話概括:能變得多糟,就定會變得多糟。


48. 保存好你寫過的所有的程序——那是你最好的積累之一;


49. 請不要做浮躁的人;


50. 請熱愛C++!

其實Eiffel、Java、C#也不錯:-)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多