典型的 C++ 程序员成长经历
From:http://blog.csdn.net/breakerzy/article/details/7399872
一個(gè)典型的 C++ 程序員成長經(jīng)歷:
1.? 完整的學(xué)一遍 C++ 所有語言特性,典型書籍 "The C++ Programming Language" Part1, Part2, "C++ Primer"
??? 感覺 C++ 像大雜燴(多編程范型),各種精妙的語法特性 (friend, virtual/RTTI, const/mutable, exception, template),太多精妙的東西容易導(dǎo)致記憶瑣碎化,學(xué)了又忘了,尤其是那些很少用的部分
??? 實(shí)踐:編寫一些帶 class 和 virtual 字眼的所謂的 C++ 程序
2.? 樹立 C++ 的規(guī)則,明確在 C++ 世界“合法的并不一定是合理的”,典型書籍 Effective C++ 系列
??? 有些東西可用 C++ 寫,但一般情況下并不合理,如 protected 成員數(shù)據(jù), 覆蓋 non-virtual 成員
??? 實(shí)踐:發(fā)現(xiàn) C++ 有強(qiáng)烈的語義約束,和次語言 (sub-language) 范疇,開始寫一些規(guī)矩的代碼
3.1 為了使上述的約束更加形式化,開始使用設(shè)計(jì)模式,典型書籍 "The C++ Programming Language" Part4, "Design Patterns"
??? 實(shí)踐:教條的套模式,與人協(xié)作,編寫真實(shí)規(guī)模的程序
??? 開始想:有時(shí)傳統(tǒng)的設(shè)計(jì)模式對(duì) C++ 很難看 (OO),有沒有一種原生化的 C++ 模式實(shí)現(xiàn)思路(以便利用 C++ 的高效性),開始對(duì)靜態(tài)類型系統(tǒng)和模板推導(dǎo)著迷 (GP)
3.2 為了開發(fā)快捷,開始使用標(biāo)準(zhǔn)庫,典型書籍 "The C++ Programming Language" Part3, "The C++ Standard Library", "Effective STL"
??? 光用標(biāo)準(zhǔn)庫是不能滿足真正的 C++ 程序員的好奇心:auto_ptr, iostream 這些精妙的東西是怎樣實(shí)現(xiàn)的?string 的開銷究竟有多大?functional/alogrithm, iterator, container 這三者是怎樣分離的?
??? 于是開始閱讀某個(gè)標(biāo)準(zhǔn)庫實(shí)現(xiàn)(典型的是 HP-SGI 的實(shí)現(xiàn),但建議 Windows coder 讀 MSVC 的),并嘗試自己的等價(jià)實(shí)現(xiàn),雖然可能只是標(biāo)準(zhǔn)庫的一部分功能。這里一個(gè)很大的驅(qū)動(dòng)力是重視 C++ 的高效性
??? 至此,已經(jīng)知道如何在 raw/smart pointer, char*/string, static/dynamic bind, array/STL container 之間抉擇
??? 實(shí)踐:編寫可穩(wěn)定工作的程序,重視模塊的復(fù)用性和擴(kuò)展性,并理解將書本模式(學(xué)院派)實(shí)化為優(yōu)質(zhì)的 C++ 代碼之間的鴻溝
4.? 插曲:3.1 和 3.2 過程會(huì)交替重疊進(jìn)行,并導(dǎo)致重學(xué) template C++ 這個(gè)次語言,典型書籍 "C++ Templates: The Complete Guide"
5.1 玩轉(zhuǎn) template C++ 和 GP,發(fā)現(xiàn)它是超強(qiáng)的代碼生成器,和模式塑型器,典型書籍 "Modern C++ Design"
??? 開始進(jìn)入一種偏執(zhí)狂式的 GP 和模式應(yīng)用狀態(tài):
??? 1. 把所有的實(shí)體都對(duì)象化, wrapper hell
??? 2. 把所有的概念都抽象化, abstract class/factory
??? 3. 把所有的行為都策略化, 動(dòng)態(tài)的: strategy, 靜態(tài)的: traits, policy
??? 4. 把所有的實(shí)現(xiàn)都向標(biāo)準(zhǔn)庫靠攏, Think in STL: every IO is iostream, every algorithm uses iterator, every container is type-safed and nonintrusive with specialization for optimization
??? 成也蕭何敗蕭何:炫技和實(shí)用只在一念之間
??? 至此,幾乎每個(gè) C++ 程序員手上都有自己的一個(gè) semi-STL 的私人庫,那是多年的積累
??? 實(shí)踐:編寫工業(yè)強(qiáng)度的 C++ 程序,你的一部分代碼(庫)可能以開源或閉源的形式供他人使用
5.2 開始使用一個(gè) Think in STL 的叫做 Boost 的東西,于是你對(duì) Boost 做了和上面 STL 同樣的事,典型書籍 "Beyond the C++ Standard Library", "Boost Docs", "Boost 程序庫完全開發(fā)指南"
??? 也許還對(duì) C++11 感興趣,現(xiàn)在可用即 TR1,典型書籍 "The C++ Standard Library Extensions"
??? 實(shí)踐:以較高的效率編寫工業(yè)強(qiáng)度的 C++ 程序
5.1 和 5.2 過程會(huì)交替重疊進(jìn)行
6.? 過度的玩 template C++ 將會(huì)導(dǎo)致元編程,典型書籍 "C++ Template Metaprogramming"
??? 盡管它很炫耀,但生產(chǎn)環(huán)境中卻很少用
????補(bǔ)充:既然認(rèn)為 TMP 是 turing-complete 的,并且秉持 handy coding 和 compiling is running 的理念,實(shí)際上你是需要一個(gè)動(dòng)態(tài)語言(把 C++ 編譯器當(dāng)解釋器用,而且還不能調(diào)試)。再將范圍縮小:從目前 C++ 社區(qū)工作來看結(jié)合最成熟的 interop?語言是 Python
??? 實(shí)踐:地球很危險(xiǎn),回火星去吧
7.? 一個(gè)高質(zhì)量的 C++ 程序所在的商業(yè)項(xiàng)目失敗了,導(dǎo)致你 陷入沉思
??? 考察失敗的可能原因:
??? 1. 商業(yè)決策,和 C++ 無關(guān)
??? 2. 其實(shí)是部分高質(zhì)量 C++ 程序,高質(zhì)量的模塊由優(yōu)秀程序員編寫,其它人的很爛
?????? 辦法 1. 你很喜歡現(xiàn)在的團(tuán)隊(duì):循循善誘那些新手,讓他們經(jīng)歷你的至少 2-3 階段,短時(shí)間領(lǐng)悟是不可能的,你很清楚
?????? 辦法 2. 離開去找和你水平相當(dāng)?shù)娜?#xff0c;記住:C++ 是真正懂它之人的利器,而是一知半解者的絞繩,還不如完全不會(huì)用 C++
??? 3. 過度的個(gè)人炫技,導(dǎo)致代碼復(fù)雜度過高
?????? 不易理解、難維護(hù)、開發(fā)時(shí)間長
??? 4. 需要一個(gè)度
?????? 1. 實(shí)現(xiàn)復(fù)用性和擴(kuò)展性的難度不宜超過團(tuán)隊(duì)的平均水平
?????? 2. 團(tuán)隊(duì)的平均水平不宜低于同類產(chǎn)品開發(fā)的市場(chǎng)競(jìng)爭者的平均水平
??? 5. 需要一個(gè)目標(biāo)和態(tài)度
?????? 1. 以制作可交付使用,可工作的產(chǎn)品為終極目的
?????? 2. 做最好產(chǎn)品,而不一定用最好的技術(shù)
8.? 返璞歸真
總結(jié)
以上是生活随笔為你收集整理的典型的 C++ 程序员成长经历的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构(王道计算机考研笔记)
- 下一篇: C/C++中预编译#,##,#error