什么是“流動(dòng)型程序員”?看不懂?所謂“流動(dòng)型程序員”其實(shí)指得就是那些在一家公司總是干不長(zhǎng)的程序員,并且,這樣的程序員數(shù)量還挺多。如果你沒(méi)聽(tīng)過(guò)這個(gè)稱呼,不要奇怪,因?yàn)槲铱傄o這種程序員起個(gè)名字好讓人能夠理解!所以,“流動(dòng)型程序員”這個(gè)形容詞是我起的,如果您有更好的稱呼,我也愿意改正這個(gè)稱呼!
特征
我見(jiàn)過(guò)不少這樣的程序員,他們身上有一個(gè)共同的特征,那就是懂得比較多,參加面試也能面試過(guò)去,但是寫(xiě)得代碼基本上都是“屎山”。導(dǎo)致這種結(jié)果的原因,就是在剛開(kāi)始成為程序員的時(shí)候沒(méi)有受到好的編碼習(xí)慣的培養(yǎng),因此只要是他們參加的項(xiàng)目,基本上就會(huì)出各種各樣的問(wèn)題。
因此,他們不是不愿意長(zhǎng)久地在一家公司呆下去,而是再待下去真沒(méi)什么好果子吃,留下的只有爛攤子!
為什么這些人懂得比較多,面試也能面過(guò)去呢?其實(shí)一方面是因?yàn)樗麄兘?jīng)歷的項(xiàng)目比較多,久而久之,懂得也就比較多了。而面試能面過(guò)去,無(wú)非就是基礎(chǔ)知識(shí)比較扎實(shí),又因?yàn)榻?jīng)歷的項(xiàng)目比較多,所以自然面試就不在話下。
但是,只有豐富的項(xiàng)目經(jīng)歷以及扎實(shí)的基本功,寫(xiě)代碼的時(shí)候卻沒(méi)有良好的編碼習(xí)慣的話,無(wú)疑跟“紙上談兵”沒(méi)有區(qū)別!
舉例個(gè)典型例子
我曾經(jīng)遇到過(guò)一個(gè)工作十幾年的程序員,從他手上接過(guò)了一個(gè)項(xiàng)目源碼。
看了他的源碼,我才知道,程序員并不是工作年限越久,他的編碼技術(shù)水平就越高,編碼習(xí)慣就越好!
他的代碼里,所有功能基本上都沒(méi)有封裝,基本上代碼就是從頭寫(xiě)到尾。你可以在他寫(xiě)的源碼中看到各種重復(fù)性的邏輯。
有些邏輯即使是復(fù)用性極高的,他也不會(huì)選擇將這部分邏輯進(jìn)行封裝。
舉個(gè)大家都能明白的例子吧!
假設(shè)一個(gè)網(wǎng)站要做一個(gè)接口鑒權(quán)的攔截器,一般來(lái)說(shuō),我們只要在網(wǎng)站訪問(wèn)入口那里定義一個(gè)攔截器,如果訪問(wèn)者沒(méi)有登陸,我們就會(huì)要求訪問(wèn)者登陸。如果訪問(wèn)者已經(jīng)登陸,那么我們就要驗(yàn)證Token的合法性。
如果這個(gè)功能是他去寫(xiě),我大概能知道他的實(shí)現(xiàn)方式一定是在每個(gè)接口上都單獨(dú)寫(xiě)上登陸判斷和Token驗(yàn)證的代碼!
這種做法雖然也能實(shí)現(xiàn)需求,但是萬(wàn)一比如哪一天Token的驗(yàn)證方式改了,那么所有的接口都得改!如果接口是幾十個(gè)上百個(gè)呢?
不要以為老程序員干不出這種事情,他真能干得出來(lái)!
因?yàn)槲覀児敬a都是自審,只要測(cè)試那邊測(cè)試通過(guò)就沒(méi)問(wèn)題。所以,他的這套編碼習(xí)慣一直沒(méi)被發(fā)現(xiàn),直到我接手他的代碼以后,才感覺(jué)到什么叫崩潰!
后來(lái),我就把這個(gè)情況反映給了我的研發(fā)總監(jiān),研發(fā)總監(jiān)看了他的代碼也是很頭疼,只怪自己沒(méi)有早點(diǎn)發(fā)現(xiàn)。
但是,就這么寫(xiě)代碼的一個(gè)人,平時(shí)給人的感覺(jué)就是很沉穩(wěn),值得信賴的樣子。
后來(lái),研發(fā)總監(jiān)沒(méi)事就去審查他的代碼,最后發(fā)現(xiàn)他寫(xiě)的代碼不光重復(fù)性極高,而且對(duì)于一些外部入?yún)⒁矝](méi)有基本的判斷,Sql語(yǔ)句也是采用拼接參數(shù)的方式等等。他的這種編碼風(fēng)格和習(xí)慣,正常情況下不會(huì)出問(wèn)題,但是一旦出問(wèn)題是非常棘手的!
最后,因?yàn)閷?xiě)代碼的時(shí)候總是不注意,總是被研發(fā)總監(jiān)約談,最后他還是自己離職了!
他離職之后,留下了一堆爛攤子給我們,我們花了大把時(shí)間對(duì)其代碼進(jìn)行重構(gòu),才勉強(qiáng)提升了下代碼的健壯性。
后來(lái),我跟這個(gè)程序員還有聯(lián)系,據(jù)我了解,基本上后來(lái)他在每家公司待得時(shí)間都不超過(guò)一年!

像這種程序員在面試的時(shí)候是沒(méi)有問(wèn)題的,但是因?yàn)榫幋a習(xí)慣問(wèn)題,就會(huì)導(dǎo)致越到最后,代碼得可維護(hù)性越低。導(dǎo)致當(dāng)一個(gè)項(xiàng)目的變數(shù)多的時(shí)候,到最后他自己也很難很好地維護(hù)自己的代碼。但是,大多數(shù)項(xiàng)目的研發(fā)過(guò)程中,其實(shí)需求都是在變得。因此,當(dāng)他連自己代碼都維護(hù)不好的時(shí)候,就會(huì)導(dǎo)致最后積壓的問(wèn)題越來(lái)越多,只有“跑路”這一條路可走。
如何避免遇到這樣的程序員?
想要分辨“流動(dòng)型程序員”有一種方法,首先就是看其工作經(jīng)歷當(dāng)中,是否每家公司都呆不長(zhǎng)!
當(dāng)然,待不長(zhǎng)并不代表他就是“流動(dòng)型程序員”,也可能是因?yàn)樾愿?,無(wú)法融入團(tuán)隊(duì)等等,這樣的程序員我也遇到不少。
如果遇到工作經(jīng)歷比較“豐富”的程序員,最好還是讓他拿出以前做的項(xiàng)目源碼來(lái)看看,如果沒(méi)有的話,他自己總有一兩個(gè)自己用來(lái)練手的項(xiàng)目。
一定要把他的源碼看個(gè)大概,如果他的編碼風(fēng)格屬于上述例子中所說(shuō)的那樣,那這樣的人最好還是謹(jǐn)慎對(duì)待!
另外,從技術(shù)角度,也可以問(wèn)他一些關(guān)于如何提高程序健壯性的問(wèn)題。如果他都能答出來(lái),就代表他有這方面意識(shí)。
最后結(jié)合他的代碼中體現(xiàn)的代碼編寫(xiě)習(xí)慣和編碼風(fēng)格,我們就可以大致判斷出這個(gè)人屬于不屬于“流動(dòng)型程序員”了!






