跳到主要内容

“天网恢恢,疏而不失”

最近一直在思考这句话,这句话出自老子的《道德经》,现在经常来警示犯罪人员,不过我在这里想说的跟犯罪没关系,而是代码的设计。

因为代码的执行速度是很快的,所以我们的代码写出来虽然很慢,但是其实执行的速度是非常快的,比如我循环一万次,把每次的数放到一个数组里:

const arr = [];
for(let i = 0; i < 10000; i++) {
arr.push(i);
}

一万次的循环对于人来说其实是很复杂的一件事情了,即使最简单的事情重复一万次也需要耗费特别多的时间,但是对于计算机来说,其实是非常快的一件事情:

console.time();
const arr = [];
for(let i = 0; i < 10000; i++) {
arr.push(i);
}
console.timeEnd();

这样可以输出运行的时间,在我的电脑上(Mac Pro Inter 2020)上我运行了一下,node版本20.14.0,在0.9s-1.3s浮动。众所周知的一件事情就是js在编程语言里属于比较慢的语言,但是重复一万次都可以这么快,更何况更快的语言。

我前面铺垫了这么多其实就是想说,对于代码来说,他的执行速度太快了,以至于只要有任何的漏洞都会被找出来,如果是严重的,还会被黑客利用,入侵计算机,造成损失。所以说计算机就是一个天网恢恢,疏而不失的系统,所以在设计的时候就要形成完整的逻辑链,这样避免系统陷入混沌。

然后我们如何设计,或者如何读懂代码的设计呢,这个我也不抬好说,只能从我现有的角度去分析一下,我目前的考虑其实是有这样几个方面:

  1. 代码的分层,代码并不是平铺过来的,而是分为几个方面,每个方面有自己的层次,要首先看明白自己要分析的是哪个层面的哪个事情,这样才能明白代码的联系。甚至于在不同的角度去看问题分层的方式也是不一样的。
  2. 设计的要求,其实写代码都是为了解决一个或者一系列的问题的,那么要看这个问题是啥,然后我们是怎么把问题分解,然后在去考虑的,这样从实际的角度去考虑代码的实现,就可以理解一些有时候无法理解的问题了。
  3. 强依赖,我们依赖什么,比如举个例子,如果要开发一个网站,那么我们的强依赖最先的肯定是浏览器,因为没有浏览器无法显示网站,即使app里的页面也是依赖于浏览器的核心组件的,所以这个就是依赖,比如客户的要求,因为最终是客户来付费的,所以我们必须满足客户的需求,当然,其实有时候客户也不知道自己具体要什么,所以这种时候就需要有一个精通业务方向的人,可以从和客户的沟通中提炼出客户真正想要的东西。
  4. “德”,这里的德是德高望重的德,其实和强依赖我感觉比较类似,但是又不抬一样,举个例子,你在写一个组件,这个组件依赖某个方法,那么那个方法的德就会比较高,因为你依赖别的组件,而你依赖的东西又依赖一个方法,那么你就很难去打破这层依赖关系去考虑单独的问题,因为最开始的那个方法的“德”在当前的开发中是最高的。

说到这里了,我也想说说创新的问题,我感觉最近几年大家都在搞创新,但是如何创新又搞不懂,我觉着创新不是你抛开所有的东西去做一个自娱自乐的东西就叫创新了,这样做出来的东西必然是没有竞争力的,因为别人做出来的东西可能在你的眼里不完美,但是是经过市场的检验的,你从头搞一个出来,没经过检验,没有符合规范的标准,那么没有人敢用的。所以所谓的创新其实都是”拷着脚铐跳舞“,有些规范已经是这样了,就代表他是代表了一定的利益的,你抛开一些人的利益去追求所谓的创新和效率,别人是不敢随便用的,因为他们不敢保证自己不会是下一个被抛弃的利益。

所以真正的创新一定是建立在现有的逻辑下我们如何做一个优化的,这个优化只能在一定的范围内,而且不能违反上一层逻辑链,因为我们不能保证我们的下一层使用者不会使用我们上一层的逻辑,所以创新不是说我可以放开手脚随便干,而是基于现有的逻辑和利益去做出一些取舍和升级,然后在不断的小升级中逐步吃透其中的内容,甚至成为主导者,这才是更合理的步伐,所谓跨时代的进步,也只是厚积薄发的力量,但是首先得有“厚积”的努力,才有“薄发”的力量。

2024.07.25

Loading Comments...