本书是从数学到泛型编程的一次精彩之旅。
书中讲解了与乘法、素数及最大公约数有关的古老算法,并展示了历代数学家对这些算法所做的探索。他们既想对求解的方法做推广,以扩大其适用范围,又想对计算的步骤做简化,以提升其运算效率。
就前一方面来看,近代数学的发展(尤其是数论与抽象代数这两个分支)为算法的推广提供了很大的帮助。数论令人更加深刻地了解到数字中的奥妙,并给高速计算提供了灵感,而抽象代数则使得那些本来只能处理整数的算法,逐渐变得可以处理分数、实数、复数,乃至多项式。这种泛化还发生在数据之间的运算上面,比方说,通过连加可以实现求积,然而如果把其中的运算由加法换为乘法,那么效果就会从求积变成求幂。
就后一方面来看,计算机的出现使得算法的效率有了很大的提升空间。我们可以根据运算步骤及数据所具备的特征来发挥电脑硬件与软件所拥有的特性。
作为全书主题的泛型编程体现了上述两个方面的融合。它既借鉴了数学中的抽象思维及知识整理办法,又利用了计算机编程语言所提供的泛型与优化机制。这使得某些因实际问题而起的原始算法,在经过千百年的深化和抽象之后,终于可以变得更加普适、更加高效。
作者把这些对泛型编程有益的思维与技术提炼成许多条原则,并通过严谨的数学证明来培养读者的逻辑推理能力。此外,书中还有几篇简明的学者传记,使大家能够了解数学史及计算机技术的发展脉络。将这些内容与公钥加密系统等有趣的实例结合起来,可以指导我们把数学知识更好地转化为泛型编程的成果。
在翻译过程中,我得到了机械工业出版社华章公司诸位工作人员的帮助,在此深表谢意。
由于译者水平有限,书中难免出现错误与疏漏之处,请大家发邮件至eastarstormlee@gmail.com,或访问 github.com/jeffreybaoshenlee/fm2gp-errata/issues 留言,给我以批评和指教。
爱飞翔
2017年4月