当今是一个互联网时代,很多人为了赶上时代的步伐,开始自学编程。其数量之多,夸张到让人不禁感叹“这真是一个全民编程的时代”。
如果你到大街上,随便找几个人问问“你是否会编程”,他们大多数都会回答“我会,我会xx语言、xx语言”等。他们可以很快地给你写出一个“Hello World”或是对数据简单的处理程序。
但是,他们真的会编程吗?你试试让他们编一个链表、或是一些排序、查找算法,他们或许会变得力不从心了。
当下,大多数人对编程的理解便是这样:将编程的学习简化为语言的学习,将掌握语言与掌握编程对等。这种拘泥于语言形式的编程学习,在短时间内确实可以提高个人的编程水平,但从长期来看,容易遇到个人思维的瓶颈。
在我看来,编程并不应该只局限于某一种或是某几种语言的具体形式,而更应该关注逻辑思维的培养。逻辑思维,说得简单一点,其实就是一种思考问题和解决问题的一些套路。如果你掌握了这些套路,并能够将他们组合应用,那么我恭喜你,你已经比大多数人强了。这些套路,在编程中,我们给了它一个比较高端的名字,便是“算法”。
说到这里,一定有很多同学对算法产生了兴趣。这很棒!接下来的一段时间里,我会以《Grokking Algorithms -An illustrated guide for programmers and other curious people》这本书为参考,给大家分享一些常见的算法原理,以及它对应的实现。
看到这儿,你肯定会有个疑问:为什么选择这本书呢?
当今市面上有很多算法书,但是它们的侧重点不尽相同。
比如,《算法导论》这本书比较侧重严谨性和全面性,说白了就是会劝退一些新手和小白。
又如,《算法设计与分析基础》这本书侧重于课堂教学,是一本不错的算法入门教材。但是,课堂教学书籍却免不了会对一些问题和知识进行一些留白。为了鼓励学生自行探索研究,这样的教材编写目的的初衷是好的,但是没有对应的老师进行答疑,这对于一些没有解决相关问题经验或者缺少前置知识的人会很头疼。我想,如果是你,你也不会希望利用自己宝贵的“碎片化”时间来和这种书较劲。
除此以外,还有一些算法书,专注于一些竞赛,主要涉及一些竞赛技巧。这对于竞赛来说,是一剂速成药水;但对于长远的逻辑思维培养来说,会使自己的知识体系不够全面,思维逻辑存在漏洞。
我所推荐的这本书,即《Grokking Algorithms -An illustrated guide for programmers and other curious people》,在文字方面,没有使用过多的专业术语,而是结合大量的实际例子来引出并解释算法的原理。就我个人而言,读起来很轻松。轻松的阅读体验仅仅依靠文字可不够,因而作者在本书中,利用手绘的方式绘制了大量的算法原理图。我想,在你阅读这本书,绞尽脑汁理解算法原理的时候,突然蹦出一个手绘原理图,想必会扑哧一笑吧。:)
这本书除了有趣,易于阅读,在内容安排上也非常用心。
在第一章,作者会做一个简单的引入,解释一下有关算法的一些基础概念。(比如对算法含义的描述、用于评价算法效率的大O理论解释等)
随后会介绍一些基础的数据结构(数组、链表等)、常见的排序算法(选择排序、快速排序等)、查找算法(二分查找、哈希查找等)、递归编程思想。
在这些基础数据结构和算法之后,会有一些更复杂一点的数据结构(图等)、配套的算法(宽度优先搜索、Dijkstra’s 算法等)和它的经典应用。
最后本书会进一步深入,介绍一些有趣并且有用的算法(贪婪算法、动态编程【Dynamic programming】、K-近邻算法、并行算法、SHA算法等)
各位同学们,准备好了吗?准备好了的话,请关注,点赞,时刻关注我的更新。:)