今天老夫半夜爬起來(lái)等著看世界杯預(yù)選賽法國(guó)vs西班牙的比賽,在新浪微博里看到@程 序員的那些事 發(fā)的一封粉絲來(lái)信如下:
XXXX:?jiǎn)T員好,我是12屆的大學(xué)生,讀了一所還可以的大學(xué),但所學(xué)專業(yè)我很不喜歡,我因?yàn)樾愿褫^內(nèi)向同時(shí)又感嘆編程的神奇,所以很想進(jìn)入這一行,但 我去面試幾家后發(fā)現(xiàn)就算是實(shí)習(xí)崗位也需要一些基礎(chǔ),雖說大學(xué)學(xué)過C語(yǔ)言但感覺也基本不會(huì)用,那些面試單位是建議我去學(xué)習(xí)這方面知識(shí)再去找他,但我又對(duì)這些 培訓(xùn)機(jī)構(gòu)不太放心,怕花費(fèi)了一大筆學(xué)費(fèi)結(jié)果卻不好,現(xiàn)在我有些迷茫不知道該去找找其它工作(人才市場(chǎng)很多都是些銷售和工廠的一些崗位)還是去學(xué)習(xí),希望廣 大的員員們給我些指導(dǎo),非常感謝。
看完還是有一些感觸的。作為一個(gè)科班計(jì)算機(jī)系畢業(yè),***份工作就是軟件開發(fā),然后又在咨詢和銷售領(lǐng)域工作了很多年,再回歸到開發(fā)領(lǐng)域的老碼農(nóng),老夫?qū)τ谠撏瑢W(xué)的糾結(jié)心情是非常理解的。但是,要把一份工作持續(xù)地做下去,光有熱情是不夠的,如果你總是不能把事情做得比你身邊的人更好,你的熱情就會(huì)慢慢地消退,會(huì)開始懷疑自己的決定是否正確,自己的堅(jiān)持是否有意義。所以,我的建議是給自己一段時(shí)間打好基礎(chǔ),也借此過程驗(yàn)證自己的決定是否明智,就算***的答案是否定的,學(xué)會(huì)一些編程的技術(shù)也會(huì)對(duì)培養(yǎng)自己分析問題的思路有所幫助。
好了,說到正題,非計(jì)算機(jī)專業(yè)的同學(xué)如何為成為一個(gè)程序員打基礎(chǔ)呢?我建議走如下的步驟:
- 1. 學(xué)會(huì)一門編程語(yǔ)言。隨便什么語(yǔ)言都可以,其實(shí)python很適合初學(xué)者,有本書叫《與孩子一起學(xué)編程》用的就是它。不過考慮到步驟2,還是選個(gè)流行的教學(xué)語(yǔ)言吧,比如C++或者Java。
- 2. 非常非常非常非常非常非常認(rèn)真地學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》這門課。你作為程序員功力幾何,很大程度上取決于你在這方面的造詣。
- 3. 學(xué)好離散數(shù)學(xué),重點(diǎn)是高等代數(shù)、數(shù)理邏輯、集合論、圖論,***再學(xué)會(huì)概率論。計(jì)算機(jī)科學(xué)的本質(zhì)是離散數(shù)學(xué),不掌握這些知識(shí)你如何能真正理解矢量、邏輯運(yùn)算、最短路徑、涂色算法這些概念呢?
- 4. 自己做一個(gè)小項(xiàng)目,盡可能把你學(xué)會(huì)的東西都用上。這不僅能向招聘者展示你的功力,也是一個(gè)把所學(xué)知識(shí)融會(huì)貫通的過程,只有做了一個(gè)項(xiàng)目,你學(xué)的知識(shí)才真正變成為了你掌握的技術(shù)。
有人看到這里可能要說了,碼農(nóng)對(duì)編程語(yǔ)言熟悉就行了,學(xué)那么多不相干的又何必呢?
老夫打個(gè)不太恰當(dāng)?shù)谋确?,離散數(shù)學(xué)和數(shù)據(jù)結(jié)構(gòu)就像一個(gè)武林高手的內(nèi)功,編程語(yǔ)言則是招式。內(nèi)功不行,就算會(huì)很多招式,可以嚇唬嚇唬武功一般的人,但是碰到打硬仗這些花拳繡腿就不管用,會(huì)死得很慘??上КF(xiàn)在很多人不重視內(nèi)功,不少計(jì)算機(jī)專業(yè)畢業(yè)生連堆棧和隊(duì)列是怎么回事都不知道,更別提二叉樹、鏈表、圖結(jié)構(gòu)了。不管碰到什么需求,上來(lái)就定義幾個(gè)大數(shù)組,你能指望他編出多高效的代碼?比如現(xiàn)在互聯(lián)網(wǎng)熱門的大數(shù)據(jù),算法效率是核心問題,如果誰(shuí)整出個(gè) O(n^2)的算法,信不信老板分分鐘砍死他?
再說遠(yuǎn)一點(diǎn),學(xué)會(huì)一門編程語(yǔ)言容易,精通很難,難就難在理解它的精髓。有很多開發(fā)者熱衷于***潮的技術(shù),今天玩玩NoSQL,明天搞搞Html 5,說起來(lái)頭頭是道,但是都深入不下去,從來(lái)沒有真正沒有理解這些技術(shù)的精髓,也就做不出一個(gè)能發(fā)揮出它們真正優(yōu)勢(shì)的產(chǎn)品來(lái)。這往往就是因?yàn)閮?nèi)功不行而心態(tài)又很浮躁。(補(bǔ)充一篇文章:《葉正盛:再次寫給我們這些浮躁的程序員》)但是程序員是靠代碼說話的,只是善于對(duì)某個(gè)技術(shù)侃侃而談沒有任何價(jià)值。Linux和Git之父Linus Torvalds說過:“Talk is cheap. Show me the code.”(空談無(wú)價(jià)值。拿你的代碼來(lái)看看。)所以老夫要說,作為一個(gè)程序員,不先練好內(nèi)功就寫不出優(yōu)雅的代碼,這樣是走不遠(yuǎn)的。
怎么學(xué)呢?這些不需要花很多錢去培訓(xùn)機(jī)構(gòu),而且從我面試過的很多培訓(xùn)學(xué)校學(xué)員的表現(xiàn)來(lái)看,絕大部分人學(xué)完了連MVC的概念都沒搞明白,花半年時(shí)間就學(xué)會(huì)了if…else,何必去糟蹋這錢呢?現(xiàn)在一些大學(xué)有旁聽的學(xué)分課程,花幾百塊錢就可以聽一門課,還可以交作業(yè)做實(shí)驗(yàn)(比如:http://zhidao.baidu.com/question/245256206.html)。建議你盡可能去選***的學(xué)校,不僅僅是老師水平高,關(guān)鍵是同學(xué)的高水平會(huì)促使你對(duì)自己有更高要求,這和培訓(xùn)學(xué)校的氛圍是完全不同的。
如果你在以上4步都做得很好,那么你應(yīng)該可以在碼農(nóng)這個(gè)行業(yè)獲得一些機(jī)會(huì),剩下的就看你在工作中的表現(xiàn)和積累了。碼農(nóng)的修行是一個(gè)長(zhǎng)期過程,計(jì)算機(jī)領(lǐng)域每年都有新技術(shù)出現(xiàn)。做了碼農(nóng),就得活到老學(xué)到老,注定一輩子苦兮兮的。如果你喜歡這種感覺,那么你的選擇可能就是正確的。