第一次读这本书竟然已经是五年前了,最近在推上看到有人提及,就又回去翻了一下。还是有很多新感受(或者说记起来很多已经忘了的点),在这里梳理一下。

关于大公司

大公司为了避免设计上的灾难,选择了减少设计结果的标准差。但是当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利润的可能性排除在外。这对大公司来说不是问题,因为生产特别优秀的产品不是它们的获胜手段。大公司只要做到不太烂,就能赢。

对这一点如果没有在大公司待过或许不能完全体会,大公司上架一个新的产品要考虑的因素特别多,因为有积累有历史包袱,而且还有声誉上的考量。这就导致你或者小团队不能完全天马星空探索新东西,因为机会成本太高。所以一定规模以上的公司总体做事一定是偏谨慎的,因为即使谨慎的小步走,凭借用户基数积累也能获得超高的收益。这对于工程师来讲就是双刃剑了,一方面只要继续走老路就能有稳定发展,另一方面对新技术新趋势敏感性变差可能不利于成长。

而这方面创业公司包袱就比较少,可以探索前沿的领域,尝试最新的语言和平台,因为本来就是博个出位,所以不必列太多繁文缛节。但是风险就是可能一着不慎满盘皆输,可是对于优秀的工程师来说倒是有更多实践自己想法或者说是成长的机会。

关于合作

需要合作,但是不要“合”得过头。如果一个代码块由三四个人共同开发,就没有人真正“拥有”这块代码。最终,它就会变得像一个公用杂物间,没人管理,又脏又乱,到处堆满了冗余代码。正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。

我觉得这段话把软件开发应该怎么合作讲的很清楚了,要合作但是也要清晰边界。这些年工作见过太多类似的三不管项目,每个人似乎都在里面有代码,但是每个人都不能负责。出现这样的局面,可能是业务推进过快,尤其是近年来各种云原生应用兴起,代码孤岛越来越多,这个时候就更需要有管理者出来定期清理明确边界。我认为这是manager非常重要的职能之一。

心理周期

黑客就像画家,工作起来是有心理周期的。有时候,你有了一个令人兴奋的新项目,你会愿意为它一天工作16个小时。等过了这一阵,你又会觉得百无聊赖

心理周期是一个提起来大家都知道,但是在实际工作过程中往往又很容易忽略的事情。与之相对应的一个概念是– 如何休息。相信很多工程师会碰到这种情况,一个bug或者难题钻研了好久就是没有头绪,投入时间可能从一两小时到一两天,整个人都要崩溃了。最后可能是被其他事情岔开了一会儿,或者仅仅是睡了个好觉,这个问题就迎刃而解了。所以还是要意识到并尊重这种心理周期。然而知易行难,如我自己就有bug不过夜的坏习惯。。

永远质疑

如果你想要清晰地思考,就必须远离人群。但是走得越远,你的处境就会越困难,受到的阻力也会越大,因为你没有迎合社会习俗,而是一步步地与它背道而驰。

这段话我能理解作者的意思,但是我可能对这个讲法有不同看法。因为有时候质疑的成本是很高的,尤其是那些因为质疑而错失的机会。比如在一个组里面,有人提出了一种新的思路方法,有几个人赞同并且得到上级的首肯可以试行。你其实对这个方案是有质疑的,但这个时候你是跟还是不跟?跟的话可能违背你的意愿,但是不跟就可能错失机会。我想这时候如果是一个非“天才”开发者,最好还是先收起质疑,先参与进去看看,因为即使失败了也不用你承担,同时还可能获得意想不到的成长和友谊(也很关键)。

选难的那个

如果你有两个选择,就选较难的那个。如果你要选择是坐在家里看电视,还是外出跑步,那就出去跑步吧。这个方法有效的原因可能是遇到两个一难一易的选择时,往往出于懒惰的缘故,你会选择较易的那个选项。在意识深处,你其实知道不懒惰的做法会带来更好的结果,这个方法只是迫使你接受这一点。

作者是在讲关于创业项目的选择方面,要选比较难,换句话说是壁垒比较高的赛道。这不仅对于创业,对于生活各方面也是一个金科玉律。之所以要不断强调这点,因为这是反人性的,人总是会下意识的走捷径,避免动脑子。但是这里我想加一点,就是要善于识别哪些是必要的难,哪些是人为创造的难,这也至关重要。

快速试错

如果你正在设计某种新东西,就应该尽快拿出原型,听取用户的意见。

这句话在FB叫做"Move fast break things" ,在国内各大厂叫做 “小步快跑”。除非你没有竞争压力,大概这已经是互联网公司的一种共识了。对于互联网软件这种更新换代极快的软件形式,这当然是对的。但是你可否想过,这其实也是万恶“996”的源头,接受与否,这就是目前的现实。

另外,作者花了大量篇幅讨论各种编程语言的优劣,尤其是推崇其当时创业所用的LISP。我认为如果放在当前云原生当道的环境或许可以再重新斟酌,毕竟正在发生的是,你用什么语言不太重要了,重要的是你打包出来的功能是否符合预期。当然对于真正的黑客,他们还是对哪种语言顺手更加执着。

最后感叹一下一个好的翻译者对一本中文技术书籍是多么的重要,因为包括技术科普和纯技术的书籍也看了不少,深受各种生硬的机器+人工翻译的书籍阅读之苦,往往都是看两眼中文版,马上就去搜原版。但是阮老师翻译的这本是我可以一直看下去,甚至觉得有些用中文甚至表达更加传神的,比如这段

我们需要的是一种可以随意涂抹、擦擦改改的语言,我们不想正襟危坐,把一个盛满各种变量类型的茶杯,小心翼翼放在自己的膝盖上,为了与一丝不苟的编译器大婶交谈,努力地挑选词语,确保变量类型匹配,好让自己显得礼貌又周到。

你完全感受不到这是一篇翻译文章,甚至想让译者多发挥几句。