進行社招面試時,有一個問題幾乎是必問的:
你為什么要離開上一家公司?
其實這個問題主要是想試探一下求職者的核心訴求,并借此預估一下他在本公司工作的穩定性。常見的答案也無非就是這么幾種:對薪酬不滿意、干得不爽,或者是想換個環境。
然而,我遇到過好幾個程序員初次跳槽的求職者給出的答案是:「在原來的公司學不到技術」。
一聽到這個,我就不由得嘆口氣:今天這一小時又算是交代了,這人基本上沒戲。因為根據我的經驗,這句話如果由工作不滿兩年的人說出來,很大概率這是個不會學習不會感恩又特別愛抱怨的人。
程序員最核心的競爭力——「學習力」
如果有人問我:你在面試程序員時,最看中的是什么能力?那我的答案一定是:學習力。
互聯網時代的技術來得快,去得更快。就像Flash這樣曾經雄霸天下多年的技術,都有被人人唾棄的一天。如果沒有足夠強的學習能力,就無法跟上變化,被淘汰只是遲早的事。想想看,你苦心鉆研多年引以為傲的技術,一夜之間就沒有用武之地了,難免會有一種「身體被掏空」的感覺。
學習力強的程序員敢大膽地體驗嘗試新技術,他們的技術棧始終在保持不斷地更新。他們能快速把握事物的本質,并判斷出它能用來做什么,不能用來做什么。他們擁抱技術升級和革命,因為他們學習并掌握新技術的速度比其他人更快,所以他們永遠不用擔心失業。事實上,他們掌握的是「駕駛」和「學習駕駛」的技術,而不是「駕駛XX牌汽車」的技術。
而學習力差的程序員呢?為了繼續停留在舊技術的舒適區,他們往往會抵制新技術的推廣,甚至百般阻撓。因為那會使他們過去的經驗統統無效,只能和后來者站在同一起跑線上。抱死一個框架好幾年,脫離了框架啥都干不了的程序員實在太多了。事實上,這樣的人不能駕馭技術,反而是被技術給奴役了。
同樣是自行車,為什么山地車比公路車更普及更流行?除了皮實耐用價格低外,主要是因為它的通過性好,什么泥地沙地都不在話下,上下馬路牙子跟玩一樣。而公路車呢?只能老老實實地跑在平路上。
公司不是學校
面對這些因為「想學點技術」而換工作的求職者,評價他們「不思進取」貌似不太合適。但顯然他們的思維模式還是被學校洗腦的那一套,沒能真正地融入社會。也許他們認為,學習就是要由老師手把手帶著,而自己之所以學不到技術,就是因為沒遇到一個好leader,能替自己設計好成長路線,指出所有重難點,提供各種參考資料……
在中國傳統文化里,不管是匠人還是武師,收徒都要找毫無根基的幼童。這一方面是為了保持師父的絕對權威,方便貫徹落實教學;另一方面是為了盡量延長學徒期,以考察徒弟的品性。拜師之后,徒弟便跟隨師父一起生活,經過數年的言傳身教,這才得以出師。
師父收徒的核心訴求,是「傳承」自己的技藝和名聲,希望徒弟日后能做出一番成就來光耀師門。這就要求徒弟流動性低、忠誠度高、歸屬感強。與其說是收徒,還不如說是在挑兒子,所以有句俗話叫作「一日為師,終身為父」。
然而公司是盈利性的商業組織,不是學校,更不是新手訓練營。公司招聘員工的核心訴求,是生產出實實在在、對得起薪水的價值,而不是傳承技藝。公司希望員工入職前就具備工作的能力,至少在經過短暫的培訓和指導后就能獨立開展工作,正所謂「能干就干,干不了走人」。
一般情況下,為了使新人盡快進入工作狀態,公司會安排一位老員工來做一段時間的導師。但導師只有為你解惑的義務,卻沒有教你技術的責任。 因為導師自己手里還有做不完的工作,帶新人又沒什么利益可圖,憑什么為你提供私人教練級的服務?能有耐心聽完你的問題,指點一下方向,就已經很不錯了。
學習是自己的事,沒有人能替你去做。這就跟吃飯一樣,誰真的關心你吃沒吃、飽沒飽?就算你的親人再怎么關心你,也不能替你去吃。我們都知道,人不吃飯肯定是要餓死的,那你為什么不去給自己找吃的,卻在埋怨沒有人給你嘴里喂食呢?
為什么你學不到技術?
很多人在學習之路上已經飽嘗了痛苦的滋味,因此在離開學校之后。他們不到萬不得已,是決然不會去學習的。你不妨回顧一下,從參加工作以來到現在,自己哪段時間里學習最認真,進步最明顯?
如果不出意外的話,應該就是你找到的第一份工作的試用期。因為不想失去自己通過努力爭取到的工作機會,所以你不得不逼自己打起十二份精神來學習,結果居然以自己都無法想象的速度掌握了工作必備的知識和技能。
然而,大多數人在自己的能力滿足當前工作的要求之后,就喪失了學習的動力。下班之后要追劇,要玩游戲,要打球,要談戀愛……為啥我要學習?不學又不會失業!學這個有啥用?誰知道用得上用不上?等要用的時候再學唄!
其實, 學不到技術最核心的原因只有一個:動機不足。至于環境條件,只是影響學習效果的因素之一,但絕對不是最重要的因素。在一個惡劣的環境里選擇放棄學習的人,不可能到了一個優越的環境里就會去主動學習,因為在他內心深處對學習是抗拒的。
難道說換上了Macbook Pro和4k顯示器,坐在數千元的人體工學座椅上,下班后就會有興趣看框架源碼了嗎?看電影、打游戲不是更舒服一些?
在我看來,學習力的源泉就是好奇心,也就是對新知識的渴求,以及對探索未知的沖動。我們的大腦是「用進廢退」的,如果不定期給它輸送新鮮的知識營養,它就會逐漸退化。有學習力的人一段時間不看書,不折騰點新玩意,大腦真的是會「餓」的。
程序員該怎么學習技術?
有的求職者覺得自己沒學到技術,是因為公司不給機會,或者缺乏條件:
「上次的H5讓小王做了,這次的微信小程序又給了小李……完全沒我什么事啊!」
「公司最大一張表才10W數據,根本用不著分庫分表啊!」
……
學習技術最有效的方式是閱讀、實踐和交流。公司沒給你安排這方面的工作,那你自己都做了些什么呢?八小時之外的時間都用在哪了?有沒有讀源碼?有沒有看原版書?有沒有泡技術社區?有沒有嘗試最新流行的技術?有沒有嘗試把它們用在公司的項目上?有沒有主動去接觸行業里使用這些技術的團隊和大牛?
「看文檔」其實是最快的學習方法。對于自己工作中常用到的技術,抽時間把官方文檔通讀一遍(其實篇幅都不大),絕對收獲滿滿。沒事的時候多翻翻自己使用的框架/系統/平臺的API,看看有哪些自己不知道或者沒用過的功能,想想這個功能可以用來做什么,能不能解決現存的問題,或者優化當下的解決方案。
如果你是前端工程師,通讀HTTP協議和ECMAScript標準,就能秒殺95%的同行,不開玩笑。
「讀源碼」是深入學習開源技術的唯一途徑。只有理解了某個功能在底層是如何實現的,你才能真正把握它更適合用來做什么,不能用來做什么。正如不明顯汽車的構造和原理,我們也能把車開好。而如果多少知道一點,開起來就會更得心應手。當車出現問題時,也不至于完全束手無策,只能蹲在路邊等待救援。
你一個框架用了N年了,卻連一行源碼都沒讀過?如果它是你女朋友,估計早該分手了。
「折騰」是學習任何技術的必經之路。在有保護的環境下進行大量的試錯,是最高效的學習方法。現在虛擬機技術已經那么成熟,VPS也很便宜,你為什么不分分鐘弄一個,然后在上面花式作死呢?
聽說過無數次 rm -rf / 的事故,可你居然一次都沒試過?知道輸出啥樣子么?
公司給你提供的最有價值的東西,就是實戰的機會。 你所學習的技術,最終需要通過工作來變現。你有機會接觸到真實的數據,了解真實的用戶,觀察真實系統是怎樣運轉的,積累真實的經驗……
然而,所謂的機會,只屬于已經提前準備好的人。 不要等到工作都安排到你身上了再去學習。公司不是你的試驗田,你也不該拿用戶當小白鼠。公司不給你機會,那只說明你還沒有準備好。
后話
「吾生也有涯,而知也無涯 。以有涯隨無涯,殆已!」*——《莊子·內篇·養生主第三》
技術世界就如同一片汪洋大海,細分領域真是多如牛毛。我們只是站在其中一個小島上,怎么確定自己該朝哪個方向進發呢?
學習技術不外乎以下兩個方向:
1、廣度:整個使用鏈條由哪些環節構成?每個環節的作用是什么?都有哪些類似的可替代方案?它們之間有什么區別?各自優劣點是什么?……
2、深度:這個「技術 / 產品」的本質是什么?都能做什么?運作原理是什么?底層是如何實現的?可以做怎樣的改進?……
不管你在做什么工作,都應該先把自己每天都要用的核心技術做到一定深度,再去拓展廣度。 「什么都知道一點,但都不甚了解」是最可怕的,它會讓你誤以為自己已經很NB了。
學習,是一輩子的事。