我们不一样,我们为什么要学习算法

640?wx_fmt=jpeg

题图:Photo by Ramón Salinero on Unsplash

上周,我们在知识星球开始组织为期一个月的读书活动,主攻算法,参考书有《图解算法》、《算法》、《算法导论》等。在翻看球友@Vimiix 的读书打卡笔记时,提到我们为什么要学习算法(点击阅读原文),今天,我也想借这个问题说说自己的看法。

数据结构与算法是计算机专业的一门必修基础课,这门课提到一个公式 算法+数据结构=程序,但似乎我们每天写代码,很少会跟算法直接打交道,甚至根本不需要用到什么算法,大部分时候都是在调 API,写业务逻辑。那程序员为什么要学习算法,学算法的意义在哪里?

昨天看到一篇文章挺有感触的,说程序员是吃青春饭,35岁就是一道坎。其实,年龄并不是本质问题,而真正的问题在于这个年龄是否具备了与之匹配的竞争力。如果35岁的能力还停留在25岁,相信企业不是傻子。

李开复老师谈到算法的重要性说:

编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。这些基础课程是“内功”,新的语言、技术、标准是“外功”。整天赶时髦的人最后只懂得招式,没有功力,是不可能成为高手的。

算法作为程序员的底层能力,我认为学习算法重要性有以下几个方面

1、培养罗辑思维

写代码是一个注重逻辑的工作,男生逻辑思维强,所以 90% 写代码的都是男生(向女程序员致敬),女生思维缜密,所以测试部门的女生比例要要高于开发很多。而算法是最能考验逻辑思维能力的。一个逻辑思维不强的程序员写出的代码经常出 Bug,考虑问题不周全,而学习算法有利于提高罗辑思维能力。

2、更深入理解计算机系统

计算机系统是一个非常庞大复杂的体系结构,从底层操作系统、数据库、中间件框架、网络都离不开高效的算法与合适的数据结构,拿数据库索引举例来说,为什么索引不使用查询高效的数组结构来存储数据,也不用更新操作高效的链表来组织数据,而使用一种树结构来存储?树结构中,为什么 B+ 树是最合适的索引结构呢?如果你了解数据结构,那么对数据库的索引基本原理就会有更深刻的理解,也能帮助我们更好的出高效的 SQL 语句。

3、写出更高效的代码

一个普通的算法与一个最优算法的差距有多大呢?举个简单例子,从一个从有序列表中找某个值,如果顺序查找,最差的情况要遍历整个列表,而如果是用二分查找(又称折半查找),最差的情况也只要 O(logn),在数据量小的时候可能感受不出来,如果是1亿条数据,后者最多也只需要 27 次就找到了答案。而在人工智能大数据时代的今天,算法的重要性无疑变得越来越重要,了解每种算法的优劣,每种数据结构的特性,将有利于写出效率更高的代码。

4、获得一份更好的工作

工资高,牛人多,有利于成长的工作是我们所向往的,写程序,除了热爱之外,薪水也很重要,没钱谈什么理想?大公司,特别是 BAT,Google、FaceBook、微软这样的公司,薪水福利肯定非常诱人,在阿里,一个 P6 的工程师年薪就有 30~40 万左右。这些公司,挑选人才的标准有一条肯定是通用的,就是找最聪明的人、计算机基础扎实的人。而算法就是一种考察办法,所以,要想进入牛逼的公司,算法这一关你是躲不过的。

说到底,算法作为计算机科学的基石,如果希望在程序员这条路上有更高的追求,我们应该认真对待。

推荐两个顶尖学校的算法课程:

第一个是MIT的算法导论公开课,网易公开课有中文字幕。链接地址: http://open.163.com/special/opencourse/algorithms.html

第二个是普林斯顿大学的算法课程,可以在B站免费观看,链接地址: https://www.bilibili.com/video/av8994940

如果你想好好学算法,不如从现在就开始,感兴趣的可以加入我们星球,一起学习打卡,对抗惰性。

640?wx_fmt=jpeg

你可能感兴趣的:(我们不一样,我们为什么要学习算法)