怎樣才是一個基本水平的c++程序員?
首先,用別人的函數的時候,不要老是去關心裏面是怎麼做的,要基於unit test和profiling來評價他的好壞。很多C++程序員都以為自己有一種能力,就是一看代碼什麼都明白了。然而這種能力是很可貴的,幾乎不會出現在普通程序員的身上。所以反正看了代碼,做出來的判斷也是不對的,還是unit test和profiling比較科學。
題主的意思可能是問在C++語言本身上,一個程序員需要具備怎樣的能力,我覺得基本上爬完任何一本公認的教材就夠了,但這還不足以讓你成為一個程序員;下面是我對一個程序員最基本的要求:
1,文檔能力,包括查閱資料和寫文檔的能力
2,良好的編碼習慣,命名,注釋,縮進,現在各個廠商都有自己的規範,最具影響力的應該是Google Style Guide系列3,溝通和交流
4,基本的邏輯素養,至少不能寫出(bool)v ? true : false這種代碼5,基本的演算法和數學能力6,對語言本身的掌握7,任務分解能力8,對[業務|API|框架結構]+的了解對絕大多數企業來說前7點的能力,最終都會通過第8點來體現;很多時候其實都是定向的,比如說做伺服器,會涉及到網路通信/協議/內存管理;做音視頻,會涉及到音視頻編解碼;做遊戲,會涉及到遊戲引擎;做Win32開發,會涉及到Win32 API/消息機制/GUI框架;寫個常駐內存的服務程序,長期運行不崩潰、不死鎖,內存佔用合理、不泄漏,日誌內容不多不少足夠用,新人接手不罵娘
當老闆跟你說不用java就走人的時候圓潤地滾出去
我覺得我就是C++程序員的計量單位...
作為C++程序員,或者說程序員一定要提升自己:
專訪李運華:程序員如何在技術上提升自己-CSDN.NET專訪徐宜生:堅決不做代碼搬運工!-CSDN.NET上面兩個文章我覺得都不錯。要說基礎的C++應該還需要看看以下這些:
1、把C++當成一門新的語言學習(和C沒啥關係!)。2、看《Thinking In C++》,不要看《C++編程思想》。3、看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因為他們很難而我們自己是初學者所以就不看。4、不要被VC、BCB、BC、MC、TC等辭彙所迷惑–他們都是集成開發環境,而我們要學的是一門語言。
5、不要放過任何一個看上去很簡單的小編程問題——他們往往並不那麼簡單,或者可以引伸出很多知識點。6、會用Visual C++ ,並不說明你會C++。7、學class並不難,template、STL、generic programming也不過如此,難的是長期堅持實踐和不遺餘力的博覽群書。8、如果不是天才的話,想學編程就不要想玩遊戲–你以為你做到了,其實你的C++水平並沒有和你通關的能力一起變高–其實可以時刻記住:學C++是為了編遊戲的。9、看Visual C++的書,是學不了C++語言的。10、浮躁的人容易說:XX語言不行了,應該學YY;——是你自己不行了吧!?11、浮躁的人容易問:我到底該學什麼;——別問,學就對了;13、浮躁的人容易說:我要中文版!我英文不行!——不行?學呀!14、浮躁的人容易問:XX和YY哪個好;——告訴你吧,都好——只要你學就行。15、浮躁的人分兩種:a)只觀望而不學的人;b)只學而不堅持的人。
16、把時髦的技術掛在嘴邊,還不如把過時的技術記在心裡。17、C++不僅僅是支持面向對象的程序設計語言。18、學習編程最好的方法之一就是閱讀源代碼。19、在任何時刻都不要認為自己手中的書已經足夠了。20、請閱讀《The Standard C++ Bible》(中文版:標準C++寶典),掌握C++標準。21、看得懂的書,請仔細看;看不懂的書,請硬著頭皮看。22、別指望看第一遍書就能記住和掌握什麼–請看第二遍、第三遍。23、請看《Effective C++》和《More Effective C++》以及《Exceptional C++》。24、不要停留在集成開發環境的搖籃上,要學會控制集成開發環境,還要學會用命令行方式處理程序。25、和別人一起討論有意義的C++知識點,而不是爭吵XX行不行或者YY與ZZ哪個好。
26、請看《程序設計實踐》,並嚴格的按照其要求去做。27、不要因為C和C++中有一些語法和關鍵字看上去相同,就認為它們的意義和作用完全一樣。28、C++絕不是所謂的C的「擴充」–如果C++一開始就起名叫Z語言,你一定不會把C和Z語言聯繫得那麼緊密。29、請不要認為學過XX語言再改學C++會有什麼問題–你只不過又在學一門全新的語言而已。30、讀完了《Inside The C++ Object Model》以後再來認定自己是不是已經學會了C++。31、學習編程的秘訣是:編程,編程,再編程。32、請留意下列書籍:《C++面向對象高效編程(C++ Effective Object-Oriented Software Construction)》、《面向對象軟體構造(Object-Oriented Software Construction)》、《設計模式(Design Patterns)》、《The Art of Computer Programming》。33、記住:面向對象技術不只是C++專有的。34、請把書上的程序例子親手輸入到電腦上實踐,即使配套光碟中有源代碼。35、把在書中看到的有意義的例子擴充。
36、請重視C++中的異常處理技術,並將其切實的運用到自己的程序中。37、經常回顧自己以前寫過的程序,並嘗試重寫,把自己學到的新知識運用進去。38、不要漏掉書中任何一個練習題–請全部做完並記錄下解題思路。39、C++語言和C++的集成開發環境要同時學習和掌握。40、既然決定了學C++,就請堅持學下去,因為學習程序設計語言的目的是掌握程序設計技術,而程序設計技術是跨語言的。41、就讓C++語言的各種平台和開發環境去激烈的競爭吧,我們要以學習C++語言本身為主。42、當你寫C++程序寫到一半卻發現自己用的方法很拙劣時,請不要馬上停手,請儘快將餘下的部分粗略的完成以保證這個設計的完整性,然後分析自己的錯誤並重新設計和編寫(參見43)。43、別心急,設計C++的class確實不容易;自己程序中的class和自己的class設計水平是在不斷的編程實踐中完善和發展的。44、絕不要因為程序「很小」就不遵循某些你不熟練的規則–好習慣是培養出來的,而不是一次記住的。45、每學到一個C++難點的時候,嘗試著對別人講解這個知識點並讓他理解–你能講清楚才說明你真的理解了。
46、記錄下在和別人交流時發現的自己忽視或不理解的知識點。47、請不斷的對自己寫的程序提出更高的要求,哪怕你的程序版本號會變成Version 100.XX。48、保存好你寫過的所有的程序–那是你最好的積累之一。49、請不要做浮躁的人。50、熱愛C++!要求就是,能不玩技巧的寫出c++程序
瀉藥,我個人認為一個基本水平的C++程序員應該達到層級一,具體分層如下(按照推薦書單列表來),樓主勉強達到層級三的水平層級一:語法/語意(C++)
[Lippman2000] Essential C++
Essential C++,by Stanley B. Lippman Addison Wesley Longman 2000,276 pages
Essential C++ 中文版 ,侯俊傑 譯,282頁 Desc: 這本書概要性的介紹了C++核心的東西,但講得較淺顯,適合剛入門的人閱讀。[Andrew Koeing Barbara MOO] Accelerated C++
Accelerated c++, Andrew Koeing Barbara MOO, Addison Wesley, 2000 Desc: 這本書相當不錯,講解的C++編程的實踐東西。也相當適合預鞏固C++語法知識的人閱讀。[Eckel2000] Thinking in C++
Thinking in C++ 2/e Bruce Eckel 2000 1470 pages Prentice Hall C++ 編程思想,劉宗田等 譯,420頁[Lippman98] C++Primer
C++ Primer,3rd Editoin,by Stanley Lippman and Josee Lajoie
Addison Wesley Longman,1998 1237 pages C++ Primer 中文版,侯俊傑 譯,1999,1237頁[Struostrup2000] The C++ Programming Language
The C++ Programming Language,Special Editoin,by Bjarne Stroustrup Addison Wesley Longman,2000,1017 pages[ANSI C++] C++規格書 1998.9.1 PDF格式
ANSI C++ 1996 Draft層級二:專家經驗(C++/OOP)[Meyers96] More Effective C++
More Effective C++, by Scott Meyers,Addison Wesley,1996,318pages More Effective C++中文版,侯俊傑,培生 2000. 318頁[Meyers98] Effective C++
Effective C++, Second Edition,by Scott Meyers,Addison Wesley Longman,1998.256pages Effective C++ 2/e 中文版,侯俊傑,培生 2000.256頁 Effective C++, Third Edition, by Scott Meyers, Addison Wesley Longman.[Sutter99] Exceptional C++
Exceptional C++,by Herb Sutter,Addison Wesley Longman,2000.208pages Exceptional C++中文版,侯俊傑,培生 2000.248頁[Sutter2001]More Exceptional C++
More Exceptional C++ by Herb Sutter, Addison Wesley Longman, 2001.[Sutter2004]Exception C++ Style
Exception C++ Style by Herb Sutter, Addison Wesley Longman, 2004.層級三:底層機制(C++ Object Model)[Ellis90] The Annotated C++ Reference Manual
The Annotated C++ Reference Manual,by Margaret A.Ellis and Bjarne Stroustrup Addison Wesley Longman,1990,447 pages.[Lippman96] Inside the C++ Object Model
Inside the C++ Object Model,by Stanley Lippman,Addison Wesley Longman,1996,280pages 深度探索C++物件模型,侯俊傑 譯 層級四:設計觀念的復用(C++/Patterns)[Gamma95] Design Patterns:Elements of Reusable Object Oriented Software,
by Erich Gamma,Richard Helm,Ralph Johnson,and John Vlissides,Addison Wesley,1995.395pages 設計模式,李英軍等譯,機械工業出版社,2000.254頁[Alex2001]Modern C++ Design: Generic Programming and Design Patterns Applied
by Andrei Alexandrescu,Addison-Wesley,2001,352PaperGenericity/STL系列(與層級二同步):第一個境界是使用STL:
[Josuttis99]:The C++ Standard Library -A Tutorial and Reference,by Nicolai M.Josuttis, Addison Wesley 1999.799pages第二個境界是了解泛型技術的內涵與STL的學理:
[Austern98]:Generic Programming and the STL -Using and Extending the C++ Standard Template library,by Matthew H.Austern,Addison Wesley 1998.548page第三個境界是擴充STL:
[Stepanov2001]:C++ Standard Template Library by P.J.Plauger,Alexander A.Stepanov, Meng Lee,David R.Musser,Prentice Hall 2001 其他書目:- Large-scale C++ software Design, John Lako, Addison Wesley, 1996
- Effective STL, Scott Meyers, Addison Wesley, 1995
- C++ FAQs, 2nd, Marshall Cline, Greg Lomow, Mike Girou, Addison Wesley, 1998
- C++ Gotchas, Stephen Dewhurst, Addison Wesley, 2002
- C++ templates, the complete Guide, Daveed Vandevoorde Nicolar M.Josuttis, Addison Wesley, 2002
- Standard C++ iostreams and Locals, Angelika Langer Klaus Kreft, Addison Wesley, 2000
- Design Evolution of C++, BS, Addison Wesley, 1994
- Modern C++ Design, Andrie Alexandrescu, Addison Wesley, 2001
- Generative Programming, Krzysztof Czarnecki Ulrich Eisencecker, Addison Wesley, 2000 10.Pattern-oriented software architecture, Vol1:A system of patterns, Frank Buschmann, 1996
- STL 源碼剖析,侯傑
- C++ Coding Standards 101 Rules Guidelines, Andrie Alexandrescu Herb Sutter, Addison Wesley, 2005
我覺得我就是個基本水平的c++程序員,不過不知道題主為什麼會想問這個問題。能用c++的庫寫代碼,寫完的代碼能跑起來用,了解基本的c++編碼原則不要犯禁忌,能debug c++程序,最好能關注一下c++的標準發展。嗯,這是一個中規中矩的回答
在一個百萬級代碼的商業軟體中,貢獻個人代碼12w行,基本是入門且具有建立模型的能力了。答主的切身經歷。
第一次回答問題。希望能把自己的想法表達出來。
個人認為,一名程序員首先要具備計算機基礎理論知識,例如數據結構、操作系統原理、編譯原理等等。掌握一兩門軟體開發語言,如c++、java。包括常用語法、開發、調試工具。
優秀程序員一般具有這些特徵:
1、善於學習和分析,能閱讀官方文檔和源碼
2、邏輯思維好,代碼流程清晰
3、具有溝通能力,能聽會說
4、具備解決複雜疑難問題的決心和毅力
5、 善於總結對比,能從多個解決方案中找到當時最佳解決方案
我把程序員的「開發設計能力」這樣的分級:
初級:能很好完成一個函數、幾個函數或一個簡單類的開發,流程清晰,符合編碼規範
工程師:能很好完成一個組件的開發,組件可以直接復用
高級工程師:能負責一個模塊的開發,按模塊交付
組長:能負責單個子系統開發。
技術總監:能負責複雜系統開發
首席架構師:。。。
掌握基本語法不去跳常見的坑熟悉數據結構,理解常用方法和數據結構的實現方式和性能以及使用場景懂得什麼是好的設計和模式,並且用之具備極好的代碼閱讀能力和重構能力擅長數據結構,擅長控制和設計數據流和控制流最後是善假於物的能力。
推薦閱讀:
※C++11中用{}初始化,有等於號和沒等於號的區別是什麼?
※聲明多個指針時,為什麼實際只有第一個是指針?
※cpp 如何 debug memory leak?
※C++中類的構造函數,成員變數是在初始化列表初始化還是在函數體中進行賦值?
※cout << sizeof(vector<int>);輸出是32,為什麼?