軟件開發(fā)七宗罪
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
一起來看看世界各地的程序員們所共有的致命通病,從軟件開發(fā)的地獄中拯救自己。這七宗罪你有幾條? 想成為一名優(yōu)秀的軟件開發(fā)人員需要很長時間的培訓(xùn)和實踐。但是如果不遵循合適的原則,即便是再好的程序員也會成為失敗的犧牲品。不經(jīng)意間你就會養(yǎng)成一些可怕的壞習(xí)慣,它們可能會一而再再而三地出現(xiàn),甚至對于經(jīng)驗最為豐富的程序員而言也是如此。我認(rèn)為軟件開發(fā)至少存在七宗罪。那么,就請看看欲望、暴食、貪婪、懶惰、憤怒、嫉妒和驕傲?xí)槟愕淖钚戮幊添椖繋砟男┮庀氩坏降膿p失吧。 軟件開發(fā)七宗罪,你有幾條? 軟件開發(fā)第一宗罪:欲望(過度設(shè)計) 現(xiàn)代編程語言趨向于不斷增加更新的功能讓其臻于成熟。程序員們一層一層地往上堆疊抽象的代碼,用新設(shè)計的關(guān)鍵字和結(jié)構(gòu)來增加代碼的可讀性和可重用性——只要你肯花時間去學(xué)習(xí)如何正確地使用它們。 與此同時,編程的原則在這些年里有所改變。今天,你可以飽覽到成千上萬的設(shè)計方案和模式,而且每幾個月就會有人想出新的開發(fā)方案。此外,開發(fā)人員總是信誓旦旦地宣稱這些開發(fā)方案會讓你成為程序員中們眼中的佼佼者。 但是紙上談兵往往不見得在實際操作中奏效,這個道理很簡單,打個比方來說就是你可以去做某些事情但是并不意味著你應(yīng)該去這么做。就像編程大師Joel Spolsky所說的,那些盲目迷戀自己工具的程序員們都不可避免地忽略了這一點,甚至于最簡單的項目也可能葬送進(jìn)開發(fā)的地獄。所以,必須抵制這種不可取的沖動,那么首先要做到的就是堅持你最初的設(shè)計方案。 軟件開發(fā)第二宗罪:暴食(不進(jìn)行重構(gòu)) 沒有比開發(fā)軟件更令人可喜的事情了。一旦你有一個正在開發(fā)的產(chǎn)品,就會很容易受到開始籌劃下一次迭代的引誘。新產(chǎn)品應(yīng)該具備什么樣的新特征呢?我們在第一輪實施的時候沒有注意到哪些問題? 人們總是很容易忘記代碼很少能在運行的時候保持最佳狀態(tài)。然后,當(dāng)新功能不斷地累積直至幾個輪回的發(fā)展之后,程序員們往往會傾向于復(fù)合過去發(fā)生的錯誤,這樣就導(dǎo)致了一個臃腫、脆弱的代碼基礎(chǔ),難以進(jìn)行有效地維持。 所以,在添加新功能之前盡量克制自己,對現(xiàn)有代碼的質(zhì)量和可維護(hù)性進(jìn)行評估。對于每一次新一輪的開發(fā),都必須將代碼重構(gòu)列入預(yù)算范圍之內(nèi)。用戶可能只會關(guān)心每一個版本的新功能,但是從長遠(yuǎn)來看,他們一定會更希望你保持產(chǎn)品的精煉性。 軟件開發(fā)第三宗罪:貪婪(團(tuán)隊之間的競爭) 對于財富和權(quán)利的過度欲望——要不然如何解釋程序員與自己同僚之間競爭的動機?當(dāng)一個團(tuán)隊得到了其他團(tuán)隊泄露出來的電子郵件,就開始進(jìn)行閉門會議和開發(fā)。接下來的事情你應(yīng)該知道,這個團(tuán)隊編寫了一個代碼庫,它已經(jīng)超越了其他團(tuán)隊已經(jīng)完成的編碼庫功能的一半以上。 開發(fā)團(tuán)隊很少會出于惡意來進(jìn)行重復(fù)的工作,但是他們往往缺乏明確的目標(biāo)和責(zé)任感。得到的結(jié)果則是多余、無力的代碼庫,更不要說預(yù)算的損失和之前付之一炬的努力。經(jīng)營開發(fā)項目的首要任務(wù)之一應(yīng)該是了解其他團(tuán)隊正在做什么,然后所有的團(tuán)隊都朝著一個共同的目標(biāo)去努力。分享與共享應(yīng)該成為開發(fā)人員的座右銘。 軟件開發(fā)第四宗罪:懶惰(不驗證輸入) 基本編程容易犯的錯誤清單很長,但是沒有驗證輸入這樣的錯誤非常低級以至于不能不從別的角度來思考犯這類錯誤的原因。這個看似低級的錯誤仍舊出現(xiàn)在許多經(jīng)驗豐富的程序員編寫的代碼中,這一點十分令人費解。然而,很多普通的安全漏洞,從緩沖區(qū)泛濫成SQL注入攻擊,卻可以直接追溯到用戶輸入的代碼沒有進(jìn)行正確格式驗證這一點。 現(xiàn)代編程語言提供了許多工具來幫助程序員來避免類似情況的發(fā)生,但是他們必須對其使用得當(dāng)。切記,一個JavaScript的Web表單驗證輸入可能很容易被在瀏覽器中禁用的JavaScript回避,或者干脆不使用瀏覽器進(jìn)行訪問。輸入驗證應(yīng)該是你應(yīng)用程序的核心部分,而不是在用戶界面上煞費苦心。如果做不到這一點只能歸咎于程序員的懶惰了。 程序開發(fā)第五宗罪:憤怒(不對你的代碼進(jìn)行注釋) 對于你的同僚而言,有什么行為能比不對你的代碼做出任何注釋這種行為更具敵意?我自己寫的我當(dāng)然知道:精心編寫的代碼是它本身最好的文檔資料。那么,你知道嗎,其他人能看懂嗎?其實這些你自認(rèn)為值得驕傲的代碼可能并非天衣無縫。 程序員們自己很可能很快就會遺忘他們現(xiàn)在所寫的代碼,但是這些代碼將在他們離開以后繼續(xù)存在很長一段時間。對于取代他們的程序員而言,要想搞清楚每一個代碼真正代表什么是一件吃力不討好的工作。鑒于此,在你編寫程序的時候,行行好吧,多給他們留下一些暗示。 但是請記住,難以理解的注釋或者注釋過多都與不做任何注釋的性質(zhì)同樣惡劣。類似于“這已經(jīng)損壞”或者“不要碰這個”的注釋對于任何人都沒有什么幫助。也不要做多余的評論來解釋簡單的操作,比如變量初始化。代碼就是其本身最好的文件材料,所以出現(xiàn)的注釋評論應(yīng)該盡可能解釋原因和本質(zhì)。 軟件開發(fā)第六宗罪:嫉妒(不使用版本控制) 也許你有理由對于你的項目不推行版本控制。也許一開始你的項目很小。但是今天,功能強大并且高效的版本控制系統(tǒng)已經(jīng)可以免費進(jìn)行使用。服務(wù)供應(yīng)商甚至可以對分布式項目提供價格低廉的托管代碼服務(wù)。所以沒有理由不在一開始就使用一個代碼庫,即便是再小的項目也是如此——除非,你無法容忍除了你以外的任何人實施代碼變化。 軟件開發(fā)第七宗罪:驕傲(不進(jìn)行單元測試) 你往往會認(rèn)為自己的編程工作相當(dāng)出色,但是你又如何知道自己做的到底是否唯美無缺呢?有什么指標(biāo)來對你的工作好壞進(jìn)行衡量嗎? 除非你已經(jīng)在特定的測試環(huán)境下對你的代碼進(jìn)行了驗證和測試,否則你就不能證明它能像廣告中說的那樣完美無瑕。但是太多的開發(fā)人員并不對他們的代碼進(jìn)行單元測試。他們聲稱花時間進(jìn)行測試就沒有時間推行新功能了。事實上,一些開發(fā)人員甚至不將質(zhì)量測試寫入他們項目的預(yù)算范圍。 那么我又能說什么呢?只能期待他們在品嘗失敗的滋味之前將這股傲氣拋之腦后。一旦存在缺陷的代碼抵達(dá)客戶手中的時候,再撤銷它們就未免太遲了。在進(jìn)行代碼傳輸之前,進(jìn)行越多的單元測試,就能在今后越多地避免不必要的損失。 原文標(biāo)題: The 7 deadly sins of software development 關(guān)于七宗罪 貪婪,失控的欲望,是七宗罪中的重點。其他的罪惡只是無理欲望的補充。 色欲:肉體的欲望,過度貪求身體上的快樂。 饕餮:貪食的欲望,浪費食物或者過度放縱食欲,過分貪圖逸樂皆為饕餮一罪。 妒忌:財產(chǎn)的欲望,因?qū)Ψ綋碛械馁Y產(chǎn)比自己多而心懷怨恨(此處的資產(chǎn)并非限定于財產(chǎn),更多的指才能、才華) 懶惰:逃避的欲望,懶惰及浪費所造成的損失為懶惰一罪的產(chǎn)物。 傲慢:卓越的欲望,過分自信導(dǎo)致的自我迷戀,以及過分渴求他人的關(guān)注為傲慢。 暴怒:復(fù)仇的欲望,源于心底的暴躁,因憎恨產(chǎn)生的不適當(dāng)邪惡念頭。 七宗罪在拉丁語中為: “superbia”,“invidia”,“ira”,“accidia”,“avaritia”,“gula” and “l(fā)uxuria” 該文章在 2011/3/2 22:53:53 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |