我是初學c++者,我想達到熟練使用c++的程度,我就想知道達到什麼地步才能算是熟練使用呢?
比如說看多少書或者敲多少代碼還是說能在github上做到什麼樣的開源程序才算呢?
不要妄圖給自己的學習過程定一個指標。總之你只要覺得你已經很痛苦了,最後看到什麼演算法的描述都可以直接寫成C++,讓同樣懂這個演算法的人能輕鬆修bug,你就算熟練掌握了。三個條件缺一不可。
其實,從歷史經驗看,所謂「熟練使用」、「精通」之類,沒有指標,而且甚至自己都不知道什麼時候達到的。往往是到了之後很久,看老代碼,輕鬆重構出更好的,才會突然發現,原來自己已經進步到這個程度了。
你也不必想著一個什麼目標,朝著目標才能前進。其實就是多看多練,即便是隨機遊走也沒問題。積累夠了就行。
工作(項目/leader)要求你熟悉C++的時候,你很快就熟了……個人感覺,純為了學習c++而去學習c++效率總是難以達到令人滿意的程度吧,特別是自己一個人干這事的時候,無法高效的把握正確的側重點,很容易掉入到「不小心花費巨量時間去鑽研實際中極少用到的特性"這種坑裡,很不值當,當然,對於自控力判斷力極強的人這都無所謂……當然,也必定有一部分基礎的東西是需要自己實打實的扛過來的,比如primer,比如stl那堆,基本的數據結構、演算法、操作系統,再加上侯捷那幾本effective用來避坑就差不多能開始幹活了吧,GUI、資料庫、網路、高並發等等等等有太多需要學習的東西了,時間精力都用來鑽一些玄妙至極的c++特性,不是很有必要……總感覺還有個原因得說下……c++第三定律:"c++這個小宇宙,不管你投入多少精力,總必定能有路邊小白分分鐘能找出一個犄角旮旯里的變態問題問倒你……"???第一定律是什麼?那必須是「精通c++需要十年」啊那第二定律???……
……
「跟c++相比,php才是最好的語言啊!」我覺得根本沒必要去糾結於C++的熟練程度到了哪個級別。你就直接用它來寫你想寫的程序就行了。
當你發現你己經能將精力集中於要解決的問題上,而不再是分心於C++的那些語法特性,不再被各種「奇怪」的編譯錯誤所折磨,也能熟練使用各種手段調試和解決運行時程序出現的各種問題時,掌握到這程度基本上就夠了。
除非你打算設計或完善一種編程語言,或者是你要為某種語言寫一個編譯器,否則真沒必要「精通」某種語言,它們不過是一種用來解決實際問題的工具罷了,在工具上花那麼多的時間,不值。
一般來說熟練就是隨便什麼想法和需求都能立即想到怎麼用C++表述出來,就跟用母語一樣。
精通就是隨便別人拿什麼C++代碼來,不管是初學者坑坑巴巴寫出來的,還是老手錘鍊了幾十年的代碼,是C++剛發明出來時候的奇技淫巧,還是現代C++的最時髦的語法,都能一眼看懂,並且明白這個代碼是什麼情況下被什麼樣的人寫出來的,以及它有沒有更好的寫法。
C++有很多特性,演算法不應該算吧。
模版特化,能看懂庫的實現,調試,應該算一個吧。
語言的發明都是為了解決問題何況是學習使用呢?使用語言能正確描述你需要解決的問題使用中那些不便,你能使用一些不太優雅和正規的方法去解決就足夠了。然後換一門更簡單方便的語言。會選擇也是技術
其實我覺得你所說的「熟練」是很多正常人通過努力和不斷的代碼積累都是可以達到的,問題是,你知道么,Bjarne Stroustrup他老人家也沒敢說自己10分的了解C++,那麼你可能達到他這個水準么?可能我們很多人窮極一生之力也達不到他對C++的理解,所以如果你認為熟練是他所認為的那種標準,那麼我只能告訴你那個雞湯之詞:學無止境。
其實他老人家在The C++ Programming Language里還說過一句話,原話我忘了寫在哪一頁了,大致意思是說:學習一門語言,沒有必要去掌握它的所有細節,那樣是毫無意義的。所以我也把這句話送給你,不光是學習語言,人生的路也要自己一步一步摸索,適合自己的才是最好的。
15年底的時候認真在gayhub數了變更行(有沒有api直接讀所有repo整年的變更行啊?),發現光開源的部分都有幾十萬行了,大頭其實還在私有項目里。
基本語法,繼承多態的背後原理,常用數據結構,模板的使用,還需要懂點設計模式,你寫一行代碼,除了運行出結果外還明白這行代碼背後有哪些東西,遇到普通bug能通過debug的方式(而不是強行review code)解決,就算熟悉了。
原創 別處沒有 有也說不清 或者瞎掰(這個可參考別人的回答 大部分是瞎掰)
這個問題的回答中編程高手們的回答都涵蓋這樣一個觀念:只要你能想到,你就能用C++這個語言實現。這就是判斷一個人是否能熟練使用C++這個語言的一個標準,這個標準對所有語言都適用。
但是「熟練使用C++」這個目標很無聊,甚至不能算是一個開發者在編程上的高級目標。
我認為,高級目標是建立清晰的思維模型。而不斷地學習,並在實踐中使用C++語言,是達到這一目的的一種高效的方式。
比如,我現在需要做成一件事情S,那麼通過我的思考,我發現,我需要先做a, b, c三個模塊以完成功能D,在D的基礎上,擴展E,F功能,並將它們組合起來完成S。這套思維模式才是我真正的編程語言,然後,我才會考慮,將裡面的各個部分,映射到C++,C#,Go,python,typescript等語言中,最終用具體的程序語言來完成這件事。
造出一個AI快速寫出垃圾C++代碼的那種程度就是了!
語言只是工具,最重要的是可以解決實際問題。
看了前面幾個答案 好象沒有一個是符合你的問題的
書的話 一到兩本經典的就行了, 反覆多看兩次, 學一門語言 關鍵還是寫的代碼要多 cpp應用在網路和遊戲比較多 可以根據自己的方向多參考這方面的程序 慢慢試試開發適合自己用的庫
還有一個要提醒的 如果是多人合作的項目 cpp盡量不要用太多抽象的語法 因為你能看懂 別人不一定能看懂的 這會影響項目的正常開發看到一個說法,如果你能以C++找到一份工作,你就入門了
C++也是一門語言,既然是語言,標準就跟漢語、英語類似,能夠準確無誤的表達出你大多時刻的想法,能理解大多數他人代碼的含義,或者說是實現的內容,就算是熟練了吧。
能看懂C++11的所有特性
如果一定要一個benchmark。各種設計做好之後,,,,,,,,,
大前提,,,,各種設計做好了之後,,,
設計做了很多個月。。
半瓶伏特加下去一小時兩千行。我認識一哥們兒就是這樣。
題主說的熟練我只能理解為出一個idea能夠快速代碼實現。
另一個例子是一哥們兒(T)搞循環平鋪,loop tiling 針對不同架構優化。三百行寫了四個月。工作量都差不多吧。。特性都沒用過多少,只是嵌了一堆assembly。
So, you tell me.
對於感興趣的東西自己能做出來就可以了,不過C++這玩意真的東西太多,我都是先學的C然後加上類就成cpp了……
能夠快速用c++寫出無坑的代碼即可。
會寫字的人有可能當書法家,也有可能去淘寶賣字,或者去政府當秘書,那麼會cpp的話我來說幾個方向:一,能寫小型應用軟體,滿足日常工作需求或者去網上販賣。二,能加入公司寫大型商業軟體三,能寫病毒木馬四,能寫遊戲輔助或者外掛(記住外掛犯法)
五,能開發嵌入式開發(雖然國內用c的比較多)
六,能搞逆向或者破解軟體七,寫遊戲暫時就想到這些,上面每一個方向都能讓人花一輩子專研,所以想想還是挺有趣的推薦閱讀:
※Unity 5 發布了,但是否 Unity 做的遊戲與 Unreal 相比要顯得粗糙很多?
※GitHub 上都有哪些值得關注學習的有趣的 C++ 開源項目?
※25歲了,從未接觸過編程,還可以把編程作為愛好培養嗎?
※編程除了學語言還要學什麼?
※有那些好的github上c/c++學習項目?