# 前言

算法这门学问,在很多计算机系的同学看来十分的高深。因为由老教授讲出来的知识总是由数学形式展开并做推导,在我看来这无疑是在加大算法的学习门槛。

但其实,对于工程人才的我们来说,算法真没有那么阳春白雪。它更像是我们在复杂工程实践中的总结与提炼,培养计算机思维与程序设计模式的一种抽象化的提炼。

高中时打 NOIP,大学时打 ACM,所用的战术更像是在混沌中不断训练,对于能 AC 的题只能说一句,唯手熟尔。我们的竞赛更像是传统医学的思路,完全是靠灵感来解题,知其然不知其所以然。

而到了现在,很庆幸我们生在一个幸运的时代,算法的知识与思想已经深入到工程项目的方方面面。我们不再是为了纯粹的竞赛而学习算法,而是真的可以通过精深算法来拓展我们的解决思路,优化我们的代码性能,在项目中体现自己的价值。

这也是为什么近年来一些国际大厂,例如谷歌、微软,他们在面试一位候选人时更倾向去面试算法能力而非项目经历,因为成功的业务很多都可能跟时运有关,而算法能力才能体现自己的思维能力。

现代工程开发,对于前端工程师的要求早已不只是会还原样式,调试 API 的鄙视链底层的页面仔,而是一个真正需要探索性能优化,支撑起巨型项目架构的重要一环。因此逻辑的复杂度以及可钻研的深度自然不可同日而语。因此我仍认为,所有的软件开发人员都必须对算法知识有较为深刻的理解。

而作为在职的打工人来说,我们很难花费大量时间也没有必要去阅读大部头书籍来深入算法原理。我们的目标只是理解算法与数据结构的设计思路,帮助我们在需要时运用在实际的工程项目中来优化表现。相信我,在工程项目中,想到可以优化的点要比如何去优化重要得多,也难得多。

因此我决定写一个专栏,帮助更多对此感兴趣的工程人才拓展算法思维,提升发现问题的能力。

再强调一遍,本专栏旨在提炼算法的思想,拓展技术视野,提升自己的项目质量,而非囿于某一道具体的 LeetCode 题目是否能做得出来为我的写作目标。不要从页面仔转变为做题家,要担得起工程师的称谓。