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