忘记了这本书是由于什么原因进入了我的想读列表,这次为了凑单就把它买了。作者 Steve Yegge 是从业 20 载的知名程序员,曾供职于亚马逊、Google,经常边喝酒边写吐槽博客,写完发表后就伏案大睡,以致把本打算发表到内网的吐槽不小心发到了外网,从而引起了 Google PR 部门的问候,也算是一朵奇葩了。

这本书总体我给三星(总共五星),里面有不少作者对各种编程语言的看法,我本人没用过那么多也就看看热闹,关于 Google 那一章没有特别打动我的地方也略过,下面摘录一些对我有用的内容:

编程语言里的宗教

软件工程有自己的政治轴心,一端是保守派,另一端是自由派。他们的价值观、看中的东西、核心理念,乃至动机都是完全对立的。

一个人的软件政治观主要受两股力量支配:

  1. 之前的编程经历
  2. 他们的老师、教授、导师、榜样,还有同事所拥有的软件政治观

保守派通常具有清晰统一的价值观,而自由派则比较散漫,仅仅是为了对抗保守主义才联合在一起。

保守和谨慎、厌恶风险是同义词。本质上,保守主义就是风险管理。

自由派的观点常常和年轻、理想主义、天真无邪联系在一起。在软件行业,自由主义主要是为了以最快的速度开发出新功能,同时保证系统的灵活性。当然,保守派也是以此为目标,只不过做法很保守,灵活性和生产力仍然是动机,但不再是主要动机,安全、性能才是最重要的考量。

两派的根本分歧在于:到底在安全上下多大功夫。

保守派更看重:

  • 软件发布之前硬尽量修复所有 bug
  • 程序员应回避错误
  • 程序员回避新语法
  • 代码必须通过编译器的安全检查
  • 数据必须遵循事先定义好的格式
  • 公共接口必须严格建模
  • 不允许存在危险和有风险的后门
  • 如果一个组件存在安全疑虑,那它不能发布
  • 代码性能要好

自由派:

  • 有 bug 没什么大不了,bug 无法避免
  • 为了避免菜鸟犯错就立下一堆规矩,完全是头痛医头 脚痛医脚的做法
  • 没必要让程序员远离新语法,只要有文档,有时间,自然能学会
  • 代码要简练,检测工具无法理解不是把代码写的又臭又长的原因,而是要把检测工具做的更聪明
  • 严格的数据定义会妨碍灵活性,数据未动,代码先行才是正确的做法
  • 公共接口应尽可能简单
  • 系统的灵活性决定了客户是否选择你,至于安全隐患,可以通过日志、监控、审核等手段缓解
  • 企业要敢于冒险
  • 过早优化是万恶之源

一支和谐的团队最好由单一人群组成,免得双方不停发生理念冲突。这就像每个地方的驾驶风格都不同,霸道点没关系,大家都一样就行。

注:我和作者都属于自由派

软件需要哲学家

编程语言都是宗教。任何宗教都会有一位教皇,他是精神领袖,神的代言人,通常是语言设计者。

有权力的宗教组织会分权力层级,编程语言也不例外。离权力中心越近,等级越高。你觉得自己可以通过贡献技术和文档升级,实际这完全只取决于你有多少信徒和粉丝,你的言论有多少人听到而已。

要敢于挑战自己的信仰,质疑是好事。

TL;DR

TL;DR 是 Too Long; Didn't Read 的缩写,意为太长、懒得读。最后附上作者自己写的 TL;DR:

  • 软件开发的方式多种多样,不存在谁好谁坏。但是它们都互相看不起
  • 好程序员之所以出色是因为熟能生巧
  • 只要你愿意,随时可以学习新语言
  • 如果你想要当经理,那你很可能不会是个好经理
  • Lisp 很难掌握,但它是唯一能让我继续快乐的语言
  • Emacs 很难掌握,但却是受益终生的投资
  • 离开舒适区,时不时学点新东西
  • 为自己写点东西,只有这样你才知道那是不是对的
  • 多笑一点,这很健康,也让人感觉良好
  • 记得自嘲,不过不要在公开场合大声自嘲,也不要忘了解释

PS: 这篇文章是在 iPad mini 上的 Notes app 里打出来的,还算好用