培訓的程序員“差”在哪?
去年的it圈子里”培訓出來的程序員”是熱詞之一,圍繞這類程序員的印象有:不誠信,不靠譜,缺乏公平的機會等。在我看來,培訓的程序員代表的是一個特定群體,剛畢業的大學生很多也能歸屬到這當中,他們身上都有相同的問題。大學是四年,有充足的時間做技術和理論儲備,培訓則是四個月,是速成的大學,但技術人員所面臨的問題往往不是技術這一單一層面。而且現在大學生光顧著泡妞玩游戲的不在少數,在知識積累上可能和培訓的處于一個量級。
剛畢業的幾年里有很多次的被面試經歷,過去的幾年又有機會去面試不少同行,這里面大部分都可以劃分到上面這一類程序員里。外企,bat,創業公司都經歷過,所以說我攻和受的經驗相對都比較豐富,可以談一下我認為的這類程序員的問題出在哪。
自信
自信是很多這類程序員最明顯的問題,面試的時候很容易露怯。你甚至不需要高明的面部表情識別技巧,就能清晰的感覺到對方回答問題時缺乏底氣。有人會說遇到不會的問題都會緊張,但問題也分難易,60分以內的題目不應該答不出來,60分之外的答不上也沒什么好緊張的,技術人員都有自己的盲區。所以你如果面試的是iOS工程師崗位,不應該對objective c的內存管理機制緊張不安。如果你面試Android崗位,則gc的基本原理算法不該說起來含糊其辭。如果連60分的自信都沒有,那就根本不應該去參加面試,僥幸通過的面試對雙方都是一種損害。
要有自信,更要有自信背后基本的技術積累。思維清晰,條理清楚的回答面試官問題,能加快建立雙方之間的信任。遇到不懂的問題大方承認,比唯唯諾諾,指東言西好很多。
謙卑的態度
上面提到過技術人員都有自己的盲區,無論是被面試還是平時做業務,遇到需要google或者重新學習的技術點是件稀松平常的事。我面試過不少2年左右經驗的iOS程序員,問他們SDWebImage是怎么做圖片緩存的,不少人給我的答案都是沒了解過,平時調用api會用就差不多了,甚至還會跟我講一堆道理,比如重復造輪子的壞處,利用成熟第三方框架提高工作效率的好處等等。道理我都懂,可是你就不能直接告訴我你確實不知道,事后你一定會去了解嗎?技術問題就是這么簡單,知之為知之,不知為不知,不存在說你不明白怎么回事卻讓你巧舌如簧蒙混過去。保持謙卑的心態,遇到知識短板,虛心接受并及時彌補方是正道。
時刻學習的姿態
如果打算走技術路線,只要身處職場,就一定需要經常將已有的知識體系更新升級。學習應該是常態,做新業務遇到技術難點需要學習,面試被拒需要學習遺漏的知識點,面試成功也需要回顧學習哪里掌握的還不夠深入。技術環境處于時刻變化的狀態,iOS設備每年出現款,iOS系統每年有新功能,屏幕尺寸在變大,系統開放的api在增加,從mrc到arc,從NSThread到GCD,從Objective-C到Swift,只要你停止學習,你頭腦里的知識和別人相比可以是iPhone4和iPhone 6s+的差別。懶惰會變化成各種借口阻礙你繼續學習,比如:平時工作太累周末放松下,睡前只剩半個小時了睡了算了,等有時間了我再看下某個知識點,等用到的時候我再查下,今天要陪女朋友逛街明天再學習,還有大過年的。。。 時刻學習的姿態才能讓你每天精進,每天都是佳境。
基礎的牢固
基礎很重要,比掌握幾個新的api重要,比掌握一門新語言重要,比多做幾個簡單的app重要,也比你想盡辦法通過面試重要。程序員的基礎包括操作系統,數據結構,計算機網絡,數據庫這些大類,算法可以選擇性的了解些。這些課程大學都會仔細教,培訓卻不會,培訓會教你做界面,怎么上線app,怎么去通過面試。但這些基礎直接決定你接受新知識的速度,決定你了解技術概念的深度,決定你以后這條技術路可以走多遠。如果只能對培訓出來的程序員們提一個建議,那就是利用一切可以利用的時間去咀嚼這些基礎概念。第一遍不懂看第二遍,查閱所有相關的資料從不同角度去理解,任何技術概念百度google都可以找出n多相關技術文章,只要你驅動力夠強一定能搞明白你想要了解的事物,哪怕是零基礎起步。這些基礎是你和四年大學最根本的差距,彌補的過程會比較痛苦,但這是唯一的途徑。
知識體系的建立
技術人員都要有自己的知識體系,上面提到的基礎是橫向的廣度,把這些基礎和具體技術相結合,然后深入發掘就是深度,深度和廣度構成一個T字形結構。建立這個結構是知識體系建立的開始,之后技術上的成長無論是廣度還是深度都是T字形的不斷生長,持續挖掘深度就成為專家,不斷拓展廣度能成為更好的架構師。我之所以強調基礎的重要性,就是因為有了牢固的基礎才能形成自己的知識體系,才能明白自己當前的缺陷短板在哪,才能制定清晰明了的技術學習計劃。幾年前看到過一句話覺得很有道理,說一個好的程序員應該是:know a lot about a little, know a little about a lot, 是同一回事。
對待技術的嚴謹
技術問題和自然語言不同,對于技術,一種表達 只有一種意思。一旦思路確定下來,用代碼表現的技術容不得半點模糊,少一點考慮就多一個bug,所以對待技術問題需要一絲不茍的嚴謹。我剛畢業那會面試, 大公司出題都十分強調邊界條件的考慮,基本思路大家都會有,但能否把問題考慮周全,將所有的邊界條件理清楚就不是人人都能做到的了。我現在面試的時候除了 考察基礎知識之外,還會問一個(就一個)簡單的算法題,題目真的很簡單,幾乎人人都可以找到思路,但重點在于把所有的邊界條件確認好。
重視業務的磨練
我接觸過一些的iOS程序員,他們或多或少都有一到兩年的工作經歷,也做個好幾個app,規模都不大但業務涵蓋面卻不小。雖然有這些業務經歷,但卻沒有支撐這些業務的技術功底,你問他app的登陸token機制是怎么樣的說不出來,用https為什么更安全也不了解,有些模塊不是自己寫的就不清楚。做業務其實是個完善上面提到的知識體系的好機會,一個業務要做到完善,讓用戶感受不到瑕疵的程度其實非常困難,各種邊界條件的考慮,安全性,流暢度,省電,流量,crash率,和其他模塊的交叉等等。所以請重視每一次業務的鍛煉機會,想得要比產品經理更深入,遇到要填的技術坑不要偷懶,不要因為趕進度就降低質量放過自己成長的機會。
以上是我對“培訓的”這類程序員的一些感受和建議,希望能對有志在技術這條路上長遠發展的朋友們有一些幫助。
來自: http://mrpeak.cn/blog/training/