回答
我认为答案是最平庸的程序员通常不会做的:阅读其他人的代码并从中学习,分析它的优点和缺点,并且将自己的编程技巧整合到你看到的有趣内容中。 许多已经发明的好技术,将增强您的编码技能,并为您节省大量时间。
在开源项目中有许多高质量的代码用于研究。
试错法是了解您自己的设计如何改进的最佳方法。总是寻找更好的解决方案。你犯了什么错误?哪一部分比需要的灵活性要差?是什么让你必须破解你所做的设计决定?
想想设计的含义,而不是纯粹的灵活性和优雅。为了使这个可重用,你做了什么权衡?你是否遵循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