程序员的日常每周500字大学生世界

不可过早优化

2016-08-29  本文已影响76人  捡石头的村童
Premature optimization is the root of all evil

“过早优化”是万恶之源……
Posted: January 6th, 2009 | Author: 李笑来Filed under: 思维工具, 随便想想 |

上个月徐宥同学的一篇“编程珠玑番外篇3 — 关于程序优化的八卦”中提到Donald Knuth说的一番话:
We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. (Knuth, Donald. Structured Programming with go to Statements, ACM Journal Computing Surveys, Vol 6, No. 4, Dec. 1974. p.268.)

真知灼见需要很长时间的积累才可以看得清楚、想得明白、说得简单易懂令人醍醐灌顶。爱德华•墨菲提出“墨菲定律”时候也是如此

所谓“premature optimization”(过早优化)其实并不是只有程序员才能看得懂的概念。生活中“过早优化”的例子比比皆是。我有个朋友生活中就有典型的这种习惯,比如他报名去练太极拳,在第一节课还没上的时候就先跑去把全套装备都买齐——当然包括很多第一节课之后就发现买错了的,以及因为实际上没上过几节课之后就再也不去了所以永远堆在仓房中的剩下的全部。

这就叫“过早优化”,几乎每个人或多或少在至少某一方面有这样的习惯,不信看看身边,有多少人是这样的:他们在做什么事儿还没怎么样的时候早已开始憧憬成功之后的结果,比如,“这笔钱赚到手之后我要……”,或者“如果他们肯投资给我就……”。甚至那些在某些领域中颇有成就的人也很难例外:猜一猜就知道有多少人致死也没得过什么大奖,可是“获奖感言”早已练习了无数遍——当然,那些真的得了大奖的人中也有一大部分同样提前练过很多遍。

对此,我深有痛悟。没把一项技能模仿通透、没有习得个大概之前,不宜马上想着要重组、优化,就好像一开始就想着偷懒少干些活,结果是咋呼一圈后仍原地的周围晃悠。

刚开始不能兴冲冲地准备齐全,不能立马就假想自己就掌握了那个技能、达到了那个水准的成果。不要紧盯着还没到手的“果实”,这是因为。

  1. 太早享用未到手的成果,接着在具体的学习过程,一遇困难就会烦躁,速度的缓慢,赶不上自己迫不及待的想要习得、进而炫技的心情。这就像望梅止渴的另一个角度解释——已然望梅(浏览的很多的amazon书评),少了继续喝水(真正去阅读一本书)的动力,继而,没觉着自己的身体是处于严重缺水状态(无知),而假装成不那么缺水甚至止了渴(觉得看了书评,就认为是读了书,就觉得自己习得了那概念)。
  2. 过早地准备齐全,反而会引致客观原因的漩涡——陷入老在磨刀、换添工具的泥潭,而迟于行动。可像是磨刀不误砍柴工的极端版本:小家伙偷懒,为了磨而磨,怕山林之苦而行拖延之实。跟行动起来相比,工具、方法等可以忽略不计。

与盯着结果的思考模式,略有细微差别、但实质迥异的是,要尽量假想牛人在习得这项技能的过程及所需各项投入的努力(坚毅的心力与广博的见识)。在不能马上看到自己所做每一步的效果的时候,让自己的脑子想多一个层次:认定自己的每日投入、努力并将有成果,将成果切分到各阶段去(而不是一股脑儿在开头就享用了,或直至攻坚克难、习得技能之后也迟迟不用),作为及时反馈的标志。

  1. 这个投入的过程,都可拆解成哪些小步骤,直至每一步骤从恐慌区滑到学习区里,以便可操作——知道力从何处使、怎么使;
  2. 想象攻克每个可操作的小步骤,需要的关键点是什么、攻克该步骤的标志是什么;
  3. 各步骤之间是循序渐进的阶梯,还是进两步退一步的闭环,或是可以各自独立但又关联的分布式网格。

比如,写作技能的习得,所带来的可能成果,自己脑子更清楚、卖钱、影响力……若是还没开始或刚写几篇,就脑补这么个顶好的美景,是会打鸡血,接下的一段短时间里,可能不断地写、不断地脑补;但久而久之,脑子享受够了,就提前默认已经有了那世俗的成功,就不觉写作本身有啥新鲜可期。过早优化就是这样透支了后续的写作。

若提前有个对写作这个技能习得过程的各步骤的感知,比如整体上假定:需要1年每日365篇千字以上文章的训练,方可有所成效。那么,就从多个维度,

上一篇下一篇

猜你喜欢

热点阅读