美丽的心灵-说说好的算法在程序中的作用

       算法是什么?这是每一个刚接触计算机编程的人都曾有过的迷惑。至于说,如果你已经在这一行摸爬滚打了一年以上(如我),然后再来讨论“算法重要不重要”,那是没有丝毫意义的。任何一个程序员,不论你是老手还是新手,应用程序员还是系统程序员,驱动开发程序员,都不可避免地要和算法打交道,然后或欣喜或无奈地承认算法确实很重要。
   但是算法究竟是什么呢?中文版的《算法导论》上是这样解释的:所谓算法就是定义良好的计算过程,它取一个或一组值作为输入,并产生出一个或一组值作为输出。其实我们可以理解为算法就是用来解决特定的一个或一类问题的方法,当然这里所谓的问题必须是一个关于计算的问题或者最起码要能抽象成一个关于计算的问题。计算机最初的也是最核心的功能就是用来计算,而我们编写的程序,就是用一种计算机可以明白的语言告诉计算机,你要这样那样地去计算,然后告诉我结果。如何计算就是上面所说的算法了,这个其实才是计算机程序最核心的问题。
   柏拉图的宇宙观其实就是一种数学的宇宙观,古希腊的先哲们早在很早以前就习惯用数学来解释世界,尽管后来的哲学发展证明他们都一定程度上犯了形而上学的错误。但是,从中我们可以获得启发:如果我们假设一定的条件,那么在一定的界限内我们是可以对客观世界进行数学抽象的。而在我看来,很多数学问题是可以通过计算机程序来解决的(计算机其实就是用来模拟数学中的逻辑功能,早期的加法机就是建立在布尔代数的基础上的,但是计算机的发展远远落后于数学的发展,所以只能用来解决某些数学问题,而不是所以关于数学的问题)。具体的计算机语言,如C,Java,C#等等都是人为定义的用来表达我们解决问题的逻辑的符号系统,算法就是这种逻辑。这正如两个人在一起交流,我们要告诉对方的是我们的思想,语言只是载体。
   请原谅我说了这么多我自己对算法的理解,其实我是想更简单地把问题说明白的,微言大义一直是我的追求,但是无奈认识和总结能力还有待进一步加强。看一个程序的好坏,跟看一个人怎么样其实是一个道理,不能只看外貌(不是否定外在的重要性,其实程序的可读性和美观也是程序员应该追求的),更重要的是要看心灵。对程序来说,它的心灵就是算法。编写或者阅读好的程序,就是要想办法赋予它美好的心灵,让每一个阅读它的人击掌赞叹,让计算机能更节约地运行它。如果把计算机看做是一个智慧的生物,它当然是没有人类的道德观念的,那么它如何来分辨善恶美丑呢(我在这里不应该用这么人性化的词语的)?计算机有着自己的标准,就我个人的理解,那就是节约。我这里所说的节约,不是单纯地节约时间或者空间,而是在当前计算机可以承受的范围内,综合各种可以考虑的因素,让计算机能付出更小的损失来完成工作。好的算法正是对这个过程的最近似概括,所以我说算法是程序的心灵。
   其实,在编程的过程中,很多时候并不需要完全由我们自己来设计算法,很多程序员也没有能力去设计优秀的算法。我们更多时候所做的是把一些优秀的算法使用到我们的程序中去,让我们的程序优雅美丽,编写出这样的程序我想应该是每一个热爱编程的程序员的追求。
   程序中使用了好的算法,正如一个人有了美丽的心灵。那么如何学习算法知识呢,如果你是一个数学或者电子计算机专业的博士,那么你可以完全忽略我这句话,因为我相信你就算没有自己设计过优秀的算法,也一定已经阅读过许多大牛的关于算法的著作。但是如果你初接触编程,或者没有系统地研究过算法,那么《编程之美》是你最佳的选择。我习惯只把这本书称作《编程之美》,因为我本身基本上是没有学习过windows系统下的编程的,我目前的工作也只是在Linux平台下用C语言做嵌入式的开发。我前面已经讲过,语言只是一个符合系统,重要的是算法,所以,不论你是微软的拥趸还是Linux哲学的信奉者,都不会影响你对这本书的兴趣。
   《编程之美》不能算是一本很优秀的算法入门书,它没有具体地讲有多少种排序算法,没有讲链表、栈和队列、树、图以至于网络,也没有具体地系统讲关于时间复杂度的分析。但是我认为,这正是这本书的优点所在,如果你是想系统地学习算法,那么《算法导论》是一本很好的入门书。但是我不得不说,导论内容很多,很枯燥,非大恒心大毅力者不可通读,《编程之美》就很好,我想编辑可能和我的想法一样,他们把那些枯燥乏味的算法基本知识全部抛开,只把那些程序中美丽的东西以一种平易近人的口吻徐徐道来,让你沉浸其中,欲罢不能。试想,在书架床头放这么一本书,当你工作之余,信手拈来看上几页,或仔细思考那些题目中的玄机,或看看问题的解答中闪耀的智慧的光芒,是不是也会被那些美丽的东西感染,进而更喜欢自己的编程工作,更何况那些问题的解答也会给你带来实用性的知识。
   喜欢这本书的理由已经如此充分,但是我还是希望像我一样初涉编程不久(不算上学校学习时间,工作一年多一点儿)的程序员朋友也能看看《数据结构》《算法导论》之类的书籍,从中汲取营养,让我们热爱编程,编写出更优雅美丽的程序吧^_^

原帖地址:http://book.douban.com/review/3071846/

《编程之美》: 豆瓣 , 微博

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值