有關“非計算機專業如何轉行做程序員”的一點思考

今天老夫半夜爬起來等着看世界盃預選賽法國vs西班牙的比賽,在新浪微博裏看到@程 序員的那些事 發的一封粉絲來信如下:

XXXX:員員好,我是12屆的大學生,讀了一所還可以的大學,但所學專業我很不喜歡,我因爲性格較內向同時又感嘆編程的神奇,所以很想進入這一行,但 我去面試幾家後發現就算是實習崗位也需要一些基礎,雖說大學學過C語言但感覺也基本不會用,那些面試單位是建議我去學習這方面知識再去找他,但我又對這些 培訓機構不太放心,怕花費了一大筆學費結果卻不好,現在我有些迷茫不知道該去找找其它工作(人才市場很多都是些銷售和工廠的一些崗位)還是去學習,希望廣 大的員員們給我些指導,非常感謝。[淚]

看完還是有一些感觸的。作爲一個科班計算機系畢業,第一份工作就是軟件開發,然後又在諮詢和銷售領域工作了很多年,再回歸到開發領域的老碼農,老夫對於該同學的糾結心情是非常理解的。但是,要把一份工作持續地做下去,光有熱情是不夠的,如果你總是不能把事情做得比你身邊的人更好,你的熱情就會慢慢地消退,會開始懷疑自己的決定是否正確,自己的堅持是否有意義。所以,我的建議是給自己一段時間打好基礎,也藉此過程驗證自己的決定是否明智,就算最後的答案是否定的,學會一些編程的技術也會對培養自己分析問題的思路有所幫助。

好了,說到正題,非計算機專業的同學如何爲成爲一個程序員打基礎呢?我建議走如下的步驟:

  • 1. 學會一門編程語言。隨便什麼語言都可以,其實python很適合初學者,有本書叫《與孩子一起學編程》用的就是它。不過考慮到步驟2,還是選個流行的教學語言吧,比如C++或者Java。
  • 2. 非常非常非常非常非常非常認真地學習《數據結構》這門課。你作爲程序員功力幾何,很大程度上取決於你在這方面的造詣。
  • 3. 學好離散數學,重點是高等代數、數理邏輯、集合論、圖論,最好再學會概率論。計算機科學的本質是離散數學,不掌握這些知識你如何能真正理解矢量、邏輯運算、最短路徑、塗色算法這些概念呢?
  • 4. 自己做一個小項目,儘可能把你學會的東西都用上。這不僅能向招聘者展示你的功力,也是一個把所學知識融會貫通的過程,只有做了一個項目,你學的知識才真正變成爲了你掌握的技術。

有人看到這裏可能要說了,碼農對編程語言熟悉就行了,學那麼多不相干的又何必呢?

老夫打個不太恰當的比方,離散數學和數據結構就像一個武林高手的內功,編程語言則是招式。內功不行,就算會很多招式,可以嚇唬嚇唬武功一般的人,但是碰到打硬仗這些花拳繡腿就不管用,會死得很慘。可惜現在很多人不重視內功,不少計算機專業畢業生連堆棧和隊列是怎麼回事都不知道,更別提二叉樹、鏈表、圖結構了。不管碰到什麼需求,上來就定義幾個大數組,你能指望他編出多高效的代碼?比如現在互聯網熱門的大數據,算法效率是核心問題,如果誰整出個O(n^2)的算法,信不信老闆分分鐘砍死他?

再說遠一點,學會一門編程語言容易,精通很難,難就難在理解它的精髓。有很多開發者熱衷於最新潮的技術,今天玩玩NoSQL,明天搞搞Html 5,說起來頭頭是道,但是都深入不下去,從來沒有真正沒有理解這些技術的精髓,也就做不出一個能發揮出它們真正優勢的產品來。這往往就是因爲內功不行而心態又很浮躁。(補充一篇文章:《葉正盛:再次寫給我們這些浮躁的程序員》)但是程序員是靠代碼說話的,只是善於對某個技術侃侃而談沒有任何價值。Linux和Git之父Linus Torvalds說過:“Talk is cheap. Show me the code.”(空談無價值。拿你的代碼來看看。)所以老夫要說,作爲一個程序員,不先練好內功就寫不出優雅的代碼,這樣是走不遠的。

怎麼學呢?這些不需要花很多錢去培訓機構,而且從我面試過的很多培訓學校學員的表現來看,絕大部分人學完了連MVC的概念都沒搞明白,花半年時間就學會了if…else,何必去糟蹋這錢呢?現在一些大學有旁聽的學分課程,花幾百塊錢就可以聽一門課,還可以交作業做實驗(比如:http://zhidao.baidu.com/question/245256206.html)。建議你儘可能去選最好的學校,不僅僅是老師水平高,關鍵是同學的高水平會促使你對自己有更高要求,這和培訓學校的氛圍是完全不同的。

如果你在以上4步都做得很好,那麼你應該可以在碼農這個行業獲得一些機會,剩下的就看你在工作中的表現和積累了。碼農的修行是一個長期過程,計算機領域每年都有新技術出現。做了碼農,就得活到老學到老,註定一輩子苦兮兮的。如果你喜歡這種感覺,那麼你的選擇可能就是正確的。

 

文章作者:@老碼農的自留地

文章鏈接:http://blog.jobbole.com/36918/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章