最近读了吴军博士的新书《计算之魂》,收获颇多。书中全面系统讲述了有关算法方面的诸多思想,值得深入思考、学习。
提起算法,总是给人一种高大上的感觉。不容易搞懂的东西,都这样。除此,还有算法本身的重要性。想必很多人都听过这样一种说法,就是:程序 = 数据结构 + 算法。其实数据结构和算法本身并不是割裂的。不管怎样,这说明算法是非常重要的。
我第一次看到上面那个公式,是在谭浩强老师经典的《C程序设计书》中,就是下面这个:
相信很多老程序员对此都不陌生。书中是这样说的:
标题很醒目,程序的灵魂-算法。看来大师所见略同。(PS:封面的数据结构也是老程序员熟悉的味道)
不过,个人觉得,算法比较考验一个人的综合分析能力,包括数学能力,逻辑思维能力等。虽然书中特别强调了“道”,而非“术”,也就是希望读者通过深读,掌握其中的规律,能够获得质的提高,而非看懂或者知道几道逻辑题的答案。这一点我是非常认同的,但是如本段开头所述,算法对“天赋”的要求,可能要高一点点。不像工程的东西,创新很难,但是学会可能相对容易,只要愿意花足够的时间,总是能够学到本领的。
上述提到的算法和工程,正好对应书中所说的计算机领域的两个大方向,一个是体系结构方面,一个就是算法方面,并提到了两位开拓者,冯诺依曼和高德纳。体系结构方面,目前还是没有突破图灵机的理论界限,而算法方面,也是有一些数学方面的界限的。我觉得了解能力边界是非常重要的,这就是为啥总说理论指导实践。如果理论上证明不可行的东西,实践中花越多时间,浪费就越大。永动机可能就是这方面最知名的一个例子了吧。
最近几年,尤其是阿法狗横空出世之后,人工智能开始大火。很多人基于人工智能的想象基础,构想了未来社会的科技感。而且,其中融入了很多科幻的元素。这使得一部分人悲观起来,觉得机器很快就会超越人类;同时,也使得一部分人过于乐观起来,觉得未来机器无所不能,可以完成很多自己想实现却无法完成的事。
但是,书中给出了理论上数学的界限。
这里人工智能只占很小一部分。
认识到这一点很重要,这会使优秀的科学家将精力放在那些可以实现而未实现的事情上。
当然,也许有一天,人类突破了现有的理论认知,在前述体系结构和算法方面实现巨大突破,那么未来真的可期:也许就可以实现一些科幻元素,进一步的实现人类的梦想。想想,这也未尝不是一个好事。