《代码简洁之道:软件基础》现已免费
2022年5月16日,作者:Max Kanat-Alexander
约一年前,一位Twitter用户在讨论中提到了我和其他编程书籍作者,描述了在他们国家获取计算机编程书籍的障碍。我之前对这些问题的了解较为有限——世界上有许多国家,一本书的美元价格可能相当于一个人整周的工资。
我写书的目的不是为了赚钱——而是为了传递信息并帮助他人。我通常认为人们如果为书籍付费,更有可能真正阅读它,而重点是让人们阅读这本书,因为这是我改善软件行业的唯一途径。
这本书至今仍在销售(这对计算机书籍来说很不寻常,因为它已经发布十年了),但赚取的金钱对我并不重要——重要的是让人们阅读这本书。
当我意识到地球上有一大群人如果必须付费就完全无法合法阅读这本书时,我与O’Reilly的编辑合作,看看是否能让这本书完全免费。
结果发现,由于他们无法控制的复杂原因,他们无法在亚马逊或O’Reilly商店免费提供这本书。但他们可以将书籍的分发权交给我,去掉封面,让我免费分发!
所以,你现在可以免费下载《代码简洁之道:软件基础》了!我希望这能让更多人阅读并理解软件设计的基本法则,帮助软件开发世界变得更好。
分享选项:
- Hacker News
- Threads
- X
读者评论
sergey 说:2022年5月16日 晚上9:45 现在最好的主要编程书籍之一免费了,真是太棒了。谢谢!
Max Kanat-Alexander 回复:2022年6月7日 凌晨2:03 谢谢,sergey!我很高兴能以这种方式帮助人们。
STEVEN GORDON 说:2022年5月17日 上午8:32 在你的书中测试实际上是被事后考虑的,这告诉我你对软件开发的理解存在漏洞。自动化测试需要放在首位,而不是最后。它是表达和验证代码意图的关键(而不是随着时间推移变得越来越不真实的妄想评论),能够通过安全重构提高简洁性,并在整个生命周期内维护代码。
Max Kanat-Alexander 回复:2022年6月7日 凌晨2:03 嘿Steven。我想你可能误解了这本书关于测试的意图或内容。关于这个话题有很多要说的,但我写的最好总结在这里:https://www.codesimplicity.com/post/the-philosophy-of-testing/
murtagy 说:2023年5月26日 凌晨3:21 我猜你没有在代码库中工作过,当测试追着你并锁定糟糕的接口和奇怪的合约时
Yubraj Lama 说:2022年6月20日 凌晨12:12 《代码简洁之道》中的软件设计基本法则太棒了。谢谢你,Max。
Max Kanat-Alexander 回复:2022年10月14日 上午5:21 谢谢!
技术洞见
优秀开发者体验的构建哲学
Google拥有出色开发者体验的关键不在于投入巨额资金,而在于让工程师能够专注于开发者基础设施的基础要素,直到做对为止。每个人都朝着开发者体验的长期全局最大值努力,而不是短期即时需求。
优秀的工程师被赋予自由去思考"完美的构建工具应该是什么样子",然后尝试构建它。这在源代码控制、代码审查、编程语言基础设施、CI、IDE、通用库和许多其他开发者体验组成部分中都是如此。
Google开发者体验和速度的关键在于对软件工程基础的关注。这不仅体现在开发者工具团队中,而是贯穿整个公司——Google的工程师比我在其他地方见到的更关心代码质量、测试等。
技术领导者最常犯的错误之一是未能关注所有这些工程基础。代码库可维护吗?你是否有基本工具来高效构建可靠、高质量的软件?是否有系统确保新软件工程师能够快速上手项目,并随着时间的推移提高技能?
相反,我经常看到领导者坚持在破碎的基础上紧急解决即时问题,没有任何真正解决这些基础问题的计划。这就像酒店建造者看到其他酒店都有漂亮的顶层套房,然后坚持团队建造美丽的顶层套房,而建筑却有裂缝的地基和漏水的管道。修复地基可能很困难,但如果不修复,你肯定会后悔。
基础有时感觉抽象或不重要,因为它们不是你被要求交付的即时产品。但让我告诉你,如果你想要能够交付任何东西,基础才是最重要的。
AI与软件开发的本质
计算机从来不是任何事情的原始原因。它们从根本上没有意志力(在没有先前指令的情况下做出导致行动的决策的能力)。总是有某个地方的人类给了计算机指令,它才能做正在做的事情。
这对AI和所有其他计算机软件都是一样的。
这不仅仅是一个高层次的哲学原则。它实际上高度适用于我们在工作环境和生活中应用和使用AI的方式。
当我们说AI编码助手改善软件开发时,实际上不是AI在做这件事。而是我们向开发者提供助手,然后他们有效使用它。很容易认为我们只需向开发者撒上魔法仙尘,魔法仙尘就会让他们更高效,但现实中这需要工作和关注,而这项工作和关注是关于人类操作技术。
每当你听到有人声称计算机、软件或任何AI系统做了某事时,退一步思考:“等等,人类实际上在那里做了什么?“理解这一点将比仅仅阅读LinkedIn上的头条新闻和肤浅热点解读让你走得更远。
软件系统问题的解决之道
通常,解决软件系统问题的方法是分配软件工程师来解决问题。
将问题分配给软件工程师的危险在于,他们会编写软件来解决它。
当你看到软件系统中长期未解决的问题时,通常意味着没有人被分配来解决那个具体问题。
当你看到不必要的软件被编写时,几乎总是因为软件工程师被分配来解决某个问题,并决定编写软件是解决方法。