王國(guó)維的人生三重境界快被人們念叨爛了,資深文藝青年都已經(jīng)不愛(ài)提這個(gè),但把這種分法做個(gè)跨學(xué)科應(yīng)用,倒是能看到一些新奇的東西。
十一前幫新東家在北京做了一輪校園招聘的算法面試官。雖然面試多年,但這還是我第一次如此密集地從事這項(xiàng)工作——一周時(shí)間里馬不停蹄地面試了數(shù)十名候選者。長(zhǎng)時(shí)間做一件事情,再結(jié)合原來(lái)類(lèi)似的背景和經(jīng)歷,通常會(huì)發(fā)酵出一些東西,于是就有了下面的文字。
極少一部分玩票的人這里就不提了,剩下大部分的候選人其實(shí)還在這個(gè)職位的門(mén)檻外徘徊,處于“獨(dú)上高樓,望盡天涯路”的摸索階段。
比較初級(jí)的比如某些工程出身但沒(méi)有信心投開(kāi)發(fā)的候選人,看著這個(gè)稍顯陌生的工程崗位覺(jué)得可以來(lái)碰碰運(yùn)氣(類(lèi)似于以前的一個(gè)玩笑:不知道自己該干什么的都投產(chǎn)品經(jīng)理去了)。
進(jìn)階一點(diǎn)的有啃過(guò)一兩本相關(guān)書(shū)籍,上個(gè)兩門(mén)課,做過(guò)兩個(gè)玩具項(xiàng)目的學(xué)生,問(wèn)一個(gè)問(wèn)題通常都能口若懸河地說(shuō)上一通,但你讓他把剛才說(shuō)的問(wèn)題和方案用形式化的語(yǔ)言來(lái)表述一下,就只能干瞪眼。你把紙和筆都推到他面前要描述和推演,卻發(fā)現(xiàn)得到口述內(nèi)容的語(yǔ)音識(shí)別版。
我挑人通常對(duì)候選人的形式化思維能力有要求,這也是為什么我認(rèn)為具備基本的數(shù)學(xué)能力是多么重要的原因。因?yàn)樗惴üこ處煾鷤鹘y(tǒng)的開(kāi)發(fā)工程師不同,很多時(shí)候并沒(méi)有一個(gè)現(xiàn)成的定義好的問(wèn)題在等待著你,你通常需要先把需求方的自然語(yǔ)言翻譯成形式化的語(yǔ)言,然后再翻譯成機(jī)器編碼(這部分扯起來(lái)就很多了,將來(lái)再撰文詳述)。當(dāng)然也有對(duì)這個(gè)職位充滿了熱情,但明顯還沒(méi)準(zhǔn)備好的同學(xué)。這樣的候選人只要對(duì)眼緣,我一般都會(huì)加以勸導(dǎo),無(wú)論是重新思考自己的職業(yè)發(fā)展方向,還是進(jìn)行合理的能力儲(chǔ)備,都比這樣憑著熱血碰釘子強(qiáng)。這個(gè)階段的同學(xué),看山是山,看水是水,習(xí)慣用生活語(yǔ)言來(lái)描述問(wèn)題,分析問(wèn)題,而未懂得把握抽象在其后的共性,并用形式化的語(yǔ)言把問(wèn)題和自己的想法表達(dá)出來(lái)。
合格的候選人通常經(jīng)過(guò)一些學(xué)術(shù)或項(xiàng)目的鍛煉,不知覺(jué)地跨過(guò)了第一階段,真正地進(jìn)入到這個(gè)門(mén)檻里,懂得了算法和抽象的樂(lè)趣,并樂(lè)在其中,“衣帶漸寬終不悔,為伊消得人憔悴”。這批人通常已經(jīng)具備了成形的形式化邏輯思維習(xí)慣,對(duì)于面臨的實(shí)際問(wèn)題,第一反應(yīng)就是“如何量化”,“如何建模”,“已知變量是什么”,“目標(biāo)函數(shù)是什么”,至不濟(jì)的,也會(huì)用自己做過(guò)的項(xiàng)目作為一個(gè)模子去套新的問(wèn)題。他們擁有成熟程度不等的知識(shí)體系,凡事都能套入到自己的體系中去表達(dá)和推演,在抽象層面對(duì)問(wèn)題進(jìn)行解答。但這也是一個(gè)拿著錘子滿世界找釘子的階段,每個(gè)人都認(rèn)為自己的錘子是萬(wàn)能的,所有問(wèn)題都要代入到自己熟悉的模型中去求解,于是往往能看到一些鉆在牛角尖里繞不出來(lái)的面試者。比如一個(gè)其實(shí)不難的統(tǒng)計(jì)問(wèn)題,想得太多,有時(shí)就會(huì)被面試者套入假設(shè)檢驗(yàn),有時(shí)是分類(lèi)問(wèn)題,有時(shí)又變成貝葉斯推斷。這個(gè)階段,看山不是山,看水不是水,有點(diǎn)癡狂,有點(diǎn)自信,有點(diǎn)執(zhí)著,有點(diǎn)迷失。
總有一些人能擺脫自身知識(shí)形成的桎梏,跳出自己模型框框,回歸到問(wèn)題本身,達(dá)到了看山還是山,看水還是水的層面。他們?cè)诰邆浜芎脤?zhuān)業(yè)素質(zhì)的前提下,不被自己的專(zhuān)業(yè)所束縛,他們首先關(guān)注問(wèn)題的起點(diǎn)和目標(biāo),并通過(guò)自己的已有甚至未有的知識(shí)去描繪中間的路徑,為問(wèn)題定義出合理的邊界和解決路徑。能達(dá)到這個(gè)層面的,已不多見(jiàn)。即使在實(shí)際工作中,也有大量的第二層面的解法,面對(duì)問(wèn)題,通過(guò)不斷地加入模型,使得架構(gòu)變得復(fù)雜。而只有回歸到問(wèn)題本身,從出發(fā)點(diǎn)進(jìn)行分析,千錘百煉后,才能走出自身的困境,享受“驀然回首,那人卻在燈火闌珊處”的驚喜。
相對(duì)于能力劃分擁有比較清晰標(biāo)準(zhǔn)的傳統(tǒng)開(kāi)發(fā)工程師來(lái)說(shuō),算法工程師是一個(gè)相對(duì)較新的職位,學(xué)校里也沒(méi)有一些定義明確的培養(yǎng)課程(比如c/java、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)),可以據(jù)此來(lái)對(duì)候選人的能力進(jìn)行衡量,所以對(duì)其能力的界定還比較模糊。這里我從面試官的角度來(lái)描述自己對(duì)這個(gè)問(wèn)題的思考——除了基本的工程能力之外,還有哪些素質(zhì)是必要的。這是個(gè)很大的值得探討的話題,這里只是開(kāi)了個(gè)頭,表達(dá)得還很模糊,不足夠具體和系統(tǒng),屬于隨性的念叨。將來(lái)有機(jī)會(huì)我還會(huì)結(jié)合著自己的實(shí)踐經(jīng)歷做進(jìn)一步闡述,也歡迎大家在這里發(fā)表自己的見(jiàn)解。