踏實(shí)
偶然在網(wǎng)上看到《由C#風(fēng)潮想起的-給初學(xué)編程者的忠告》一文. 其中一個(gè)角度:避免“浮躁”,倡導(dǎo)“踏實(shí)”的學(xué)習(xí)方法,我是很認(rèn)同的,但總覺(jué)該文作者標(biāo)題“-給初學(xué)編程者的忠告”太大,所以在其文列出的一些具體的“操作方法”上我認(rèn)為可以探討,如同自己在某次公司總結(jié)會(huì)上就《軟件開(kāi)發(fā),我們積累的是什么?》為題跟同事聊了半個(gè)多小時(shí)后,其中一個(gè)同事提到希望我能繼續(xù)把這個(gè)題目細(xì)化,就剛?cè)胄械乃麄兙唧w該如何發(fā)展有更“具操作性”的指引,當(dāng)時(shí)我是跟他們說(shuō)這只是我在這一行呆了5年多的體會(huì),談“指引”還太遠(yuǎn),只是可以提出來(lái)大家思考、討論。
不要過(guò)度貶低編碼
不要真的認(rèn)為"不少大師級(jí)的計(jì)算機(jī)技術(shù)研究者是不懂編程的",做軟件開(kāi)發(fā)編碼是最最基礎(chǔ)的東西,只有踏踏實(shí)實(shí)的掌握好這個(gè)基礎(chǔ)你才有辦法往上走,不管做分析做設(shè)計(jì)做項(xiàng)目管理你都需要能清楚東西是如何實(shí)現(xiàn)的?可不可以實(shí)現(xiàn)?否則肯定出現(xiàn)大量的:"設(shè)計(jì)是設(shè)計(jì),編碼是編碼","產(chǎn)品都是代碼人員從頭到尾實(shí)現(xiàn)的","究竟需花多少時(shí)間,難度有多大,開(kāi)發(fā)人員說(shuō)了算","質(zhì)量/成本/進(jìn)度全是黑匣子"...現(xiàn)象,如果你是做編碼那編碼就更重要了.所以對(duì)于有志從事這個(gè)行業(yè)(軟件開(kāi)發(fā))的個(gè)人來(lái)說(shuō),必須先從"重視編碼"開(kāi)始.過(guò)了這一關(guān)才能去考慮做系統(tǒng)分析,做項(xiàng)目管理...
軟件開(kāi)發(fā)的各個(gè)環(huán)節(jié)是相輔相承的,分析有分析的重要,設(shè)計(jì)有設(shè)計(jì)的重要,編碼有編碼的重要,測(cè)試實(shí)施也各有其地位,任何一個(gè)環(huán)節(jié)搞不好就如同我們熟悉的木桶理論,"最薄弱的一個(gè)環(huán)節(jié)制約著其總?cè)萘?.
既然編碼重要,那該如何學(xué)編碼?
專心學(xué)好一門語(yǔ)言
算算自己用過(guò)的語(yǔ)言也不少(括弧里為使用該語(yǔ)言寫的比較有代表性的東東),C(dos版的圖像/圖標(biāo)編輯工具,96年的《電腦報(bào)》有介紹),C++(可自定義方塊形狀的方塊游戲,被收錄于99年《軟件》雜志的附送光盤上),匯編(DOS漢字系統(tǒng),97年底完成),PB(學(xué)校自動(dòng)排課/排考模塊,98年),ASP(一套web版的企業(yè)信息系統(tǒng),99年),VB(企業(yè)信息系統(tǒng)的核心組件,99年),delphi(工作流平臺(tái),組件式GIS系統(tǒng)等),Java(Delphi Client + J2EE Server協(xié)同實(shí)現(xiàn)),.Net(規(guī)則引擎),PHH...
看起來(lái)好象也不少,回過(guò)頭來(lái)想想自己真正認(rèn)真學(xué)過(guò)的語(yǔ)言只有一個(gè),就是“C”, Dos年代的TC2.0,用它寫了大量的小程序,比較系統(tǒng)的了解了編程是怎么一回事,記得那個(gè)時(shí)候看到什么軟件都要琢磨它是如何實(shí)現(xiàn)的?如果讓我來(lái)實(shí)現(xiàn)該如何做?也模仿了不少東西,雖然多是很表面的模仿但對(duì)自己編程思維的鍛煉很有好處.后來(lái)用其它語(yǔ)言基本上都只是翻翻幫助,然后找找其Demo代碼來(lái)看看,很快就可進(jìn)入狀態(tài).
語(yǔ)言都是差不多的,重要的是“編碼的思想”,具備了該思想語(yǔ)言就只是工具了,用什么工具實(shí)現(xiàn)都差不多,該思想的形成是需要“磨練”的,就是“專心使用一門語(yǔ)言”來(lái)磨練(甚至需要有“咬文嚼字的孔已己作風(fēng)”),然后可“一理通百理通”,不然你只是浮于表面的去學(xué)再多的語(yǔ)言都沒(méi)有.都不能拿來(lái)做真正的開(kāi)發(fā).都不能了解“編碼”的內(nèi)涵.
如在今年招聘面試的時(shí)候看到太多寫著什么語(yǔ)言都精通(或熟練)的畢業(yè)生,我慣用的方法是給他(她)一張紙一支筆,讓他(她)用自己最了解的語(yǔ)言寫一個(gè)算階乘的函數(shù),這個(gè)問(wèn)題你一看肯定說(shuō)很簡(jiǎn)單,好,接著我會(huì)往下問(wèn),可以有多少種方法來(lái)實(shí)現(xiàn):循環(huán),遞歸…還有嗎?你能寫出多少種來(lái)?(代碼基本結(jié)構(gòu)模式的考察).代碼質(zhì)量如何? 有沒(méi)有考慮錯(cuò)誤處理(太多人寫的代碼會(huì)進(jìn)入死循環(huán)比如輸入的是負(fù)數(shù)) ? int的上限是多少,用long? 如果輸入值比較大,算得出結(jié)果嗎,該如何去實(shí)現(xiàn)可以計(jì)算很大數(shù)的該函數(shù)?...看著他(她)寫出來(lái)的代碼一個(gè)個(gè)問(wèn)題的問(wèn)就得了,不管你用什么語(yǔ)言,不管你“精通”多少種語(yǔ)言,我只問(wèn)這些用什么語(yǔ)言來(lái)解決問(wèn)題都需要的基礎(chǔ)的東西, 就是“編碼的思想”.
在學(xué)專一門語(yǔ)言的基礎(chǔ)上新東西當(dāng)然要跟,不然在這個(gè)行業(yè)你是很難“混下去”的,但有這“學(xué)專一門”的前提后,你跟起來(lái)就輕松了,而不用總是得“追”~
在“專”一門語(yǔ)言的過(guò)程中為解決問(wèn)題你會(huì)發(fā)現(xiàn)“算法”很重要,這就是接下來(lái)要說(shuō)的“基礎(chǔ)”了.
基礎(chǔ)很重要
面試的時(shí)候我一般都會(huì)問(wèn),基礎(chǔ)知識(shí)學(xué)得如何? 一般重點(diǎn)問(wèn)的是:《數(shù)據(jù)結(jié)構(gòu)》, 《編譯原理》, 《數(shù)據(jù)庫(kù)原理》的內(nèi)容.至于《由》文提到的:《匯編語(yǔ)言》,《 Windows 程序設(shè)計(jì)》我是不會(huì)問(wèn)的.這些是可以進(jìn)一步學(xué)習(xí)的東西,但對(duì)現(xiàn)在的開(kāi)發(fā)來(lái)說(shuō)不是必須的.《軟件工程》我向來(lái)不問(wèn),教材理論跟實(shí)際差得太遠(yuǎn)了~
《數(shù)據(jù)結(jié)構(gòu)》很重要,不懂?dāng)?shù)據(jù)結(jié)構(gòu)很多編碼就是“蠻干”,而且往往把“簡(jiǎn)單問(wèn)題復(fù)雜化”,甚至復(fù)雜到不可能解決.認(rèn)真學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》并多做嘗試用你熟悉的語(yǔ)言去實(shí)現(xiàn)里面的算法,你會(huì)發(fā)覺(jué)“世界真奇妙”~不要認(rèn)為你不會(huì)去開(kāi)發(fā)“編程語(yǔ)言”不需要學(xué)習(xí)《編譯原理》, 《編譯原理》里面包含了太多開(kāi)發(fā)軟件的“奇妙”的思想案例,認(rèn)真體會(huì)你肯定會(huì)被其解決問(wèn)題的方法折服,從中你能體會(huì)到很多東西,對(duì)以后做軟件(不管是設(shè)計(jì)還是編碼等)大有幫助,里面有很多現(xiàn)存的方法可用在你的項(xiàng)目中,而這些跟《數(shù)據(jù)結(jié)構(gòu)》是互為補(bǔ)充的.在這些基礎(chǔ)上接下來(lái)《設(shè)計(jì)模式》一書(shū)你也一定得看看.
很多應(yīng)用都離不開(kāi)數(shù)據(jù)庫(kù),最終總得找個(gè)地方來(lái)“操縱,存儲(chǔ),分析數(shù)據(jù)”,關(guān)于范式,關(guān)于鎖,關(guān)于SQL,關(guān)于笛卡兒那一套你總得了解了解,不然無(wú)法入手,這就需要好好學(xué)習(xí)《數(shù)據(jù)庫(kù)原理》了.單純知道幾條SQL語(yǔ)句是遠(yuǎn)遠(yuǎn)不夠的,如何保證數(shù)據(jù)的完整性,安全性?如何提高效率等等都需要這些基礎(chǔ)的支持~
當(dāng)然英文也是基礎(chǔ),看英文資料確實(shí)重要,不單是書(shū),還有網(wǎng)絡(luò)上的大量資料,論壇…看的時(shí)候別害怕就是了,畢竟都是受過(guò)高等教育的,英語(yǔ)也學(xué)了那么多年起碼都有點(diǎn)底吧,配合這兩個(gè)工具:《金山詞霸》及Google.com,不懂的單詞“即指即譯”,但很多名詞或基礎(chǔ)知識(shí)不是靠單詞解釋能清楚的,配合搜索引擎查查相關(guān)資料看看,記住一點(diǎn),看到不懂的東西多看幾遍,默記一小會(huì),日積月累你能看懂的東西就多了。
興趣
最后該說(shuō)說(shuō)的就是興趣問(wèn)題,如果你能對(duì)它真正感興趣(如果要從事軟件開(kāi)發(fā)又沒(méi)興趣的話趕緊先培養(yǎng)興趣去^_^),對(duì)看技術(shù)資料就想別人看武俠小說(shuō)看球賽一樣的話,再配合上面提到的幾點(diǎn)(踏實(shí), 先專后廣, 基礎(chǔ)扎實(shí))相信在這一行多少是可以做點(diǎn)東西出來(lái)的~~