程序员到底为什么要掌握数据结构与算法?
当代程序员,也就是我们,其实是非常幸运的,为什么?因为前人,也就是那些大牛已经为你铺好路了。大牛铺路导致的后果就是整个计算机系统像这个汉堡包一样是分层的:
开始的计算机只是一堆 CPU 与内存等硬件,要让这群大爷工作需要直接汇编编写机器指令。这也太麻烦了吧,因此那些大牛鼓捣出一个叫做语言的东西,现在方便多了,但程序不能只运行在一种架构上吧,为了让程序可以不加改动的到处运行标准库出现了,标准库对上层屏蔽了底层差异。程序使用的数据结构和算法太复杂了,每次都要重头开始写一个二叉树可不是一件有意思的事,怎么办呢?大牛们都已经替你想好啦,直接把这些数据结构和算法以库的形式集成到语言中,就像 C++ 的 STL,Java的容器,想使用数据结构吗?简单的很,你只需要知道数据结构和算法的名字就足够了,剩下的查查接口文档,够方便吧。这些都是小意思,还有更牛的,像搭建一个网站、编写一个App,其实这些写的代码大同小异,为什么要一遍遍重复造轮子呢?程序员的时间可是很宝贵的,怎么办?大牛们依然很贴心的为你想好了,于是框架应运而生。想搭建一个网站简直不要太容易,简单几行代码,一个功能完备的web server就跑起来了,现在还有谁说编程难吗?什么都给你想好了。
大牛们提供的技术使用起来就像搭积木一样容易!只要你的需求不超过积木的表达能力那么就可以愉快的用下去,根本就不用关心下一层是如何实现的。这就是框架本身的目的以及优势,用起来很容易,这也是为什么很多人对此趋之若鹜的原因。但是这样也有坏处,那就长此以往你会被锁死在这一层。
一旦依赖的这层技术不能满足需求,你就会惊讶的发现自己根本没有学会编程,这时你才能意识到各种底层技术以及数据结构算法的重要性,本质上这些才是计算机科学的核心,这些核心技术赋予你层级跃迁的能力,这样你就不会被锁死在某一层中了,当这一层不能满足你要求是你可以自己造出新的一层,这其实就是大家眼中那些大牛在做的事情。这也是为什么我在码农的荒岛求生这个公众号里写这么多专注于计算机底层技术文章的原因。