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