一名优秀程序员的三种美德

Larry Wall 著名的程序员“三种美德”——懒惰、急躁和傲慢——再次被拿来讨论,开发者们争论把恶习重新诠释为美德在今天是否仍然有意义。评论者围绕“傲慢”的含义展开争执,提出好奇心、恐惧和自豪等替代概念,并探讨这些特质如何在合理平衡下推动自动化、性能和代码质量。也有人反思这些观念与倦怠、沟通能力、工具变化(Perl、Python、Ruby)以及“为了好玩而黑客式编程”和在专业环境中构建可维护系统之间的差异有关。

重新诠释这三种美德

  • 许多人把“懒惰”看作一种推动力:自动化繁琐工作、交付最小可行方案,并避免过度复杂化;对一些人来说,这已经成了他们最好的职业特质。
  • “急躁”通常与希望更快的构建/测试周期以及更高性能的系统有关,但也有人认为它与懒惰重叠,而不是一个独立的特质。
  • “傲慢”是争议最大的:解释范围从为自己的作品感到自豪、希望代码不被他人批评,或相信自己能突破标准的“不要重复造轮子”规则,到将其视为拒绝合理批评的破坏性自负。

替代或补充的美德

  • 有人提出的建议包括:好奇心(作为学习和改进的驱动力)、对复杂性的恐惧(用来抑制傲慢)、犹豫(谨慎的前期设计)、愚蠢/健忘(推动测试、类型和文档)、判断力、智慧、谦逊,以及沟通能力。
  • 一些人认为原始表述中“把恶习转化为美德”的修辞方式很重要;另一些人更喜欢更传统的正面词汇。

设计、重写与 YAGNI

  • 一种观点认为:如果在规划和讨论上投入更多时间,就能避免因初始设计不完整而导致的高成本重写。
  • 反方观点则提到事后诸葛和幸存者偏差;你不可能在一开始就把它做得完美,因此应偏好简单设计、可逆决策以及重构,而不是“全面”的前期架构。
  • 文中强调了 YAGNI:避免为了推测性的未来需求而构建,但也要警惕“天真式简单”设计阻碍成长。

工作习惯、倦怠与动机

  • 过度工作被视为一种真实的弱点,会导致倦怠和健康问题;有人区分“努力工作”和“花大量时间”这两者,并指出工作意义和个人特质也是因素。
  • 一些评论提到,热爱编程会让部分人下班后仍继续写程序;也有人反对无偿的公司加班。

Perl、历史与其他语言

  • 讨论回顾了这些美德如何契合 Perl 的文化:强大、简洁、适合自动化,也常被“非官方”程序员使用。
  • Perl 被批评为“只能写不能读”、缺乏纪律;有人描述它在实践中被 awk/sed、Tcl、Ruby 和 Python 等工具替代。
  • Python 因其普及性和脚本便利性受到赞扬,但也被批评为让大量低质量代码得以产生。

沟通与元讨论

  • 编程被描述为本质上关乎清晰的书面沟通;对语言(任何语言)的掌握被认为与良好的编程能力高度相关。
  • 经典的面试题——关于优点和缺点——被嘲讽;一些人认为那种轻描淡写的“把美德说成缺点”的回答是危险信号。
  • 在线给建议被视为有风险,因为它会吸引批评,不过这也可能暴露出更好的方法。