重复性管理--抽象的重要性(上)

什么是抽象及它在重复性管理中的作用

Haskell 语言的设计者之一 Paul Hudak 曾说过一句略带夸张的话(overstatement):

编程中最重要的三件事是: 抽象, 抽象, 抽象.

"abstraction, abstraction, abstraction" are the three most important things in programming.

如果你去问一些资深开发者, 程序员最重要的的能力之一有哪些? 那么"抽象的能力"是绝对能排得上号的.

继续阅读

重复性管理--从泛值到泛型以及泛函(下)--总结

泛型和泛函, 以及一般化(泛化)过程的总结, 还通过一个数学层面的例子进行了对比.

在前面我们谈论了重复性管理上的一些具体做法, 重点探讨了 泛型范式 在解决重复性问题上的应用. 因为前面的篇幅有很多被具体的代码例子占据了, 所以留到现在这篇做一个归纳总结.

与数学的渊源

应该说, 编程与数学还是颇有渊源的, 或者说它们之间有很多相通的地方. 数学的一个突出特点, 那就是数学家总是在不断寻求更加一般化的表述, 更为抽象的表达. 我们来看一个具体的例子.

数学上有所谓的勾股数, 最知名的就是我们所熟知的"勾三股四玄五"了. 具体而言就是 3^2 + 4^2 = 5^2.

注: 3^2 表示 3 的 2 次方(平方), 因为上标较为麻烦, 其余类似.

继续阅读

重复性管理--从泛值到泛型以及泛函(中)--泛函是什么及为什么

函数式编程的精髓在哪里? 为什么用泛函以及它到底解决了什么问题? 文中用大量例子介绍了重复性管理的一些具体做法, 重点分析了泛函范式在解决重复性问题上的应用.

在前面, 我们探讨了泛型范式在解决重复性问题上的应用, 在这里, 将继续探讨泛函范式在解决重复性问题上的作用.

注: 关于"泛函(functional)"这一名称, 前面说了, 泛型的本质是"参数化类型", 那么, 按照这一思路, 泛函的意思也可以理解为"函数的参数化"或者现在时髦的所谓"函数式编程(functional programming)"吧!

当然, 你可以有自己的看法, 这里用这种比较概括性的说法可以使得标题等比较简短, 我也承认, 很多时候, 想取一个简短又准确的名字是不容易的.

继续阅读

重复性管理--从泛值到泛型以及泛函(上)--泛型是什么及为什么

为什么用泛型以及它到底解决了什么问题? 文中用大量例子介绍了重复性管理的一些具体做法, 重点分析了泛型范式在解决重复性问题上的应用.

在之前, 我们谈论了 计算机科学是什么, 我们知道了计算机科学重点在于复杂性的管理, 然后在 复杂性管理与重复性管理 里我们又谈到了复杂性一个重要来源, 也就是重复性. 软件开发的一个重要主题就是要管理重复性, 或者简单说, 减少重复.

你也许听过所谓的 DRY 原则: Don’t Repeat Yourself. 别重复(你自己)!

之前的一些都是侧重于理论方面, 现在来看一些具体地例子.

继续阅读

复杂性管理与重复性管理

探讨了简单重复性所带来的复杂性.

在前面我们说到了所谓的"计算机科学", 重点在于如何控制大型系统的复杂性.

复杂性本身当然也是个很大的话题, 而一种常见的复杂性的来源则是重复性, 即是由不断的重复所带来的复杂性.

重复性带来的复杂性常被人忽视, 大概是因为一开始它是不起眼的, 而当人们意识到它的存在时可能已经陷入了泥潭.

继续阅读