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