他们称其为Real World™是有原因的。
在真实的企业世界中,您遇到的99%都将被视为废话,我有充分的理由解释。不被认为是垃圾的1%最终会变成垃圾。
#1编写代码,#2 ????,#3利润!
首先存在的企业是要牟利的,但它们的存在并不是要产生出理论上完全干净的设计和原始的学术代码,这些代码都存储在完美的黄金存储库中。甚至没有关闭,甚至没有销售他们产生的源代码的业务。
在商业世界中,代码是达到目的的一种手段。如果某些代码解决了业务问题并赚到了比创建和维护所需的钱更多的钱,那么这对于企业来说是理想的。聘请您编写代码只是企业获取代码的一种方法。
理论0-实践∞
理想情况下,维护应该成为更多问题,但通常不会如此,因为从短期来看,它不会带来经济上的好处。从长远来看,软件通常具有相对较短的生命周期,尤其是基于Web的应用程序,它们很快就会过时并且需要重新编写。
由于许多基于动量的原因,内部业务应用程序被视为无止境的僵尸项目。这些项目实际上是它们继续取得的成功,因为它们继续使业务获利。
在理论上,理论与实践之间没有区别。实际上有。-瑜伽士贝拉
从理论上讲,完美构建的绝对干净的原始代码库具有100%的代码覆盖率可以为公司节省资金,实际上,它甚至无法提供接近有效投资回报的任何东西。
软件生命周期的物理学
在软件世界中,还有一个强大的熵力在起作用。这是不可避免的一个黑洞,它谴责所有软件退化为泥泞大球。
您从BBM开始越远越好,但是如果有足够的时间,每个软件系统最终都会到达那里。接近100%熵的速度取决于您从何处开始,累积技术债务的速度以及利息的高低。
软件系统退化是由于维护而不是因为缺乏维护而导致的。一个已经定义多年且无需更改代码的系统可以满足其所有要求和目标,并且是成功的。
那些需要不断变化的系统是不断被戳破和推动的,因为它们开始时接近于最大熵,而正是维护会加速这种负面变化。
足够好就是足够
诸如生命周期不断变化的网站之类的短生命周期系统无法从昂贵的庞大前期设计中受益,因为前期设计时间太短而无法收回成本,因此无法在单元测试中获得100%的代码覆盖率。
像上面提到的内部业务应用程序这样的长生命周期系统,也不会真正受益于100%代码覆盖率单元测试的大量投资,因为项目生命周期内的变化率在一个过程中接近于零。非线性时尚。
这就是为什么寿命终止计划更为重要,为什么应该在发布某些产品时就计划更换系统,而不是在它已经过了几年且无法支持时就计划了,因此必须尽快安装新系统。
据我所知,他们没有教授BBM,我从未遇到过一位CS毕业生,他知道这是什么,更不用说它为什么发生了。
这就是为什么“足够好”就是“足够好”,或多或少不是。
软件霸主
有房地产贫民窟的领主是有原因的,他们从自己拥有的破烂的棚屋中获利。所赚取的利润超过了对破旧财产进行增量维护所花费的资金。如果他们不这样做,他们将拆除该建筑物并予以更换。但是它们没有,因为增加的成本远远少于大修或更换整个建筑物。还有一些顾客(租户)愿意为破旧的财产支付费用。
不管是房主还是贫民窟主,都不会因为某些学术上的完美概念而将钱花在房产上,而这并不意味着可以从相关成本中获得可观的利润。
没有客户愿意为可以接受的软件系统升级付费。没有任何企业会花钱在编写和重新编写代码上而没有明显的可观利润。
微软是最主要和最成功的软件公司。Windows直到最近才开始进行主要的基础重写。而且他们仍然没有从内核中删除所有遗留代码。对他们而言,这没有商业意义,人们更愿意接受他们在过去十年中设定的低期望值。
预后
这是我从事软件开发20多年的一种模式。它不会很快改变。这不是人们希望它脱离某种信念体系的方式,而是企业外部力量的现实。业务驱动决策,利润不是邪恶的,他们支付您的薪水,短期或长期愿景无关紧要,这从定义上来说是一个不断变化的短期行业。任何反对足够好赚钱的人都不了解业务。
我花了15年的咨询时间,很快就了解到,足够好就是什么,其他任何事情都使我付出了金钱。是的,我希望一切都完美无缺,但是除非您出售的代码库(即在出售解决方案的 99.99999%的时间中),否则所有完美的,有条理的完美代码都将丢失,并且您只是在浪费时间,就永远不会得到报销。
进步与希望
至少在哲学上,敏捷方法学是朝正确方向迈出的良好一步。他们以头等公民的身份应对混乱和不断变化,并接受它。他们拒绝教条式的实践,承认方法和实践应随着需求和技术而改变。
他们接受由于缺乏时间或不断变化的需求,不断变化的员工以及带有技术债务概念的软件系统的活力而引入的熵。
但是敏捷不是万能药,它不会改变物理学的基本定律,无论如何代码库都会腐烂。在腐烂完全失控和难以控制之前,管理人员应计划如何处理腐烂。
如果正确完成,敏捷将有助于管理熵,降低熵,对其进行跟踪,对其进行度量并以计划的方式进行处理。它不会阻止它!
职业决定
如果这对您来说是一个真正的哲学问题,那么您可能应该考虑其他职业选择,因为事情的工作方式背后具有有效的商业价值。开源项目没有更好的跟踪记录,而且在许多情况下,这些代码甚至比我所见过的大多数公司代码还要糟糕。