久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

一個老程序員的心得

時間:2019-05-12 08:47:44下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《一個老程序員的心得》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《一個老程序員的心得》。

第一篇:一個老程序員的心得

1個老程序員的心得

[size=4]不知不覺做軟件已經做了十年,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手,因為和我心目中真正的高手們比起來,還差的太遠。世界上并沒有成為高手的捷徑,但一些基本原則是可以遵循的。

1.扎實的基礎。數據結構、離散數學、編譯原理,這些是所有計算機科學的基礎,如果不掌握他們,很難寫出高水平的程序。據我的觀察,學計算機專業的人比學其他專業的人更能寫出高質量的軟件。程序人人都會寫,但當你發現寫到一定程度很難再提高的時候,就應該想想是不是要回過頭來學學這些最基本的理論。不要一開始就去學OOP,即使你再精通OOP,遇到一些基本算法的時候可能也會束手無策。

2.豐富的想象力。不要拘泥于固定的思維方式,遇到問題的時候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想象力是建立在豐富的知識的基礎上,除計算機以外,多涉獵其他的學科,比如天文、物理、數學等等。另外,多看科幻電影也是一個很好的途徑。

3.最簡單的是最好的。這也許是所有科學都遵循的一條準則,如此復雜的質能互換原理在愛因斯坦眼里不過是一個簡單得不能再簡單的公式:E=mc2。簡單的方法更容易被人理解,更容易實現,也更容易維護。遇到問題時要優先考慮最簡單的方案,只有簡單方案不能滿足要求時再考慮復雜的方案。

4.不鉆牛角尖。當你遇到障礙的時候,不妨暫時遠離電腦,看看窗外的風景,聽聽輕音樂,和朋友聊聊天。當我遇到難題的時候會去玩游戲,而且是那種極暴力的打斗類游戲,當負責游戲的那部分大腦細胞極度亢奮的時候,負責編程的那部分大腦細胞就得到了充分的休息。當重新開始工作的時候,我會發現那些難題現在竟然可以迎刃而解。

5.對答案的渴求。人類自然科學的發展史就是一個渴求得到答案的過程,即使只能知道答案的一小部分也值得我們去付出。只要你堅定信念,一定要找到問題的答案,你才會付出精力去探索,即使最后沒有得到答案,在過程中你也會學到很多東西。

6.多與別人交流。三人行必有我師,也許在一次和別人不經意的談話中,就可以迸出靈感的火花。多上上網,看看別人對同一問題的看法,會給你很大的啟發。

7.良好的編程風格。注意養成良好的習慣,代碼的縮進編排,變量的命名規則要始終保持一致。大家都知道如何排除代碼中錯誤,卻往往忽視了對注釋的排錯。注釋是程序的一個重要組成部分,它可以使你的代碼更容易理解,而如果代碼已經清楚地表達了你的思想,就不必再加注釋了,如果注釋和代碼不一致,那就更加糟糕。

8.韌性和毅力。這也許是“高手”和一般程序員最大的區別。A good programming is 99% sweat and 1% coffee。高手們并不是天才,他們是在無數個日日夜夜中磨練出來的。成功能給我們帶來無比的喜悅,但過程卻是無比的枯燥乏味。你不妨做個測試,找個10000以內的素數表,把它們全都抄下來,然后再檢查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這一條。

這些是我這幾年程序員生涯的一點體會,希望能夠給大家有所幫助 做了快三年的程序員了,有一點小體會和大家分享一下.1.好鋼是由鐵煉成的.一名好的程序員必須經過千錘百煉才行, 挫折是程序員最大的寶,要能承受挫折,戰勝挫折,只有不斷經受挫折,從挫折中吸取經驗,教訓,這樣你才能成為真正的程序員.2.手是好漢,眼是懶漢.看會不是目的,要會寫,勤動手,熟練書寫各種常用代碼,在學習之初 可以不借助IDE來書寫代碼,反復練習,熟能成巧,毋庸置疑.3.穩中求勝,小心使得萬年船.程序員最忌諱毛躁.代碼多,項目大的時候,錯誤是在所難免的,但低級錯誤一定不能犯,盡量把錯誤壓到最低,這就要求我們程序員養成穩重,多思維的方式,切忌浮躁,養成良好的書寫習慣和正確的思維方式.4.做就做程序員,不要做高級打字員.每個程序員都是從基礎學起的,在學的時候一定要把握好方向不要被眾多的語言,概念所迷惑,學的是語言,學的是編程思想不要在IDE上下功夫,研究哪個好,哪個壞,要敢于創新,程序是死的人是活的,在活人手里,也要讓程序活起來.多學多看數據結構等書多看別人的成型代碼,學習別人的思想,使自己成為真正的程序員.5.敢想敢做,持之以恒,一切皆有可能!

一點薄思庸見送給賽迪網java版的初學者們,僅代表本人個人意見,如有任何各位大蝦有好的方法或意見可以跟帖提出.java開發八榮八恥

以動手實踐為榮,以只看不練為恥。以打印日志為榮,以出錯不報為恥。以局部變量為榮,以全局變量為恥。以單元測試為榮,以手工測試為恥。以代碼重用為榮,以復制粘貼為恥。以多態應用為榮,以分支判斷為恥。以定義常量為榮,以魔法數字為恥。以總結思考為榮,以不求甚解為恥。

從大學開始到現在,學習編程已經四年了,在過去的四年里學了不少的東西,總感覺自已還行吧。怎么著也能找個好的工作。加上在學校表現良好,大專一畢業就順利應聘上一個政府機構的工作。雖然工資不算多,但也穩定。但總覺得自己有點屈才.一天,見到本市的一家知名軟件企業的招聘信息,就把自己從大學三年到現在寫過的一些東西簡單地寫了一份求職信過去(不是想跳槽,只是想測試一下我現在這份工作丟了,在社會上我能夠達到什么程度)。

沒想到,第二天,那家公司就叫我過去應聘了。感覺很突然,總覺得一些軟件公司在人才網站上打一些招聘信息總是借此做大做廣告,并不是想招聘人,就是要招聘人,可能因為這種因素的機率都很小吧。(這是我一直以來對人才網站上某些軟件公司的招聘信息的看法),不過卻增加了幾分信心,于是我便興沖沖的去了。

到了公司,首先就讓我填寫一張表格,填寫完一張表格以后安排一個技術主管過來與我談,談的倒不是一些深入的技術問題,我基本上的都能應上來。接著就是上機測試。測試的題目是寫一個人員信息的插入、修改、顯示。主考官說只需要寫一個功能就是,只是希望看看我的編程風格。于是我把數據操作寫了一個類,然后在按鈕的事件里得到輸入框值,組合一個SQL,傳到數據操作類里面去執行,然后返回插入結果就可以了。完了,很快搞定。馬上叫主考官過來看吧。呵呵,小意思。

主考官過來了,首先就在姓名的地方輸入好長的一串字符串,接著一陣亂輸,完了,出問題。名字太長了,郵件沒有限制,身份證沒有限制,生日沒有限制,完了,完了,我想,這么點東西,就出問題了,我心里好一陣緊張。還好就是主考官的態度還不錯,說:“雖然你做了足夠的注釋,縮近也注意了,但是卻沒有對輸入的值進行判斷,我們這為合理的判斷也是好的編程風格,再者,你雖然把數據操作寫成了類,但也有很多的改進,一是。。二是。。”說完以后還鼓勵我接著寫剛才的代碼。當時真是很是感動,但感動歸感動,說老實話,這些判斷平時還真的沒有寫過多少,都是寫一個以后,COPY過去COPY過來的用,現在一時還覺得有些短路,不知道如何是好,然后,就是按鈕的事件中寫對數值的判斷。終于完成了,再看看表,時間距剛開始測試已經快一個小時了。

主考官過來看了,覺得功能都實現了,就叫了公司的一個副經理(后來才知道的)來繼續面試我。這個副總就到我到另外的一個會議室去,問了我一些技術概念的問題,結果我基本上都答不過來(我以前覺得我能夠用就夠了啥,沒有太大的必有對這寫概念的條款記得這么清楚啥),結果,那位副經理訓斥了我一下,說:“你對這些概念都不清楚,怎么了解其間的性能呢,不了解性能如何開發高效率的程序呢?”(整個談話這句最讓我滿意,其他的都是“我們是專業的軟件公司,很注重軟件的性能,編程風格等等如事云云”),最后問了我的薪水要求和能不能適應公司的開發等就叫我回家去等消息。

當然,由于后面沒有過關當然也沒有應聘得上。更當然,我吸取了這次應聘的經驗,總結以下幾條來做為以后學習的信條,寫出來與大家共勉:

一,學習應該從基礎抓起,注意學習的每個細節,爭取學精,避免為了開發而開發。

二,在以一門語言為主功語言的同時,要學習一下與之相關的其它技術。

三,長常保持對新技術的關注,了解未來發展的方向,做到有的放矢。

四,多參與項目開發,在項目中發現問題,解決問題,才能更好的了解學習中的細節問題。

五,加強交流,多寫文章,多發源碼,多收取意見,在交流學習并提高,才能更快了解自已的不足。

六, 永遠相信下一個作品是最好的....業余程序員最喜歡做的一件事就是對不同的語言進行比較。Java是否比C++好?C#是否會成為終極語言?凡此種種。從專業程序員的角度看來,這是最低級無趣的游戲。

其一,在項目諸元確定之后,通常并沒有選擇語言的余地;其二,語言的生存本身就是一個達爾文主義的問題:設若兩種語言有明確的可比較性,其中較劣的那一種必定早已被淘汰出局,又何來比較的必要?所以,有“C++之父”美稱的Bjarne Stroustrup博士常常聲明自己不會拿C++與其他語言比較——偏偏每次接受采訪時,必定有外行的記者或聽眾提出這一類最令他反感的問題,這是題外話,按下不表。

丟開實用主義的觀點,從美學(或者說,計算機科學)的角度來看,語言的比較似乎并不像它通常所表現的那么低級。畢竟,既然維特根斯坦反復強調“語言制訂游戲的規則”、“凡不可言說者必保持沉默”,可見語言并非僅僅是可通約的思想的映射,語言本身就決定思想的方式。使這個問題顯得那么低級而業余的,往往是業余程序員討論它的方式:僅僅憑著自己對幾種語言一知半解的認識、僅僅憑著使用一種語言的習慣、甚至僅僅憑著一種宗教狂熱來展開討論,這樣的討論自然是不值一哂的。

我是不是已經提到了“宗教狂熱”這個詞?如果說對語言的喜愛(或者憎惡)可以成為一種宗教狂熱,就有那么一些人可以憑著宗教般的狂熱成為開發高手,Ian Joyner無疑屬于這種人。1992年,在Unisys用C++開發UNIXX.500時,Joyner感到C++讓他“不自在”,于是就寫了一篇題為《C++批判》的報告,張貼在Unisys的內部新聞組上。到此為止,一切都沒有什么不同。但Joyner與其他宗教狂熱者的區別在于:他有著遠為深厚的理論基礎,以及鍥而不舍的毅力。于是,《C++批判》有了第二版和在Internet上廣為流傳的第三版。到1998年,這篇典型的論壇文章終于變成了一本書,“批判”也徹底變成了語言之間的比較(參與比較的另外兩種語言是Java和Eiffel),這就是我手上的《對象揭秘:Java、Eiffel和C++》(Object Unencapsulated:Java,Eiffeland C++,人民郵電出版社2003年7月)。

盡管宣稱自己反對“宗教戰爭”,但顯然Ian Joyner是深諳宗教戰爭之道的。從批評的方式來說,他與其他人并無不同:首先立論(“Eiffel是最好的語言”),然后不斷變換角度批評對手——時而是數學理論的完備性、時而是使用的便利和可靠、時而是命名的清晰??論據的選取完全只是為論點服務。也正因為此,這本《對象揭秘》足以讓絕大多數的語言比較者感到羞赧,因為在同樣的批評套路上,Joyner探索的深度和廣度令他們望塵莫及。譬如說,任何一個負責的語言比較者都必然會提到“繼承和類型系統”這一話題,但Joyner卻把這個話題寫成了長達63頁的一章(第5章,“類型擴展:繼承與虛擬”),并在后面的章節(第9章,“類型轉換”)中繼續討論相關的問題。拋開篇幅不談,單是Joyner習以為常的文法解讀、Lamda演算法和簽名變化理論,就足以使不夠水準的批評者自慚形穢了。

因此,在我看來,這本《對象揭秘》完全有理由成為所有語言比較者的必讀書目——也許說“入門書目”會更準確一些?因為你能想到的任何一條批評,Ian Joyner很可能早已做了鞭辟入里的闡述。如果在細讀《對象揭秘》之前妄自作評,結果很可能是貽笑大方。另一方面,在批評的方法上,Joyner為后來者作出了表率:簡單的反對與謾罵毫無意義,用錢鐘書的話來說,“反其道以行也是一種模仿”;只有拿出充足的論據,再拿出合理的解決方案,才稱得上一個高明的批評者。當然,這樣的“入門書目”也許讓門檻顯得太高了一點。但對于“Java和C++誰更好”這樣一個通常只會令人感到莫名煩躁的話題,門檻總是不厭其高的。

像我一樣的Java人常常會抱怨“Java的經典書籍太少了”。C++的經典好書總是層出不窮,實在令人艷羨——當然真正擁有這些書的人也同時擁有不少的煩惱,我就有最深切的體會。在這本《對象揭秘》中,IanJoyner順便也半開玩笑地揭開了這個秘密。也許,這句半開玩笑的話會成為Java人喜愛這本書的另一個理由:

“??學習C++要花那么長時間??,要比Eiffel和Java都長得多。花那么長時間還未必掌握編程或者面向對象設計技術。這也是為什么關于C++的書籍那么多而Eiffel和Java不需要那么多書的原因。”

我是初中時接觸編程的。那時父親廠里買了一臺微電腦,而我父親,當時正好可以接觸到這臺微機,于是,頗具戰略眼光的父親便開始幫我尋找各種書籍資料,讓我學起了計算機。

第一眼看到它,我就被吸引住了。那是在當時也很差的一種名叫“R1”的微機,可是顏色實在漂亮,典雅的奶黃色,配著深綠的按鍵,按下不同的鍵還有不同音調的悅耳的聲音。跟當時風行的大多數八位微電腦一樣,整個機身實際就是一個鍵盤,比現在PC機通常的鍵盤還要小,顯示器就用電視機。當我第一次把從書上抄下來的寥寥幾句的一個Basic程序從嘀嘀作響的鍵盤上敲入,最后再打進了“RUN”,而屏幕上忠實地顯示出了結果后,我就不可救藥地迷上了編程。父親的廠離家有五公里,每個星期天我都要自己一個人步行五公里,把一個星期里自己寫下的一大堆Basic程序拿來調試,當然一大半都被它冷酷的拒絕了,所以每次有一個程序通過了,我都會興奮的叫起來。那時我的體力不好,五公里走下來,相當累,還經常小腿抽筋,可是一坐到電腦前,聽見打開時“嘀”的提示音,一切的痛和累都消失了。

漸漸地我的程序通過率越來越高了,程序的規模也在增長。但是,那臺外表可愛的電腦卻開始不堪重負了,運行速度本來就慢,又加上效率低下的解釋性Basic語言,讓我實在不可忍受。于是,父親又到新華書店為我訂下了一本《Z80匯編語言》的書。書一到,我就捧起這部大塊頭的書,開始用我初中的程度一點點地啃。邊啃邊實驗,終于掌握了Z80匯編語言,又在電腦不具備輸入匯編語言能力的情況下,手工翻譯成機器語言,再通過Basic語言中的Poke語句把二進制代碼輸入內存,然后用Basic程序調用。在不懈的努力下,終于成功地做出了一個匯編語言的動畫程序!在這次成功之后,我就開始相信,只要肯鉆研,沒有學不會的技術,沒有克服不了的難題。

初中畢業后,我以全縣第一的成績進入了一所附近城市的省重點中學,從此我的眼界開始逐漸拓寬了,以后,我用到的電腦越來越高級,從高檔八位機蘋果電腦,到今天主頻以G計,內存以M計的奔四電腦,當年那臺主頻內存都只能以K計的八位機已是進了歷史博物館。但是這臺引領我進入編程領域,并且更驅使我深入鉆研匯編語言的電腦,將是我記憶中最珍貴的收藏之一。

在重點中學,學業的壓力是很重的,又是住校獨立生活,對于體力已較大程度下降、行動已呈現出不少不便的我,平添了幾許額外的困難。高中的第一年沒有計算機課,我只能在假期回家后才能有機會繼續學習編程,也以此來忘記一學期的壓力和苦累。高二時,終于盼到了計算機課,也見到了當時相對高檔的蘋果電腦。而我此時已有的基礎令老師吃驚,同學驚服。我加入了計算機興趣小組,開始在性能遠遠好于原來那臺電腦的蘋果機上快樂的編程了。在高二的暑假我和計算機老師一起給學校做個工資管理軟件。在學校里的一周時間內,由于宿舍已經鎖掉不能住,我就睡在了辦公室里。位于郊區的校園,蚊子格外多,咬的我一直睡不著。到了后半夜,我索性爬起來,打開了電腦干活。就這樣,我幫著老師寫程序、錄入數據,并且在即將交貨時找出了一個大BUG,又正確地判斷出問題根源在內存不足,算是立下了一個小功勞。

由于高考發揮出色(尤其是物理的滿分),我進入了北京大學物理系。在大學里,計算機上機條件就更好了。當時蘋果的Macintosh剛剛推出,給我們系捐了好多臺組建了計算機室。這個計算機室從此就成了我大學四年最常去的地方。一年級的時候有兩門計算機課,一門是Fortran語言,一門是Pascal語言。而Pascal語言基本是我們自己學,每到晚上計算機室向我們開放。那是我第一次見識“窗口”形式的操作界面。第二年,計算機室的機器換成了386和Dos系統了,但是上機機時卻被限制住了。不能滿足的我到處找不喜歡計算機的同學借機時卡,好讓我有足夠的時間調試自己寫的程序。到了第三年,北大招生更多,系計算機室天天爆滿,所以上午只要沒課,我就會起個大早到機房門口等待開門。在一個寒冷的冬晨,還因此著涼發燒而暈倒在機房門口。就這樣,我熟練地掌握了Turbo Pascal和Turbo C++,也學習了好多相關的理論知識。

畢業后,我終于如愿以嘗當上了程序員。我被分配的任務,起先是用Delphi做一些文字處理的工具,供編輯部和數據部使用。后來Internet開始興起,又委派我寫為網絡版期刊使用的一些CGI程序。工作一直都很順利,我的眼界與編程水平也在穩步成長。兩年后,為了有更好的發展,我離開了我工作的第一家公司。這時,我把求職的陣地移到了網上。不久,就在某網站上看到了一家合資軟件企業的招聘啟事。盡管啟事上說明不接受來訪,我仍然勇敢地拿著簡歷于第二天趕到公司所在的翠宮飯店去求職了。幸運仍然在籠罩著我,這次我直接見到了經理,向他表達了自己對于編程的熱愛。我說,我夢想著成為IT業的傳奇英雄。也許是這句話感動了他,我成功的通過了面試。在這家公司,我第一次作為一個龐大項目組的一員,感受到了現代化的軟件項目管理,接受了團隊精神的洗禮。

在北京做了五年的程序員,這時候,我聽到了來自深圳的召喚。早在99年,我就在網絡上找到了一個位于深圳的名為“中華殘疾人服務網”的殘疾人網站。一天,我在這個網站的留言本上看到了站長的一席因殘疾人網絡事業缺少技術支持而發的感慨,不由心有所感,便留言說,愿投入殘疾人網絡事業,而不計待遇。從此,我的人生翻開了輝煌的一頁。那是2002年的10月6日。

起初以為,這個網站會類似于僅僅出于興趣的個人網站,走進去才真正發現,這是個志存高遠的團隊。而我真正感覺到了團結一致共創大業的團隊精神。在同樣因病致殘的站長有力領導下,這里基本解決了殘疾人在生活會有的種種不便,克服了許多社會上普遍存在的障礙,從而可以讓我充分發揮聰明才智,全身心地去攀登IT技術的高峰。

加入網站之后,我完成的第一個任務是改進網站新聞系統,增加圖片上傳和自動圖文排版功能。以前沒有做過ASP程序的我在原有的ASP程序的基礎上,通過學習和分析源代碼,完成了這個任務,同時也掌握了基本的ASP編程技術。然后,我又獨立完成了一套社區論壇程序,這套程序受到了全國以至海外殘疾朋友的歡迎,成為了許多足不出戶的殘疾朋友與網友熱烈交流的園地。也讓我從中看到了自己的價值。后來,因為網站的網管不辭而別,我又接過了網管的重任,從此一面開發程序,一面又管理著我們自己的兩臺服務器。盡管壓力和工作量成倍地增加了,卻使我同時掌握了兩個領域的技術,而這兩方面的技術又互相促進,使我的知識結構更為全面。

由于我們沒有外來資金的支持,要維持中華殘疾人服務網這個福利公益網站的運轉,必須走以網養網的道路,即為企業、政府提供信息化建設服務,以獲得經濟收入。所以,在給網站開發和升級程序之余,我又開始進行商業網站后臺程序的開發。僅網站新聞系統,就在兩年內從1.0版升級到了6.0版;還有大量為企業量身定做的功能程序。這些程序在網站原本就強大的前臺設計的包裝下,受到了市場的歡迎。網站也由此發展壯大。今天中華殘疾人服務網在全球排名中穩步上揚,進入了三萬以內的行列。

在承接網站建設工程的同時,一些客戶也開始找我們開發應用軟件。第一個應用軟件項目是一家與廣東移動通信有業務關系的公司,因為自身沒有軟件開發能力,便請我們合作為廣東移動通信做一個《“測試卡”管理系統》。根據要求,我設計了使用條形碼的輸入方案,又使用SQL數據庫作為局域網聯網的后臺數據庫解決方案。由于是第一次全程的開發與服務,在進行以前沒有接觸過的安裝過程中出現了大量問題,又沒有充分做好應對的準備,造成了一些被動局面。但是最終我仍然想出了臨時的解決方法,順利地完成了測試版的交付。遺憾的是由于中介的公司人事調動,這個項目最終沒有進行下去。

很快又一個重大考驗落在了以我為首的網站開發隊伍身上。這是一直從各方面扶持我們的深圳市信息化辦公室交給我們的任務。要求是我們收集深圳市所有的網站,以PDF電子書的形式印刷在光盤上。同時要有一個完善的分類搜索系統。時間緊、數據量大,而且不允許出現任何差錯。為了證明殘疾人團隊的開發能力,我和大伙都拼上了。而在送交初稿的前一天晚上,更是全民動員,站長第二天一大早要親自帶上光盤送去,但他也一起在熬夜。那個不眠之夜是我編程生涯中效率最高的一夜。不久后,這個項目終于完成,看著出自我們的頭腦和雙手的幾千張光盤,我知道自己的努力沒有白費,而自己的能力也提升到了一個新的境界。這個項目,在那些大公司看來也許是不值一提,可是對于一個核心成員僅五六人、而且全部是殘疾人組成的一個項目組,是非常了不起的成就!

2003年12月,世界殘疾人職業技能奧林匹克在印度新德里舉行,我有幸代表中國的殘疾人參加了其中編程項目的比賽。在中國,殘疾人的就業問題是一個大問題,因此,這種殘疾人的職業技能競賽尤其有意義。2002年12月,我以廣東省冠軍的身份取得了2003年在上海參加全國比賽的資格。2003年8月,我在上海憑著多年的編程經驗和創新精神,又取得了參加中國殘疾人代表團出征印度的資格。遺憾的是,在賽場上,為了追求更好的界面效果,我耽誤了一些時間,以至在最后因時間過于緊張,出現了一個致命的失誤,將本來有希望得到的獎牌拱手相讓。唯一的安慰,就是我的程序界面受到了印度裁判的稱贊。

從國外回來,我又打開了.NET的大門,準備帶領網站的幾個做程序的殘疾朋友進入.NET的開發。對未來,我充滿了信心,而新的夢想,又開始浮現在我眼前!

現在我的身份,一半是軟件工程師,一半是高級程序員。隨著網站這個實體的發展,我也許會逐漸成長轉型為軟件架構師,但是我仍然會夢想著掌握最高的編程技術,仍然愿意承擔基礎性的編碼工作。我相信,保持開放的心態,保持年輕的心態,再老也能做程序。當今的數字化時代給殘疾人士尤其是肢殘人士帶來了新的機會和挑戰。現在,純粹腦力勞動的門檻,因為程序員門檻的大幅度降低而降低,給更多由于社會原因而教育程度相對偏低肢殘人士提供了經過培訓進入初級程序員行列的機會。但是,這些機會要想轉化為現實,還需要更多更廣泛的“無障礙”環境的支持。我的第二個夢想,就是夢想中國能夠出現更多的“軟件工廠”,而這些“工廠”又是向殘疾人敞開大門的。

十年編程生涯,歷經了風雨坎坷,而程序代碼給我插上的翅膀在風雨中更加硬朗。今天,我喜歡在程序代碼的世界中自由飛翔。讓病魔去禁錮我的身軀吧,我的靈魂仍然在廣闊的世界里翱翔??

“我不是程序員”,楊過在電話那頭淡淡的說。楊過是大學同學叫他的外號,因為他的氣質和金庸造的楊過最像,連一些感情遭遇都像。

拒絕做程序員,雖然很火

楊過畢業那年軟件公司很火,據說在中關村隨便一個剛畢業的寫C程序的畢業生月薪一不小心會上萬。于是乎楊過不少的同學們畢業后紛紛改行編起了程序,跳進了大家現在也沒說清楚的IT行業。說改行是因為楊過學的不是計算機專業,只是沾上邊。

楊過那時根本不屑于做編程,雖然那時班里就他最喜歡打軟件游戲。他覺得去編程不是什么“正經事”,所以畢業后他去了大連一家生產糧油的集團企業,楊過說是“一顆紅心投入四化建設”。

由于不想拍馬逢迎,楊過徹底打消了“磨豆油”的念頭。不過他沒有直接留在大連找工作,而是跑到偏遠的老家和他青梅竹馬的高中同學結婚去了。楊過的感情故事太有傳奇色彩,跟金庸那個楊過有一拼。因為新婚的妻子在大連不好找工作,當時他留在家里,找了一個小公司用電腦給人設計零件圖。

本來大多數人的工作就是混口飯吃,楊過也不嫌公司小,老老實實過日子吧。可讓他接受不了是,公司的老板經常借口讓他熟悉工作為名把他當民工使,一氣之下楊過回了大連,幾個月也是白干,工資沒拿到一分錢,因為工資是三個月一發。楊過借口看病從老板那里借了幾百塊錢,老板也明白怎么回事,就給他了。直到現在,楊過還算是借著這個公司的幾百塊錢。

還得做程序員

楊過先自己回到大連,到人才市場一看,鋪天蓋地都是要程序員。“唉,不服氣不行,社會發展趨勢啊”。電話那頭的楊過一直在嘆氣。

畢竟楊過是重點大學畢業的和計算機相關專業,那時還很吃香。他很快找到一家做尋呼臺業務的軟件公司。由于以前“沒睡決時還看看計算機書”,他上手還挺快。干了一年,他跳到現在的這家公司,工資漲了一大截,在大連還算可以,老婆也接過來了。

楊過老婆剛開始在影樓做過一段,后來生病就沒再做。楊過說現在工資也夠兩個人花的,也不逼她找了,也不好找。

我不是程序員,也不考慮明天

楊過現在的這家公司雖然也不算小,主要是做政府機構的一些單子,但為了生存業務還是比較雜。楊過感覺自己“天天這編一點、那寫一點,從來沒有好好從頭做過一個正式的項目”。“我不是程序員,”他說,“可大家都這個樣子。”

公司里只有楊過一個人結婚了,其它都是小伙子。“以前沒睡覺還看看書,現在沒心思了”,楊過調侃。

由于換了幾個工作,楊過的國家基本保險也搞的亂七八糟。“我仔細研究過國家的一些文件,自己掏錢交那些基本保險沒有什么用”,楊過現在和老婆都沒有基本保險,自己存錢保險。

楊過無奈的笑笑,“也存了一些錢,前一段老婆病了都交給醫院了。”

最近,看到論壇一貼子,主題是:我從校園出來的這幾年。里面可熱鬧了,回復次數竟然達1425次,我讀了幾個鐘都沒看完,最后只能大概瀏覽一下了,不過里面大多數都說自己是程序員,并且出來工作都不容易,可謂是一部“千人辛酸史”了,從中多少反映出了中國不少程序員的生活狀況,不知道打算做程序員或者現在正入門的程序員朋友看了作何感想?

說實在的,目前在中國的程序員大都過得不容易,而且普遍表現為“青春飯”狀態,工作量大,導致對新知識的吸收能力隨著年齡增大而降低,到了一定年齡(30后)后因為跟不上時代發展面臨淘汰的厄運。雖然如此,但讓我覺得欣慰的是的不少程序員或打算做程序員的朋友都表示堅持在程序員的路上走下去,因為我也是一名程序員,而且我對未來充滿陽光,充滿希望。

我記住了這樣一個簡單的道理:過去并不代表未來!相信沒有人會不知道這個道理吧!大多程序員過去的辛酸大都可以歸結于中國軟件產業的發展的不成熟,而現在,中國政府制定政策大力扶持軟件產業的發展,而且不少國際軟件企業也看好中國的軟件產業,紛紛把投資向中國傾斜,而且國內也開始有了不少比較成熟的軟件企業,當然與國外的一些軟件企業相比,還有一大段距離。但它表明中國的軟件產業開始向規模化,規范化的方向發展了。

印度在軟件方面,在我們看來是成功,印度政府在1991年就制定相關扶持政策,到現在也有10多年了,才取得成功,另一個在軟件方面比較成功的亞洲國家——韓國,它也在1998年就制定了相關扶持政策,到現在也取得了一定的成功,用時不過4-5年,那么中國的軟件產業呢?要多久才能成熟起來呢?引金山總裁雷軍的話,3年左右有所成就,到全面成熟那就要比較長的時候了,但中國軟件產業的成熟和前述國家成熟概念不一致:印度是定位于軟件外包而取得成功,韓國定位于網絡游戲取得一定成就,而中國呢?定位于什么呢?中國的定位是組合式的,不是某一方面,而是全面的。

可以相信:在未來,中國的軟件產業無論在產業結構上,還是人才結構上都會具有優勢。關于后者,你只要看看中國建立的50多所軟件學院就可見一斑了,而且還有很多像印度的NIIT,北大青鳥(中外合資)等著名的國外軟件開發教育機構進入中國,把先進成熟的教育模式帶入了中國。

但是,以上的教育機構培養目標都不是精英程序員,而是最近大家抄的很熱的“高級軟件藍領”,成熟模式中的軟件開發團隊中需要“金領”,“白領”,再到“藍領”,而中國軟件企業大多是小企業,最需要的是能獨擋一面的“金領”,“白領”程序員,并不需要那么多只會Coding的“藍領”程序員,我想很多混的不那么好的程序員,大概你是屬于“藍領”程序員吧!

任何時代,任何時候,機遇總是垂青于有能耐的人的。但是,即使你現在不是“金領”,或者“白領”程序員,你還不是精英,而僅僅是“藍領”程序員或者還不是而想成為程序員的你聽到這句話,千萬不要泄氣,要相信你自己是將來的精英,雖然現在的生存環境不是那么好,但是,恰恰有更多機會讓培養自己獨擋一面的能力,隨著中國軟件產業的發展,將會需要大量有數年工作經驗,有整體系統架構能力的人才,而這些恰恰是任何學校都無法培養的人才,而現在的程序員,只要你們不放棄夢想,不放棄追求,繼續努力,你們將成為軟件產業的中堅力量!軟件人才的佼佼者。

最好,告訴大家一項調查,硅谷的程序員的平均年齡是35歲左右,而且微軟公司的核心開心者大都在35歲以上,可以遇見,程序員不在是“青春飯”,也會有“老來悄”的“老資格”了!

冬天來了,春天還會遠嗎?——謹飭送給所有的中國程序員。

如同一首民歌《三十里鋪》所言,路行三十要有個歇腳的地方,人行三十也要喘口氣。在IT,特別是程序員這個特殊的職業,流傳一種說法:30歲是職場上的一道檻,事業上此時會發生了許多變化。30歲和程序員真有某種特殊的聯系嗎?程序員到底能不能做到30歲以上呢?

J曾是一名計算機老師,因為厭倦了學校平淡的生活,應聘到一家開發嵌入式系統的公司做底層程序員。剛開始的一兩年,憑著一股熱情和鉆勁兒,投入到如火如荼的開發中,甚至購置了睡袋以備晚上加班。兩年中,他掌握了極其專門的硬件參數、規格、開發細節等知識,成為部門的骨干。

逼近30歲的那幾個月,他開始感到有些困惑。自己在公司雖然還算受重視,但是技術上翻來覆去就是那幾樣爛熟于心的東西,公司只需要自己慣性運作,實際不愿支付經驗轉換的成本;而公司的原始積累還遠遠未完成,自己仍然要和剛畢業的大學生一起加班,通宵達旦的干。因為缺乏人際交往,家里一直催著的婚姻大事,至今還八字沒一撇。很多同時期來的人都打算往管理轉了,可是自己對管理缺乏興趣,還是樂于從事技術工作。下一步怎么辦?J想到了辭職,但還沒有什么方向。

相比J,M要幸運得多。作為清華計算機本科、中科院研究生畢業的高材生,M在做項目經理時就能夠月收入2萬,先后換過3家公司,對所謂30歲的說法不以為然。M以前的項目都是用CMM做,項目管理很好,而核心的也就幾個人。手下帶過的人,當然是剛畢業的最差,因為要獲得30歲時的經驗,顯然需要一個過程。M最開始做程序是用Debug單步跟蹤、分析、定位;后來開發圖形界面的上層程序,哪怕半年寫1萬行,也覺得不叫程序;只有到后來轉到做底層開發以后,雖然半年只寫到2000行,但是卻感到了寫程序的快樂。M認為30歲以后程序員的體力不是問題,好的程序員不經常熬夜,有也是臨時的。M接觸過國外、比如印度的一些公司,技術人員們沒有固定辦公室,用互聯網聯系;很多人年齡都在35歲以上,技術很熟練,思想敏捷,讓人敬佩。

M的職業觀也很靈活。剛剛辭職在家,接點活干,非常忙。M有幾個同學在外企做程序,日子過得更舒服,但是幾年下來,個人、技術均無進展。究其原因,除了像微軟研究院、Intel等一些少數外企還做些研發外,其它外企都是挑國外剩下的做,反而是國外一些小公司倒是把最核心技術放在中國來開發。其它像金山這樣的一些本土企業應該也不錯。做為程序員,機遇、環境、職業(項目)都很重要,它不但直接決定現在的收入水平,更決定未來不同的命運。而程序員這個行業又有極強的主導性,如何做好職業生涯的規劃,恰恰是決定乾坤的關鍵棋子。

程序員圈子里流傳過一套書叫做《編程之禪》和《編程之道》。創造力、邏輯、判斷、體力、智力、手段都是所謂道的一部分,書中有個比喻,程序員編程時,只有硬盤在響。創造本身是一項神圣的工作,但是創造者的果實卻是世俗的。換句話說,年齡的問題本是見仁見智的,但是“30歲的檻”卻是世俗的。國內大部分公司還沒有好到為程序員做好一生的職業規劃的地步,因此路還得自己來走。不要讓過度的重復勞動損害了創造力,也不要太迷信技術的力量,而忽略了世俗世界的張力。“三十里鋪是一個小村莊,小村莊是我們經過的地方。經過的地方向著遙遠的別處,遙遠的別處還是三十里鋪。”

做為一名大四的學生,我面試過不少的單位,有成功的也有失敗的,但是對我來說所有的失敗在某種意義上都是一種成功,特別是我下面寫的這些,寫這篇文章的時,我已經簽了南京的一家軟件公司,但是想起今年2月21日我面試蘇州臺灣的IT公司的經歷聯想到我們現在學習編程的一些情況我真的深有感觸,這次面試使我深深的體會到了失敗但也收獲了很多。

我要說的將分成三部分,1.是我面試的具體經過 2.是由面試想到的 3.現今我應該做的。

當然這些話很大程度上是我個人的意見,不可能完全得到大家的贊同,所以 在某些觀點上如果哪位朋友覺得跟我的有很大出入,請不要介意,也不要對我攻擊,就當我 沒有說過,歡迎和我聯系共同探討這些問題!我的EMAIL:wutao8@263.net

1.面試經過

大約在年前我接到了臺灣瑞晟(Realtek)蘇州公司的面試通知,通知我2月21日到蘇州工業園區面試,接到面試后的幾天我把一些專業課溫習了一遍,特別是C++和數據結構,由于大學幾年里,我一直專研這些方面,加上通過了高級程序員的考試,對于一些常用的算法我差不多也 達到了爛熟于胸的地步,當時的感覺是如果問了我這些方面的問題我應該是沒有問題的!

21日那天我被安排在4:30面試,由一位技術人員單獨給我面試,在問了一些簡單的問題之后 ,他給我出了一道編程題目,題目是這樣的:

(由于具體面試的題目比較煩瑣,我將其核心思想提取出來分解成??(亂碼)

1)寫一個函數計算當參數為n(n很大)時的值 1-2+3-4+5-6+7......+n 哼,我的心里冷笑一聲!沒想到這么簡單,我有點緊張的心情頓時放松起來!于是很快我給出我的解法:

long fn(long n){ long temp=0;int i,flag=1;if(n<=0){ printf(“error: n must > 0);exit(1);} for(i=1;i<=n;i++){ temp=temp+flag*i;flag=(-1)*flag;} return temp;}

搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執行結果肯定是沒有問題!但當n很大的時候我這個程序執行效率很低,在嵌入式系統的開發中,程序的運行效率很重要,能讓CPU少執行一條指令都是好的,他讓我看看這個程序還有什么可以修改的地方,把程序 優化一下!聽了這些話,我的心情當時變的有點沉重,沒想到他的要求很嚴格,之后我對程序 進行了嚴格的分析,給出了改進了的方案!

long fn(long n){ long temp=0;int j=1,i=1,flag=1;if(n<=0){ printf(”error: n must > 0);exit(1);} while(j<=n){ temp=temp+i;i=-i;i>0?i++:i--;j++;} return temp;}

雖然我不敢保證我這個算法是最優的,但是比起上一個程序,我將所有涉及到乘法指令的語 句改為執行加法指令,既達到要題目的要求而且運算時間上縮短了很多!而代價僅僅是增加了 一個整型變量!但是我現在的信心已經受了一點打擊,我將信將疑的看者面試官,他還是微笑 著跟我說:“不錯,這個程序確實在效率上有了很大的提高!”我心里一陣暗喜!但他接著說這個程序仍然不能達到他的要求,要我給出更優的方案!天啊!還有優化!我當時真的有點崩 潰了,想了一會后,我請求他給出他的方案!然后他很爽快的給出了他的程序!

long fn(long n){ if(n<=0){ printf(“error: n must > 0);exit(1);} if(0==n%2)return(n/2)*(-1);else return(n/2)*(-1)+n;}

搞笑,當時我目瞪口呆,沒想到他是這個意思,這么簡單的代碼我真的不會寫嗎,但是我為 什么沒有往那方面上想呢!他說的沒有錯,在n很大很大的時候這三個程序運行時間的差別簡 直是天壤之別!當我剛想開口說點什么的時候,他卻先開口了:“不要認為CPU運算速度快就 把所有的問題都推給它去做,程序員應該將代碼優化再優化,我們自己能做的決不要讓CPU做,因為CPU是為用戶服務的,不是為我們程序員服務的!”多么精辟的語言,我已經不想再說 什么了!接著是第二個問題:

他要求我用一種技巧性的編程方法來用一個函數實現兩個函數的功能n為如:

fn1(n)=n/2!+n/3!+n/4!+n/5!+n/6!fn2(n)=n/5!+n/6!+n/7!+n/8!+n/9!

現在用一個函數fn(int n,int flag)實現,當flag為0時,實現fn1功能,如果flag為1時實現fn2功能!他的要求還是效率,效率,效率!說實在話,如果我心情好的話我應該能給出一種比較好的算法,但我那時真的沒有什么心思再想了,我在 紙上胡亂畫了一些諸如6!=6*5!的公式后直截了當的跟他說要他給出他的答案!面試官也沒有 說什么,給出了他的思路:

定義一個二維數組 float t[2][5]存入[2!,3!,4!,5!,6!},{5!,6!,7!,8!,9!]然后給出一個循環:

for(i=0;i<6;i++){ temp=temp+n/t[flag][i];}

最后得到計算值!呵呵,典型的空間換時間的算法!這些總共花了50分鐘的時間,還有十分鐘我就跟他很隨意的聊聊天,聊了一些編程以及生活 的問題,那時的我已經很放松了,因為我知道這次面試結果只有一個:失敗。5:30的時候面試官要我等通知,于是我離開了他們公司。這就是面試的整個經過!

2.由面試想到的

真的是很失敗啊!我記得那天下好大的雨,氣溫也很低,我邊走邊想,從5:30一直走到7:30,全身都濕透了,又冷又餓,但是我只是一直走,腦子里面充滿了疑惑,我也想讓雨把自己淋 醒!看到這里有些朋友可能覺得那些面試題目不算什么如果讓自己做的話肯定能全部答對,我 肯定相信你,因為我從未懷疑過中國程序員的能力,我認為中國有世界上最好的程序員,我也 從未認為自己是高手,所以我做不出來不代表中國程序員比臺灣或者別的地方的程序員差,所 以我就從我的角度,我的所見所想來談一些感想:

不錯全世界都有優秀的程序員,中國也不例外,但是我疑惑的是:到底中國和臺灣或者國外 的優秀的程序員的比例到底是多少?臺灣我不知道,中國100個程序員里有幾個是優秀的呢?我 根本算不上,從上面的表現就足以說明一切了!是1個?5個?10個?50個?這個數字我不敢亂 猜,恐遭網友一頓痛罵,那么我們國內有多少人學習計算機呢?拿我們學校來說,計算機97級 4個班,98級5個班,99級10個班,2000級17個班,人多了,老師怎么辦?我們學校的做法是讓 研究生上課,然后呢?補考一抓一大把,大把大把的補考費落入了學校的口袋,還說現在的學

生素質低!真是好笑,我都不知道學校這么做是為了什么,為國內培養大量的程序員嗎?學生 們能真正學到計算機知識嗎?好了,我敢講,在我們學校學習編程學生和優秀程序員(注意我 指的是優秀,只會編幾個糟爛程序的人算不上)的比例應該是100:0.1 在這種比例下雖然我們中國學習編程的人鋪天蓋地,但是想想有多少個人能真正為中國軟件 業發展作出貢獻,有多少人能真正寫出優秀的程序名揚海外!

我從學習編程以來,不管是自學還是老師指導,從來都是解決問題就好,編出程序來就行,我的疑惑是:我們有真正的強調過程序的效率,程序的質量嗎?我們有仔細分析過我們寫的東 西,看看有沒有可以改進的地方,看看有沒有簡單的方法來達到同樣的目的呢?我問心自問,我發現,我從來沒有對我寫出來的程序進行過優化,最多就是進行詳細的測試,然后Debug,但是這就足夠了嗎?這些天我偶爾發現我曾經寫過的一個游戲,那是一年做為 其中一員時候,感覺應該拿點東西出來,然后花了一個星期的時間寫出來的!程序不算復雜,但是用到了不少數據結構的東西,也用到了一些精彩的算法,加上windows的界面和游戲的可 玩性,寫完后受到了不少好評,我當時真的很佩服自己!但是現在看呢:沒有一句注釋,好多 丑陋的函數名比如:void chushihua(),好多沒有必要的變量,可以用簡單語句完成工作的我 使用華麗的算法,大量使用全局變量.....,說不好聽的話,六百多行的程序除了能運行之外就 是一陀屎!如果一年前我能聽到一些反面意見的話,大概我能早一點覺悟,但是自原代碼在 網站發布以來聽到的都是贊美之詞,沒有一個人向我提出程序改進的意見,這又說明了一個什 么問題呢?很值得思考啊!

還有一個疑惑是:我們說的和做的真的一樣嗎?我在學校的時候曾經受學院指派承辦過一個 計算機大賽,請了一個老師出決賽的題目,主要是一些算法題目,這個老師可能是我上大學以 來唯一敬佩的老師了,從程序調試到打分,對于每個程序都仔細分析其時間效率和空間效率,然后綜合打分,四十個人的卷子,老師從下午三點一直調試到晚上十點,在有些寫的精彩的語 句后還加上批注。我真是高興很遇到這樣的老師并且和他做深入的交流,但在事后,卻發生了 一件不愉快的事,在比賽中獲得第二名的學生找到我,說他程序全部調試成功應該給他滿分,并且應該得第一,我說不過他,最后調出了他的原程序和第一名的原程序對比,錯,兩個程 序都運行的很好,這時,那個同學開口了:“我的程序寫的十分簡捷明了,僅僅數行就完成了 題目要求,而他的卻寫了一大堆,為什么給他的分多過給我的分。”我當時很是氣憤,如果不 是老師負責的話,那么現在第一名和第二名的位置真的要互調了,拜托,不是程序的行數越少 程序的質量就越高,我記得我跟他大談這方面的道理,最后說服他了!哈哈,但是我,只能說 說而已,我不知道還有多少人一樣,說起來頭頭是道,但心里卻壓根就從未重視過它!

3.我打算做的!

其實那天我想到的遠不止上面那么多,但是我不想再說了,因為我猜想看這篇文章的網友大 概都有一肚子的感想,一肚子的抱怨,借用這篇文章發泄可不是我想達到的目的,在上面我把 自己罵的一文不值也不是妄自菲薄,但是在某些方面我真的做錯了,或者說是偏離了正確方向,現在是矯正方向和重整旗鼓的時候了,就象我前面說過的,我相信中國有世界上最好的程序 員,我也相信我的水平不會一直保持現狀,我現在就收拾起牢騷真正的實干起來!真的很巧,就寫到這里的時候我在網上偶爾發現了這篇手冊,我不知道這預示著什么,但是 我想如果我照下面這個基本原則一直踏實做下去,我一定會實現我的理想---一名優秀的軟件設計師!

(下面這些文字不是我的原創,是我偶爾在網上發現的,我真的很幸運能看到這些,這篇文 章也隨著下面的文字而結束,我真心的希望您能從這篇文章中得到啟發,這篇文章歡迎大家隨 意轉載!)

作者:金蝶中間件公司CTO袁紅崗

不知不覺做軟件已經做了十年,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手,因為和我心目中真正的高手們比起來,還差的太遠。世界上并沒有成為高手的捷徑,但一些基 本原則是可以遵循的。

1.扎實的基礎。數據結構、離散數學、編譯原理,這些是所有計算機科學的基礎,如果 不掌握他們,很難寫出高水平的程序。據我的觀察,學計算機專業的人比學其他專業的人更能 寫出高質量的軟件。程序人人都會寫,但當你發現寫到一定程度很難再提高的時候,就應該想 想是不是要回過頭來學學這些最基本的理論。不要一開始就去學OOP,即使你再精通OOP,遇到 一些基本算法的時候可能也會束手無策。

2.豐富的想象力。不要拘泥于固定的思維方式,遇到問題的時候要多想幾種解決問題的 方案,試試別人從沒想過的方法。豐富的想象力是建立在豐富的知識的基礎上,除計算機以外,多涉獵其他的學科,比如天文、物理、數學等等。另外,多看科幻電影也是一個很好的途徑。

3.最簡單的是最好的。這也許是所有科學都遵循的一條準則,如此復雜的質能互換原理 在愛因斯坦眼里不過是一個簡單得不能再簡單的公式:E=mc^2。簡單的方法更容易被人理解,更容易實現,也更容易維護。遇到問題時要優先考慮最簡單的方案,只有簡單方案不能滿足要 求時再考慮復雜的方案。

4.不鉆牛角尖。當你遇到障礙的時候,不妨暫時遠離電腦,看看窗外的風景,聽聽輕音 樂,和朋友聊聊天。當我遇到難題的時候會去玩游戲,而且是那種極暴力的打斗類游戲,當負 責游戲的那部分大腦細胞極度亢奮的時候,負責編程的那部分大腦細胞就得到了充分的休息。當重新開始工作的時候,我會發現那些難題現在竟然可以迎刃而解。

5.對答案的渴求。人類自然科學的發展史就是一個渴求得到答案的過程,即使只能知道 答案的一小部分也值得我們去付出。只要你堅定信念,一定要找到問題的答案,你才會付出精 力去探索,即使最后沒有得到答案,在過程中你也會學到很多東西。

6.多與別人交流。三人行必有我師,也許在一次和別人不經意的談話中,就可以迸出靈 感的火花。多上上網,看看別人對同一問題的看法,會給你很大的啟發。

7.良好的編程風格。注意養成良好的習慣,代碼的縮進編排,變量的命名規則要始終保 持一致。大家都知道如何排除代碼中錯誤,卻往往忽視了對注釋的排錯。注釋是程序的一個重 要組成部分,它可以使你的代碼更容易理解,而如果代碼已經清楚地表達了你的思想,就不必 再加注釋了,如果注釋和代碼不一致,那就更加糟糕。

8.韌性和毅力。這也許是”高手"和一般程序員最大的區別。A good programming is 99 weat and 1ffee。高手們并不是天才,他們是在無數個日日夜夜中磨練出來的。成功能給 我們帶來無比的喜悅,但過程卻是無比的枯燥乏味。你不妨做個測試,找個10000以內的素數 表,把它們全都抄下來,然后再檢查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這 一條。

這些是我這幾年程序員生涯的一點體會,希望能夠給大家有所幫助。

第二篇:一個老程序員的十年回顧

一個老程序員的十年回顧

發布時間: 2012-02-05 18:30 閱讀: 3149 次 全屏閱讀 [收藏]

目錄

上篇艱難人生

一、第一次考研的失敗

二、“土包子”的北京之行

下篇學習人生:主要是我學習計算機技術的經歷與感觸,時間跨度大約是從1994~1996年;中篇實踐人生:主要是我的技術實踐經歷:在公司打工,開發軟件,畢業求職與教書生涯,時間跨度是1999~2003。

上篇艱難人生

從此(決定考研)邁上了一條對我來說到目前為止最難走的路,是一個人生的煉獄。

一、第一次考研的失敗

決定考研之后,我就去買了相關資料,取出塵封己久差點當廢紙賣掉的大學課本,又開始了學生生涯。

考哪兒的大學?是我首先要考慮的問題。當時還有另一個高中同學也準備考研,也是計算機,他報了廣西師范大學的研究生。

父母則勸我也考廣西師大或我的母校廣西大學的研究生,說那好考得多,也可以托人走走關系。但我這人很犟,我在西大混了4年,什么也沒學到,我還去那兒干什么?我想起了高中時的夢想,決定直接考北京的高校。當然,北大清華是想都不敢想的,社會上工作幾年,我畢竟清楚自己幾斤幾兩,但北京幾十所高校,難道一所也不行?我不能再聽父母的話了,我要走自己的路,自己的命運自己負責,于是我堅持要考北京的學校。

知道這件事的朋友都對我表示驚奇,工作了4年,學校里的知識都忘得差不多了,還想直接考北京的學校,難度之大,相信不少人都認為我成功的希望很渺茫。事實證明,他們的看法是對的,但不全對,因為世上本就沒有絕對的事情。

這時,我還在一家私營公司里打工,于是,白天上班,晚上就挑燈夜戰,每晚不到12點不休息。

經過半年的復習,我參加了1997年元月的全國研究生入學考試,成績出來,我專業課沒問題,但數學才得了44分,毫無疑問,名落孫山。

這是一個打擊,但對我并沒有太大的影響。

這時,我小時候住在隔壁的阿姨來到桂林,她說她女兒(我小時的玩伴,也姓楊)去年就考研了,但也同樣沒過,她原先在北京服裝學院讀本科,畢業分回廣西柳州一個國企里,工作一年之后考研,沒考上之后,她就把工作給辭了,專門跑到北京同學家中復習一年。97年考研她成功了。

得知這個消息,對我是個很大的鼓勵。我想,她一個比我小的女孩都能成功,我為什么不行?我想辦法與她聯系上了,在后來的考研歲月中,她給了我極大的幫助,幫我買資料,幫我問成績,寫信給我,鼓勵我堅持下去……

受人滴水之恩,當涌泉以報。

世上的人大都只會“錦上添花”,但只有“雪中送炭”才是最寶貴的。她就是我的“雪中送炭”人,她研究生畢業后嫁到青島去了,斷了音訊,但我心中永遠記住了她的幫助。我決定,從今往后,如果我有能力幫助別人的,就一定要幫助人。這世界充滿了太多不好的東西,我應該努力往其中添一點好的東西,哪怕顯得多么微不足道。

二、“土包子”的北京之行

1.中關村印象

剛好,1997年我大哥在北京中央美院進修美術,我決定明年繼續考研,于是辭去了在一家私營電腦公司的工作,于6月底來到了北京,住進了大哥的宿舍。6月到7月,我在北航學計算機維修,7月參加陳文燈老師的考研班,一直呆到9月中旬,我才回到桂林。

中央美院當時搬到了北京西北角的西八間房,我和大哥一起住在學生宿舍中。認識了不少來自全國各地的搞美術的大哥同學,我很喜歡和他們這些搞藝術的人在一起,看他們色彩斑斕,形象逼真的油畫,和設計精巧的一些手工作品,是一種美的體驗。與我們工科人相比,他們是另一種思維方式。

7月份,大哥要回桂林了。在回桂林前,我幫他和他的同學們去中關村電子市場一口氣買了三臺電腦,當時最紅火的電子市場是中關村電子市場,就是現在北大太平洋電腦商場所在的地方。那時電子市場里熙熙攘攘,如此的紅火,是我在廣西所從未見到的也從未想到的。在大街上隨處可見抱著臺打印機,拎著個掃描儀的人,把電腦配件當成白菜一樣賣,這就是我對聞名全國的“中關村電子一條街”的最初印象。

我到了中關村,見到了那些我非常熟悉的公司:北大方正,金山WPS,江民科技……,見到了北京書堆積如山的書店,感嘆這里真是一個知識的海洋,覺得親身感受到了中國IT業的脈博。

大哥回去后,我一個人留在北京,騎著輛破自行車逛了中國最有名的大學:北大和清華,北大風景如畫的未名湖上處處荷葉飄香,清華平平展展的草坪展示一種平實坦蕩的心胸。一墻之隔,校園內外,就是兩種不同氣氛,無名無狀,卻讓我這個二十多歲沒出過廣西的土包子感受深刻。

2.“瘋狂”的考研班

我參加的是暑期文登學校的考研班。中央財經大學那棟破敗不堪的學四樓里,住滿了來自全國各地的學生,和我住在一起的,一個是湖北的,一個是東北的,一個四川的,為了同一個目的,大家從天南地北聚到了一起,我當時真感到了一種“家”的感覺,原來這世界有這么多同路人,我不過是中國十幾萬考生中一名不起眼的“老生”罷了,但還不算是“范進”。

考研班的日子是“瘋狂學習”的日子。

記得我們需要到北方交通大學的大禮堂去聽人大老師索愛群的政治課,一千多人的大禮堂被擠得滿滿的,連過道上都坐了人。在老師的講臺前堆滿了各式各樣的錄音機,足有一百多部,來自全國各地的莘薺學子拿著一瓶礦泉水,在北京最熱的7月,揮汗如雨地在記筆記!這段日子,我用去了7個筆記本!這種氣氛,我以前在廣西是從未見過的。我本來以為我已經夠努力勤奮的了,到北京考研班一看,根本就不算什么。

陳文燈老師教的數學給我留下了最為深刻的印象,他上課不用講稿,所有的例題全都記在他的腦里,隨手就可以寫出來,絲毫不差,還總結出一整套解題方法,讓我大開眼界。我是見著了,原來一個人對本職工作可以精熟到這種地步!后面我還會談到另一位老教授對職業可貴可敬的敬業精神,不敬業,就不是一個合格的勞動者。

我一直呆到身上沒錢了才離開北京。這三個月花完了我工作幾年的所有積蓄,卻對我的影響是巨大的,中國什么地方最適合學習?最適合學計算機?在我看來,只有北京!

我下定決心,一定要到北京來學習計算機技術。

3.差點跳樓的致命打擊

9月中旬我回到了桂林,開始準備第二年的考研。

但生活是不講情面的,我想當然地認為經過了北京名師的指點,我去年就是數學沒過,今年應該沒問題了,但事實并不如此。

1998年的數學試題,突然有了一次很大的變動,這次數學考試特別難,題量還特別大,全國及格率僅7%,平均分為30多分。我現在將這次考試試題稱之為“變態”的題目,出題的那幫呆在空調房里的教授們挖空心思出出來的題目,可把我給害慘了。我自認為心理素質夠強了,但因為這場考試關系命運太大,在考場上我的手都是抖的,幾乎暈倒,一道道的大題空在那兒做不出來,都象是在不斷地譏笑我不自量力,又象是一張張面無血色的血盆大口,一張口就把我給吞下去了,連骨頭渣子都不吐。

考完數學,我就知道我今年沒戲了。原來一個考場有幾十位考生,考完數學之后只剩下不到三分之一的人。我堅持著把后面的課目考完。在那種明知無望但僅憑一種信念支撐著要堅持到底的時刻,我真不知道當時是怎么挨完后面的專業課考試的。

3月,成績下來了,我的數學成績讓我差點去跳漓江了---13分!我從小學習勤奮努力,從沒拿過這么低的分數。真是破紀錄!當時真是灰心到了極點,準備放棄考研,到廣東打工,找個地方浪跡天涯,自生自滅去,實在沒臉在家呆了。

這個時候,我大哥勸住了我:你都考了兩次了,我看來你就是數學差,其它課你都過線了,專業課還都是80多分,為什么不繼續努力?集中精力把數學搞好就可以了。你現在放棄,就前功盡棄!

我這人笨,從小學學東西就慢,這是一大弱點。但上天是公平的,他給你一個弱點的同時,也一定提供了讓你克服這個弱點的方法。

我笨,但我好強,但我勤奮,但我堅持,人一之,我十之,笨鳥先飛,古已有之,古人可以做到,我為什么就不能做到?這事就這么收場?我不服,不甘心!于是,我下定決心再拼一次。

我現在沒有工作,也不想再去找工作了,住在家中,就與堆積如山的書干上了。在關鍵時刻,年邁的父母無條件地支持了我,他們默默地承擔了一切,讓我有飯吃,給我一個安靜的環境,讓我去實現我的夢想。

我深深感受到父母的愛是多么的無條件!我一個二十五六的大小伙子,呆在家中吃閑飯,還讓父母為我的前途操心,那種心靈的煎熬,現在想起來都有種想哭的感覺。男兒有淚不輕彈,只因未到傷心處!在此,我要深情地對我的父母說:兒子絕不會忘記你們的恩情,唯望兩老保重身體,一定要等到看到我過上好日子的時光。

4.反思,走自己的路!

考研失敗,我反復想,為什么我聽了陳文燈傳授的做題秘訣,反而考得更差了?別人為什么用陳老師的方法考出了好成績?看來,每個人的具體情況不同,不存在可以讓人暴長功力的“武林密笈”,從這件事中我學到,決不能迷信權威,迷信理論。后來我對許多現象與潮流如CMM熱、設計模式、軟件工程等理論都持有不同的看法,認為把西方的東西原樣照搬是行不通的,不經過自己的大腦獨立地思索,不經過實踐的檢驗,不要相信任何東西!

從98年到99年1月,我斷絕了一切外部聯系,把自己關在了家中。我父母的工作單位是一個療養院,全院加起來也就一兩百號人,后山就是一個森林公園,空氣清新,林木繁茂,大院里還有一個小山(是真山,不是假山,桂林的這樣象竹筍似的山多了),山上修了個亭子,平時少有人來,真是一個閉門修行的好地方。

我每天到小山亭子上去學英語、背政治,桂林四季長青,我周圍是青山綠竹,微風一過,樹葉沙沙做響,我就在這里學起了戰國時的蘇秦。從春學到夏,再從夏學到冬,苦苦學了一年,這一年里,使我的心志得到了極大的鍛煉,困難更加難以擊倒我。后來我境況轉好,生活中很多人覺得受不了的挫折,在我看來都不過是小菜一碟罷了。

桂林多奇山,秀美蒼翠,風景四季如畫。每當我學累的時候,總是看著這美麗的風景,贊嘆祖國江山如畫,感觸人生之渺小,命運之無常!

大哥從北京帶回了一臺電腦,奔騰166、4.2G的昆騰大腳硬盤,當時不錯的配置,把它送給了我用。我渴望了多久的東西終于到手了,我終于可以無限制地使用計算機了!我把電腦放在床前,伴它入眠。

我有時半夜會突然驚醒,想著目前的困境,渾身會出一身冷汗。電腦沉默不語,在一旁安靜地陪著我。我看著那藍幽幽的屏幕,心情非常復雜。

有了電腦也難過,我得抑制住自己強烈地想探索軟件技術的欲望,強制自己把主要精力放在考研上。

整個考研英語大綱有5300多個單詞,為了背下它們,我用VB編了一個背單詞的小軟件,每次可以分別顯示中文或英文,并可以區分哪些單詞沒記住,下次復習。所有單詞我都是用鍵盤一個字母一個字母地敲入的,每天早上一起床,先對著電腦背它半個小時。到考研結束,我一看,數據庫中已有了兩千多個單詞。

這一年以來,我真是玩命,什么考研理論我都不信了,我就托人買了國家教委出的幾本考試分析,就專門研究考研試題,我要找出適合我自己的方法來。

考研數學考試分析500多頁的書,被我翻來覆去地將歷年考試試題做了三遍。黨的十五大報告我至少背了一百多遍,我稱之為背“語錄”,真稱得上是“倒背如流”,考政治時我把大段大段的十五大報告文字抄上去,居然得了75分!

發黃的本科高等數學和概率與數理統計,以及藍色封皮的線性代數課本,都被我翻得不成樣子。我覺得我就是基礎太差,在這種基礎之上,講什么做題方法都是空中樓閣,一定要抓住“三基”(基本知識、基本方法與基本原理)。但我不得不悲哀地指出,我這些努力并未使我的數學能力有所提高,數學并不是這樣學的,數學思維絕不是這樣培養的。怎樣學數學?得去問華羅庚與陳景潤等數學大師!我至今數學還是不行。也希望有這方面經驗的人能夠教我,讓我補上數學這一課。

生活總算給了我一次微笑。1999年考研,我數學得了60分,終于邁進了大學的門檻,可以打起背包上北京了。

我這人比較笨,不善于找到達到目標的最佳路線,但憑著牛勁鉆下去,硬給我鉆出了一條路。這條路能走通還帶有一些僥幸的色彩,大家想必比我聰明得多,一定能找到更好的路,用更經濟更聰明的辦法達到目的,這是一種大智慧,是我所沒有的。

這段經歷對我個人的思想品質的影響是深遠的。為什么這么說?為了考政治,我深入全面地了解了中國近現代史,我去盜版碟市場買了不少存有歷史資料的光盤,從多方面來看中國歷史,凡電視中有關歷史的節目,我必看。我在這里尤其想說的是一個巨著——《毛澤東選集》!經歷過文革的每個家庭,哪家沒有毛選?我家就有不止一套。毛澤東選集一到四卷,發黃的書被我在這段時間通讀了一遍。其中的經典文章更是被我看了一遍又一遍,趕上金庸的《射雕英雄傳》了。越讀越覺得毛澤東之人真是數百年才出一人的大牛人,他的《湖南農**動考察報告》、《論持久戰》等著作,其中體現出來的深刻洞察力與對中國國情的深入把握,其博大的心胸,為國為民的精神真叫我震撼!最終奪了天下,實在是中國社會的必然,當時她集中了多少中國最出色最優秀的人才,再加上毛澤東這種不世出的大牛人領導,老蔣真與他不是一個水準的,想與老毛逐鹿中原,必敗無疑!我成了毛澤東的崇拜者,但絕不是盲從者。

說起來大家可能不信,我從毛選中得到了許多精神上的營養,更加樂觀了。毛選,真是中國人巨大的精神財富!近年來有不少憤青指著毛澤東晚年的失誤全盤否定毛澤東,在我看來真是狂妄無知,他們有幾個真正了解毛澤東?有幾個真正客觀地看過毛選?有幾個有資格對毛澤東做出評價? 把他們放回毛澤東生存的那個民族危亡的時代,他們還會有這么多屁放?!說不定最先當漢奸的就是他們。呵呵,不好意思,說粗話了。

閑話少說,回到正題。

回顧這段經歷,我只能說是“具有中國特色的考研之路”。我感嘆,中國的考試就是扼殺人性的東西,高考與考研尤其如此。我要是用這種精力去學計算機,一年半的時間,還有什么技術學不到手?但我沒辦法,現實逼著我去考這種我并不想考的試。中國考試之難我看全世界也不多見,我想,每年全國還有那么多的學生要參加這種考試,大量的人力物力與年青人的精力和時間都耗費在考試上了,而考試的內容與實際脫離那么遠,真的有助于人才的脫穎而出?我看反倒是形成了一種應試教育,扼殺了年青人本來所具有的創造性,中國現在為什么出不了大師級的人物,應該反思中國的教育制度。

下篇-實踐人生

一、希特勒地堡與CIH病毒

1999年4月,我來到北京參加研究生復試。復試完了之后就不回去了,我拿著一張光盤,里面刻著我用VB和Authorware 3.5編的一個Cool 3D的教學軟件,到處參加招聘會,開始了在北京的打工生涯。

說句實話,我心中真是一點底也沒有。北京人才濟濟,我一個三流大學的畢業生,又不是計算機專業的,有人要我嗎?

我在北京無依無靠,沒有任何一個親戚在北京,住成了大問題。北京這地方,錢太不經花,生活費用太高,我四處尋找便宜的地方住。后來,我在北京化工大學對面的招待所中租了個床位,每晚20元,地下室。這個招待所的地下室非常大,每天回去的時候,都要走過長長的曲曲折折的通道,加上那昏黃的燈泡,每次我都有走進了希特勒地堡的感覺。地下室里潮濕陰暗,不見天日。地下室里人員很雜,什么人都有,永遠沒有一種安全的感覺,所幸的是我也是個窮光蛋,光腳的還怕穿鞋的?別人能呆我也能呆,唯一讓我擔心的是錢,沒錢,在北京連流落街頭都不夠格,立馬被收容去昌平篩沙。呵呵,我沒這種經歷,這是當時住一塊的一個外地要考北京中醫藥大學的博士生說的(我倆居然住到了一個屋里,大家都沒錢,只能擠地下室,只是他老兄晚上打呼,我可真受了不少罪)。

日子一天天過去,袋里的錢一天天少了,但工作還是沒著落,心中越來越慌,除去學費,來京時父母給我2000元,大哥資助我的1000元就是我當時的全部資金(3000元在北京能呆多久?!)。我當時訂了個計劃,留下500元保底,打死都不能動,要靠它作路費回家的。我當時說,一定得找到一家公司,再少的錢都干,只要有口飯吃,有張床讓我睡我就滿足了。

我一共應聘了四五家公司,最具傳奇色彩的是到西單附近一家公司的應聘經歷。那時,我帶去了我的作品,公司項目經理要看,于是我給他們演示,很奇怪,程序一打開就死機,一連兩臺電腦都一樣,末了,兩臺電腦都啟動不起來了。用瑞星一查,CIH病毒——那天正是4月26日!于是,CIH破壞了電腦主板的同時,也無情地摧毀了我的就業機會。還算老板可憐我,沒要我賠。其實我當時快到山窮水盡的地步了,真要我出錢,我可能連家都回不了啦。陳盈豪(CIH病毒的作者),你小子這么的聰明做什么不行,偏要去做病毒,害人害已,弄得我連個飯碗也找不到,晚上回“希特勒地堡”,把這小子罵了無數次!

總算天無絕人之路,在我數著最后還剩余600元錢的時候,終于有一家公司要我了,做中小學教育軟件,月薪1600。干了兩星期,又給我在公司的倉庫挪開貨物,搭了個床位,我就在那住下了,慶幸再也不用到“希特勒地堡”里當沖鋒隊員了。每天下班后,我就睡在林立的大紙箱之中,如果來個地震,呵呵,我就埋在紙箱中了,休想爬得出來!

我干得非常努力,第一個月工資開出來,扣掉個人所得稅,我拿了1500多元。你們不知道我拿到第一筆工資的感覺!這錢在很多人眼里簡直不算錢,但對于一個沒工作近兩年,工作也一個月收入不到200的窮小子而言,就象陳佩斯小品中所演的:“我王老五活了一輩子,還從沒見過這么多錢啊!”。好笑嗎?我一點也不覺得好笑。我只是心酸,我到了28歲才可以用自己的知識與技能養活自己,再不用依靠父母和兄長的資助,才真正完全用自己的力量在社會上站起來,一個沒有經濟自立能力的人,只能是個不成熟的人,一個躺在父母身上的人,不是一個真正的男子漢!我當這樣的孬種當了28年!

我找到工作后向家里寫過一封長信,信中講了我對父母平時不好意思說的很多心里話,當時,我父親說,母親接到信都哭了。我剛拿到工資,馬上打了個電話回家里告訴母親,以緩解他們的焦慮,畢竟兒行千里母擔心啊!父母有退休金,一再表示不需要我贍養,而我再這樣不要臉下去,我還是人嗎?我就是從那時候開始,下定決心,從今往后,再不向家中要一分錢!今后三年讀書和生活的費用我一定要用自己的勞動來獲取。

金錢帶給我的激動就是在那段時間,溫飽問題解決之后,金錢對我的誘惑就再沒有了,哪怕讓我一個月賺一萬,給套房子給我,也不可能再給我帶來幸福的感覺了,錢是重要的,但不能成為它的奴隸,家中不需要我負擔,我一個人有吃有喝,干著我喜歡的工作,足矣!

我在那公司一直干到九月學校開學為止。我走的那一天,公司居然還開了個歡送宴會,老板封了500元的封包給我。我真是感動。我大學畢業后在社會上掙扎求生,得到的大都是冷眼與蔑視,社會終于認可了我的價值,我不是一個只知道吃飯的廢物!

1999年9月9日上午9點,在這個最多9字的時刻,我到學校報道來了,放下行李,我坐在分配給我的床上,心中終于踏實下來。

現在,我在北京終于有一張屬于我的床了,一張真正屬于我的床了,終于有個地方可以讓我安穩地睡覺了。沒有這段經歷,我怎么體驗到“安居樂業”這一個詞的真實含義!個人如此,國家要做到,中國要做到,更難!

二、編程生涯

讀研兩年半的時間,我四處打工,這兩年半我至少在七八家公司做過,編了十幾萬行代碼,為自己賺了一臺電腦,兩部手機(丟了一部),還有讀研期間的所有費用,實現了我的目標:沒向家里要一分錢。

我水平不高,但在打工過程中,發現許多中國軟件公司的水平更菜!

2000年暑假,我參加一個商品軟件的開發,搬到了北大燕北園的一個宿舍,在那兒搞封閉式開發。在這個項目采用VB6開發,主力程序員除我之處,還有一個華北電力大學的研究生。大家都沒開發商品軟件的經驗,沒經過正式的設計,就匆忙編碼了。我曾經想采用分層的系統架構,但遭到另一位程序員的反對,爭吵沒有結果,老板也不能做決定,結果各行其是。現在看起來,那時真是太菜了,任何一本軟件工程書都會指出這種做法是不對的。

我們直接就熱火朝天的干了起來,那位華北電力大學的老兄,真讓我佩服,他可以在一個sub過程中寫上2000行代碼!我覺得奇怪,為何他能寫這么多的代碼?一看,頓時我暈倒,他居然將每個控件的left, top, width等屬性都用代碼來設定!想想這樣的程序,調試時光單步執行就需要按多少次F8鍵!

我們在電腦旁邊搭了個行軍床,每天都是干到早上6點才睡,12點吃中飯,然后又是一個通宵。當時整個工程只有一個類模塊,被我用于封裝訪問數據庫的ADO數據引擎,這是整個工程中唯一一處用到了最簡單的面向對象技術的地方。然后,我寫了近十個bas公用模塊,每個模塊代碼規模都有一兩千行,還有十幾個窗體,每個窗體中都塞滿了事件驅動的VB代碼,整個軟件應該有10萬行代碼,我一個人在此期間至少就寫了3萬多行VB代碼。程序的主處理流程我甚至用ADO與DAO寫了兩套!

現在想起來,我們當時根本就不知道面向對象為何物,更不理解許多對軟件開發至關重要的理論,就憑著一種熱情。在這段痛苦的開發經歷中,我不僅精熟了VB,而且從中學到了很多。現在再開發同樣功能的東西。我至少可以砍掉2/3的代碼。怎么學都不如從失敗中學得多。

后來我總結VB程序員的三個境界:

(1)所有代碼都只放在窗體文件中的,屬于菜鳥級,他們只會從面板上拖控件,設置屬性,然后再給事件編碼。

(2)工程中有bas模塊的,屬于中間級,他們已意識到有大量的代碼是重復出現的,應該將其抽取出來作為公用模塊。

(3)工程中有cls模塊的,屬于高手,他們已掌握了面向對象的思想,并能應用這種思想來解決實際問題。

正是這次開發經歷,促使我反思:到底如何開發軟件?我個人可以用VB完成各種各樣的功能,為什么湊在一起就會那么困難?更正一個bug為何那么難?為什么一個看似簡單的軟件,要拖半年的時間還看不到結束的日子?

九月,研究生要開題,我自擬了個課題:軟件體系結構設計。我決心弄明白,好軟件到底是怎么做出來的。

我放下了VB,開始研究C++,原來學過VC,但沒學會,就直接從C++ Builder入手。Borland公司的VCL類庫讓我大為嘆服,很快就迷上了它,為此連帶學了Delphi,并參與了一個Delphi項目。給我真正震撼的是《設計模式》這本書,看了才知道,原來好軟件是這么設計出來的!在此,我強烈推薦所有有一定編程經驗的程序員一定要看這本書!

一邊學習理論,一邊可沒忘記我沒經濟來源,于是又四處打工,接一些小項目與小模塊來賺些生活費,國內一家橫跨家電與軟件的著名公司是我打工期間去過的最大的公司。但無論什么公司,都給我一種感覺——爛!公司中充滿了對員工的剝削與不尊重,對軟件開發這一事物的錯誤認識,管理混亂。

我沒機會去外企,技術水平不到,別人不要我 ?,但我所見到的軟件公司,我敢說沒一家能做出世界一流的軟件!

我上的研究生課程也讓我失望,整個就是本科教育的再版。經過高考與考研兩次重大考試,我對考試已是深惡痛絕,但讀研期間仍要考試,而且是閉卷!我就不知道我去背那些條文對我的研究與學習有何幫助?2000年7月當我考完最后一門,終于大松一口氣,我終于擺脫了考試的壓迫,可以在剩余的一年半中真正搜索我渴望已久的軟件技術了。這年,我29歲。

悲哀嗎?一個中國的程序員要到29歲才可以真正自由地學習想學的東西!

我開始研究面向對象理論,看了大量的書,每天都在實驗室學習到深夜12點,天天上網,CSDN成了我最常去的網站。

隨著我對軟件技術的了解越多,就越深刻地感到國內與國外技術水平的差異是如此的巨大,巨大得甚至有讓人絕望的感覺。同時,在北京這個中國軟件人才最集中的地方,我也見到了許多牛人,一個清華的本科學生,做程序員可以拿到一個月12000元的工資,一個北大的計算機系研究生,一畢業就到外企,一個月一萬多收入,每年發16個月工資!干了兩年就開了自己的公司。我看到了一個北方交大的本科生作品,在半年的業余時間里,用Delphi寫了十幾萬行代碼,他甚至在代碼中嵌入匯編,自行編寫數據存取引擎讀寫Foxpro,速度超快!軟件中有一個計算公式解析模塊,他用編譯原理理論居然做了一個小型的公式解析器,就象C++編譯器檢查C++程序一樣,不僅可以判斷是否公式正確,而且給出的出錯信息還相當準確!其基本功之扎實,水平之高讓我望塵莫及!中國優秀的人才真還是不少的!在精英集聚的北京,面對著博大精深的軟件科學,我深感自身的渺小。

但我畢竟是靠自己奮斗出來的,我并不自卑,這世界需要牛人,同樣需要大批合格的勞動者,我成為不了牛人,但我作一名程序員是合格的。

時間過得飛快,一年半根本就不算時間,馬上就要畢業了,學習的成績如何,要到社會上去競爭了,讓社會考場來決定你是否及格。

三、畢業求職

98級的研究生是IT業最后輝煌的回光反照。當時,各大公司都發了瘋似的要人,象華為,當時是來者不拒。計算機專業的研究生是一搶而光,本科生也供不應求。2001年畢業的我的師兄師姐們,平均每個人手頭都至少有兩三個offer,談的工資沒有低于每月6000的,許多人去了外企,工資在8000~10000每月的也有。真是畢業生的黃金時間。

但好景不常在,911事件我看來好象成了分水嶺,911之后,整個IT業急剎車,就業形勢急轉直下,各大公司都在消化去年吃得過飽的胃口,我形容是大家都吃壞了胃,再也不可能有我師兄師姐們的風光了。雖然時間相隔僅大半年。

從10月開始,11月和12月,我幾乎是在招聘會與公共汽車上渡過的,北京東南西北地去面試,上午在上地,下午可能就要跑到朝陽區,疲于奔命。

在找工作過程中,我良好的心理素質與豐富的編程經驗起到了很大的作用,并沒有遇到很大的困難,就先后有幾家公司表示要我。

其中我想說的有兩家公司。

一家是中國臺灣公司,應該說他們做得是不錯的,但我非常反感他們那種自認為高于大陸人的那種優越感,而且待遇也不高。面試之后,回來感覺很不好。

我想:我們大陸確實是不如中國臺灣發達,難怪別人看不起我們,這世界勢利得很,社會如此,國家亦然。但我中華960萬平方公里的國土,13億人口,難道要依靠一個小小的島嶼來撐門面?難道除了中國臺灣公司,我就無處可去了?雖然改變不了什么,但我決定絕不去臺資和日資的公司工作(日本人我更不喜歡,但我認為他們做事實在優秀,我們一定要向日本人學習)!在這種公司呆著,不爽!同時,我們的確也得爭氣些,這世界只尊重強者。

另一家是個很不錯的民族軟件企業,想要我,其老總專門找我去面談了一次,希望我能到他的公司工作。這位老總白手起家,能在五六年的時間內由幾個人發展到300多人,當時,是中國這個領域軟件市場占有率最高的公司,我非常佩服,他為人也很好,并表示可以給我每月比其他研究生多加1000元工資,而且希望鍛煉一兩年之后我能夠帶領一個團隊來開發產品,并負擔我畢業所需交納的各種費用。在就業不景氣的2002年,對我一個30歲的技術水平有限的老程序員如此看重,真叫我感動。雖然我最后還是沒去,但我仍然對這個公司充滿了好感。一個軟件企業最重要的是什么?是對人的尊重,沒有這點,可以斷定,這個公司長不大。

我為什么沒去軟件公司?放棄有可能在幾年之后年薪突破10萬的收入?是因為我已有了更想做的事,我想當老師!

我自己是從自學的路上走過來的,其中的艱辛歷歷在目,無人指點,我走了多少彎路?中國還有多少是象我這樣的年輕人無人指點的?我幸運能爬出來了,因為我至少還能有飯吃,比我條件更差的,比如農村的孩子,可能就被生活的壓力所淹沒了。我個人的力量很微弱,技術也有限,但我自認為至少是一名合格的程序員,如果能培養出一大批達到我的水平的學生,他們畢業后成為合格的程序員,中國軟件的根基就會更扎實,如果更能有一批遠遠超過我水平的學生出來,中國軟件就有希望了。軟件是什么?軟件以人為本!

人生追求什么?金錢?我很缺錢,但不可能把金錢作為我的目標,我希望我能夠成為一個對社會有所貢獻的人,能夠獲得心靈的充實,于是,我選擇了留校。

四、對教育的反思與教書生涯

2002年下半年,我參加了北京高校青年教師崗前培訓。一位杜教授的兩堂課讓我印象深刻,其中兩句話讓我深深震動:

第一句話:我是一個教書匠,教書匠好啊,好就好在“匠心獨運”!

第二句話:做什么工作都要達到變魔術的境界!

是的,作為一名教師,就必須起到一個傳聲筒與放大器的作用,將人類最聰明的人探索世界所得到的知識予以拓寬發展,以便讓更多的人能夠掌握這些知識并進而應用于實踐,從而推動人類的不斷進步。

作為一名計算機專業的教師,就要努力把先進的計算機技術以盡可能高的效率傳授給廣大的學生,引導他們直接面對真實的軟件世界,而不是向他們硬灌各種各樣的理論知識,強迫他們去死記硬背以應付考試。

我是一個小人物,才低學淺,但我真的認為高校計算機教育存在嚴重的問題。我在打工期間的開發經歷,以及閱讀國外相關資料的時候,發現學校中教的和社會上用的差得太遠!都已經是什么時代了,許多大學還設立Foxpro課程,難道就不能直接用現代主流的數據庫如Oracle,SQL Server,哪怕是Access也好,來講授數據庫知識?還有所謂的計算機等級考試,呵呵,過了三級學生的我見過不少,但他們真正對軟件,對計算機又理解多少?

在中國甚至于升職稱也要考計算機,我看了一本職稱計算機考試教材,里面幾乎原樣照搬計算機原理課程中的相關章節,弄得我給搞藝術的大嫂講了一個小時的二進制與八進制、十六進制的轉換方法,她還是弄不太清。我都泄氣了,對啊,他們搞藝術的,有必要去分清二進制的10與十進制的2有何分別嗎?他們八輩子也用不上。但是考試用得上,呵呵,又是中國特色。

拿C++來說,我講過C++課,許多的國內教材對C++語法下了大功夫,卻對體現了C++精華的STL只字不提,對代碼背后所體現的軟件開發思想與方法更是視而不見,我用C++也編過不少程序了,說句實話,我用到的特性不到C++的三分之一!于是就出現了這種怪現象,許多學生考試可以拿八九十分,給他一個簡單的實際問題他卻不知如何下手!

還有UML,現在好象很火的樣子,我們讀研時就開了這門課,講句實話,當時這門課我就沒聽懂,可后來我嘗試著用C++用面向對象的方法來編程序,然后,由代碼倒推回UML類圖,一下子就明白了,原來UML只不過是一種描述面向對象系統的符號罷了,如果學生沒進行過真正的OOP,那就是為了學UML而學UML,根本就本末倒置。

還有軟件工程,我的感覺,一個人如果沒寫過一萬行以上的程序,他看軟件工程書就同看政治書差不多,每句都對,呵呵,就不知道為什么對。我完成了那個幾萬行的VB程序之后,再回過頭看看理論,真是句句是真理!每個理論背后都是大量實踐經驗的總結。

回想我做軟件的體會,我發現所有的知識都是一個完整的體系,根本就無法區分哪些知識是本科的,哪些知識是研究生課程。于是,一種想法產生了,我主講程序語言類的課程,那我就直接以真實的軟件開發過程為主線,實踐中需要什么我就講什么。講C++,我就拋開了指定的教材,C++我講了STL,我講了OOAD,兩者我都講了用Rose進行雙向工程,引導學生去學UML,一開始就用UML去描述自己開發的程序,何必浪費大量的時間去學結構化的編程方法?

我現在簡直成了面向對象技術的布道者,我下學期即將開設OOAD基礎選修課,從實際項目中抽取典型的案例,講UML,講Rose,講設計模式,講軟件體系結構,例子代碼橫跨C++和.NET下的開發語言(C#和VB.NET),這對于我一個技術水平有限公司的董事長而言,實在有點不自量力,我鼻子上才插上幾根蔥,就想裝大象?但我想,如果我能成功地激發出哪怕1%的學生的興趣,能引導他們走向我認為是正確的方向,能啟發他們思考,能直接面向真實的軟件開發活動而不是學校的考試,就是我的成績。我現在正在看引進的原版書籍——《設計模式解析》,時時擊節贊嘆!《設計模式》經典但難懂難用,而《解析》一書的兩位作者既有豐富的從業經驗,又對OOAD進行了深入的思索,真知灼見時時展露于書中,我現在剛看了這本書的80%,基本上可以用一個成語來描述這部書:深入淺出!

要做到深入淺出談何容易!只有同時具備技術專家與文學作家素質的人才能做到!

反觀我們國內的大量教材,還有大量的垃圾論文(包括碩士、博士的,本科的就算了,我看絕大部分根本不能稱之為論文),全都是“淺入深出”,作者自己都未必明白,就東拼西湊,擺出個樣子嚇人。本來完全可以用大白話三言兩語講清楚讓人明白的道理,有人專門要繞一大圈,專挑用高深的數學公式來表達,唯恐別人容易理解,顯得他水平不高!呵呵,什么東西一沾上“數學”,立馬身價百倍。我就聽過一個北師大的一個在讀博士說過:如果一篇博士論文中沒有一個數學公式,根本就不算是博士論文。這句話對不對,大家可以多思索。我數學不好,沒資格討論數學,我的直覺:數學是工具,但如果為了發表論文等目的而故弄玄虛,為數學而數學,是不合道理的。中國的學術水平與現狀,大家都心知肚明,不用我廢話了。

現在每年都畢業大批的計算機專業學生,可其中真正具備扎實根基的可以很快勝任工作的我看只有5%(95%的學生不要扁我,不同意就當我在說胡話,我很瘦的,一扁就沒了?)。多年以來,我國高校計算機教育是按照計算機科學研究者來培養的,可事實上,有多少學生能從事計算機方面研究的能力?我看應分流,80%的學生按工程師方向來培養,20%的學生按研究者方向來培養,而且應大幅減少必修課的數量,計算機領域太深太廣,樣樣都想教給學生,反而成了夾生飯,一個想從事硬件設計的學生和一個想從事軟件開發的學生,能給他們一樣的飯吃嗎?學校應提供各種條件和資源去引導學生,激發學生的創造性與主動探索性,讓他們去嘗試,去發現自己的長處,最終找到最適合自己的發展方向。不這樣做,中國軟件后繼乏人,沒希望。

五、實踐第一

2002年下半年,我和一個朋友去了北京郊區的一家雜志社,看到的情形讓我震驚:在信息產業最發達的北京,這家雜志社還用人工查對雜志訂單和款單,看著那按省來登記的幾大本厚厚的客戶登記本,工作人員需要手工來在其中查找相應的信息。這樣的工作效率,這樣的行業信息化水平!北京如此,全國又如何?

從這件事上,我看到了中國軟件業的另一方面。一方面我們沒有核心技術,另一方面,已有的技術又根本沒推廣沒用好。追蹤世界先進水平,對于我等這種水平的人來說,確實勉為其難,但將已有的技術用于解決實際問題,卻是我們可以做的。如果中國各行各業都真正能通過進行信息化而提高生產效益,那中國不就從根本上強大起來了嗎(象印度,IT一枝獨秀,其他行業沒有起色,我稱之為跛足的國家,絕不能成為世界強國)?在扎實的社會基礎之上,軟件業不就有了更大的市場與發展潛力?中國許多行業的信息化水平非常低,而且中國地域廣大,發展非常不平衡,有些地方信息化水平甚至為0!努力推動行業信息化,是我們這一代軟件開發者的責任!而追趕國外先進水平,恐怕就不是一代兩代程序員可以達到目標的,需要長期的努力。作為一名軟件開發者,只能腳踏實地,哪怕你只做一個小小的MIS產品,也要盡力把它做好來。

于是,我開始了期刊發行系統的開發,這完全是自發的,沒有任何資金投入,只有一種熱情在支撐。我開始選擇C++ Builder開發,做了幾個月,完成了第一個版本,但我發現,我找不到足夠水平的C++程序員進行合作開發,而且整個一個exe文件,在體系結構設計上雖采用了分層分塊的設計方案,但卻是源代碼級別的,要拆分成COM組件難度太大,不是一個人能完成的,于是中途流產。

2003年3月,我開始系統地學習.NET,我吃驚地發現,我原來想在C++中實現的許多功能,比如對象串行化為XML,在.NET中已有現成的類可用,.NET更把OO的功用發揮到了極致,它的混合語言開發,它的反射機制,它的新的自識別的軟件組件,以及強大好用的開發環境Visual Studio,都讓我驚嘆微軟對開發者遇到的困難的深入把握,相比用C++開發,至少可以提高1/3的開發效率。于是一個新的想法產生了,我要把以前的產品用.NET重寫,利用.NET強大的組件模型,將設計模式理論推廣應用到組件級別,通過XML和反射機制建立一套可動態裝配的軟件生產流水線,實現象Dell直銷PC那樣的軟件動態裝配直銷。只要建立好靈活可不斷重構的系統架構,配以對業務領域的深入分析,逐步建立功能強大的業務組件倉庫,就可以實現軟件系統的動態裝配。說干就干,我用VB.NET重寫了原先用C++編寫的系統,將原先的一個exe變為十幾個dll,而且這些dll還會隨著發展而不斷地分裂,也有可能重新組合,利用refractoring(重構)不斷進化,最終形成一整套完備的行業軟件組件庫。做軟件關鍵因素是變化,只有適應變化的系統才是有生命力的。

我用兩個月的時間大體上弄清了.NET平臺下的主要類庫,然后又用兩個月的時間再次重新實現了期刊發行系統的C++版本的全部功能,到8月份我寫這篇文章之時,第一個產品里程碑已經完成。同樣的,除了需求是由另一個合作者去搜集的之外,幾乎又是全部由我一個人包攬了所有的系統設計及編碼工作!

毫無疑問,我自覺得新系統要比老系統可維護性強得多,真正實現了徹底的全組件化系統開發,計劃再有一個月的界面美化,改正bug,引用多線程提高運行效率,優化系統結構,就可以提供給用戶試用了。市場如何,難說難測。

在開發過程中,我再次感到巨大的挑戰,不光是技術上的,更是管理上的。人才是我最頭痛的問題,沒有一流的人才,哪來一流的產品?我們找不到足夠水平的程序員一起合作(牛人哪屑于做這樣一個小兒科的產品?)我們要走的路還很長。也許我們開發的產品是失敗的,但我從來就沒指望能用這賺錢,我只是盡一個軟件開發者的責任而己,成敗已不重要!人生不嘗試,怎能體現人活著的價值?

剛好我編的程序告一段落。于是就crazy地敲鍵盤,一鼓作氣地把下篇寫完了。心中有好多話一次就說個痛快。

看得越多,想得越多,我就越困惑,人啊,你活著到底是為了什么?又整天忙忙碌碌地追求些什么?我這十年,……我都不知道怎么說了!

大家自己看吧!

結束語 永無止境的軟件之路

一、辛酸與苦辣

做軟件開發很苦的,技術進步如此神速,每個軟件開發者都得不斷地學習以跟上發展的步伐。有時我常想,何苦呢?我現在在大學中混,怎么樣不能混下去?為什么要做這些吃力不討好的事?我投了十年的時間去學習電腦,卻最終發現自己不過中人之資,離頂峰遠之又遠。古語云:三十而立。我今年32了,仍是孤身一人,看看周圍的同學,他們的小孩都差不多上小學了!許多都有了自己的房子和車子,而我到現在才開始申報中級職稱,還擠在集體宿舍中,望著北京高昂的房價而嘆息。現在社會越來越功利了,看著象我這樣的窮光蛋,看著由于長期面對電腦缺少鍛煉而瘦弱的身軀,又有哪個女孩愿意嫁過來受苦?

軟件人的生活很苦,壓力很大,我認為是拿青春賭明天。就是在這種惡劣的開發環境中,還有許多業外人士指手劃腳說程序員如何如何,還有太多的公司只顧壓榨程序員的勞動,缺乏對程序員基本的尊重,怎不叫人寒心?

“三十而衰”,這句本不應該流行的話居然成了中國軟件人員的流行語。中國程序員的悲哀!

二、無止境的追求

人類已進入信息時代,計算機技術幾乎每隔半年就有一次大的變化,我現在又面臨著這樣的抉擇:今后的路如何走?

北大的教師聘任制度的改革一石激起千層浪,說明了中國高校的改革勢在必行。我是歡迎這種變化的,雖然到時我可能會下崗。但人生中總會遇到各種各樣的挑戰,只要你不倒下爬不起來,就有希望。

我想我必須再次讓自己有個提升,要從小事做起,但做小事則絕不能成為最終的目標,也許,不遠的將來,我會走出國門,到世界軟件技術最發達的地區去汲取豐富的養份。今后的路怎么走,我還在摸索之中。

三、人生無悔

人生年華如水,時光無情。在過去的歲月中,我盡了自己的力,回顧往事,我可以說:過去的事只有遺憾,卻沒有后悔。如果給我再一次選擇職業的機會,我還會再次選擇軟件!

再過10年,到2013年的時候,我也許會再次寫一篇人生的十年回顧,到那時中國的軟件會如何?中國軟件的明天靠你我這些普通人去扎扎實實地去工作來支撐!少發些牢騷,多做些實事,中國軟件才會有光輝的明天。你我共勉!

一個老程序員的心理話

完成于 2003-8-3 北京

2003-8-3中午14:33,在我的彈指神功之下,我寫完了這近兩三萬字的個人自訴。一點也不累,回想過去的種種感觸,仍然身在其中。

樓上一位兄弟說想看我的愛情故事,但人生不是小說,沒有什么浪漫的,我只能讓你失望了,我是孤單地在人生之路上走著,我就是這樣的一個帶著點悲劇色彩的人。

如果有人能有這上中下三篇文章耐心看完,我會謝謝你。如果有人能指點我,我感激你。

好了,我去休息了,生活是一天天過的,不是嗎?

第三篇:一個C++程序員的心得

六年前,我剛熱戀“面向對象”(Object-Oriented)時,一口氣記住了近十個定義。六年后,我從幾十萬行程序中滾爬出來準備寫點心得體會時,卻無法解釋什么是“面向對象”,就象說不清楚什么是數學那樣。軟件工程中的時髦術語“面向對象分析”和“面向對象設計”,通常是針對“需求分析”和“系統設計”環節的。“面向對象”有幾大學派,就象如來佛、上帝和真主用各自的方式定義了這個世界,并留下一堆經書來解釋這個世界。

有些學者建議這樣找“對象”:分析一個句子的語法,找出名詞和動詞,名詞就是對象,動詞則是對象的方法(即函數)。

當年國民黨的文人為了對抗毛澤東的《沁園春·雪》,特意請清朝遺老們寫了一些對仗工整的詩,請蔣介石過目。老蔣看了氣得大罵:“娘希匹,全都有一股棺材里腐尸的氣味。”我看了幾千頁的軟件工程資料,終于發現自己有些“弱智”,無法理解“面向對象”的理論,同時醒悟到“編程是硬道理。”

面向對象程序設計語言很多,如Smalltalk、Ada、Eiffel、Object Pascal、Visual Basic、C++等等。C++語言最討人喜歡,因為它兼容C 語言,并且具備C 語言的性能。近幾年,一種叫Java 的純面向對象語言紅極一時,不少人叫喊著要用Java 革C++的命。我認為Java 好比是C++的外甥,雖然不是直接遺傳的,但也幾分象樣。外甥在舅舅身上玩耍時灑了一泡尿,倆人不該為此而爭吵。

關于C++程序設計的書藉非常多,本章不講C++的語法,只講一些小小的編程道理。如果我能早幾年明白這些小道理,就可以大大改善數十萬行程序的質量了。

1.C++面向對象程序設計的重要概念

早期革命影片里有這樣一個角色,他說:“我是黨代表,我代表黨,我就是黨。”后來他給同志們帶來了災難。

會用C++的程序員一定懂得面向對象程序設計嗎?

不會用C++的程序員一定不懂得面向對象程序設計嗎?

兩者都未必。就象壞蛋入黨后未必能成為好人,好人不入黨未必變成壞蛋那樣。

我不怕觸犯眾怒地說句大話:“C++沒有高手,C 語言才有高手。”在用C 和C++編程8年之后,我深深地遺憾自己不是C 語言的高手,更遺憾沒有人點撥我如何進行面向對象程序設計。我和很多C++程序員一樣,在享用到C++語法的好處時便以為自己已經明白了面向對象程序設計。就象擠掉牙膏賣牙膏皮那樣,真是暴殄天物呀。

人們不懂拼音也會講普通話,如果懂得拼音則會把普通話講得更好。不懂面向對象程序設計也可以用C++編程,如果懂得面向對象程序設計則會把C++程序編得更好。本節講述三個非常基礎的概念:“類與對象”、“繼承與組合”、“虛函數與多態”。理解這些概念,有助于提高程序的質量,特別是提高“可復用性”與“可擴充性”。1.1 類與對象

對象(Object)是類(Class)的一個實例(Instance)。如果將對象比作房子,那么類就是房子的設計圖紙。所以面向對象程序設計的重點是類的設計,而不是對象的設計。類可以將數據和函數封裝在一起,其中函數表示了類的行為(或稱服務)。類提供關鍵字public、protected 和private 用于聲明哪些數據和函數是公有的、受保護的或者是私有的。

這樣可以達到信息隱藏的目的,即讓類僅僅公開必須要讓外界知道的內容,而隱藏其它一切內容。我們不可以濫用類的封裝功能,不要把它當成火鍋,什么東西都往里扔。

類的設計是以數據為中心,還是以行為為中心?

主張“以數據為中心”的那一派人關注類的內部數據結構,他們習慣上將private 類型的數據寫在前面,而將public 類型的函數寫在后面,如表8.1(a)所示。

主張“以行為為中心”的那一派人關注類應該提供什么樣的服務和接口,他們習慣上將public 類型的函數寫在前面,而將private 類型的數據寫在后面,如表8.1(b)所示。

很多C++教課書主張在設計類時“以數據為中心”。我堅持并且建議讀者在設計類時“以行為為中心”,即首先考慮類應該提供什么樣的函數。Microsoft 公司的COM 規范的核心是接口設計,COM 的接口就相當于類的公有函數[Rogerson 1999]。在程序設計方面,咱們不要懷疑Microsoft 公司的風格。

設計孤立的類是比較容易的,難的是正確設計基類及其派生類。因為有些程序員搞不清楚“繼承”(Inheritance)、“組合”(Composition)、“多態”(Polymorphism)這些概念。2回頂部 1.2 繼承與組合

如果A 是基類,B 是A 的派生類,那么B 將繼承A 的數據和函數。示例程序如下: class A { public: void Func1(void);void Func2(void);};class B : public A { public: void Func3(void);void Func4(void);};// Example main(){ B b;// B的一個對象

b.Func1();// B 從A 繼承了函數Func1 b.Func2();// B 從A 繼承了函數Func2 b.Func3();b.Func4();}

這個簡單的示例程序說明了一個事實:C++的“繼承”特性可以提高程序的可復用性。正因為“繼承”太有用、太容易用,才要防止亂用“繼承”。我們要給“繼承”立一些使用規則:

一、如果類A 和類B 毫不相關,不可以為了使B 的功能更多些而讓B 繼承A 的功能。

不要覺得“不吃白不吃”,讓一個好端端的健壯青年無緣無故地吃人參補身體。

二、如果類B 有必要使用A 的功能,則要分兩種情況考慮:

(1)若在邏輯上B 是A 的“一種”(a kind of),則允許B 繼承A 的功能。如男人(Man)是人(Human)的一種,男孩(Boy)是男人的一種。那么類Man 可以從類Human 派生,類Boy 可以從類Man 派生。示例程序如下: class Human { ? };class Man : public Human { ? };class Boy : public Man { ? };

(2)若在邏輯上A 是B 的“一部分”(a part of),則不允許B 繼承A 的功能,而是要用A和其它東西組合出B。例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是頭(Head)的一部分,所以類Head 應該由類Eye、Nose、Mouth、Ear 組合而成,不是派生而成。示例程序如下: class Eye { public: void Look(void);};class Nose { public: void Smell(void);};class Mouth { public: void Eat(void);};class Ear { public: void Listen(void);};// 正確的設計,冗長的程序 class Head { public: void Look(void){ m_eye.Look();} void Smell(void){ m_nose.Smell();} void Eat(void){ m_mouth.Eat();} void Listen(void){ m_ear.Listen();} private: Eye m_eye;Nose m_nose;Mouth m_mouth;Ear m_ear;};

如果允許Head 從Eye、Nose、Mouth、Ear 派生而成,那么Head 將自動具有Look、Smell、Eat、Listen 這些功能: // 錯誤的設計

class Head : public Eye, public Nose, public Mouth, public Ear { };

上述程序十分簡短并且運行正確,但是這種設計卻是錯誤的。很多程序員經不起“繼承”的誘惑而犯下設計錯誤。

一只公雞使勁地追打一只剛下了蛋的母雞,你知道為什么嗎?

因為母雞下了鴨蛋。

本書3.3 節講過“運行正確”的程序不見得就是高質量的程序,此處就是一個例證。3回頂部 1.3 虛函數與多態

除了繼承外,C++的另一個優良特性是支持多態,即允許將派生類的對象當作基類的對象使用。如果A 是基類,B 和C 是A 的派生類,多態函數Test 的參數是A 的 指針。那么Test 函數可以引用A、B、C 的對象。示例程序如下: class A { public: void Func1(void);};void Test(A *a){ a->Func1();} class B : public A { ? };class C : public A { ? };// Example main(){ A a;B b;C c;Test(&a);Test(&b);Test(&c);};

以上程序看不出“多態”有什么價值,加上虛函數和抽象基類后,“多態”的威力就顯示出來了。

C++用關鍵字virtual 來聲明一個函數為虛函數,派生類的虛函數將(override)基類對應的虛函數的功能。示例程序如下: class A { public: virtual void Func1(void){ cout<< “This is A::Func1 n”} };void Test(A *a){ a->Func1();} class B : public A { public: virtual void Func1(void){ cout<< “This is B::Func1 n”} };class C : public A { public: virtual void Func1(void){ cout<< “This is C::Func1 n”} };// Example main(){ A a;B b;C c;Test(&a);// 輸出This is A::Func1 Test(&b);// 輸出This is B::Func1 Test(&c);// 輸出This is C::Func1 };

如果基類A 定義如下: class A { public: virtual void Func1(void)=0;};

那么函數Func1 叫作純虛函數,含有純虛函數的類叫作抽象基類。抽象基類只管定義純虛函數的形式,具體的功能由派生類實現。

結合“抽象基類”和“多態”有如下突出優點:

(1)應用程序不必為每一個派生類編寫功能調用,只需要對抽象基類進行處理即可。這一招叫“以不變應萬變”,可以大大提高程序的可復用性(這是接口設計的復用,而不是代碼實現的復用)。

(2)派生類的功能可以被基類指針引用,這叫向后兼容,可以提高程序的可擴充性和可維護性。以前寫的程序可以被將來寫的程序調用不足為奇,但是將來寫的程序可以被以前寫的程序調用那可了不起。4回頂部 良好的編程風格

內功深厚的武林高手出招往往平淡無奇。同理,編程高手也不會用奇門怪招寫程序。良好的編程風格是產生高質量程序的前提。2.1 命名約定

有不少人編程時用拼音給函數或變量命名,這樣做并不能說明你很愛國,卻會讓用此程序的人迷糊(很多南方人不懂拼音,我就不懂)。程序中的英文一般不會太復雜,用詞要力求準確。匈牙利命名法是Microsoft 公司倡導的[Maguire 1993],雖然很煩瑣,但用習慣了也就成了自然。沒有人強迫你采用何種命名法,但有一點應該做到:自己的程序命名必須一致。

以下是我編程時采用的命名約定:

(1)宏定義用大寫字母加下劃線表示,如MAX_LENGTH;

(2)函數用大寫字母開頭的單詞組合而成,如SetName, GetName ;

(3)指針變量加前綴p,如*pNode ;

(4)BOOL 變量加前綴b,如bFlag ;

(5)int 變量加前綴i,如iWidth ;

(6)float 變量加前綴f,如fWidth ;

(7)double 變量加前綴d,如dWidth ;

(8)字符串變量加前綴str,如strName ;

(9)枚舉變量加前綴e,如eDrawMode ;

(10)類的成員變量加前綴m_,如m_strName, m_iWidth ;

對于int, float, double 型的變量,如果變量名的含義十分明顯,則不加前綴,避免煩瑣。如用于循環的int 型變量i,j,k ;float 型的三維坐標(x,y,z)等。2.2 使用斷言

程序一般分為Debug 版本和Release 版本,Debug 版本用于內部調試,Release 版本發行給用戶使用。斷言assert 是僅在Debug 版本起作用的宏,它用于檢查“不應該”發生的情況。以下是一個內存復制程序,在運行過程中,如果assert 的參數為假,那么程序就會中止(一般地還會出現提示對話,說明在什么地方引發了assert)。//復制不重疊的內存塊

void memcpy(void *pvTo, void *pvFrom, size_t size){ void *pbTo =(byte *)pvTo;void *pbFrom =(byte *)pvFrom;assert(pvTo!= NULL && pvFrom!= NULL);while(size--> 0)*pbTo + + = *pbFrom + +;return(pvTo);}

assert 不是一個倉促拼湊起來的宏,為了不在程序的Debug 版本和Release 版本引起差別,assert 不應該產生任何副作用。所以assert 不是函數,而是宏。程序員可以把assert 看成一個在任何系統狀態下都可以安全使用的無害測試手段。

很少有比跟蹤到程序的斷言,卻不知道該斷言的作用更讓人沮喪的事了。你化了很多時間,不是為了排除錯誤,而只是為了弄清楚這個錯誤到底是什么。有的時候,程序員偶爾還會設計出有錯誤的斷言。所以如果搞不清楚斷言檢查的是什么,就很難判斷錯誤是出現在程序中,還是出現在斷言中。幸運的是這個問題很好解決,只要加上清晰的注釋即可。這本是顯而易見的事情,可是很少有程序員這樣做。這好比一個人在森林里,看到樹上釘著一塊“危險”的大牌子。但危險到底是什么?樹要倒?有廢井?有野獸?除非告訴人們“危險”是什么,否則這個警告牌難以起到積極有效的作用。難以理解的斷言常常被程序員忽略,甚至被刪除。[Maguire 1993]

以下是使用斷言的幾個原則:

(1)使用斷言捕捉不應該發生的非法情況。不要混淆非法情況與錯誤情況之間的區別,后者是必然存在的并且是一定要作出處理的。

(2)使用斷言對函數的參數進行確認。

(3)在編寫函數時,要進行反復的考查,并且自問:“我打算做哪些假定?”一旦確定了的

假定,就要使用斷言對假定進行檢查。

(4)一般教科書都鼓勵程序員們進行防錯性的程序設計,但要記住這種編程風格會隱瞞錯誤。當進行防錯性編程時,如果“不可能發生”的事情的確發生了,則要使用斷言進行報警。5回頂部

2.3 new、delete 與指針

在C++中,操作符new 用于申請內存,操作符delete 用于釋放內存。在C 語言中,函數malloc 用于申請內存,函數free 用于釋放內 存。由于C++兼容C 語言,所以new、delete、malloc、free 都有可能一起使用。new 能比malloc 干更多的事,它可以申請對象的內存,而malloc 不能。C++和C 語言中的指針威猛無比,用錯了會帶來災難。對于一個指針p,如果是用new申請的內存,則必須用delete 而不能用free 來釋放。如果是用malloc 申請的內存,則必須用free 而不能用delete 來釋放。在用delete 或用free 釋放p 所指的內存后,應該馬上顯式地將p 置為NULL,以防下次使用p 時發生錯誤。示例程序如下: void Test(void){ float *p;p = new float[100];if(p==NULL)return;?// do something delete p;p=NULL;// 良好的編程風格 // 可以繼續使用p p = new float[500];if(p==NULL)return;?// do something else delete p;p=NULL;}

我們還要預防“野指針”,“野指針”是指向“垃圾”內存的指針,主要成因有兩種:

(1)指針沒有初始化。

(2)指針指向已經釋放的內存,這種情況最讓人防不勝防,示例程序如下: class A { public: void Func(void){?} };void Test(void){ A *p;{ A a;p = &a;// 注意a 的生命期 } p->Func();// p 是“野指針”,程序出錯 } 2.4 使用const

在定義一個常量時,const 比#define 更加靈活。用const 定義的常量含有數據類型,該常量可以參與邏輯運算。例如: const int LENGTH = 100;// LENGTH 是int 類型 const float MAX=100;// MAX 是float 類型 #define LENGTH 100 // LENGTH 無類型 #define MAX 100 // MAX 無類型

除了能定義常量外,const 還有兩個“保護”功能:

一、強制保護函數的參數值不發生變化

以下程序中,函數f 不會改變輸入參數name 的值,但是函數g 和h 都有可能改變name的值。void f(String s);// pass by value void g(String &s);// pass by referance void h(String *s);// pass by pointer main(){ String name=“Dog”;f(name);// name 的值不會改變 g(name);// name 的值可能改變 h(name);// name 的值可能改變 }

對于一個函數而言,如果其‘&’或‘*’類型的參數只作輸入用,不作輸出用,那么應當在該參數前加上const,以確保函數的代碼不會改變該參數的值(如果改變了該參數的值,編譯器會出現錯誤警告)。因此上述程序中的函數g 和h 應該定義成: void g(const String &s);void h(const String *s);

二、強制保護類的成員函數不改變任何數據成員的值

以下程序中,類stack 的成員函數Count 僅用于計數,為了確保Count 不改變類中的任何數據成員的值,應將函數Count 定義成const 類型。class Stack { public: void push(int elem);void pop(void);int Count(void)const;// const 類型的函數 private: int num;int data[100];};int Stack::Count(void)const { ++ num;// 編譯錯誤,num 值發生變化 pop();// 編譯錯誤,pop 將改變成員變量的值 return num;} 6回頂部 2.5 其它建議

(1)不要編寫一條過分復雜的語句,緊湊的C++/C 代碼并不見到能得到高效率的機器代碼,卻會降低程序的可理解性,程序出錯誤的幾率也會提高。

(2)不要編寫集多種功能于一身的函數,在函數的返回值中,不要將正常值和錯誤標志混在一起。

(3)不要將BOOL 值TRUE 和FALSE 對應于1 和0 進行編程。大多數編程語言將FALSE定義為0,任何非0 值都是TRUE。Visual C++將TRUE 定義為1,而Visual Basic 則將TRUE定義為-1。示例程序如下: BOOL flag;?

if(flag){ // do something } // 正確的用法 if(flag==TRUE){ // do something } // 危險的用法 if(flag==1){ // do something } // 危險的用法 if(!flag){ // do something } // 正確的用法

if(flag==FALSE){ // do something } // 不合理的用法 if(flag==0){ // do something } // 不合理的用法

(4)小心不要將“= =”寫成“=”,編譯器不會自動發現這種錯誤。

(5)不要將123 寫成0123,后者是八進制的數值。

(6)將自己經常犯的編程錯誤記錄下來,制成表格貼在計算機旁邊。小結

C++/C 程序設計如同少林寺的武功一樣博大精深,我練了8 年,大概只學到二三成。所以無論什么時候,都不要覺得自己的編程水平天下第一,看到別人好的技術和風格,要虛心學習。本章的內容少得可憐,就象口渴時只給你一顆楊梅吃,你一定不過癮。我借花獻佛,推薦一本好書:Marshall P.Cline 著的《C++ FAQs》[Cline 1995]。你看了后一定會贊不絕口。會編寫C++/C 程序,不要因此得意洋洋,這只是程序員基本的技能要求而已。如果把系統分析和系統設計比作“戰略決策”,那么編程充其量只是“戰術”。如果指揮官是個大笨蛋,士兵再勇敢也會吃敗仗。所以我們程序員不要只把眼光盯在程序上,要讓自己博學多才。我們應該向北京胡同里的小孩們學習,他們小小年紀就能指點江山,評論世界大事。

第四篇:一個老程序員對后輩們的話

這是一篇我很早以前在一個論壇上看到的文章,感覺很不錯現在與大家共享,由于忘記了文章的鏈接,所以無法貼出原文鏈接了,望原作者原諒?????,原文如下:

一個老程序員和學生對作為PHP程序員的你們說的話

我,一個老程序員,也是一個學生,把玩過甚多語言,大多不精。我既非名牌學校,也不是高學歷,僅代表一部分比較蛋疼的人。

接觸PHP也是很早了,從04年的OFSTAR開始的,到現在六年了,期間也接觸過不少的語言。從腳本JS到底層的C語言。坦誠的說,我不是個高手,但是我相信自己比大多數人接觸的知識面要寬廣,深刻些吧。

同時我也是一名學生,從東南大學到西電,對計算機的愛好一波三折。我這里想說幾個問題:

1.語言,語法重要嗎?

不重要。重要的編程的基本思想。語言是不相通的,相通的是思想。PHP作為一門WEB語言,很多童鞋太過于關注其語法,總是天天翻函數,看語法,是的,他們的PHP

能力提升了,可如果叫他們轉行做PY或者C,甚至是NET,那就是要了他們的命。為什么呢?就是因為他們單純地接觸PHP,而PHP只是一門腳本語言,抹殺了許多算法和數據結構的東西,而重點強調的是函數。結果讓大部分童鞋專注于語法層面,而編程思想得不到提高,很難轉行。

這就是JAVA轉PHP很容易,而PHP轉JAVA很難的原因。這也是有四五年經驗的PHPER仍然感覺自己水平提升不咋地的原因。

他們精通PHP,但除此之外,啥都不懂。這夠了嗎?不夠。

我發現論壇里不少人總喜歡鉆研函數,發現一個函數好用就沾沾自喜好久,而不知道自己已經落后高級程序員很大一截了。

斐波那契數列,如果用遞歸解答,100分的話,我給0分。

這說明這個人沒有任何編程思想,不會理清思路,不會推理,不適合搞計算機。就和約瑟夫環一樣,一旦邏輯稍微復雜,有人就頭暈了。

至少,高中數學不及格。

我測試新人,必然用約瑟夫環考察潛力和邏輯,一旦做不出來,直接全卷0分,對不起。

2.算法和數據結構在WEB開發中重要嗎?

很重要。很多人總是說WEB中算法不重要,而不肯鉆研這一塊。才會出現一個樹形結構難倒80%的PHPER,在他們眼里,一個無限分類就是算法的最高境界。一個遞歸難倒一半PHP新手,一個很簡單的斐波那契數列難倒80%的PHPER(他們不知道循環解法才是最有效的辦法,而這在任何語言里面都是經典例子,而絕大部分PHPER不知道,稍微聰明點的會用遞歸),不知道其他語言的程序員,特別是JAVAER會怎么想的。算法無論在什么中都是重要的。現在論壇里很多人對算法都是一竅不通,還是看看吧,絕對錯不了。

3。學歷重不重要?

重要。學歷就是你娘,有個好娘家,不愁嫁,至少也輕松些。我發現有許多人,抱著“越窮越光榮”的心態,喜歡嘲笑高學歷的人才(研究僧,煙酒生。),正如論壇里那篇北大博士生會不會PHP的那篇文章一樣的心態。讓我想起來,沒有文化真可怕這句話。

人家博士的知識深度和學習能力,是你無法匹及的,你只能仰望的。人家玩的是編譯器。

所以,虛心點,你有你的工作經驗,人家有人家的項目經驗,不會比你差。出名的那些人有幾個不是高學歷。李開復,美國博士,聯想總裁,軍校。

尊重知識。

4.教材重不重要?

看什么教材了。有的人喜歡笑話學生看死書。我想告訴你,寫教科書的人都是博士,教授,能看懂書的人,很牛叉。當然了,現在某些吹牛大王出的什么XX開發王啦,XXX開發寶典的就無法相提并論了,純粹是賺版費的,和正規的教材不是一個檔次。

5.山寨很可恥嗎?

不可恥。PHP被看做最草根的語言,沒什么可恥的。PY不也是草根嗎?但是為什么PY能得到IT界的認可,而PHP不能呢?

很多綜合性的IT網站,PHP只是很小的一個版塊,甚至沒有。

出身不好不可怕,怕的就是不爭氣。

6。我有必要學習其他語言嗎?

有!PHP是一門優點和缺點特別突出的語言,所以他并不適合作為一門入門型的語言來學習,它也不是一門綜合性極好的語言。這就是為什么現在大學的教材選擇C語言,FORTRAN,JAVA而絕對不會選擇PHP作為教材的原因。學習了其他語言,開闊了自己的視野,你才會發現自己是多么渺小,才會學會謙虛。

7。我有必要進培訓機構嗎?

沒必要。培訓機構的實力不敢恭維,快餐教育只會培養出一個代碼工人,而不是程序員。綜合我上面的觀點,你應該知道咋做了。

建議:

1.不要停止學習。

2.不要停止思考。

3.不要停止進步。

4.不要浮躁狂妄(很多搞技術的人容易陷入其中)

5.踏實。我老看到很多人對C語言一竅不通就開始討論或詢問PHP的變量機制。我不了解這個對你有啥用,就算你一知半解了,除了顯耀外,還能怎樣。

我們必須知道學習是一個過程。快餐吃了會營養不良的。

同是窮二代,這就是為什么有人覺得生活很美好,有人天天罵娘;

有人感謝教育,有人天天痛罵學校的原因。

為什么名牌大學的學生感謝新學校給了他一分工作,而下流大學的對學校痛罵不已; 因為有人靠知識改變了命運,有人沒有。

什么算法數據結構和語言一點關系也沒有,說明作者也就半桶水出來氣氣這幫phper壯大一下.net的聲勢...經驗!=技術

你認為沒關系,那是你內功和層次不夠。功夫的修煉有一個層次的。

簡單的,比如說對于一個數組排序,只有1000個元素的數組排序和10億個元素的數組的排序一樣嗎?

求10000以內的素數和100億以內的素數一樣嗎?

你不要跟我說他們的算法是一樣的,也不要跟我說排序么不就是SORT函數么。更不要說后面的情況你遇不到。(你網站規模一大,必須考慮這個東西。底層操作無非就是數字運算)

你更不要跟我說我一個MEMCACHE就就解決了。

這就是大公司比如百度和小公司的面試題為什么很大區別,為什么大公司愿意招沒有經驗的應屆生也不肯招有經驗沒技術的人,更愿意招科班出身的人,也是為什么一個應屆生的薪水能超過幾年工作經驗的人。原因不是學歷,而是他們有一個系統的學習,從算法到編譯原理,從數據結構到C語言,從軟件工程到離散數學,從應籌學到微積分。這個系統的學習體制保證了他們的快速上手和深入理解能力。你有三年工作經驗,但對于同一個陌生的東西,你可能要半年,而他只要兩個月。故,我強調一個系統的學習,做 programmer而不是coder。

也是你進不了大公司,做不了核心的原因。你說算法和WEB無關,那你是不是認為斐波那契數列就僅僅是玩游戲的,求老兔子生小兔子的?你是否知道余弦定理在搜索中的應用很廣,而不是高中生拿來算算三角形夾角那樣的簡單?

記住:靠一門語言可以吃10年飯,靠數學可以吃1000年。

第五篇:一個老程序員的十年回顧

目錄

上篇艱難人生

一、第一次考研的失敗

二、“土包子”的北京之行

下篇學習人生:主要是我學習計算機技術的經歷與感觸,時間跨度大約是從1994~1996年;中篇實踐人生:主要是我的技術實踐經歷:在公司打工,開發軟件,畢業求職與教書生涯,時間跨度是1999~2003。

上篇艱難人生

從此(決定考研)邁上了一條對我來說到目前為止最難走的路,是一個人生的煉獄。

一、第一次考研的失敗

決定考研之后,我就去買了相關資料,取出塵封己久差點當廢紙賣掉的大學課本,又開始了學生生涯。

考哪兒的大學?是我首先要考慮的問題。當時還有另一個高中同學也準備考研,也是計算機,他報了廣西師范大學的研究生。

父母則勸我也考廣西師大或我的母校廣西大學的研究生,說那好考得多,也可以托人走走關系。但我這人很犟,我在西大混了4年,什么也沒學到,我還去那兒干什么?我想起了高中時的夢想,決定直接考北京的高校。當然,北大清華是想都不敢想的,社會上工作幾年,我畢竟清楚自己幾斤幾兩,但北京幾十所高校,難道一所也不行?我不能再聽父母的話了,我要走自己的路,自己的命運自己負責,于是我堅持要考北京的學校。

知道這件事的朋友都對我表示驚奇,工作了4年,學校里的知識都忘得差不多了,還想直接考北京的學校,難度之大,相信不少人都認為我成功的希望很渺茫。事實證明,他們的看法是對的,但不全對,因為世上本就沒有絕對的事情。

這時,我還在一家私營公司里打工,于是,白天上班,晚上就挑燈夜戰,每晚不到12點不休息。

經過半年的復習,我參加了1997年元月的全國研究生入學考試,成績出來,我專業課沒問題,但數學才得了44分,毫無疑問,名落孫山。

這是一個打擊,但對我并沒有太大的影響。

這時,我小時候住在隔壁的阿姨來到桂林,她說她女兒(我小時的玩伴,也姓楊)去年就考研了,但也同樣沒過,她原先在北京服裝學院讀本科,畢業分回廣西柳州一個國企里,工作一年之后考研,沒考上之后,她就把工作給辭了,專門跑到北京同學家中復習一年。97年考研她成功了。

得知這個消息,對我是個很大的鼓勵。我想,她一個比我小的女孩都能成功,我為什么不行?我想辦法與她聯系上了,在后來的考研歲月中,她給了我極大的幫助,幫我買資料,幫我問成績,寫信給我,鼓勵我堅持下去??

受人滴水之恩,當涌泉以報。

世上的人大都只會“錦上添花”,但只有“雪中送炭”才是最寶貴的。她就是我的“雪中送炭”人,她研究生畢業后嫁到青島去了,斷了音訊,但我心中永遠記住了她的幫助。我決定,從今往后,如果我有能力幫助別人的,就一定要幫助人。這世界充滿了太多不好的東西,我應該努力往其中添一點好的東西,哪怕顯得多么微不足道。

二、“土包子”的北京之行

1.中關村印象

剛好,1997年我大哥在北京中央美院進修美術,我決定明年繼續考研,于是辭去了在一家私營電腦公司的工作,于6月底來到了北京,住進了大哥的宿舍。6月到7月,我在北航學計算機維修,7月參加陳文燈老師的考研班,一直呆到9月中旬,我才回到桂林。

中央美院當時搬到了北京西北角的西八間房,我和大哥一起住在學生宿舍中。認識了不少來自全國各地的搞美術的大哥同學,我很喜歡和他們這些搞藝術的人在一起,看他們色彩斑斕,形象逼真的油畫,和設計精巧的一些手工作品,是一種美的體驗。與我們工科人相比,他們是另一種思維方式。

7月份,大哥要回桂林了。在回桂林前,我幫他和他的同學們去中關村電子市場一口氣買了三臺電腦,當時最紅火的電子市場是中關村電子市場,就是現在北大太平洋電腦商場所在的地方。那時電子市場里熙熙攘攘,如此的紅火,是我在廣西所從未見到的也從未想到的。在大街上隨處可見抱著臺打印機,拎著個掃描儀的人,把電腦配件當成白菜一樣賣,這就是我對聞名全國的“中關村電子一條街”的最初印象。

我到了中關村,見到了那些我非常熟悉的公司:北大方正,金山WPS,江民科技??,見到了北京書堆積如山的書店,感嘆這里真是一個知識的海洋,覺得親身感受到了中國IT業的脈博。

大哥回去后,我一個人留在北京,騎著輛破自行車逛了中國最有名的大學:北大和清華,北大風景如畫的未名湖上處處荷葉飄香,清華平平展展的草坪展示一種平實坦蕩的心胸。一墻之隔,校園內外,就是兩種不同氣氛,無名無狀,卻讓我這個二十多歲沒出過廣西的土包子感受深刻。

2.“瘋狂”的考研班

我參加的是暑期文登學校的考研班。中央財經大學那棟破敗不堪的學四樓里,住滿了來自全國各地的學生,和我住在一起的,一個是湖北的,一個是東北的,一個四川的,為了同一個目的,大家從天南地北聚到了一起,我當時真感到了一種“家”的感覺,原來這世界有這么多同路人,我不過是中國十幾萬考生中一名不起眼的“老生”罷了,但還不算是“范進”。

考研班的日子是“瘋狂學習”的日子。

記得我們需要到北方交通大學的大禮堂去聽人大老師索愛群的政治課,一千多人的大禮堂被擠得滿滿的,連過道上都坐了人。在老師的講臺前堆滿了各式各樣的錄音機,足有一百多部,來自全國各地的莘薺學子拿著一瓶礦泉水,在北京最熱的7月,揮汗如雨地在記筆記!這段日子,我用去了7個筆記本!這種氣氛,我以前在廣西是從未見過的。我本來以為我已經夠努力勤奮的了,到北京考研班一看,根本就不算什么。

陳文燈老師教的數學給我留下了最為深刻的印象,他上課不用講稿,所有的例題全都記在他的腦里,隨手就可以寫出來,絲毫不差,還總結出一整套解題方法,讓我大開眼界。我是見著了,原來一個人對本職工作可以精熟到這種地步!后面我還會談到另一位老教授對職業可貴可敬的敬業精神,不敬業,就不是一個合格的勞動者。

我一直呆到身上沒錢了才離開北京。這三個月花完了我工作幾年的所有積蓄,卻對我的影響是巨大的,中國什么地方最適合學習?最適合學計算機?在我看來,只有北京!

我下定決心,一定要到北京來學習計算機技術。

3.差點跳樓的致命打擊

9月中旬我回到了桂林,開始準備第二年的考研。

但生活是不講情面的,我想當然地認為經過了北京名師的指點,我去年就是數學沒過,今年應該沒問題了,但事實并不如此。

1998年的數學試題,突然有了一次很大的變動,這次數學考試特別難,題量還特別大,全國及格率僅7%,平均分為30多分。我現在將這次考試試題稱之為“變態”的題目,出題的那幫呆在空調房里的教授們挖空心思出出來的題目,可把我給害慘了。我自認為心理素質夠強了,但因為這場考試關系命運太大,在考場上我的手都是抖的,幾乎暈倒,一道道的大題空在那兒做不出來,都象是在不斷地譏笑我不自量力,又象是一張張面無血色的血盆大口,一張口就把我給吞下去了,連骨頭渣子都不吐。

考完數學,我就知道我今年沒戲了。原來一個考場有幾十位考生,考完數學之后只剩下不到三分之一的人。我堅持著把后面的課目考完。在那種明知無望但僅憑一種信念支撐著要堅持到底的時刻,我真不知道當時是怎么挨完后面的專業課考試的。

3月,成績下來了,我的數學成績讓我差點去跳漓江了---13分!我從小學習勤奮努力,從沒拿過這么低的分數。真是破紀錄!當時真是灰心到了極點,準備放棄考研,到廣東打工,找個地方浪跡天涯,自生自滅去,實在沒臉在家呆了。

這個時候,我大哥勸住了我:你都考了兩次了,我看來你就是數學差,其它課你都過線了,專業課還都是80多分,為什么不繼續努力?集中精力把數學搞好就可以了。你現在放棄,就前功盡棄!

我這人笨,從小學學東西就慢,這是一大弱點。但上天是公平的,他給你一個弱點的同時,也一定提供了讓你克服這個弱點的方法。

我笨,但我好強,但我勤奮,但我堅持,人一之,我十之,笨鳥先飛,古已有之,古人可以做到,我為什么就不能做到?這事就這么收場?我不服,不甘心!于是,我下定決心再拼一次。

我現在沒有工作,也不想再去找工作了,住在家中,就與堆積如山的書干上了。在關鍵時刻,年邁的父母無條件地支持了我,他們默默地承擔了一切,讓我有飯吃,給我一個安靜的環境,讓我去實現我的夢想。

我深深感受到父母的愛是多么的無條件!我一個二十五六的大小伙子,呆在家中吃閑飯,還讓父母為我的前途操心,那種心靈的煎熬,現在想起來都有種想哭的感覺。男兒有淚不輕彈,只因未到傷心處!在此,我要深情地對我的父母說:兒子絕不會忘記你們的恩情,唯望兩老保重身體,一定要等到看到我過上好日子的時光。

4.反思,走自己的路!

考研失敗,我反復想,為什么我聽了陳文燈傳授的做題秘訣,反而考得更差了?別人為什么用陳老師的方法考出了好成績?看來,每個人的具體情況不同,不存在可以讓人暴長功力的“武林密笈”,從這件事中我學到,決不能迷信權威,迷信理論。后來我對許多現象與潮流如CMM熱、設計模式、軟件工程等理論都持有不同的看法,認為把西方的東西原樣照搬是行不通的,不經過自己的大腦獨立地思索,不經過實踐的檢驗,不要相信任何東西!

從98年到99年1月,我斷絕了一切外部聯系,把自己關在了家中。我父母的工作單位是一個療養院,全院加起來也就一兩百號人,后山就是一個森林公園,空氣清新,林木繁茂,大院里還有一個小山(是真山,不是假山,桂林的這樣象竹筍似的山多了),山上修了個亭子,平時少有人來,真是一個閉門修行的好地方。

我每天到小山亭子上去學英語、背政治,桂林四季長青,我周圍是青山綠竹,微風一過,樹葉沙沙做響,我就在這里學起了戰國時的蘇秦。從春學到夏,再從夏學到冬,苦苦學了一年,這一年里,使我的心志得到了極大的鍛煉,困難更加難以擊倒我。后來我境況轉好,生活中很多人覺得受不了的挫折,在我看來都不過是小菜一碟罷了。

桂林多奇山,秀美蒼翠,風景四季如畫。每當我學累的時候,總是看著這美麗的風景,贊嘆祖國江山如畫,感觸人生之渺小,命運之無常!

大哥從北京帶回了一臺電腦,奔騰166、4.2G的昆騰大腳硬盤,當時不錯的配置,把它送給了我用。我渴望了多久的東西終于到手了,我終于可以無限制地使用計算機了!我把電腦放在床前,伴它入眠。

我有時半夜會突然驚醒,想著目前的困境,渾身會出一身冷汗。電腦沉默不語,在一旁安靜地陪著我。我看著那藍幽幽的屏幕,心情非常復雜。

有了電腦也難過,我得抑制住自己強烈地想探索軟件技術的欲望,強制自己把主要精力放在考研上。

整個考研英語大綱有5300多個單詞,為了背下它們,我用VB編了一個背單詞的小軟件,每次可以分別顯示中文或英文,并可以區分哪些單詞沒記住,下次復習。所有單詞我都是用鍵盤一個字母一個字母地敲入的,每天早上一起床,先對著電腦背它半個小時。到考研結束,我一看,數據庫中已有了兩千多個單詞。

這一年以來,我真是玩命,什么考研理論我都不信了,我就托人買了國家教委出的幾本考試分析,就專門研究考研試題,我要找出適合我自己的方法來。

考研數學考試分析500多頁的書,被我翻來覆去地將歷年考試試題做了三遍。黨的十五大報告我至少背了一百多遍,我稱之為背“語錄”,真稱得上是“倒背如流”,考政治時我把大段大段的十五大報告文字抄上去,居然得了75分!

發黃的本科高等數學和概率與數理統計,以及藍色封皮的線性代數課本,都被我翻得不成樣子。我覺得我就是基礎太差,在這種基礎之上,講什么做題方法都是空中樓閣,一定要抓住“三基”(基本知識、基本方法與基本原理)。但我不得不悲哀地指出,我這些努力并未使我的數學能力有所提高,數學并不是這樣學的,數學思維絕不是這樣培養的。怎樣學數學?得去問華羅庚與陳景潤等數學大師!我至今數學還是不行。也希望有這方面經驗的人能夠教我,讓我補上數學這一課。

生活總算給了我一次微笑。1999年考研,我數學得了60分,終于邁進了大學的門檻,可以打起背包上北京了。

我這人比較笨,不善于找到達到目標的最佳路線,但憑著牛勁鉆下去,硬給我鉆出了一條路。這條路能走通還帶有一些僥幸的色彩,大家想必比我聰明得多,一定能找到更好的路,用更經濟更聰明的辦法達到目的,這是一種大智慧,是我所沒有的。

這段經歷對我個人的思想品質的影響是深遠的。為什么這么說?為了考政治,我深入全面地了解了中國近現代史,我去盜版碟市場買了不少存有歷史資料的光盤,從多方面來看中國歷史,凡電視中有關歷史的節目,我必看。我在這里尤其想說的是一個巨著——《毛澤東選集》!經歷過文革的每個家庭,哪家沒有毛選?我家就有不止一套。毛澤東選集一到四卷,發黃的書被我在這段時間通讀了一遍。其中的經典文章更是被我看了一遍又一遍,趕上金庸的《射雕英雄傳》了。越讀越覺得毛澤東之人真是數百年才出一人的大牛人,他的《湖南農**動考察報告》、《論持久戰》等著作,其中體現出來的深刻洞察力與對中國國情的深入把握,其博大的心胸,為國為民的精神真叫我震撼!最終奪了天下,實在是中國社會的必然,當時她集中了多少中國最出色最優秀的人才,再加上毛澤東這種不世出的大牛人領導,老蔣真與他不是一個水準的,想與老毛逐鹿中原,必敗無疑!我成了毛澤東的崇拜者,但絕不是盲從者。

說起來大家可能不信,我從毛選中得到了許多精神上的營養,更加樂觀了。毛選,真是中國人巨大的精神財富!近年來有不少憤青指著毛澤東晚年的失誤全盤否定毛澤東,在我看來真是狂妄無知,他們有幾個真正了解毛澤東?有幾個真正客觀地看過毛選?有幾個有資格對毛澤東做出評價? 把他們放回毛澤東生存的那個民族危亡的時代,他們還會有這么多屁放?!說不定最先當漢奸的就是他們。呵呵,不好意思,說粗話了。

閑話少說,回到正題。

回顧這段經歷,我只能說是“具有中國特色的考研之路”。我感嘆,中國的考試就是扼殺人性的東西,高考與考研尤其如此。我要是用這種精力去學計算機,一年半的時間,還有什么技術學不到手?但我沒辦法,現實逼著我去考這種我并不想考的試。中國考試之難我看全世界也不多見,我想,每年全國還有那么多的學生要參加這種考試,大量的人力物力與年青人的精力和時間都耗費在考試上了,而考試的內容與實際脫離那么遠,真的有助于人才的脫穎而出?我看反倒是形成了一種應試教育,扼殺了年青人本來所具有的創造性,中國現在為什么出不了大師級的人物,應該反思中國的教育制度。

下篇-實踐人生

一、希特勒地堡與CIH病毒

1999年4月,我來到北京參加研究生復試。復試完了之后就不回去了,我拿著一張光盤,里面刻著我用VB和Authorware 3.5編的一個Cool 3D的教學軟件,到處參加招聘會,開始了在北京的打工生涯。

說句實話,我心中真是一點底也沒有。北京人才濟濟,我一個三流大學的畢業生,又不是計算機專業的,有人要我嗎?

我在北京無依無靠,沒有任何一個親戚在北京,住成了大問題。北京這地方,錢太不經花,生活費用太高,我四處尋找便宜的地方住。后來,我在北京化工大學對面的招待所中租了個床位,每晚20元,地下室。這個招待所的地下室非常大,每天回去的時候,都要走過長長的曲曲折折的通道,加上那昏黃的燈泡,每次我都有走進了希特勒地堡的感覺。地下室里潮濕陰暗,不見天日。地下室里人員很雜,什么人都有,永遠沒有一種安全的感覺,所幸的是我也是個窮光蛋,光腳的還怕穿鞋的?別人能呆我也能呆,唯一讓我擔心的是錢,沒錢,在北京連流落街頭都不夠格,立馬被收容去昌平篩沙。呵呵,我沒這種經歷,這是當時住一塊的一個外地要考北京中醫藥大學的博士生說的(我倆居然住到了一個屋里,大家都沒錢,只能擠地下室,只是他老兄晚上打呼,我可真受了不少罪)。

日子一天天過去,袋里的錢一天天少了,但工作還是沒著落,心中越來越慌,除去學費,來京時父母給我2000元,大哥資助我的1000元就是我當時的全部資金(3000元在北京能呆多久?!)。我當時訂了個計劃,留下500元保底,打死都不能動,要靠它作路費回家的。我當時說,一定得找到一家公司,再少的錢都干,只要有口飯吃,有張床讓我睡我就滿足了。

我一共應聘了四五家公司,最具傳奇色彩的是到西單附近一家公司的應聘經歷。那時,我帶去了我的作品,公司項目經理要看,于是我給他們演示,很奇怪,程序一打開就死機,一連兩臺電腦都一樣,末了,兩臺電腦都啟動不起來了。用瑞星一查,CIH病毒——那天正是4月26日!于是,CIH破壞了電腦主板的同時,也無情地摧毀了我的就業機會。還算老板可憐我,沒要我賠。其實我當時快到山窮水盡的地步了,真要我出錢,我可能連家都回不了啦。陳盈豪(CIH病毒的作者),你小子這么的聰明做什么不行,偏要去做病毒,害人害已,弄得我連個飯碗也找不到,晚上回“希特勒地堡”,把這小子罵了無數次!

總算天無絕人之路,在我數著最后還剩余600元錢的時候,終于有一家公司要我了,做中小學教育軟件,月薪1600。干了兩星期,又給我在公司的倉庫挪開貨物,搭了個床位,我就在那住下了,慶幸再也不用到“希特勒地堡”里當沖鋒隊員了。每天下班后,我就睡在林立的大紙箱之中,如果來個地震,呵呵,我就埋在紙箱中了,休想爬得出來!

我干得非常努力,第一個月工資開出來,扣掉個人所得稅,我拿了1500多元。你們不知道我拿到第一筆工資的感覺!這錢在很多人眼里簡直不算錢,但對于一個沒工作近兩年,工作也一個月收入不到200的窮小子而言,就象陳佩斯小品中所演的:“我王老五活了一輩子,還從沒見過這么多錢啊!”。好笑嗎?我一點也不覺得好笑。我只是心酸,我到了28歲才可以用自己的知識與技能養活自己,再不用依靠父母和兄長的資助,才真正完全用自己的力量在社會上站起來,一個沒有經濟自立能力的人,只能是個不成熟的人,一個躺在父母身上的人,不是一個真正的男子漢!我當這樣的孬種當了28年!

我找到工作后向家里寫過一封長信,信中講了我對父母平時不好意思說的很多心里話,當時,我父親說,母親接到信都哭了。我剛拿到工資,馬上打了個電話回家里告訴母親,以緩解他們的焦慮,畢竟兒行千里母擔心啊!父母有退休金,一再表示不需要我贍養,而我再這樣不要臉下去,我還是人嗎?我就是從那時候開始,下定決心,從今往后,再不向家中要一分錢!今后三年讀書和生活的費用我一定要用自己的勞動來獲取。

金錢帶給我的激動就是在那段時間,溫飽問題解決之后,金錢對我的誘惑就再沒有了,哪怕讓我一個月賺一萬,給套房子給我,也不可能再給我帶來幸福的感覺了,錢是重要的,但不能成為它的奴隸,家中不需要我負擔,我一個人有吃有喝,干著我喜歡的工作,足矣!

我在那公司一直干到九月學校開學為止。我走的那一天,公司居然還開了個歡送宴會,老板封了500元的封包給我。我真是感動。我大學畢業后在社會上掙扎求生,得到的大都是冷眼與蔑視,社會終于認可了我的價值,我不是一個只知道吃飯的廢物!

1999年9月9日上午9點,在這個最多9字的時刻,我到學校報道來了,放下行李,我坐在分配給我的床上,心中終于踏實下來。

現在,我在北京終于有一張屬于我的床了,一張真正屬于我的床了,終于有個地方可以讓我安穩地睡覺了。沒有這段經歷,我怎么體驗到“安居樂業”這一個詞的真實含義!個人如此,國家要做到,中國要做到,更難!

二、編程生涯

讀研兩年半的時間,我四處打工,這兩年半我至少在七八家公司做過,編了十幾萬行代碼,為自己賺了一臺電腦,兩部手機(丟了一部),還有讀研期間的所有費用,實現了我的目標:沒向家里要一分錢。

我水平不高,但在打工過程中,發現許多中國軟件公司的水平更菜!

2000年暑假,我參加一個商品軟件的開發,搬到了北大燕北園的一個宿舍,在那兒搞封閉式開發。在這個項目采用VB6開發,主力程序員除我之處,還有一個華北電力大學的研究生。大家都沒開發商品軟件的經驗,沒經過正式的設計,就匆忙編碼了。我曾經想采用分層的系統架構,但遭到另一位程序員的反對,爭吵沒有結果,老板也不能做決定,結果各行其是。現在看起來,那時真是太菜了,任何一本軟件工程書都會指出這種做法是不對的。

我們直接就熱火朝天的干了起來,那位華北電力大學的老兄,真讓我佩服,他可以在一個sub過程中寫上2000行代碼!我覺得奇怪,為何他能寫這么多的代碼?一看,頓時我暈倒,他居然將每個控件的left, top, width等屬性都用代碼來設定!想想這樣的程序,調試時光單步執行就需要按多少次F8鍵!

我們在電腦旁邊搭了個行軍床,每天都是干到早上6點才睡,12點吃中飯,然后又是一個通宵。當時整個工程只有一個類模塊,被我用于封裝訪問數據庫的ADO數據引擎,這是整個工程中唯一一處用到了最簡單的面向對象技術的地方。然后,我寫了近十個bas公用模塊,每個模塊代碼規模都有一兩千行,還有十幾個窗體,每個窗體中都塞滿了事件驅動的VB代碼,整個軟件應該有10萬行代碼,我一個人在此期間至少就寫了3萬多行VB代碼。程序的主處理流程我甚至用ADO與DAO寫了兩套!

現在想起來,我們當時根本就不知道面向對象為何物,更不理解許多對軟件開發至關重要的理論,就憑著一種熱情。在這段痛苦的開發經歷中,我不僅精熟了VB,而且從中學到了很多。現在再開發同樣功能的東西。我至少可以砍掉2/3的代碼。怎么學都不如從失敗中學得多。

后來我總結VB程序員的三個境界:

(1)所有代碼都只放在窗體文件中的,屬于菜鳥級,他們只會從面板上拖控件,設置屬性,然后再給事件編碼。

(2)工程中有bas模塊的,屬于中間級,他們已意識到有大量的代碼是重復出現的,應該將其抽取出來作為公用模塊。

(3)工程中有cls模塊的,屬于高手,他們已掌握了面向對象的思想,并能應用這種思想來解決實際問題。

正是這次開發經歷,促使我反思:到底如何開發軟件?我個人可以用VB完成各種各樣的功能,為什么湊在一起就會那么困難?更正一個bug為何那么難?為什么一個看似簡單的軟件,要拖半年的時間還看不到結束的日子?

九月,研究生要開題,我自擬了個課題:軟件體系結構設計。我決心弄明白,好軟件到底是怎么做出來的。

我放下了VB,開始研究C++,原來學過VC,但沒學會,就直接從C++ Builder入手。Borland公司的VCL類庫讓我大為嘆服,很快就迷上了它,為此連帶學了Delphi,并參與了一個Delphi項目。給我真正震撼的是《設計模式》這本書,看了才知道,原來好軟件是這么設計出來的!在此,我強烈推薦所有有一定編程經驗的程序員一定要看這本書!

一邊學習理論,一邊可沒忘記我沒經濟來源,于是又四處打工,接一些小項目與小模塊來賺些生活費,國內一家橫跨家電與軟件的著名公司是我打工期間去過的最大的公司。但無論什么公司,都給我一種感覺——爛!公司中充滿了對員工的剝削與不尊重,對軟件開發這一事物的錯誤認識,管理混亂。

我沒機會去外企,技術水平不到,別人不要我 ?,但我所見到的軟件公司,我敢說沒一家能做出世界一流的軟件!

我上的研究生課程也讓我失望,整個就是本科教育的再版。經過高考與考研兩次重大考試,我對考試已是深惡痛絕,但讀研期間仍要考試,而且是閉卷!我就不知道我去背那些條文對我的研究與學習有何幫助?2000年7月當我考完最后一門,終于大松一口氣,我終于擺脫了考試的壓迫,可以在剩余的一年半中真正搜索我渴望已久的軟件技術了。這年,我29歲。

悲哀嗎?一個中國的程序員要到29歲才可以真正自由地學習想學的東西!

我開始研究面向對象理論,看了大量的書,每天都在實驗室學習到深夜12點,天天上網,CSDN成了我最常去的網站。

隨著我對軟件技術的了解越多,就越深刻地感到國內與國外技術水平的差異是如此的巨大,巨大得甚至有讓人絕望的感覺。同時,在北京這個中國軟件人才最集中的地方,我也見到了許多牛人,一個清華的本科學生,做程序員可以拿到一個月12000元的工資,一個北大的計算機系研究生,一畢業就到外企,一個月一萬多收入,每年發16個月工資!干了兩年就開了自己的公司。我看到了一個北方交大的本科生作品,在半年的業余時間里,用Delphi寫了十幾萬行代碼,他甚至在代碼中嵌入匯編,自行編寫數據存取引擎讀寫Foxpro,速度超快!軟件中有一個計算公式解析模塊,他用編譯原理理論居然做了一個小型的公式解析器,就象C++編譯器檢查C++程序一樣,不僅可以判斷是否公式正確,而且給出的出錯信息還相當準確!其基本功之扎實,水平之高讓我望塵莫及!中國優秀的人才真還是不少的!在精英集聚的北京,面對著博大精深的軟件科學,我深感自身的渺小。

但我畢竟是靠自己奮斗出來的,我并不自卑,這世界需要牛人,同樣需要大批合格的勞動者,我成為不了牛人,但我作一名程序員是合格的。

時間過得飛快,一年半根本就不算時間,馬上就要畢業了,學習的成績如何,要到社會上去競爭了,讓社會考場來決定你是否及格。

三、畢業求職

98級的研究生是IT業最后輝煌的回光反照。當時,各大公司都發了瘋似的要人,象華為,當時是來者不拒。計算機專業的研究生是一搶而光,本科生也供不應求。2001年畢業的我的師兄師姐們,平均每個人手頭都至少有兩三個offer,談的工資沒有低于每月6000的,許多人去了外企,工資在8000~10000每月的也有。真是畢業生的黃金時間。

但好景不常在,911事件我看來好象成了分水嶺,911之后,整個IT業急剎車,就業形勢急轉直下,各大公司都在消化去年吃得過飽的胃口,我形容是大家都吃壞了胃,再也不可能有我師兄師姐們的風光了。雖然時間相隔僅大半年。

從10月開始,11月和12月,我幾乎是在招聘會與公共汽車上渡過的,北京東南西北地去面試,上午在上地,下午可能就要跑到朝陽區,疲于奔命。

在找工作過程中,我良好的心理素質與豐富的編程經驗起到了很大的作用,并沒有遇到很大的困難,就先后有幾家公司表示要我。

其中我想說的有兩家公司。

一家是中國臺灣公司,應該說他們做得是不錯的,但我非常反感他們那種自認為高于大陸人的那種優越感,而且待遇也不高。面試之后,回來感覺很不好。

我想:我們大陸確實是不如中國臺灣發達,難怪別人看不起我們,這世界勢利得很,社會如此,國家亦然。但我中華960萬平方公里的國土,13億人口,難道要依靠一個小小的島嶼來撐門面?難道除了中國臺灣公司,我就無處可去了?雖然改變不了什么,但我決定絕不去臺資和日資的公司工作(日本人我更不喜歡,但我認為他們做事實在優秀,我們一定要向日本人學習)!在這種公司呆著,不爽!同時,我們的確也得爭氣些,這世界只尊重強者。

另一家是個很不錯的民族軟件企業,想要我,其老總專門找我去面談了一次,希望我能到他的公司工作。這位老總白手起家,能在五六年的時間內由幾個人發展到300多人,當時,是中國這個領域軟件市場占有率最高的公司,我非常佩服,他為人也很好,并表示可以給我每月比其他研究生多加1000元工資,而且希望鍛煉一兩年之后我能夠帶領一個團隊來開發產品,并負擔我畢業所需交納的各種費用。在就業不景氣的2002年,對我一個30歲的技術水平有限的老程序員如此看重,真叫我感動。雖然我最后還是沒去,但我仍然對這個公司充滿了好感。一個軟件企業最重要的是什么?是對人的尊重,沒有這點,可以斷定,這個公司長不大。

我為什么沒去軟件公司?放棄有可能在幾年之后年薪突破10萬的收入?是因為我已有了更想做的事,我想當老師!

我自己是從自學的路上走過來的,其中的艱辛歷歷在目,無人指點,我走了多少彎路?中國還有多少是象我這樣的年輕人無人指點的?我幸運能爬出來了,因為我至少還能有飯吃,比我條件更差的,比如農村的孩子,可能就被生活的壓力所淹沒了。我個人的力量很微弱,技術也有限,但我自認為至少是一名合格的程序員,如果能培養出一大批達到我的水平的學生,他們畢業后成為合格的程序員,中國軟件的根基就會更扎實,如果更能有一批遠遠超過我水平的學生出來,中國軟件就有希望了。軟件是什么?軟件以人為本!

人生追求什么?金錢?我很缺錢,但不可能把金錢作為我的目標,我希望我能夠成為一個對社會有所貢獻的人,能夠獲得心靈的充實,于是,我選擇了留校。

四、對教育的反思與教書生涯

2002年下半年,我參加了北京高校青年教師崗前培訓。一位杜教授的兩堂課讓我印象深刻,其中兩句話讓我深深震動:

第一句話:我是一個教書匠,教書匠好啊,好就好在“匠心獨運”!

第二句話:做什么工作都要達到變魔術的境界!

是的,作為一名教師,就必須起到一個傳聲筒與放大器的作用,將人類最聰明的人探索世界所得到的知識予以拓寬發展,以便讓更多的人能夠掌握這些知識并進而應用于實踐,從而推動人類的不斷進步。

作為一名計算機專業的教師,就要努力把先進的計算機技術以盡可能高的效率傳授給廣大的學生,引導他們直接面對真實的軟件世界,而不是向他們硬灌各種各樣的理論知識,強迫他們去死記硬背以應付考試。

我是一個小人物,才低學淺,但我真的認為高校計算機教育存在嚴重的問題。我在打工期間的開發經歷,以及閱讀國外相關資料的時候,發現學校中教的和社會上用的差得太遠!都已經是什么時代了,許多大學還設立Foxpro課程,難道就不能直接用現代主流的數據庫如Oracle,SQL Server,哪怕是Access也好,來講授數據庫知識?還有所謂的計算機等級考試,呵呵,過了三級學生的我見過不少,但他們真正對軟件,對計算機又理解多少?

在中國甚至于升職稱也要考計算機,我看了一本職稱計算機考試教材,里面幾乎原樣照搬計算機原理課程中的相關章節,弄得我給搞藝術的大嫂講了一個小時的二進制與八進制、十六進制的轉換方法,她還是弄不太清。我都泄氣了,對啊,他們搞藝術的,有必要去分清二進制的10與十進制的2有何分別嗎?他們八輩子也用不上。但是考試用得上,呵呵,又是中國特色。

拿C++來說,我講過C++課,許多的國內教材對C++語法下了大功夫,卻對體現了C++精華的STL只字不提,對代碼背后所體現的軟件開發思想與方法更是視而不見,我用C++也編過不少程序了,說句實話,我用到的特性不到C++的三分之一!于是就出現了這種怪現象,許多學生考試可以拿八九十分,給他一個簡單的實際問題他卻不知如何下手!

還有UML,現在好象很火的樣子,我們讀研時就開了這門課,講句實話,當時這門課我就沒聽懂,可后來我嘗試著用C++用面向對象的方法來編程序,然后,由代碼倒推回UML類圖,一下子就明白了,原來UML只不過是一種描述面向對象系統的符號罷了,如果學生沒進行過真正的OOP,那就是為了學UML而學UML,根本就本末倒置。

還有軟件工程,我的感覺,一個人如果沒寫過一萬行以上的程序,他看軟件工程書就同看政治書差不多,每句都對,呵呵,就不知道為什么對。我完成了那個幾萬行的VB程序之后,再回過頭看看理論,真是句句是真理!每個理論背后都是大量實踐經驗的總結。

回想我做軟件的體會,我發現所有的知識都是一個完整的體系,根本就無法區分哪些知識是本科的,哪些知識是研究生課程。于是,一種想法產生了,我主講程序語言類的課程,那我就直接以真實的軟件開發過程為主線,實踐中需要什么我就講什么。講C++,我就拋開了指定的教材,C++我講了STL,我講了OOAD,兩者我都講了用Rose進行雙向工程,引導學生去學UML,一開始就用UML去描述自己開發的程序,何必浪費大量的時間去學結構化的編程方法?

我現在簡直成了面向對象技術的布道者,我下學期即將開設OOAD基礎選修課,從實際項目中抽取典型的案例,講UML,講Rose,講設計模式,講軟件體系結構,例子代碼橫跨C++和.NET下的開發語言(C#和VB.NET),這對于我一個技術水平有限公司的董事長而言,實在有點不自量力,我鼻子上才插上幾根蔥,就想裝大象?但我想,如果我能成功地激發出哪怕1%的學生的興趣,能引導他們走向我認為是正確的方向,能啟發他們思考,能直接面向真實的軟件開發活動而不是學校的考試,就是我的成績。我現在正在看引進的原版書籍——《設計模式解析》,時時擊節贊嘆!《設計模式》經典但難懂難用,而《解析》一書的兩位作者既有豐富的從業經驗,又對OOAD進行了深入的思索,真知灼見時時展露于書中,我現在剛看了這本書的80%,基本上可以用一個成語來描述這部書:深入淺出!

要做到深入淺出談何容易!只有同時具備技術專家與文學作家素質的人才能做到!

反觀我們國內的大量教材,還有大量的垃圾論文(包括碩士、博士的,本科的就算了,我看絕大部分根本不能稱之為論文),全都是“淺入深出”,作者自己都未必明白,就東拼西湊,擺出個樣子嚇人。本來完全可以用大白話三言兩語講清楚讓人明白的道理,有人專門要繞一大圈,專挑用高深的數學公式來表達,唯恐別人容易理解,顯得他水平不高!呵呵,什么東西一沾上“數學”,立馬身價百倍。我就聽過一個北師大的一個在讀博士說過:如果一篇博士論文中沒有一個數學公式,根本就不算是博士論文。這句話對不對,大家可以多思索。我數學不好,沒資格討論數學,我的直覺:數學是工具,但如果為了發表論文等目的而故弄玄虛,為數學而數學,是不合道理的。中國的學術水平與現狀,大家都心知肚明,不用我廢話了。

現在每年都畢業大批的計算機專業學生,可其中真正具備扎實根基的可以很快勝任工作的我看只有5%(95%的學生不要扁我,不同意就當我在說胡話,我很瘦的,一扁就沒了?)。多年以來,我國高校計算機教育是按照計算機科學研究者來培養的,可事實上,有多少學生能從事計算機方面研究的能力?我看應分流,80%的學生按工程師方向來培養,20%的學生按研究者方向來培養,而且應大幅減少必修課的數量,計算機領域太深太廣,樣樣都想教給學生,反而成了夾生飯,一個想從事硬件設計的學生和一個想從事軟件開發的學生,能給他們一樣的飯吃嗎?學校應提供各種條件和資源去引導學生,激發學生的創造性與主動探索性,讓他們去嘗試,去發現自己的長處,最終找到最適合自己的發展方向。不這樣做,中國軟件后繼乏人,沒希望。

五、實踐第一

2002年下半年,我和一個朋友去了北京郊區的一家雜志社,看到的情形讓我震驚:在信息產業最發達的北京,這家雜志社還用人工查對雜志訂單和款單,看著那按省來登記的幾大本厚厚的客戶登記本,工作人員需要手工來在其中查找相應的信息。這樣的工作效率,這樣的行業信息化水平!北京如此,全國又如何?

從這件事上,我看到了中國軟件業的另一方面。一方面我們沒有核心技術,另一方面,已有的技術又根本沒推廣沒用好。追蹤世界先進水平,對于我等這種水平的人來說,確實勉為其難,但將已有的技術用于解決實際問題,卻是我們可以做的。如果中國各行各業都真正能通過進行信息化而提高生產效益,那中國不就從根本上強大起來了嗎(象印度,IT一枝獨秀,其他行業沒有起色,我稱之為跛足的國家,絕不能成為世界強國)?在扎實的社會基礎之上,軟件業不就有了更大的市場與發展潛力?中國許多行業的信息化水平非常低,而且中國地域廣大,發展非常不平衡,有些地方信息化水平甚至為0!努力推動行業信息化,是我們這一代軟件開發者的責任!而追趕國外先進水平,恐怕就不是一代兩代程序員可以達到目標的,需要長期的努力。作為一名軟件開發者,只能腳踏實地,哪怕你只做一個小小的MIS產品,也要盡力把它做好來。

于是,我開始了期刊發行系統的開發,這完全是自發的,沒有任何資金投入,只有一種熱情在支撐。我開始選擇C++ Builder開發,做了幾個月,完成了第一個版本,但我發現,我找不到足夠水平的C++程序員進行合作開發,而且整個一個exe文件,在體系結構設計上雖采用了分層分塊的設計方案,但卻是源代碼級別的,要拆分成COM組件難度太大,不是一個人能完成的,于是中途流產。

2003年3月,我開始系統地學習.NET,我吃驚地發現,我原來想在C++中實現的許多功能,比如對象串行化為XML,在.NET中已有現成的類可用,.NET更把OO的功用發揮到了極致,它的混合語言開發,它的反射機制,它的新的自識別的軟件組件,以及強大好用的開發環境Visual Studio,都讓我驚嘆微軟對開發者遇到的困難的深入把握,相比用C++開發,至少可以提高1/3的開發效率。于是一個新的想法產生了,我要把以前的產品用.NET重寫,利用.NET強大的組件模型,將設計模式理論推廣應用到組件級別,通過XML和反射機制建立一套可動態裝配的軟件生產流水線,實現象Dell直銷PC那樣的軟件動態裝配直銷。只要建立好靈活可不斷重構的系統架構,配以對業務領域的深入分析,逐步建立功能強大的業務組件倉庫,就可以實現軟件系統的動態裝配。說干就干,我用VB.NET重寫了原先用C++編寫的系統,將原先的一個exe變為十幾個dll,而且這些dll還會隨著發展而不斷地分裂,也有可能重新組合,利用refractoring(重構)不斷進化,最終形成一整套完備的行業軟件組件庫。做軟件關鍵因素是變化,只有適應變化的系統才是有生命力的。

我用兩個月的時間大體上弄清了.NET平臺下的主要類庫,然后又用兩個月的時間再次重新實現了期刊發行系統的C++版本的全部功能,到8月份我寫這篇文章之時,第一個產品里程碑已經完成。同樣的,除了需求是由另一個合作者去搜集的之外,幾乎又是全部由我一個人包攬了所有的系統設計及編碼工作!

毫無疑問,我自覺得新系統要比老系統可維護性強得多,真正實現了徹底的全組件化系統開發,計劃再有一個月的界面美化,改正bug,引用多線程提高運行效率,優化系統結構,就可以提供給用戶試用了。市場如何,難說難測。

在開發過程中,我再次感到巨大的挑戰,不光是技術上的,更是管理上的。人才是我最頭痛的問題,沒有一流的人才,哪來一流的產品?我們找不到足夠水平的程序員一起合作(牛人哪屑于做這樣一個小兒科的產品?)我們要走的路還很長。也許我們開發的產品是失敗的,但我從來就沒指望能用這賺錢,我只是盡一個軟件開發者的責任而己,成敗已不重要!人生不嘗試,怎能體現人活著的價值?

剛好我編的程序告一段落。于是就crazy地敲鍵盤,一鼓作氣地把下篇寫完了。心中有好多話一次就說個痛快。

看得越多,想得越多,我就越困惑,人啊,你活著到底是為了什么?又整天忙忙碌碌地追求些什么?我這十年,??我都不知道怎么說了!

大家自己看吧!

結束語 永無止境的軟件之路

一、辛酸與苦辣

做軟件開發很苦的,技術進步如此神速,每個軟件開發者都得不斷地學習以跟上發展的步伐。有時我常想,何苦呢?我現在在大學中混,怎么樣不能混下去?為什么要做這些吃力不討好的事?我投了十年的時間去學習電腦,卻最終發現自己不過中人之資,離頂峰遠之又遠。古語云:三十而立。我今年32了,仍是孤身一人,看看周圍的同學,他們的小孩都差不多上小學了!許多都有了自己的房子和車子,而我到現在才開始申報中級職稱,還擠在集體宿舍中,望著北京高昂的房價而嘆息。現在社會越來越功利了,看著象我這樣的窮光蛋,看著由于長期面對電腦缺少鍛煉而瘦弱的身軀,又有哪個女孩愿意嫁過來受苦?

軟件人的生活很苦,壓力很大,我認為是拿青春賭明天。就是在這種惡劣的開發環境中,還有許多業外人士指手劃腳說程序員如何如何,還有太多的公司只顧壓榨程序員的勞動,缺乏對程序員基本的尊重,怎不叫人寒心?

“三十而衰”,這句本不應該流行的話居然成了中國軟件人員的流行語。中國程序員的悲哀!

二、無止境的追求

人類已進入信息時代,計算機技術幾乎每隔半年就有一次大的變化,我現在又面臨著這樣的抉擇:今后的路如何走?

北大的教師聘任制度的改革一石激起千層浪,說明了中國高校的改革勢在必行。我是歡迎這種變化的,雖然到時我可能會下崗。但人生中總會遇到各種各樣的挑戰,只要你不倒下爬不起來,就有希望。

我想我必須再次讓自己有個提升,要從小事做起,但做小事則絕不能成為最終的目標,也許,不遠的將來,我會走出國門,到世界軟件技術最發達的地區去汲取豐富的養份。今后的路怎么走,我還在摸索之中。

三、人生無悔

人生年華如水,時光無情。在過去的歲月中,我盡了自己的力,回顧往事,我可以說:過去的事只有遺憾,卻沒有后悔。如果給我再一次選擇職業的機會,我還會再次選擇軟件!

再過10年,到2013年的時候,我也許會再次寫一篇人生的十年回顧,到那時中國的軟件會如何?中國軟件的明天靠你我這些普通人去扎扎實實地去工作來支撐!少發些牢騷,多做些實事,中國軟件才會有光輝的明天。你我共勉!

一個老程序員的心理話

完成于 2003-8-3 北京

2003-8-3中午14:33,在我的彈指神功之下,我寫完了這近兩三萬字的個人自訴。一點也不累,回想過去的種種感觸,仍然身在其中。

樓上一位兄弟說想看我的愛情故事,但人生不是小說,沒有什么浪漫的,我只能讓你失望了,我是孤單地在人生之路上走著,我就是這樣的一個帶著點悲劇色彩的人。

如果有人能有這上中下三篇文章耐心看完,我會謝謝你。如果有人能指點我,我感激你。

好了,我去休息了,生活是一天天過的,不是嗎?

下載一個老程序員的心得word格式文檔
下載一個老程序員的心得.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    一個老程序員體會如何學好軟件編程

    一個老程序員體會如何學好軟件編程 轉眼間工作已經8年,從高三開始寫程序算起來,軟件編程已經快13年了,順便講講自己的體會。如果你要學好一門語言,那么請務必先花3個月到半年時......

    一個老司機的心得

    一個老司機的心得1)當你在野外開車時,突然從路旁竄出一行人,這時候如果你躲避行人,你就會 車毀人亡,否則你就會將行人碾過。你怎么辦? 答:軋死他,你的命比他值錢2)在正常行使過程中,如......

    一個老程序員未來10年的計劃目標

    一個老程序員未來10年的計劃目標 時間過得很快,又快到年底了,回顧一下,一不小心也工作十年了,這十年坎坎坷坷,有喜有悲,創業失敗了,沒辦法日子還得繼續過,打工又有2年多了,這期間最悲......

    一個老導游的講解心得

    一個老導游的講解心得 2006年04月17日 從游客的角度學習導游講解 我是一個干了10年的老導游,新導游們總是問我,以一個老導游的看法,怎樣才能進行好導游講解,但我每次都是從游......

    一個程序員的邏輯思維

    一個程序員的思維邏輯 程序員最基礎的素質是什么? 答:實事求是,對就對,錯就錯; 程序員一個最需要的的是什么? 答:耐心 程序員作品追求 答,零缺陷(no bugs) 1、不要說在我好的,看生產環......

    一個程序員的年度總結范文大全

    2011年度總結人生易老、時光易去。不知不覺,又到了年終。 回首這一年,細細思量,有歡樂,有憂愁;有收獲的喜悅,亦有遇到挫折的沮喪。更多的還是每天一點一滴的積累起來的成長。 在這......

    一個老預算員的預算經驗心得

    建筑工程預算,其實沒什么高深的技術,能看懂圖紙,會加減乘除、開方也就夠了。如果你能把科學計算器用熟的話,那工作就更簡單了。預算員很好做,特別是從技術口轉到預算口,那就更容易......

    導游隨感:一個老導游的講解心得

    其實我自已是一個干了10年的老導游,但每當我給新進公司的導游講課時總是從游客的角度來講。你要想抓住游客的注意力,首先你得明白游客們想聽些什么,想聽怎樣的講解。我們許多新......

主站蜘蛛池模板: 亚洲精品无码不卡在线播放| 一区二区三区无码按摩精油| 国产午夜精品一区二区三区| 国产超碰av人人做人人爽| 精品国偷自产在线视频九色| 2020国产精品午夜福利在线观看| 熟女乱伦视频| 免费做a爰片久久毛片a片| a一区二区三区乱码在线 | 欧洲| 国产人成无码视频在线观看| 亚洲精品无码精品mv在线观看| 无码人妻一区二区三区精品视频| 国产乱人伦精品一区二区在线观看| 大桥久未无码吹潮在线观看| 成人伊人精品色xxxx视频| 久久久久久久久无码精品亚洲日韩| 精品无码国产av一区二区| 国产精品无码a∨精品影院app| 亚洲国产精品无码久久久| 久久无码中文字幕久久无码app| 骚虎视频在线观看| 韩国理伦片一区二区三区在线播放| 92精品成人国产在线观看| 久久精品视频在线看99| 最新亚洲人成无码网www电影| 少妇人妻偷人精品无码视频新浪| 国产av国片精品有毛| 麻豆精产国品| 亚洲 中文字幕 日韩 无码| 亚洲精品无码久久毛片波多野吉衣| 久久精品免费一区二区喷潮| 好男人www在线影视社区| 亚洲色成人一区二区三区| 婷婷俺也去俺也去官网| 高潮呻吟国产在线播放| 国产做a爱片久久毛片a片高清| 精品无码av无码免费专区| 色舞月亚洲综合一区二区| 国产高清不卡一区二区| 久久av无码精品人妻糸列| 日本久久高清一区二区三区毛片|