七夜狐

博客园 首页 新随笔 联系 订阅 管理

    说来惭愧,这本书陆续读了很多很多次次了,却从来没有读完过。在学校的时候,多次下决心读完,2011年也有一次,这次总算把这本书看完了(从2011年11月开始的,虽然仍有很多页是翻过去的)。

    这本书实在是一本特别枯燥又不知道有没有用的书,我多次强迫自己,却始终没有读完。在学校上这门课时,我实在觉得这门课没有什么意义,几乎没有认真上过一次。
    读完此书,我得到了什么呢?我觉得,读书对我们来说,主要是给我们启发,至于书中具体的内容,时间长了,你也未必记得那么清楚。
 
    事实上,几乎所有的语言和框架,都会为我们提供了丰富的数据结构(栈,队列,线性表等等),我们在绝大部分开发中几乎不用自己写(比如做网游服务器,为了优化效率,还是会自己写的)。我建议每个程序员,如果有多余的时间,都应该研究一下数据结构,研究一下天天都在使用的线性表,栈等是怎么实现的。普通的司机,是没有什么必要了解汽车的构造的,不了解,仍然可以把车开的很好。对赛车手却不是如此,了解汽车的底层构造,对他们一些极致的发挥,是有作用的。普通司机,有时间,也应该了解一下,虽然对开车技术提高未必有多大,但是反正玩游戏,看电影也没什么意思。当然了,没有特殊情况,不论是普通司机还是赛车手,在已经有车的情况下,不要自己去造轮子,造发动机,然后把它们组装成自己要开的车。
    我常听一些高级语言程序员说,数据结构没什么用。我的观点是,在实际开发中,数据结构即没有高级语言程序员说的那么没用,也没一些低级语言程序员说的那么有用。所谓小马过河,什么适合自己,只有试了才知道。但是基本的实现原理,还是要知道一些的,比如当知道vector是顺序,list是链接时,就知道在哪些情况下选用哪个结构,而不是道听途说了。
 
 
    我常觉得,任何一种技能,任何一种经历,都是一笔财富,当时不知道有什么作用,过后了可能发现有用。虽然数据结构在实际运用中,对某些甚至说大部分程序员没有太大作用,但是在另外一个层面,它提高着一个程序员的素质。总是给出几种方法,让你明白,任何问题都有很多种解。于是在日常的开发中,遇到 问题,也会想到换另外一个思想,而不是用最简单直接的方法(比如遍历)。这一点我深有体会,这一年的工作中,遇到问题,我开始会停下来想一想了。数据结构和算法的研究,为我打开了另外一扇门。虽然这个启发并非来自知识本身,却更新了我的思维方式。它变得我不像以前那么“懒”了,我相信一切问题都有另外几种方法解决,我也相信我目前最终确定的方法,可以优化。一个简单的道理,我却读了一本书才明白。如果你象我一样,明白这个道理,这本书就算是没有白读吧,这也是我读罢此书最大的一个收获。至于具体的数据结构实现,已经有好多记不起来了。
    另一方面,数据结构和算法中的几中方法,又往往是不完美的,提高了效率失了内存,提了内存失了效率,几乎永远只能选一个适合具体问题或者折中的方法。人生的得失,不也是如此吗。有了这个想法,生活中,就会更坦然一些。
    
    在以前,我可能不会理解数据结构的抽象有多大的意义。比如狼,白菜,羊,农夫过河的例子,就不知道用什么样的数据来抽象。渐渐发现,数据的抽象,对程序员来说,意义重大。尤其作为一个天天看不到界面的服务器程序员,更是如此。比如在玩家看来非常炫酷的装备,在程序员眼中,只是几个int和int数组罢了。数据结构设计的合理,往往事半功倍。比如我把游戏中背包的结构设计成一维数据,而不是二维数组,当需要改每行有多少列格子时,都是前台问题,与后台毫无关系。比如人物原有五套装备,现在要加一个时装栏,如果我再加一个时装的结构,工作量就很大。我选择了“拉长”原有的普通装备栏。数据的第5(从0开始)个元素,就是时装的第一件。当然这只是简单的例子,因为最近有这方面的改动。
 
    最后一个收获,就是增强了信心吧。当人类遇到自己完全不熟悉的东西时,就会有些恐惧,而掌握了那个你不熟悉的东西的人,就会成为偶象。数据结构只有两种,线性和链接,后面复杂的数据结构,都是由此组合而成的。当我听到某人说在一个模块中用了八叉树,我只是淡淡的一笑。
    
    
    
    
    
posted on 2012-02-19 22:51  七夜狐  阅读(1631)  评论(0编辑  收藏  举报