面试过几百个程序员,我发现很多人都缺乏数据结构和算法知识

有人说,算法,先于计算机存在于世,比编程语言本身更为重要,语言只是工具,而算法才是灵魂。而程序就等于算法加数据结构。足以可见,想要在编程之路上走的更长远,数据结构与算法就是必须要掌握的基本功。

可是,“真实”的情况是什么样的呢?

尽管大学学过这门课程,甚至网上有很多学习资料,依旧对对数据结构和算法一窍不通?

只听说过数组、链表、快排这些最最基本的数据结构和算法,稍微复杂一点的就完全没概念?

数据结构和算法,跟操作系统、计算机网络一样,是脱离实际工作的知识?除了面试,可能这辈子也用不着?

就算不懂这块知识,只要Java API、开发框架用得熟练,照样可以把代码写得“飞”起来?

事实真的是这样吗?

今天我就来详细聊一聊,为什么要学习数据结构和算法。

想要通关大厂面试,千万别让数据结构和算法拖了后腿

很多大公司,比如BAT、Google、Facebook,面试的时候都喜欢考算法、让人现场写代码。有些人虽然技术不错,但每次去面试都会“跪”在算法上,很是可惜。那你有没有想过,为什么这些大公司都喜欢考算法呢?

校招的时候,面试的学生通常没有实际项目经验,只能考察基础知识是否牢固。社招就更不用说了,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。相比短期能力,他们看中你的长期潜力。

你可能要说了,我不懂数据结构与算法,照样找到了好工作啊。那我是不是就不用学数据结构和算法呢?当然不是。你别忘了,我们学任何知识都是为了“用”的,是为了解决实际工作问题的,学习数据结构和算法自然也并不例外,那么它实际工作中到底能起到多大的作用呢?

业务开发工程师,你真的愿意做一辈子CRUD boy吗?

如果你是一名业务开发工程师,你可能要说,我整天就是做数据库CRUD(增删改查),哪里用得到数据结构和算法啊?

是的,对于大部分业务开发来说,我们平时可能更多的是利用已经封装好的现成的接口、类库来堆砌、翻译业务逻辑,很少需要自己实现数据结构和算法。但是,不需要自己实现,并不代表什么都不需要了解。

如果不知道这些类库背后的原理,不懂得时间、空间复杂度分析,你如何能用好、用对它们?存储某个业务数据的时候,你如何知道应该用ArrayList,还是LinkedList呢?调用了某个函数之后,你又该如何评估代码的性能和资源的消耗?

基础架构研发工程师,写出达到开源水平的框架才是你的目标!

现在互联网上的技术文章、架构分享、开源项目满天飞,照猫画虎做一套基础框架并不难。高手之间的竞争反而在细节。这些细节就包括,你用的算法是不是够优化,数据存取的效率是不是够高,内存是不是够节省等等,这些累积起来,就决定了一个框架是不是优秀。

对编程还有追求?不想被社会淘汰?就不要只是能写出凑合能用的代码!

为什么说初级程序员才比招式,高级程序员只看内功呢?

何为编程能力强?是代码的可读性好、健壮?还是扩展性好?我觉得没法列,也列不全。但是,

如果你在一个成熟的公司,或者像BAT这样的大公司,面对的是千万级甚至亿级的用户,开发的是TB、PB级别数据的处理系统。性能几乎是开发过程中时刻都要考虑的问题。

一个简单的ArrayList、Linked List的选择问题,就可能会产生成千上万倍的性能差别。这个时候,数据结构和算法的意义就完全凸显出来了。一旦掌握数据结构和算法,你就会常常被它的强大威力所折服。之前你可能需要费很大劲来优化的代码,需要花很多心思设计的架构,现在很容易就可以解决了。

我是谁?

我叫王争,前Google工程师,从事Google翻译和知识图谱相关的开发工作,深入研究算法数十年。现任某金融公司资深系统架构师,核心业务接口平台负责人,负责公司核心业务的架构设计、开发,以及可用性、高性能等相关技术问题的解决。

我为什么要开设这门课程?

自从读研究生时,一个师兄给了我一本《算法导论》,从此我一头扎进算法世界,到现在也十多年了。这期间,我研究过数十本数据结构与算法的书籍,并对它们进行了仔细地对比、分析。

我发现,像《算法导论》这些经典书籍,虽然很全面,但是过于缺乏重点。很多人学起来都非常困难。而市面很多在线课程或者线下课程,大多是为了“应试”,只讲一些看似通用,实则脱离真实开发场景的内容。费劲学完感觉根本用不上,过不了几天就忘了。

鉴于此,我很想做一个能让工程师真正受用的,能够不拘泥于编程语言,与实际开发场景联系紧密,而又能够帮你训练算法思维,真正提升编程内功的数据结构与算法课程。

这个课程适合谁来学习?

看到数据结构和算法里的“算法”两个字,很多人就会联想到“数学”,觉得算法会涉及很多深奥的数学知识,会想我数学基础不是很好,学起来会不会很吃力啊?

数据结构和算法课程确实会涉及一些数学方面的推理、证明,但是这个你完全不需要担心,因为我的专栏不会像《算法导论》那样涉及很多高深的推理过程。

当然,我希望你最好有些编程基础或者项目经验,这样我给你讲数据结构和算法如何提高效率、如何节省存储空间,你就会有很直观的感受。因为,对于每个概念和实现过程,我都会从实际场景出发,不仅教你“是什么”,还会教你“为什么”,并且告诉你遇到同类型问题应该“怎么做”。

所以,不管你是初入职场的初级工程师,还是工作多年的资深架构师,又或者是想转大数据、人工智能或者区块链这些热门领域的程序员,你都可以来学学这门,计算机科学中的基础、核心课程。或者说,任何对编程与追求的人,都可以来学学这块被称作“程序设计的灵魂”的知识。

学完这个专栏你能获得什么?

掌握数据结构与算法的核心知识,轻松应对BAT等大厂面试

我根据自己研读数十本算法书籍和多年项目开发的经验,精选了20个最实用数据结构和算法结合具体的软件开发实例,由浅入深进行讲解背后的设计思想,并适时总结一些实用“宝典”,保证你印象深刻、轻松应对中小型公司的面试。

提升算法思维,训练解决实际开发工作难题的强能力

这部分我会讲一些不是那么常用的数据结构和算法。虽然不常用,但是这些内容你也需要知道。设置这一部分的目的,是为了让你开拓视野,强化训练算法思维、逻辑思维。如果说学完基础部分可以考80分,那掌握这一部分就能让你成为尖子生!

学习开源框架、底层系统的设计原理,提升工作实战技能

最后我会通过实战部分串讲一下前面讲到的数据结构和算法并且结合开源项目、框架或者系统设计问题,剖析它们背后的数据结构和算法,帮你提升读懂源码的能力(JDK很多源码,不乏大量的数据结构,例如大家喜闻乐见的面试题HashMap)。

整个专栏会涵盖100多个算法真实项目场景案例。我还亲自画了一些清晰易懂的详解图,帮你理解核心概念和实现过程,展示每个知识点的框架逻辑,让晦涩难懂的算法变得轻松有趣。(相信我,看完专栏你肯定会感到惊喜!)

原文发布于微信公众号 - 猿天地(cxytiandi)

原文发表时间:2018-09-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

计算机c语言好学吗?要是想自学应该怎么办?

C语言放在之前都是必备的基础语言,由于指针的存在很多人觉得C语言是一门特别难编程语言,放在十年前C语言是学习编程的必备语言,但整个软件行业发展趋势,趋向于高度集...

15930
来自专栏少儿编程

你肯定学了假的编程

很多人开始学编程的时候都会有一个疑惑,我到底该学什么编程语言?参考的依据要么来自“砖家”、要么是来自热门语言排行榜、要么是来自薪资排行榜等。殊途同归,所有的人都...

15910
来自专栏程序员互动联盟

为啥计算机语言难学?

很多人觉得计算机太难学了,里面很多专业术语都不明白,如果单纯从人类语言的角度考虑,很多计算机语言的确很难直接体现出很人性化的地方,所以要学好计算机语言,首先不是...

34860
来自专栏我的小碗汤

Google工程师:如何看待程序员普遍缺乏数据结构和算法知识?

有人说,算法,先于计算机存在于世,比编程语言本身更为重要,语言只是工具,而算法才是灵魂。而程序就等于算法加数据结构。足以可见,想要在编程之路上走的更长远,数据结...

32330
来自专栏程序员互动联盟

聊聊C语言-程序和编程语言

前几天看到新闻说是美国总统奥巴马写代码并且鼓励全部的美国人都应该学习编程,一时编程成了人们热议的话题。那么小编接下来将要写一个系列的文章来带你进入...

44980
来自专栏程序员互动联盟

天分不够,能精通C语言嘛?

疑惑一 做C++一年多了,感觉自己基础还是很差,内存管理,指针等等都是一知半解,做项目也是经常犯低级错误,该怎么办? 之前的文章里面可能也多少提到过,c++学起...

34760
来自专栏企鹅号快讯

英语基础不好,能学好编程吗?

英语基础不好,能学好编程吗?相信这是摆在很多学习编程但英语不好的人面前的困惑。 ? 那么英语到底影不影响对编程的学习呢,小编就来和你们说说。 如果你英文英语基础...

27060
来自专栏大数据文摘

大数据下的统计学:问题优先而非解法优先

194100
来自专栏web前端教室

如何训练属于自己的编程思路 | 7月13日晚十点 微课文字版

image.png 编程思想,这四个字博客精深,学起来近乎永无止境。例如JAVA编程思想,用了砖头那么厚的一本书,就为了写明白这四个字。 ? 那编程思路呢?范...

26090
来自专栏腾讯高校合作

《北京大学、腾讯联合在Coursera开设课程》分享有礼中奖信息

之前推送的《教授们说了,我们的目标是培养中国最优秀的程序员》分享有礼活动,中奖名单如下,恭喜幸运参与者!我们将按照问卷中填写的信息尽快邮寄奖品! 洪瑞琦 梓鑫 ...

45380

扫码关注云+社区

领取腾讯云代金券