写软件的最终境界不过就是无中生有。
本来无一物,何处染尘埃?
但是心如明镜台,总是难免不自安,勤擦拭的。
从唯物主义的角度来看,精神世界无非是依托于物质世界存在的。
从理论物理学来看,物质世界有可能是一个更高维度精神世界的投影(称为全息理论)
从医学心理学的角度来看,所有的心理问题最终都可以归结为生理问题。
你所有的自欺欺人,不过是你的身体哪里出了问题。
对程序员来说,最难的事情就是给变量命名。
这是一个鸡与蛋的问题。要想有好的命名,首先要对建模的目标有整体的概念结构认识。
OOP is-a/has-a看起来人人都会,但是写出足够灵活、适应性强的代码,恐怕就不是人人能做到。
正如WebKit代码里的部分Fast Path,还有Chromium里的3种绘制架构(忘了哪3种了,软件立即模式、软件合成、硬件合成?),还有为了解决问题做的Domain Reduce:最大二部图匹配、线性规划、DP、梯度下降/爬山/模拟退火/基因编程。。。这些名词是不是让你想到了一些什么?
一个算法的本质呢,究竟是一个结构,还是一个概念,亦或者只是一个固定的流程?
算法归算法,若无效率及复杂度分析,恐怕只能称为一个模式。穷尽搜索也是一种算法吗?也许加上剪枝至少就算了。不过针对特定的各种用于剪枝的条件判断恐怕一点都算不了算法的一部分。偏偏计算几何/离散几何里大部分都是这类问题。
也许一个真正优秀的算法,应该依附于特殊的数据结构,譬如Pairing Heap,譬如O(n) Suffix Array,但似乎即使是高级一点的数据结构,也回避了动态内存分配的伸缩性问题,以及外存持久化时的特殊考虑。特别是前者会涉及到GC话题,后者则会涉及到B+树的并发访问和事务话题。