很久之前,一位老程序员给我讲过这个道理,然而我现在才幡然醒悟。
我们当时正在代码审查,看到一个功能,需要生成字母 A 到 Z 的列表(类似通讯录的排列)。
我当时年轻气盛,决定利用一下 Unicode:写个循环,把 Unicode 的 65 到 90 号取出来,做个列表。差不多长这样:
1. for (let i = 65; i <= 90; i++) {
2. letters.push(String.fromCharCode(i))
3. }
那位老程序员问我为什么不把字母表硬编码掉,毕竟这种东西是永远不变的:为什么每次重新计算?
我说,我这种高手肯定不能玩这种幼儿园把式啊,我科班学过算法和数据结构的!
他说:能在设计时写死就不要在执行时生成。
说实话,我也没写复杂度天大的死循环,这点性能损失几乎可以忽略不计。但是总体而言,这个建议很重要。
很多时候我们写的业务代码只是将一个固定结构的数据转换格式。例如,从数据库里取一两年更新一次的数据,组装一下,送进浏览器:很多逻辑是不必要的。特别是使用内容管理系统(CMS)的时候。
所以我觉得 WordPress、Drupal 等成熟玩家在静态网站生成器(Gatsby、Hugo、Jekyll),headless CMS、CDN 等的挑战下危机不小。
现在的流行是 JAMstack:JavaScript、API 和 Markup。
“能在设计时写死就不要在执行时生成。”这句话一直萦绕在我耳边。随着时间推移,我觉得这句话是至理名言。不仅仅是编程,而且是人生。
最近我读了桥水基金老大雷. 达里奥的《原则》一书。这本书的主题是,问题的种类比问题要少。所以,如果一个人可以提早规划,那么当遇见问题时也可以游刃有余。
在人生的设计时做好规划比在执行时现场考虑来的好得多。
达里奥的方法是,将各种规划固定成原则。他甚至将这些原则编写成算法,使用历史数据进行回溯。
桥水基金是最成功的基金之一:这种方法行之有效。华尔街开始雇佣程序员进行交易,为这种方法进行背书。