封面:我最喜欢的老师,数学帝,高考杀手葛军。
假设面对一门数值分析课的大作业,需要在尽可能少的计算次数下,尽可能精确地解决大量等式,你只有非常少的时间去完成,你的选择是使用高斯消去或者是用比如GMRES和jacoby这样的迭代法,你应该怎么做?
这是我大学时曾经面临的一道问题。 当时面对的最大挑战其实是对代价的估算, 到底这个n(等式以及未知数的数量)是否足够大到高斯消去不适用,或是我们的迭代方法的收敛效率高到可以无视直接解法。
我们人生中经常面对这样的问题:技术需要投入,总有trade off, 我们实施一件事带来的好处的同时也会增加开销。 对创业者来说每一次产品的迭代和发布,每一次融资,每多招聘一个人负责一件事情,也许都有其他的机会成本在里面, 你也许可以选择中介,或者是开发一套自动化系统来解决你需要人力解决的问题,但是这笔账到底怎么算? 更要命的是,别人会这样打击你:你还在算的时候人家已经开始动手了,你愣在这里干嘛呢?
很多问题在不确定的时候它也许有多个答案,每个选择看起来都是对的, 就好比“一个大于4的偶数是否能拆分成两个质数的和”,这个问题直到人类完美解决后才直到答案是什么,在那之前,我们能做的不是选一个答案,而是通过方法上的优化来逼近。说到方法,也许有的时候我们的选择是在选择方法而非选择本身。 但是不管怎么说,这总比你瞎做一个选择去撞大运要好。
我说一下我10岁那年的事:我写了人生第一个程序,是用莱布尼茨公式计算圆周率的1/4。 公式很简单: 1-1/3+1/5-1/7+1/9…… 计算10万项之后我只得到了一个4位数的精度。 也正是那一年,我在一本数学书上看到了马青公式, 于是我把程序改写了一下,用3次多项式计算反正切函数,并通过马青公式合并成圆周率的数值,在很短的时间内我就得到了300位的精度, 欣喜之余我用了一个下午时间一口气把那300位都给背了下来,至今都是倒背如流。
如果用一个收敛性不够的公式去解,即便是用大型计算机业未必有一台PC的效果好,由于你的算法不好,大量硬件上的投入会打水漂。
我从来不喜欢做练习册,做大量的题目,通过形成经验性条件反射去取得高分。但是直到上了高中后碰到了一个真正给了我信心的数学老师——葛军(著名的江苏高考杀手,还不是本校的),我才坚定了自己的观念,我不愿意用笨方法去武装自己,我的生命太有限,我要去从更高更泛的维度解决问题。
多年后我从海外再次回到国内,我看到了太多人在用笨方法去做事,我们人们通过思考对问题进行进一步的抽象,于是我们沦为了世界工厂,大量劳动密集行业,到处都是地推,到处都是制造业,我们还一直引以为豪沾沾自喜觉得我们的TMT行业是如此发达。 君不见uber用几套算法把我们玩得团团转吗?
我经常见到一些老板一身民科和民哲范,总结一套完全不具备科学依据的理论,通过阶段性结果来支持, 最后被复杂度和越来越发散的需求打垮。 我还会见到一些视某些理论为信仰的迷信派,一定要求解决某个问题,比如说复杂度好了,完全不理会Rob Pike所说的:当k足够大n足够小的时候,追求O 复杂度是没有意义的。
我们追求敏捷追求MVP和快速迭代,但是很多所谓的高频迭代纯粹是版本数量堆出来的,就像莱布尼茨公式对比马青公式,你的收敛性太差了,虽然你一步一步迈向真理走向完美,但是你的步子太小了,虽然没扯到蛋,但是你是夹着蛋在走。
互联网消费红利即将过去,效率时代即将来临,少用蛮劲,多用巧劲,多独立思考,不要做一个迷信盲从下的执行者。