成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當前位置:首頁>>軟件教程>>新聞內容  
NGofARK學習C++和編程的50個觀點
作者:kingofark 發布時間:2003-12-17 11:19:35 | 【字體:

Kingofark's 50 Points of View About Learning C++ And Programming

K ][ N G of A R K™關于學習C++和編程的50個觀點

2003修訂版

Revision 2.0

by K ][ N G of A R K ™


前 言

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

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

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

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

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


1. 把C++當成一門新的語言學習(和C沒啥關系!真的。);

是的,我們仍然應該抱著這樣一種心態來學習C++。前一段時間,C/C++ User’s Journal 上面有一連串關于C與C++關系的文章,Bjarne Stroustrup、Herb Sutter等幾位C++領域的大師從不同方面討論了C/C++今后發展的問題,頗為深刻。

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

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


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

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

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

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

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


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

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

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

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

好好學吧您吶!


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


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

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


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

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


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

博覽群書不一定必要,但是,To learn or not to learn…that is the question! 學習C++,這些內容不可或缺。


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

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

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

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

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


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

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

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

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

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

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


10. 浮躁的人容易說:XX語言不行了,應該學YY;——是你自己不行了吧!?

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

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

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

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

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

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

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


17. C++不僅僅是支持面向對象的程序設計語言;

C++是以multi-paradigm為目標的通用型語言,學習起來應該全面了解。標準庫為你做了很多,不用都是浪費。而如果你是做嵌入式,不妨參考一下Embedded C++的規范。

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

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


18. 學習編程最好的方法之一就是閱讀源代碼;

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


舊:19. 在任何時刻都不要認為自己手中的書已經足夠了;

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

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

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


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

新:20. 請參考《 TCPPL 3rd》《C++ Primer 3rd》《The Standard C++ Library》,掌握C++標準;

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

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

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


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

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

本條款對于學習外語同樣適用。


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》;

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

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


24. 不要停留在集成開發環境的搖籃上,要學會控制集成開發環境,還要學會用命令行方式處理程序;

特別令人驚訝的是,筆者發現有些人(居然!)不知道VC還有一個叫做cl.exe 的命令行編譯器!運行一個超級陽春的Hello World (居然!)需要到IDE里面去建一個project!沒聽說過 bcc32、dumpbin、grep、nmake、makefile、javadoc……唔……呃……打個不恰當的比方:冬天非得穿著大棉襖厚棉褲才能享受做愛的樂趣嗎?


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

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


26. 請看《程序設計實踐》,并嚴格的按照其要求去做;

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


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

新:27. 注意C與C++之間的區別。

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


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

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

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

學C++的朋友應該看看本書,就當是掃盲。


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

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


30. 讀完了《Inside The C++ Object Model》以后再來認定自己是不是已經學會了C++;

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


31. 學習編程的秘訣是:編程,編程,再編程;

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


舊:32. 請留意下列書籍:《C++面向對象高效編程(C++ Effective Object-Oriented Software Construction)》《面向對象軟件構造>(Object-Oriented Software Construction)》《設計模式(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. 記住:面向對象技術不只是C++專有的;

新:33. 記住:哇!面向對象技術又不只是C++專有的;

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


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

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


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


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

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

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

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


37. 經常回顧自己以前寫過的程序,并嘗試重寫,把自己學到的新知識運用進去;


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


39. C++語言和C++的集成開發環境要同時學習和掌握;


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


41. 就讓C++語言的各種平臺和開發環境去激烈的競爭吧,我們要以學習 >C++語言本身為主;


舊:42. 當你寫C++程序寫到一半卻發現自己用的方法很拙劣時,請不要馬上停手;請盡快將余下的部分粗略的完成以保證這個設計的完整性,然后分析自己的錯誤并重新設計和編寫(參見43);

新:42. 只有通過編碼實踐才能領會設計思維;


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


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


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


46. 記錄下在和別人交流時發現的自己忽視或不理解的知識點;


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

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


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


49. 請不要做浮躁的人;


50. 請熱愛C++!

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


文章來源:csdn
·C++ BuilderX的問題與展望
·如何成為一名C++程序員
 放生
 愚愛
 夠愛
 觸電
 白狐
 葬愛
 光榮
 畫心
 火花
 稻香
 小酒窩
 下雨天
 右手邊
 安靜了
 魔杰座
 你不像她
 邊做邊愛
 擦肩而過
 我的答鈴
 懷念過去
 等一分鐘
 放手去愛
 冰河時代
 你的承諾
 自由飛翔
 原諒我一次
 吻的太逼真
 左眼皮跳跳
 做你的愛人
 一定要愛你
 飛向別人的床
 愛上別人的人
 感動天感動地
 心在跳情在燒
 玫瑰花的葬禮
 有沒有人告訴你
 即使知道要見面
 愛上你是一個錯
 最后一次的溫柔
 愛上你是我的錯
 怎么會狠心傷害我
 不是因為寂寞才想
 親愛的那不是愛情
 難道愛一個人有錯
 寂寞的時候說愛我
主站蜘蛛池模板: 临安市| 融水| 米林县| 勃利县| 进贤县| 宣武区| 吉木乃县| 柳河县| 龙州县| 崇仁县| 清徐县| 澎湖县| 湘阴县| 南宫市| 临沂市| 罗城| 玛纳斯县| 全州县| 句容市| 五莲县| 花垣县| 攀枝花市| 新丰县| 江达县| 平远县| 永寿县| 成安县| 和政县| 大渡口区| 庐江县| 威宁| 嵩明县| 鹤岗市| 元朗区| 东安县| 武宣县| 六盘水市| 达孜县| 鸡泽县| 买车| 松江区|