为什么有人说弄懂了《算法导论》的90%,就超越了90%的程序员?
同任何一门编程语言相比,算法确实是晦涩难懂的。举个简单的例子,众多学习算法的读者中,可能很多人都能快速学会链表、哈希表、二叉树,还能熟练运用大部分的查找算法和排序算法,但能玩转路径规划、字符串匹配、动态规则等复杂问题的人,却凤毛麟角。
可以这么说,能玩转算法的人,其综合实力往往都不差。很多大的互联网公司,更看重的往往不是你精通多少种编程语言,而是综合能力,更确切地说是解决问题的能力。
有些读者可能会问,类似 C++ 可以使用 STL 标准库,Python 代码可以使用 Collections 模块等,很多编程语言都可以使用相应的集成数据结构的框架或者模块,直接拿来用不就可以了吗?
事实上,很多在职程序员在开发过程中,都会套用现有的一些集成数据结构的模块或者框架。要知道,适当的使用是可取的,但不能完全依赖,否则知其然而不知其所以然,即便完成再多的项目,也无非是他人代码的搬运工,个人能力很快会进入瓶颈期,再无提升的空间。
对于如何评判一个人编程能力的强弱,不同的人有不同的标准,或许是看中他编写代码的可读性,扩展性、是否健壮等等。
我认为,代码执行性能的好坏无疑能成为众多评判标准中的一个。而想编写出性能高的代码,前提是必须知道如何评判代码的性能,这就不得不使用
算法中评判代码执行性能的时间复杂性和空间复杂度。
对于某些在职的程序员来说,如果觉得数据结构无用,更多可能是因为你接触的都是一些用户量很少、需要处理的数据量也很少的小项目,实际开发中更注重实现具体的功能,产品的性能要求并非那么苛刻。反之,如果你身处像 BAT 这样的大公司,所开发产品的用户量往往是千万级别甚至亿级别,需要处理的数据量也往往是 TB 甚至 PB 级别,这时产品的性能将是首要考虑的因素,而数据结构和算法的意义将会彻底凸显出来。