系统设计黄金法则:简单之美(2)

发表于:2012-05-14来源:不祥作者:包云岗点击数: 标签:系统设计
Graham在设计者的品味一章中写到,好的设计是简单的、简单就是美,正如漂亮的数学证明往往是简短而巧妙的那种。他提到,有些创业者希望第一版就能推

  Graham在“设计者的品味”一章中写到,“好的设计是简单的”、“简单就是美,正如漂亮的数学证明往往是简短而巧妙的那种”。他提到,有些创业者希望第一版就能推出功能齐全的产品,满足所有的用户需求,但这种想法是致命的。在硅谷创业最忌讳的就是“Premature Optimization”。因为一方面用户需求是多样的,不同人群都有不同的需求;另一方面开发者想象的需求往往和真实的用户需求有偏差。所以,Graham推崇那种有用户参与反馈的迭代优化的方式。

  无独有偶,最近至少听到两个报告提到了Facebook的开发模式。当Facebook开发一个新的服务,会先让一个小用户群使用,根据用户的反馈来修改功能,同时可以调试程序中的bug。然后下一版让更大一些的用户群使用,收集用户反馈继续修改程序。如此反馈几次,最后再推向所有用户。这种模式要求再最初设计时尽量简单,从而只需几个月的时间就能推出一个新的功能,然后再不断地优化完善。

  到目前为止,谈的工业界偏多一些,但其实在系统领域的学术研究,“简单”法则同样适用。

  李凯教授:KISS原则

  普林斯顿大学计算机系的李凯教授是“KISS”原则的坚决贯彻者。几乎每次和李凯老师讨论,他都会强调“Keep it Simple”。李凯老师的做事方式是——只抓住大方向,其他问题尽量简化。

  但真正要做到KISS原则其实并不容易。我在遇到问题时,往往会从各个方面去考虑问题,其中难免包含了各种细枝末节,这种方式导致问题经常会变得非常复杂。之前讲过这个例子,在移植TCP/IP协议栈到用户态时,我觉得有约10个功能需要考虑。和李老师讨论,他让我把那些功能分成两类:“必须有(Must Have)”和“可以有(Nice-to-Have)”。当我试了这种方法,发现原来Must-Have的功能其实也不过2~3个而已。而最近的例子则是在要设计一个功能让TCP/IP连接的Server在模拟器中、Client在真实机器。我考虑是尽量减少模拟器上OS的开销,所以打算采用自己写一个设备、然后让用户态程序Bypass Kernel直接访问该设备的方案。但李凯老师在了解OS开销以后,认为容忍开销、尽量直接使用模拟器自己带的功能,让开发更简单。

  这些教训也让我不断地去思考为什么要用KISS原则。慢慢地我体会到,KISS原则目的其实是——“快速推进、逐步优化”。我们设计一个算法,往往可以在大脑中预先思考好,然后直接编程写出来。但是,我们设计实现一个系统,当系统的复杂度超出我们大脑的工作记忆容量时,就无法在大脑中去“模拟”每一个细节。此时,我们应该用最快的速度去把系统建起了,然后再对各个环节进行优化。

  这个KISS理念并不是计算机系统领域特有的,最早是来源于研制飞机时提出的设计理念。而在其他领域,如果一个任务涉及多个步骤,也同样有效,比如生物研究。我去年前曾看过施一公教授写的一篇文章中也提到了这一点。

  施一公教授:"耗费时间的完美主义阻碍创新进取 "【5】

  2011年9月清华大学施一公教授在科学网上发布了一篇博客《如何做一名优秀的博士生:(二)方法论的转变》,其中介绍到完美主义的危害,其实是从另一个角度来强调“简单”。

  施教授讲了他博士后期间的一个故事。一次他的任务是纯化一个蛋白。两天下来,虽然纯化了,但是产量只有20%。

  他不好意思地对导师说,“产率很低,我计划继续优化蛋白的纯化方法,提高产率”。

  但导师反问:“你为什么想提高产率?已有的蛋白不够你做初步的结晶实验吗?”

  他回敬:“我有足够的蛋白做结晶筛选,但我需要优化产率以得到更多的蛋白。”

  导师不客气地打断:“不对。产率够高了,你的时间比产率重要。请尽快开始结晶。”

  实践最后证明他导师的建议是对的。

  对于这个故事,施一公教授总结如下:

  "在大刀阔斧进行创新实验的初期阶段,对每一步实验的设计当然要尽量仔细,但一旦按计划开始后对其中间步骤的实验结果不必追求完美,而是应该义无反顾地把实验一步步推到终点,看看可否得到大致与假设相符的总体结果。如果大体上相符,你才应该回过头去仔细地再改进每一步的实验设计。如果大体不符,而总体实验设计和操作都没有错误,那你的假设(或总体方向)很可能是有大问题的。

  这个方法论在每一天的实验中都会用到。比如,结构生物学中,第一次尝试纯化一种新的蛋白不应该追求每一步的产率,而应该尽量把所有纯化步骤进行到底,看看能否拿到适于结晶的蛋白。第一次尝试limited proteolysis,不应该刻意确定protease浓度或追求蛋白纯度,而是要关注结果中是否有protease-resistant core domain。从1998年开始自己的独立实验室到现在,我告诉所有学生:切忌一味追求完美主义。

  我把这个方法论推到极限:只要一个实验还能往前走,一定要做到终点,尽量看到每一步的结果,之后需要时再回头看,逐一解决中间遇到的问题。 "

  结语

  我想从各个角度去阐释“简单之美”,但到最后感觉这篇文章就是一个大杂烩。既然如此,那我就再加一点料。

  Elon Musk是现实世界中的钢铁侠,他先后创办了网络支付公司PayPal、电动汽车公司Tesla以及空间探索公司Space X。目前Space X研制的“猎鹰”火箭已成功试飞,并得到NASA 16亿美元的合同。为了减低成本和提供可靠性,Space X设计的火箭也到处渗透着“简单”【6】:“在他们的猎鹰1号运载火箭上,并没有很多专利,科学家们不在乎,只要火箭能飞就行。火箭用的主发动机也不是21世纪的最新设计,而是1960年代的老古董,只有一个燃料喷射器。它很老,但很可靠。”

原文转自:http://www.ltesting.net