@Lenciel

测不准派

今天有个前国脚发表了一番言论,难免大家讨论一下政治。

其实我挺不爱讨论这个的:学习李医生,说真话,干实事就好。

但这事情可以说几句。

因为他踢球我还挺喜欢看,所以我想了一下,为什么他变得那么极端。

小箭猪有一次跟我聊天的时候说,中国根本没有所谓的「左派」、「右派」,或者说,他们的内涵其实是跟人家正经的「左派」和「右派」反的。

我知道,他的意思是说,西方所谓的「左派」是比较激进的,「右派」则比较保守。

而在我们国家,「左派」是拥护中国模式,赞成国家主义的,所以反而保守;「右派」是拥护自由市场,反对政府干预的,所以反而激进。

他说得很对。

但中国肯定是有「左派」、「右派」的,在上世纪那「引蛇出洞」的运动中,找出好几十万「右派」,收拾得很惨烈。所以为了和历史上的「左派」「右派」区别开,我建议把国内两种倾向的人士称为「左翼」和「右翼」:可能不算严谨,但我们的政治生活本来也没那么严谨。

按照这样的定义,这位国脚肯定是极右的。

毫无疑问,任何事情搞得太极端都不好。

变得极端的唯一好处是,你可以立刻归属于一个组织:报团取暖是很多走投无路的人变得彻底极端的推动力。

我认识的大多人都不是极端人士,谢天谢地。

但是我认识的大部分人也不发表见解,如果发表,就是和和稀泥,把话往中间说,可能算「中间派」?

这也可以理解。

愿意说一点的,最近这几年,「左翼」的人明显更多一点。

我呢?我还是发表见解的,但是分布好像特别随机。

也就是说,一件事情,如果你让我来评价,我和「中间派」不太一样:有时候你会觉得我的见解很「左」,有时候你又会觉得挺「右」的。

你可以叫我这样的人「测不准」派。

如果你是一个「左翼」或者「右翼」的人,可能我们会吵架。

但类似《色戒》里那种「你如果不加入我们,就是个肮脏的异教徒」的压力对我不太起作用。

因为我也不代表谁,就是我自己对什么事情做好了,什么事情没做好的一点粗浅看法。

有时候我们这种见解比较随机的人,还会被那些坚定的「左翼」或者「右翼」(特别是「左翼」)嘲笑:爱憎分明的他们都会觉得我们和「中间派」一样,是懦夫。

「右翼」的同学感受也类似,觉得我们这些墙头草只是比「爱国贼」要好一点点。

我觉得我得替我们这样的人说句话。

指责「中间派」是懦夫不知道算不算有点道理,但大大方方成为一个「测不准派」需要很大的勇气:因为我们还是发表自己的见解,因此常常同时受到来自左翼和右翼的攻击。

并且作为一个并不真正存在的派别,亮出身份也不会真的有一大群同样的人在背后支持我们。

但我认识的人里,我愿意和他/她常聊天的,几乎都是这类人。

所以回到开头,为什么这位球星变得这样极端。

如果统计一下,历史上的很多的政治运动中,明星(体育的也好,演艺圈的也好)常常都会变得极端,最著名的案例大概是江青。而很多干科研或者工程的人,就只能挨整。

这背后的主要原因可能是,人类为了射好门或者演好戏接受的训练,完全不影响他们接下来是往左还是往右。

换句话说,无论你变得多么极端,你都能去春晚好好唱歌。

但是,有思考能力,特别是有独立思考的能力,是干另一些活的基础。

祝福祖国繁荣昌盛,也希望我们可以继续随机。

如何做预估

目录

每年年初和年中,世界上就会有很多人开始做预算。

你从预算就可以看出一个人的思考力。

过去(现在好像不太让这么问了)你去一些像 Google 这样的公司面试,会被问一些看起来很无厘头的问题,比如「一辆校车内可以容纳多少个高尔夫球? 」

这类问题其实有个门类叫「费米问题」:

In physics or engineering education, a Fermi problem, Fermi quiz, Fermi question, Fermi estimate, or order estimation is an estimation problem designed to teach dimensional analysis, approximation, and such a problem is usually a back-of-the-envelope calculation.

在《编程珠玑》里,它被称为 back-of-the-envelope calculations (BotEC)。

有点拗口。

其实就是说,在信息不完整的情况下,凭借对问题域的深刻理解和洞察,作出一些假设使得问题复杂度大大降低,从而可以在信封背面那么巴掌大的纸上写写算算,就得出和正确答案同一数量级内的近似解

费米自己是这方面的超级高手,在上课的时候经常问学生「地球的大气有多重」或者「芝加哥有多少钢琴调音师」,但他在这方面最有名的一个轶事是:

「 1945 年 7 月,世界上第一颗原子弹在美国新墨西哥州沙漠爆炸。40 秒钟后,爆炸引起的滚滚气浪冲到科学家们进行观测的大本营里。第一个起身的是物理学家费米。在原子弹爆炸之前,费米从笔记本里扯下一张纸,将其撕成碎片。当他感受到气浪所带来的第一下波动时,马上将碎纸片举过头顶抛撒出去。它们在空中飘动,然后纷纷扬扬地落到地面,距离费米大约有 2.3 米。经过初步估算,费米宣布这颗原子弹的爆炸能量为 1 万吨 TNT 当量。后来,相关专家经过几个星期的分析和计算,得到的数值和费米宣称的非常接近。」

回到预算。

产研等部门预算的难度在于,要在一个季度或者一年的开始就对机器、带宽、人力等资源根据业务的发展和系统的构建,进行预估。

你怎么在一张纸上推算出这些数值?

熟悉你的问题域

其实就是熟悉那些数字。

Jeff Dean 说,数字很重要。

好的架构师应该对系统的数字特别敏感

好的技术管理者不但应该熟悉架构师脑子里面的这些数字,还要熟悉一些管理上的数字。

多少人适合成为一个组?每个人最好有多少个直线汇报对象?各种类型的业务研发团队测试、开发、运维的比例是多少比较合适?

一点点数学

Little’s Law

之前我介绍过,这个跟队列有关的数学理论

\[L = \lambda * W\]

其中,\(L\) 是队列中的平均物件数,\(\lambda\) 是新物件到达队列的平均速度,\(W\) 是物件在队列中的平均等待数。

它可以用在各种地方,因为我们工作中的很多东西都可以被建模成队列。

比如分析你的研发团队效率的瓶颈在什么地方,是可以用上它的:你会发现 WIP 不是越高越好,也不是越低越好。

再比如你有一个服务平均需要 200 毫秒处理一个请求,如果它每秒需要处 1000 万个请求(rps),你要准备多少机器:

\[requests = 10Mrps * 0.2s = 2000K\]

如果每个请求占用 CPU 比较可观,那么就意味着需要有 2000K 线程处理请求,于是 8 核的机器大概需要 250K:嗯,这是一个例子,如果你做出来用户需求是这个体量的服务,恭喜你。

幂运算做近似

这个更容易:因为在对数空间,乘法就变成了加法。

比如,假设有 8 万用户以 120 mbps 的速度观看 UHD 视频。而我们租用的 CDN 承诺 1 Gbps 的速度,那么我们需要多少台机器?

我们做一些简化,把 8 万近似为\(10^{5}\),120M 近似为\(10^{8}\):

\[\frac{10^{5}*10^8bps}{10^{9}bps} = 10^{(5 + 8 - 9)} = 10^{4} = 10K\]

如果你精确的计算:

\[\frac{0.08M*120Mbps}{1000 Mbps} = 9.6K\]

10K 和 9.6K 对于预算阶段来说可以说没有什么区别,但是 (5 + 8 - 9) 可比下面那个好算多了。

其他

前面提到的这几个近似法则不是全部,还有一些比如 72 法则对你估算随着业务发展资源怎么准备也很有用。

对于「费米问题」更深的讨论,则可以看这里

但我主要想说的是:

  1. 熟悉基础设施、中间件的那些数字(主要是数量级),是做预算和做架构的基本功。
  2. 学会一些简单的数学法则,可以让快速做估算变得很轻松。
  3. 交给其他人的预算,体现了自己的思考能力,别瞎做。