最早的时候 magiclinux 前辈留有一个 rpm-findold 这样的工具,当然对应还有 rpm-findnew,不重要,因为 old 才是系统构建人最需要的对话。早前这程序用的 perl 写的,我看不懂,Linux 有个特点,就是任何看似和版本平台无关的程序,只要它需要 x 属性并无人维护的,都要被淘汰。终于有一天 rpm-findold 不工作了,perl 版本无法编译这段代码,对 perl 毫无办法的我也不想再去修复它。那时我最熟悉的就是 bash 脚本,不是有 sort 指令不,于是一个简单的脚本解决了这个问题,也叫 rpm-findold。再后来,bash 版本的 rpm-findold 又出问题了,bash 版本改动,总是给你添加一些新的约束或变化。再后来,bash 脚本不能满足需求了,因为太慢了。于是我用 C 写了 一点代码,使用 qsort 并且找到一些魔幻般的网友分享的简单共享函数,对了,速度快了近十倍,你是不是无法理解脚本对系统资源的无情浪费。再后来,我发现自己的一些劳动成果经常不见了,于是发现 rpm-findold 工作不稳定,经常出来些不正确的结果。试了很多办法,总之,无论网上共享的点子还是 C 语言现存的函数都没有办法解决。于是乎发现 C 语言为什么这么招人烦,因为没有东西是现成的,就连那个 qsort strcmp 其实都是脱裤子放屁。因为这些东西只是例子函数,你要写排序软件,就不能怕麻烦。网络知识共享是个好东西,因为自己一直没有一个适宜的环境,比如一个学校一起专业学习几年代码,回想校园生活中天天打瞌睡、突击应付考试,那个时候自己独立搜集代码写出和同学不一样有界面对话的 debase 数据库交互都是神话了,因为我是学会计的。。。废话不多说,掌握 C 语言确实就是多写几回排序软件就明白了,千万不要用 strcmp 之流,因为只有这样,你才会真正懂得如何直接对字符进行运算,如何理解字符串指针和字符串数组,如何调节指针进行储存,如何循环,如何比较。。。自己写排序的程序,比利用通用例子函数的程序,速度提升不说,运行才算稳定。其实很简单,没有经历就一直如同瓶颈一样。还想起当年想成为 PHP 程序员的面试,一个简单的遍历问题就把我初学水平暴露地体无完肤。当年的问题就是这样,一棵复杂的树,如何最快地遍历找到自己的数据。当年我回答不了,就算什么前后对比移位法、冒泡法、中间法、探针法,其实我就这么回答也不会对的。现在想想,唉,其实会懂时,就很直白了,哪来的什么法。。。最快的办法其实就是特征对照,那么多树,找到特征对应就省掉了很多操作,存储要有特征,搜索也是如此才能快速反应。好了,一个晚上折腾出一个排序代码,却给自己写了这么长一篇感慨。
就和人的记忆一样,计算不是没有依据的机械行为。