代码简洁之道:软件基础现已免费
2022年5月16日,作者:Max Kanat-Alexander
大约一年前,一位Twitter用户在一个帖子中标记了我和其他一些编程书籍作者,描述了在他们国家获取计算机编程书籍的障碍。我之前隐约意识到这些问题——世界上有许多国家,一本书的美元价格可能相当于一个人整周的工资。
我写书不是为了赚钱——我写书是为了传达信息并帮助人们。我通常认为,如果人们为一本书付费,他们更有可能真正阅读它,而重点是让人们阅读这本书,因为这是我改善软件行业的唯一途径。这本书仍然在销售(这对于计算机书籍来说是不寻常的,因为它已经发布了十年),但它赚的钱对我来说并不重要——让人们阅读这本书对我来说才是重要的。
一旦我意识到,如果必须付费,地球上有一大群人完全无法合法阅读这本书,我就与O’Reilly的编辑合作,看看我们是否能让这本书完全免费。
结果发现,由于他们无法控制的复杂原因,他们无法在亚马逊或O’Reilly商店免费提供这本书。但他们可以给我这本书的分发权,去掉封面,让我免费分发!
所以,你现在可以免费下载《代码简洁之道:软件基础》了!我希望这能让更多人阅读和理解软件设计的基本法则,并帮助使软件开发世界变得更好。
分享 点击在Facebook上分享(在新窗口中打开) Facebook 点击在LinkedIn上分享(在新窗口中打开) LinkedIn 点击在Hacker News上分享(在新窗口中打开) Hacker News 点击在Reddit上分享(在新窗口中打开) Reddit 点击在Threads上分享(在新窗口中打开) Threads 点击在X上分享(在新窗口中打开) X
7条评论 发表回复
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 谢谢! 回复
发表回复取消回复
联系 关于 书籍:《理解软件》 书籍:《代码简洁之道》
输入您的电子邮件… 订阅
Max Kanat-Alexander 6月27日 我目前认为,AI代理能够成功生成的输出数量和质量取决于:
- 模型的质量。
- 代理的质量。
- 输入的质量(如提示或其他上下文)。
- 代理可以独立运行的确定性、客观验证的质量。
我目前认为,除非你是模型开发者,否则最重要的部分是“确定性、客观验证”。
简单来说,如果你告诉AI做某事,它需要某种方式能够自行验证它做了正确的事。在软件中,这通常意味着运行测试、linter等,如果系统做错了,就会失败。
这意味着你的测试和验证工具越好,从模型得到的输出就越好。这不仅仅是测试数量的问题。它们必须是好的测试,具有智能断言和良好的错误消息。
这也意味着代理的成功涉及如何将任务分解成可以各自通过自动化测试、linter等客观验证的单个部分。
作为说明,输入的质量也很重要,并且在我们的控制之下。如果我们编写更好的文档和更清晰的代码,代理会做得更好。令人惊讶的是,几乎所有帮助人类编写代码的东西也帮助代理。
阅读更多2310分享
Max Kanat-Alexander 6月4日 技术债务有价值的想法大多是一个神话。当你做出一个糟糕的软件工程决策时,它会在几小时、几天或几周内减慢你的速度。那是上限。许多人认为需要几个月或几年才能看到在软件设计上偷工减料的影响,但这根本不是真的。它几乎立即开始。
做正确的事的成本通常是几个小时,也许一天,而且你几乎总是立即收回那段时间。也就是说,做对通常花费的时间与做错花费的时间相同。“等等,什么?怎么可能?我们偷工减料是为了节省时间!”结果几乎总是它根本不会节省你的时间!它使处理变更更加混乱。它使代码审查时间更长。它在测试期间以更混乱的方式失败,需要更长时间调试。它几乎从未节省你的实际时间。
偶尔,你的路径上会有一些“岩石”如此巨大,你根本无法移动它。没有人应该花三个月设计一个新工具,只是为了你能一次交付一个一天的功能。但那是技术债务决策中极小的一部分。
这变得更加疯狂,因为如果你在过程中做对一切(你总是重构系统,使其看起来像是设计来做现在做的事),那么一切在整个过程中都保持相对容易。但如果你偷工减料,一切都会变得复合性更困难,以至于你生成“岩石”,没有人能移动。复杂性不是某种线性事物,你可以后来投入线性时间修复。你绝对可以让自己陷入一种如此糟糕的情况,以至于你公司中没有人有时间或专业知识修复它。
这一切感觉如此无辜:“让我们偷工减料吧,它会帮助我们满足这个截止日期,”(一个通常是虚构的截止日期,你可以推迟几周而没有后果)。“很难弄清楚如何做对,我们能推迟吗?”然后砰,很快你发现自己陷入沼泽,一切都很困难,“我们不知道为什么!”
我最后留给你一件事:当我每天直接编码时,我在这方面完全 uncompromising。我基本上无法看糟糕的代码——我必须重构它,否则我无法工作。不知何故,在我整个职业生涯的那部分,我从未错过一个截止日期。
阅读更多12940分享
Max Kanat-Alexander 5月30日 我估计,我看到的或被告诉的每一万条坏建议中,有一条好建议。互联网充满坏建议,因为文明充满坏建议。文明充满坏建议,因为全球的教育大多不教人们思考、研究或确定什么是真的。相反,它教人们记忆和重复事实,其中大多数是不重要、不真实或无用的。
所以总的来说,我们不应该惊讶互联网(尤其是社交媒体)充满不重要、不真实或无用的信息。并非全部如此——我在网上学到了大量非常有用的东西。有大量有价值的内容。我会说,人们对事物的意见,无论是在报纸、博客文章、论坛还是其他什么,很少具有那种价值。
那么,要点是什么?嗯,最好有一些方法在开始依赖或向他人重复之前确定某事是否重要或有用的。最简单的工具是说:“它有效吗?”这条数据可靠地帮助你完成某事吗?它100%的时间有效,还是更少?
对于许多帖子,你会发现:这些数据根本无助于你做任何事。
阅读更多249分享
Max Kanat-Alexander 5月29日 你对系统做的任何变更在推出时都会收到某些人的负面反馈。这不是因为每个变更都有问题,而是因为用户习惯了系统的工作方式,他们不喜欢它改变了。他们可能批评新的用户界面,或有某种情感论点关于新东西为什么“糟糕”,但通常他们真的只是对任何变更发生感到不安。这不是什么不寻常的事;这是几乎所有人类中存在的一个因素。人们往往有一定 appetite 对于他们在一定时间内愿意经历的变化量,如果你超出那个,他们会不安。
重要的是识别人们的反馈是否仅仅是这种“变更厌恶” vs 关于有价值事物的真实反馈。有几种方法可以判断:
- 变更厌恶通常持续3到10天。如果你在推出变更后的前3到10天内从用户那里得到反馈,并且同一反馈不是由大量用户提供的,值得考虑用户的响应是否只是变更厌恶。
- 变更厌恶反馈通常是情感的。它可能是侮辱性的。它可能表达为只是意见(“新菜单的颜色丑陋”)vs 事实(“我测量了,新工具比旧工具慢10倍。”)。
在管理变更时,你试图避免的是创造如此多的变更厌恶以至于引起反抗。反抗基本上看起来像如此多的人生气以至于他们去找你的管理层并停止你的工作。当有疑问时,向更少的人推出更小的变更,以较慢的扩展速度。随着时间的推移,你将学会你可以推出多少变更,多快。永远不要做“大爆炸”发布,让你所有用户一次经历大规模变更。
现在,所有这些 said,永远不要将所有反馈归因于“变更厌恶”。通常人们确实有合法的反馈。如果许多人提供你相同的事实反馈,你看着它,他们的反馈有道理,你认为修复它会改进产品,那很可能不是变更厌恶。另外,说“这只是变更厌恶”并不意味着你应该完全忽略反馈。你至少应该承认它,让人们知道他们被听到了。这确实意味着你不应该与那个人争论或试图与他们推理,因为他们正在有情感反应,你试图用“逻辑”说服他们无济于事。如果你认为是变更厌恶,你承认他们,他们只是继续与你斗争,有时你应该忽略他们并继续做你的工作。如果他们3天后带着更合理的论点回来,那么你知道不仅仅是变更厌恶,而且他们可能那时更有帮助。
阅读更多274分享
加载更多
© 2025 版权所有。由The Fox提供支持。 管理同意联系 关于 书籍:《理解软件》 书籍:《代码简洁之道》 转到顶部