数学家和程序员

前日在CSDN上看到早些时候对STL之父的一篇专访,
http://dev.csdn.net/htmls/11/11440.html
由此想到了数学家和程序员思考问题出发点的差异。
虽然亚历山大说自己是程序员,但我从他的言语之
间还是看到了他数学家的背景,他和大多数程序员
思考问题的方式有所不同。

多数程序员思考问题,解决编程中的实际问题都是以数据
为中心,以数据为思考的出发点。因为大多数程序的
行为就是处理数据,接受某种输入,产生某种输出。
程序员就是利用某个编程语言设计编写程序,以便组织和
处理各种数据。而算法是程序员组织和处理这些数据
的方法和步骤。在这一层意义上是数据结构在先,
算法在后。

而多数数学家的思考方式并非如此。他们一般以这样的顺序
进行思考。当数学家遇到一个难题,他们先把该问题
一般化。有时候一般化的问题比较容易解决,这就是
波利亚所说的发明家悖论。但也有可能使原问题变得
更难。不管变容易还是变复杂,一般化都有个好处,
它可以使原问题通过更改某些条件和参数变成一个容易
解决的特例。数学家可以通过解这个特例推导甚至猜测
原问题的解。然后求出这个解的最简形式。接下来
就是最重要的两步,证明这个最简形式是正确的,
并推广得出结论的方法,使其可以解决某一类型的所有
问题,也就是将算法一般化。上述步骤我在高德纳,
哈代和波利亚的书中都看到过。

由此看来,程序员优先抽象数据,以数据为中心。
程序员学习数学主要是为了正确的运用定理定义处理
数据和进行算法分析。因此程序员中的大师提出面向
对象编程和其他类似的软件工程实践方法。
而数学家优先抽象算法,并强调证明,以证明为中心。
数学家学习数学时更侧重定理的证明和解决问题的抽象方法。
因此像亚历山大这样数学背景比较浓的人对面向对象
编程不屑一顾。他和他的合作者发明了STL,STL是对
算法的泛化,也就是算法一般化。而数据类型只是参数
而已。

我本人对程序设计有些粗浅的认识。
我是个实用主义者(但不是操作主义者,也不是工具主义者)
我在进行程序设计时,只考虑基本的客观原则和经验原则。
而对规则(规则是主观的,原则是客观的)和设计模式考虑
的较少,剔除了那些不必要的规则。针对不同的问题,
选择适当的技术,在根据自己的特点选择技术的适当实现形式。
面向对象也好,面向过程也好,都是解决问题的方法和手段的形式
根据问题选择方法。数据为中心也好,算法为中心也好,
都是程序设计过程中不同设计阶段所采用的不同角度。

综上所诉,时刻注意设计的灵活性、摆脱思想束缚、突破概念壁垒、
关注程序内在的美感才是计算机程序设计的关键。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值