最近我為一個(gè)內(nèi)核程序員的職位面試了十幾個(gè)候選人。這些候選人都來(lái)自一些不錯(cuò)的大公司,這些公司在芯片或嵌入式操作系統(tǒng)領(lǐng)域十分有名。這些候選人大多聲稱(chēng)自己在內(nèi)核方面有著十年的在職工作經(jīng)驗(yàn)。他們的簡(jiǎn)歷看起來(lái)非常耀眼——各種相關(guān)的項(xiàng)目、術(shù)語(yǔ)和獎(jiǎng)項(xiàng)…… 但他們幾乎無(wú)人能夠回答一個(gè)非?;A(chǔ)的問(wèn)題: 當(dāng)我們調(diào)用標(biāo)準(zhǔn)的 malloc 函數(shù)時(shí),內(nèi)核中會(huì)發(fā)生什么? 先別吃驚。當(dāng)我要求其中一位候選人基于 glib 的哈希函數(shù)寫(xiě)一個(gè)簡(jiǎn)單的 LRU 緩存框架時(shí),他先是表示從來(lái)沒(méi)用過(guò) glib——如我所料——于是我?guī)退蜷_(kāi)了 glib 哈希 API 的頁(yè)面,并向他詳細(xì)講解了這些 API;然后大約一個(gè)小時(shí)以后,他只寫(xiě)出幾行凌亂的代碼。 我不知道其它國(guó)家是否也有類(lèi)似的情況,但在中國(guó),或者更具體一些,在北京,這就是現(xiàn)狀。那些在不錯(cuò)的大公司里工作了多年的“資深”程序員們無(wú)法在一些簡(jiǎn)單的、基本的問(wèn)題上證明自己。 這到底是怎么回事?當(dāng)我在這個(gè)問(wèn)題上思索得越多,我就更加相信,這不僅有他們自身的原因,同時(shí)也歸咎于他們所供職的這些公司。這些公司通常提供了一個(gè)穩(wěn)定的代碼堆,往往幾年都不會(huì)有大更新。這些代碼的專(zhuān)有技術(shù)把人們的技能框進(jìn)一個(gè)定式,以致于他們只需要遵循現(xiàn)有的路徑,而不需要發(fā)揮創(chuàng)意。如果你碰巧為這類(lèi)代碼工作,而且與世隔絕了很長(zhǎng)一段時(shí)間,那么有一天你會(huì)發(fā)現(xiàn)你自己已經(jīng)陷入一個(gè)可悲的位置——他們?cè)趫F(tuán)隊(duì)或公司內(nèi)稱(chēng)呼你為 “ 專(zhuān)家 ”,但不幸的是,你無(wú)法在市場(chǎng)上找到一份同等待遇的工作。 這就叫作 “ 專(zhuān)家陷阱 ”。日復(fù)一日,程序員們都渴望在團(tuán)隊(duì)或公司內(nèi)成為一名專(zhuān)家;但是,當(dāng)那一天真正到來(lái)時(shí),我們卻早已作繭自縛。我們?cè)诩扔写a中鉆得越深,我們自己就陷得越深。既有代碼是如此穩(wěn)定(如此寵大、如此好用),讓我們漸漸地失去了從無(wú)到有獨(dú)立編寫(xiě)完整項(xiàng)目的能力。更糟糕的是,如果我們的主要工作就是維護(hù)這些既有代碼、很少開(kāi)發(fā)新功能,那么過(guò)不了多久,無(wú)論研讀了多少代碼,我們都會(huì)發(fā)現(xiàn)自己不會(huì)寫(xiě)代碼了——哪怕是一個(gè)像畢業(yè)大作業(yè)那樣簡(jiǎn)單的任務(wù)。這就是程序員的困境: 我們以編碼為生,但那些養(yǎng)活我們的大公司卻在無(wú)形中磨滅了我們的生存技能。 如何打破這種困境?對(duì)于個(gè)人:
對(duì)于團(tuán)隊(duì)和公司:
|
|