1. 程式人生 > >有關“非計算機專業如何轉行做程式設計師”的一點思考

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

今天老夫半夜爬起來等著看世界盃預選賽法國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步都做得很好,那麼你應該可以在碼農這個行業獲得一些機會,剩下的就看你在工作中的表現和積累了。碼農的修行是一個長期過程,計算機領域每年都有新技術出現。做了碼農,就得活到老學到老,註定一輩子苦兮兮的。如果你喜歡這種感覺,那麼你的選擇可能就是正確的。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式