金旭亮:一個(gè)普通IT人的十年回顧(下)
下篇:實(shí)踐人生
一、希特勒地堡與CIH病毒
1999年4月,我來到北京參加研究生復(fù)試。復(fù)試完了之后就不回去了,我拿著一張光盤,里面刻著我用VB和Authorware3.5編的一個(gè)Cool3D的教學(xué)軟件,到處參加招聘會(huì),開始了在北京的打工生涯。
說句實(shí)話,我心中真是一點(diǎn)底也沒有。北京人才濟(jì)濟(jì),我一個(gè)三流大學(xué)的畢業(yè)生,又不是計(jì)算機(jī)專業(yè)的,有人要我嗎?
我在北京無依無靠,沒有任何一個(gè)親戚在北京,住成了大問題。北京這地方,錢太不經(jīng)花,生活費(fèi)用太高,我四處尋找便宜的地方住。后來,我在北京化工大學(xué)對(duì)面的招待所中租了個(gè)床位,每晚20元,地下室。這個(gè)招待所的地下室非常大,每天回去的時(shí)候,都要走過長(zhǎng)長(zhǎng)的曲曲折折的通道,加上那昏黃的燈泡,每次我都有走進(jìn)了希特勒地堡的感覺。地下室里潮濕陰暗,不見天日。地下室里人員很雜,什么人都有,永遠(yuǎn)沒有一種安全的感覺,所幸的是我也是個(gè)窮光蛋,光腳的還怕穿鞋的?別人能呆我也能呆,唯一讓我擔(dān)心的是錢,沒錢,在北京連流落街頭都不夠格,立馬被收容去昌平篩沙。呵呵,我沒這種經(jīng)歷,這是當(dāng)時(shí)住一塊的一個(gè)外地要考北京中醫(yī)藥大學(xué)的博士生說的(我倆居然住到了一個(gè)屋里,大家都沒錢,只能擠地下室,只是他老兄晚上打呼,我可真受了不少罪)。
日子一天天過去,袋里的錢一天天少了,但工作還是沒著落,心中越來越慌,除去學(xué)費(fèi),來京時(shí)父母給我2000元,大哥資助我的1000元就是我當(dāng)時(shí)的全部資金(3000元在北京能呆多久?!)。我當(dāng)時(shí)訂了個(gè)計(jì)劃,留下500元保底,打死都不能動(dòng),要靠它作路費(fèi)回家的。我當(dāng)時(shí)說,一定得找到一家公司,再少的錢都干,只要有口飯吃,有張床讓我睡我就滿足了。
我一共應(yīng)聘了四五家公司,最具傳奇色彩的是到西單附近一家公司的應(yīng)聘經(jīng)歷。那時(shí),我?guī)チ宋业淖髌,公司?xiàng)目經(jīng)理要看,于是我給他們演示,很奇怪,程序一打開就死機(jī),一連兩臺(tái)電腦都一樣,末了,兩臺(tái)電腦都啟動(dòng)不起來了。用瑞星一查,CIH病毒——那天正是4月26日!于是,CIH破壞了電腦主板的同時(shí),也無情地摧毀了我的就業(yè)機(jī)會(huì)。還算老板可憐我,沒要我賠。其實(shí)我當(dāng)時(shí)快到山窮水盡的地步了,真要我出錢,我可能連家都回不了啦。陳盈豪(CIH病毒的作者),你小子這么的聰明做什么不行,偏要去做病毒,害人害已,弄得我連個(gè)飯碗也找不到,晚上回“希特勒地堡”,把這小子罵了無數(shù)次!
總算天無絕人之路,在我數(shù)著最后還剩余600元錢的時(shí)候,終于有一家公司要我了,做中小學(xué)教育軟件,月薪1600。干了兩星期,又給我在公司的倉庫挪開貨物,搭了個(gè)床位,我就在那住下了,慶幸再也不用到“希特勒地堡”里當(dāng)沖鋒隊(duì)員了。每天下班后,我就睡在林立的大紙箱之中,如果來個(gè)地震,呵呵,我就埋在紙箱中了,休想爬得出來!
我干得非常努力,第一個(gè)月工資開出來,扣掉個(gè)人所得稅,我拿了1500多元。你們不知道我拿到第一筆工資的感覺!這錢在很多人眼里簡(jiǎn)直不算錢,但對(duì)于一個(gè)沒工作近兩年,工作也一個(gè)月收入不到200的窮小子而言,就象陳佩斯小品中所演的:“我王老五活了一輩子,還從沒見過這么多錢啊!”。好笑嗎?我一點(diǎn)也不覺得好笑。我只是心酸,我到了28歲才可以用自己的知識(shí)與技能養(yǎng)活自己,再不用依靠父母和兄長(zhǎng)的資助,才真正完全用自己的力量在社會(huì)上站起來,一個(gè)沒有經(jīng)濟(jì)自立能力的人,只能是個(gè)不成熟的人,一個(gè)躺在父母身上的人,不是一個(gè)真正的男子漢!我當(dāng)這樣的孬種當(dāng)了28年!
我找到工作后向家里寫過一封長(zhǎng)信,信中講了我對(duì)父母平時(shí)不好意思說的很多心里話,當(dāng)時(shí),我父親說,母親接到信都哭了。我剛拿到工資,馬上打了個(gè)電話回家里告訴母親,以緩解他們的焦慮,畢竟兒行千里母擔(dān)心啊!父母有退休金,一再表示不需要我贍養(yǎng),而我再這樣不要臉下去,我還是人嗎?我就是從那時(shí)候開始,下定決心,從今往后,再不向家中要一分錢!今后三年讀書和生活的費(fèi)用我一定要用自己的勞動(dòng)來獲取。
金錢帶給我的激動(dòng)就是在那段時(shí)間,溫飽問題解決之后,金錢對(duì)我的誘惑就再?zèng)]有了,哪怕讓我一個(gè)月賺一萬,給套房子給我,也不可能再給我?guī)硇腋5母杏X了,錢是重要的,但不能成為它的奴隸,家中不需要我負(fù)擔(dān),我一個(gè)人有吃有喝,干著我喜歡的工作,足矣!
我在那公司一直干到九月學(xué)校開學(xué)為止。我走的那一天,公司居然還開了個(gè)歡送宴會(huì),老板封了500元的封包給我。我真是感動(dòng)。我大學(xué)畢業(yè)后在社會(huì)上掙扎求生,得到的大都是冷眼與蔑視,社會(huì)終于認(rèn)可了我的價(jià)值,我不是一個(gè)只知道吃飯的廢物!
1999年9月9日上午9點(diǎn),在這個(gè)最多9字的時(shí)刻,我到學(xué)校報(bào)道來了,放下行李,我坐在分配給我的床上,心中終于踏實(shí)下來。
現(xiàn)在,我在北京終于有一張屬于我的床了,一張真正屬于我的床了,終于有個(gè)地方可以讓我安穩(wěn)地睡覺了。沒有這段經(jīng)歷,我怎么體驗(yàn)到“安居樂業(yè)”這一個(gè)詞的真實(shí)含義!個(gè)人如此,國(guó)家要做到,中國(guó)要做到,更難!
二、編程生涯
讀研兩年半的時(shí)間,我四處打工,這兩年半我至少在七八家公司做過,編了十幾萬行代碼,為自己賺了一臺(tái)電腦,兩部手機(jī)(丟了一部),還有讀研期間的所有費(fèi)用,實(shí)現(xiàn)了我的目標(biāo):沒向家里要一分錢。
我水平不高,但在打工過程中,發(fā)現(xiàn)許多中國(guó)軟件公司的水平更菜!
2000年暑假,我參加一個(gè)商品軟件的開發(fā),搬到了北大燕北園的一個(gè)宿舍,在那兒搞封閉式開發(fā)。在這個(gè)項(xiàng)目采用VB6開發(fā),主力程序員除我之處,還有一個(gè)華北電力大學(xué)的研究生。大家都沒開發(fā)商品軟件的經(jīng)驗(yàn),沒經(jīng)過正式的設(shè)計(jì),就匆忙編碼了。我曾經(jīng)想采用分層的系統(tǒng)架構(gòu),但遭到另一位程序員的反對(duì),爭(zhēng)吵沒有結(jié)果,老板也不能做決定,結(jié)果各行其是,F(xiàn)在看起來,那時(shí)真是太菜了,任何一本軟件工程書都會(huì)指出這種做法是不對(duì)的。
我們直接就熱火朝天的干了起來,那位華北電力大學(xué)的老兄,真讓我佩服,他可以在一個(gè)sub過程中寫上2000行代碼!我覺得奇怪,為何他能寫這么多的代碼?一看,頓時(shí)我暈倒,他居然將每個(gè)控件的left,top,width等屬性都用代碼來設(shè)定!想想這樣的程序,調(diào)試時(shí)光單步執(zhí)行就需要按多少次F8鍵!
我們?cè)陔娔X旁邊搭了個(gè)行軍床,每天都是干到早上6點(diǎn)才睡,12點(diǎn)吃中飯,然后又是一個(gè)通宵。當(dāng)時(shí)整個(gè)工程只有一個(gè)類模塊,被我用于封裝訪問數(shù)據(jù)庫的ADO數(shù)據(jù)引擎,這是整個(gè)工程中唯一一處用到了最簡(jiǎn)單的面向?qū)ο蠹夹g(shù)的地方。然后,我寫了近十個(gè)bas公用模塊,每個(gè)模塊代碼規(guī)模都有一兩千行,還有十幾個(gè)窗體,每個(gè)窗體中都塞滿了事件驅(qū)動(dòng)的VB代碼,整個(gè)軟件應(yīng)該有10萬行代碼,我一個(gè)人在此期間至少就寫了3萬多行VB代碼。程序的主處理流程我甚至用ADO與DAO寫了兩套!
現(xiàn)在想起來,我們當(dāng)時(shí)根本就不知道面向?qū)ο鬄楹挝,更不理解許多對(duì)軟件開發(fā)至關(guān)重要的理論,就憑著一種熱情。在這段痛苦的開發(fā)經(jīng)歷中,我不僅精熟了VB,而且從中學(xué)到了很多,F(xiàn)在再開發(fā)同樣功能的東西。我至少可以砍掉2/3的代碼。怎么學(xué)都不如從失敗中學(xué)得多。
后來我總結(jié)VB程序員的三個(gè)境界:
(1)所有代碼都只放在窗體文件中的,屬于菜鳥級(jí),他們只會(huì)從面板上拖控件,設(shè)置屬性,然后再給事件編碼。
(2)工程中有bas模塊的,屬于中間級(jí),他們已意識(shí)到有大量的代碼是重復(fù)出現(xiàn)的,應(yīng)該將其抽取出來作為公用模塊。
(3)工程中有cls模塊的,屬于高手,他們已掌握了面向?qū)ο蟮乃枷,并能?yīng)用這種思想來解決實(shí)際問題。
正是這次開發(fā)經(jīng)歷,促使我反思:到底如何開發(fā)軟件?我個(gè)人可以用VB完成各種各樣的功能,為什么湊在一起就會(huì)那么困難?更正一個(gè)bug為何那么難?為什么一個(gè)看似簡(jiǎn)單的軟件,要拖半年的時(shí)間還看不到結(jié)束的日子?
九月,研究生要開題,我自擬了個(gè)課題:軟件體系結(jié)構(gòu)設(shè)計(jì)。我決心弄明白,好軟件到底是怎么做出來的。
我放下了VB,開始研究C++,原來學(xué)過VC,但沒學(xué)會(huì),就直接從C++Builder入手。Borland公司的VCL類庫讓我大為嘆服,很快就迷上了它,為此連帶學(xué)了Delphi,并參與了一個(gè)Delphi項(xiàng)目。給我真正震撼的是《設(shè)計(jì)模式》這本書,看了才知道,原來好軟件是這么設(shè)計(jì)出來的!在此,我強(qiáng)烈推薦所有有一定編程經(jīng)驗(yàn)的程序員一定要看這本書!
一邊學(xué)習(xí)理論,一邊可沒忘記我沒經(jīng)濟(jì)來源,于是又四處打工,接一些小項(xiàng)目與小模塊來賺些生活費(fèi),國(guó)內(nèi)一家橫跨家電與軟件的著名公司是我打工期間去過的最大的公司。但無論什么公司,都給我一種感覺——爛!公司中充滿了對(duì)員工的剝削與不尊重,對(duì)軟件開發(fā)這一事物的錯(cuò)誤認(rèn)識(shí),管理混亂。
我沒機(jī)會(huì)去外企,技術(shù)水平不到,別人不要我?,但我所見到的軟件公司,我敢說沒一家能做出世界一流的軟件!
我上的研究生課程也讓我失望,整個(gè)就是本科教育的再版。經(jīng)過高考與考研兩次重大考試,我對(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ù)水平的差異是如此的巨大,巨大得甚至有讓人絕望的感覺。同時(shí),在北京這個(gè)中國(guó)軟件人才最集中的地方,我也見到了許多牛人,一個(gè)清華的本科學(xué)生,做程序員可以拿到一個(gè)月12000元的工資,一個(gè)北大的計(jì)算機(jī)系研究生,一畢業(yè)就到外企,一個(gè)月一萬多收入,每年發(fā)16個(gè)月工資!干了兩年就開了自己的公司。我看到了一個(gè)北方交大的本科生作品,在半年的業(yè)余時(shí)間里,用Delphi寫了十幾萬行代碼,他甚至在代碼中嵌入?yún)R編,自行編寫數(shù)據(jù)存取引擎讀寫Foxpro,速度超快!軟件中有一個(gè)計(jì)算公式解析模塊,他用編譯原理理論居然做了一個(gè)小型的公式解析器,就象C++編譯器檢查C++程序一樣,不僅可以判斷是否公式正確,而且給出的出錯(cuò)信息還相當(dāng)準(zhǔn)確!其基本功之扎實(shí),水平之高讓我望塵莫及!中國(guó)優(yōu)秀的人才真還是不少的!在精英集聚的北京,面對(duì)著博大精深的軟件科學(xué),我深感自身的渺小。
但我畢竟是靠自己奮斗出來的,我并不自卑,這世界需要牛人,同樣需要大批合格的勞動(dòng)者,我成為不了牛人,但我作一名程序員是合格的。
時(shí)間過得飛快,一年半根本就不算時(shí)間,馬上就要畢業(yè)了,學(xué)習(xí)的成績(jī)?nèi)绾危缴鐣?huì)上去競(jìng)爭(zhēng)了,讓社會(huì)考場(chǎng)來決定你是否及格。
三、畢業(yè)求職
98級(jí)的研究生是IT業(yè)最后輝煌的回光反照。當(dāng)時(shí),各大公司都發(fā)了瘋似的要人,象華為,當(dāng)時(shí)是來者不拒。計(jì)算機(jī)專業(yè)的研究生是一搶而光,本科生也供不應(yīng)求。2001年畢業(yè)的我的師兄師姐們,平均每個(gè)人手頭都至少有兩三個(gè)offer,談的工資沒有低于每月6000的,許多人去了外企,工資在8000~10000每月的也有。真是畢業(yè)生的黃金時(shí)間。
但好景不常在,911事件我看來好象成了分水嶺,911之后,整個(gè)IT業(yè)急剎車,就業(yè)形勢(shì)急轉(zhuǎn)直下,各大公司都在消化去年吃得過飽的胃口,我形容是大家都吃壞了胃,再也不可能有我?guī)熜謳熃銈兊娘L(fēng)光了。雖然時(shí)間相隔僅大半年。
從10月開始,11月和12月,我?guī)缀跏窃谡衅笗?huì)與公共汽車上渡過的,北京東南西北地去面試,上午在上地,下午可能就要跑到朝陽區(qū),疲于奔命。
在找工作過程中,我良好的心理素質(zhì)與豐富的編程經(jīng)驗(yàn)起到了很大的作用,并沒有遇到很大的困難,就先后有幾家公司表示要我。
其中我想說的有兩家公司。
一家是中國(guó)臺(tái)灣公司,應(yīng)該說他們做得是不錯(cuò)的,但我非常反感他們那種自認(rèn)為高于大陸人的那種優(yōu)越感,而且待遇也不高。面試之后,回來感覺很不好。
我想:我們大陸確實(shí)是不如中國(guó)臺(tái)灣發(fā)達(dá),難怪別人看不起我們,這世界勢(shì)利得很,社會(huì)如此,國(guó)家亦然。但我中華960萬平方公里的國(guó)土,13億人口,難道要依靠一個(gè)小小的島嶼來撐門面?難道除了中國(guó)臺(tái)灣公司,我就無處可去了?雖然改變不了什么,但我決定絕不去臺(tái)資和日資的公司工作(日本人我更不喜歡,但我認(rèn)為他們做事實(shí)在優(yōu)秀,我們一定要向日本人學(xué)習(xí))!在這種公司呆著,不爽!同時(shí),我們的確也得爭(zhēng)氣些,這世界只尊重強(qiáng)者。
另一家是個(gè)很不錯(cuò)的民族軟件企業(yè),想要我,其老總專門找我去面談了一次,希望我能到他的公司工作。這位老總白手起家,能在五六年的時(shí)間內(nèi)由幾個(gè)人發(fā)展到300多人,當(dāng)時(shí),是中國(guó)這個(gè)領(lǐng)域軟件市場(chǎng)占有率最高的公司,我非常佩服,他為人也很好,并表示可以給我每月比其他研究生多加1000元工資,而且希望鍛煉一兩年之后我能夠帶領(lǐng)一個(gè)團(tuán)隊(duì)來開發(fā)產(chǎn)品,并負(fù)擔(dān)我畢業(yè)所需交納的各種費(fèi)用。在就業(yè)不景氣的2002年,對(duì)我一個(gè)30歲的技術(shù)水平有限的老程序員如此看重,真叫我感動(dòng)。雖然我最后還是沒去,但我仍然對(duì)這個(gè)公司充滿了好感。一個(gè)軟件企業(yè)最重要的是什么?是對(duì)人的尊重,沒有這點(diǎn),可以斷定,這個(gè)公司長(zhǎng)不大。
我為什么沒去軟件公司?放棄有可能在幾年之后年薪突破10萬的收入?是因?yàn)槲乙延辛烁胱龅氖拢蚁氘?dāng)老師!
我自己是從自學(xué)的路上走過來的,其中的艱辛歷歷在目,無人指點(diǎn),我走了多少?gòu)澛?中國(guó)還有多少是象我這樣的年輕人無人指點(diǎn)的?我幸運(yùn)能爬出來了,因?yàn)槲抑辽龠能有飯吃,比我條件更差的,比如農(nóng)村的孩子,可能就被生活的壓力所淹沒了。我個(gè)人的力量很微弱,技術(shù)也有限,但我自認(rèn)為至少是一名合格的程序員,如果能培養(yǎng)出一大批達(dá)到我的水平的學(xué)生,他們畢業(yè)后成為合格的程序員,中國(guó)軟件的根基就會(huì)更扎實(shí),如果更能有一批遠(yuǎn)遠(yuǎn)超過我水平的學(xué)生出來,中國(guó)軟件就有希望了。軟件是什么?軟件以人為本!
人生追求什么?金錢?我很缺錢,但不可能把金錢作為我的目標(biāo),我希望我能夠成為一個(gè)對(duì)社會(huì)有所貢獻(xiàn)的人,能夠獲得心靈的充實(shí),于是,我選擇了留校。
四、對(duì)教育的反思與教書生涯
2002年下半年,我參加了北京高校青年教師崗前培訓(xùn)。一位杜教授的兩堂課讓我印象深刻,其中兩句話讓我深深震動(dòng):
第一句話:我是一個(gè)教書匠,教書匠好啊,好就好在“匠心獨(dú)運(yùn)”!
第二句話:做什么工作都要達(dá)到變魔術(shù)的境界!
是的,作為一名教師,就必須起到一個(gè)傳聲筒與放大器的作用,將人類最聰明的人探索世界所得到的知識(shí)予以拓寬發(fā)展,以便讓更多的人能夠掌握這些知識(shí)并進(jìn)而應(yīng)用于實(shí)踐,從而推動(dòng)人類的不斷進(jìn)步。
作為一名計(jì)算機(jī)專業(yè)的教師,就要努力把先進(jìn)的計(jì)算機(jī)技術(shù)以盡可能高的效率傳授給廣大的學(xué)生,引導(dǎo)他們直接面對(duì)真實(shí)的軟件世界,而不是向他們硬灌各種各樣的理論知識(shí),強(qiáng)迫他們?nèi)ニ烙浻脖骋詰?yīng)付考試。
我是一個(gè)小人物,才低學(xué)淺,但我真的認(rèn)為高校計(jì)算機(jī)教育存在嚴(yán)重的問題。我在打工期間的開發(fā)經(jīng)歷,以及閱讀國(guó)外相關(guān)資料的時(shí)候,發(fā)現(xiàn)學(xué)校中教的和社會(huì)上用的差得太遠(yuǎn)!都已經(jīng)是什么時(shí)代了,許多大學(xué)還設(shè)立Foxpro課程,難道就不能直接用現(xiàn)代主流的數(shù)據(jù)庫如Oracle,SQLServer,哪怕是Access也好,來講授數(shù)據(jù)庫知識(shí)?還有所謂的計(jì)算機(jī)等級(jí)考試,呵呵,過了三級(jí)學(xué)生的我見過不少,但他們真正對(duì)軟件,對(duì)計(jì)算機(jī)又理解多少?
在中國(guó)甚至于升職稱也要考計(jì)算機(jī),我看了一本職稱計(jì)算機(jī)考試教材,里面幾乎原樣照搬計(jì)算機(jī)原理課程中的相關(guān)章節(jié),弄得我給搞藝術(shù)的大嫂講了一個(gè)小時(shí)的二進(jìn)制與八進(jìn)制、十六進(jìn)制的轉(zhuǎn)換方法,她還是弄不太清。我都泄氣了,對(duì)啊,他們搞藝術(shù)的,有必要去分清二進(jìn)制的10與十進(jìn)制的2有何分別嗎?他們八輩子也用不上。但是考試用得上,呵呵,又是中國(guó)特色。
拿C++來說,我講過C++課,許多的國(guó)內(nèi)教材對(duì)C++語法下了大功夫,卻對(duì)體現(xiàn)了C++精華的STL只字不提,對(duì)代碼背后所體現(xiàn)的軟件開發(fā)思想與方法更是視而不見,我用C++也編過不少程序了,說句實(shí)話,我用到的特性不到C++的三分之一!于是就出現(xiàn)了這種怪現(xiàn)象,許多學(xué)生考試可以拿八九十分,給他一個(gè)簡(jiǎn)單的實(shí)際問題他卻不知如何下手!
還有UML,現(xiàn)在好象很火的樣子,我們讀研時(shí)就開了這門課,講句實(shí)話,當(dāng)時(shí)這門課我就沒聽懂,可后來我嘗試著用C++用面向?qū)ο蟮姆椒▉砭幊绦,然后,由代碼倒推回UML類圖,一下子就明白了,原來UML只不過是一種描述面向?qū)ο笙到y(tǒng)的符號(hào)罷了,如果學(xué)生沒進(jìn)行過真正的OOP,那就是為了學(xué)UML而學(xué)UML,根本就本末倒置。
還有軟件工程,我的感覺,一個(gè)人如果沒寫過一萬行以上的程序,他看軟件工程書就同看政治書差不多,每句都對(duì),呵呵,就不知道為什么對(duì)。我完成了那個(gè)幾萬行的VB程序之后,再回過頭看看理論,真是句句是真理!每個(gè)理論背后都是大量實(shí)踐經(jīng)驗(yàn)的總結(jié)。
回想我做軟件的體會(huì),我發(fā)現(xiàn)所有的知識(shí)都是一個(gè)完整的體系,根本就無法區(qū)分哪些知識(shí)是本科的,哪些知識(shí)是研究生課程。于是,一種想法產(chǎn)生了,我主講程序語言類的課程,那我就直接以真實(shí)的軟件開發(fā)過程為主線,實(shí)踐中需要什么我就講什么。講C++,我就拋開了指定的教材,C++我講了STL,我講了OOAD,兩者我都講了用Rose進(jìn)行雙向工程,引導(dǎo)學(xué)生去學(xué)UML,一開始就用UML去描述自己開發(fā)的程序,何必浪費(fèi)大量的時(shí)間去學(xué)結(jié)構(gòu)化的編程方法?
我現(xiàn)在簡(jiǎn)直成了面向?qū)ο蠹夹g(shù)的布道者,我下學(xué)期即將開設(shè)OOAD基礎(chǔ)選修課,從實(shí)際項(xiàng)目中抽取典型的案例,講UML,講Rose,講設(shè)計(jì)模式,講軟件體系結(jié)構(gòu),例子代碼橫跨C++和。NET下的開發(fā)語言(C#和VB。NET),這對(duì)于我一個(gè)技術(shù)水平有限公司的董事長(zhǎng)而言,實(shí)在有點(diǎn)不自量力,我鼻子上才插上幾根蔥,就想裝大象?但我想,如果我能成功地激發(fā)出哪怕1%的學(xué)生的興趣,能引導(dǎo)他們走向我認(rèn)為是正確的方向,能啟發(fā)他們思考,能直接面向真實(shí)的軟件開發(fā)活動(dòng)而不是學(xué)校的考試,就是我的成績(jī)。我現(xiàn)在正在看引進(jìn)的原版書籍——《設(shè)計(jì)模式解析》,時(shí)時(shí)擊節(jié)贊嘆!《設(shè)計(jì)模式》經(jīng)典但難懂難用,而《解析》一書的兩位作者既有豐富的從業(yè)經(jīng)驗(yàn),又對(duì)OOAD進(jìn)行了深入的思索,真知灼見時(shí)時(shí)展露于書中,我現(xiàn)在剛看了這本書的80%,基本上可以用一個(gè)成語來描述這部書:深入淺出!
要做到深入淺出談何容易!只有同時(shí)具備技術(shù)專家與文學(xué)作家素質(zhì)的人才能做到!
反觀我們國(guó)內(nèi)的大量教材,還有大量的垃圾論文(包括碩士、博士的,本科的就算了,我看絕大部分根本不能稱之為論文),全都是“淺入深出”,作者自己都未必明白,就東拼西湊,擺出個(gè)樣子嚇人。本來完全可以用大白話三言兩語講清楚讓人明白的道理,有人專門要繞一大圈,專挑用高深的數(shù)學(xué)公式來表達(dá),唯恐別人容易理解,顯得他水平不高!呵呵,什么東西一沾上“數(shù)學(xué)”,立馬身價(jià)百倍。我就聽過一個(gè)北師大的一個(gè)在讀博士說過:如果一篇博士論文中沒有一個(gè)數(shù)學(xué)公式,根本就不算是博士論文。這句話對(duì)不對(duì),大家可以多思索。我數(shù)學(xué)不好,沒資格討論數(shù)學(xué),我的直覺:數(shù)學(xué)是工具,但如果為了發(fā)表論文等目的而故弄玄虛,為數(shù)學(xué)而數(shù)學(xué),是不合道理的。中國(guó)的學(xué)術(shù)水平與現(xiàn)狀,大家都心知肚明,不用我廢話了。
現(xiàn)在每年都畢業(yè)大批的計(jì)算機(jī)專業(yè)學(xué)生,可其中真正具備扎實(shí)根基的可以很快勝任工作的我看只有5%(95%的學(xué)生不要扁我,不同意就當(dāng)我在說胡話,我很瘦的,一扁就沒了?)。多年以來,我國(guó)高校計(jì)算機(jī)教育是按照計(jì)算機(jī)科學(xué)研究者來培養(yǎng)的,可事實(shí)上,有多少學(xué)生能從事計(jì)算機(jī)方面研究的能力?我看應(yīng)分流,80%的學(xué)生按工程師方向來培養(yǎng),20%的學(xué)生按研究者方向來培養(yǎng),而且應(yīng)大幅減少必修課的數(shù)量,計(jì)算機(jī)領(lǐng)域太深太廣,樣樣都想教給學(xué)生,反而成了夾生飯,一個(gè)想從事硬件設(shè)計(jì)的學(xué)生和一個(gè)想從事軟件開發(fā)的學(xué)生,能給他們一樣的飯吃嗎?學(xué)校應(yīng)提供各種條件和資源去引導(dǎo)學(xué)生,激發(fā)學(xué)生的創(chuàng)造性與主動(dòng)探索性,讓他們?nèi)L試,去發(fā)現(xiàn)自己的長(zhǎng)處,最終找到最適合自己的發(fā)展方向。不這樣做,中國(guó)軟件后繼乏人,沒希望。
五、實(shí)踐第一
2002年下半年,我和一個(gè)朋友去了北京郊區(qū)的一家雜志社,看到的情形讓我震驚:在信息產(chǎn)業(yè)最發(fā)達(dá)的北京,這家雜志社還用人工查對(duì)雜志訂單和款單,看著那按省來登記的幾大本厚厚的客戶登記本,工作人員需要手工來在其中查找相應(yīng)的信息。這樣的工作效率,這樣的行業(yè)信息化水平!北京如此,全國(guó)又如何?
從這件事上,我看到了中國(guó)軟件業(yè)的另一方面。一方面我們沒有核心技術(shù),另一方面,已有的技術(shù)又根本沒推廣沒用好。追蹤世界先進(jìn)水平,對(duì)于我等這種水平的人來說,確實(shí)勉為其難,但將已有的技術(shù)用于解決實(shí)際問題,卻是我們可以做的。如果中國(guó)各行各業(yè)都真正能通過進(jìn)行信息化而提高生產(chǎn)效益,那中國(guó)不就從根本上強(qiáng)大起來了嗎(象印度,IT一枝獨(dú)秀,其他行業(yè)沒有起色,我稱之為跛足的國(guó)家,絕不能成為世界強(qiáng)國(guó))?在扎實(shí)的社會(huì)基礎(chǔ)之上,軟件業(yè)不就有了更大的市場(chǎng)與發(fā)展?jié)摿?中國(guó)許多行業(yè)的信息化水平非常低,而且中國(guó)地域廣大,發(fā)展非常不平衡,有些地方信息化水平甚至為0!努力推動(dòng)行業(yè)信息化,是我們這一代軟件開發(fā)者的責(zé)任!而追趕國(guó)外先進(jìn)水平,恐怕就不是一代兩代程序員可以達(dá)到目標(biāo)的,需要長(zhǎng)期的努力。作為一名軟件開發(fā)者,只能腳踏實(shí)地,哪怕你只做一個(gè)小小的MIS產(chǎn)品,也要盡力把它做好來。
于是,我開始了期刊發(fā)行系統(tǒng)的開發(fā),這完全是自發(fā)的,沒有任何資金投入,只有一種熱情在支撐。我開始選擇C++Builder開發(fā),做了幾個(gè)月,完成了第一個(gè)版本,但我發(fā)現(xiàn),我找不到足夠水平的C++程序員進(jìn)行合作開發(fā),而且整個(gè)一個(gè)exe文件,在體系結(jié)構(gòu)設(shè)計(jì)上雖采用了分層分塊的設(shè)計(jì)方案,但卻是源代碼級(jí)別的,要拆分成COM組件難度太大,不是一個(gè)人能完成的,于是中途流產(chǎn)。
2003年3月,我開始系統(tǒng)地學(xué)習(xí)。NET,我吃驚地發(fā)現(xiàn),我原來想在C++中實(shí)現(xiàn)的許多功能,比如對(duì)象串行化為XML,在。NET中已有現(xiàn)成的類可用,。NET更把OO的功用發(fā)揮到了極致,它的混合語言開發(fā),它的反射機(jī)制,它的新的自識(shí)別的軟件組件,以及強(qiáng)大好用的開發(fā)環(huán)境VisualStudio,都讓我驚嘆微軟對(duì)開發(fā)者遇到的困難的深入把握,相比用C++開發(fā),至少可以提高1/3的開發(fā)效率。于是一個(gè)新的想法產(chǎn)生了,我要把以前的產(chǎn)品用。NET重寫,利用。NET強(qiáng)大的組件模型,將設(shè)計(jì)模式理論推廣應(yīng)用到組件級(jí)別,通過XML和反射機(jī)制建立一套可動(dòng)態(tài)裝配的軟件生產(chǎn)流水線,實(shí)現(xiàn)象Dell直銷PC那樣的軟件動(dòng)態(tài)裝配直銷。只要建立好靈活可不斷重構(gòu)的系統(tǒng)架構(gòu),配以對(duì)業(yè)務(wù)領(lǐng)域的深入分析,逐步建立功能強(qiáng)大的業(yè)務(wù)組件倉庫,就可以實(shí)現(xiàn)軟件系統(tǒng)的動(dòng)態(tài)裝配。說干就干,我用VB。NET重寫了原先用C++編寫的系統(tǒng),將原先的一個(gè)exe變?yōu)槭畮讉(gè)dll,而且這些dll還會(huì)隨著發(fā)展而不斷地分裂,也有可能重新組合,利用refractoring(重構(gòu))不斷進(jìn)化,最終形成一整套完備的行業(yè)軟件組件庫。做軟件關(guān)鍵因素是變化,只有適應(yīng)變化的系統(tǒng)才是有生命力的。
我用兩個(gè)月的時(shí)間大體上弄清了。NET平臺(tái)下的主要類庫,然后又用兩個(gè)月的時(shí)間再次重新實(shí)現(xiàn)了期刊發(fā)行系統(tǒng)的C++版本的全部功能,到8月份我寫這篇文章之時(shí),第一個(gè)產(chǎn)品里程碑已經(jīng)完成。同樣的,除了需求是由另一個(gè)合作者去搜集的之外,幾乎又是全部由我一個(gè)人包攬了所有的系統(tǒng)設(shè)計(jì)及編碼工作!
毫無疑問,我自覺得新系統(tǒng)要比老系統(tǒng)可維護(hù)性強(qiáng)得多,真正實(shí)現(xiàn)了徹底的全組件化系統(tǒng)開發(fā),計(jì)劃再有一個(gè)月的界面美化,改正bug,引用多線程提高運(yùn)行效率,優(yōu)化系統(tǒng)結(jié)構(gòu),就可以提供給用戶試用了。市場(chǎng)如何,難說難測(cè)。
在開發(fā)過程中,我再次感到巨大的挑戰(zhàn),不光是技術(shù)上的,更是管理上的。人才是我最頭痛的問題,沒有一流的人才,哪來一流的產(chǎn)品?我們找不到足夠水平的程序員一起合作(牛人哪屑于做這樣一個(gè)小兒科的產(chǎn)品?)我們要走的路還很長(zhǎng)。也許我們開發(fā)的產(chǎn)品是失敗的,但我從來就沒指望能用這賺錢,我只是盡一個(gè)軟件開發(fā)者的責(zé)任而己,成敗已不重要!人生不嘗試,怎能體現(xiàn)人活著的價(jià)值?
剛好我編的程序告一段落。于是就crazy地敲鍵盤,一鼓作氣地把下篇寫完了。心中有好多話一次就說個(gè)痛快。
看得越多,想得越多,我就越困惑,人啊,你活著到底是為了什么?又整天忙忙碌碌地追求些什么?我這十年,……我都不知道怎么說了!
大家自己看吧!
結(jié)束語:永無止境的軟件之路
一、辛酸與苦辣
做軟件開發(fā)很苦的,技術(shù)進(jìn)步如此神速,每個(gè)軟件開發(fā)者都得不斷地學(xué)習(xí)以跟上發(fā)展的步伐。有時(shí)我常想,何苦呢?我現(xiàn)在在大學(xué)中混,怎么樣不能混下去?為什么要做這些吃力不討好的事?我投了十年的時(shí)間去學(xué)習(xí)電腦,卻最終發(fā)現(xiàn)自己不過中人之資,離頂峰遠(yuǎn)之又遠(yuǎn)。古語云:三十而立。我今年32了,仍是孤身一人,看看周圍的同學(xué),他們的小孩都差不多上小學(xué)了!許多都有了自己的房子和車子,而我到現(xiàn)在才開始申報(bào)中級(jí)職稱,還擠在集體宿舍中,望著北京高昂的房?jī)r(jià)而嘆息,F(xiàn)在社會(huì)越來越功利了,看著象我這樣的窮光蛋,看著由于長(zhǎng)期面對(duì)電腦缺少鍛煉而瘦弱的身軀,又有哪個(gè)女孩愿意嫁過來受苦?
軟件人的生活很苦,壓力很大,我認(rèn)為是拿青春賭明天。就是在這種惡劣的開發(fā)環(huán)境中,還有許多業(yè)外人士指手劃腳說程序員如何如何,還有太多的公司只顧壓榨程序員的勞動(dòng),缺乏對(duì)程序員基本的尊重,怎不叫人寒心?
“三十而衰”,這句本不應(yīng)該流行的話居然成了中國(guó)軟件人員的流行語。中國(guó)程序員的悲哀!
二、無止境的追求
人類已進(jìn)入信息時(shí)代,計(jì)算機(jī)技術(shù)幾乎每隔半年就有一次大的變化,我現(xiàn)在又面臨著這樣的抉擇:今后的路如何走?
北大的教師聘任制度的改革一石激起千層浪,說明了中國(guó)高校的改革勢(shì)在必行。我是歡迎這種變化的,雖然到時(shí)我可能會(huì)下崗。但人生中總會(huì)遇到各種各樣的挑戰(zhàn),只要你不倒下爬不起來,就有希望。
我想我必須再次讓自己有個(gè)提升,要從小事做起,但做小事則絕不能成為最終的目標(biāo),也許,不遠(yuǎn)的將來,我會(huì)走出國(guó)門,到世界軟件技術(shù)最發(fā)達(dá)的地區(qū)去汲取豐富的養(yǎng)份。今后的路怎么走,我還在摸索之中。
三、人生無悔
人生年華如水,時(shí)光無情。在過去的歲月中,我盡了自己的力,回顧往事,我可以說:過去的事只有遺憾,卻沒有后悔。如果給我再一次選擇職業(yè)的機(jī)會(huì),我還會(huì)再次選擇軟件!
再過10年,到2013年的時(shí)候,我也許會(huì)再次寫一篇人生的十年回顧,到那時(shí)中國(guó)的軟件會(huì)如何?中國(guó)軟件的明天靠你我這些普通人去扎扎實(shí)實(shí)地去工作來支撐!少發(fā)些牢騷,多做些實(shí)事,中國(guó)軟件才會(huì)有光輝的明天。你我共勉!