遇高人不可交臂而失之 2003年我加入CSDN,6年之后離開。在2003年之后,我的技術身份就很難界定了。曾經有個朋友稱我為“技術文化人”——不以軟件開發(fā)為生,但整天都在拿軟件開發(fā)來說事,與這個行業(yè)的整體關系可能比任何一個具體的程序員或者架構師都更密切。聽上去像是一種恭維,又好像是暗諷,似乎我是站在戲臺下面帶頭起哄的票友。其實在我看來,我與一線技術人的根本區(qū)別,在于關注的問題不同:他們關心的如何做好軟件,我關心的是如何做好軟件人。更確切的說,我關心的問題是,對于一個普通的程序員來說,如何能夠通過軟件開發(fā)這一職業(yè),實現精神上的自由,獲得專業(yè)上的成就,生活上的安全感,以及對未來的信心。當然,這是很高的目標,在任何社會、任何時代、任何行業(yè),最終都只有一部分人能夠到達這個境界。但是,我確實是曾經把這當成工作的中心,畢竟人的問題才是最根本的問題。所以,我在這篇文章里想講述的,并不是個人的那一單流水賬,而是我自己所見所聞所經歷的一些點滴片段,其目的也是希望能夠就“做好軟件人”這一命題,對自己的感悟做一點概括與很多同齡人相比,我接觸電腦的時間比較晚,一直到1996年,我才開始學習電腦操作。最初我的目標很簡單,就是打打字,畫畫圖,打打游戲,看看影碟。如果說想寫程序的話,主要也就是用來應付一些專業(yè)課,確實沒有在程序設計上深究的想法。但初步學會了一點編程基礎之后,意識到編程并不復雜,我就不能自禁地在編程學習上投入越來越多的時間,并最終決定放棄本專業(yè),轉行軟件開發(fā)。后來我了解到,很多同齡人都跟我有相似的“轉行”經歷。而之所以我們會放棄自己的專業(yè)優(yōu)勢,串行到軟件開發(fā)領域,“興趣”固然是一方面原因,而更重要的原因,恐怕還是當時的時代潮流在九十年代中后期,隨著PC的普及和互聯網的出現,國內高校中計算機和軟件開發(fā)成為顯赫一時的潮流,“電子化”、“信息化”勢不可擋地涌入各個專業(yè)領域,給幾乎所有成熟行業(yè)帶來了巨大的沖擊。社會上對于軟件開發(fā)人才的需求突然增加,待遇也有明顯優(yōu)勢。再加上美國克林頓時期的“高科技浪潮”、“新經濟繁榮”的光環(huán),以及微軟、Borland、金山、江民等等成功傳奇,使得人們普遍對于計算機和軟件行業(yè)的未來產生了過于樂觀的預期。很多人都覺得,只要搞了軟件,成功是唾手可得的在這種大潮流之下,學校里能擺弄電腦,特別是會寫程序的學生,特別受老師的器重,在就業(yè)市場上也有特別的優(yōu)勢,一個個器宇軒昂,盛氣凌人。今天聽起來可以當笑話,但當時我認識的本校和外校的同學當中,至少有三個人信心滿滿地宣稱自己要做中國的比爾蓋茨,其他的人呢?很多只是沒有說出來,心里的夢想是一樣的。在這樣的一種狂熱氛圍之下,一旦你學會寫程序,就不可避免地開始在腦海里編制各式各樣的美夢,在這些美夢的誘惑下,“串行”就成了理所當然如今,我們這一批“串行生”中,有不少已經成為中國IT產業(yè)的骨干,從這個意義上講,似乎實現了當年的愿望。但IT產業(yè)在中國卻縮水為一個競爭激烈、外部估值嚴重下調的普通行業(yè)。曾經的美夢,對絕大部分人來說并沒有成真,反而是當年大家并不熱衷的公務員、國企等去處,靠著似乎取之不盡的公帑和用之不竭的公權成為高通脹時代的幸福特區(qū),這不得不說又是當初沒有想到的。影視視頻制作于是很多人在失意之余,經常“悔不當初”地設想,如果自己當年不轉行,或者如今已經在某機關爬到處長的位置,如何如何不可否認,當年我們這么一批人轉行IT,有很大的跟風投機的成分。對于這個行業(yè)以及其發(fā)展趨勢,缺乏基本的了解和積累,對于自己的發(fā)展也缺少基本的定位和構想,而是看到這個行業(yè)的火爆,就迫不及待地想沖進去分一杯羹。進入這個行業(yè)之后,很多人也繼續(xù)保持投機的心態(tài),今天看到這個火了,就過去撈一把,明天看到那個有上升趨勢,就沖過去占個位置。然而事實已經證明,我們所處的這個時代,是一個外部環(huán)境變動不居,復雜性不斷加劇的時代。Web 2.0泡沫還未散去,云計算和移動又成為顯學,引得無數人趨之若鶩。這還是相對較大的趨勢變化,更具體地看,軟件工程領域里從CMM到敏捷,J2EE領域里從EJB到SSH,編程語言領域中從Java、C到動態(tài)語言再到Erlang、Scala等新生代語言,還有無數飄起來又迸碎的肥皂泡,如果是追風潮,只會無所適從。因此,在這個時代,我們已經不能基于對外部環(huán)境的簡單預期來制訂自己的規(guī)劃,只有打好基礎,積累優(yōu)勢,守時待勢。換句話說,時勢可以“用”,而不可以“恃”。我認識的成功的技術人,或多或少都經歷過一段咬牙堅持的低谷。沖過低谷,就能夠獲得別人無法企及的積累,時機一到,便能勢如破竹從這個意義上說,今天去羨慕公務員,就跟當年投機IT一樣。當年不假思索地認為搞軟件就能發(fā)大財,今天則堅信公權力的揮霍可以長期持續(xù)下去,一樣的盲目,一樣的篤信。但時勢的變化,孰能逆料?我最初迷上編程,也就是用Turbo C 2.0開發(fā)一些DOS下的結構計算和簡單的有限元程序,然后用Visual Basic去寫一些例子水平的Windows程序,照著書上的例子用匯編語言調用DOS的INT 21h中斷。但很快,我就感到不滿,我意識到自己對于編程這個領域知之甚少,完全是盲人瞎馬,無法確定自己是在朝什么方向前進。今天的年輕學生很難理解當時我所有的這種不安全感,深度學習FPGA實現基礎知識0FPGA擊敗GPU和GPP,但處于我當時的環(huán)境,走錯路的風險是現實存在的。身邊沒有什么高手可以請教,更沒有互聯網來開拓視野,我甚至從老師那里得到諸如“DOS將會永遠是主流”、“Visual Basic將取代C語言”、“C++將被Visual C++淘汰”之類的“專業(yè)建議”。這些糟糕的經驗讓我強烈的不安,所以我決定,在進入這個行業(yè)之前,要先對它有一個基本的認識。我的方式,就是大量的、廣泛的閱讀那時候在我出沒的范圍之內,有三四家上規(guī)模的計算機專業(yè)書店。沒課的下午和周末的大塊時間,就成了我的閱讀時間。我?guī)缀趺恐芏家状危驹跁甑慕锹淅铮蛔x就是半天。書店里一排排的書柜,在我看來就是了解軟件開發(fā)這個行業(yè)的一幅幅地圖,不管是有關的、無關的,看得懂的、看不懂的,聽說過的、沒聽說過的,我都不放過。逐漸的,我的大腦里出現了一副軟件開發(fā)領域的全景地圖,盡管今天看來,這幅地圖非常不精確,也并不全面,但是對當時的我來說,已經可以用它來為自己的學習導航了事實上,這段時間的經歷對我正反兩方面的影響都非常深遠,一方面,我由此形成了對軟件開發(fā)領域的全局性的理解,多年之后,這種理解成為我在CSDN工作的主要優(yōu)勢,也使我對于行業(yè)發(fā)展的趨勢形成了自己的觀點;另一方面,過于關注大格局,使我少了埋頭鉆研的恒心,對關鍵領域深入不夠,這又成為我的遺憾我后來在CSDN工作的時候,曾經用“抬頭看路”和“埋頭趕路”這兩個狀態(tài)來描述一個程序員理想的學習周期。“抬頭看路”,就是專門拿出一個時間段,把所關注行業(yè)的大趨勢看清楚,并結合自己的情況,設定目標和計劃。“埋頭趕路”,就是在目標和計劃設定清晰之后的一段時間里,把自己封閉起來,“兩耳不聞窗外事”,不再關心行業(yè)的風云紛擾,而是踏踏實實實現自己的目標,形成特長拿我自己的例子來說,我那時拒絕了計算機專業(yè)課老師主攻Visual Basic的建議,果斷地選擇C語言作為自己的主攻方向,應該說是基于“抬頭看路”所得出的正確決策。影視視頻制作而之后過早的從C過渡到C++,則應該說犯了一個錯誤。C語言的小巧、明快、圓滿和強大,迄今無出其右。由于其語言簡捷,沒什么可學的,學習者的旺盛精力將很快“被迫”轉向真正有價值的東西——算法、數據結構、編譯、圖形、系統編程,等等。我后來認識的很多高手,就是因為早走了幾步,“沒聽說C++”,就在C上下了苦功夫,“埋頭趕路”,反而“因禍得福”練成了很強的動手能力,而能有一方成就。而我過早進入C++之后,在C++的語言里打了幾年的滾,反而對于算法、編譯、匯編語言等基本領域投入不夠,基礎沒有打牢,離開學校之后不得已花了很多倍的精力來彌補。現在回想起來,這就是專注不夠的教訓到后來我在CSDN工作的時候,這方面的體會就更深。那幾年里,為了能夠與各路高手平等交流,我?guī)缀跎娅C了所有重要的技術領域,研究了大多數熱門的技術概念,影視視頻制作閱讀之廣,嘗試之雜,遠遠超過一般軟件開發(fā)者的需要。正因為這種“博”,使我對于各技術派別以及各主要企業(yè)之間的關系和沿革能夠了然于心,從而對于行業(yè)發(fā)展形成自己的見解。這對于我在CSDN的工作來說,固然是一種必要,但是其實身處其中,甘苦自知。俗話說“樣樣皆通,必然樣樣稀松”,廣泛涉獵的代價就是深入不夠,我對此可謂有切身之痛反而是到了現在,我可以在業(yè)余時間以平和的心態(tài)深入研究自己喜歡和擅長的領域,便又可以享受“埋頭趕路”、不聞世間紛擾的充實與快樂了我在初步掌握C語言之后不久,就一步踏進C++。C++復雜的語法、強大多樣的抽象機制、奇妙的各種語言現象,極大地滿足了我的好奇心和求知欲。我買了好幾本書,幾乎是手不釋卷地每日暢游于其中。我不想過多渲染當年學習C++的艱辛,其實對于語言本身,我并沒有花多長時間就形成了一個大概的認識。接下來比拼的是什么!但是C++的真正挑戰(zhàn)在于從“知”到“行”。我最突出的印象是在當年學習計算機圖形學時,老師布置了一個大作業(yè),我信心滿滿地希望用最新掌握的Visual C++在Windows下來完成。那時候我已經熟悉Win32 SDK開發(fā),在窗口過程(wndproc)之中援引定義好的一組類,就可以完成手上的工作。構思起來似乎很容易,但是一下手就發(fā)現腦子非常亂,要設計哪些類,在類與類之間建立什么樣的關系,是不是使用模板,選擇似乎非常多,而似乎每一條路都有優(yōu)勢,也有問題。以我當時的經驗,完全沒有選擇的依據。勉強下手之后,很快遇到了一系列的問題,產生了一連串新想法,進一步動手寫出一堆新的類,就這樣,我在問題的外圍架床疊屋地打轉,幾乎寫了一個小小的Windows圖形類庫,但好像代碼越多,距離要做的具體事情反而越遠,心里越發(fā)虛。到了即將交付任務的日期,我已經積累了一大堆沒有測試過的類代碼,結果可想而知,當最后我終于將任務代碼寫完之后,編譯運行的結果就是程序崩潰。在進行了幾個小時的調試之后,我喪失了耐心和信心,于是推翻全部代碼,轉而用C風格重寫了整個程序。這一次效果非常明顯,僅僅熬了一個通宵就完成了一份高分作業(yè)當時這件事情對我的刺激很大,在一種羞辱的感覺中,我強烈地意識到我的C++水平其實非常低下,于是我就到處尋找能夠提高C++水平的書。很自然的,MFC就被我納入視線之中當時正值MFC處于其頂點,書店里介紹MFC的書不但數量多、篇幅大,而且那行文的派頭也最足,給我的印象,好像MFC就是軟件開發(fā)皇冠上的明珠,掌握了它就可以俯瞰眾生。所以我買了好幾本大部頭的MFC書來啃。老實說,如果抱著知其然而不知其所以然的心態(tài)去學習MFC,其實也并不是那么困難的事情。在微軟強大的開發(fā)環(huán)境支持之下,照著書上的例子多做多練,朱茵二次初戀什么時候上映 二次初戀電影免費資。上手并不難。但對于我來說,越是使用MFC,我就越是不滿。第一,我不明白MFC為什么要這么設計,特別是那個Document/View,到底有何奧妙,第二,我看不懂MFC里那許許多多奇怪的宏,第三,我不知道MFC是怎么跟我熟悉的Windows API環(huán)境結合起來的,或者更具體的說,MFC是怎么能夠把Windows巨大的switch消息處理結構拆接到一個個類的消息處理成員函數的。簡單的說,我完全無法把MFC與我熟悉的C++連接起來,兩者之間似乎存在一個巨大的斷層,讓我覺得MFC完全是另一門語言。我花了不少心思去猜測、分析,并試圖閱讀MFC的源代碼,但是那時候的能力還非常淺薄,完全無法理解MFC的奧秘,也無法彌合那個斷層。很多次,我都不禁灰心地想,也許自己并不是寫程序的料,或者不是搞C++的料,或許應該放棄。我只站在那里翻了五分鐘,就被其中的內容“雷”得頭皮發(fā)炸——這本書不但正中靶心地直接打到我的興趣點上,而且語言之優(yōu)美,內容布局之巧妙,都是前所未見。記得那本書的價格不菲,我當時著實負擔不起,于是找同學借了錢也要把它買下來。在接下來的幾個星期里,我每天捧著這本書反復琢磨到深夜,感覺所獲得的長進,比前面幾年都要多。當時我就想,如果有朝一日,能夠結識這位侯先生就好了幾年之后,這本書的第二版以《深入淺出MFC》為名發(fā)行,暢銷海內,終于有更多的人得以見識這本技術圖書。