軟件開發入門學習的我的見解。

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

相關文章
相關標籤/搜索