我觉得很难形容STL对我生活和研究的影响。STL并未从本质上改变我的生活,因为我没有通过它赚到任何钱。我想向我的几个朋友展示一下正确的编程方法,
而
STL正是为他们而做的。事实上将这项工作完成带给我很多快乐,当我听说它帮助某人解决了问题时,我更加快乐。当然也有人说如果让他们设计,他们可以设计
出更好的东西来,也有人对STL嗤之以鼻,这些攻击也确实伤害到了我。 OO与编程
和STL形成对照的是OO——面向对象。OO的思想困扰着许多程序员,OO的思想一直困扰着我,从未有人对OO表达过如此强烈的想法——除了Alex先
生。我想:作为一个程序员,这是一定要掌握的,但是……,请看下面Alex先生的观点: 问: 您对面向对象是怎样理解的?它是不是一种好的可接受的编程思考方式?有没有学习OO必须的有用的工具?
Alex:我尽量避免用OO思考问题,我对他们编程的方法不感冒。在意大利的一家期刊采访我时我曾说过:“我发现
OOP在技术上是有问题的,它妄图用基于单一类型的不同接口来分解世界,为了处理不同的实际问题,你需要不同种类的代数方法以横跨不同类型的接口族;我发
现OOP在思想上是不健全的,它声称一切都是一个对象。
即使真的是这样,也没什么意思——说一切都是对象跟什么都没说一样;我发现OOP的方法论是错误的。它从类开始,就好像数学要从公理开始一样。你不是从公
理开始——你是从证明开始的。直到你找到了一大堆相关证据你才能归纳出公理,以公理结束。编程上存在着同样的事实:你要从有趣的算法开始。只有很好地理解
了算法,你才有可能提出合理的接口让其他组件共同工作。”我再重复强调一点:程序是描述算法和数据结构的,而不是描述继承性和多态性的。 问:您认为编程的好方法是什么?对于编程来说,一种工具是不是必需的?
Alex:我认为学习多种不同的编程语言是非常重要的。我用过Algol-60, Common Lisp, Scheme, Ada, C,
C++,
Java,和多种汇编语言。然而,也不能仅仅局限于程序语言,它仅仅是种表达算法和数据结构的工具——并且是种有缺陷的工具。如Niklaus
Wirth有句精辟的见解:程序=算法+数据结构。 问:您认为计算机语言和人类的语言有什么区别? Alex:没有人尝试过用计算机语言写出诗歌来。计算机语言发展到能允许我们解决一些真正美好的现实生活中的东西,还有很长的路要走。 提示:如想了解STL之父更多,请看8期电脑报G1版。 |