×

Loading...

战无不胜的 80/20 定律 - 面试概率论的危害性 (4)

本文发表在 rolia.net 枫下论坛学计算机的都知道一个定律,那就是 80/20 定律: 一个程序的运行,80% 的时间会花在很少的一部分代码上,这部分代码只占全部代码量的 20%。

推广到大千世界,它的意思是说: 20% 的投入导致 80% 的产出。也就是说,会做的做两天就能考80分,不会做的做八天也只能考20分。

俺上高中的时候,是年级里最不用功的几个人之一,可是成绩却是年级的第一名。当时俺还沾沾自喜,现在想起来没准是 80/20 定律在作怪:俺成绩好,是因为俺用功用对了地方;好多同学整天趴在书本上成绩却不行,可能是他们的时间花错了地方。

跟网友讨论,俺说:知道什么重要,什么不重要,才是最重要的。网友问:那你说什么是最重要的?俺当时灵机一动,答曰:道理重要,操作不重要。现在想起来还真有道理。任何一个东西,道理肯定不到 20%,剩下的就是操作了。

当年 Java 刚出来,俺要用一个东西叫 RMI。俺写了一篇文章,也就一页纸。依俺看来,做 RMI,这一页纸足矣。后来俺一时糊涂,还买了一本专门讲 RMI 的书,竟然有 200 多页。跟俺的一页纸相比,这个是 200 / 1, 可见 80 / 20 是有道理的。

有一种说法,叫书越读越薄。其实这个过程也就是抓住 20% 而舍弃 80% 的过程。无论是学习还是工作,这种提纲挈领的能力都至关重要。

写到这里,俺突然发现,这个 80 / 20 定律,好像有两种情况。第一种是框架和细节。框架是 20%,细节是 80%。俺上面的例子好像都属于这种情况。

还有一种情况俺也说不好,但是俺觉得更重要。这种情况就是很小的一个东西,却能决定生死。这个小东西,毫无疑问是属于那个 20% 了。

当年老婆找第一份工作,一个函数名起了决定性作用,这个函数叫 invokeLater()。据面试她的人说,竟然有很多人不知道这个函数。这个函数是系统里最重要的概念之一,你不懂,面试就不会通过。这个 invokeLater(),才两个词,其重要性却能决定一个人面试的生死。

说到生死,大家有没有想过什么样的人最容易被 fire 掉?俺觉得是犯过大错误的人。有一次公司裁人,一个很能干的小伙被裁了,另外一个不能干的却没事。有人说,这是因为那个能干的小伙出过一次 production 事故。前天俺们开会,老板千叮咛万嘱咐,要 robust,要 robust,因为不 robust,就可能出 production 事故。

死容易,其实生也容易。码工有一个流派,叫 extreme programming。这个流派有一个名言叫 do the least thing that could possibly work。记得俺自己炒股的程序,从无到有,连 API 都要学,第一个版本也只花了一个晚上的时间。这个就是 least thing that could possibly work。后来俺在这个程序上又花了成千上万个小时,虽然功能强了,表面更漂亮了,但是不可否认,俺的第一版本就已经是一个完整的生命了。

每当有网友抱怨,说是工作太累,压力太大,俺就想,这些网友是不是不懂 extreme programming 的这个道理呢?least thing that possibly work,应该占不到全部工作量的 20%。如果先把这个 20% 做完了,然后再一点一点地加,加到 80% 的工作量就不干了,岂不是就不累了?

综上所述,生容易,那就是做东西要 work。不死也容易,那就是不要出事故。

有网友问,J2EE 什么重要?做码工什么重要?码工面试有没有那种生与死的问题?

俺有一个体会,不知道大家有没有同感。俺发现,码工在一个地方安顿下来以后,技术也会了,环境也熟悉了,其实日常的工作大部分都是分析问题解决问题。这些事情,在本质上跟技术没有多大关系,跟 business 也没有多大关系。把这些工作交给两千年前的孔子孟子或者讲师的偶像苏格拉底,俺相信他们一样能做好。

前不久要解决一个 Spring 的 bug,研究了一下 Spring 的代码,俺也有这种感触。Spring 的代码,其实也不是什么三头六臂,绝大多数也是 if-then-else,连俺这种土人都能看懂。不光能看懂,而且能看出他们的问题。比如这个 bug,俺觉得原因是他们在一个函数里做了不该做的事情,结果函数复杂了,运行起来更花时间了,而且还对函数的上游下游强加了不合理的要求。

这个道理,俺如果说给孔老夫子孟老夫子听,俺相信他们一样能懂。如果他们写这个函数,他们肯定不会犯这个错误。

回到前面的问题:码工什么最重要?俺觉得,知道什么地方该做什么事情最重要。Spring 的这个同学,就是在这个地方做了不该做的事情,而且他自己还不知道,跟他说了他还不服气。

推而广之,俺觉得码工最重要的问题是:什么是好程序,怎么写好程序?俺觉得这个不光是能让你进入 20% 强的问题,它甚至是码工面试能决定生死的问题。俺觉得,如果你对这个问题真是深有体会,真的能吹出来,吹的令人信服,你的面试肯定会成功。更多精彩文章及讨论,请光临枫下论坛 rolia.net
Sign in and Reply
Modify
Report