软件世界也是“脏乱差” 作为一个后端开发程序员,要说对于软件的一个深刻的感受就是软件只是那样的光鲜亮丽,这要归功于前端同事的“裱糊匠”能力。我每次从用户端体验自己开发的软件常有这样的感叹:这个破玩意怎么能这么好看~。我们说自己的软件破,并不是因为我们一开始就想做成一个破烂,程序员还是有技术追求的,都希望能创造出一个完美的系统,以至于我们经常性的推翻已有的系统,重新创造新的系统以达到理想中的完美状态(业内属于叫重构)。但现实是一遍遍的推翻重来,也避免不了系统成为我们口中的“破烂玩意”,业务需求会将系统一步步的变得“脏乱差”。 正如'城市是演化出来的,不是设计出来的',巴西首都巴西利亚正是反例的绝佳标本:它是从1956年卢西奥·科斯塔的飞机状总规+尼迈耶的现代主义建筑群一夜拔起来的'创造'产物,结果就是轴线宏大但街角缺乏生机、严格的功能分区把人赶去了卫星城、公务员白天上班晚上回公寓,反而让原本要带动内陆的'未来之都'在规划蓝图上漂亮、在生活肌理上空洞。今天大巴西利亚都会区一半以上人口住在"非规划区"——真正让这座城市活下来的,是规划没管到的那部分,是人们自己搭、自己交易、自己聚出来的社区。这些“非规划区”成为城市的一部分,必然也导致城市不会像理想中的那么完美,而这又是现实需求的所导致的:住宅区是标准化的 superquadra(超级街块),底层不准开店,买瓶水都得开车。在软件开发过程中也是一样的,一开始我们会总结历史过往的业务场景,整理出一个能够完美包含所有历史场景的标准架构,类似于巴西利亚飞机状的城市规划。随着新的需求进入到软件系统中,就有可能需要破坏现有的系统架构,比如最近我们就收到一个需求,有一个业务需要使用我们的营销能力,但是他们要得很急,很多营销能力我们还没时间开发支持,那就需要有一个折衷的方案:业务流程中需要经过一道我们的系统,但是我们只参与校验基本规则(如可以用几张券)但不会去计算营销价格(业务自己算)。我们标准流程是校验规则和价格计算都是我们系统来负责,就像上面提到的标准流程中“买瓶水都得开车”,但是业务不想这么麻烦,我就想楼下有个“便利店”。在软件系统中我们需要去增加这样的“便利店”,才能满足业务的需求,当系统中出现越来越多的“便利店”,那整个系统就会呈现出“脏乱差”的情况。 软件架构师的一个重要职责就是延缓软件系统变得“脏乱差”,注意这里是“延缓”不是“阻止”,没有人可以阻止软件的“脏乱差”,我们叫“软件腐化”。好在软件工程师还能有重构软件的机会,但是现实中一个发展出来的城市就只能继续腐化下去。