建立中文网站的英文,免费网站空间,网站和服务器是什么关系,泰安人才摘要#xff1a;软件开发是个挑战#xff0c;尤其是对于那些完美主义的程序员。为了想要成为更好的程序员#xff0c;总会开发出一些特别的功能#xff0c;在软件设计上想要做到零瑕疵#xff0c;但事实上#xff0c;完美的软件设计是根本不存在的#xff0c;试着让你的…摘要软件开发是个挑战尤其是对于那些完美主义的程序员。为了想要成为更好的程序员总会开发出一些特别的功能在软件设计上想要做到零瑕疵但事实上完美的软件设计是根本不存在的试着让你的软件“足够好”就好
软件开发是个挑战尤其是对于那些完美主义的程序员。他们需要制定大量的决策以及许多问题的解决方案这对于有些人来说会感到很难。当然你可以在线搜索到最佳实践方案或在StackOverflow上提问。但即便你找到了想要的答案也未必能让你感到满意。你怀疑这个设计是否完美事实上真正完美的设计几乎为零。 设计难题接踵而来 想彻底解决设计难题是不可能的。这是因为每个需求都会浮现在你的脑海里你会遇到设计领域里最大的挑战比如选择数据还是表示层。我是使用MVC还是MVVM哪种OPM工具适合我我该如何处理多个数据库等等。每个问题都会让你不知所措并且所遇到的设计问题也在日益增长。每走一步都会使你觉得像是有座大山摆在你的面前。不堪负重的感觉让你想要逃避或者拖延解决问题的时间。但拖延并不能解决问题。 解决类似这样的问题最好的办法就是Divide Conquer拆分 克服。你必须暂停思考脑海中的所有系统问题试着将设计拆分成细小的模块并且一个一个的查看可以做哪些简单的模块。如果可能的话选择迭代开发方法。这样你就可以将思维专注在设计障碍上 那么你就能看到多个小山丘而不是整座大山浮现在你的脑海中。 此外不要花费太多的时间来选择工具或者API或者规则引擎。这些工具仅仅是为了让我们工作起来更加轻松。相反地把更多的 时间放在设计原理上比如关注分离Separation of Concerns。SoC系统芯片会允许你改变任意软件层或者不影响其他系统的软件工具。 TDD软件测试驱动开发会让你鼓足勇气让你在软件行业发生质的改变。不要忘了在设计上花费的时间是远远不够的正如Steve McConnell 在Code Complete这本书中所说 “When areyou done [designing]? Since design is open-ended, the most common answer tothat question is “When you’re out of time.” 需求变更 为了生存你的客户或者公司必须适应变化。而这就意味着需求将发生变化。你不可能只编写一款软件就能满足未来所有的需求。总会有些新的需求时不时的跳出脑海中。所以不要试图掩盖未来的需求尝试去编写满足目前需求的软件。 不要过量设计 如果你花费数天时间来开发某个特别的功能而这个功能一年里为你的客户只减少五分钟那么实际上你的工作是无用的。我能理解有时我们无法阻止自己做出一些特别的改变因为它似乎使我们觉得像是一个更好的程序员或者只是为了好玩而已但是考虑到成本/效益时间是宝贵的把时间花费在其他方面或许会更好。 简洁原则 简化当你需要存储某个对象到系统文件时没有密集型的工作或者特别需求编写一个自定义对象序列化是毫无意义的。我看到有些设计从工程学角度来看它们像是杰作但它们过于复杂。你不应该让你的设计过于复杂。有时最好的解决方法就是简单。因此请保持 KISS原则。 相信自己鼓足勇气 设计其实是为了检验程序员成果的好坏。不同的程序员可拿出不同的设计思路。因为没有单一的解决方案这可能会导致你为某个特性搜索所有的最佳方案 但这并不意味着你应该停止学习或聆听他人的想法。在设计过程中不是学习所有最佳实践就能适合你的问题。相信自己做最好的设计实施自己的设计思路。 重构是个非常好的做法。当出现坏代码时试着用重构的方式来解决。从错误中学习它将有助于你未来设计。 没有完美的设计 无论你做什么最终都会以一款无法令你满意的软件而告终。正如 Hunt and Thomas在《The Pragmatic Programmer》中写道的 “完美的软件是不存在的。在计算机历史上没人设计出完美的软件。这是不可能的也许你是第一个除非你不接受这个事实而浪费时间或者精力去追逐一个不可能实现的梦想。” 我很抱歉但他们是对的。不要去追逐一个不可能实现的梦想试着让你的软件“足够好”就好 英文出自 Thingstocode