折腾眼前这个算法已经有一个月了。
本来没想弄这个,也没想到设计一个严肃点的算法或者说算法组合有这么费劲。还是水平低下的原因。
回顾其过程,TDD在这方面起的作用确实不大,这也证实了我一向的看法。
过去曾经说过,在契约编程之前,断言是个不错、又轻量级的方式。当时那么说的时候,其实是没有身体力行的。
后来看到这也是《编程珠玑》的作者推荐的方式;他同时提到我们真写程序的时候往往又抛弃了严谨的做法。
现在我发现在一些工作中,不得不经常性的加入断言了。难怪PERL的作者说:
“你们当中很多人都知道程序员的美德。当然啦,有三种:那就是懒惰、急躁以及傲慢。”
像不像你我:) 偏偏只有这样的人,才会跟程序较真。这不是很奇妙么?
前面的书单,克莱因的两本著作不推荐购买。原因是,这两本都是表达相同观点的,重复内容也比较多。
估计《古今数学思想》(尚未购买)是他的这些观点的集中,那么其他作品就没什么必要阅读了。
《数》这本书里除了一些历史,大多数东西我之前都知道了,但是作为入门科普,枯燥性确实算比较小的。
《证明与反驳》稍微翻了翻,对于学习思维方法应该有所启发;其它的还没看。
我最近的看法是,实际上计算机软件技术,比较核心的一个领域实际上就是对数学工具的一种具体实现。[1]
而相对外围的(不是说价值小),是对领域知识及存在的模式的一种复制,用以取代人类效率不佳的重复性工作。
相对“没价值”的是什么?我个人认为是底层知识及具体技巧。[a]
包括但不限于,比如系统内核、硬件相关、X协议、Y平台等领域中,排除数学之后所剩余的那些东西。
(经验方法论则根本不值一提了,努力往似是而非的哲学观点上靠恰恰是缺乏基础的表现)[2]
当然这些“没价值”的东西也需要聪明劲儿:尤其是考虑到创造力或感情所成就的一批像Linus这样的作者或发明家。
(即便在那些仅仅是*真正擅长摆弄事物*的专家身上,我们也能学到很多东西)[3]
不过,就康德所说,科学的严肃性和该学科内包含的数学成正比;这还是有一定道理的。[b]
缺乏对数学工具的熟练使用,像我现在这样勉力支撑,实在有点痛苦....
Update:
注1:小学算术也是数学,就最单纯的程序员来说,有时候我们可以简单认为,背后的数学多少和工资直接挂钩。
注2:我的一个体会是,听上去很有道理、看似能帮助很多人,和真正简化人类工作之间不同是需要掂量的。
注3:事实上这里隐藏了一个强调:星号括起来的部分,和“熟知某种东西”, 两者之间是有本质差别的。
Update:
注a:在一个紧急时刻卡在这里,有时是糟糕的甚至致命的。在这一点上我也许包含了比较多的个人喜恶。
但是长期来看,专属某一具体工具的知识,其价值肯定是呈一个滑坡的趋势。
注b:也许我给了数学过高的评价,而这正是因为我不懂数学?
从我阅读得到的蛛丝马迹来看,数学领域里不是不存在混乱,数学家的智力也并未明显高于一般人类。
不过,可以暂且认为关注的不是具体的数学,而是数学所代表的对思维方式的认真追究。