1. 程式人生 > >典型的C++程式設計師成長經歷

典型的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.  返璞歸真

相關推薦

典型C++ 程式設計師成長經歷

轉自:http://www.cnblogs.com/wangkangluo1/archive/2012/05/13/2498341.html 一個典型的 C++ 程式設計師成長經歷: 1.  完整的學一遍 C++ 所有語言特性,典型書籍 "The C++ P

典型C++程式設計師成長經歷

1.  完整的學一遍 C++ 所有語言特性,典型書籍 "The C++ Programming Language" Part1, Part2, "C++ Primer"    感覺 C++ 像大雜燴(多程式設計範型),各種精妙的語法特性 (friend, virtual/

在公司的頭兩年 C/C++程式設計師成長之路

IT企業普遍有個特點,“把女人當男人用,把男人當**(此處略去2個字)用。”有句俗話說,“男怕入錯行”,我想這句話其實也同樣適用IT女生。我們可以做個小測試工,就是問自己一百遍“喜歡當程式設計師嗎”,如果你的回答總是肯定的,那麼好的,開始認真學吧;如果發現50多次後面,自

C/C++程式設計師 面試經歷總結

    最近在找工作,遇到了一些面試題,很慚愧的是很多都沒答上來。     現在把一些問題總結一下,算是記錄一下面試的經歷吧。以後有空簡單地回答一下,    同時也歡迎各位同仁解答,共同學習一下吧!   一、嵌入式C語言面試回憶 主觀題:1、在嵌入式系統中,volitate

前端程式設計師成長的記錄及被某IT外包公司套路的經歷

           親身經歷,記錄下來,也敬告各位剛出社會的畢業生們,面試的時候千萬擦亮眼睛。說一下事情的前因後果吧,本人座標深圳,本科畢業三年,兩年多的專職前端開發的經驗。上個月8號從上家公司離職,休息加上看java的學習視訊,大概這樣過了十五天,準備用java,Vue搭一個自己的個人部落格。因為上家公司

【本人禿頂程式設計師】【轉】一個畢業6年的程式設計師工作經歷成長感悟

←←←←←←←←←←←← 我都禿頂了,還不點關注! 【本人禿頂程式設計師】轉自今日頭條:Java高階 原文連結:https://www.toutiao.com/i6611344590853112324/ 把時鐘撥回到2007年的夏天,大學畢業。那時非常迷茫,不知道自己能做什麼,想做什

程式設計師成長需要經歷那幾個階段,都需要掌握哪些內容

對於程式設計師的成長,我們一半可以分為三個大的階段,一是初級(0到3年);二是中級(3到5年);三是高階(5年以上)。這其中不僅僅需要的是時間的錘鍊,還有技術上的提升。 ​ 階段一:初級階段。 這個階段的學習可能是科班出身的學生在本碩博階段完成的,也可能是半路出家的學生線上下IT教育培訓機

一個畢業6年的程式設計師工作經歷成長感悟

把時鐘撥回到2007年的夏天,大學畢業。那時非常迷茫,不知道自己能做什麼,想做什麼,對工作有一種期待和憧憬,只是覺得計算機、網路有關的職位都可以投遞簡歷。 2007年5月12日(歷史驚人的巧合,沒想到6年後的今天寫下了這篇回憶文章),南下廣州,開始找工作。或許,因為運氣好、加上筆試不錯、人也比較

一名C++程式設計師成長之路

  1.不要看到別人的回覆第一句話就說:給個程式碼吧!你應該想想為什麼。當你自己想出來再參考別人的提示,你就知道自己和別人思路的差異。   2.初學者請不要看太多太多的書那會誤人子弟的,先找本系統的學,很多人用了很久都是隻對部分功能熟悉而已,不繫統還是不夠的。  3.看

c#程式設計師成長之路

從上大學開始學的就是C#程式設計,當時不是因為喜歡,而是頭腦發熱不知怎麼的就選了這門語言,現在想來,覺得以前好、自己好像真的是選錯了,不是有那麼一句話嗎?   現在流的淚水和汗水就是當年選科 是腦袋進的水..... 不管怎麼說,既然自己選擇了在苦在累自己也得好好的幹下去啊。

小班同學學習經歷分享(一)遊戲程式設計師成長札記

## 作者資訊 暱稱:目及遠方 課程設計 HumanFramework: https://github.com/cyclons/HumanFramewo ## 正文 大四畢業,心血來潮,閒餘之際,撰文留念。 ## 萌芽 遊戲程式設計師,把這個分成兩塊的話就是,遊戲,程式。 這兩個中,只有一個,遊

[C/C++程式設計師面試寶典] (07)-翻轉句子中單詞的順序

點選此處檢視原文 題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。 例如輸入“I am a student.”,則輸出“student. a am I”。 分析:由於編寫字串相關程式碼能夠反映程式設計師

新入行程式設計師成長的一點思考

最近接觸剛畢業的學生比較多,本科生和研究生都有,總感覺他們現在和剛畢業的自己很像,一個人摸索,別人的建議只是建議,悟性似乎還沒有到那個境界,似乎必須經歷過,才能長大,難道成長有沒有捷徑? 先說說在做Android的幾個學生身上碰到的問題: 1、資料庫操作,db開啟後沒有關閉,cur

C++程式設計師如何選擇就業?跟Java做對比看看

關於C++工程師的就業,單純的說就業資料,你可能會很茫然,我們就拿JAVA做個對比。 在學習C/C++或者想要學習C/C++可以加入我們的學習交流QQ群:835257103,群內有學習資源,大家一起學習交流  據世界權威語言排行榜(TIOBE)的資料顯示,目前c和c++語言已

想做c++程式設計師如何修煉技術?

作為一名想要真正學東西的並從事軟體這行的人,我覺得還是學習C++更有利於自己的成長。一個幹了10年的Java程式設計師和一個幹了兩三年的Java程式設計師相比,並沒有多大優勢。但是一個幹了10年的C++程式設計師和一個幹兩三年C++的程式設計師有天攘之別。 在學習C/C++或者想要學習C/

調查:Java程式設計師最傷心,C++程式設計師最年老

說起我們對程式設計世界現有的刻板印象,你一定聽說過類似於沒有人喜歡用Java編碼或者使用C ++都是老人家,等等這樣的話。為了分析這些刻板印象背後的真相,Trestle Technology的資料工程師寫了一個工具。 不知道你有沒有聽說過微軟的Project Oxford,它的Face API可

c/c++程式設計師發展方向

一、C++伺服器程式設計師(流媒體後臺,遊戲後臺,高效能伺服器後臺)  1.      精通C++,STL,Linux等,熟悉設計模式; 2.      熟練掌握

我的程式設計師成長之路

JAVA這個行業,我也搞了幾年,由於一向懶惰,沒有成為大牛,只是一普通的不能夠在普通的程式設計師,在做JAVA行業以前,我是一名徹徹底底的網路運營人員,那個時候的自己也是溜逛在各大論壇、SNS。做的工作是SEO與網站建設。或許是工作壓力、也或許是薪資待遇吧,總而言之,我已經記不清為什麼轉到了JA

C++程式設計師必須看的書

一、C++: C++ Primer (學習C++的都懂的) 高質量C/C++ (國內C/C++經典書籍) Effective C++ (提高程式碼質量的兩部書) More effective C++ 深入探索C++物件模型 STL原始碼剖析 設計模式: 大話設

C++程式設計師面試常見題目

歡迎大家指正問題  1:請用簡單的語言告訴我C++ 是什麼? 答:C++是在C語言的基礎上開發的一種面向物件程式語言,應用廣泛。C++支援多種程式設計正規化 --面向物件程式設計、泛型程式設計和過程化程式設計。 其程式設計領域眾廣,常用於系統開發,引擎開發等應