数据结构与算法:前言

数据结构和算法是计算机领域的基础,其思想运用在计算机科学的各个方面。这么重要的内容,其书籍和课程也汗牛充犊、数不胜数,书籍比如经典的《算法导论》、《算法》、《数据结构与算法:X 语言描述》等等;课程有 MIT、斯坦福、清华、北大、浙大等优秀精品。那作为一个非计算机专业的小白,又在这里能做些什么呢?此事说来也简单,主要是源自与朋友一起学习的约定,我们一致认为应该用输出来判断是否学过,那这个输出自然就是教程了。

当然,这个只是表面的、直接的原因,还有一些更深层次的原因。首先,由于我自己是完全自学 CS,所以默默刷了不少课程,也都认认真真做了笔记(主要记录课程重点和自己的想法),但是总感觉对工作没起到什么明显的作用,或者说总感觉学完了后并不能把所学的东西很快运用到工作中。这一方面是因为学到的东西不一定马上就正好能用(比如我学了 C 语言,但工作中可能暂时不用写 C 语言代码);另一方面是在学习过程中主观上没有把知识关联起来,学到的都是一个一个的点(比如 C 语言就学习课程教授有关 C 语言的东西)。

因此我觉得需要重新认真审视自己的学习过程:应该主动地去将某门课程与已知的知识点甚至思想串联起来、应该主动地寻找已学到知识点的应用场景(不是只做个作业)。这种情况下,记录就显得非常重要了,因为我们不再是单点突破,而是想要通过一个点带动一个面,任何一门单独的课程都不能够满足我们的需要,所以要写教程,这是第一个深层次的原因。如果说第一个深层次的原因是 “学”,那么另一个更深层次的原因就是 “教”,我是个经济学专业硕士毕业 HR 岗位工作 5.5 年然后转行的 NLP 工程师,认识很多同样是转行的小伙伴,也认识很多想转行但是担心自己 ¥%……&*(此处省略一万种原因),我希望自己的经历能够帮助到一些伙伴,让他们能少走一些弯路;此外,这几天正在阅读费曼的相对论讲义,对他关于 “教” 的理念非常赞同和倾慕,他想让大一大二的学生能够在已掌握内容和对已掌握内容进行演绎的基础上能够学到他要求学生们能够学到的内容。所以,我们需要明确目的,也就是我们为什么要学习数据结构和算法?以及我们到底要从中学到什么?我知道每个人可能都有自己的答案,当然也有不少人可能没想过,不过在这里我觉得我至少可以明确一下。这个目的就是:运用最少的基础知识(熟悉基本的数学和一门编程语言)学习数据结构和算法,理解计算机的思想、甚至解决问题的思想。从中可以学习到:每种数据结构和算法适用于什么问题,如何实现,核心和本质是什么,是否可以迁移到其他领域等等。

丰满的理想谈完了,我需要特别申明一下骨感的现实:我不光是非 CS 专业,还没有完完整整学过任何一门数据结构或算法的课程(感觉有点托大……),说心里话我自己是底气不足的,非常不足,我甚至已经有放弃的打算了,因为我甚至完全不知道应该如何开始,但我已经准备开始了……那,就这样硬上吧,就当是自己学习的一次新的尝试了。By The Way,这里没有提纲或者目录之类的,因为我也刚开始学,不管了,干着看吧。