典型的 C++ 程式員成長經曆

來源:互聯網
上載者:User

原文連結

一個典型的 C++ 程式員成長經曆:

1.  完整的學一遍 C++ 所有語言特性,典型書籍 "The C++ Programming Language" Part1, Part2, "C++ Primer"

    感覺 C++ 像大雜燴(多編程範型),各種精妙的文法特性 (friend, virtual/RTTI, const/mutable, exception, template),太多精妙的東西容易導致記憶瑣碎化,學了又忘了,尤其是那些很少用的部分

    實踐:編寫一些帶 class 和 virtual 字眼的所謂的 C++ 程式

2.  樹立 C++ 的規則,明確在 C++ 世界“合法的並不一定是合理的”,典型書籍 Effective C++ 系列

    有些東西可用 C++ 寫,但一般情況下並不合理,如 protected 成員資料, 覆蓋 non-virtual 成員

    實踐:發現 C++ 有強烈的語義約束,和次語言 (sub-language) 範疇,開始寫一些規矩的代碼

3.1 為了使上述的約束更加形式化,開始使用設計模式,典型書籍 "The C++ Programming Language" Part4, "Design Patterns"

    實踐:教條的套模式,與人協作,編寫真實規模的程式

    開始想:有時傳統的設計模式對 C++ 很難看 (OO),有沒有一種原生化的 C++ 模式實現思路(以便利用 C++ 的高效性),開始對靜態類型系統和模板推導著迷 (GP)

3.2 為了開發快捷,開始使用標準庫,典型書籍 "The C++ Programming Language" Part3, "The C++ Standard Library", "Effective STL"

    光用標準庫是不能滿足真正的 C++ 程式員的好奇心:auto_ptr, iostream 這些精妙的東西是怎樣實現的?string 的開銷究竟有多大?functional/alogrithm, iterator, container 這三者是怎樣分離的?

    於是開始閱讀某個標準庫實現(典型的是 HP-SGI 的實現,但建議 Windows coder 讀 MSVC 的),並嘗試自己的等價實現,雖然可能只是標準庫的一部分功能。這裡一個很大的驅動力是重視 C++ 的高效性

    至此,已經知道如何在 raw/smart pointer, char*/string, static/dynamic bind, array/STL container 之間抉擇

    實踐:編寫可穩定工作的程式,重視模組的複用性和擴充性,並理解將書本模式(學院派)實化為優質的 C++ 代碼之間的鴻溝

4.  插曲:3.1 和 3.2 過程會交替重疊進行,並導致重學 template C++ 這個次語言,典型書籍 "C++ Templates: The Complete Guide"

5.1 玩轉 template C++ 和 GP,發現它是超強的代碼產生器,和模式塑型器,典型書籍 "Modern C++ Design"

    開始進入一種偏執狂式的 GP 和模式應用狀態:
    1. 把所有的實體都對象化, wrapper hell
    2. 把所有的概念都抽象化, abstract class/factory
    3. 把所有的行為都策略化, 動態: strategy, 靜態: traits, policy
    4. 把所有的實現都向標準庫靠攏, Think in STL: every IO is iostream, every algorithm uses iterator, every container is type-safed and nonintrusive with specialization for optimization

    成也蕭何敗蕭何:炫技和實用只在一念之間

    至此,幾乎每個 C++ 程式員手上都有自己的一個 semi-STL 的私人庫,那是多年的積累

    實踐:編寫工業強度的 C++ 程式,你的一部分代碼(庫)可能以開源或閉源的形式供他人使用

5.2 開始使用一個 Think in STL 的叫做 Boost 的東西,於是你對 Boost 做了和上面 STL 同樣的事,典型書籍 "Beyond the C++ Standard Library", "Boost Docs", "Boost 程式庫完全開發指南"

    也許還對 C++11 感興趣,現在可用即 TR1,典型書籍 "The C++ Standard Library Extensions"

    實踐:以較高的效率編寫工業強度的 C++ 程式

5.1 和 5.2 過程會交替重疊進行

6.  過度的玩 template C++ 將會導致元編程,典型書籍 "C++ Template Metaprogramming"

    儘管它很炫耀,但生產環境中卻很少用

    補充:既然認為 TMP 是 turing-complete 的,並且秉持 handy coding 和 compiling is running 的理念,實際上你是需要一個動態語言(把 C++ 編譯器當解譯器用,而且還不能調試)。再將範圍縮小:從目前 C++ 社區工作來看結合最成熟的 interop 語言是 Python

    實踐:地球很危險,回火星去吧


7.  一個高品質的 C++ 程式所在的商業項目失敗了,導致你陷入沉思

    考察失敗的可能原因:
    1. 商業決策,和 C++ 無關
    2. 其實是部分高品質 C++ 程式,高品質的模組由優秀程式員編寫,其它人的很爛
       辦法 1. 你很喜歡現在的團隊:循循善誘那些新手,讓他們經曆你的至少 2-3 階段,短時間領悟是不可能的,你很清楚
       辦法 2. 離開去找和你水平相當的人,記住:C++ 是真正懂它之人的利器,而是一知半解者的絞繩,還不如完全不會用 C++
    3. 過度的個人炫技,導致代碼複雜度過高
       不易理解、難維護、開發時間長
    4. 需要一個度
       1. 實現複用性和擴充性的難度不宜超過團隊的平均水平
       2. 團隊的平均水平不宜低於同類產品開發的市場競爭者的平均水平
    5. 需要一個目標和態度
       1. 以製作可交付使用,可工作的產品為終極目的
       2. 做最好產品,而不一定用最好的技術

8.  返璞歸真

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.