“编程的核心是数据结构,而不是算法”,即使最简单的程序逻辑人类来验证也很困难,但就算复杂的数据,对人类来说也相对容易推导和建模。五十个节点的指针树要比五十行程序的流程图更清楚。“编程的本质是控制复杂度”,而流程图、过程化、结构化、面向对象以及其它方法论恰好“成功”将复杂度提升到人脑不能处理的地步。所以,降低整体复杂度的方法是用清晰的接口把若干简单模块组合成一个复杂软件。
“简洁最美”,最错综复杂的美妙设计,常常使我们的设计能力超出排错能力,结果是代价高昂的废品。
“接口和引擎分离”,把复杂的GUI界面与后台处理分做两端,中间用简单协议架桥。
“可见才可掌控”,软件系统的透明性就是说,你能一眼看出它在干什么,要能监视到内部状态。
“撑不下去,马上退出”,出现异常,补救措施明明又没成功,还挺在那里,很久才发现是最坏的一种情况。要么“响亮的倒塌,要么为工作链下一环程序输出一个严谨干净的正确数据”。
“过早的优化是万恶之源”,先要求运行,再求正确,最后再求快。还不知道瓶颈就匆忙优化,是唯一一个比乱加功能更损害设计的错误。“最强大的优化工具是DELETE键”。
“善用工具”,教会电脑生成一些简单的代码;一旦有人解决了某个问题,就直接拿过来用,尽可能一切都自动化。
“宁花机器一分,不花程序员一秒”。有的程序员写程序是“为机器写”,过份追求效率。想方设法让机器“少做些事”,因此耽误大量时间精力。与此相对地,我们可以使用一些简单直接的,即使是相对费时的算法,浪费了一些“机器的时间”,但节省了程序员的精力。又比如,有的语言,将程序员从内存释放中解脱出来,可以更高效的开发,这也是一种珍惜程序员精力,让机器多做事的例子。一直以来总觉得C++才是最“高效”的语言,一向对JAVA和脚本语言不感冒,但渐渐才明白,一把钥匙开一扇门,有时候,甚至是大多数时候,选择后者才是“高效”的做法。机器只不过是通了电一堆晶体管,让它费点力没什么。