?? ?因為產品已經要接近批量產,基本上軟件方面也不會有很大的變動,只要之前的程序不出現致命的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,更為讓人驚異的是,某些書甚至還是大篇幅大篇幅抄襲另外一本的。這難道不算抄襲?結果將兩本書的作者一比較,發現其中其中一本書的編者之一就是另一本書的作者。這也行?坑人吧?至此之后,只要是購買國內作者的書籍,段伏櫪就不會那么隨意了,都會在網上先看看相關評價,然后才謹慎入手。
- 前言
- 《那些年啊,那些事——一個程序員的奮斗史》——01
- 《那些年啊,那些事——一個程序員的奮斗史》——02
- 《那些年啊,那些事——一個程序員的奮斗史》——03
- 《那些年啊,那些事——一個程序員的奮斗史》——04
- 《那些年啊,那些事——一個程序員的奮斗史》——05
- 《那些年啊,那些事——一個程序員的奮斗史》——06
- 《那些年啊,那些事——一個程序員的奮斗史》——07
- 《那些年啊,那些事——一個程序員的奮斗史》——08
- 《那些年啊,那些事——一個程序員的奮斗史》——09
- 《那些年啊,那些事——一個程序員的奮斗史》——10
- 《那些年啊,那些事——一個程序員的奮斗史》——11
- 《那些年啊,那些事——一個程序員的奮斗史》——12
- 《那些年啊,那些事——一個程序員的奮斗史》——13
- 《那些年啊,那些事——一個程序員的奮斗史》——14
- 《那些年啊,那些事——一個程序員的奮斗史》——15
- 《那些年啊,那些事——一個程序員的奮斗史》——16
- 《那些年啊,那些事——一個程序員的奮斗史》——17
- 《那些年啊,那些事——一個程序員的奮斗史》——18
- 《那些年啊,那些事——一個程序員的奮斗史》——19
- 《那些年啊,那些事——一個程序員的奮斗史》——20
- 《那些年啊,那些事——一個程序員的奮斗史》——21
- 《那些年啊,那些事——一個程序員的奮斗史》——22
- 《那些年啊,那些事——一個程序員的奮斗史》——23
- 《那些年啊,那些事——一個程序員的奮斗史》——24
- 《那些年啊,那些事——一個程序員的奮斗史》——25
- 《那些年啊,那些事——一個程序員的奮斗史》——26
- 《那些年啊,那些事——一個程序員的奮斗史》——27
- 《那些年啊,那些事——一個程序員的奮斗史》——28
- 《那些年啊,那些事——一個程序員的奮斗史》——29
- 《那些年啊,那些事——一個程序員的奮斗史》——30
- 《那些年啊,那些事——一個程序員的奮斗史》——31
- 《那些年啊,那些事——一個程序員的奮斗史》——32
- 《那些年啊,那些事——一個程序員的奮斗史》——33
- 《那些年啊,那些事——一個程序員的奮斗史》——34
- 《那些年啊,那些事——一個程序員的奮斗史》——35
- 《那些年啊,那些事——一個程序員的奮斗史》——36
- 《那些年啊,那些事——一個程序員的奮斗史》——37
- 《那些年啊,那些事——一個程序員的奮斗史》——38
- 《那些年啊,那些事——一個程序員的奮斗史》——39
- 《那些年啊,那些事——一個程序員的奮斗史》——40
- 《那些年啊,那些事——一個程序員的奮斗史》——41
- 《那些年啊,那些事——一個程序員的奮斗史》——42
- 《那些年啊,那些事——一個程序員的奮斗史》——43
- 《那些年啊,那些事——一個程序員的奮斗史》——44
- 《那些年啊,那些事——一個程序員的奮斗史》——45
- 《那些年啊,那些事——一個程序員的奮斗史》——46
- 《那些年啊,那些事——一個程序員的奮斗史》——47
- 《那些年啊,那些事——一個程序員的奮斗史》——48
- 《那些年啊,那些事——一個程序員的奮斗史》——49
- 《那些年啊,那些事——一個程序員的奮斗史》——50
- 《那些年啊,那些事——一個程序員的奮斗史》——51
- 《那些年啊,那些事——一個程序員的奮斗史》——52
- 《那些年啊,那些事——一個程序員的奮斗史》——53
- 《那些年啊,那些事——一個程序員的奮斗史》——54
- 《那些年啊,那些事——一個程序員的奮斗史》——55
- 《那些年啊,那些事——一個程序員的奮斗史》——56
- 《那些年啊,那些事——一個程序員的奮斗史》——57
- 《那些年啊,那些事——一個程序員的奮斗史》——58
- 《那些年啊,那些事——一個程序員的奮斗史》——59
- 《那些年啊,那些事——一個程序員的奮斗史》——60
- 《那些年啊,那些事——一個程序員的奮斗史》——61
- 《那些年啊,那些事——一個程序員的奮斗史》——62
- 《那些年啊,那些事——一個程序員的奮斗史》——63
- 《那些年啊,那些事——一個程序員的奮斗史》——64
- 《那些年啊,那些事——一個程序員的奮斗史》——65
- 《那些年啊,那些事——一個程序員的奮斗史》——66
- 《那些年啊,那些事——一個程序員的奮斗史》——67
- 《那些年啊,那些事——一個程序員的奮斗史》——68
- 《那些年啊,那些事——一個程序員的奮斗史》——69
- 《那些年啊,那些事——一個程序員的奮斗史》——70
- 《那些年啊,那些事——一個程序員的奮斗史》——71
- 《那些年啊,那些事——一個程序員的奮斗史》——72
- 《那些年啊,那些事——一個程序員的奮斗史》——73
- 《那些年啊,那些事——一個程序員的奮斗史》——74
- 《那些年啊,那些事——一個程序員的奮斗史》——75
- 《那些年啊,那些事——一個程序員的奮斗史》——76
- 《那些年啊,那些事——一個程序員的奮斗史》——77
- 《那些年啊,那些事——一個程序員的奮斗史》——78
- 《那些年啊,那些事——一個程序員的奮斗史》——79
- 《那些年啊,那些事——一個程序員的奮斗史》——80
- 《那些年啊,那些事——一個程序員的奮斗史》——81
- 《那些年啊,那些事——一個程序員的奮斗史》——82
- 《那些年啊,那些事——一個程序員的奮斗史》——83
- 《那些年啊,那些事——一個程序員的奮斗史》——84
- 《那些年啊,那些事——一個程序員的奮斗史》——85
- 《那些年啊,那些事——一個程序員的奮斗史》——86
- 《那些年啊,那些事——一個程序員的奮斗史》——87
- 《那些年啊,那些事——一個程序員的奮斗史》——88
- 《那些年啊,那些事——一個程序員的奮斗史》——89
- 《那些年啊,那些事——一個程序員的奮斗史》——90
- 《那些年啊,那些事——一個程序員的奮斗史》——91
- 《那些年啊,那些事——一個程序員的奮斗史》——92
- 《那些年啊,那些事——一個程序員的奮斗史》——93
- 《那些年啊,那些事——一個程序員的奮斗史》——94
- 《那些年啊,那些事——一個程序員的奮斗史》——95
- 《那些年啊,那些事——一個程序員的奮斗史》——96
- 《那些年啊,那些事——一個程序員的奮斗史》——97
- 《那些年啊,那些事——一個程序員的奮斗史》——98
- 《那些年啊,那些事——一個程序員的奮斗史》——99
- 《那些年啊,那些事——一個程序員的奮斗史》——100
- 《那些年啊,那些事——一個程序員的奮斗史》——101
- 《那些年啊,那些事——一個程序員的奮斗史》——102
- 《那些年啊,那些事——一個程序員的奮斗史》——103
- 《那些年啊,那些事——一個程序員的奮斗史》——104
- 《那些年啊,那些事——一個程序員的奮斗史》——105
- 《那些年啊,那些事——一個程序員的奮斗史》——106
- 《那些年啊,那些事——一個程序員的奮斗史》——107
- 《那些年啊,那些事——一個程序員的奮斗史》——108
- 《那些年啊,那些事——一個程序員的奮斗史》——109
- 《那些年啊,那些事——一個程序員的奮斗史》——110
- 《那些年啊,那些事——一個程序員的奮斗史》——111
- 《那些年啊,那些事——一個程序員的奮斗史》——112
- 《那些年啊,那些事——一個程序員的奮斗史》——113
- 《那些年啊,那些事——一個程序員的奮斗史》——114
- 《那些年啊,那些事——一個程序員的奮斗史》——115
- 《那些年啊,那些事——一個程序員的奮斗史》——116
- 《那些年啊,那些事——一個程序員的奮斗史》——117
- 《那些年啊,那些事——一個程序員的奮斗史》——118
- 《那些年啊,那些事——一個程序員的奮斗史》——119
- 《那些年啊,那些事——一個程序員的奮斗史》——120
- 《那些年啊,那些事——一個程序員的奮斗史》——121
- 《那些年啊,那些事——一個程序員的奮斗史》——122
- 《那些年啊,那些事——一個程序員的奮斗史》——123
- 《那些年啊,那些事——一個程序員的奮斗史》——124
- 《那些年啊,那些事——一個程序員的奮斗史》——125
- 《那些年啊,那些事——一個程序員的奮斗史》——126
- 《那些年啊,那些事——一個程序員的奮斗史》——127
- 《那些年啊,那些事——一個程序員的奮斗史》——128 (終章)