程序员的一些基本认知观念

发现想当好一个程序员,有些认知观念也得相应升级。自己接触到的有以下一些基本观念,总结如下:

空间换时间(如收拾房间、列清单…)

空间换时间,或者时间换空间。是以前就了解的一种思维,在编程上有一个简单的例子,就是将 a b 两个参数的值交换,这个的不同解法可以很形象地解释这个思维是什么意思。以往自己会用收拾屋子作为例子:有钱人的家可以将所有东西摊开,因为都有地方放,那随时想去干什么、用什么都很方便;而普通家庭空间有限,许多东西就得收纳,折叠起来,缺点就是要牺牲很多时间整理,并且想用的时候还得花时间进行布置。所以为什么富人的时间利用率会比穷人高… 还有一个和日常更近的例子,那就是列清单,写笔记,也是多一个空间将脑海里的东西清出来,换取下次使用时找到它的速度提升。

时间复杂度 & 空间复杂度

这个的启发是,当某些事情没法直接进行比较时(例如算法的比较依赖硬件)。我们可以构建一种趋势的维度进行比较。

避免过度拟合

过度拟合并不意味着“好”,因为重要的是未来,而不是过去。生活中也要避免过度拟合,比如对别人的随口一句话猜测太多,造成自己的内耗,并没有太多帮助,当你纠结对过去数据的拟合精准,就会失去对新数据的预测敏感度。AI 对数据训练有一个理想的错误率避免过度拟合(15.87%),这样既可以让你每次进步,又不至于步子迈得太大。

利用冗余侦错、纠错

了解到编程中冗余思维时,发现其实自己在生活中就经常遵循这个原则,计划事情都多留空间,而代价就是自己其实过得挺累。听到奇偶校验时,心里好奇如果有多个位数据出错,怎么能识别呢?问了问 GPT,又了解到海明码 Hamming Code 的运作原理,不由得感叹构建这些精密方法的人实在太聪明了。

节点连接越多价值越高

这在社会学中都了解过,很容易理解。价值越高的节点,连 Google PageRank 也会给它分配更高的权重。

RSA 非对称加密

许多系统其实也都不绝对完美,但只是在当下的空间时间里是没问题的。例如这种加密算法的破解,虽然存在理论上破解的可能,但在当下几乎不会发生,那就接受它。这启发我们有时候不用纠结概念上的绝对完美,当下够用即可。

深度搜索和广度搜索

深度搜索 和 广度搜索都要消耗时间和资源,那在“事先坚定一条路”和“不断尝试新事物”间如何取得平衡,可以利用六度理论、37%规则等方法进行剪支。

分治和递归

分治和递归是软件工程的常见指导方针。分治好理解,要定义好输入和输出。递归似乎很难设计,就像我这个入门程序员写递归函数感到很难,它需要一种很抽象的总结思维。

—-

剩下还有其他一些程序员的常用思维,例如考虑异常、和计算机的不可计算问题… 有待以后理解。

    微信扫码打赏

    Buy Me a Coffee at ko-fi.com