新聞中心
這并不是該年輕開發(fā)者的***工作經(jīng)歷。但是他的***個項目已經(jīng)被證明是有問題的。當(dāng)時,他認為功能從來不會改變。但是他錯了,每次修改功能都需要一次徹底的重構(gòu),引發(fā)了bug以及大量時間的浪費。他甚至嘗試過編寫測試之類的、有效的方式。不過他的測試需要維護、編寫所需時間、甚至更多執(zhí)行的時間。

對于每個年輕的開發(fā)者,他在成長過程中總是聽到有經(jīng)驗的開發(fā)者說到的“當(dāng)心!過早優(yōu)化是萬惡之源!”、“編寫測試!測試!測試!”。或許他只是在重構(gòu)一個微小的實用程序方法,而這時有經(jīng)驗的開發(fā)者將走過來、以嚴厲的表情警告說“你沒有做過早優(yōu)化,對吧?”、或“你在寫測試,是嗎?”。
但是所有這些警告都被忽視了。因為年輕開發(fā)者不理解過早優(yōu)化為什么是萬惡之源、也不理解測試應(yīng)該是正確的。根據(jù)他自己的經(jīng)驗,他知道下面的需求從長期看是不合理的(因為它們可能有修改),編寫測試就是在浪費時間。
“我究竟為什么每次都必須重寫我的代碼?我究竟為什么必須在當(dāng)下編寫代碼、隨后再重構(gòu),我什么時候能夠編寫世界上***的代碼?還有,我究竟為什么不得不用我所有的時間來編寫沒用的測試?”這就是年輕開發(fā)者的疑惑。
一天,年輕開發(fā)者開始著手一個新項目。他決定無視有經(jīng)驗開發(fā)者的警告;為了應(yīng)對每次需求變化,他期望每塊代碼是快速的、可配置的和健壯的。需求清晰了,不過他要做得更好。比如,當(dāng)有個功能,生成以大寫‘S’結(jié)尾的產(chǎn)品代碼時,他創(chuàng)建一個配置對象,這樣結(jié)尾的字母就可以通過配置來修改,通過配置還可以決定這個字母應(yīng)該是大寫還是小寫。當(dāng)需求說明需要一些校驗時,他就創(chuàng)建一個龐大的校驗器,不僅包含需求要求的,還有很多沒要求的。
在編寫了項目的核心之后,一種***的感覺充滿了年輕開發(fā)者的全身。“那個有經(jīng)驗的開發(fā)者是錯誤的!”年輕開發(fā)者看著自己的杰作得意地說。他夜以繼日地工作,認為數(shù)周后就可以發(fā)布產(chǎn)品了。
光陰荏苒……
一天,客戶告知他們一個bug。有經(jīng)驗的開發(fā)者看到這個bug,對顯示器上出現(xiàn)的情況保留著厭惡:年輕開發(fā)者看到了大教堂,而有經(jīng)驗開發(fā)者看到的是貧民窟;年輕開發(fā)者看到了模式,而有經(jīng)驗開發(fā)者看到的是一個充斥著class的復(fù)雜網(wǎng)絡(luò);年輕開發(fā)者看到了比光速還快的代碼,而有經(jīng)驗開發(fā)者看到的是不必要的復(fù)雜算法。他不想碰這些代碼,因此他讓這個年輕的開發(fā)者去修復(fù)自己的bug。
其他人不認為年輕開發(fā)者的代碼是優(yōu)美的,只有這個想法讓他感到失望。他充滿憤怒地打開了項目……才發(fā)現(xiàn)代碼對于他來說,也是費解的!代碼背后沒有清晰的意義?!斑@就是我不打算再使用這門語言的原因,語法太糟糕了”,往往是年輕開發(fā)者的***反應(yīng)。但是他在內(nèi)心深處知道,這不是真正的問題。真正的問題是他。
一天結(jié)束的時候,bug修復(fù)好了,卻產(chǎn)生了另一個bug,這是那一天之后發(fā)現(xiàn)的。每次修復(fù)都在影響著項目內(nèi)部的瘦弱的平衡,就像亮白色衣服上的一小塊黑色補丁。
此時這個年輕的開發(fā)者絕望了,他的大教堂開始搖晃,他感到離崩塌不遠了。年輕開發(fā)者自問,“或許我不是這份工作的合適人選。為什么我不能編寫恰當(dāng)?shù)拇a呢?”帶著沮喪和憤怒的交織心情,年輕的開發(fā)者打開了有經(jīng)驗開發(fā)者維護的項目。
他看到的代碼讓他感到吃驚:代碼有注釋和測試,易于閱讀。和他最初開始寫的代碼沒有太多區(qū)別,有一些清晰的例外:沒有可擴展的配置,每行代碼都被測試了,每個方法都取著有意義的名字、且簡短(最多10行代碼),只做必要的,每個文件只包含了能夠嚴格做本質(zhì)工作的方法。
在這個憂郁的時刻,有經(jīng)驗開發(fā)者來到了年輕開發(fā)者身邊,和他挨得很近,開始重構(gòu)引起所有bug的代碼。
他們一起工作了數(shù)天,有時候,有經(jīng)驗開發(fā)者寫代碼,而年輕開發(fā)者觀看有經(jīng)驗開發(fā)者如何解決問題;另些場合,年輕開發(fā)者寫代碼,而有經(jīng)驗開發(fā)者在旁邊監(jiān)督。
數(shù)天后,一次新的部署標志著bug已被修復(fù)。引起bug的小部分代碼,現(xiàn)在可以被測試了、易于閱讀了,也很穩(wěn)定。有經(jīng)驗開發(fā)者看著年輕開發(fā)者說:“你現(xiàn)在明白了嗎?”
年輕開發(fā)者點了點頭,他現(xiàn)在明白了。***的關(guān)鍵不是預(yù)測將來,而是編寫容易修改、測試(這樣修改就不會引發(fā)其它bug了)以及只需滿足當(dāng)前需求的代碼。當(dāng)他意識到這一點時,他注意到他正在變化,正在變成差不多有經(jīng)驗的開發(fā)者。
年輕開發(fā)者問,“我們現(xiàn)在能夠重構(gòu)整個項目嗎?”
有經(jīng)驗開發(fā)者干脆地答道,“當(dāng)然不可以!沒有預(yù)算”
年輕開發(fā)者問,“但是,如果其它bug出現(xiàn)了,該怎么辦?”
有經(jīng)驗開發(fā)者答道,“我們將找個自由職業(yè)者(freelancer)來修復(fù)”
然后,這個差不多有經(jīng)驗的開發(fā)者開始編寫優(yōu)秀的代碼,準備學(xué)習(xí)另外的經(jīng)驗。不過這是另外一個故事了。
年輕開發(fā)者的啟示:回頭看看你過去寫的代碼,如果你的代碼看起來還不夠優(yōu)美,不要感到失望。
有經(jīng)驗開發(fā)者的啟示:當(dāng)周圍有年輕開發(fā)者時,你將不得不給他擦屁股。你***的機會就是他將學(xué)習(xí)如何編寫得體的代碼,越快越好。
自由職業(yè)者的啟示:你或許想提高你的報價
英文原文:The Sorrows of Young Developer
譯文: 《年輕開發(fā)者的那些傷心事 》 臘八粥
網(wǎng)站題目:平凡的故事:年輕開發(fā)者的那些傷心事
網(wǎng)站鏈接:http://m.5511xx.com/article/cddscdp.html


咨詢
建站咨詢
