The Value Isn't in the Code
代码的价值并非体现在 Code 本身
By Jon Ayre October 30, 2022
时间就是金钱,金钱就是价值
好吧,我承认说你的软件一文不值是一种无耻的标题党行为。但是,我仍然坚持认为它不像你想象的那么有价值或不可或缺。你需要两样东西才能使用软件解决问题:技能和时间。
技能。当然,你可以使用不熟练的从业者来创建代码。代码甚至可能可以运行,但这与解决问题不同。糟糕的代码本身就是一个问题,因此,即使你解决了最初的问题,现在也面临着一个新的,可能更大的问题要处理。如果你想成功,技能至关重要,而人才并不便宜。
时间。编写代码可以很快,但是解决问题却很棘手。这需要时间,而时间就是金钱。运营一个软件开发团队并不便宜,因此任何像样的软件都会产生可观的成本。如果你要对解决方案进行投资,则应该期望它在完成后具有一定的价值。
那么,为什么我要暗示代码一文不值呢?如果它解决了问题,那么它就在传递价值。一文不值似乎有点刺耳。的确,我有些夸张,但并没有夸大太多。要理解这一点,让我们再次看一下该解决方案以及投入的时间。人们很容易专注于软件而忽略了周围的事物。
如何烤蛋糕
首先,是团队。你必须找到合适的,有技能的人,并将他们聚集在一起。然后,他们必须建立明确的角色和职责,并学习作为一个有凝聚力的团队一起工作。最后,该团队必须与利益相关者和用户建立关系,并熟悉问题领域。
这需要时间。
其次,是业务逻辑。即使是最简单的解决方案也必须执行某种业务处理。必须有人弄清楚该逻辑应该是什么并对其进行编码。
这需要时间。
第三,是设计。如果代码面向用户,则它会为用户提供体验。希望通过认真的设计,反馈和迭代,随着时间的推移来开发这种体验。
这需要时间。
最后,是代码。这也需要时间,但是与所有其他部分相比,该时间很短。有时,感觉好像所有的努力都投入到了代码中,而其他部分则是偶然的。但是,现实情况是,很少有生产时间最终会成为实际解决方案中的代码。
作为迭代反馈方法的一部分,某些代码将被替代方案替换。某些代码将保留,但由于设计更改而不再使用。某些代码的编写是为了应对永远不会出现的情况。
开发人员对此的答案是“refactoring”。对于那些不编写代码的人,refactoring是审查现有代码并在保留核心功能的同时进行一系列改进的过程。
这需要时间。
知识就是力量
将所有时间加在一起,你将得到软件解决方案的成本,并且你可以争辩说,这代表了代码的价值。你甚至可能会争辩说,代码的价值超过了成本。
我不同意这一点。我的观点是,这样做会将代码库和解决方案混为一谈。所有价值都存储在团队,逻辑和设计中,而很少一部分价值在代码本身中。最初,这种观点只是一个没有任何形式的证明的假设,但是随着时间的推移,我有机会进行实验来检验该假设。
其中一项特殊的实验涉及一个Web门户,我在千禧年初作为一个完全远程团队的一部分参与了开发。智能手机不存在,并且对于许多人来说,互联网仍然是一个相当新的概念。该门户网站是为一家不断增长的互联网服务提供商而设计的。
该工作花了7个人的团队6个月的时间进行开发,结果是一个跨平台的解决方案,可以传递内容,电子邮件,日历和消息传递。它领先于时代,并且还支持通过手机进行语音交互以及通过WAP传递内容。什么是WAP?在智能手机出现之前的日子里,在移动设备上访问互联网远非复杂。
结果足够好,被一家大型组织收购作为其门户解决方案。该公司已经花费了超过6个月的时间,并由一个更大的团队试图创建相同的东西但没有成功。我们为在如此短的时间内用如此小的团队取得的成就感到自豪。
因此,我的实验与在代码开发方面已经被认为是高效的东西有关。
我们可以重建它!
我所做的是花了两周的时间在家里从头开始重新创建解决方案。该代码现在属于第三方,因此我想要一个完全可以称为自己的新版本。除了我对问题的了解以及解决问题的经验之外,我没有使用原始版本中的任何内容。代码存储库不再可访问,因此即使我想这样做,我也无法从中复制任何内容。这样做也是不道德的,因为它不属于我。因此,每一行代码都是真正从头开始构建的。
在两个星期之内,我拥有了一个功能齐全的解决方案,可以完成原始解决方案所做的一切(以及更多)。我在很短的时间内就实现了这一目标,并且与原始解决方案相比,我生成的代码只是其中一小部分。
我如何实现这一目标?我是某种编码天才吗?显然不是。我是一个非常有能力的编码员,非常出色,但是我只是一个编码员。无论你有多好,你可以键入的速度都是有限的。
不。我之所以能够实现这一目标,是因为代码几乎没有真正的价值。所有这些都存储在我的脑海中。该设计在我的脑海中,事后看来,我可以发现其所有缺陷。因此,我能够基于该学习创建一个更高效,更有效的设计。所有的错误都已经犯了,所以我能够第一次正确地获得此版本的代码。我的大多数测试都成功运行,并且调试时间几乎不存在。
我现在知道了不需要什么。所有那些我们已经内置以满足预期需求的东西现在都可以精简为真正有用的少数东西。我了解每项技术,每种协议和每个库,因此没有学习曲线。
基本上一文不值
由此,我可以得出结论,7个人花费6个月的时间来创建此解决方案,几乎没有涉及到代码。它可以完全丢弃,并在不到两周的时间内由一个人重建。更重要的是,它可以同时得到根本的改进。
因此,这就是为什么我断言与创建解决方案所投入的整体工作相比,你的代码一文不值。而且我会更进一步。我会建议,与直觉可能告诉你的相反,可以通过扔掉代码并重新开始来更好地实现refactoring。
这是一个可怕的想法。你甚至可能会认为它荒谬地牵强。我不希望你根据博客文章同意我的观点。但是,我要建议的是,你应该认真考虑一下,也许可以自己进行类似的实验。如果这样做,请告诉我你的进展如何。我真的很想知道。
也许我很特别?也许我是神话中的十倍开发人员?我个人对此表示怀疑。毕竟,我是第一次花六个月时间构建它的人之一。
哦,下次你必须修复别人的代码时,请记住这一点。很容易感到优越和知识渊博。嘲笑那些先来者所犯的明显错误是很诱人的,但是你具有事后诸葛亮的优势。也许可以考虑一下,你可能正站在那些为你开辟第一条道路的人的肩膀上。