代码简洁之道与软件开发实践

本文深入探讨软件开发中的代码简洁原则、技术债务的危害、AI代理开发的关键要素,以及如何通过简单设计创建优秀软件。作者分享了对软件复杂性的深刻见解和实用解决方案。

代码简洁性

理解软件

2017年10月10日 by Max Kanat-Alexander

大家好,我出版了一本新书!书名叫《理解软件》。

这本书收录了我自《代码简洁性》出版以来关于软件开发和团队合作的所有文章,外加一些从未在任何地方发表过的全新内容。实际上,书中包含了我2008年写的一篇最喜欢的文章,但之前从未发表过。

所有内容都经过了精美的排版设计,经过精心整理和组织,以达到最佳的可读性。我对此感到非常满意,并期待听到大家的反馈。

出版社介绍

《理解软件》涵盖了编程的许多领域,从如何编写简单代码到对编程的深刻见解,再到如何在你所做的工作中不那么糟糕!

你将发现软件复杂性的问题、其根本原因,以及如何运用简洁性来创建优秀的软件。你将以前所未有的方式审视调试,以及如何在团队合作中保持快乐。

Max从他传奇的博客"代码简洁性"中精选了一系列精心撰写的文章、思考和建议,涉及在软件行业工作和成功的方方面面。Max精心撰写了四十三篇文章,这些文章有能力帮助你避免复杂性、拥抱简洁性,从而成为更快乐、更成功的开发人员。

Max的技术知识、洞察力和善良为他赢得了代码大师的地位,他的想法将激励你并帮助刷新你应对开发人员挑战的方法。

你将学到什么

  • 了解如何为你的编程世界带来简洁和成功
  • 复杂性的线索 - 以及如何构建优秀的软件
  • 简洁性与软件设计
  • 程序员原则
  • 摇滚明星程序员的秘密
  • Max对软件行业的观点和解读
  • 为什么程序员很糟糕以及如何不那么糟糕
  • 用两句话说明软件设计
  • 什么是bug?
  • 深入调试

你可以在亚马逊、出版商直接购买,或在任何其他销售编程书籍的地方购买。

-Max

精选观点

软件系统问题的解决方式

一般来说,解决软件系统问题的方法是分配软件工程师来解决问题。

将问题分配给软件工程师的危险在于,他们会编写软件来解决它。

当你看到软件系统中长期未解决的问题时,通常意味着没有人被分配去解决那个具体问题。

当你看到不必要的软件被编写时,几乎总是因为软件工程师被分配去解决某些问题,并决定编写软件是解决方法。

AI代理开发的关键要素

我目前认为,AI代理能够成功生成的输出数量和质量取决于:

  1. 模型的质量
  2. 代理的质量
  3. 输入的质量(如提示或其他上下文)
  4. 代理能够独立运行的确定性、客观验证的质量

我目前认为,除非你是模型开发者,否则最重要的部分是"确定性、客观验证"。

简单来说,如果你告诉AI做某事,它需要某种方式能够自行验证它做对了。在软件中,这通常意味着运行测试、linter等,如果系统做错了就会失败。

这意味着你的测试和验证工具越好,你从模型获得的输出就越好。这不仅仅是测试数量的问题。它们必须是好的测试,具有智能断言和良好的错误信息。

这也意味着代理的成功涉及思考如何将任务分解成可以分别通过自动化测试、linter等进行客观验证的独立部分。

需要注意的是,输入的质量也很重要,并且在我们的控制之下。如果我们编写更好的文档和更清晰的代码,代理会表现得更好。令人惊讶的是,几乎所有帮助人类编写代码的东西也能帮助代理。

技术债务的真相

认为技术债务有价值的想法大多是个神话。当你做出糟糕的软件工程决策时,它会在几小时、几天或几周内拖慢你的进度。这是上限。

许多人认为需要数月或数年才能看到在软件设计上偷工减料的影响,但这根本不是真的。它几乎立即就开始产生影响。

做正确的事情的成本通常是几个小时,也许一天,而你几乎总是立即收回那个时间。也就是说,做对事情最终花费的时间与做错事情花费的时间通常是一样的。

“等等,什么?这怎么可能?我们偷工减料是为了节省时间!“结果几乎总是它根本没有节省你的时间!它使得处理变更更加混乱。它使得代码审查时间更长。它在测试期间以更混乱的方式失败,需要更长时间来调试。它几乎从未真正节省你的时间。

偶尔,你的道路上会有一些如此巨大的"岩石”,你根本无法移动它。没有人应该花费三个月设计一个新工具,只是为了你能一次性交付一个一天的功能。但这只是技术债务决策中极小的一部分。

这变得更加疯狂,因为如果你在过程中一切都做对了(你总是重构系统,使其看起来像是被设计成现在所做的样子),那么一切在整个过程中都保持相对容易。但如果你偷工减料,一切都会变得复合性地更加困难,以至于你生成了没有人能够移动的"岩石”。复杂性不是某种线性的东西,你可以稍后投入线性时间来解决。你绝对可能陷入一个如此糟糕的境地,以至于你公司中没有人有时间或专业知识来修复它。

这一切感觉如此无辜:“让我们偷工减料吧,它将帮助我们赶上这个截止日期”(这个截止日期通常是虚构的,你可以推迟几周而没有任何后果)。“很难弄清楚如何正确地做这件事,我们能推迟吗?“然后砰的一声,你很快发现自己陷入了一个沼泽,一切都变得困难,而且"我们不知道为什么!”

我最后给你留下一件事:当我每天直接编码时,我在这方面是完全不妥协的。我基本上无法忍受糟糕的代码 - 我必须重构它,否则我无法工作。不知何故,在我整个职业生涯的那部分中,我从未错过任何一个截止日期。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计