標籤:ext content 包括 csdn 意義 使用者 小系統 Google 注意
C++是一門非常奇妙的語言。讓人又愛又恨。
在知乎上看到的一個文章。怎麼樣才算是精通C++,這裡節選一些精彩的回複。
連結:http://www.zhihu.com/question/20201972/answer/23454845
來源:知乎
1
精通C++是一個艱巨的任務。
為什麼C++比別的語言難學這麼多?事實上這基本上是由於C++他爹Bjarne Stroustrup說過的一句話“我特別討厭語言的設計者把自己的喜好強加給使用者”(看向go)。
結果C++為了不限制你的想法,於是也就變成了現在這個樣子——包括若干範式,大概有物件導向(靈活應用virtual繼承+shared_ptr可以達到java/C#的效果)模板(這裡分兩類,分別為type rich programming和meta programming,差別非常大)函數式編程(現在有了lambda,配合檔案。簡直無敵了)過程式可是難能可貴的是,這幾種東西在C++混在一起用也是多麼的自然。只是,這須要你花時間去掌控他。那究竟有沒有必要真的學到這個地步呢,我認為跟你的領域是有關係的。譬如說我,基本上算是人格分裂的,由於:當我搞語言設計和編譯器的時候,我總是會傾向於創造各種小DSL來給自己用,用的都是模板(想想boost的spirit大概就明確我的意思了,儘管我不用它),盡量讓跟我有相同背景的人一眼能看懂我代碼的意思。當我做我那個GUI庫(www.gaclib.net)的時候。純粹是用OO和IoC那一套。當我寫3D渲染程式的時候,我會變成一個為了效能不惜犧牲可讀性的人。當我是不同的我的時候。我當然僅僅會用C++的一部分來完畢我當前的這個任務。這好像是多重標準。可是實際上是由於項目本身的性質而定的。
到了這個時候你會認為,C++真是一門好語言。當你須要為了你的項目放棄不同的部分的時候,C++都能幫你做到。
當你須要不同的抽象層次須要不同的效能要求的是,C++還是可以幫你做到。假設你用別的語言。你終於會發現那個語言僅僅能做某幾類的項目。這是由於,C++可以自由的讓你放棄某些部分。而別的語言會阻止你放棄某些部分。
為了達到這個層次,你必須進入一個無限接近於精通C++的狀態裡,這個時候你才幹收放自如。不被C++社區的各種不同的價值觀所捆綁。倘若你的項目非常大。不同的部分有不同的特徵的時候(什麼。一個沒有遍布全世界的一兩千人寫了20年的程式能叫程式嗎?)。就更加須要你有這樣的本事了。講到這裡,大家大概都明確精通C++大概是個什麼感覺了吧——大丈夫能屈能伸。
2
Googleproject師對C++的掌握有兩個層級:
擁有C++的readability(可讀性)認證。通過這個認證須要在實際工作中寫出一個比較複雜的完整的類,然後將這個類提交到一個委員會進行審查,委員會會幫你糾正常見的錯誤。假設你的這個類滿足style guide[1]的全部要求,一兩個星期之後你就行拿到可讀性認證。一般來說,你須要在實際工作中寫過至少幾千行代碼才幹達到這個要求。
C++的readability對project師的意義主要有兩個。一個是熟悉並避免C++的缺陷(比方不要使用iostream和exception)。還有一個是熟悉一些經常使用的庫函數(比方string的各種操作。hash_map和smart pointer的使用等)。通過這個認證之後,project師就有權利在code review中批閱其他人寫的C++程式(注意這個不是readability review)。
絕大多數project師對C++的掌握處在這個水平。
顧問級C++程式猿。
一般須要寫過數萬行C++代碼。用C++實現過比較複雜的系統。熟悉常見的設計模式並在實際工作中應用,對代碼重構有豐富經驗,最重要的是。成為小組以及周圍同事的C++顧問,是同事有C++使用問題時最先想到詢問的人。顧問級C++程式猿一般是進階project師(senior engineer)及以上層級,不僅對某種程式語言。對工作中的各種project問題也經驗豐富。事實上“精通C++”並不僅僅是熟悉C++本身,你須要對C++須要實現的project問題和周邊問題相同精通;並且“精通C++”這樣的說法是相對的。假設你能成為組裡的C++顧問,可以協助同事正確使用這樣的語言有效率地解決project問題並避免C++的誤區,你就算是精通C++的那個人。
3
Never trust a programmer who says he knows C++
4
精通C++,個人的理解是:1、能用C++的面向對像設計,分解。開發一個模組或小系統2、在出現BUG的情況下能調試3、熟悉對像,繼承。模板。能使用STL,BOOST4、能熟悉幾個經常使用的設計模式5、在此基礎上,在GOOGLE大神的協助下,能閱讀開源或閉源的原始碼。其他的。我認為有用性不強了,去摳語言的細節,語言的實現等。那不叫精通了。那是神通了。反正我認識的技術牛人。人家是去摳系統,原理上的細節,非常少去扣語言的。本來語言就是一個工具,用好他,壞了能簡單的維護,管他是怎麼實現的。
5
怎麼樣才算是精通 C++?