[转]一个网友对算法的看法

这篇本想放在《算法の美》这个分类里面,但由于是对立性文章,所以还是决定放在《修炼の道》里面吧
里面的观点都很赞同,特别是那个重复性开发,想必稍微做过几个项目的人都有体会,在碰到困难的时候,大部分的时间不是在想算法,而是被框架所困或者对开发工具不属于而已。
算法固然有自身的局限性(比如不是所有企业都会像微软中国研究院那样重视算法),但我的个人观点的,算法本身并不重要,重要的是:
它是从什么样的角度来解决问题的
换句简单的话说,就是:
重在过程,而不是结果
(如果读者还没有体会,建议买一本《编程之美》看看)


-------------------------------------------------------------------------

昨天周会上,包子在做自我介绍的时候谈到他对算法比较感兴趣,平时喜欢研究人工智能什么的。引起了我对这个问题的一些回忆和思考。

在网上,很多声音说学编程主要是学习算法,而不要死钻编程语言,API函数什么的。并认为算法是不变的东西,是根本。而编程语言,API什么的很容易变,只是皮毛。我觉得这里面要看场景的,占绝大多数的应用软件的开发,最影响开发效率和软件质量的,并不是因为算法太差。而恰恰就是因为对语言,平台,类库的不熟悉导致的。而开发企业软件最大的问题,则是因为软件规模庞大而导致的整体复杂性问题。这也不是通过优秀的算法可以解决的,而是利用良好的结构设计来化解的。

在学校的时候,我也是比较喜欢研究算法,什么生成树,最短路径等等,五子棋程序也开发过,虽然棋力很差。但工作后基本上就再没有时间去思考这些方面的问题,整天的修改重复的代码,解决一堆因为代码复制遍布各处的BUG。完全感觉自己就是一个机械工,整天做一些不需要动脑筋的体力活。说实在的,这些东西好像跟算法没什么太大的关系。

研究算法,我觉得分为两种类型,第一种是设计算法,我认为这个工作其实已经不属于计算机行业,是属于数学专业方面的问题,需要非常高深的数学知识才能设计出新算法,或对以前的老算法进行改良,真有这个能力的人,也就是数学家,一般来说可以不用在计算机行业混了。另一种是实现算法,也就是编写计算机程序来实现已经设计好的算法。一般来说,实现其实并不困难,只是运行速度上的问题。而对大多数常用算法,比如加密,压缩等等,已经有很多非常高效现成的免费函数库供你使用。即使是对一些并不常用算法,到网上去搜索一下一般也都能找到实现代码。比如图像、音频的识别等等,我已经在网上看到好多文章介绍和示例。并且算法的问题域很狭窄,某种算法一般只解决某一种特定的问题,比如说围棋和象棋的算法,虽然都是下棋,但是基本上不能通用。所以没有什么灵活性,一般不需要知道算法原理,只要根据其规范调用接口即可。不像设计模式这样很灵活的东西,需要根据不同的场景来分析选择。

说了这么多,我主要的意思并不是说算法不重要,而是说对目前我们面临的问题来说,算法并不是最重要的。如果把研究算法的精力挪到架构设计,对语言,API的熟悉上来说,可能会有更好的效果。虽然这些只是"皮毛",但是的确能解决实际问题。

另外,编会下棋的程序并不属于搞人工智能研究。即使你的程序能下赢世界冠军,但是计算机和人的思维方式有本质的不同。这和计算机会算四则运算,人也会,但不能说计算机就具有有人的思维是一样的道理。本质上来说,计算机下盘象棋和做一个超级复杂的算术题没有区别,这其实是人对象棋的规则进行抽象,事先建立好数学模型,设计好程序,然后再让计算机来傻乎乎的求解而已。而人工智能指的是用计算机来模拟人脑对信息的一种抽象处理方式。就像深蓝的创造者所说的,计算机再会下象棋,他也无法设计出象棋。


 

posted @ 2008-05-23 22:18  小黑  阅读(159)  评论(0)    收藏  举报