作为一个非计算机专业出身,也没有参与过IT技术层面实现的人,在这个清明节假期,以一种必死的心态,去啃这本《数据结构》。
结果呢?说实话,真香!
尽管语言细节和如何实现一如预期的全看不懂,但我都略过了。一本差不多400页的专业书,只用了不到3个小时翻完,而且收获居然还非常大。收获主要是思维层面的。更确切点说,启发我去思考了几个大问题。
一、技术(或者广义点,工具)的本质是什么?
为什么有数据结构?因为要厘清数据的逻辑次序与物理存放位置。OK,把scope放大些。
为什么有信息技术?因为人类有更强的,对物理世界进行(虚拟的)逻辑化呈现与表达的诉求。OK,把scope再放大些。
为什么有工具?因为我们希望能对现实世界能有更清晰的认知和更强的改造能力,能更好地解决现实问题。
所以,工具的本质是帮助我们分析问题和解决问题。但是最关键的定义问题环节,工具(至少是现阶段的)爱莫能助,定义问题(或者是目标)仍然绝对的依赖于问题解决者,也就是工具的使用者。
换一个角度,工具的边界也在这里。人如果要想不被工具替代(例如我们现在爱说的机器替代人),就要在定义问题和目标的能力上下功夫,挖掘价值。
二、工具的能力的本质又是什么?
第一点里面提到了,是(帮助人)分析问题和解决问题,也就是支持从未知到已知。
数据结构是怎么玩转这个游戏的?转化。弄清了最基础的“线状”对吧?然后“树形”向“线状”转化,“图”又向“树形”转化。
在这个纷繁复杂眼花缭乱的转化过程中,分清哪些是变化的,哪些是不变的,就很重要了。例如对于计算而言,数据是常变的,实现的语言是常变的,但算法和数据模型则是不常变的。就如同(阶段性的)思维能力不常变,而思考对象常变。
三、设计工具的基本原则是什么?
正因为定义问题的是人,定义系统目标的也是人。所以工具的设计要基于实际应用的需求,先确定功能规范和性能指标。
就以数据结构为例,引入列表结构,是为了弥补向量结构在解决某些应用问题时,在功能及性能方面的不同。二者的差异,表面上体现于外在的操作方式,但根源则在于其内部存储方式的不同。
为什么会这样?因为数据结构的本质就是为了解决对信息的分类和排序。所以工具使用者,为了通过工具实现不同的目标,从而在设计工具时采用不同的内部结构。
四、如何判定工具的好坏?
某种意义上,工具没有绝对的好坏。一种工具如果长期存在,必然有其合理性,而它的价值发挥则更多取决于工具使用者和问题的结合。
例如数组和链表,前者发现目标所需时间为常数,而修改目标所需时间为线性;后者反过来,修改目标时间为常数,而发现目标时间为线性。哪个好?这很大程度上其实取决于你的样本空间大小,以及发现和修改数据的行为场景和频率。
俗话说“机关枪打蚊子”,机关枪打蚊子何止是成本比苍蝇拍高,效果都不如苍蝇拍好吧。
由此我得出一条经验:多读经典,哪怕并非是你的专业领域的,很大概率会比在专业中一直深挖细枝末节的边际收益来得要高。
诺贝尔经济学奖得主阿马蒂亚·森曾这么说:
“考察一个人的判断力,主要考察他的信息渠道和信息来源的多样性。有无数的可怜人,长期活在单一的信息里,而且是一种完全被扭曲、颠倒的信息,这是导致他们愚昧且自信的最大原因。原谅他们吧,因为他们的确不知道真相。”










网友评论