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