第六十一周 - 老神仙

长长长地远远远地深深地流浪在心间,叮叮叮地咚咚咚地悠悠的铃声在耳边。风儿带我来到一个地方,那里有一棵大树,树上有个老神仙轻轻叫我的名字。

注:因为本周末有其他事情要忙,所以周记提前发。


今天上午的一场暴雨愣是下出了台风过境的感觉,让深圳降温不少。这场雨来得快去得也快,潇洒走一回,痛快。本周因为个人原因只能工作四天,所以大部分工作是为接下来的开发做统筹计划。除了部分文档的工作之外,也开始在阅读和修改其他组的代码中思考软件工程的最佳组织形式。幸好软件工程已经过了最原始的刀耕火种时期,有如此多成功的项目珠玉在前,很多时候我们只需要在前人的肩膀上看看风景就好。

随着项目的不断深入,我愈发能够理解 Unix 的哲学,即 KISS(Keep It Simple, Stupid),项目中的各种判断和选择都需要在实践中不断去优化,但总体原则不应该与 Unix 的哲学背道而驰,这里列举一下《Unix 编程艺术》中的几段话:

  1. 让每个程序就做好一件事。如果有新任务,就重新开始,不要往原程序中加入新功能而搞得复杂
  2. 假定每个程序的输出都会成为另一个程序的输入,哪怕那个程序还是未知的。输出中不要有无关的信息干扰。避免使用严格的分栏格式和二进制格式输入。不要坚持使用交互式输入
  3. 尽可能早地将设计和编译的软件投入试用,哪怕是操作系统也不例外,理想情况下,应该是在几星期内。对拙劣的代码别犹豫,扔掉重写。
  4. 优先使用工具而不是拙劣的帮助来减轻编程任务的负担。工欲善其事,必先利其器。

Rob Pike,最伟大的 C 语言大师之一,在《Notes on C Programming》中从另一个稍微不同的角度描述了 Unix 的哲学

  • 原则一:你无法断定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急于胡乱找个地方改代码,除非你已经证实那儿就是瓶颈所在
  • 原则二:估量。在你没对代码进行估量,特别是没找到最耗时的那部分之前,别去优化速度
  • 原则三:花哨的算法在 n 很小时通常很慢,而 n 通常很小。花哨算法的常数复杂度很大。除非你确定 n 总是很大,否则不要用花哨算法(即使 n 很大,也优先考虑原则 2)
  • 原则四:花哨的算法比简单算法更容易出 bug、更难实现。尽量使用简单的算法配合简单的数据结构 原则五:数据压倒一切。如果已经选择了正确的数据结构并且把一切都组织得井井有条,正确的算法也就不言自明。编程的核心是数据结构,而不是算法
  • 原则六:没有原则六

另外周三的时候终于把公司的年度体检完成了,对于习惯了学校大杂烩体检的我来说,第一次参加比较商业化的体检,发现其流程已经优化到非常细致的地步,比如说每个人都有一张卡,这张卡唯一的用途就是扫一下完成身份录入,完成第 n 项体检项目之后,医生会把第 n+1 项的房间号写在表格中,我只需要按图索骥即可,不用去一个一个看哪个项目人多人少,机器自动调度分配,这种情况下其实能够到达某种程度的时间最优化(这就是流程优化的价值了)。在检查内科的时候,老医生听了听我的心跳又按了两下,就问我是不是之前减肥了十来斤(确实是减了)。我当时很震惊,居然这都可以!后来医生说这样好,太胖了不健康,主要是少吃,运动太剧烈,以后关节就受不了。

另外一个事情是周中的时候租了两天车,还是要熟悉一下在国内开车的感觉,经过两天的高密度练习,感觉已经恢复了七成功力。对于这种偏实践类的技能,在基本的意识达标之后,最重要的就是熟练度的提高。所谓基本的意识,就是知道什么是安全的和不安全的,什么是应该做的和不应该做的。所谓熟练度,就是指面对不同情况的最佳处理方式。开车和其他生活中的事情一样,靠的就是预测和判断,而在预测和判断的过程中最重要的就是冷静,而保持冷静其实是最难的一步,也是新手和老司机最大的差距点。

这段经历又让我有了一点思考:即如何快速成长为老司机,不过我们首先要弄清楚新手到底『新』在哪里。新手的『新』我认为主要体现在三点,一个是概念新,一个是经验新,最后是意识新。

概念新好理解,就是在面对一个新的领域的时候,基本的术语和『黑话』都不熟悉,也没有把新的概念和自己原有的知识技能体系对接起来,要摆脱概念新的阶段,最快的方法就是大量吸收各种高质量的领域信息并不断思考借此与原有的知识框架对接,不要想着有用才学没用就不学,要知道作为新手,是连有用还是没用都没办法判断的。

经验新指的是在面对理论结合实际中的各种可能发生的异常情况时的本能反应,即使离开了概念新的阶段,很多现实生活中的奇怪情况会让新手头皮发麻继而进入又瓜又皮的状态。想要快速脱离经验新,最好的方式就是从他人的经历中学习(文字、多媒体等),甚至再浮夸一点,在脑中不断模拟也能起到同样的效果。

而意识新则需要更多的努力才能摆脱,即如何才能不像一个新手一样思考。这个话题展开就比较大了,感兴趣的同学可以看看这里,我列举一些简单的诀窍:

  • 新手和专家有着根本区别,他们看待世界的方式不同,反应也不同
  • 新手使用规则,专家使用直觉
  • 成为一名专家的关键要素:应用你自己的实践经验、理解情境和利用直觉
  • 相信直觉,但是要验证

租车的几天终于可以体验一把开车送子妍上下班的感觉,还是挺神奇的,上班的时候看着她下车走进单位大门,下班的时候看着她笑魇如花走出大门拉开车门,感觉自己不是在开车,而是在为未来的生活把好方向盘。现在我才明白为什么电视剧里总是有接送上下班的情节,因为对于彼此喜欢的人来说,短短几公里十几公里的路程,都是美好的记忆。NBA 有个说法,不要低估一颗总冠军的心,当然我并不是要拿什么总冠军,我只是想要成为一个值得依靠的人。

放松,呼吸,放松,呼吸。我的奔跑你能看得见,我的歌声你会听得见。

捧个钱场?