代码简洁性
理解软件
2017年10月10日 作者:Max Kanat-Alexander
大家好,我出版了一本新书!书名叫《理解软件》。
这本书收录了我自《代码简洁性》出版以来所有关于软件开发和团队合作的内容,外加一些从未在任何地方发表过的全新内容。实际上,书中包含了我2008年写的一篇最喜欢的文章,但之前从未发表过。
所有内容都经过精美的排版设计,经过精心整理和组织,以达到最佳可读性。我对这本书真的很满意,也期待听到大家的反馈。
出版社介绍
《理解软件》涵盖了编程的许多领域,从如何编写简单代码到对编程的深刻见解,再到如何在你所做的工作中少犯错误!你将发现软件复杂性问题、其根本原因,以及如何运用简洁性创建优秀的软件。你将以前所未有的方式审视调试,以及如何在团队合作中保持快乐。
Max从他传奇的博客"代码简洁性"中精选了一系列精心撰写的文章、思考和建议,涉及在软件行业工作和成功的经验。Max精心创作了43篇文章,这些文章有能力帮助你避免复杂性、拥抱简洁性,从而成为更快乐、更成功的开发者。
Max的技术知识、洞察力和善良为他赢得了代码大师的地位,他的想法将激励你并帮助刷新你应对开发挑战的方法。
你将学到什么
- 了解如何为你的编程世界带来简洁性和成功
- 复杂性的线索 - 以及如何构建优秀的软件
- 简洁性与软件设计
- 程序员原则
- 明星程序员的秘密
- Max对软件行业的观点和解读
- 为什么程序员会犯错以及如何少犯错
- 用两句话概括软件设计
- 什么是bug?
- 深入调试
你可以在亚马逊、出版社直销或任何其他销售编程书籍的地方购买。
-Max
近期动态
AI工程师代码峰会
3天前 我很高兴宣布,我将于11月20日在纽约市的AI工程师代码峰会上发表演讲。过去几年关于软件工程的未来存在很多不确定性。在这次演讲中,我将讨论我们可以应用的原则,以确保无论发生什么,这个未来都能为你的业务带来好的结果。
代码复杂性测量的困境
6天前 从2011年到2015年定期周会停止期间,我几乎每周都参加Google代码健康小组的会议。这是一个非常棒的会议,有一个核心小组几乎总是参加,加上每周都有一些临时参与者,他们希望在自己领域获得代码质量、测试或重构方面的帮助。
大多数情况下,会议作为一个支持小组,为那些关心代码质量并希望在自己领域采取行动的人服务。他们会来抱怨他们很关心但很难让别人也关心。我们会支持他们,说我们真的很关心,他们应该继续努力,然后他们会回到自己的领域做出伟大的事情。
然而,几乎每周都有人来问我们同样的问题:“我如何客观地测量代码复杂性?“周复一周,我们会给他们同样的答案:“没有办法做到,请不要这样做。”
这个小组的负责人代表了代码质量和重构领域世界上一些最有经验的工程师,随着时间的推移,我们都得出了相同的结论:代码复杂性测量行不通。所有尝试制定量化指标(圈复杂度、统计静态分析失败、确定内聚和耦合的算法)都失败了——它们让团队走向错误的道路,并没有解决真正阻碍开发者的重要问题。
最终,我意识到为什么这些指标行不通,而且永远不会行通。这是因为代码"简单"的定义是:易于阅读、理解和正确修改。“阅读"和"理解"本质上都是主观的。只有人类能告诉你某物是否易于阅读。
有些人希望现代的LLM能在这方面提供帮助。我愿意在看到证据时相信这一点,但现在这实际上是所有模型都 consistently 糟糕 的领域:告诉你是否产生了高质量的输出。它们在发现特定问题和以代码审查形式提供具体指导方面表现不错。但它们完全缺乏经验丰富的软件工程师在创建真正简单软件系统方面的判断力。无论你告诉它们多少次"要简单"或"编写好代码”,它们就是做不到。
所以这仍然是事实:代码质量本质上是主观的,如果你想理解它,你需要关于它的主观数据。这是我见过的唯一有效的方法。
优秀开发者体验的要素
10月13日 为什么Google拥有如此出色的开发者体验?它只是在这方面花了比任何人都多的钱吗?
嗯,是的,如果你把花在Google基础设施上的所有人力成本加起来,Google可能在开发者体验上花的钱比任何人都多。但这实际上不是Google在这方面成功的核心原因,因为Google开发者体验的早期 并没有 涉及大量工程师。实际上涉及的是相对较少的优秀工程师,他们随着时间的推移相当缓慢地构建工具。Google一些最受欢迎的工具最初总共只有三四人构建。
关键在于,这些工程师被允许专注于开发者基础设施的基础工作,无论需要多长时间都要把它做好。每个人都在朝着开发者体验的长期全局最大值努力,而不是短期即时需求。优秀的工程师被赋予自由去问诸如"完美的构建工具应该是什么样子"这样的问题,然后尝试构建它。对于源代码控制、代码审查、编程语言基础设施、CI、IDE、通用库以及开发者体验的许多其他部分也是如此。当然,有时我们在这个过程中构建了糟糕的东西,但公司足够关心把它做好,以至于我们(通常)会回去修复它,最终。
Google开发者体验和速度的关键在于这种对软件工程基础的关注。这不仅存在于开发者工具团队中,而且遍布整个公司——Google的工程师比我在任何其他地方看到的都更关心代码质量、测试等。
技术领导者在行业中其他地方最常犯的错误之一就是未能关注所有这些工程基础。代码库可维护吗?你是否有需要的基本工具来高效、有效地构建可靠、高质量的软件?是否有系统确保新软件工程师能够快速上手项目,并随着时间的推移提高他们的技能?等等。
相反,我经常看到领导者坚持在破碎的基础上紧急解决即时问题,没有任何 真正 在未来解决这些基础的计划。这有点像作为一个酒店建造者,看到所有其他酒店都有很棒的顶层套房,然后坚持让团队建造一个美丽的顶层套房,而建筑却有裂缝的地基和漏水的管道。修复那个地基可能很困难,但如果你不这样做,你肯定会后悔。
基础有时感觉抽象或不重要,因为它们不是你被要求交付的即时产品。但让我告诉你,如果你想 能够 交付 任何东西,基础才是最重要的。