结论客户的需求非常复杂为了满足这些需求,大型软件不可避免变得复杂软件公司的管理者真正在意的不是系统的复杂性,而是利润只要软件能赚钱,高层并不在意软件变得复杂软件复杂性都落到少数架构师和高级程序员的头上每个人加上自己的解决方案(方框和箭头),让软件越来越复杂,然后不可避免地,他们就会在一段时间后离开公司复杂系统最终变得难以理解和维护,唯一的解决方法就是放弃旧系统,从头开始写一个新系统所以,怎么解决软件的复杂性?解决不了最后就是你走人,公司把软件推倒重来这就是一个大厂高级程序员的真实想法国内的情况其实差不多,上面的描述完全适用于 BAT 内部的复杂系统大家通常认为,复杂系统往往会在经济繁荣的时候崩溃,因为业务太多,支撑不过来,但他认为不是这样的,系统崩溃往往发生在经济收缩期经济繁荣时期,软件公司会大量雇佣新员工,投入更多的财力和人力,支撑复杂系统等到经济收缩期,公司开始减少投入、冻结招聘或裁员,复杂系统可能就会在这个时候出问题,变得难以维护现在就是经济收缩期,那么接下来,会不会就是软件故障的高发期,我们将看到很多复杂系统的崩溃?故事1988 年,人类学家约瑟夫·坦特 (Joseph Tainter) 出版了一本名为
《复杂社会的崩溃》的书在其中,他描述了罗马人、玛雅人和查科人等伟大文明的兴衰他的目标是回答几个世纪以来一直困扰着思想家的一个问题:为什么如此强大的社会会崩溃?在他的分析中,Tainter 发现这些社会的主要敌人是
复杂性随着文明的发展,它们增加了越来越多的复杂性:更多的等级制度、更多的官僚机构、更深层次的社会结构交织在早期,这是有道理的:每一个新的复杂程度都会带来回报,比如增加经济产出、税收等但在某个时刻,收益递减规律开始出现,每一个新的复杂程度都会带来更少和更少的回报更少的净收益,减少到零甚至更多但由于复杂性长期以来一直运作良好,社会无法适应即使每一层新的复杂性开始带来零甚至
负的投资回报,人们仍继续尝试做过去有效的事情在某些时候,他们所建立的泥潭变得如此功能失调和笨拙,以至于唯一的解决方案就是崩溃:即复杂性迅速降低,通常是通过废除旧系统并从头开始我觉得这很有趣(除了对现代文明的明显影响)是Tainter可能一直在写关于软件的文章任何在科技行业工作足够长的人,尤其是在大型组织中工作的人,都曾见过它存在一个遗留系统:它很大,很复杂,没有人完全理解它是如何工作的建筑师被请来“修复”系统他们可能会推出一个大白板,显示许多指向其他框的框和箭头,并且不可避免地,他们的解决方案是……添加更多框和箭头没有人可以从系统中减去;每个人都只是补充这种情况可能会持续数年然而,在某个时候,可能会发生组织重组——合并、重组、礼貌地释放一些高级管理人员,专注于他们的绘画爱好一段时间引入了一个新的建筑师团队,他们对“方框和箭头的大图”问题的解决方案要简单得多:在整个事物上画一个大的红色 X旧系统已落伍或已弃用,从事该系统工作的憔悴老兵要么离开,要么被改组到其他项目,幸运的是,一个新面孔的团队被引入,幸运的是,从头开始设计一个新系统对于我们这些可能渴望编写一种永恒且经久不衰的软件的人来说,这可能令人失望,但你必须承认这个系统是有效的尽管浪费、低效和纯粹的谎言(“旧代码工作得很好
”“别等,旧代码太糟糕了
”),但这是过去几十年来维持许多软件公司的模式然而,这个循环会永远持续下去吗?我不确定目前,软件行业经历了近 20 年的经济繁荣(时断时续),但经济学中可以肯定的是,繁荣最终会转为萧条在繁荣时期,软件公司可以继续雇佣新的员工来管理他们现有的软件(即更多的工程师来理解更多的方框和箭头),但如果他们的劳动力被迫收缩,那么同样的系统可能会变得无法维护快速且永久地降低复杂性可能是唯一的长期解决方案不过,对复杂性有利的一件事是工程师
喜欢复杂性承认吧:尽管我们抱怨
别人的复杂性,但我们爱自己我们喜欢坐下来构想新的架构图,这些图可以舒适地放在我们自己的脑海中——只有当这些图离开我们的头脑,在现实世界中成形,并且超出任何人的脑袋大小时,问题才会开始抵制复杂性需要大量的纪律,对新的盒子和箭头说“不”说,“不,我们不会解决那个问题,因为那只会引入 10 个我们还没有想象到的新问题” 或者说,“让我们使用一个更简单的设计,即使它看起来很业余,因为至少我们可以理解它” 或者只是说,“让我们少做而不是多做”设计的简单性在理论上听起来很棒,但它可能不会为你赢得同行的喝彩复杂的设计意味着更多的团队来管理系统的更多部分,工程师要做的更多,更多的会议和计划会议,也许还有更多的专利要申请一个简单的设计可能会让你看起来好像没有真正做好你的工作“而已?我们完了?我们可以打卡吗?” 当促销季到来时,用令人眼花缭乱的新设计为自己创造一个案例可能比一个无聊的、易于理解的解决方案更容易归根结底,我认为软件是遵循繁荣与萧条的模式,还是更可持续的模式,将取决于生产软件的组织的经济压力一家不惜一切代价重视增长的软件公司,就像罗马人急切地吞并越来越多的高卢地区一样,很可能会陷入“增加复杂性和崩溃”的循环一个目标更温和、拥有稳定的客户群并且不会随着时间发生太大变化的软件公司(这样的事情是否存在?)将更像是一个跟随羚羊每年迁徙并专注于可持续发展的卑微部落,久经考验的技术(这些公司是否会像倒霉的高卢人一样被凯撒和他的军队蹂躏,是另一个问题)就个人而言,我试图对这种情况保持良好的幽默感,并避免屈服于冷嘲热讽或绝望软件写起来很有趣,但在当前行业中也很无常如果您 10 年前编写的代码仍在使用中,那么您将有很多事情要做如果不是,那么嘿,至少你和我们其他人相处得很好,他们可能构成了大多数软件开发人员只要继续尽力而为,并尝试保持健康的怀疑态度,当一些野心勃勃的建筑师推出一个带有很多方框和箭头的大图表时
0 评论