日更131天 - (翻译)The Mathematical Hacker(中)

这些创新与计算机编程的关系是什么?考虑一下Eric Raymond对黑客这个词的定义,也是任何有理想有抱负黑客的愿景:通过追求极致完美,也许是非常耗时的工作,产生真正的产品。那在这个意义上,应用数学家已经是一百多年的工业黑客了。

毕竟,计算机的发明是为了解决数学问题,而不是为了实现编译器或文字处理器。计算机辅助解决社会问题--在工程、采矿、农业、运输和国防方面--在过去七十年里为社会提供了巨大的价值。我敢猜测有几十万亿美元,如果你把打败德国算在计算机辅助密码分析的成就中,把日本投降算在数值计算的成就中,那么其价值是不可估量的。

然而,这些类型的数学 "黑客 "却很少被我们伟大的黑客文章作者提及。我认为原因是 "黑客文学 "往往是由Lisp程序员主导的,而Lisp程序员往往对应用数学一窍不通。虽然我很感激我们有这么多Lisp程序员写得很好的文章,但我认为他们往往对计算机编程是什么和应该是什么描绘得很是有歪曲的。读Raymond、Graham和Yegge(都是自称Lisp黑客的人)的文章,人们会有这样的印象:编程的最终目的是使一个程序比之前的任何程序都更强大,通常是通过增加抽象层。这被称为 "Lisp编程学派"。

还有一个学派,多年来在文章中没有得到很好的体现,但它无疑对经济产生了更大的积极影响。我认为Dr. Adam Rosenberg对这一学派做了很好的总结,他自称是工业数学最后的幸存者。Fortran学派的程序员并不把数学看作是给极其专业计算机应用的高级工具,而是把计算机看作是做数学的高级工具。从历史上看,Fortran学校的程序员往往在工业界或政府中更有技术倾向的部门(NASA、国防部等)工作。他们经常被Lisp程序员嘲笑,因为他们对递归一无所知。(关于一篇讽刺文章,请看《真正的程序员不使用PASCAL》;如果你认为这种讽刺不公平,请看《Dr. Rosenberg’s Style Guide》)。

我认为,这种嘲讽应该是反过来的。与Fortran传统(它不仅 "把人送上月球",并在银行、通信等领域实施关键的基础设施起到关键作用)相比,Lisp的文化几乎是故意无视数学的。这种无知被所有关于形式主义的讨论和对Lambda算式的敬礼所掩盖,Lambda算式与《神学概要》一样,是一个封闭的计算宇宙,对观察到的世界没有什么启示。

为了理解Lisp文化是如何积极地延续对数学的无知,请考虑任何函数式编程文本中对递归的传统介绍。它有几个变体:计算斐波那契数,或计算阶乘。

通常教科书上的解决方案是递归的:首先计算感兴趣的数字,然后计算之前的数字,再计算之前的数字,以此类推,直到达到 "基本情况",有一个确定的解决方案。这是一个经典的说教式编程例子,展示了递归方法的所谓效用。

"高级 "讨论可能会考虑工程方面的因素,如尾部调用行为,或对结果进行记忆的可能性。

但在这些讨论中,你很少能找到相关的数学考虑。如果目标是计算斐波那契数或阶乘,适当的解决方案不是递归函数,而是数学知识。

一个斐波那契数计算的C语言实现:

long int fib(unsigned long int n) {
   return lround((pow(0.5 + 0.5 * sqrt(5.0), n)- 
                  pow(0.5 - 0.5 * sqrt(5.0), n)) / 
                 sqrt(5.0))。
}

不需要递归(或循环),因为从17世纪起就有了分析性的解决方案。同样,如果有必要计算阶乘,应该教会程序员利用系统的log-gamma函数,就像下面的C代码那样。

long int fac(unsigned long int n) {
    return round(exp(lgamma(n+1))。
}

同样,只要知道阶乘实际上是伽马函数(欧拉第二积分)的一个特例,就不需要递归了。(对数伽马的实现通常是一个多项式近似,需要恒定的时间来评估)。


日更130天 - (翻译)The Mathematical Hacker(上
日更129天 - (翻译) C语言学习中的数学知识简要说明
日更128天 - (翻译) 编程是否需要数学(下)
日更127天 - (翻译) 编程是否需要数学 (上)
日更126天 - 知识付费是士力架还是人参果
日更125天 - 整理下自己的手机,别让它碎片化了我们的生活
日更124天 - 打造自己小环境
日更123天 - 杠杆
日更122天 - 收入的四个象限
日更121天 - 时光穿梭,回顾和展望
前日更120天索引

你可能感兴趣的:(日更131天 - (翻译)The Mathematical Hacker(中))