工程師應(yīng)該放心大膽地創(chuàng)造技術(shù)負(fù)債
身為軟體工程師,你應(yīng)該要盡量寫出無法維護(hù)的程式碼,而且絕對不寫測試。
你應(yīng)該要知道:在績效管理下,你愈是認(rèn)真負(fù)責(zé),愈是做到符合專業(yè)倫理的要求,你反而看起來績效愈差。而你大概會有 87% 的比例,會遇到這種績效管理。
舉個例子,假如你是警察,你決定要認(rèn)真抓小偷,於是上個月在你的管區(qū)破獲了五十起竊盜案,這個月因為你的努力,破獲的案件增長到一百件 — 這代表什麼呢?這代表看起來你的管區(qū)治安變差了,而你應(yīng)該要為治安變差負(fù)責(zé),你才是應(yīng)該被檢討的對象。於是你知道,警察好像應(yīng)該要想辦法破案,但實際上,你的績效並不是來自破案,而是吃案。
如果你花了半年時間,抽絲剝繭理清了複雜的商業(yè)邏輯,建立了清爽明確的抽象層,並且預(yù)先額外設(shè)想了其他的使用情境,最後開發(fā)了一套易於擴(kuò)充的軟體架構(gòu),讓一個大學(xué)剛畢業(yè)的新人,都可以在你的架構(gòu)上不到一個星期就可以開發(fā)出新功能。這代表什麼呢?這代表你的績效很差 — 你的管理者只會看到,你花了半年才做了一件事清,一個新人剛來,卻只需要花上一個星期就可以完成一件事,那還要你來做什麼呢?
至於可以輕鬆開發(fā)出新功能的新人,他會怎麼看呢?可以這麼快開發(fā)出新功能,當(dāng)然是因為他自己的功能??!跟你有什麼關(guān)係呢?真的要了解你到底做了什麼,其實只有一個辦法,就是要閱讀你的程式碼,但,放心好了,不會有人會去讀的。
你要做的事情就是:管理者設(shè)定了什麼績效,你就想辦法達(dá)成什麼績效。如果管理者設(shè)定的指標(biāo)是你修好了多少 bug,那麼你就要想辦法一開始就在你的程式中製造許多 bug,免得日後需要修 bug 的時候沒有 bug 可以修。如果管理者的目標(biāo)是加速開發(fā),你就應(yīng)該要不計後果加速開發(fā)新功能,明知道是加速邁向毀滅,你也要加速開發(fā)。
事實上,身為軟體工程師,你也根本不用考慮後續(xù)維護(hù)的問題。如果你在一家公司寫了一大堆完全不考慮耦合關(guān)係、程式邏輯糾纏不清、命名混亂、使用大量 anti-pattern、到處都是怪氣味、效能極差而且宛若天書的程式碼,而你開始為了繼續(xù)維護(hù)這樣的技術(shù)負(fù)債感到痛苦的時候,其實只代表一件事情:你已經(jīng)在這家公司獃得太久,而且還沒有升上去當(dāng)主管。
這個時候你就會知道加速開發(fā)的好。你完成了這麼多項功能,於是在你想要換工作得時候,你可以寫出洋洋灑灑的履歷表 — 反之,你會把你寫了幾條單元測試、達(dá)成多高的覆蓋率這種數(shù)字放進(jìn)履歷表裡頭嗎?把力氣放在測試這種無助於發(fā)展事業(yè)的事情上,完全就是在浪費(fèi)你的時間。
你也同時應(yīng)該感謝 — 不曉得是誰想出來軟體產(chǎn)業(yè)園區(qū)這種德政,原本製造業(yè)的產(chǎn)業(yè)園區(qū)是讓上中下游供應(yīng)鏈可以集中在一起,降低運(yùn)輸成本,但軟體這一行又沒有供應(yīng)鏈這種事情,成立園區(qū)只是讓相互競爭的軟體公司其中在一起,唯一降低的就是人員流動的成本,換工作都不用搬家。多好啊你看。
如果你有機(jī)會高升,開始擔(dān)任主管(你績效這麼好,怎麼可以不選你當(dāng)主管呢?),你就會知道,當(dāng)初寫下的那些無法維護(hù)的 legacy code,其實更有助於你擔(dān)任主管的管理工作。
擔(dān)任主管最重要的工作,不是別的,就是一邊把持住自己的位子一邊想辦法繼續(xù)往上爬,所以主管絕對不可以讓部屬表現(xiàn)得比自己更優(yōu)秀,而你當(dāng)初寫的程式碼,就是部屬事業(yè)道路上最好的絆腳石。你除了可以一邊抱怨為什麼新功能開發(fā)愈來愈慢,一邊說嘴當(dāng)年你只花了多短的時間就寫了多少程式碼,果然只有你有資格擔(dān)任大家的主管。
而到了這個時候,你還會發(fā)現(xiàn),程式碼到底是什麼品質(zhì),已經(jīng)跟你的績效無關(guān)了。怎樣盡可能的接觸老闆,參與更多會議,讓老闆三不五時看到你,才是你現(xiàn)在的績效。
當(dāng)然,總有一天技術(shù)負(fù)債會大到你的部門什麼東西都做不出來,你的公司什麼服務(wù)都拿不出來賣,但是這一點(diǎn)都不會影響你找新工作,你瞧,現(xiàn)在,你的履歷表上面,可寫著你當(dāng)過主管呢!拿著這份履歷表,你更有機(jī)會去別的地方,空降擔(dān)任更高階的主管。
技術(shù)負(fù)債從來就不是什麼問題。誰說你製造了技術(shù)負(fù)債之後,你就得要自己還債?怎樣欠債不還,才是工程師最偉大的藝術(shù)。
在你的人生中,你不需要要為其他人而活,也不是為了程式碼這種死物而活,你真正應(yīng)該要負(fù)責(zé)的對象只有你自己;而你知道人是經(jīng)濟(jì)而自私的動物,既然你的本性就是貪婪,你就應(yīng)該成就貪婪。管理者想要這種工程師文化,你就提供這種工程師文化。
你要捨棄專業(yè)才能成就事業(yè),你應(yīng)該要把握當(dāng)下的績效,而不要為了可能不存在的悲劇結(jié)果恓恓惶惶,你每天都應(yīng)該充滿正能量,還有什麼可以比利己主義帶來更多正能量?凱因斯不就曾經(jīng)說過:「In the long run, we are all dead」?
身為軟體工程師,你應(yīng)該放心大膽地創(chuàng)造技術(shù)負(fù)債。這麼做唯一的風(fēng)險,就只有在你換工作的時候,也會接手一大筆前人留下來的技術(shù)負(fù)債。不過,這種事情反正也早就已經(jīng)發(fā)生了。
工程師應(yīng)該放心大膽地創(chuàng)造技術(shù)負(fù)債的評論 (共 條)
