2019年/09月/09日
数学遗憾
这是一个程序员表达遗憾的文章: 在大学里没学好数学
抽象是编程极其重要的组成部分,我们通过抽象把一个复杂的问题分解成更小的部分。当我们发现了一些模式或者想要隐藏一些复杂性,就会进行抽象,例如使用抽象类或接口。我们甚至为如何抽象和抽象这些模式而创建更高层次的模式。抽象的方式是非常重要的,因为抽象可能会让人感到非常困惑,也可能非常有用。我们如何才能发现最有用的抽象?
分而治之是人类解决复杂问题的一种非常流行的方法。把问题分解成更小的部分,解决这些小问题,然后把这些解决方案组合成更大问题的解决方案。你能想到另一种更通用的方法吗?
范畴理论是数学的另一个子领域,我喜欢把它叫作抽象的抽象代数,但实际上,它是有关组合的数学。我们可以从中找到很多有用的想法,比如:
函子(Functor),我们可以使用映射函数将函数应用于容器中的每个元素,比如 Python 的 List、Java 的 Stream API 和 Optional,甚至是 Haskell 的函数。
单子(Monad)是 Python List 遍历、C# LINQ、Scala 解析器组合符、Haskell IO 和并发性的基础。我们可以找出任何一种编程语言的的单子。
F 代数,我们通过递归进行抽象。