如何看出一個程序員的技術(shù)能力和水平?這個題目是比較復(fù)雜的,它包含的東西比較多,認(rèn)真討論能寫幾萬字。如果是專業(yè)研究,能寫一本書了。
這里打算根據(jù)自己的學(xué)習(xí)過程和工作經(jīng)驗(yàn),談一下要點(diǎn)問題,均屬個人看法,歡迎討論。
寫這篇文章的初衷,跟前段時間跟朋友們聊招聘有關(guān)。因?yàn)榧夹g(shù)招聘除了考察人的協(xié)作精神和工作態(tài)度,還有一大目標(biāo)是判斷人的技術(shù)能力和實(shí)際水平。
在這件事情上多做觀察、思考是很有意義的。對于考察人的技術(shù)等級,學(xué)界是有認(rèn)真的研究的,可以參見:德雷福斯模型解說。
德雷福斯模型把人的技能水平,分成 5 級:
新手
高級新手
勝任者
精通者
專家
對不同技能等級的認(rèn)定是這樣的:
新手:依靠指令清單,必須按部就班。就是必須給出詳細(xì)而具體的操作規(guī)則,才能工作。
比如你做一道從未做過的菜,需要看菜譜的說明,第一步做什么,第二步做什么等等,直到最后烹飪結(jié)束。
高級新手:有限的情景洞察力,同等對待工作的各個方面。對全局性、體系性的東西沒興趣。
這是小工的水平。比如他能跟著師傅干點(diǎn)活,打打下手??梢钥恐磸?fù)檢索搜索引擎、StackOverflow 解決具體的小問題。
勝任者:能夠獨(dú)立解決各種各樣的領(lǐng)域內(nèi)問題。這是一般的企業(yè)招聘,比較希望招到的等級,招進(jìn)來稍作適應(yīng)就能干活了,省心省力。
精通者:經(jīng)驗(yàn)豐富,可以自我糾正、自我改進(jìn)。這類等級的人,思考可以指向內(nèi)在,通過反省、反饋改善技能。這種在企業(yè)可以算上高手、大拿了,培養(yǎng)不易。
專家:依靠直覺工作,不需要解釋和理由。實(shí)際你讓他解釋,他可能也說不出個所以然,就是直覺給出答案,然后還是對的。
專家人數(shù)稀少,需要很長時間訓(xùn)練、實(shí)踐。通常的說法是 10 年出專家,10000 小時定律。
這個是理論上的研究,實(shí)踐中比較缺乏操作性,難以迅速的判定應(yīng)聘者的實(shí)際情況。
不信你打開收進(jìn)來的大把簡歷,剛畢業(yè)的學(xué)生,每個技能名詞上面都是一堆堆的“精通” ,你相信么?但它可以當(dāng)成一個職業(yè)技能等級判定的參照標(biāo)準(zhǔn)。
于是乎,各家企業(yè)開啟了各種“筆試”、“機(jī)試”,多輪面試,并且嚴(yán)格要求學(xué)歷以及出身院校,試圖以此過濾掉不合意的應(yīng)征者,留下合格的人選。
它當(dāng)然是可行的,但是效果一般,而且容易出錯,錯失有思想有水平的人。不然也不會催生出各類“推薦式”的招聘。
看重學(xué)歷、學(xué)校當(dāng)然也有它的優(yōu)點(diǎn):它是快速過濾的手段,畢竟能考上好學(xué)校的人智商不會太差吧。
但在大數(shù)字公司的一朋友說,公司里面還有初中畢業(yè),一直精研安全領(lǐng)域的人,技術(shù)能力也是十分出色。
如果嚴(yán)苛對待背景,這些人就會錯過了。因?yàn)槿说纳疃喾N多樣,有各種歷史的背景因素影響經(jīng)歷。
而部分人的經(jīng)歷,就是跟一些人不同的,可是不妨礙他們同樣可以變得優(yōu)秀。招聘,實(shí)際上是建立信任關(guān)系。
如果有充足的信息證明,應(yīng)聘者足夠優(yōu)秀,這就夠了。條條框框只是輔助手段,并不是目的。
任正非的洞察力一流
推薦式的招聘實(shí)際要靠譜的多,因?yàn)槿撕苋菀琢私馐煜さ娜说乃?。這是靠推薦者的信用背書。
人平時溝通時說什么話,日??词裁磿?,關(guān)注哪些領(lǐng)域,琢磨過啥問題,哪些東西很熟,這個經(jīng)常聊的熟人往往都知道。
可是,這類招聘局限性也很大:面窄、靠機(jī)緣。靠推薦能招幾個好手啊?好手往往是各家爭搶的對象,窗口期有限,基本不會缺工作的。
說了一圈,還是要在技能水準(zhǔn)判定上有更高效率的辦法,招進(jìn)合適的人來。
回到開頭的德雷福斯模型,既然人的技能是分級的,那么對待不同的職位要求,也應(yīng)該側(cè)重不同的考察角度。如果千篇一律的走招聘流程,就容易出問題了。
比如你明明要找的是“精通者”,可上來就讓人一堆筆試、機(jī)試,這是不合適的。對方會十分的厭煩。
體現(xiàn)高水平技術(shù)能力的并不在默寫什么“字符串算法”那里。這反倒是剛畢業(yè)的人占便宜,因?yàn)椴艑W(xué)過不久,印象深。
不信你讓工作 10 年的人跟計(jì)算機(jī)專業(yè)應(yīng)屆生比比寫排序算法,真未必能贏。但是這并不重要,你干活不看手冊,不查文檔嗎?
聰明人從不死記硬背,重要的地方在于對問題域的準(zhǔn)確、深刻的理解,對各類技術(shù)優(yōu)劣點(diǎn)、各種條件平衡的評判和把握。
對待初階新人,應(yīng)著重考察的是基本功是否扎實(shí),專業(yè)成績是否優(yōu)秀。更重要的,是他對職業(yè)的熱情,學(xué)習(xí)能力和研究精神。
某類人要說起技術(shù)來,滔滔不絕,兩眼放光,充滿熱情,對未知的、新生的各類概念、技術(shù)非常好奇,這種人想差都難。
因?yàn)樗麜晕因?qū)動,不用督促,自己就鉆研前進(jìn)。反之,覺得這個職業(yè)待遇高,只是想混飯吃的人,很少走得長遠(yuǎn)。
這類初階新人以畢業(yè)生、工作年限少者為多。測試考核,可以筆試查看其對基礎(chǔ)概念的理解是否準(zhǔn)確,知識領(lǐng)域的大致范圍。甚至,布置一個有點(diǎn)挑戰(zhàn)性的小任務(wù),讓他嘗試解決,說明思路。
考察勝任、精通者的策略不一樣。筆試做題沒啥用,原因前面說了。這類招聘是重頭戲,企業(yè)都喜歡找這樣的,能干活。所以考核評估的地方也較多。
我覺得可以分成幾個方面去看:
意識是否先進(jìn),是否會反省思考
是否善于解決問題,富有創(chuàng)造性
是否有比較深的積累和廣闊的知識面
業(yè)界的開發(fā)思想也是在不斷變化,工具鏈一直在革新。聰明的人不用蠻力,而愛用工具提升效率,喜歡自動化操作解放人力。
要查看人用什么開發(fā)工具鏈,用什么開發(fā)環(huán)境,解釋下為什么?好的開發(fā)者會及時注意新出現(xiàn)的工具,挖掘它能解決什么問題,并嘗試吸收,解決自己的需求。
如果沒有這個思想意識,工作效率就會打折扣了。因?yàn)槟銜浜笮袠I(yè)發(fā)展水平。
人善于自我反省,則會催動自我糾正,這正是精通者的特征。
解決問題的能力是重頭戲,也是企業(yè)招聘人的主因。人要善于解決實(shí)際問題,而且,要學(xué)會聰明的解決問題。
解決問題要看思路,看手段,看是否有創(chuàng)造性,這是真正考驗(yàn)人能力的地方。
好的開發(fā)者,會考慮很多可能選項(xiàng),預(yù)估各種優(yōu)劣,給出一個較優(yōu)的方案。遇到難題,會用各種方法嘗試。
經(jīng)驗(yàn)豐富的人,常常會使用技術(shù)的組合手段來處理難題,而不是一個語言一個工具到處用。
所以,要查看下過往的項(xiàng)目經(jīng)歷遇到的問題、困難,是如何解決的,思路如何。一些公司據(jù)說不招聘不會用谷歌的工程師。
谷歌打不開?嘿嘿,這就是你要克服的困難啊。這你都解決不了,還做什么研發(fā)。谷歌是人類最全、最新知識的總索引,充分利用事半功倍。
考察知識的深度、廣度,對重要領(lǐng)域的概念是否有深刻的理解和掌握,以及從各類工作經(jīng)驗(yàn)中得到的認(rèn)知。問問他看過什么書,研究過什么東西。說白了,就是知道的東西是否多。
一些公司很喜歡用 CheckList 模式來考核,列一堆領(lǐng)域的知識點(diǎn)、概念,問人懂不懂,知道就是水平好,不懂就是水平差。實(shí)際情況并非如此。
人的工作過程是獨(dú)立的,一些事情如果沒有工作機(jī)會去接觸并解決,那么一些冷僻的問題就永遠(yuǎn)都碰不上。當(dāng)然也就不知道。但你能說沒做過就一定做不好么?
另外,人的技能樹,其實(shí)也是“犬牙交錯、參差不齊”的。什么意思?技術(shù)領(lǐng)域非常的廣闊,你真的沒辦法每個領(lǐng)域都很精通,實(shí)際上是這個做的多,懂的多,那個用的少,知道的少。
這個時候,應(yīng)看具體知識領(lǐng)域,是哪一類。它是否需要復(fù)雜的、難度較高的背景。
門檻高的技術(shù),需要的配套技能多得多,比如 AI、機(jī)器學(xué)習(xí)。而一般產(chǎn)品應(yīng)用領(lǐng)域則不然,了解核心概念、設(shè)計(jì)意圖,看著手冊、最佳實(shí)踐,也就能上手了。
這個暫時不會,實(shí)際無關(guān)緊要的,工作一段學(xué)的認(rèn)真點(diǎn)就會了。但是門檻高的領(lǐng)域,就需要很長時間的學(xué)習(xí)了。這是本質(zhì)的差別。
我曾看見某公司放出的職員技能樹,包羅萬象,幾乎一切 IT 領(lǐng)域的知識技能都在里面了,還聲稱要求“全部精通”。
我不知道它如何定義的“精通”,如果按德雷福斯模型的定義,能做到的那是神,不是人類。
這個純屬吹牛皮,我壓根就不信。如果真有這樣的人,出來讓我膜拜下。因?yàn)槊總€稍大點(diǎn)的領(lǐng)域,都足夠讓你鉆研一輩子,因?yàn)樗鼈円苍谘杆侔l(fā)展呀。
業(yè)內(nèi)流傳“全棧工程師”的說法,鼓吹自己是全棧的人經(jīng)常是前端工程師。而研究后端工作領(lǐng)域的技術(shù)高手經(jīng)常鄙視這類人:真以為會點(diǎn) Node.js 就能解決一堆后端的事務(wù)了么?
我也懂一些前端,也能號稱“全?!?,但在不同領(lǐng)域的專業(yè)性是什么水準(zhǔn),自己明白的很。
前端要解決的事情也有很多復(fù)雜性。全棧實(shí)際是反專業(yè)化的,是人力資源稀缺時候的低成本選擇。
更高一層,則是考察人本身了。人的視野夠廣闊么?其他領(lǐng)域的知識有了解嗎?一些問題的解答并不在問題域本身,而是在外面的領(lǐng)域。
所謂“功夫在詩外”,公司講求團(tuán)隊(duì)協(xié)作,總要面臨不同的分工合作問題。比如產(chǎn)品、運(yùn)營的人提需求,可以換位思考嗎?合作意識強(qiáng)么?誰也不想招個刺頭進(jìn)來吧?
把團(tuán)隊(duì)的氣氛和人際關(guān)系搞的一團(tuán)糟,大家做事都不痛快、不順心,又如何安心做好工作?最終只能讓團(tuán)隊(duì)工作效率下降,甚至瓦解。
要說專家,實(shí)際上有研究者認(rèn)為是需要刻意練習(xí) + 充分實(shí)踐才能功成。并不是每個人經(jīng)過足夠的工作年限,都自動成為專家。
有的人工作 10 年,可能后面 9 年都在重復(fù)第一年的工作任務(wù),毫無改進(jìn)。而職業(yè)上的訓(xùn)練機(jī)會,又跟大環(huán)境乃至運(yùn)氣息息相關(guān),并不是每個人都有機(jī)緣的。
但是把個人的職業(yè)技能做到勝任乃至精通,則是完全可行的,這只需要認(rèn)真和勤奮,是工作態(tài)度問題。