代码之死--当开发者在与复杂的斗争中失败时
当开发工作很糟糕时,复杂性就永远不会远去。
11月4日 - 4分钟阅读

复杂性是致命的。它吸走了开发者的生命,它使产品难以规划、构建和测试,它带来了安全挑战,并导致最终用户和管理员的沮丧。- Ray Ozzie
当开发变得糟糕时,是因为开发者在与复杂性的斗争中失败了。复杂性就像一个精灵。一旦它从瓶子里出来,你就不能再把它放回去了。它将不断冒出来破坏东西,拖慢你的速度并使你困惑。
开发人员创造了复杂性,它扼杀了开发,吸走了创造软件的乐趣。当你看到软件项目受到错误、问题和不消失的问题的困扰时。那是因为开发者让复杂性打败了他们,代码赢了。
开发人员管理着软件的复杂性,或者说复杂性管理着他们。
开发人员很容易让自己陷入聪明的技术混乱,或者转向他们并不擅长的领域。
随着复杂性和技术债务在软件项目中的积累,开发速度减慢,开发人员在现有的解决方案中挣扎。在技术上,它变得越来越困难,开发人员专门从事其他开发人员无法理解的复杂领域的解决方案。
简单地说,开发变得更加复杂,理解代码更加复杂,修改代码更加复杂。这是一个错误、错误和混乱的完美环境。
通往成功的道路不是寻求辉煌,而是保持简单的开发和避免错误。如果你阻止了大的错误,那么你就会给自己时间来找出正确的解决方案。
避免复杂性
"你可以用一个好的想法比一个坏的想法遇到更多的麻烦,因为你忘记了好的想法是有限度的"。- 本杰明-格雷厄姆
避免复杂是需要纪律的,因为创造简单的解决方案需要更多的努力。
复杂性往往来自于快速修复,走捷径和创造技术债务。技术债务是复杂性的另一个名称,因为技术债务使代码更加复杂,更难理解,更难操作。
技术债务=复杂性
如果代码对大多数开发人员来说太难理解,那就是太复杂了,这将导致问题。单个开发人员理解了它,就会成为一个单点故障。
开发人员应该遵循爱因斯坦对一个质疑爱因斯坦的物理定律应该是简单的学生的回答
学生 "如果它们不简单呢?"
爱因斯坦回答说:"那么我就不会对它们感兴趣"。
如果你想要一个简单的生活,作为一个开发者,避免复杂,保持事情的简单。
- 当你使一个过程变得复杂和困难时--开发人员会忽略它
- 当你把部署变成手动的时候--他们就会减少部署的次数
- 当代码很复杂时--开发人员会产生bug
复杂是一种未来的税,你在未来用时间来支付。任何认为自己将来会有更多时间的人都是在欺骗自己。
你会有更多的代码需要维护,更多的问题,更多的bug和更少的时间在未来。
速战速决,悔之晚矣
造成复杂性的一个常见原因是急于行动,而没有给自己足够的时间考虑问题或你的解决方案的二阶效应。
开发中明天的问题是由今天的解决方案和代码造成的。如果你不了解问题;你最终会修复错误的问题或做出假设。
开发人员创造了假设,因为他们不理解需求,并假设(猜测它应该如何工作)。后来他们发现假设是错误的,软件需要被改变。在创建软件之前一定要澄清假设。
为什么当你试图加速时,软件开发却变慢了。典型的例子是增加人手以加快开发速度。这往往会减慢开发速度。
新的开发人员需要一个月的时间才能上岗。他们拖累了现有的开发人员,并增加了沟通的开销。如果你不能有独立的区域进行开发,那么你就会有更多的开发人员互相绊倒在一起。
延长工作时间似乎是做更多工作的简单方法,但从长远来看,它降低了生活质量,并且从长远来看,会使开发人员疲惫不堪。
假设是错误的源头
软件开发是一个失败者的游戏。你在开发环境中解决的问题越多,它们对开发团队的伤害就越小。
质量是软件开发的捷径。当使用短期解决方案时,它们会在未来花费更多时间。软件开发是一项长期的活动,由于人们作出短期的决定,它不断地变得更加困难。
耐心
开发人员和客户总是热衷于开始并创建软件,但创建错误的软件永远是错误的。
沃伦-巴菲特读了棒球运动员泰德-威廉姆斯的书《击球的科学》。他解释了泰德的方法。
"如果他等待真正在他的甜蜜点上的投球,他就会打出.400分,"巴菲特解释说。"如果他不得不在下角的东西上挥棒,他可能会打出0.235。"巴菲特
开发人员需要耐心,你应该只在需求正确的时候挥棒(创建软件)。如果你在不确定的情况下创建软件,你将需要重写该软件,并有可能重写任何依赖它的代码。
"投资的诀窍就是坐在那里,看着一个又一个的球投过去,然后等待一个正好在你甜蜜点的球。如果人们大喊大叫,'摇摆吧,你这个流浪汉!'就不要理会他们。"巴菲特
在软件项目中,你会有客户、经理和其他开发人员说
"创造软件,你这个混蛋,现在就写代码"
你需要保持冷静,了解需求,了解企业的目标,了解问题,并澄清所有的假设。现在你需要确保你创建了一个简单的解决方案,并专注于质量。
一个不同的角度--选择的复杂性正在扼杀软件开发