《数学与泛型编程:高效编程的奥秘》一1.1 编程与数学

简介: 本节书摘来自华章出版社《数学与泛型编程:高效编程的奥秘》一 书中的第1章,第1.1节,作者:丹尼尔E.罗斯(Daniel E. Rose),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.1 编程与数学

那么,这种泛型编程的想法是从哪里来的?我们又应该怎样来学习它呢?这种想法是从数学中衍生出来的,尤其与抽象代数(abstract algebra)这个数学分支有关。为了使大家能够理解这种编程方式,本书会对抽象代数做一些介绍,并着重讲解怎样从抽象的运算属性来认识对象。这个话题一般是数学专业的大学生才去研究的,然而笔者认为,它对于我们理解泛型编程会起到关键的作用。
实际上,还有很多基本的编程概念也同样来自数学。对这些概念的产生及变化过程加以学习,能够促使我们更好地思考软件的设计问题。比方说,欧几里得(Euclid)的《几何原本》(Elements)虽然是两千多年前写成的书,但是其中的范例仍然具有很高的参考价值,它可以告诉我们,怎样用一些较小且较易理解的组件来构建一套复杂的系统。
尽管抽象是泛型编程的要义,但这个抽象却并不是本来就有的。我们必须从具体的事物入手,才能够获得更为抽象的认识,要想对某个领域进行正确的抽象,就必须理解该领域的细节。
抽象代数里面的抽象很大程度上是从另外一个数学分支的具体成果中得出的,那个分支比抽象代数更为古老,它叫做数论(number theory)。为此,我们还需要介绍数论中的某些关键概念,这些概念与整数的属性有关,其中尤其值得注意的是可除性(divisibility)。
我们在学习这些数学知识时所使用的思路可以对编程技巧起到提升作用,此外我们还会看到,对于当前某些软件来说,有一些数学成果本身就具有极其重要的意义,这尤其体现在给网络隐私与电子商务软件提供支持的加密协议上。本书最后会举例来说明某些数学知识在此类协议中的运用情况。
笔者会在数学和编程之间来回游走。当我们讲解某些重要的数学概念时,笔者会穿插一些对具体算法和通用编程技巧的讨论。笔者对其中某些算法只会给出简要的描述,而对另外一些算法则会在整本书里进行详细的讲解,并将其泛化。除了个别章节只谈数学或只谈编程之外,大部分章节都会同时涉及数学和编程这两个方面。

相关文章
|
Linux 关系型数据库 Oracle
|
9月前
|
JavaScript 前端开发 算法
vue渲染页面的原理
vue渲染页面的原理
275 56
|
并行计算 算法 安全
技术心得:安全加解密引擎基础(SKEAES)
技术心得:安全加解密引擎基础(SKEAES)
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
Java 关系型数据库 MySQL
基于SpringBoot实现的小区物业管理系统(含文档)
基于SpringBoot实现的小区物业管理系统(含文档)
559 0
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
2809 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
算法 JavaScript 前端开发
【经典算法】LCR187:破冰游戏(约瑟夫问题,Java/C/Python3/JavaScript实现含注释说明,Easy)
【经典算法】LCR187:破冰游戏(约瑟夫问题,Java/C/Python3/JavaScript实现含注释说明,Easy)
333 1
|
Rust 自然语言处理 API
|
iOS开发 开发者
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
|
缓存 自然语言处理 Docker
[Docker] DevContainer高效开发(第一篇):基于remote container开发
VS Code的Dev Containers简化了Python的容器化开发,将开发环境与应用一同打包在Docker中,消除环境配置问题。这种方式使得多语言、多版本开发变得整洁高效。
1588 0