程序員最頭疼的七件事
懂點(diǎn)技術(shù),瞎指揮
有人說(shuō)不懂技術(shù)的瞎指揮很可怕,我倒是覺(jué)得懂點(diǎn)技術(shù),然后指手畫(huà)腳更可怕!
有個(gè)國(guó)企的項(xiàng)目,甲方負(fù)責(zé)人李總是個(gè)局里的二把手,不知道什么時(shí)候了解了一點(diǎn)編程的技術(shù), 每次開(kāi)需求會(huì)都是和我們大談如何開(kāi)發(fā)軟件,他的口頭禪就是: 這個(gè)需求,用個(gè)SQL從數(shù)據(jù)庫(kù)一選不就出來(lái)了?!你們?cè)趺吹瞄_(kāi)發(fā)一周?!別想蒙我!
唉,他怎么能考慮到用SQL的like是效率極低的, 數(shù)據(jù)量大了是要崩潰的,我們得建立全文索引,需要用一套基于搜索的解決方案才行。
甲方的技術(shù)實(shí)力看起來(lái)這么“強(qiáng)悍”, 不懂技術(shù)的乙方負(fù)責(zé)人只好和稀泥:我們回去再評(píng)估一下。
懂技術(shù)的程序員在下面大眼瞪小眼。
代碼都寫(xiě)玩完了,需求變了
這一點(diǎn)我不想多說(shuō),相信大家都深有體會(huì)。
雖然敏捷軟件開(kāi)發(fā)的方式對(duì)這個(gè)問(wèn)題有一定的改善,但是無(wú)法根治,尤其是當(dāng)客戶(hù)覺(jué)得這個(gè)東西就是好,一定要實(shí)現(xiàn)的時(shí)候,程序員基本上是無(wú)能為力的。
必須得改! 不想改? 還想不想干了!
任務(wù)時(shí)間估算
我工作了這么多年了,遇到任務(wù)的時(shí)間估算,或者項(xiàng)目的工期估算還是頭疼。
主要有兩方面原因,一個(gè)是內(nèi)因,即軟件固有的復(fù)雜性,軟件工程發(fā)展了這么多年,我們努力地讓系統(tǒng)的各個(gè)模塊獨(dú)立,關(guān)注點(diǎn)分離,高內(nèi)聚,低耦合。
但是還是沒(méi)有辦法像搭積木那樣去開(kāi)發(fā)軟件。很多細(xì)節(jié)糾纏在一起,難以準(zhǔn)確估算。還有一個(gè)很大的風(fēng)險(xiǎn)是:一個(gè)你預(yù)料不到的,很小的問(wèn)題就能把你死死地拖住,讓你耗費(fèi)大量的精力。
另外一個(gè)原因就是外因,人和項(xiàng)目的因素。你把任務(wù)時(shí)間估算得多了,有人會(huì)挑戰(zhàn)你,怎么需要這么長(zhǎng)時(shí)間? 估算的少了,自己就默默加班忍受吧。
如果是項(xiàng)目倒逼工期,那任務(wù)估算就是一個(gè)擺設(shè)了。
到客戶(hù)那兒去演示
為了做好一個(gè)演示,在公司把系統(tǒng)調(diào)試了很多遍,把演示的步驟一步步都準(zhǔn)備好了,到了客戶(hù)那里,可能是手賤點(diǎn)了一個(gè)什么東西,然后,系統(tǒng)崩潰了,演示進(jìn)展不下去了。
經(jīng)歷過(guò)兩次這樣的事情后,每次演示我都變得戰(zhàn)戰(zhàn)兢兢,如履薄冰,不敢越雷池一步,嚴(yán)格按照腳本來(lái)走。
現(xiàn)場(chǎng)演示一個(gè)不成熟的產(chǎn)品確實(shí)是讓人挺崩潰的事情。寫(xiě)到這兒,我不由得想起來(lái)老羅在臺(tái)上滿(mǎn)頭大汗地演示TNT的場(chǎng)面......
寫(xiě)文檔
代碼好不容易寫(xiě)完了,剛剛喘口氣,準(zhǔn)備開(kāi)始下一個(gè)工作,領(lǐng)導(dǎo)說(shuō),把文檔也補(bǔ)一下,接口參數(shù)的含義都寫(xiě)上 ,程序員心里通常都會(huì)不爽,有所抵觸,結(jié)果就是草草地寫(xiě)個(gè)文檔出來(lái)。
為什么這樣呢,因?yàn)閷?shí)現(xiàn)功能的那些代碼才是體現(xiàn)自己價(jià)值的,能夠賺錢(qián)的工作,文檔看起來(lái)只是附加品而已。工作做完了,誰(shuí)愿意多干活呢?再說(shuō)了,工作量估算的時(shí)候把寫(xiě)文檔時(shí)間算進(jìn)去了嗎? 你都不給我時(shí)間,現(xiàn)在還讓我寫(xiě),不是讓我加班嗎?
如果想把工作做得漂漂亮亮,既有優(yōu)雅的代碼,又有完善的文檔,必須得給文檔工作留出時(shí)間才行。
修改遺留多年的代碼
為了實(shí)現(xiàn)一個(gè)新功能,我得修改六七個(gè)文件,其中包括一個(gè)長(zhǎng)達(dá)5000行的JSP,三個(gè)500行的函數(shù),2個(gè)沒(méi)人問(wèn)津的存儲(chǔ)過(guò)程,做這一切的時(shí)候,還得小心翼翼地不能破壞老功能,此中酸爽滋味,不知道別的行業(yè)能否體會(huì)得到?
你說(shuō)這遺留代碼爛吧,但是人家可以工作,你想重寫(xiě)吧,一是沒(méi)有時(shí)間,二是重寫(xiě)了能保證每個(gè)犄角旮旯的業(yè)務(wù)點(diǎn)都覆蓋嗎? 所以只能采用漸進(jìn)重構(gòu)的道路,慢慢地把他改好。
能夠從頭開(kāi)啟一個(gè)新項(xiàng)目的同學(xué),還是挺幸福的,好好珍惜吧。
Bug不可(難以)重現(xiàn)
人世間最痛苦的事就是明明有個(gè)Bug在我的眼前,我卻無(wú)法重現(xiàn)它。
四五年前,我們有個(gè)運(yùn)行良好的應(yīng)用突然出了狀況,一到下午兩點(diǎn)左右就會(huì)毫無(wú)征兆地崩潰,查看了日志,根本沒(méi)有報(bào)任何錯(cuò)誤。在測(cè)試環(huán)境中想盡了一切辦法進(jìn)行模擬,總是無(wú)法重現(xiàn)。
這樣的現(xiàn)象持續(xù)了一個(gè)多月,感覺(jué)就要絕望的時(shí)候發(fā)現(xiàn)了蛛絲馬跡,北京時(shí)間的下午兩點(diǎn),是意大利的早上8點(diǎn),那個(gè)時(shí)候,意大利的用戶(hù)會(huì)登錄系統(tǒng),有些特殊屬性的用戶(hù)做了一個(gè)操作,觸發(fā)了一個(gè)年久失修,普通用戶(hù)根本走不到的代碼分支,導(dǎo)致系統(tǒng)直接退出。
只用一行代碼就Fix了這個(gè)Bug,但是重現(xiàn)的過(guò)程竟然長(zhǎng)達(dá)一個(gè)多月!
【本文為51CTO專(zhuān)欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)】