然而進入大學的時候,見到、聽到和感受到的遠沒有自己想象的那么理想。印象最深的一句就是:應(yīng)用數(shù)學圖有其名,實際上什么也學不到,學數(shù)學不夠基礎(chǔ)數(shù)學專業(yè)的人,學計算機更是與CS的人差之甚遠。不同版本的經(jīng)驗和心得讓自己茫然了好幾天。不過學院領(lǐng)導一再強調(diào)搞計算機最出色的人都是學數(shù)學出身和某一個師兄的話“自己起主導作用”最終使得自己清醒過來,其實只要自己努力和主動,一切都是可以自己主導的。
盡管剛?cè)氪髮W時經(jīng)歷了落選“基地班”的打擊,但我很快振作起來。整理了一些師兄師姐的教導,確定了大學階段的目標:前兩年努力學好專業(yè)知識,打好數(shù)學基礎(chǔ)(我始終相信數(shù)學基礎(chǔ)是非常重要的),并利用空余時間學習計算機知識,從第三年開始尋找實踐機會積累計算機項目經(jīng)驗。相比于那些從小就有機會學習計算機的同齡人,我著實屬于“晚輩”級的人物了,但我相信通過自己的努力,一定可以彌補以前落下的基礎(chǔ)。
幸運的是,我們宿舍10個人大部分都是“計算機迷”,在他們的影響下,我對計算機編程的興趣越來越濃,并且在大一暑假我就獲得了實踐的機會。通過舍友介紹,我進入了計算中心雨人工作室(后來轉(zhuǎn)到ERP實驗室)學習和實踐。在那期間,我參與了不少企業(yè)應(yīng)用系統(tǒng)的開發(fā)和實施(部署、培訓),從那時開始,我學會了如何用Basic、Pascal來編寫各種小程序,學會了如何用VB、Delphi來編寫數(shù)據(jù)庫應(yīng)用程序,從Access到SQL Server,我逐漸體會到數(shù)據(jù)庫的作用。盡管一開始編寫的程序和設(shè)計的用戶界面還顯稚嫩,但不斷得到客戶的認可讓我這個晚成的編程人員頗有成就感,也使得我對企業(yè)應(yīng)用開發(fā)興趣漸濃。或許是因為從一開始我接觸的編程是企業(yè)應(yīng)用(數(shù)據(jù)庫應(yīng)用)的開發(fā),我將自己的目標鎖定在企業(yè)應(yīng)用領(lǐng)域。身邊的同學有的對游戲開發(fā)非常感興趣,有的則喜歡編寫各種系統(tǒng)工具甚至是小病毒,而我則深深“愛”上了企業(yè)應(yīng)用開發(fā)。很多人對企業(yè)應(yīng)用開發(fā)很不屑,他們認為那無非就是利用各種RAD工具拖拖控件,在已經(jīng)生成的代碼框架上填填簡單的幾行代碼,完全沒有算法,沒有任何技術(shù)含量。剛開始接觸數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)時,我也產(chǎn)生了類似想法。但與客戶的溝通使我產(chǎn)生了責任感,我當時的想法是:盡管我所做的工作是簡單的,但這樣可以為客戶帶來便利,正是這種簡單的想法使我堅持下來,并能夠重新認識企業(yè)應(yīng)用開發(fā)。隨著自己學的東西越來越多,水平也不斷提高,我發(fā)現(xiàn)企業(yè)應(yīng)用程序并不是簡單的界面+代碼,這里面涉及的東西太多了。如何使我做出來的應(yīng)用程序能更好地滿足客戶的真實需求?如何使我的開發(fā)工作更有效率?如何使開發(fā)工作按時完成?……一系列的問題一直在腦海中回旋,我發(fā)覺對軟件開發(fā)了解的越多,腦海中的問題也就越多。
我的處女作品是一個進銷存軟件,是我獨立為一個軟件公司開發(fā)的。當時軟件公司的經(jīng)理就是我的客戶,他提出需求(根據(jù)他的客戶需求),我根據(jù)需求設(shè)計、開發(fā)出滿足要求的軟件。當時接到任務(wù)的時候是大二暑假的開始,記得那個暑假我用自己的獎學金和家教所得的錢買來第一臺電腦(4000多元),然后開始了我的開發(fā)歷程。之前,我曾經(jīng)為一個服裝租賃公司開發(fā)了一個服裝租賃系統(tǒng),但由于各種原因最終沒有被用戶使用(據(jù)說是用計算機系統(tǒng)太麻煩,呵呵),所以這個進銷存軟件是我的第一個被客戶使用的作品。開發(fā)服裝租賃系統(tǒng)的經(jīng)歷讓我學習了數(shù)據(jù)庫知識和Delphi工具的使用,也了解了軟件工程的一些知識,知道了什么叫需求分析,什么叫系統(tǒng)設(shè)計,什么叫開發(fā),測試和實施。當然,當時的專業(yè)課程學習任務(wù)還是比較重,對軟件工程學習只是依靠自學,所以不夠系統(tǒng),知道的比較表面,不過也會依樣畫葫蘆了。當時需求分析還是比較詳細了,雖然沒有編寫很正規(guī)的需求分析規(guī)范說明書,但對客戶的需求還是了解得比較細致。在后來與客戶面對面接觸時,看到客戶對系統(tǒng)的認可,我覺得自己很偉大,我終于體會到“科學技術(shù)是第一生產(chǎn)力”的真正含義了,呵呵。整個進銷存軟件的開發(fā)量(包括數(shù)據(jù)庫結(jié)構(gòu)設(shè)計、界面的設(shè)計和代碼編寫)還是蠻大的,由我一個沒什么經(jīng)驗的開發(fā)人員用兩個月時間開發(fā),確實難住了我,特別是里面一些業(yè)務(wù)邏輯,比如先進先出,后進先出等結(jié)算方式讓當時的我很是頭痛。在那段時間里,我經(jīng)歷了各種各樣開發(fā)人員的生活:為了找出一個問題所在不斷DEBUG;為了完成手中的工作通宵達旦;為解決了一個難題而歡呼雀躍;為得到了經(jīng)理的贊賞而美滋好一陣子;……開發(fā)工作是辛苦的,但收獲卻是非常大。書本上學到的軟件工程知識是抽象的,但通過開發(fā)這個進銷存軟件,我加深了對軟件工程各個階段的理解,雖然還是很膚淺,而且也許還很片面,但其間所經(jīng)歷的事情讓我積累了不少的經(jīng)驗,我懂得了如何去更好地與客戶、項目經(jīng)理交流;認識到了規(guī)范開發(fā)和各種文檔的重要性(堅持寫開發(fā)文檔得到了經(jīng)理的贊賞,這也為后來省下了不少麻煩,系統(tǒng)交付后,很少接到經(jīng)理的騷擾電話,呵呵)。當時經(jīng)理說的一句話讓我印象很深刻,也一直陪伴著我:開發(fā)應(yīng)用程序不是關(guān)在屋子里埋頭寫理想的代碼,而是要保持與用戶的不斷溝通,時刻讓自己的開發(fā)往正確的方向前進。靠自己想象出來的程序再美妙也是沒有任何價值的。從感受到自己的軟件為用戶帶來了工作效率的提升開始,我就瞄準了企業(yè)應(yīng)用開發(fā)這個領(lǐng)域。雖然當時的認識比較模糊,腦中還沒有系統(tǒng)架構(gòu)的概念,知識體系還是很不完善,缺乏相關(guān)計算機基礎(chǔ)知識的支持,但我感覺到信息技術(shù)在企業(yè)應(yīng)用領(lǐng)域會起革命性的作用,而且絕不止數(shù)據(jù)庫應(yīng)用那么簡單。
隨著參與的項目越來越多,范圍越來越廣,學到的知識也越來越廣泛,對信息技術(shù)的認識也越來越深。開發(fā)進銷存軟件的成功讓我得到了計算中心一位教授的賞識,我因此也得到了加入正式項目組的機會。第一個系統(tǒng)的開發(fā)完全是“個人英雄主義”行為,盡管我也試圖貫徹軟件工程的思想,但絕對體驗不到團隊合作,除了與客戶和經(jīng)理的溝通外。所以聽到可以加入項目組的消息,我的心情是非常激動的,當時只是大三剛開始,而我已經(jīng)初步實現(xiàn)了自己的目標,向更高的層次前進。
在雨人工作室學習期間,我參與的項目集中在企業(yè)MIS和一些WEB應(yīng)用。在Windows環(huán)境下,利用Delphi作為開發(fā)工具,MS SQL Server為后臺數(shù)據(jù)庫,開發(fā)各種C/S結(jié)構(gòu)的信息管理系統(tǒng)。當時的我作為一個開發(fā)人員,主要負責一些設(shè)計(數(shù)據(jù)庫結(jié)構(gòu)設(shè)計、系統(tǒng)框架設(shè)計和前端用戶界面)和coding工作。由于項目組成員不是很多,同時又是part-time job,有時更是幾個項目在身,著實體會到了一個programmer的艱辛,但也確實學到了很多programming skills,積累了不少programmer的經(jīng)驗。忙手coding的同時,我意識到計算機基礎(chǔ)知識的重要,輔修計算機軟件專業(yè)的課程,認真學習別人認為枯燥乏味的OO、Data Structure、Software Engineering等等基礎(chǔ)課程。雖然到現(xiàn)在已經(jīng)不能完全記住當時學的知識,但學到的一些思想、算法和技巧都在潛移默化影響著我的工作。
大二、大三兩年是非常艱苦的,學習任務(wù)繁重,我學好每一門數(shù)學,我知道本科頭兩年的數(shù)學課程是非常重要的;同時我也瘋狂學習計算機知識,并通過做項目去理解體會學到的知識。那兩年時間里,我感覺到自己的進步非常大。其間我也經(jīng)常聽到一些反調(diào),那些喜歡底層編程工作的同學都在勸我學一些更高深、更底層的知識(他們認為我如此聰明的頭腦去做那么“簡單”的應(yīng)用開發(fā),真的太浪費了),我也曾經(jīng)動搖過,但在網(wǎng)上論壇、BBS上我與“大蝦”們討論交流,同時也經(jīng)常找公司里面一些經(jīng)驗豐富的程序員溝通,我堅定了我的路線,小型的企業(yè)應(yīng)用開發(fā)從程序員角度來說似乎沒有那些與Windows API相關(guān)的底層編程那么復雜,但真正要保證時間保證質(zhì)量開發(fā)出一個滿足企業(yè)需要的系統(tǒng),卻是非常不容易的,這是一項非常有挑戰(zhàn)性的工作,而且意義非同一般。IT發(fā)展到現(xiàn)在,很多技術(shù)已經(jīng)非常成熟,我們應(yīng)該站在前人的肩膀上,盡可能利用先進的技術(shù)幫助企業(yè)提高生產(chǎn)力。隨著參與的項目越來越大,越來越復雜,我發(fā)現(xiàn)即使是企業(yè)應(yīng)用開發(fā)工作,也不是象很多人所想象的那樣簡單,需要考慮的東西越來越多,不再只是實現(xiàn)了要求的功能就OK了,需要考慮與已有資源(包括軟硬件資源)的整合,同時一些在小系統(tǒng)上表現(xiàn)不明顯的因素也越來越?jīng)Q定著一個項目的成功與否,比如性能、可維護性、適應(yīng)性等等。當時開發(fā)進銷存軟件時,只要找到了一個第三方控件實現(xiàn)了所要求的功能就興奮異常,后來開發(fā)較大型項目時就不再那么容易了,需要考慮系統(tǒng)采取的架構(gòu)(C/S?B/S?兩者相結(jié)合)、開發(fā)平臺、數(shù)據(jù)庫平臺,同時還得費心機考慮這種設(shè)計或?qū)崿F(xiàn)方法是否會影響系統(tǒng)速度或性能,是否可以重用,需求發(fā)生變化時是否容易修改,等等。后來才真正體會到一個系統(tǒng)總體結(jié)構(gòu)的不合理,會導致各種各樣的問題,從用戶角度來看,會產(chǎn)生重復工作等問題;從系統(tǒng)角度來看,會導致致命的速度、性能問題。而后者很可能導致項目的失敗,一個經(jīng)常導致服務(wù)器或客戶端死機的系統(tǒng)如何讓用戶接受?
在大三、大四兩年,參加了一些MIS、MRPII和ERP項目,有的可以稱得上是成功的項目,但大部分卻很難稱之為成功(無論是進度還是質(zhì)量都與理想差之甚遠)。原因是多方面的,主要有以下幾點:1、項目管理混亂,沒有規(guī)范的項目管理導致代碼質(zhì)量低下、進度不斷延遲;2、分析人員不夠重視需求分析,沒有很好地了解客戶的真正需求,缺乏對相關(guān)行業(yè)的必要知識,導致最終的系統(tǒng)不能很好地滿足客戶的要求,這也使得相當數(shù)量的中小型企業(yè)對信息系統(tǒng)產(chǎn)生了懷疑;3、系統(tǒng)設(shè)計人員計算機知識不全面,不了解最新的技術(shù),導致系統(tǒng)沿用過時的技術(shù)和系統(tǒng)結(jié)構(gòu),同時忽視重用性導致不斷的重復開發(fā);4、開發(fā)人員只考慮能否實現(xiàn),而沒有考慮如何更好地實現(xiàn),忽視代碼的效率、性能等問題。
01年項目組一直采用C/S結(jié)構(gòu)為各種行業(yè)的企業(yè)、工廠開發(fā)管理系統(tǒng)(MIS、MRPII、ERP),雖然對企業(yè)宣稱開發(fā)的系統(tǒng)屬于MRPII、ERP等等,富麗堂皇,但事實上項目組的成員只有技術(shù)背景,根本沒有管理背景,而且項目組中沒有經(jīng)驗豐富、高瞻遠矚的行業(yè)顧問、架構(gòu)師,設(shè)計、開發(fā)出來的所謂MRPII、ERP實質(zhì)上就是復雜一些的MIS,根本無法為企業(yè)的管理、決策帶來幫助,唯一能看到的只是系統(tǒng)幫企業(yè)管理各種數(shù)據(jù)、出一些數(shù)據(jù)統(tǒng)計報表而已。每完成一個項目,有終于可以完工的快感,但很快就被客戶的抱怨所淹沒,我也逐漸意識到自己不能再定位在programmer的層次了,一個再優(yōu)秀的programmer,也只是能寫出優(yōu)秀的代碼而已,卻不能為企業(yè)提供一個優(yōu)秀的系統(tǒng)。Programmer只能停留在系統(tǒng)的局部,而系統(tǒng)架構(gòu)師(Architect)則肩負著整個系統(tǒng)構(gòu)架的重任,毫無疑問,架構(gòu)師對于一個項目的成敗起著關(guān)鍵的作用。我認識到信息技術(shù)在企業(yè)中的應(yīng)用越來越重要,也越來越復雜。隨著ERP靜寂之后,CRM、DPR、e-ERP、e-business等逐漸成為熱點,J2EE、.NET等新技術(shù)也逐漸成為程序員的新寵。信息技術(shù)已經(jīng)日新月異,我感到學習更多先進技術(shù)的同時,應(yīng)該確定新的目標。我不再滿足于做一個優(yōu)秀的programmer,當時我確定了自己的目標是成為一個優(yōu)秀的系統(tǒng)架構(gòu)師,但首先我會努力讓自己成為一名優(yōu)秀的軟件工程師。當時我對架構(gòu)師的認識是:架構(gòu)師負責理解系統(tǒng)的業(yè)務(wù)需求,并創(chuàng)建合理、完善的系統(tǒng)體系架構(gòu),架構(gòu)師也負責通過軟件架構(gòu)來決定主要的技術(shù)選擇。架構(gòu)師要求有完善的知識體系,扎實的技術(shù)功底,了解當今流行的各類技術(shù)和產(chǎn)品。
總結(jié)大三、大四兩年的開發(fā)生活,我感覺到自己對IT有一定的天賦和較高的熱情,而且興趣很濃,再加上自己扎實的數(shù)學基礎(chǔ)、嚴謹?shù)倪壿嬎季S和很強的學習能力,已經(jīng)能夠較好地勝任programmer的角色。但這不是自己的目標,有著兩年的programming體驗后,我意識到自己應(yīng)該向更高層次進軍,而不應(yīng)滿足于現(xiàn)狀。大四后半段,憑借著自己優(yōu)秀的學業(yè)成績,我順利拿到免試攻讀本專業(yè)碩士學位的資格,我希望可以通過研究生階段的學習,學習更多的知識以及科研方法,使自己得到提升。