一個(gè)普通的程序員和一個(gè)優(yōu)秀的程序員之間,到底存在什么樣的差異呢?我認(rèn)為這種差異主要體現(xiàn)在他們的編碼能力和思維方式上。
如果按照學(xué)習(xí)發(fā)展路徑來(lái)看,程序員大致可以分為五類,依次是:
1. 拷貝型程序員:代碼的搬運(yùn)工
這類程序員就是傳說(shuō)中的“代碼拷貝員”,這類程序員只會(huì)改代碼,卻不會(huì)寫(xiě)代碼,對(duì)編程毫無(wú)興趣,只是希望以此糊口。
他們對(duì)實(shí)現(xiàn)功能幾乎沒(méi)有思路,唯一的技能就是從網(wǎng)上或其他團(tuán)隊(duì)成員的代碼中拷貝片段,然后拼湊到項(xiàng)目中。
只要項(xiàng)目能運(yùn)行,他們就認(rèn)為任務(wù)完成了。他們對(duì)技術(shù)提升沒(méi)有興趣或沒(méi)有方向,成長(zhǎng)得很慢。
2. 新手型程序員:功能至上,忽略細(xì)節(jié)
新手程序員由于經(jīng)驗(yàn)有限,面對(duì)新功能需求往往不知所措,需要通過(guò)學(xué)習(xí)、搜索資料等方式來(lái)解決問(wèn)題。
他們將重點(diǎn)放在“完成功能”上,而忽略了邊界條件、性能、可讀性、可擴(kuò)展性、編碼規(guī)范等重要因素。
因此,他們的代碼往往bug較多,穩(wěn)定性不高,開(kāi)發(fā)周期長(zhǎng),維護(hù)成本高,甚至?xí)霈F(xiàn)開(kāi)發(fā)一個(gè)月,改bug卻要改好幾個(gè)月的尷尬局面。
3. 學(xué)習(xí)型程序員:熱衷創(chuàng)造,忽視復(fù)用
這類程序員對(duì)所在領(lǐng)域的語(yǔ)言已經(jīng)比較了解,對(duì)于一般功能可以有較為清晰的實(shí)現(xiàn)思路。
他們喜歡“創(chuàng)造代碼”,即使有現(xiàn)成的實(shí)現(xiàn)方案,他們也希望自己重新實(shí)現(xiàn)一套,以達(dá)到“學(xué)習(xí)”的目的。
他們不喜歡復(fù)用別人的代碼,即使項(xiàng)目中存在相似的功能,他們也會(huì)以“需求不同”的借口來(lái)重新編寫(xiě)代碼。
這種做法雖然有利于學(xué)習(xí),但也會(huì)帶來(lái)一些問(wèn)題。例如,開(kāi)發(fā)周期可能較長(zhǎng),代碼膨脹,影響項(xiàng)目的維護(hù)。
從項(xiàng)目的角度來(lái)看,這類程序員最大的問(wèn)題在于他們?nèi)狈?duì)代碼復(fù)用和項(xiàng)目整體架構(gòu)的理解,導(dǎo)致代碼質(zhì)量不高,維護(hù)成本增加。
4. 實(shí)現(xiàn)型程序員:功能至上,忽略架構(gòu)
這類程序員一般擁有較為豐富的經(jīng)驗(yàn),他們不再追求“創(chuàng)造代碼”來(lái)進(jìn)行學(xué)習(xí),而是更注重快速實(shí)現(xiàn)功能。
他們熟悉常用的框架和工具,能夠快速理解需求,并給出解決方案。他們對(duì)邊界條件和性能問(wèn)題也有一定的考慮,因此經(jīng)常被團(tuán)隊(duì)評(píng)價(jià)為“牛人”。
然而,這類程序員往往只關(guān)注“完成功能”,而忽略了代碼的可讀性、可擴(kuò)展性、編碼規(guī)范等問(wèn)題,對(duì)項(xiàng)目整體架構(gòu)的把握也較少。
他們產(chǎn)出的代碼維護(hù)難度較高,甚至幾個(gè)月后自己都難以理解。當(dāng)需求變更時(shí),他們會(huì)抱怨需求變化,卻很少反思自己的代碼問(wèn)題,導(dǎo)致項(xiàng)目維護(hù)成本不斷增加。
5. 架構(gòu)型程序員:追求優(yōu)雅,注重可持續(xù)發(fā)展
這類程序員比實(shí)現(xiàn)型更進(jìn)一步,他們擁有豐富的經(jīng)驗(yàn),對(duì)相關(guān)框架和工具等都很熟悉,對(duì)代碼的質(zhì)量和架構(gòu)有著更高的追求。
他們不僅關(guān)注“完成功能”和“穩(wěn)定性”,更注重代碼的優(yōu)雅、可讀性和可擴(kuò)展性。
盡管架構(gòu)型程序員在“實(shí)現(xiàn)功能”階段的速度可能不如實(shí)現(xiàn)型程序員快,但他們?cè)陧?xiàng)目中后期會(huì)展現(xiàn)出巨大的優(yōu)勢(shì)。
他們能夠構(gòu)建出更合理、更可維護(hù)的系統(tǒng),為項(xiàng)目的長(zhǎng)期發(fā)展奠定堅(jiān)實(shí)的基礎(chǔ)。
從代碼搬運(yùn)工到架構(gòu)師,這條道路并不平坦,需要不斷的學(xué)習(xí)和積累。
希望每個(gè)程序員都能找到自己的方向,不斷提升自己的技能,最終成為一名優(yōu)秀的軟件開(kāi)發(fā)者。