我的程序生涯
?? ?如今,接觸CS幾近八年,不學(xué)無術(shù),所精之物鮮也,以至一事無成。
現(xiàn)回憶吾程序之生涯,以整理繁雜之心緒。
1. 接觸計(jì)算機(jī)和編程語言
?????? ?02年始大學(xué),DOS機(jī)學(xué)Pascal,一去不返矣,直到07年在做一Pascal軟件的反匯編時(shí)才再對(duì)Pascal有點(diǎn)回憶。是時(shí),Pascal與計(jì)算機(jī)導(dǎo)論并開,終于導(dǎo)論沒導(dǎo)好,而Pascal也尚未觸及指針話題就匆匆而終也,但明白了程序設(shè)計(jì)最基本的語句結(jié)構(gòu)、條件判斷結(jié)構(gòu)及循環(huán)控制結(jié)構(gòu),以此為根,方可后進(jìn),也不錯(cuò)了。
2. 初識(shí)C++及面向?qū)ο?/span>
??????? 03年來了個(gè)跳躍,未學(xué)C而直接開設(shè)C++課程。一天,任課教師有事,其夫代之,僅一言令吾有所體悟:你們這樣C語言學(xué)不好,C++也學(xué)不好。誠(chéng)然!課程快結(jié)束時(shí),面向?qū)ο蟛糠执掖伊耸?#xff0c;好在當(dāng)時(shí)知道了類的樣子,知道有OOP這么個(gè)東西。最大的欣慰是認(rèn)真學(xué)了C++的C語言部分,初步理解了指針這個(gè)東西。學(xué)習(xí)效果顯然不好,加上自己很懶惰,這對(duì)我隨后幾年的影響頗大,譬如對(duì)C語言的printf給予100%的憎惡,人家問我會(huì)什么語言時(shí),我只能說什么都不會(huì),勉強(qiáng)說我會(huì)C++中的C語言!
3. 在頹廢中練習(xí)編程
?????? ?03年底,開設(shè)數(shù)據(jù)結(jié)構(gòu)。現(xiàn)在回想,可嘆,自己為何總是差一拍呢?學(xué)數(shù)據(jù)結(jié)構(gòu)時(shí)沒有體會(huì)到數(shù)據(jù)結(jié)構(gòu)的精髓,反而是在利用課程練習(xí)提高編程能力,練習(xí)類如何用,當(dāng)然當(dāng)時(shí)還是不懂OOP的,只是為了用類而為之,但仍有程序設(shè)計(jì)的自我滿足感,因?yàn)槟馨炎约合氲挠贸绦虮磉_(dá)出來,特別是調(diào)試解決問題的過程很刺激。
?????? ?同時(shí),那一年伴隨著一個(gè)挺熱門的東西,就是有同學(xué)自已學(xué)習(xí)VC(平常上課是不會(huì)教這東西的),學(xué)習(xí)做界面,牛的一塌糊涂,就跟風(fēng),其實(shí)就是買本教材照著點(diǎn)擊鼠標(biāo)罷了,在不懂面向?qū)ο蟮臅r(shí)候?qū)W習(xí)這個(gè),回想起來真是可笑!
?????? ?隨后還有一些課程,能夠練習(xí)到編程,譬如數(shù)值分析、操作系統(tǒng)、數(shù)據(jù)庫、計(jì)算機(jī)圖形學(xué)等等,或多或少,總是有些提高,但并沒有本質(zhì)性的改變。
??????? 后來學(xué)習(xí)匯編,也沒多大感覺,加上自己沒認(rèn)真學(xué)組成原理、微機(jī)原理等課,認(rèn)定自己不適合搞硬件,其實(shí)這緣于自己的頹廢。
??????? 04年下半年開始隨后的兩年是這輩子最不齒提起的階段。同寢者共事網(wǎng)游,與吸毒無二,越陷越深,終不可拔。于其中也,迷之又迷;而于其外,則痛苦不堪,愧對(duì)師親,自責(zé)良心,毒癮侵之,難忍而入網(wǎng)吧者再。學(xué)習(xí)成績(jī)驟降,一等獎(jiǎng)學(xué)金至二等,再三等,再到無,乃至逢試只望及格。也就是在那個(gè)時(shí)代,學(xué)會(huì)了如何應(yīng)付考試,我們知道及格是不能違背的下限,故每臨考試,皆群起合作之,依重點(diǎn)作分工,各自發(fā)憤,互講所學(xué),一起過關(guān),未曾掛課,此乃唯一無憾之事。但最大的痛恨,乃專業(yè)之廢!那會(huì)兒簡(jiǎn)直傻的可愛!一舍友,到了大四,讓他用C++寫程序時(shí),上來就begin,end,大哥,感情現(xiàn)在咱還停留在大一Pascal的階段呀!
????? ? 一晃,到了大四,要考慮人生怎么走了,大學(xué)如此頹廢,專業(yè)能力底子差,害怕面對(duì)找工作,遂考研,也就在這個(gè)時(shí)候停止了網(wǎng)游,否則此生廢矣!研考上了,憑的還是大學(xué)開始時(shí)的基礎(chǔ),但這確實(shí)是我的一個(gè)轉(zhuǎn)折性的新起點(diǎn)。
????? ? 大四下學(xué)期,也就是06年上半年,做畢業(yè)設(shè)計(jì),頭疼了吧!還好,自己命好,能遇貴人,兩人一起用VC做一軟件,全靠人家了,也虧得人家?guī)椭?#xff0c;自己才又能回到程序設(shè)計(jì)的路上來了,但對(duì)C++、MFC、面向?qū)ο筮@三者還只是了解,甚至三者的關(guān)系都不能理解清楚。想想當(dāng)時(shí)很好笑,用了STL的vector,然后在論文中就描述使用了一種數(shù)據(jù)結(jié)構(gòu)的新技術(shù),哈哈!然后買了本《深入牽出MFC》,淺嘗輒止,雖然現(xiàn)在想看但沒多少時(shí)間了。
4. 編程之大進(jìn)步
??????? 06年下半年開始上研究生,亦相當(dāng)于重新做人,老師要我參與的是硬件的項(xiàng)目,興趣不大,又因課業(yè)繁重,后退出項(xiàng)目忙考試,這半年從程序設(shè)計(jì)角度進(jìn)步不大。
?????? ?07年上半年是個(gè)轉(zhuǎn)折,那會(huì)課少了,自己業(yè)余時(shí)隨手從同學(xué)那拿《absolute c++》來看,系統(tǒng)學(xué)習(xí)了一遍C++。這時(shí),才對(duì)面向?qū)ο笥辛它c(diǎn)認(rèn)識(shí),有了點(diǎn)體悟,然后就結(jié)合著MFC想為什么框架是那個(gè)樣子。那個(gè)學(xué)期開設(shè)有專門的面向?qū)ο笳n程,跟著去聽了,拿來印證自己的所思所想所學(xué),進(jìn)步很快。那一年,騰訊為了擴(kuò)大自己的影響力,就在各個(gè)高校開設(shè)騰訊創(chuàng)新俱樂部,參加之,正好是鍛煉編程的機(jī)會(huì),于是基本上自己主導(dǎo)做了一個(gè)軟件,并提交了作品。那個(gè)學(xué)期鍛煉機(jī)會(huì)還真挺多,算法設(shè)計(jì)與分析課程要做大作業(yè),面向?qū)ο笳n程要做大作業(yè)。進(jìn)步很快,以至于多數(shù)人都認(rèn)為較難的面向?qū)ο蟠笞鳂I(yè),我在兩天時(shí)間內(nèi)就結(jié)束了,包括設(shè)計(jì)和編程。
??????? 那個(gè)時(shí)候真的是重新拾起了自信心,而且自己在周圍同學(xué)中有優(yōu)越感,也感謝導(dǎo)師對(duì)我的鼓勵(lì),這才使我以后能繼續(xù)提升。
5. 思想意識(shí)的提高
??????? 然后研二的一年,自己的提升又是一個(gè)很大的轉(zhuǎn)折點(diǎn)。
????? ? 07年下半年,分了課題方向,主要是看論文,痛苦的堅(jiān)持,直至08年上半年,自認(rèn)為研究生沒白上,因?yàn)檎J(rèn)真做研究了,知道了如何做研究。本文主線是程序員之路,故做研究之事,略過不談,其實(shí)大多數(shù)學(xué)生也并不關(guān)心如何做研究。???
??????? 在這個(gè)階段中,最有意義的是,軟件和程序設(shè)計(jì)的思想意識(shí)提升了。
????? ? 首先緣于本科隔壁宿舍一小伙,特別是研究生時(shí)候,其技術(shù)很強(qiáng)勢(shì),深知編程水平遠(yuǎn)不及他,與他交流總能有些體會(huì)。受其最大的影響就是去買一些相關(guān)技術(shù)方面最牛的書籍,知道了學(xué)習(xí)不要靠學(xué)校那些教材,學(xué)就學(xué)最牛的專家的書,特別是國(guó)外的經(jīng)典書籍,然后就養(yǎng)成了定期逛書店的習(xí)慣。
?? ???? 從《編程高手箴言》中知道了軟件不等于程序,也知道了程序員原來那么神圣,本書對(duì)欲加入程序員大軍的人極具煽動(dòng)性,最起碼對(duì)我是這樣子。我此刻知道,國(guó)內(nèi)程序員基本是第二等的,于是定位自己成為第三到四等的程序員,而最高等級(jí)的程序員,除了高德納能勝任,世間還有幾人歟?
????? ? 隨后,無意中發(fā)現(xiàn)《計(jì)算機(jī)系統(tǒng)概論》一書,欣喜若狂,可能是我基礎(chǔ)太差了吧,所以跟找到了寶一樣。加之前邊的認(rèn)識(shí),我從中知道了學(xué)習(xí)計(jì)算機(jī)原來是應(yīng)該這樣子學(xué)的呀:自底向上,bottoms-up!!至此刻,我才意識(shí)到學(xué)計(jì)算機(jī)是需要不斷提升自己的意識(shí)層次的,知道對(duì)底層不了解,用高級(jí)語言寫出來的代碼是莫名其妙的!
??????? 之后,受隔壁宿舍小伙的推薦,看《深入理解計(jì)算機(jī)系統(tǒng)》一書,其實(shí)也是自底向上的理論,但內(nèi)容含金量簡(jiǎn)直是神級(jí)!
?????? ?自己又在閑逛時(shí),發(fā)現(xiàn)并買下了《代碼大全》,我對(duì)其評(píng)價(jià)是學(xué)軟件者可師承于此書!簡(jiǎn)直是理念風(fēng)暴,處處有感悟,處處有所得,愛不釋手。正如一本好的武功秘籍,絕對(duì)不僅僅是教招式,而最重要的是傳授心法。例如,從中體會(huì)什么是抽象,再次品味面向?qū)ο蟮奶匦?#xff0c;特別是數(shù)據(jù)封裝,再比如對(duì)變量命名以及高效注釋的討論高度絕非一般編程規(guī)范(比如林銳的那個(gè))所能比,以及后文我提到的對(duì)程序性能優(yōu)化的策略性指導(dǎo),等等。
?????? ?總之,直到現(xiàn)在,我也這樣認(rèn)為,做為一個(gè)程序員,把軟件做好要看《代碼大全》,把代碼寫好寫懂還要看《深入理解計(jì)算機(jī)系統(tǒng)》。
??????? 就這樣,思想意識(shí)提高了不少,其實(shí)這比編程語言本身進(jìn)步要強(qiáng)的多,因?yàn)閮?nèi)心底氣足了,有了方法論了,有了戰(zhàn)略性指導(dǎo)了,到時(shí)用到什么知識(shí)學(xué)什么就行了。而且,在實(shí)踐中逐漸培養(yǎng)自己一些優(yōu)秀的編碼習(xí)慣非常重要,比如成對(duì)編碼(即new完就想著何時(shí)delete,并先寫好),保持程序的完整性,保持程序的可調(diào)試性等等。或許正是這些習(xí)慣的培養(yǎng),使我自己寫代碼時(shí)基本不用調(diào)試器,因?yàn)橄到y(tǒng)一直是完好的,加些代碼就編譯測(cè)試,出了問題稍一分析,肯定容易定位的(直到后來,工作時(shí),要維護(hù)別人事先的代碼,出了問題解bug,這時(shí)調(diào)試器就不得不拉上戰(zhàn)場(chǎng))。我想,這些是我與當(dāng)時(shí)周圍同學(xué)最大的差異性,并堅(jiān)信自己日后能成為一名真正的優(yōu)秀的程序員。
6. 算法不等于程序
??????? 換句話講,代碼需要優(yōu)化。
??????? 其實(shí)也不盡然,嚴(yán)格來講,就是有高性能要求的程序,其代碼才需要認(rèn)真優(yōu)化,而一般的應(yīng)用層程序并無性能方面的特別要求。
?????? ?08年初,我開始做研究生畢業(yè)的課題,通俗講是做一個(gè)正則表達(dá)式引擎,但并非易事,因DFA處理字符的速度快,所以要將大數(shù)量的規(guī)則轉(zhuǎn)化成DFA,問題是要將DFA的存儲(chǔ)空間降下來。理論方法倒還順利,新算法也想出來了。于是乎信心十足的去編程實(shí)現(xiàn)之,做為學(xué)生,自認(rèn)為擁有著較好的編程意識(shí)及思維,再加上瘋狂運(yùn)用STL,程序很快就OK了。這時(shí),問題出現(xiàn)了,僅僅一個(gè)普通的正則表達(dá)式,在轉(zhuǎn)化時(shí)就可能耗掉半個(gè)小時(shí)的時(shí)間。這無異于在自己盛氣凌人的頭上澆冷水,為什么會(huì)這樣?沒錯(cuò)呀,我的代碼全都是按照算法寫的,而且算法是都經(jīng)過復(fù)雜度分析的,為何會(huì)如此之慢?
??????? 于是,狠下心來,花了一個(gè)暑假的時(shí)間,做程序性能優(yōu)化,參考了許多資料,開始時(shí)也是不得章法,胡亂為之。但隨即,《代碼大全》又不失為我做軟件的最佳導(dǎo)師,雖然沒有教我如何具體地做程序性能優(yōu)化,但教給了我戰(zhàn)略性的指導(dǎo)步驟,非常關(guān)鍵,也闡釋了許多優(yōu)化的思想,譬如80-20原則等等。按照上邊的步驟,首先做需求方法的分析,如果有些需求可以砍掉,那顯然會(huì)提高運(yùn)行效率;再次做算法方面的優(yōu)化,特別是一些細(xì)節(jié)的實(shí)現(xiàn),這方面我也改進(jìn)了許多,包括NFA的實(shí)現(xiàn)方法都整個(gè)推翻了重來,前邊這些沒有什么參考書而言,主要是去查參考文獻(xiàn)再去反復(fù)理解;然后是能提高性能的一些編碼技巧,比如緩存技術(shù)、延遲計(jì)算等等,這個(gè)在《代碼大全》中有論述;再下來是程序設(shè)計(jì)語言本身的問題,比如C++本身的還有STL本身的,那會(huì)兒才知道濫用STL的后果有多慘重,不細(xì)述,主要參考《Effective STL》,還有一本IBM的《C++程序性能優(yōu)化》;最后的優(yōu)化可以考慮將代碼寫成什么樣子更易于編譯器將其編譯成高效的匯編代碼,我甚至將編譯器的優(yōu)化級(jí)別都調(diào)高了,真可謂為了提升程序性能而無所不用其極,當(dāng)時(shí)參考的《深入理解計(jì)算機(jī)系統(tǒng)》,也是從中知道可以去調(diào)編譯器的優(yōu)化等級(jí)的,《代碼大全》中關(guān)于這方面也有討論。其實(shí)到了現(xiàn)在回想,應(yīng)該再看一些內(nèi)存優(yōu)化方法的資料,主要是提升外存的應(yīng)用效率等,windows的內(nèi)存映射一直還未研究,有空得補(bǔ)上。
??????? 這樣堅(jiān)持下來,是一個(gè)很好的提高,牽扯的方面從底層匯編直上,一直到需求分析、架構(gòu)設(shè)計(jì)、算法和數(shù)據(jù)結(jié)構(gòu),當(dāng)然更包括編碼本身。最為關(guān)鍵的,那會(huì)擁有的成就感時(shí)至今日再未曾有過,即體會(huì)了這樣的過程:把運(yùn)行半個(gè)小時(shí)的程序一點(diǎn)點(diǎn)的改進(jìn)到只運(yùn)行十幾個(gè)毫秒,而中間用一個(gè)個(gè)表格記錄了不斷引入新方法、新技巧后所帶來的性能提升比。
??????? 后來與上文提到的技術(shù)牛人小伙討論性能優(yōu)化的問題,他直接就說“你編程語言選錯(cuò)了,你當(dāng)時(shí)就應(yīng)當(dāng)和我商量的,做正則表達(dá)式就應(yīng)該用perl”。那會(huì)確實(shí)不知perl為何物,但其實(shí)也應(yīng)該說是從那會(huì),學(xué)會(huì)了要獨(dú)立思考,不要盲從與盲信于他人(特別是技術(shù)強(qiáng)人)。問題應(yīng)當(dāng)一分為二的看,perl是很精通文本處理,以及支持強(qiáng)大的正則表達(dá)式功能。但現(xiàn)在的問題是自己要做正則表達(dá)式引擎呀,能調(diào)用perl么?如果加上大數(shù)據(jù)量的規(guī)則以及被匹配的數(shù)據(jù),我敢肯定perl不行,因?yàn)槠湓硎菢?gòu)造NFA進(jìn)行處理,處理速度跟不上的。perl正則的強(qiáng)大緣于他的“花架子”,這些花架子對(duì)于大多數(shù)應(yīng)用級(jí)開發(fā)就足夠了,而且還很實(shí)用,但如果寫高性能的東東,確實(shí)就不實(shí)用了。
??????? 現(xiàn)在回到主題,算法不等于程序,換句話說,同樣的算法給不同的程序員所寫出來的代碼效率絕對(duì)不一樣,也因此知道了做一個(gè)真正的程序員是不易的,當(dāng)然一個(gè)真正的程序員是絕對(duì)比大眾程序員優(yōu)秀的多。
7. 在正規(guī)軍中接受訓(xùn)練
??????? 本著做一名優(yōu)秀程序員和軟件架構(gòu)師的目標(biāo),兼顧離家近,公司又給解決戶口,于是09年在北京一倍受社會(huì)爭(zhēng)議的臺(tái)企工作。
??? 既然寫到這里了,就好好回憶一下在公司的若干點(diǎn)滴,以免日后忘卻。
時(shí)至今日,回想在公司的日子,也并未有多少令我遺憾之處。
剛進(jìn)公司,皆是新鮮,加上對(duì)未來的憧憬,以及對(duì)新知識(shí)、新技術(shù)的敬畏,于是倍加努力,而進(jìn)步也是神速,包括技術(shù)及職業(yè)素質(zhì)等方面,簡(jiǎn)言之即在正規(guī)軍中接受訓(xùn)練和洗禮。
????? 下邊是我入職兩個(gè)月后的轉(zhuǎn)正申請(qǐng)(故作縮減以避嫌),實(shí)發(fā)自肺腑:
??? “
??? 自今年4月20日入職以來,已近兩個(gè)月時(shí)間,期間感受頗多,收獲頗多。
??? (1).工作環(huán)境
??? 從學(xué)校走入公司,確實(shí)在經(jīng)歷著一個(gè)很大的轉(zhuǎn)變,而且公司的主管和同仁也在不停的幫助我完成從學(xué)生到職業(yè)人的轉(zhuǎn)化。......
對(duì)于工作環(huán)境,除了良好的硬件設(shè)施,我認(rèn)為最重要的是公司有著和諧的人際氛圍,從主管到身邊的同仁都給人一種溫馨的感覺,......。???
無論何時(shí)有學(xué)習(xí)工作上的問題,無論求助于誰都會(huì)得到熱心的幫助。公司里是用一種鼓勵(lì)和引導(dǎo)的方式去培養(yǎng)新員工。......
??? 公司的活動(dòng)比較豐富,能對(duì)工作起到很好的調(diào)節(jié)作用。運(yùn)動(dòng)會(huì)期間,大家都去積極的準(zhǔn)備,......
??? (2).學(xué)習(xí)成長(zhǎng)
??? 兩個(gè)月的時(shí)間很快就過去了,回想一下,已經(jīng)學(xué)到了非常多的東西。
??? 在職業(yè)人的塑造方面。參加了新人活力營(yíng)培訓(xùn),感觸最深地是團(tuán)隊(duì)和分工合作的力量,以及積極主動(dòng)的重要性,并在培訓(xùn)過程中積極鍛煉自己,提高了自己的表達(dá)能力以及與人溝通的能力。
??? 在專業(yè)技術(shù)方面。由于有專門的師傅來指導(dǎo),并且平日里能夠與許多身邊的同仁去交流和請(qǐng)教,所以進(jìn)步很快。而且,公司里有比較好的檢驗(yàn)和督促學(xué)習(xí)的機(jī)制,對(duì)于學(xué)的不到位的地方會(huì)及時(shí)補(bǔ)上。對(duì)比學(xué)校而言,公司里還是要緊張一些,但活得很充實(shí),成長(zhǎng)速度很快。在工作期間,有時(shí)心里也會(huì)覺得有些壓力,這就伴隨著自己心態(tài)的調(diào)整和對(duì)公司環(huán)境的適應(yīng),以及學(xué)著調(diào)整工作和休息的關(guān)系,我覺得能處理好這些事情是所學(xué)到的最寶貴的東西。總之,在公司里與其說是一個(gè)工作的過程,不如說是一個(gè)學(xué)習(xí)成長(zhǎng)的過程。
??? (3).職業(yè)發(fā)展
??? 梁肇新將程序員的成長(zhǎng)劃分為了六個(gè)階段:第一階段,主要是能熟練地使用某種語言;第二階段,能精通基于某種平臺(tái)的接口以及所對(duì)應(yīng)語言自身的函數(shù)庫;第三階段,能深入地了解某個(gè)平臺(tái)系統(tǒng)的底層。這些階段是要一步一步走下去的,姑且不管后邊幾個(gè)階段是什么,我覺得當(dāng)前最重要的是先把自己的位置定準(zhǔn),不浮躁老老實(shí)實(shí)地先做好第二階段的程序員。
??? 公司為我提供了這樣的職業(yè)發(fā)展和成長(zhǎng)的平臺(tái),于此,我非常慶幸。現(xiàn)在公司里的學(xué)習(xí)方式就是從底層向上學(xué),明白底層的原理后再用上邊的接口,而且以后堅(jiān)持這樣來學(xué)習(xí),并不斷補(bǔ)充新知識(shí),我相信自己在公司的環(huán)境里,不久的將來就會(huì)做好第二階段到第三階段的程序員。契而不舍,金石可鏤,現(xiàn)在我唯一能做而且必須去做的就是堅(jiān)定自己的信念,在程序員這條路上堅(jiān)定的走下去。
??? ”
??????? 回憶至此,對(duì)于后邊工作不到一年就離職,有些慚愧,是我自己將在公司發(fā)展程序員的路給槍斃掉了,但當(dāng)時(shí)原因頗多,現(xiàn)在唯一良心難安的是沒有“不浮躁老老實(shí)實(shí)地先做好第二階段的程序員”!
??????? 其實(shí)在公司的成長(zhǎng)先是短時(shí)間的指數(shù)級(jí)進(jìn)步,然后是長(zhǎng)時(shí)間的線性級(jí)進(jìn)步。我是凡人,所以在線性增長(zhǎng)階段還是浮躁了!???
??????? 后來體會(huì)到,公司的原則很簡(jiǎn)單:就是按職位的需求,把你培訓(xùn)成盯在那個(gè)職位上的人。公司最喜歡的人是吃苦耐勞的人,多聰明不需要,看過一本書,忘記什么名字了,好像是《大道至簡(jiǎn)》,寫軟件開發(fā)的,上邊就說,“是人都可以做程序員,只要你知道夏天熱了少穿衣服,冬天冷了添衣服”,很形象。
??????? 在此無意說公司壞話,因?yàn)檫@很可能是我這輩子進(jìn)過的唯一一個(gè)公司,可以稱為母公司,因?yàn)楫吘刮页怂魅」べY和技術(shù),對(duì)公司的貢獻(xiàn)幾乎為零,且公司里的很多同事還很懷念,特別是我從心里敬佩臺(tái)灣人,他們的技術(shù)水平很高,他們的吃苦耐勞能力很強(qiáng),他們很虛心。
回到正題,現(xiàn)將在公司最大的收獲小結(jié)于下:
(1). 在公司能使一個(gè)程序員正規(guī)劃,包括做事情、做軟件正規(guī)劃,寫代碼正規(guī)劃等等。沒有這個(gè),在學(xué)校中學(xué)到的軟件工程就是紙上談兵,如何寫文檔都不會(huì),也不要談學(xué)生能形成自己的編程規(guī)范。
(2). 學(xué)習(xí)公司的管理模式,比如如何制定schedule,如何組織會(huì)議討論問題,如何做報(bào)告,如何與人協(xié)調(diào)等等。這些對(duì)以后在學(xué)校的項(xiàng)目管理有絕對(duì)性的指導(dǎo)性。
(3). 與老程序員的交往,回憶跟我有直接關(guān)系的兩個(gè)人。
第一個(gè)人是我?guī)煾?#xff0c;嚴(yán)謹(jǐn)嚴(yán)厲,我對(duì)其態(tài)度的轉(zhuǎn)變過程為:害怕->討厭->敬佩->朋友。剛?cè)牍?#xff0c;我?guī)煾狄桓闭?jīng)的樣子,害怕自然正常。然后體會(huì)了他的嚴(yán)厲,有時(shí)要求很苛刻,比如我去聽一個(gè)報(bào)告,他就事先給報(bào)告者打電話,說要報(bào)告期間給我提幾個(gè)問題,意即去聽可以,但不能白聽,這樣能不讓人討厭么。但與此同時(shí),跟我同期入職的小伙,其師傅就感覺起來人不錯(cuò),平時(shí)較松,而且笑臉相迎。隨后階段是做個(gè)小功能,以檢驗(yàn)學(xué)習(xí)效果,我?guī)煾祵?duì)我要求更嚴(yán),每天檢查一次進(jìn)度,然后每天檢查三次進(jìn)度,早上、中午和晚上都過來,這樣從需求分析、詳細(xì)設(shè)計(jì)文檔、編碼以及測(cè)試等一路跟下來。但我從那會(huì)開始敬佩我?guī)煾?#xff0c;因?yàn)樗虝?huì)了我許多好的習(xí)慣,比如寫FAQ將學(xué)習(xí)中問題和收獲記錄下來,跟我討論程序中的數(shù)據(jù)存儲(chǔ)等問題,記得當(dāng)時(shí)有一個(gè)關(guān)于指針的數(shù)據(jù)結(jié)構(gòu)就改了三次,我們倆當(dāng)時(shí)稱之為“一波三折”問題,引導(dǎo)我自己把最佳的方法想出來,還有就是特意會(huì)傳授我一些他自己的編程思想,也就是在那時(shí)我明白了C語言的代碼要寫成支持多實(shí)例的,也就是在那時(shí)開始思考如何把面向?qū)ο蟮乃季S用C語言展現(xiàn)出來。隨后在作這段工作的匯報(bào)時(shí),我才是最感激我?guī)煾档臅r(shí)候,正是他的嚴(yán)厲和悉心指導(dǎo),才使我順利過關(guān);然而,另一小伙,就不太順利了,被大主管說道“整體下來感覺你寫的程序太隨便了”,以至于回去重改再作報(bào)告。也就是在那個(gè)時(shí)候,我?guī)煾狄查_始放下了平時(shí)一本正經(jīng)的面孔,把我交給了事先定好的項(xiàng)目組。然后,我跟我?guī)煾狄恢笔且环N朋友關(guān)系,平時(shí)一起參加登山社,感覺我?guī)煾颠€有我小師叔就是娘家的人,我是他們帶出來的,到時(shí)項(xiàng)目組里遇到棘手的問題,還可以把他們拉過來幫忙解決。
第二人是我前面提到的項(xiàng)目組組長(zhǎng),特溫和、特有耐心,很老練的程序員,作報(bào)告很有條理性,做事情很負(fù)責(zé)任。他跟我?guī)煾敌愿裢耆灰粯?#xff0c;從來不會(huì)批評(píng)人,再大的問題也是溫和的講。我組長(zhǎng)是有問必答,不管多簡(jiǎn)單的問題,亦或是多困難的問題,他都會(huì)放下手頭的事情,幫提問者解決。當(dāng)時(shí)一堆新人圍著他問問題,然后他就獨(dú)自一人晚上加班把白天的時(shí)間補(bǔ)上,而又毫無怨言,這種精神不能不讓人敬佩。有了任務(wù),他總是笑呵呵的過來,“行不行?”,若見面有難色,就說“沒事,你先做,遇到問題咱們一起解決”,完全沒有組長(zhǎng)的架子,但更是一種完全值得我學(xué)習(xí)的人格魅力。
8. 算法和數(shù)學(xué)是王道
?隨后就是我離職的事了,很對(duì)不起組里的人,其實(shí)我不是放棄了程序員這條路,而是放棄了以在公司工作的形式來做程序員這條路,我始終認(rèn)為程序員的職業(yè)是神圣的,現(xiàn)在只是用自認(rèn)為的一種捷徑來延續(xù)這條路,即通過讀博士來加深內(nèi)功的修為。
?我離職的原因是要去讀博士,而讀博士的原因就很多。首先是那時(shí)在公司的實(shí)際情況,不得不讓我內(nèi)心浮躁,因?yàn)槲沂欠踩?#xff0c;也不甘于現(xiàn)狀,覺得那會(huì)在公司的定位很難實(shí)現(xiàn)自己預(yù)先規(guī)劃的程序員之路。然后的萌芽是我投在《軟件學(xué)報(bào)》的論文被錄用了,很受鼓舞,而在公司同期培訓(xùn)的一小伙更是煽動(dòng)我去讀博士,并給我介紹了許多學(xué)術(shù)這條路上的事情。有所心動(dòng),就與同學(xué)、朋友、家人和導(dǎo)師交流此事,在獲取了廣泛的支持之后,遂決定辭掉工作去攻讀博士。當(dāng)時(shí)還有一件事,一本科同學(xué)給我打電話,其并不知道我有想讀博士的想法,而他卻起了這個(gè)話頭,大肆渲染讀博士有多好,并建議我去讀,真是這種巧合使我堅(jiān)定了當(dāng)時(shí)的信心。于是今年(2010年)再回學(xué)校讀博士。在原導(dǎo)師處讀博士的主要原因,一個(gè)是信得過原導(dǎo)師,可以認(rèn)真指導(dǎo)我,可以為我提供潛心研究的環(huán)境,另一個(gè)是延續(xù)原來的專業(yè)和方向,可以保證在算法上精進(jìn)。
其實(shí),我并非故意將現(xiàn)在的我與程序員聯(lián)系在一起,而是事實(shí)上即使計(jì)算機(jī)科學(xué)的博士還是教授都與編碼是離不開的,國(guó)外大學(xué)的計(jì)算機(jī)教授哪個(gè)不是編碼高手,哪個(gè)不是優(yōu)秀的程序員?國(guó)內(nèi)學(xué)術(shù)界的態(tài)度本身就不對(duì),認(rèn)為程序員低他們一等,本文不作過多評(píng)述。若按梁肇新所作程序員之分級(jí):當(dāng)前在現(xiàn)實(shí)公司里的絕大多數(shù)程序員是第二等;能達(dá)到第三等就得看個(gè)人造化和努力了,當(dāng)然也離不開公司給予的機(jī)會(huì),否則一輩子就可能是第二等;而第四等者絕對(duì)是大公司里的骨干架構(gòu)師和程序員;而第五等乃至第六等者,沒有相當(dāng)?shù)睦碚摴Φ滓惠呑佣疾豢蛇_(dá),高德納曾言自己是世界上最優(yōu)秀的程序員之一,也就是這個(gè)層次的。
近段時(shí)日雖沒什么進(jìn)步,但意識(shí)到讀好博士并非我原來想的那么簡(jiǎn)單。國(guó)內(nèi)的高等教育呈現(xiàn)一種嚴(yán)重的延后性狀態(tài),也即多數(shù)人與其學(xué)位并不對(duì)稱,我單論計(jì)算機(jī)科學(xué)學(xué)科。本科生應(yīng)該學(xué)習(xí)并理解計(jì)算機(jī)系統(tǒng),并打下扎實(shí)的程序?qū)嵺`能力;碩士生應(yīng)該能將問題抽象成計(jì)算機(jī)算法或相關(guān)知識(shí)的模型,并給予代碼實(shí)現(xiàn)以解決實(shí)際問題。事實(shí)上有多少計(jì)算機(jī)科班出身的人是合格的?現(xiàn)在看來,拿一般重點(diǎn)大學(xué)而言,碩士生中有良好程序設(shè)計(jì)能力的就很稀少,更別提本科生了,可讀碩士的目的并非培養(yǎng)編程,而是學(xué)習(xí)如何做研究。事先,本想讀博士無非就是把問題抽象成算法,或者原來人家就提出了現(xiàn)成的模型,再優(yōu)化或提出新的方法即可,我天,這實(shí)際還停留在碩士的認(rèn)知水平上,若此,以后怎可有質(zhì)的提高和突破?即使混個(gè)畢業(yè),而且不難,但被宣稱建議授予工學(xué)博士學(xué)位的時(shí)候,是不是很羞恥呢?再退一步,如果一個(gè)博士還拿著工程實(shí)踐能力來炫耀,簡(jiǎn)直太可笑了!合格的博士生,不要自己騙自己,無論如何,至少都得為所研究問題提出一個(gè)更好的算法或者數(shù)學(xué)的模型,甚至要建立一套新的理論體系,這就是第五等程序員,任重道遠(yuǎn),但值得去追求!
前一陣,百度要出語音搜索功能了,CSDN上一牛人是這樣說的:“個(gè)人推測(cè),百度的算法是這樣的:基于隱馬爾科夫模型(HMM),或者一些其他的時(shí)間序列模型,比如CRF等,進(jìn)行用戶輸入的聲音串進(jìn)行識(shí)別,然后跟已有的音樂庫進(jìn)行對(duì)比。這里主要用到了維特比算法。更重要的是如何訓(xùn)練這個(gè)HMM?估計(jì)會(huì)搞海量的音樂進(jìn)行訓(xùn)練,由于人工標(biāo)注成本高,因此會(huì)用無監(jiān)督學(xué)習(xí),EM和向前向后算法,這樣模型就建好了。兩個(gè)關(guān)鍵點(diǎn):選擇什么作為feature,也就是訓(xùn)練特征,相應(yīng)的HMM的階數(shù)也會(huì)增加;如何組織海量數(shù)據(jù)訓(xùn)練和識(shí)別,提高運(yùn)算速度?百度應(yīng)該擅長(zhǎng),分布計(jì)算嗎,另外EM算法也支持多線程了。疑問:要不要用歌詞?或者說是否把歌詞作為一個(gè)特征;如果要提高精度,是否要采用其他類似模型,前面提到的CRF應(yīng)該很理想,但是速度慢,不過就看百度的并行運(yùn)算功夫了。這個(gè)沒有上千臺(tái)服務(wù)器,是沒法做的”。
對(duì)其評(píng)述,無論好壞,我唯有佩服,若無一定功底,何出此言!而一般程序員又距其甚遠(yuǎn)!一研究生舍友,棄中興而去迅雷,乃向前之所為,吾贊之!數(shù)同門,談及專業(yè),面露苦色,不以為榮,無心盡力,妄自菲薄者,吾嘆之!
已之算法與數(shù)學(xué)薄弱至極,愧對(duì)師門,怎能不痛下功夫而惡補(bǔ)之?緣于以前的無知,競(jìng)說學(xué)概率何用之有?而且視數(shù)學(xué)為負(fù)擔(dān),乃學(xué)位畢業(yè)的條件,學(xué)完趕緊扔掉,然后抱著編程語言的書去啃,舍本逐末,有幾人能見其明?糊涂透頂也!人最重要的還是要踏實(shí),此時(shí)潛心向?qū)W并未晚矣。蘇洵,年二七始發(fā)憤為學(xué),歸家悉焚以前所作文章,閉關(guān)讀書五六年,遂通六經(jīng)百家之說,下筆頃刻千言,乃為唐宋八大家之一。吾亦二七之齡,發(fā)憤向?qū)W,不讀六經(jīng)而習(xí)算法,勿使功利熏心,數(shù)載之后學(xué)術(shù)豈無不成?
9. 后記
我并不贊成執(zhí)編碼之業(yè)以糊口故,否則痛苦不可免。
至于成功,不同之人定義不同。錢不可購(gòu)萬物,萬物亦非為錢而生,故勿奉錢為上。而后,定一方向,視為寄托,心于其上,畢生為之,終有所成。致若左手程式右手詩,豈非同道?
茲文乃拙人之鄙見,供讀者一笑耳,若可拾得一二,甚為安慰;聞道有先后,術(shù)業(yè)以專攻,真正牛人,為人敬者,不為炫耀,乃為布施,愈盼高見,我當(dāng)諦聽。
10. 后記之后記
CSDN的各位朋友,在下有禮了,感謝閱讀此文!
?
?
我是CSDN新手,實(shí)際上確實(shí)也是程序員之中的新手。CSDN高手甚多,小弟初來,若要在CSDN寫此類文章,怎么也論不到我。本人只不過閑來寫寫自己的想法,對(duì)先前走過的路總結(jié)一下,整理一下思路罷了。所以我不曾想此文會(huì)被置于首頁,但既然如此,索性請(qǐng)大家對(duì)我進(jìn)行批評(píng)指正,亦請(qǐng)CSDN的高手不吝賜教。
此外,說到古文,我確實(shí)喜歡,當(dāng)然也喜歡國(guó)學(xué),但正如duguao1415所言,我根底尚淺。現(xiàn)在是為了寫而寫,依葫蘆畫瓢,以致成文生硬,錯(cuò)誤百出,大家見笑了!再次感謝duguao1415,我業(yè)余會(huì)下功夫,應(yīng)該像寫代碼一樣,保持一個(gè)嚴(yán)謹(jǐn)?shù)膽B(tài)度,今后不再亂寫,先沉淀下去學(xué)習(xí)。
水滴
http://blog.csdn.net/water_drops
????????? 水靜,水滴之,蕩漾而復(fù)靜;石固,水滴之,復(fù)然則石穿
總結(jié)
- 上一篇: windows内存结构概述
- 下一篇: 中国架构师,名符其实有多少?