闲谈简单设计(KISS)疑惑

简介:

  忙碌了一年了项目又到了交互了,虽然项目能成功上线(因为还有维护支持的团队)。但是个人从技术上看,这是一个不那么成功的项目,因为后期艰难的修复bug,添加feature。这与简单设计有什么关系呢?在某模块开发起初,由于架构的经验预见性的告诉我这模块开发中会出现什么问题,所以选择了提出某些比较好的解决方案,但是由于团队成员一致的所谓简单设计,通过TDD,重构达到”合适”的”完美”的设计,可是最后的结果如我所料一切的发生。这里插一句,现在在一家敏捷公司,敏捷强调是合作,所以没有一个人同意规划决策,不同之前的公司作为架构师决策一切架构设计。敏捷合作交流我不否认你正确性,因为我也相信软件是人和时间的问题,方法论都是解决我和时间的问题。但是对于一个在成长中团队,成员的设计或者某些预见性或者重构能力,力度相对不足的情形下,这样是不是合理?

    回到主题,简单设计英语 Keep It Simple, Stupid。我们常说的KISS原则,保持产品或设计的简单性,同时功能的足够性。我想说的是翻译成为简单这是一个错误的决定,因为这不是绝对的简单,在我看来最简单的系统就是没代码的系统,代码越少,甚至没有就没有bug没有维护。所以我更愿意以产品设计如家庭装修一样翻译为”简约”,简约而不简单。在《简约至上-软件交互式设计四策略》这本书以遥控器为例提供了删除,隐藏,转移,组织产品设计四策略,但是其简化改善后仍然五脏俱在,核心价值仍在。但是对于软件而言,我们最大对手是需求变化,所以我们常说“拥抱变化”,敏捷就是为了拥抱变化适应变化给用户提供更好优质可用的卓越软件。但真的所谓简单设计,我们起初就不设计?靠我们的测试驱动,行为驱动,重构等方法论就能解决软件设计?这些就是万能的灵药,软件的银弹?我还没见过这样的人,我不否认在这样牛人的存在, Martin Fowler 在《重构改善既有代码设计》一书提到XP发起一帮人能够比较好的完美利用这些方法论将代码改造为一个比较好的设计。但这毕竟是少数人的世界,我辈望山莫及,再加上项目开发周期中的由于时间,环境等等压力导致重构力度大幅度缩减,或者根本就没有把重构日常化,只是拿着重构这个感觉好nb的术语招摇撞骗(本人见过很多人或者博客将如果重构,但在鄙人鄙见下这更大程度的是重写,重新设计,只是招摇撞骗的幌子),那所谓的简单设计真的还能启用?

      在回到简单设计,在软件变化的需求下,我认为简单设计的目的是保持代码的整洁,以及不要花费太多时间在无谓的设计猜测需求中,其目的是减少时间人力资源的浪费,其相对于过度设计而言。但绝对不是不做设计,不留任何一点扩展,起终点在于时间资源的投入。所以我认为基于资源的投入,如果不是那么大浪费或者必须的设计,我们让然需要去做,因为程序员都是追求完美,适应以后潜在的变化。相反如果是将一个相对好的设计,或者扩展,花时间去做到所谓的简单设计,丧失扩展等,这不是减少资源投入,这是在捣蛋,花时间精力去搞破坏,即使是你认为不变,何况谁能预测未来世界。

     如果我们不是牛人,你却也追求卓越软件,我觉得我们还是需要考虑下设计,不要一味的“简单设计”,平衡各种方法论,权衡各种利弊,找到适合自己的方式方法论,如果只是”简单设计“却没有足够的重构力度,抑或完全的优先设计,不不断的持续改进,逐步细化,做到“简约而不简单”记住所有的技术债早晚会需要你偿还的。对于我来说没有万能的方法论,我也不是牛人,我选择设计,重构等方法论的权衡。



 本文转自 破狼 51CTO博客,原文链接:http://blog.51cto.com/whitewolfblog/1194409,如需转载请自行联系原作者


相关文章
|
6月前
|
机器学习/深度学习 人工智能
技术人的四大「造神」学习法,为啥就没人好好用呢?
技术人的四大「造神」学习法,为啥就没人好好用呢?
56 2
|
设计模式 存储 JSON
如何写出一手好代码(上篇 - 理论储备)?
技术能力是研发同学的立身之本,而写代码的能力又是技术能力的重要体现。但可惜的是理想很丰满,现实很骨感。结合慕枫自己的经验来看,我们在工作中其实没那么容易可以看到写得很好的代码。
|
SQL 存储 缓存
系统设计不知怎么入手?一文帮到你
系统设计不知怎么入手?一文帮到你
104 2
|
人工智能 IDE 算法
【周末闲谈】新的编程方式,程序员的未来何在?
【周末闲谈】新的编程方式,程序员的未来何在?
123 0
|
SQL 存储 Oracle
平时做开发需要掌握哪些数据库方面的知识(个人经验之谈)
平时做开发需要掌握哪些数据库方面的知识(个人经验之谈)
238 0
|
测试技术
初级软件测试面试题怎么找?提供的这两个地方你肯定用得上
最近几年,随着电子产品和互联网的蓬勃发展,各类科技公司如雨后春笋般出现,而软件公司作为科技类公司中的重要组成部分,在这支互联网大军中也占据了重要一席。因而,负责软件问题质检的软件测试岗位也逐渐成了这几年炙手可热的就业岗位之一。
148 0
|
算法 NoSQL API
到底该不该看源码(懂这三点儿就够了)
1、不要为了看源码而看源码 2、代码积累到一定程度,遇到问题自然就去查源码了,然后你就看懂了 3、两年内不要刻意去看源码,可以点开简单了解一下就行,前两年疯狂做项目就行了,后期项目做的多了,你自己就会有疑问,每次写代码就会问自己为什么要这样写?底层的原理是什么?很自觉的带着问题就去看源码了,如果你没有这样的疑问,那说明你也不适合去看源码了,写写业务代码,了了一生
189 0
|
测试技术
软件测试好学吗 只要选对了学习方式,就并不难学
我们都知道,如今互联网IT行业,在国内可是非常吃香的,尤其是近些年随着软件的普及,人们对软件的要求也是越来越高,因此国内各大互联网企业,也开始大量招聘软件测试人员,但由于这个岗位在我国的发展时间并不长,人员需求也是供应不求的。
198 0
软件测试好学吗 只要选对了学习方式,就并不难学
|
存储 缓存 JavaScript
想好怎么学 Servlet规范了嘛?想好了嘛?没想好先看看这篇文章(爆肝之作),先看着然后慢慢想!!
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
想好怎么学 Servlet规范了嘛?想好了嘛?没想好先看看这篇文章(爆肝之作),先看着然后慢慢想!!