Hacker News 中文摘要

RSS订阅

塑造我的软件随笔 -- Software essays that shaped me

文章摘要

作者回顾20年编程生涯中影响深远的几篇软件文章,包括Joel Spolsky的代码质量12准则、Fred Brooks的软件工程本质论等,这些文章改变了他的思维方式。

文章总结

那些塑造我的软件工程经典文章

二十年前,在我获得第一份编程工作之前,我就开始阅读软件技术博客。至今我已读过数千篇相关文章,但只有少数几篇真正改变了我的思维方式。

1. 《乔尔测试:12步写出更好的代码》(2000)

作者乔尔·斯波尔斯基提出了12个问题,用于评估企业对开发团队的投入程度: 1. 是否使用源代码控制? 2. 能否一步完成构建? 3. 是否每日构建? 4. 是否有缺陷数据库? 5. 是否先修复缺陷再写新代码? 6. 是否有最新进度表? 7. 是否有规范文档? 8. 程序员是否有安静的工作环境? 9. 是否使用最好的工具? 10. 是否有测试人员? 11. 面试时是否要求编写代码? 12. 是否进行走廊可用性测试?

这篇文章的核心在于质问企业:你是否尊重开发者?它帮助我在职业生涯中寻找真正重视开发者的雇主。

2. 《解析而非验证》(2019)

作者亚历克西斯·金提出:应该通过类型系统将验证过的数据转换为新类型,而不是简单地验证数据。例如,将用户名验证函数改为解析函数,确保只有通过验证的数据才能进入系统。这种方法显著提高了代码的安全性和可靠性。

3. 《没有银弹》(1986)

作者弗雷德·布鲁克斯将软件工作分为: - 本质复杂性:必须完成的核心逻辑工作 - 偶然复杂性:工具和环境带来的额外工作

他认为任何技术进步都无法带来10倍的效率提升,因为本质复杂性始终存在。这一观点让我对"取代程序员"的各种炒作保持清醒。

4. 《选择》(2000)

同样是乔尔·斯波尔斯基的作品,讨论用户界面设计中的选择成本。文章指出:每个选项都要求用户做出决定,应该尽量减少用户需要做的决策。这一原则不仅适用于GUI设计,也适用于API和命令行工具的设计。

5. 《应用兼容层是为客户而非程序存在的》(2010)

微软工程师雷蒙德·陈用幽默的比喻批评了那些依赖系统兼容性而非主动适配新系统的开发者。虽然具体观点值得商榷,但它教会我如何更好地影响用户行为。

6. 《不要在测试中放入逻辑》(2014)

作者埃里克·库夫勒指出:测试代码应该追求清晰而非DRY原则。过度抽象的测试反而会掩盖问题。这篇文章彻底改变了我编写单元测试的方式。

7. 《一点点原生JavaScript就能做很多事》(2020)

作者朱莉娅·埃文斯让我意识到,现代JavaScript已经足够强大,很多场景下根本不需要框架。这一发现让我在开发TinyPilot时放弃了Vue,转而使用原生JavaScript,获得了更好的开发体验。

8. 《选择无聊的技术》(2015)

作者丹·麦金利建议:新项目应该优先选择成熟稳定的技术,而非追逐最新潮流。他将技术选择比作"创新代币"——每个项目只有有限的创新额度。这一理念与朱莉娅的文章相互印证。

9. 《我把自己锁在了数字生活之外》(2022)

作者特伦斯·伊登设想了所有设备同时丢失的最坏情况,探讨了数字灾难恢复的重要性。这篇文章促使我重新思考数据安全和灾难恢复策略。

特别提及:布拉德·菲茨帕特里克关于输入验证的见解(2009)

"计算机很擅长处理这些破玩意儿"——这句粗鲁但真实的建议让我在设计输入表单时更加人性化,允许用户自由输入格式(如电话号码中的空格和连字符),而不是强迫他们遵守严格格式。

这些文章共同塑造了我的软件开发理念,从代码质量到技术选型,从用户体验到系统安全。它们不仅是技术指导,更是思考软件开发本质的窗口。

评论总结

以下是评论内容的总结:

  1. 关于技术文章的价值
  • AdieuToLogic认为"Parse, don't validate"是经典文章,但对"Don't put logic in tests"持不同意见,认为测试代码也是生产代码 "The 'Parse, don't validate' paper is classic IMHO" "I disagree with 'Don't put logic in tests'"
  1. 影响深远的资源推荐
  • ChrisMarshallNY推荐McConnell关于软件质量的文章,尽管其观点不受普遍欢迎 "This was a watershed for me" "McConnell isn't especially popular, hereabouts"

  • chrisweekly推荐Every Layout网站,称其彻底改变了对CSS的认知 "I have to mention every-layout.dev as an absolute game-changer"

  1. 开发者思维模式
  • chrislh提到"Grug Brained Developer"概念印象深刻 "The Grug Brained Developer is one that always sticks in my head"

  • matt_daemon讨论"Choose Boring Technology"文章,认为其观点直观到无需阅读 "it felt so intuitive that I didn't need to read it"

  1. 数字身份安全问题
  • marc_abonce通过文章指出完全算法化认证的风险,强调保留人工流程的重要性 "No amount of pleading will let me without the correct credentials" "Everyone should understand this problem"
  1. 软件工程案例研究
  • thangalin推荐Therac-25事故调查和NASA软件开发实践的文章 "Nancy Leveson's Therac-25 investigation" "They Write the Right Stuff"
  1. 程序员寓言
  • jeberle推荐《两个程序员的寓言》,认为其精辟总结了编程哲学 "Sums things up nicely" "The Parable of the Two Programmers"