从数据结构和算法说起
之前的一个月,是我裸辞以后找工作的时间。出于自己的上进心,以及面试官对我的「虐待」,我开始认真复习了一些数据结构和算法的知识。有了新的收获,做一些记录。
在大学的时候,数据结构和算法、计算机网络、操作系统、编译原理这些课程,让很多人头疼,而且,很多知识由于在学校里缺乏实践,学过考过之后很快就忘掉了。刚开始工作时,大部分人的工作内容也很少涉及到这些知识,于是它们就被大部分人忘记了。但是,这些并不是没用的知识,而是一些「不懂也感觉不到有什么坏处,但搞懂后就大不一样」的知识。
它们到底是什么
数据结构是计算机存储和组织数据的方式,我们常见的数据结构,数组、链表、散列表等,都是对一组数据的不同组织方式。算法是指计算机程序操作数据的步骤,比如常见的快速排序、二分查找等。
为什么要学习这些知识
数据结构是计算机组织和存储一组数据的方式。最常见的数据结构有数组、链表、散列表、二叉树等等。
随着计算机程序处理数据量的增加,不同的数据结构对一组数据的组织方式,会对程序的运行性能产生巨大影响。
算法是计算机程序操作数据的具体步骤。
举个例子,要把大象装冰箱,总共分三步:
- 把冰箱门打开
- 把大象放进去
- 把冰箱门关上
以上就是把大象装冰箱的一种「算法」,之所以说是「一种」算法,是因为,计算机程序做一件事,可以使用任何能够达到计算目标的算法。但是,不同的算法在做同一件事情的时候,代码和运行速度和资源消耗,有不小的差别,这也是为什么我们要学习算法的知识。
数据结构和算法两者经常被一起提及,是因为在实际应用中,它们密不可分。
数据结构服务于算法,算法运行在特定的数据结构之上。
不要小看它们对代码性能和资源消耗的影响,很多流行的开源项目,它们的优秀之处,除了巧妙的架构设计,很大程度上都得益于高性能和低消耗,很多编程高手,它们的优秀之处很大程度上也在于能写出这样的代码。
为什么要学好数据结构和算法
对于需要去找工作的程序员来说,学习数据结构和算法知识,最直接的好处就是通过面试。大部分的 技术面试中都会问到一些相关的知识,比如快速排序、二叉树操作等。
在工作中,不懂数据结构和算法的程序员,几乎只能写一些基本的业务代码,做一名倔强的 CRUD boy,很难跨过初级程序员的第一个职业台阶。掌握这些底层的知识,能让一个初级程序员从业务开发向系统架构逐步转变。
除了跨越职业发展门槛这件事,认真学习这些基础知识,更能带来思维的转化。有些人是科班出身,但是大学时候并没有认真学习基础课程,有些人不是科班出身,学习了一些开发框架的使用,就能开始程序员的职业生涯,对于这些人,基础知识迟早是要补的。
如果能熟练的掌握和运用数据结构和算法的相关知识,就能在平时写代码的过程中,去关注代码的质量、运行性能、扩展性等问题,而不是关注能不能完成功能的问题。这一定是一个重要的转变。
另外,如果想写一个开源项目,学习和运用合适的数据结构和算法,也能让代码更拿得出手。
还有什么好处
除了关注点的转变(从表层到底层)和思维方式的转变(从功能到性能),基础知识的学习也能带来一些长期的好处。
近些年,前端开发领域发展迅速,各种新的开发框架 层出不穷,很多人盲目地追求新技术,不断学习新技术,新技术迅速淘汰,又转而去学习更新的技术。但其实,如果深入研究这些新技术,就会发现,它们的不同之处其实只存在于表层,例如各种各样的大前端跨平台开发框架,它们的底层技术其实都是一样的,只是提供了不同的封装方式 。因此,多多关注基础知识和底层的技术 ,能帮助我们走出「不断学习新技术」的死循环。
随着思维和关注点的转变,我们的长期能力也能得到增强,职业发展的天花板也能得到提高。
之后,我打算总结一些学习数据结构和算法当中的知识要点总结在博客里。