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

來源:互聯網
上載者:User

標籤: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++的掌握有兩個層級:

  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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.