1. 程式人生 > >那些年啊,那些事——一個程序員的奮鬥史 ——20

那些年啊,那些事——一個程序員的奮鬥史 ——20

高級 原來 初學者 很多 手動 http c++ 成了 java

因為產品已經要接近批量產,基本上軟件方面也不會有很大的變動,只要之前的程序不出現致命的BUG,那麽就可以宣告完成。只不過這種沒有經過嚴格測試的程序,僅僅是程序員自己覺得沒問題的流程,完全沒有BUG的可能性又是幾何呢?只不過作為程序員,除非是專業測試的,估計沒有幾個人會整天對著自己寫好的程序在進行測試吧?段伏櫪自然也是如此。段伏櫪曾經問過黃華中接下來還要做什麽,可得到的答復是,暫時沒什麽了,你先看看一些資料吧。只不過這麽一來,上班時間就完全空閑了。

很多職場新人遇到這種情況,都是樂得屁顛屁顛的,上班就會在瀏覽網頁,聊聊QQ,昏昏碌碌過一天。所幸的是,段伏櫪並沒有這樣做,因為之前很久找不到工作的經歷實在給他留下了難以磨滅的傷痛。他無時無刻不在擔心,萬一這家公司炒了他,那麽自己再找工作的時候,是不是也是這麽艱難?或是說,經過這幾個月,自己有了多少長進,能不能作為找工作的資本?回頭一想,發現自己還是很多東西不懂,也就不敢太放縱自己。既然工作上暫時已經沒有安排,那麽為何不自己給自己充電?

這時候,有一本書深深影響了段伏櫪往後的代碼風格。這本書就是北京大學出版社出版的《Windows CE程序設計》。在此之前,段伏櫪所看的關於Windows CE的書籍,全部都是出自於國人之後,無一例外都是采用MFC架構。眾所周知,MFC封裝了Windows API很多東西,感覺上似乎是方便了很多,但實際上對於初學者弄明白程序的架構卻是大大不利。就如同段伏櫪寫的計算器一樣,雖然有很多按鈕,但他也僅僅知道雙擊按鈕的時候會轉到源文件的某個函數,在這個函數裏寫的代碼是響應點擊事件的,僅此而已。至於這個雙擊函數是如何被調用的,則是一無所知。於是便給段伏櫪造成了這麽一個假象:編寫Windows窗口程序和在學校裏學的C++不同,它可以不按執行流程運行並且能夠很神奇地跳躍執行某些函數。總而言之,學校學的東西似乎和工作上所運用的完全搭不上邊。

可看了《Windows CE程序設計》一書之後,段伏櫪的認識完全被顛覆了。原來Windows桌面程序也和學校裏所學的C++一樣也有入口函數的啊?所不同的是,C++入口函數是main,而Windows程序是WinMain!原來程序沒有像學校所學的C++那樣馬上退出,是因為主線程有個消息提取的循環函數啊!原來按下按鈕時系統會發送一個WM_LBUTTONDOWN消息,放起來時又有一個WM_LBUTTONUP,而相應的處理函數就是在這時候被調用的,而不是之前所想象的那樣神奇的跳躍執行啊!原來Windows程序也可以寫得那麽幹凈,可以沒有那麽多莫名其妙又不知所雲的宏定義啊!

可為什麽那麽多人會用MFC呢?這個疑惑不久之後段伏櫪也明白了。MFC封裝了很多東西,在某些方面確實會比較簡單。比如說,創建一個最簡單的窗口程序,MFC只要在新建工程的時候選擇相應的選項,最後點擊完成即可;可如果直接使用Win32 API呢,那麽就必須自己先手動註冊窗口類,然後創建一個窗口,接著自己去處理消息循環,最後根據消息來做相應的動作。如果是從無到有,那麽這一套流程下來,至少也要花上一兩個小時,相對於MFC的隨手點擊,效率確實差了不少。但這樣的好處是,自己能夠明白程序究竟做了什麽,而不像用MFC那樣糊裏糊塗。至少可以讓程序員感覺到,這一切都是可控的。

其實對於剛入門的初學者來說,不應該一上手就去用MFC,或是C#之類的語言。雖然說這些高級的東西能夠大大減輕工作壓力,加快工作效率,但對於程序員個體來說,又得到了什麽,又學到了什麽?這些高級玩意,不是給初學者用的,而是為高手準備的。因為對於高手而言,他們已經知道了很多東西,已經沒有任何必要從一個框架一門語言中去學到什麽,而只需要拿著這個工具去解決問題即可。而反觀菜鳥,如果要提升技術,那麽背後的那些東西肯定是需要知道的,可偏偏類似於C#的這種高級語言把這些都完美封裝了,所以很多一開始就上手C#的程序員,很多年過去了,也做了不少東西,也解決了不少難題,但對於背後的為什麽可以這麽做,卻還是不知其所以然。因此經常可以看到一個用C++做了五六年,然後轉到C#做個一兩年,在某些新技術方面會比一開始就用C#,並且用了八九年的工程師的領悟性還強。

只可惜現實是殘酷的。雖然對於程序員來說最好的途徑確實是從最基礎的東西開始,但往往不具備這樣的條件,因為對於公司來說,個人能學到什麽東西並不是那麽重要,最重要的是什麽時候能夠完成這個任務。如果公司需要做一個C/S的玩意,負責人肯定不會對程序員說:你先將操作系統的原理搞熟悉,然後再把這網絡協議給弄明白,當然這虛擬機的原理也搞清楚,最後再給我把這任務完成。估計要真把這些東西給弄明白,少說也要幾年時間,公司可以等嗎?客戶可以等嗎?所以這樣的情形之下,負責人肯定會這麽說:我們做的這個C/S玩意,你們看看需求,看看是用JAVA還是C#快,我這周就要出個樣本程序!

要不要先將這基礎學好,再去找工作?這個更不現實了。人所要解決的,首要是溫飽問題,如果還餓著肚子,談何來的理想?那麽是不是初學者註定就這麽昏昏碌碌下去?其實並不盡然。因為在工作之前,其實有一段時間,剛好可以將這基礎打好,那就是——大學四年!大學的英文是University,諧音為“由你玩四年”,想必這是中國大學最真實的寫照。除了那為數不多的幾所名校以外,大部分的大學都是放羊式,不管你平時幹什麽,不管你是不是真的學到了東西,只要考試及格就給你發畢業證。更為糟糕的是,大學老師水平也是良莠不一,比如第一節課,老師會大言不慚地說:這門課其實我也沒學過,這學期我們就來一起學習!然後上課時,就把課本照著念一遍,匆匆了事。類似的事件,其實不在少數。但這些,並不能作為自己懶惰的理由。其實從另一個角度來說,老師的放任不管未必不是件壞事,至少學業上不會有太多的壓力,自己能夠憑著喜好去學習其它的知識。

只不過段伏櫪明白這道理的時候,已經晚了。自從找了第一份工作之後,每天都要強迫自己去看技術書籍。每每這時侯,段伏櫪總會想:這些東西大學就應該知道的,為什麽大學虛度了如此多的光陰?不過自古沒有後悔藥,與其懊悔過去,不如抓緊現在。所以即使在沒有什麽任務的這段時間裏,段伏櫪也不敢像別的同事那樣每天上上網聊聊QQ,而是抓緊時間,一本一本技術書籍進行專研。

不過這些技術書籍段伏櫪能看懂嗎?其實段伏櫪大部分沒有看懂,但他知道,看了還有希望,不看就只剩下絕望。很多初學者開始看技術書籍的態度是不正確的,拿起一本書,翻幾下,發現不懂,便放下了,心理想著等以後能看懂了再看。其實這是一個偽命題,如果都懂了,那還看這書幹什麽?其實陶潛所說的“好讀書,不求甚解”,其實是非常有道理的。對於一個初學者來說,當讓開始一個從來沒接觸過的東西,他絕對是一片茫然,無從下手,甚至於借助搜索引擎也不知道用什麽關鍵字;而如果以前有看過相關的書籍資料,雖然自己根本就沒記住任何內容,但至少知道在哪裏看過,這時候只要按照印象去搜尋,絕對比盲目搜索更為有效率。

這段時間裏,段伏櫪居然做到了,凡是市面上帶有“Windows CE”字樣的書籍,只要能搞到的,都無一例外地全部看了一遍。只不過這期間,段伏櫪也發現了一些問題。如果作者是外國的,那麽書中基本上都是直接用Win32 API;但如果是國內的作者,毫無例外使用MFC,更為讓人驚異的是,某些書甚至還是大篇幅大篇幅抄襲另外一本的。這難道不算抄襲?結果將兩本書的作者一比較,發現其中其中一本書的編者之一就是另一本書的作者。這也行?坑人吧?至此之後,只要是購買國內作者的書籍,段伏櫪就不會那麽隨意了,都會在網上先看看相關評價,然後才謹慎入手。

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://www.cnblogs.com/captainbed

那些年啊,那些事——一個程序員的奮鬥史 ——20