回答
我認爲答案是最平庸的程序員通常不會做的:閱讀其他人的代碼並從中學習,分析它的優點和缺點,並且將自己的編程技巧整合到你看到的有趣內容中。 許多已經發明的好技術,將增強您的編碼技能,併爲您節省大量時間。
在開源項目中有許多高質量的代碼用於研究。
試錯法是瞭解您自己的設計如何改進的最佳方法。總是尋找更好的解決方案。你犯了什麼錯誤?哪一部分比需要的靈活性要差?是什麼讓你必須破解你所做的設計決定?
想想設計的含義,而不是純粹的靈活性和優雅。爲了使這個可重用,你做了什麼權衡?你是否遵循seperation of concerns和single responsibility principle? Open closed principle?你知道這些是什麼以及它們的含義嗎?
還研究設計模式形式的專家的工作。
讀Design Patterns Explained by Shalloway,讀Head first design patterns
但是請記住,這些都不是靈丹妙藥解決方案,並採取一切用少許鹽。使用你自己的創意和保持PRAGMATIC。
我認爲這一切都歸結於經驗。能夠閱讀一套要求並將其轉化爲一個好的,乾淨的,可維護的軟件設計是編程中最難的事情之一(imho),並且你不會僅僅通過閱讀一本書就能學會。這是關於嘗試,犯錯誤,從錯誤中學習,以及瞭解過去設計或未設計的設計。
對我來說,通常有助於我真正花時間在UML中創建一個好的設計,例如類圖。它經常幫助我識別可以在整個軟件應用程序中重用的組件,並可以使用某種設計模式等。
幾本書,我可以推薦:Software Architecture in Practice,這是關於軟件架構很好的一本書,並通過Design Patterns四人幫,這是你可以使用任何設計模式有很大的參考。
我不相信有任何經驗和才能的替代品,我從來沒有讀過一本關於軟件設計的書,我可以從的教學設計中推薦,儘管已經閱讀了很多。有些人擅長,在獲得經驗的時候會變得更好,有些人不會,也從來沒有學過。傷心,但是真的。
我認爲通過查看一些可用的優秀開源項目的設計。閱讀代碼並查看開源項目的設計是學習設計的最佳方式。
不要說「試錯」,我們可以說「迭代」。
無論你在設計什麼,只要知道你沒有完整的知識,就用最好的信息給你。那麼你無疑會遇到一個令事情複雜化的無法預料的問題。這是當你不得不問自己出了什麼問題以及採取什麼不同的做法時。然後回頭重新設計/重新實現你的新理解。重複。總是第二次猜測你的設計,並尋找更好的解決方案。例如,「Firefox如何實現查找?哦,我看,他們不使用彈出窗口,而且它更乾淨。」
通過接受你會犯錯誤並願意解決的事實,你已經領先一步。
隨着您獲得經驗,您的迭代將會變得更長,並且偶爾您會第一次做對 - 毫無疑問,因爲您可以預見過去的錯誤和解決方案。
就書本而言,如果我沒有記錯的話,「史蒂夫的腦子裏面」講述瞭如何迭代是蘋果公司發展的內在因素。
我同意迄今爲止最多的建議,他們都是有效的 - 閱讀代碼,看書,嘗試東西。
在我看到最大收穫的情況下,無論是個人還是團隊成員都是雙重攻擊: 1.讓他們離開他們的舒適區 - 即陌生的領域或語言,拿走柺杖。 2.可能更重要的是,將他們與已經有經驗的人配對。
輔導有很多提供,你可以自己到達那裏,但一個良好的導師可以爲你節省年的痛苦。
當然,經驗是正確的答案。但除此之外,我認爲在你自己的語境中理解模式有一些需要說明的地方:當你構建你的應用程序時,做出對你來說務實的設計決定。換句話說,不要這樣做,因爲這是'最佳實踐',或者是因爲一個更有經驗的程序員告訴你的。做他們,因爲你瞭解爲什麼,它可以幫助你(或其他程序員)與代碼工作,並更好地理解它。我發現在數據庫設計等方面也是如此。從直觀的維護角度來看,做什麼是有意義的。如果你真的認真思考過(或者從各種陷阱中學習),你會發現自動進行某種「模式」或練習而不積極嘗試。
當然,我不建議任何人在真空中工作;當然,他們並不積極追求和整合設計模式。我只是認爲,在你自己的背景下(並且出於具體的,實際的原因)理解它們是幫助大多數人將事物去神祕化的原因。無論如何,這是我的經驗。閱讀書籍對我來說總是感覺像學習一樣。好幫助的東西,但旁邊的小土豆進入斜坡。想想你的決定,並能夠爲他們辯護。始終以更好的方式開放。
- 1. 如何提高我的軟件分析和UML技能
- 2. 數據庫架構設計 - 提高存檔能力的技巧?
- 3. 提高Visual Studio 2008 ASP.NET設計器性能的技巧?
- 4. 如何提高我的中間件開發技能?
- 5. Java中軟件包的高階技巧
- 6. 網頁設計師技能
- 7. CSS指南爲提高技能
- 8. Reversi軟件設計
- 9. Python軟件設計
- 10. 如何驗證軟件設計?
- 11. 如何在支持項目中工作時提高技術技能
- 12. 我們如何才能提高編程技巧?
- 13. 如何提高我在網站開發方面的技能?
- 14. 如何判斷他應該提高自己的技能?
- 15. 如何提高自己的bash /命令行技能?
- 16. 我應該學會如何提高Java技能?
- 17. 軟件項目中的軟件設計
- 18. 如何爲沒有強大CSS技能的工程師提高CSS/HTML原型設計的速度?
- 19. 如何用計時器提高事件?
- 20. 提高基於熔絲的文件系統性能的技巧
- 21. Objective-C - RPG技能設計模式
- 22. 客戶技能數據庫設計
- 23. 如何提高django軟刪除的性能?
- 24. 如何成爲技術設計專家
- 25. 軟件公司如何提供高質量的軟件/贏項目?
- 26. 自動機設計軟件
- 27. 軟件設計策略
- 28. Rails Schema設計軟件?
- 29. 模塊化軟件設計
- 30. 設計防火牆軟件
我會說嘗試和錯誤將是改善您的設計最糟糕的技術。通常在不用打字的情況下花幾天時間就可以節省很多精力,並且產生更好的設計,這對於項目的成功來說是非常有利的。 – piotr 2009-04-28 09:12:57