因試用期遭勸退,一男子為發(fā)泄情緒刪光自己在職期間所寫(xiě)系統(tǒng)代碼被判刑十個(gè)月,如何看待這一審判結(jié)果?
通過(guò)刪庫(kù)來(lái)發(fā)泄情緒的程序員是最蠢的。
聰明的程序員會(huì)寫(xiě)一堆只有自己看得懂的屎山,并且伴隨著偶發(fā)且不可復(fù)現(xiàn)的重大bug。
一旦離職,屎山將變得不可維護(hù)。
然后你不但不需要自己刪庫(kù),老板還需要花額外的錢(qián)請(qǐng)其他程序員來(lái)刪掉你的代碼。
屎山包括但不限于以下行為:
使用大量while語(yǔ)句和條件判斷,并在之間加塞大量自定義函數(shù)和實(shí)例化以及遞歸結(jié)構(gòu)。并把函數(shù)暴露在其他人可以靈活修改的位置,只要一個(gè)參數(shù)變化就會(huì)導(dǎo)致函數(shù)返回出錯(cuò),卡死在while循環(huán)。而debug通常需要幾千個(gè)循環(huán)之后才能發(fā)現(xiàn),極大的延緩了bug被修復(fù)的時(shí)間。
函數(shù)套函數(shù)形成千層夾心,讓思路亂做一團(tuán),很難理順?biāo)伎肌?/p>
繼承套繼承,亂用面相對(duì)象,當(dāng)接盤(pán)俠看懂了這個(gè)類,卻發(fā)現(xiàn)這個(gè)子類繼承了多個(gè)父類,還有接口沖突。而當(dāng)他們想看看父類的時(shí)候,卻看到這幾個(gè)父類又繼承了幾個(gè)父類。
DFS搜索了一遍父類,想找到某個(gè)方法和屬性。方法父類和祖父類都被架空了,于是找到了曾祖父類,結(jié)果發(fā)現(xiàn)這個(gè)方法包了一個(gè)buildin type的buildin 方法,且只有一行return。屬性父類和祖父類都沒(méi)有定義,結(jié)果找到了曾曾曾祖父類,終于發(fā)現(xiàn)了,這個(gè)屬性的值是null。
靈活修改內(nèi)置函數(shù),類,屬性,原本想用內(nèi)置功能,卻發(fā)現(xiàn)要用了一個(gè)帶bug的自定義內(nèi)容,后續(xù)的代碼還有大量功能是基于這個(gè)披著內(nèi)置函數(shù)的名字的自定義bug運(yùn)行的。
隨意起名,并和全局變量保持一致,不經(jīng)意間就修改了全局變量。
catch所有的exception,讓bug被巧妙隱藏。
使用復(fù)雜多線程多進(jìn)程服務(wù),并伴隨著隨機(jī)函數(shù)和等待時(shí)間,讓bug很難出現(xiàn)。
大量使用外部api請(qǐng)求,并寫(xiě)死提取方法,一旦對(duì)方api修改,立刻出bug。
在數(shù)據(jù)庫(kù)交互函數(shù)上靈活實(shí)現(xiàn),讓使用者可以傳入任何值,修改數(shù)據(jù)庫(kù)的任何內(nèi)容,甚至只要傳錯(cuò)一個(gè)參數(shù)就可以刪掉數(shù)據(jù)。
一定不要寫(xiě),單元測(cè)試,也不要寫(xiě)document,把你的所有的時(shí)間用在老板能看得到的功能實(shí)現(xiàn)上,而且一定要用最復(fù)雜,最fancy的實(shí)現(xiàn)方式。面對(duì)老板不切實(shí)際的需求來(lái)者不拒,只要讓老板在看到功能時(shí)候保持運(yùn)行狀態(tài)即可。
實(shí)現(xiàn)的論文一定要用最冷門(mén)的巨巨技術(shù),冷門(mén)意味著沒(méi)幾個(gè)人會(huì)甚至連業(yè)內(nèi)人員都沒(méi)學(xué)過(guò),巨巨意味著難難到只有苦心鉆研黑科技的你才能把抄來(lái)的代碼勉強(qiáng)跑起來(lái)。
一定要拉上業(yè)界最頂級(jí)的框架,絕不按照項(xiàng)目自定義內(nèi)容,如果一個(gè)頂級(jí)框架不能完成就再加塞一個(gè)頂級(jí)框架,每個(gè)框架只用一點(diǎn)點(diǎn)內(nèi)容,以此來(lái)顯示你超強(qiáng)的學(xué)習(xí)能力和業(yè)務(wù)素質(zhì)。這樣如果有人要接手,他們需要把這些框架全部學(xué)一遍。
并且經(jīng)常使用那些不穩(wěn)定但勉強(qiáng)能用的新版功能,無(wú)視大量warning,如果有就隱藏掉。舊版功能通常難以被新版支持,所以這些框架的版本在你引入項(xiàng)目的瞬間就被定死了。
然后為了保險(xiǎn)起見(jiàn)你不要升級(jí)框架,一定要用最老的框架,這樣一個(gè)畢業(yè)生誤以為學(xué)會(huì)了框架內(nèi)容結(jié)果卻發(fā)現(xiàn)自己學(xué)的框架太新了,還得把舊版本的內(nèi)容學(xué)一遍。
經(jīng)常使用開(kāi)源bug書(shū)寫(xiě)程序,這樣一旦開(kāi)源庫(kù)修復(fù)bug,你的代碼就需要重寫(xiě)。
如果寫(xiě)http請(qǐng)求,請(qǐng)一定把最危險(xiǎn)的功能設(shè)置成get方法,這樣只要在聊天時(shí)對(duì)方點(diǎn)誤點(diǎn)了連接,瀏覽器就會(huì)自動(dòng)把危險(xiǎn)的請(qǐng)求傳給后端,然后造成大量業(yè)務(wù)崩潰。但這不是你的錯(cuò),是他們不應(yīng)該在聊天和郵件里亂點(diǎn)鏈接!
一旦你離職,你所寫(xiě)的所有代碼和同事的代碼都會(huì)隨著開(kāi)源版本更新,新功能增加,外部api變化,新同事不小心傳錯(cuò)參數(shù),以及點(diǎn)錯(cuò)超鏈接造成大業(yè)務(wù)壞死。
讓fancy的地方盡可能簡(jiǎn)陋,讓簡(jiǎn)陋的地方盡可能fancy。就能在滿足其要求的情況下,引入大量bug和feature的混合物,讓改動(dòng)變得左右為難。
這就讓接手的程序員陷入如下困境:
刪除代碼重構(gòu),工作量太大
不刪代碼,看不懂源碼
清理bug,功能變得不可用
不清bug,之后會(huì)引發(fā)嚴(yán)重問(wèn)題
維護(hù)代碼,只能用新bug掩蓋舊bug
不維護(hù)代碼,隨著技術(shù)升級(jí),舊代碼會(huì)一點(diǎn)點(diǎn)變成bug
當(dāng)你已經(jīng)掌握這些技巧,并付諸實(shí)踐,想必公司一定得讓你晉升主管。
為了清理這些垃圾需要耗費(fèi)成倍于你的人月方可完成刪除,然后為了實(shí)現(xiàn)你的功能他們又需要額外的人月
清理屎山可不止恢復(fù)數(shù)據(jù)那點(diǎn)錢(qián)。