太難了!讓程序員崩潰的八個(gè)瞬間
程序員真是一個(gè)看起來(lái)挺牛逼,實(shí)際上又挺悲催的職業(yè)。
雖然說(shuō)用代碼創(chuàng)造世界是一件很爽的事情,但很多時(shí)候可能某個(gè)瞬間就會(huì)被整破防,情緒一激動(dòng)一上頭來(lái)那可是啥事都干得出來(lái)!
最近做需求比較煩躁,時(shí)常讓我感覺(jué)到崩潰。有時(shí)候不僅app crash了,人也崩潰了。于是乎總結(jié)了一下讓程序員 crash 的 8 個(gè)瞬間。
一、當(dāng)產(chǎn)品變更需求時(shí)
作為開(kāi)發(fā)的死對(duì)頭,產(chǎn)品經(jīng)理的存在一定是為了不讓程序員好過(guò)才被設(shè)立出來(lái)的吧。
就像是為了防止物種入侵一樣,產(chǎn)品的存在就是制約程序員過(guò)度繁殖,從而導(dǎo)致生態(tài)毀滅。
而產(chǎn)品的有效武器大概就是通過(guò)不斷地修改需求,來(lái)達(dá)到控制程序員數(shù)量的目的。
當(dāng)產(chǎn)品經(jīng)理在需求群里 at 某個(gè)程序員的時(shí)候,大概率是沒(méi)好事的。所以在產(chǎn)品經(jīng)理開(kāi)始 at 你,讓你修改需求時(shí),大概是想打人的心都有了吧。
然而最可怕的是,當(dāng)你辛辛苦苦百度谷歌了幾天,用了一系列非常極客的技術(shù)來(lái)實(shí)現(xiàn)了某個(gè)功能,最后產(chǎn)品在群里一句話(huà), 「這個(gè)先不做了吧」 直接讓人破防。
不僅如此,某些產(chǎn)品還會(huì)在發(fā)版日或者發(fā)車(chē)日變更需求,明明你已經(jīng)開(kāi)開(kāi)心心地準(zhǔn)備合碼下班了。
然后他告訴你把哪兒再改下,直接讓人整不會(huì)了。
二、當(dāng)編譯環(huán)境又崩了
可能很多人不知道,許多公司都有著一群基礎(chǔ)技術(shù)部門(mén)的存在。這些部門(mén)的人從來(lái)不干業(yè)務(wù)的事,但專(zhuān)門(mén)給業(yè)務(wù)部門(mén)搞事。
基礎(chǔ)技術(shù)部門(mén)一般會(huì)負(fù)責(zé)開(kāi)發(fā)平臺(tái)的搭建,效率工具研發(fā)或者開(kāi)發(fā)流程準(zhǔn)入和把控之類(lèi)的事情。
有時(shí)候,本地編譯好好的,但是在遠(yuǎn)端就是編譯不過(guò);又或者明明編譯過(guò)了,但是由于各種未周知的規(guī)則卡口,導(dǎo)致合碼流程被 block 等情況發(fā)生。
特別是當(dāng)你滿(mǎn)懷期待地覺(jué)得成功解決了一個(gè) bug,但是看著 pipeline 上滿(mǎn)是紅叉❌和感嘆號(hào),瞬間一股子惱火就上來(lái)了。
三、當(dāng)線(xiàn)上出現(xiàn)穩(wěn)定性問(wèn)題
對(duì)于月活日活較大的軟件來(lái)說(shuō),線(xiàn)上的穩(wěn)定性問(wèn)題分分鐘能夠讓人崩潰,到時(shí)候不只是軟件崩潰了,人也崩潰了。
穩(wěn)定性問(wèn)題算是很?chē)?yán)重的事故,比如服務(wù)端下發(fā)字段的變更導(dǎo)致客戶(hù)端大規(guī)模 crash,或者服務(wù)端 oom 使得上下游服務(wù)全部宕機(jī)。這些一出現(xiàn)基本上都與事故報(bào)告掛鉤。
所以當(dāng)程序員在摸魚(yú)劃水的時(shí)候,突然線(xiàn)上激增異常報(bào)警,那絕對(duì)是讓人痛不欲生的一瞬間了。
四、debug 時(shí)死活走不進(jìn)斷點(diǎn)位置
我們知道,找 bug 時(shí)設(shè)置斷點(diǎn)是非常穩(wěn)健且有效的方式。但是很多時(shí)候,斷點(diǎn)并不是我們以為的就能夠走到。
有些項(xiàng)目可能通過(guò)直接鏈接二進(jìn)制文件來(lái)加快編譯速度,所以程序在運(yùn)行時(shí)可能并不是編譯你打斷點(diǎn)所在的代碼,這就導(dǎo)致你以為斷點(diǎn)達(dá)到了,實(shí)際上根本走不到。
而還有些情況,由于 IDE 本身處于某些未知狀態(tài),使得程序在運(yùn)行時(shí)也是沒(méi)辦法斷點(diǎn),這也是非常讓人惱怒的時(shí)候。
五、一看就懂的 bug,但就是修不好
不知道大家有沒(méi)有經(jīng)歷過(guò),有些 bug 一看你就明白是哪兒出了什么問(wèn)題。但是等到自己去修復(fù)的時(shí)候,就是死活修不好。
看起來(lái)很簡(jiǎn)單,但是改起來(lái)還有可能是修了 1 個(gè) bug,但又引入了 10 個(gè) bug。
六、當(dāng)看到很久都沒(méi)維護(hù)的代碼時(shí)
老有人說(shuō)其實(shí)大公司大項(xiàng)目的代碼都是屎山,不僅沒(méi)有注釋?zhuān)€各種亂依賴(lài)亂調(diào)用。我一直都不信,直到我也進(jìn)了大廠(chǎng)。
不過(guò)說(shuō)起來(lái)這倒是很容易理解的現(xiàn)象,畢竟大公司一起寫(xiě)代碼的人太多了,很難要求別人按照統(tǒng)一的規(guī)范來(lái)開(kāi)發(fā)。
經(jīng)常是你自己寫(xiě)了幾段代碼后,一段時(shí)間沒(méi)有維護(hù),過(guò)了一陣子再回來(lái)看,已經(jīng)慘不忍睹了。
當(dāng)代碼成為屎山的時(shí)候,只要是寫(xiě)過(guò)一行代碼,就不是無(wú)辜的。
七、當(dāng)有人直接在 master 分支各種操作時(shí)
master 分支是許多程序員可望不可及的存在,因?yàn)闆](méi)人敢輕易(并且也沒(méi)權(quán)限)直接 push 到 master 分支,甚至直接在 master 分支上做各種操作。
因?yàn)?master 分支直接影響的是整個(gè)項(xiàng)目,一旦出了問(wèn)題可能會(huì)導(dǎo)致整個(gè)團(tuán)隊(duì)開(kāi)發(fā)效率的降低。
而特別是當(dāng)你正在著急修復(fù)一個(gè)線(xiàn)上 bug,但是被告知 master 被人改壞的時(shí)候,那個(gè)瞬間簡(jiǎn)直令人抓狂。
八、當(dāng)項(xiàng)目排期倒排時(shí)
一般大公司很喜歡按流程說(shuō)話(huà),也就是做需求做項(xiàng)目,都是按人力按工作量進(jìn)行排期,排多少天就做多少天。
而當(dāng)聽(tīng)到某些產(chǎn)品要求對(duì)需求倒排的時(shí)候,程序員們的第一反應(yīng)都是很反感。
因?yàn)樵趯?shí)際開(kāi)發(fā)的過(guò)程中,可能會(huì)遇到這種未知的問(wèn)題,很難通過(guò)前期的調(diào)研來(lái)充分保證開(kāi)發(fā)的進(jìn)度。
所以一旦項(xiàng)目需要倒排,最終的結(jié)果可能大多數(shù)開(kāi)發(fā)質(zhì)量不過(guò)關(guān),或者就是要開(kāi)始構(gòu)建屎山了。