美文网首页程序员架构和软件设计
软件的核心价值:长期演进(读<clean architec

软件的核心价值:长期演进(读<clean architec

作者: ulysses830 | 来源:发表于2018-12-02 11:31 被阅读43次

        <clean architecture>这书的第一部分算是老生常谈了,用一个匿名的case study说软件如何腐化进而大幅影响开发效率。软件有两个价值维度,行为的价值和架构的价值,前者可以理解为满足客户需求,后者可以理解为软件可扩展性的价值。这两个价值肯定不是矛盾的,并不是说你满足了客户需求就会失去扩展性。长远的看,只有容易扩展的软件才是有价值的软件,而评价一个软件架构最直接的指标就是,长期演进过程中,软件变更的成本。变更成本随着时间不急剧恶化的软件既可以被视为有着良好架构的软件。

    软件的核心价值:长期演进(读<clean architecture>之一)

        记得十七八年前,第一次学习软件工程的时候,就看到过类似的话题,修复一个故障在不同阶段(设计-编码-测试-发布)的成本是级数增长的(1-10-100-1000);大概七八年前第一次学习敏捷软件设计(clean code、refactor、SOLID、XP、implement patterns、design patterns...)时,印象非常深刻的一句话是“Software must be soft,it must be easy to change, easy to change has huge business value.” 回头看,这些当时看起来政治正确的话,实际上是非常昂贵的价值观。其昂贵之处在于,如果你不是生于罗马(比如说工作在普遍重视软件设计和架构且有完备制度保障的大公司?),那么就得靠在跋山涉水的痛苦挣扎中慢慢体悟到架构的价值。体悟到这种价值,让它成为你的价值观,进而去影响和改变组织也会是很难的事情。这两个过程哪个更难?仰望天空天空沉思和飞到火星哪个更难?发白日梦和实现它哪个更难?生一念净信到立地成佛哪个更难?从生命起源到第一只仰望天空的古猿,大概走过数亿年的的时间,而倮猿飞向火星可能只需要几万年。对一个工作十年、饱经风霜、早生华发的程序员,做做改善架构的白日梦可能也是奢望。这真是见仁见智的问题。

        行为价值和架构价值之间的冲突,是长期利益和眼前利益之间的冲突。人的动物性一面要求我们不关注长期利,理性方面又时常在耳边絮叨说还有更长远的未来。这是非常深刻的冲突。另外,项目交付压力大的时候,谁还顾得上明年或者下一个版本?先活下去似乎成了一个听起来光荣(何其猥琐而正确)的口号。在两者之间找到平衡并不是容易的事。一个解决方案是,给长远利益预留资源和权利。在大型项目的开发中,要留给架构相应的人力和时间资源。好的资源应该留给设计而不是解决故障。其次要让这部分资源发挥作用。一般而言,架构一定会外于当前交付和故障解决,有时候甚至会被视为某种干扰因素。如果再参杂组织壁垒的考虑,实际上非常容易形成对抗。两个建议,一是架构需要贴近代码和实现,提供具体的建议和实现指南。一定要具体,哪怕是僵化、一刀切的方法又如何,对于大部分组织而言,有规则都比没有规则的野生状态要好(想想《利维坦》中描述的人人为敌的“自然状态”?)。规则先僵化,再优化;二是记录技术债,把技术债显现在每个人的面前。要把技术债转换成内部需求,并录入需求系统(或者类似的啥东西?),然后在不同的场合不停的强调还债的重要性。虽说债多了有可能不还,但识别和展示出来总是第一步。架构师的一个职责就是让大家意识到长远利益的重要性,而且应该找到你的赞同者(统一战线的意思,高祖V5),仔细想想谁关注两年后的生产力?(啥?没有?难道都是打算干完这一票就离职的人么?老板开公司是用来洗钱的么?)

        真正开始考虑架构问题,首先要识别项目的规模和约束

        规模,包括时间和空间的。项目可能演进多长时间,目前处于什么阶段,项目目前和潜在规模会有多大?不同情况采取的手法可能会不尽相同。简答的说,大型项目和小型项目不相同,一个功能单一的工具软件没必要引入那些对大型项目必须的复杂技术手段。要识别出那种势必长大的项目,别假装看不见。这种项目的早期投入非常重要,而且会有明显的效果。正如kent beck说的,院子里种一棵树最好的时机是五年前(才搬来的时候)。

        约束,性能、实时性、时延、扩展方式,都可能是约束。feature从一页纸就能列完到要用专业的需求系统管理,代码从几千行增加的几十万行,开发人员从一个小组到上千人规模。在这个过程中,我们对性能的要求往往是不变的,与其将它视为需求不如视为约束。系统如何扩展,如何解决性能问题,有些时候可以通过增加服务器来解决,有时候你的硬件资源就是固定的(比如通信系统),八年前的硬件今天还得正常工作,甚至服务的用户还更多了!对于后者,它可能是你的系统最大的一个约束,你从第一天开始就得考虑完备的解决方案。 约束的含义是,要想办法划出明确的红线,给出警示牌,并安装能识别跨域红线行为的报警器。

        能意识认同到长期利益的存在,并预分配较好的资源和权力给它,对一个组织而言,是质变,是变好的开始。这是顿悟,顿悟之后还需要长时间的按照所悟内容的实践和修行。对于禅宗一个大误解就是顿悟完了就立地成佛了,其实哪是那么回事,顿悟只是个开始。至于怎么修行,后边的章节再慢慢聊。

    相关文章

      网友评论

      本文标题:软件的核心价值:长期演进(读<clean architec

      本文链接:https://www.haomeiwen.com/subject/qlkjcqtx.html