怎么樣才算是精通 C++?


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
谷歌project師對C++的掌握有兩個級別:

  1. 擁有C++的readability(可讀性)認證。通過這個認證須要在實際工作中寫出一個比較復雜的完整的類,然后將這個類提交到一個委員會進行審查,委員會會幫你糾正常見的錯誤。假設你的這個類滿足style guide[1]的全部要求,一兩個星期之后你就行拿到可讀性認證。一般來說,你須要在實際工作中寫過至少幾千行代碼才干達到這個要求。

    C++的readability對project師的意義主要有兩個。一個是熟悉並避免C++的缺陷(比方不要使用iostream和exception)。還有一個是熟悉一些經常使用的庫函數(比方string的各種操作。hash_map和smart pointer的使用等)。通過這個認證之后,project師就有權利在code review中批閱其他人寫的C++程序(注意這個不是readability review)。

    絕大多數project師對C++的掌握處在這個水平。

  2. 顧問級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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM