2.編程生涯
讀研兩年半的時(shí)間,我四處打工,這兩年半我至少在七八家公司做過(guò),編了十幾萬(wàn)行代碼,為自己賺了一臺(tái)電腦,兩部手機(jī)(丟了一部),還有讀研期間的所有費(fèi)用,實(shí)現(xiàn)了我的目標(biāo):沒(méi)向家里要一分錢。
我水平不高,但在打工過(guò)程中,發(fā)現(xiàn)許多中國(guó)軟件公司的水平更菜!
2000年暑假,我參加一個(gè)商品軟件的開發(fā),搬到了北大燕北園的一個(gè)宿舍,在那兒搞封閉式開發(fā)。在這個(gè)項(xiàng)目采用vb6開發(fā),主力程序員除我之處,還有一個(gè)華北電力大學(xué)的研究生。大家都沒(méi)開發(fā)商品軟件的經(jīng)驗(yàn),沒(méi)經(jīng)過(guò)正式的設(shè)計(jì),就匆忙編碼了。我曾經(jīng)想采用分層的系統(tǒng)架構(gòu),但遭到另一位程序員的反對(duì),爭(zhēng)吵沒(méi)有結(jié)果,老板也不能做決定,結(jié)果各行其是。現(xiàn)在看起來(lái),那時(shí)真是太菜了,任何一本軟件工程書都會(huì)指出這種做法是不對(duì)的。
我們直接就熱火朝天的干了起來(lái),那位華北電力大學(xué)的老兄,真讓我佩服,他可以在一個(gè)sub過(guò)程中寫上2000行代碼!我覺(jué)得奇怪,為何他能寫這么多的代碼?一看,頓時(shí)我暈倒,他居然將每個(gè)控件的left,top,width等屬性都用代碼來(lái)設(shè)定!想想這樣的程序,調(diào)試時(shí)光單步執(zhí)行就需要按多少次f8鍵!
我們?cè)陔娔X旁邊搭了個(gè)行軍床,每天都是干到早上6點(diǎn)才睡,12點(diǎn)吃中飯,然后又是一個(gè)通宵。當(dāng)時(shí)整個(gè)工程只有一個(gè)類模塊,被我用于封裝訪問(wèn)數(shù)據(jù)庫(kù)的ado數(shù)據(jù)引擎,這是整個(gè)工程中唯一一處用到了最簡(jiǎn)單的面向?qū)ο蠹夹g(shù)的地方,然后,我寫了近十個(gè)bas公用模塊,每個(gè)模塊代碼規(guī)模都有一兩千行,還有十幾個(gè)窗體,每個(gè)窗體中都塞滿了事件驅(qū)動(dòng)的vb代碼,整個(gè)軟件應(yīng)該有10萬(wàn)行代碼,我一個(gè)人在此期間至少就寫了3萬(wàn)多行vb代碼。程序的主處理流程我甚至用ado與dao寫了兩套!
現(xiàn)在想起來(lái),我們當(dāng)時(shí)根本就不知道面向?qū)ο鬄楹挝,更不理解許多對(duì)軟件開發(fā)至關(guān)重要的理論,就憑著一種熱情。在這段痛苦的開發(fā)經(jīng)歷中,我不僅精熟了vb,而且從中學(xué)到了很多,F(xiàn)在再開發(fā)同樣功能的東西。我至少可以砍掉2/3的代碼。怎么學(xué)都不如從失敗中學(xué)得多。
后來(lái)我總結(jié)vb程序員的三個(gè)境界:
。1)所有代碼都只放在窗體文件中的,屬于菜鳥級(jí),他們只會(huì)從面板上拖控件,設(shè)置屬性,然后再給事件編碼
。2)工程中有bas模塊的,屬于中間級(jí),他們已意識(shí)到有大量的代碼是重復(fù)出現(xiàn)的,應(yīng)該將其抽取出來(lái)作為公用模塊
。3)工程中有cls模塊的,屬于高手,他們已掌握了面向?qū)ο蟮乃枷,并能?yīng)用這種思想來(lái)解決實(shí)際問(wèn)題
正是這次開發(fā)經(jīng)歷,促使我反思:到底如何開發(fā)軟件?我個(gè)人可以用vb完成各種各樣的功能,為什么湊在一起就會(huì)那么困難?更正一個(gè)bug為何那么難?為什么一個(gè)看似簡(jiǎn)單的軟件,要拖半年的時(shí)間還看不到結(jié)束的日子?
九月,研究生要開題,我自擬了個(gè)課題:軟件體系結(jié)構(gòu)設(shè)計(jì)。我決心弄明白,好軟件到底是怎么做出來(lái)的。
我放下了vb,開始研究c++,原來(lái)學(xué)過(guò)vc,但沒(méi)學(xué)會(huì),就直接從c++ builder入手。borland公司的vcl類庫(kù)讓我大為嘆服,很快就迷上了它,為此連帶學(xué)了delphi,并參與了一個(gè)delphi項(xiàng)目。給我真正震撼的是《設(shè)計(jì)模式》這本書,看了才知道,原來(lái)好軟件是這么設(shè)計(jì)出來(lái)的!在此,我強(qiáng)烈推薦所有有一定編程經(jīng)驗(yàn)的程序員一定要看這本書!
一邊學(xué)習(xí)理論,一邊可沒(méi)忘記我沒(méi)經(jīng)濟(jì)來(lái)源,于是又四處打工,接一些小項(xiàng)目與小模塊來(lái)賺些生活費(fèi),國(guó)內(nèi)一家橫跨家電與軟件的著名公司是我打工期間去過(guò)的最大的公司。但無(wú)論什么公司,都給我一種感覺(jué)——爛!公司中充滿了對(duì)員工的剝削與不尊重,對(duì)軟件開發(fā)這一事物的錯(cuò)誤認(rèn)識(shí),管理混亂。我沒(méi)機(jī)會(huì)去外企,技術(shù)水平不到,別人不要我但我所見到的軟件公司,我敢說(shuō)沒(méi)一家能做出世界一流的軟件!
我上的研究生課程也讓我失望,整個(gè)就是本科教育的再版。經(jīng)過(guò)高考與考研兩次重大考試,我對(duì)考試已是深惡痛絕,但讀研期間仍要考試,而且是閉卷!我就不知道我去背那些條文對(duì)我的研究與學(xué)習(xí)有何幫助?2000年7月當(dāng)我考完最后一門,終于大松一口氣,我終于擺脫了考試的壓迫,可以在剩余的一年半中真正搜索我渴望已久的軟件技術(shù)了。這年,我29歲。
悲哀嗎?一個(gè)中國(guó)的程序員要到29歲才可以真正自由地學(xué)習(xí)想學(xué)的東西!
我開始研究面向?qū)ο罄碚,看了大量的書,每天都在?shí)驗(yàn)室學(xué)習(xí)到深夜12點(diǎn),天天上網(wǎng),csdn成了我最常去的網(wǎng)站。
隨著我對(duì)軟件技術(shù)的了解越多,就越深刻地感到國(guó)內(nèi)與國(guó)外技術(shù)水平的差異是如此的巨大,巨大得甚至有讓人絕望的感覺(jué)。同時(shí),在北京這個(gè)中國(guó)軟件人才最集中的地方,我也見到了許多牛人,一個(gè)清華的本科學(xué)生,做程序員可以拿到一個(gè)月12000元的工資,一個(gè)北大的計(jì)算機(jī)系研究生,一畢業(yè)就到外企,一個(gè)月一萬(wàn)多收入,每年發(fā)16個(gè)月工資!干了兩年就開了自己的公司。我看到了一個(gè)北方交大的本科生作品,在半年的業(yè)余時(shí)間里,用delphi寫了十幾萬(wàn)行代碼,他甚至在代碼中嵌入?yún)R編,自行編寫數(shù)據(jù)存取引擎讀寫foxpro,速度超快!軟件中有一個(gè)計(jì)算公式解析模塊,他用編譯原理理論居然做了一個(gè)小型的公式解析器,就象c++編譯器檢查c++程序一樣,不僅可以判斷是否公式正確,而且給出的出錯(cuò)信息還相當(dāng)準(zhǔn)確!其基本功之扎實(shí),水平之高讓我望塵莫及!中國(guó)優(yōu)秀的人才真還是不少的!在精英集聚的北京,面對(duì)著博大精深的軟件科學(xué),我深感自身的渺小。
但我畢竟是靠自己奮斗出來(lái)的,我并不自卑,這世界需要牛人,同樣需要大批合格的勞動(dòng)者,我成為不了牛人,但我作一名程序員是合格的。
時(shí)間過(guò)得飛快,一年半根本就不算時(shí)間,馬上就要畢業(yè)了,學(xué)習(xí)的成績(jī)?nèi)绾危缴鐣?huì)上去競(jìng)爭(zhēng)了,讓社會(huì)考場(chǎng)來(lái)決定你是否及格。