代码简洁之道:软件开发的本质与挑战

本文深入探讨软件开发的本质,分析代码复杂性的根源,强调代码简洁性的重要性。作者分享在Google代码健康小组的经验,指出代码质量的主观性,并讨论开发者体验的核心要素,为构建高质量软件提供深刻见解。

代码简洁性

理解软件

2017年10月10日 作者:Max Kanat-Alexander

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

这本书收录了我自《代码简洁性》出版以来关于软件开发和团队合作的所有文章,还包含一些从未在任何地方发表过的全新内容。实际上,书中包含了我2008年写的一篇最喜欢但从未发表的随笔。所有这些内容都被精心排版、整理和组织,以达到最佳可读性。

我对此感到非常满意,也期待听到大家的反馈。

来自出版商的介绍:

《理解软件》涵盖了编程的许多领域,从如何编写简单代码到对编程的深刻见解,再到如何在你所做的工作中少犯错误!你将发现软件复杂性的问题、其根本原因,以及如何利用简洁性创建优秀的软件。你将以前所未有的方式审视调试,以及如何在团队合作中保持快乐。

Max从他传奇的博客"代码简洁性"中精选了一系列精心撰写的随笔、思考和建议,关于在软件行业工作和取得成功。Max撰写了43篇随笔,这些随笔能够帮助你避免复杂性、拥抱简洁性,从而成为更快乐、更成功的开发者。

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

你将学到:

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

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

-Max

评论

Saim Aksr 说: 2017年10月19日下午5:27 有趣的文章,代码应该始终保持干净且对其他开发者可读。

回复

Urvish S 说: 2018年12月11日上午12:11 这对软件开发领域的新手将是极大的支持。

回复

Dig in and create you own parser library – Tech Musings By Dave 说: 2024年1月3日下午12:24 […] Max Kanat Alexandar的《理解软件》是一本超级快速的读物,应该是任何新开发者(工程师)的必读材料。它为你提供了简单的指导原则和解决问题的方法。书中有一部分在一年前一直在我耳边回响:“优秀的开发者会阅读每一行代码”。我以前从未考虑过这一点。就像对于你支持的应用/公司,你应该理解在生产环境中运行的每一行代码。这包括你正在使用的第三方库。回到2021年,我的团队正在编写一个能够处理各种充满工作的XML文件的新应用。(我曾为Getwork/LinkUp工作)[…]

回复

最新动态

Max Kanat-Alexander 11月3日

我很高兴地宣布,我将于11月20日在纽约市的AI工程师代码峰会上发表演讲。过去几年关于软件工程的未来存在很多不确定性。在这次演讲中,我将讨论我们可以应用的原则,以确保无论发生什么,那个未来对你的业务都是美好的。

希望能在那里见到你!

阅读更多 935次分享

Max Kanat-Alexander 11月1日

从2011年到2015年左右我们停止定期周会,我几乎每周都参加Google代码健康小组的周会。这是一个非常棒的会议,有一个核心小组几乎总是参加,再加上每周一些想要在他们领域获得代码质量、测试或重构问题帮助的临时参与者。

大多数情况下,会议作为一个支持小组,为那些关心代码质量并希望在他们领域做些事情的人服务。他们会出现,抱怨他们如何关心却难以让他人也关心。我们会支持他们,说我们真的很关心,他们应该继续前进,然后他们会回到自己的领域做出伟大的事情。实际上令人惊讶的是,那个会议的许多参与者后来成为了Google最资深的技术负责人之一。(关于长期职业成功的一个好建议:如果你专注于做正确的事情,尽管面临反对或困难,从长远来看,这几乎总是对你职业生涯正确的事情。我们确实在代码健康小组中一次又一次地看到这种情况发生。)

然而,几乎每周,都会有人出现在会议上问我们同样的问题:“我如何客观地测量代码复杂性?“周复一周,我们会给他们同样的答案:“没有办法做到,请不要这样做。”

这个小组的负责人代表了代码质量和重构领域世界上一些最有经验的工程师,随着时间的推移,我们都得出了相同的结论:代码复杂性测量不起作用。所有尝试制定量化指标(圈复杂度、计算静态分析失败、确定内聚和耦合的算法)的尝试都失败了——它们引导团队走向错误的道路,并没有解决真正阻碍开发者的重要问题。

最终,我意识到为什么这些指标不起作用,而且永远不会起作用。这是因为代码"简单"的定义是:易于阅读、理解和正确修改。“阅读"和"理解"在那里本质上是主观的。只有人类能告诉你某物是否易于阅读。

有些人希望现代的LLMs能够在这方面提供帮助。当我看到时我愿意相信,但现在这实际上是所有模型都持续表现糟糕的领域:告诉你是否产生了高质量的输出。它们在发现特定问题并以代码审查的形式提供具体指导方面表现良好。但它们完全缺乏经验丰富的软件工程师在构建真正简单的软件系统方面所具有的判断力。无论你告诉它们多少次"要简单"或"编写好代码”,它们就是无法做到。

所以这仍然是事实:代码质量本质上是主观的,如果你想理解它,你需要关于它的主观数据。这是我见过的唯一有效的方法。

阅读更多 9118次分享

Max Kanat-Alexander 10月15日

我很高兴今年在2025年开发者生产力工程峰会上发表主题演讲之一。我谈到了什么造就了优秀的开发者体验。特别是,这次演讲涵盖了我们在所有开发者体验工作中试图优化的三个核心事项。希望它有所帮助! :) https://lnkd.in/g-AJtJ2b

阅读更多 什么造就了优秀的开发者体验? 846次分享

Max Kanat-Alexander 10月13日

为什么Google有如此出色的开发者体验?它只是在这方面花费了比任何人都多的钱吗?

嗯,是的,如果你把花在Google基础设施上的所有人力成本加起来,Google可能在开发者体验上花费了比任何人都多的钱。但这实际上不是Google在这方面成功的核心原因,因为Google开发者体验的早期并没有涉及大量工程师。它实际上涉及相对较少的一些体面工程师,他们随着时间的推移相当缓慢地构建工具。Google一些最受喜爱的工具最初是由总共三四人构建的。

关键是这些工程师被允许专注于开发者基础设施的基础,无论需要多长时间才能做好。每个人都在朝着开发者体验的长期全局最大值努力,而不是短期即时需求。非常优秀的工程师被赋予自由去问诸如"完美的构建工具应该是什么样子"这样的问题,然后尝试构建它。源代码控制、代码审查、编程语言基础设施、CI、IDE、通用库以及开发者体验的许多其他部分也是如此。当然,有时我们在这个过程中构建了糟糕的东西,但公司足够关心做好它,以至于我们(通常)会回去修复它,最终。

Google开发者体验和速度的关键是对软件工程基础的这种关注。这也不仅仅是在开发者工具团队中,而是贯穿整个公司——Google的工程师比我在任何其他地方见过的都更关心代码质量、测试等。

行业其他地方技术领导者最常犯的错误之一是没有关注所有这些工程基础。代码库可维护吗?你是否有基本工具来高效、有效地构建可靠、高质量的软件?是否有系统确保新软件工程师能够快速上手项目,并随着时间的推移提高他们的技能?等等。

相反,我经常看到领导者坚持在破碎的基础上紧急解决即时问题,没有任何计划真正在未来解决这些基础。这有点像是一个酒店建造者,看到所有其他酒店都有很棒的顶层套房,然后坚持团队建造一个美丽的顶层套房,而建筑却有裂缝的地基和漏水的管道。修复那个地基可能很困难,但如果你不修复,你肯定会后悔。

基础有时感觉抽象或不重要,因为它们不是你被要求交付的即时产品。但让我告诉你,如果你想能够交付任何东西,基础才是最重要的。

阅读更多 24443次分享

加载更多

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