標籤:

怎樣才是一個基本水平的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,352Paper

Genericity/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

其他書目:

  1. Large-scale C++ software Design, John Lako, Addison Wesley, 1996
  2. Effective STL, Scott Meyers, Addison Wesley, 1995
  3. C++ FAQs, 2nd, Marshall Cline, Greg Lomow, Mike Girou, Addison Wesley, 1998
  4. C++ Gotchas, Stephen Dewhurst, Addison Wesley, 2002
  5. C++ templates, the complete Guide, Daveed Vandevoorde Nicolar M.Josuttis, Addison Wesley, 2002
  6. Standard C++ iostreams and Locals, Angelika Langer Klaus Kreft, Addison Wesley, 2000
  7. Design Evolution of C++, BS, Addison Wesley, 1994
  8. Modern C++ Design, Andrie Alexandrescu, Addison Wesley, 2001
  9. Generative Programming, Krzysztof Czarnecki Ulrich Eisencecker, Addison Wesley, 2000

    10.Pattern-oriented software architecture, Vol1:A system of patterns, Frank Buschmann, 1996
  10. STL 源碼剖析,侯傑
  11. 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,為什麼?

TAG:編程 | C |