什么是高级程序员
定義“高級(jí)程序員”的難題
我是對(duì)“高級(jí)程序員”這個(gè)稱號(hào)非常懷疑的,尤其因?yàn)楫?dāng)初在我有了9個(gè)月的正規(guī)編程經(jīng)驗(yàn),他們就為了給我漲工資而給了我這個(gè)稱號(hào)之后。
事實(shí)上,如果你找來(lái)兩個(gè)有經(jīng)驗(yàn)的程序員,讓他們分別描述一下他們心中的“高級(jí)”是個(gè)什么樣子,我敢保證他們的答案會(huì)大相徑庭。
“怎樣才能叫高級(jí)程高序員”這個(gè)問(wèn)題其實(shí)非常依賴于語(yǔ)境,而且彈性空間非常大,以致于在我們這個(gè)行業(yè)里各個(gè)公司都可以給出任何自己需要的答案。
下面是一些身邊人給出的我親眼見(jiàn)到的關(guān)于“高級(jí)程序員”的定義:
?有15年以上編程經(jīng)驗(yàn)
?有2年編程經(jīng)驗(yàn)并且有非常好的學(xué)習(xí)能力
?有1年使用一個(gè)非常熱門的框架的經(jīng)驗(yàn),并且框架發(fā)布時(shí)間要超過(guò)一年
?一本技術(shù)書(shū)的作者
?可以在白板上默寫出來(lái)某個(gè)計(jì)算機(jī)科學(xué)的算法
?寫過(guò)一個(gè)開(kāi)源庫(kù)并且在公司里用起來(lái)了
這些定義之間相差實(shí)在太遠(yuǎn)了。但想想在我們的生活中,很多東西都是沒(méi)法下定義的,那又有什么問(wèn)題呢?
為什么要費(fèi)力下這個(gè)定義?憑直覺(jué)做判斷不好嗎?
當(dāng)大家在會(huì)議上說(shuō)出這個(gè)困惑時(shí),大家實(shí)際上說(shuō)的是我們并沒(méi)有非常清晰和可定義的標(biāo)準(zhǔn)來(lái)雇傭人、開(kāi)除人和提拔人這個(gè)問(wèn)題。大家說(shuō)的對(duì),事實(shí)上也就是這么混亂。
更糟的是,我們的核心使命——培養(yǎng)程序員——完不成了,因?yàn)槲覀儧](méi)辦法幫他們?cè)O(shè)定出一條發(fā)展路線來(lái)。
“我一見(jiàn)到這個(gè)人我就知道他是個(gè)高級(jí)程序員”——這種說(shuō)法揭示了另一個(gè)重大問(wèn)題:“高級(jí)程序員”已經(jīng)根深蒂固地成了一個(gè)偏見(jiàn)的有效載體。
把“高級(jí)程序員”作為供奉偏見(jiàn)的一種方法
當(dāng)我們描述一個(gè)高級(jí)程序員應(yīng)有的樣子時(shí),我們都是根據(jù)自己的經(jīng)驗(yàn)和喜好來(lái)的,這就意味著這個(gè)詞已經(jīng)有了非常強(qiáng)的主觀色彩。
當(dāng)我們沒(méi)有明確具體的標(biāo)準(zhǔn),只能憑著直覺(jué)來(lái)判斷一個(gè)人的資歷的時(shí)候,我們就沒(méi)有辦法不帶有偏見(jiàn),但我們還是要做出判斷。當(dāng)一個(gè)人同時(shí)申請(qǐng)幾份開(kāi)發(fā)工作的時(shí)候,非常有可能有的公司認(rèn)為他只是初級(jí),有的會(huì)認(rèn)為他是中級(jí),還有的卻認(rèn)為他是高級(jí),當(dāng)然大家都不會(huì)直說(shuō)自己是怎么判斷的。
作為招聘經(jīng)理,當(dāng)我們做出判斷的時(shí)候我們都會(huì)自認(rèn)為非常正確,即使大家得到的結(jié)論相距甚遠(yuǎn)。
這樣的結(jié)果就是不斷被加強(qiáng)的偏見(jiàn)會(huì)阻止一些人進(jìn)步,最終導(dǎo)致“頭銜通貨膨脹”。在當(dāng)今技術(shù)界,各種偏見(jiàn)都不可避免的偏向白種男人,那么這種憑直覺(jué)做判斷的體系就更多的會(huì)傷害女士和有色人種。
為什么大家還沒(méi)有解決這個(gè)問(wèn)題?
首先給這個(gè)問(wèn)題下定義就很難,因?yàn)樗凸ぷ鳝h(huán)境的具體情況關(guān)系太大了。大多數(shù)公司領(lǐng)導(dǎo)人處理這個(gè)問(wèn)題的辦法都是走著瞧,而最終解決方案也都是“差不多”就行了。
解決這個(gè)問(wèn)題也沒(méi)有什么動(dòng)力,因?yàn)楫?dāng)定下明確標(biāo)準(zhǔn)之后,公司領(lǐng)導(dǎo)人靠直覺(jué)做決定的權(quán)力很大程度上就會(huì)被剝奪了,而且還要為做出的決定負(fù)責(zé)。有誰(shuí)會(huì)主動(dòng)做一件讓自己又要讓出權(quán)力又要背上責(zé)任的事呢?
加上問(wèn)責(zé)
我喜歡被問(wèn)責(zé),我也非常習(xí)慣。我懂得在為某件事負(fù)責(zé)任的同時(shí),實(shí)際上我的自由度也是非常高的。就是否雇傭某個(gè)人這個(gè)問(wèn)題來(lái)說(shuō),憑直覺(jué)下的決定往往比依據(jù)清晰的標(biāo)準(zhǔn)做出的決定更容易讓人后悔。因?yàn)槲覀兊闹庇X(jué)太容易受影響了,從我早上是不是忘了吃早餐,到那個(gè)人是不是能即興談起某個(gè)動(dòng)畫(huà)片,都有可能。
問(wèn)責(zé)也為我們打開(kāi)了改進(jìn)之門。作為招聘經(jīng)理,我的責(zé)任是打造一支有戰(zhàn)斗力、快樂(lè)和能力互補(bǔ)的團(tuán)隊(duì)。要不斷改進(jìn)并且朝著這樣的目標(biāo)努力,可以靠直覺(jué),可以全憑運(yùn)氣,但我們也可以創(chuàng)建一種先定義、再衡量、又問(wèn)責(zé)反思然后再?gòu)念^開(kāi)始這樣的循環(huán),來(lái)保證我們通向最終目標(biāo)。
問(wèn)責(zé)可以幫助我們?cè)谕ㄏ蛭磥?lái)的道路上完成從乘客到駕駛員的角色轉(zhuǎn)換。
始于責(zé)任
現(xiàn)在問(wèn)題變成了:我們?cè)鯓硬拍軇?chuàng)造一種用于衡量資歷的可度量的標(biāo)準(zhǔn),而不是用那些有明顯缺陷、象玩游戲一樣的方法?
我能想到唯一相對(duì)公平的評(píng)判一個(gè)侯選人的方式就是問(wèn)幾個(gè)關(guān)鍵問(wèn)題:這個(gè)人的責(zé)任是什么?他是怎么完成任務(wù)的?他工作上需要什么樣的幫助?
我們先從定義我們的情況開(kāi)始了。當(dāng)我們總結(jié)了Frontside的工作環(huán)境特征后,事情就開(kāi)始變得清晰:
?公司很小,所以每個(gè)人都要肩負(fù)多種責(zé)任,承擔(dān)多種角色,并且要從頭到尾的跟進(jìn)解決問(wèn)題。在我們這臺(tái)機(jī)器上沒(méi)有居中的傳動(dòng)齒輪。
?我們依賴并打造內(nèi)部社區(qū)的力量,以及我們參與的外部社區(qū),尤其是開(kāi)源界。
?我們?cè)诩夹g(shù)目標(biāo)和代碼可維護(hù)性可用性上追求極致。
于是團(tuán)隊(duì)成員的責(zé)任就非容易確定了:
-可以為隊(duì)友及客戶提供清晰專業(yè)的技術(shù)和項(xiàng)目指導(dǎo)。
-在內(nèi)部和更大的編程社區(qū)里可以輔導(dǎo)他人、教授并且做出貢獻(xiàn)。
-?可以很愉快的將軟件交接給用戶或者接手維護(hù)它的其他程序員。
所有這些責(zé)任構(gòu)成了我們?cè)u(píng)估資歷的標(biāo)準(zhǔn)基礎(chǔ)。
聯(lián)體三角形:簡(jiǎn)單的解釋
我恰好最近有機(jī)會(huì)與好幾家不同規(guī)模公司的負(fù)責(zé)人討論了“高級(jí)”的定義,大家意見(jiàn)的共同點(diǎn)只有一個(gè)。
大家最簡(jiǎn)單的關(guān)于資歷的共同解釋就是:這個(gè)人需要多少指導(dǎo)?這個(gè)人能給別人提供多少指導(dǎo)?
我贊成這個(gè)“高級(jí)程序員的組合三角形”是一個(gè)不錯(cuò)的主意,可以簡(jiǎn)明的表達(dá)出內(nèi)在含義,就象ActionJack的“成功的組合三角形”一樣。
但即使這樣的標(biāo)準(zhǔn)也是非常容易引入偏見(jiàn)的。它缺少一些重要的標(biāo)準(zhǔn),并且過(guò)度強(qiáng)調(diào)了口碑這類容易見(jiàn)到的東西,以及解釋深?yuàn)W的計(jì)算機(jī)術(shù)語(yǔ)的能力。
在會(huì)上我們討論出了一個(gè)新的框架
會(huì)上的熱烈討論有了一個(gè)非常酷的結(jié)果。在我試圖灌輸上面的三角形理論時(shí),另一位員工提出了一個(gè)嶄新的心理模形,吸引了大家的注意力。
她把我們?cè)贔rontside確定資歷的方法描繪成了一個(gè)文氏圖(用閉合的區(qū)域表示集合的圖示法)。三個(gè)集合分別是:這個(gè)人有多強(qiáng)的獨(dú)立工作能力及領(lǐng)導(dǎo)力?這個(gè)人技術(shù)實(shí)力如何?這個(gè)人和外部環(huán)境關(guān)系如何、有多大貢獻(xiàn)?
在上文中我們已經(jīng)把對(duì)資歷的評(píng)估方法提升到了更高境界:“這個(gè)人需要多少指導(dǎo)?這個(gè)人可以給其他人提供多少指導(dǎo)?”但正像我們的員工指出來(lái)的,如果到此為止的話,還會(huì)有非常多令人困惑的地方。
那我們?cè)撛鯓佣x一位候選人到底能把他的本職工作做得多好?我們?cè)鯓幽馨言u(píng)判標(biāo)準(zhǔn)引向一些具體的方面,而千萬(wàn)不要變成數(shù)學(xué)公式?
我們最終按照候選人要做的事總結(jié)出了三方面:技術(shù)能力、領(lǐng)導(dǎo)力和交際能力,并細(xì)化提煉出了12個(gè)特質(zhì)。我將在下一篇文章中詳細(xì)闡述這12個(gè)特質(zhì),但現(xiàn)在我可以簡(jiǎn)單說(shuō)說(shuō)。
三大方面
技術(shù)能力(Technicalcapability):技術(shù)能力強(qiáng)的人通常都對(duì)技術(shù)有濃厚興趣,他們會(huì)不斷鉆研決不放棄,最終會(huì)做出可供經(jīng)驗(yàn)不足的工程師使用、維護(hù)和學(xué)習(xí)的解決方案。
領(lǐng)導(dǎo)力(Leadership):有領(lǐng)導(dǎo)力的人知道怎樣為自己及別人發(fā)展并保持一種目的感。他們會(huì)指出公司里及自己職業(yè)生涯中出現(xiàn)的問(wèn)題,并且攬到自己身上最終解決掉。
交際能力(Community/Connectedness):交際能力強(qiáng)的人非常希望自己成為一個(gè)大集體中的一員,有非常強(qiáng)的奉獻(xiàn)意識(shí),身上有別人(同事、客戶等)無(wú)法輕易描述的個(gè)人魅力,并且存在感非常強(qiáng),生活充實(shí)快樂(lè)。
“對(duì)文化的適應(yīng)能力”怎么樣
我們最初差點(diǎn)把交際能力叫做“對(duì)文化的適應(yīng)能力”了,但我非常懷疑這個(gè)定義實(shí)際上是個(gè)扼殺思想的陳詞濫調(diào)。“對(duì)文化的適應(yīng)能力”就是一個(gè)萬(wàn)金油,所有你想在程序員身上見(jiàn)到的可你又說(shuō)不出來(lái)的東西都可以用它往上套,而且這里面也非常容易藏入偏見(jiàn)。
當(dāng)我們定義好了可以讓Frontside的文化一致的標(biāo)準(zhǔn)之后,上面的觀點(diǎn)就定義成了交際能力。
在三個(gè)不同方面衡量資質(zhì)
還記得那三個(gè)方面嗎?技術(shù)能力、領(lǐng)導(dǎo)力和交際能力,每個(gè)方面都有自己的從初級(jí)到高級(jí)的發(fā)展路線。
現(xiàn)在人們換職業(yè)都不是什么新鮮事了。很容易見(jiàn)到那些有很強(qiáng)領(lǐng)導(dǎo)力和交際能力但剛參加完代碼訓(xùn)練營(yíng)的人,他們的技術(shù)水平就只能被認(rèn)為是一般。相反,一個(gè)經(jīng)驗(yàn)豐富又受過(guò)正規(guī)培訓(xùn)的技術(shù)人員卻有可能缺乏領(lǐng)導(dǎo)力和交際能力。
很少有人真的能在三方面都能達(dá)到高級(jí)水平,事實(shí)上也很少有人真的想在三方面都成為高級(jí)。我們Frontside把資質(zhì)定義為這些方面的混合體,并努力幫助人們?cè)谒麄兿胩岣叩姆矫娅@得進(jìn)步。
證據(jù):唯一能得到的衡量依據(jù)
衡量每個(gè)方面的資質(zhì)都需要證據(jù)。如果你已經(jīng)做了一些工作,那你手上應(yīng)該已經(jīng)有了一些證據(jù)。
我們將在下一篇文章中討論這12個(gè)特質(zhì),每一個(gè)都有詳細(xì)的標(biāo)準(zhǔn),可以讓候選人提供證據(jù)來(lái)說(shuō)明他們經(jīng)過(guò)時(shí)間的積累的確具有這些特質(zhì)并且經(jīng)驗(yàn)豐富。
但總的來(lái)說(shuō),如果在某個(gè)方面有一兩項(xiàng)特別擅長(zhǎng)和精通的特質(zhì)的話,就可以認(rèn)為他在那個(gè)方面是高級(jí)了。
比方說(shuō),假如某個(gè)人告訴你他的代碼用好幾種語(yǔ)言實(shí)現(xiàn)過(guò),那在“技術(shù)好奇心”這個(gè)特質(zhì)上就可以得高分了。如果他還會(huì)非常嚴(yán)謹(jǐn)?shù)臑轫?xiàng)目的核心代碼寫出全面、高質(zhì)量的測(cè)試用例并用于持續(xù)集成,你就差不多可以認(rèn)為他在技術(shù)能力上達(dá)到了高級(jí)水平。
或者如果某個(gè)人經(jīng)常輔導(dǎo)別人、組織聚會(huì),或者會(huì)做一些讓大家過(guò)得更輕松的事,那我們就差不多可以在交際能力這方面給他打高分。
如果某個(gè)人曾經(jīng)帶過(guò)幾個(gè)團(tuán)隊(duì),那他就應(yīng)該已經(jīng)掌握了帶團(tuán)隊(duì)的技巧。再加上挖掘問(wèn)題根本原因的能力,那你就可以認(rèn)為他在領(lǐng)導(dǎo)力的方向上達(dá)到高級(jí)了。
我們?cè)趺炊x“高級(jí)”
我們的衡量標(biāo)準(zhǔn)是如果某個(gè)人在技術(shù)能力上達(dá)到高級(jí)水平,他在領(lǐng)導(dǎo)力或交際能力中有一方面也能達(dá)到高級(jí)水平,我們就認(rèn)為他是高級(jí)程序員了。如果他還想繼續(xù)提高剩下的一方面,我們?cè)敢馓峁椭?/p>
如果他是在領(lǐng)導(dǎo)力和交際能力都能達(dá)到高級(jí)水平,在技術(shù)方面能屬于中高級(jí)的話,我們也認(rèn)為是高級(jí)程序員。
舉個(gè)一年前發(fā)生過(guò)的真實(shí)例子,我們雇傭了一個(gè)初級(jí)程序員,因?yàn)閾?jù)我們?cè)u(píng)估,起碼在最初的六個(gè)月中他需要非常多的指導(dǎo)。
到了第六個(gè)月,他的技術(shù)水平就已經(jīng)達(dá)到中級(jí)了。到第一年結(jié)束時(shí)他就已經(jīng)達(dá)到了高級(jí)水平。我敢這么說(shuō)的原因是我們知道如果他離職,我們需要雇傭一個(gè)高級(jí)程序員來(lái)頂替他。
這樣的事情為什么能發(fā)生?因?yàn)樗窃谖覀児酒鸩降?#xff0c;而當(dāng)時(shí)他已經(jīng)在交際能力和領(lǐng)導(dǎo)力方面都可以達(dá)到高級(jí)水平了。所以他要在我們團(tuán)隊(duì)中做高級(jí)程序員的工作只是需要提高技術(shù)能力而已。
只看技術(shù)水平并不夠
對(duì)于技術(shù)水平高但在領(lǐng)導(dǎo)力和交際能力方面都缺乏經(jīng)驗(yàn)的人,不能直說(shuō)“在我們這里你達(dá)不到高級(jí)程序員的標(biāo)準(zhǔn)”,這話太刺耳了。但對(duì)于他在團(tuán)隊(duì)中能承擔(dān)的責(zé)任來(lái)說(shuō),我們可以暫時(shí)評(píng)訂為中級(jí),等他把另一方面或者兩方面都提高了之后,我們?cè)侔阉嵘秊楦呒?jí)。
很多公司只根據(jù)技術(shù)水平來(lái)做判斷,但這樣對(duì)于我們這種小型的而且非常依賴合作模式工作的公司來(lái)說(shuō)行不通。其實(shí)我非常擔(dān)心那些只衡量技術(shù)能力的公司是認(rèn)可“孤獨(dú)的天才開(kāi)發(fā)者”這樣的危險(xiǎn)想法的,覺(jué)得一個(gè)人技術(shù)水平高,就想當(dāng)然的認(rèn)為領(lǐng)導(dǎo)力和交際能力也很好。
在大公司中每個(gè)人都只負(fù)責(zé)一小部分工作,我非常樂(lè)于見(jiàn)到他們分享對(duì)于“高級(jí)程序員”的定義,那應(yīng)該會(huì)在技術(shù)和非技術(shù)的方面都更加全面,讓我們工作得效率更高,尤其是在需要與客戶打交道的團(tuán)隊(duì)里。
成為高級(jí)需要多久?
“高級(jí)程序員”是不是就意味著“若干年的經(jīng)驗(yàn)”?事實(shí)上我并沒(méi)有看到過(guò)哪個(gè)人不用五年就可以成為高級(jí)程序員的。要在很短的時(shí)間內(nèi)就把一些特質(zhì)發(fā)展得非常好來(lái)在某一方面達(dá)到高級(jí)水平其實(shí)是非常困難、甚至不可能的,更別說(shuō)在多個(gè)方面全部成為高級(jí)了。
而且“五年經(jīng)驗(yàn)”并不一定要意味著“五年的軟件開(kāi)發(fā)經(jīng)驗(yàn)”。如果一個(gè)人已經(jīng)在領(lǐng)導(dǎo)力和(或)交際能力上滿足了條件,那他只需要提升技術(shù)能力,就已經(jīng)可以發(fā)揮高級(jí)程序員的作用了。
我們招聘的“秘密武器”很大程度上源于我們觀察到的事實(shí):對(duì)于具有領(lǐng)導(dǎo)力和交際能力的人來(lái)說(shuō),要再提升技術(shù)能力并不需要很多時(shí)間,反之則不然。我見(jiàn)過(guò)很多這樣的人,從代碼集訓(xùn)營(yíng)中出來(lái)兩三年后就已經(jīng)成了非常好的高級(jí)程序員。
更多要討論的
這篇文章留下了非常多未能回答的問(wèn)題。我們?cè)谶@三個(gè)方面是用什么具體方法來(lái)評(píng)估候選人的能力和特質(zhì)的?在面試前和面試中該怎么衡量呢?該如何把這些評(píng)估結(jié)果與一些具體的東西聯(lián)系起來(lái),比如工資?
這個(gè)框架又如何應(yīng)用于非高級(jí)程序員?程序員們?cè)撌裁磿r(shí)候升級(jí)?怎么升級(jí)?初級(jí)、中級(jí)和高級(jí)之間的區(qū)別是什么?它們之間差了些什么?這些詞會(huì)不會(huì)實(shí)際上毫無(wú)意義而該被替換掉?
告別直覺(jué)
定義“高級(jí)”是一個(gè)仍在進(jìn)行中的而且出乎人意料困難的過(guò)程,但我們還是要做這件事,因?yàn)樗鼘?duì)我們非常重要。如果不能給“高級(jí)程序員”下一個(gè)清晰的定義,我們就迷失了培養(yǎng)員工的方向,就沒(méi)有具體的辦法來(lái)衡量要加入我們團(tuán)隊(duì)的人,也沒(méi)有辦法讓員工相信我們可以信賴,更沒(méi)辦法來(lái)改進(jìn)流程。
這個(gè)行業(yè)已經(jīng)應(yīng)該告別“我一見(jiàn)到這個(gè)人我就知道他是個(gè)高級(jí)程序員”這樣下結(jié)論的年代了,我們?cè)撓蛑恍┪覀兛梢远x和分享的東西努力。讓我們一起把開(kāi)源的思路帶到我們雇傭和發(fā)展員工上吧。
關(guān)注“動(dòng)力節(jié)點(diǎn)Java學(xué)院”微信公眾號(hào),獲取更多相關(guān)資訊,如果你想學(xué)習(xí)Java,想加入Java開(kāi)發(fā)行業(yè),成為優(yōu)秀的Java程序員,那么動(dòng)力節(jié)點(diǎn)Java零基礎(chǔ)班現(xiàn)已開(kāi)啟免費(fèi)學(xué)習(xí),對(duì)于想學(xué)Java的同學(xué)無(wú)疑是好消息,親自考察教學(xué)質(zhì)量,機(jī)會(huì)就在眼前,快來(lái)報(bào)名吧,座位緊張,先到先得。
總結(jié)
- 上一篇: 邮箱邮件安全问题有哪些?如何做邮件安全宣
- 下一篇: 电动车自行车电池