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

2019 年 4 月 02 日

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

出处:极客时间《数据结构与算法之美》


很多技术人都很迷茫,觉得自己做的项目没有技术含量,成天就是卖苦力。技术的东西,日新月异,有些人总在忙于追求热点新技术,东学学、西学学,平时泛泛地看技术书籍、技术文章,但始终根本抓不住技术的本质,干了三五年之后,感觉并没有积累到什么东西,跟刚毕业的大学生能力差不多,因此深深的感到焦虑。


实际上,本质的原因,还是我们没有掌握到,做为程序员,我们该积累什么东西?是各种知识、技术本身吗?我觉得不是,我觉得最应该积累的是“能力”。


能力就像是内功,而知识就像是招式。知识会过时,而能力永远都不会过时。初级程序员才比招式,高级程序员只看内功。


对于一个程序员来说,如何修炼内功呢?首要是打好基本功,比如掌握操作系统、编译原理、数据库理论等,但最基础的应该就是扎实的掌握数据结构和算法了。


不过,虽然道理都懂,但你可能还是会有很多困惑,比如下面这些:


  • 总感觉数据结构和算法是“屠龙技”、“虚招式”,除了面试,工作中根本用不着;

  • 不懂算法,只要编程语言API、开发框架用得熟练,代码照样写得“飞”起来。


实际上,如果你做的只是简单的业务逻辑翻译工作,开发的系统没有性能压力,那你确实只需要掌握 API、框架用法就足够,但是,你真的就甘心做一个天花板很低的 CRUD 码农吗?


如果你开发的业务比较复杂,你就需要设计复杂的架构来应对,进而就要用到各种复杂的技术、中间件、框架。要想更好地用好这些东西,你就需要了解它们的底层原理。而为了保证性能、扩展性等,它们底层使用了大量的数据结构和算法,比如我们常用 Redis 的有序集合来实现排行榜功能,但你知道它底层是依赖什么数据结构和算法吗?为什么要用跳表和散列表两种数据结构来构建索引呢?扎实的数据结构和算法功底,可以帮助你快速的读懂源码,更加从本质上理解它的设计原理。


如果你开发系统有很高的性能压力,那一个简单的数据存储结构的选择问题(比如是用数组来还是链表),就可能会产生成千上万倍的性能差别。这个时候,数据结构和算法的价值就完全凸显出来了。而且,即便你是用编程语言提供的现成的类来开发,但如果你不知道这些类库背后的原理,不懂得时间、空间复杂度分析,那你又如何有信心能用好、用对它们?你又该如何评估代码的性能和资源的消耗?


不过,你可能会说,我是一个有追求的程序员,我知道数据结构和算法很重要,但是,国外有这么多经典的数据结构和算法书籍、视频、动画,为啥要花钱来学习这个专栏呢?


尽管有很多书籍讲的通俗易懂,也有很多书籍全面、经典,但是大部分都偏理论,书中的例子也大多脱离真实的软件开发。看完书之后,很多人只是死记硬背了一些知识点而已。这样填鸭式的学习,对于锻炼思维、开拓眼界并没有太多作用。而且,从基础理论到应用实践,有一个非常大的鸿沟要跨越,这是大学教育的普遍不足之处,这也是为什么我们常常觉得大学里学过的很多知识都没用。


所以,我并非只是单纯地把某个知识点讲清楚,而是结合我的理解、实践和经验来讲解,力争成为一个跟所有国内、国外经典书籍都不一样的专栏,一个可以长期影响一些人的专栏。


我的专栏最大特色就是,列举大量实际软件开发中的场景,给你展示如何利用数据结构和算法解决真实的问题。我掰着指头数了下,整个专栏会涵盖 100 多个算法真实项目场景案例。我还手绘了一些清晰易懂的详解图(总共有 300 多张),让晦涩难懂的算法变得轻松有趣。



手绘图—出自《数据结构与算法之美》


现在,专栏已经更新完毕,72 篇文章27 万字,这期间也陆陆续续有 48000+ 程序员加入学习,是极客时间订阅量最好、好评最多的专栏之一。很多读者对我评价都很高,觉得我真的不只是技术好、逻辑性强,还很会讲,能够点出技术的本质、算法的本质,娓娓道来,听得十分过瘾。很多学员都跟追剧一样,每天早上第一件事就是看我的更新。说实话,我自己都没想到会这么受欢迎。


留言区赞美的话太多了,现在我截取很少的一部分,展示给你。如果你感兴趣,可以试读一下专栏中“结束语 | 送君千里,终须一别”那篇文章,里面的留言足以看出读者对我的无比认可!



我是谁?


王争,前 Google 工程师,之前从事谷歌翻译相关的开发工作。在业余时间,持续研究数据结构和算法,几乎读过所有的数据结构和算法书籍,切过上千道算法题目。除此之外,我一直没有脱离一线编程工作,所以有大量的数据结构和算法的实战经验,希望我的专栏能开启你算法学习之门。


你能获得什么?


1.掌握常用的数据结构与算法的由来、原理、实现、特点


不仅让你搞懂每种数据结构和算法的原理和实现,还让你知道,他们的历史背景和由来。真正弄明白我们为什么需要这个数据结构和算法,它是为了解决什么样的问题才被创造出来的。掌握每个数据结构和算法的本质,也就能掌握创新的源头。


2.锻炼逻辑思维、算法思维,提高编码质量、编程能力


逻辑思维,对于一个程序员来说是非常重要的,而算法思维,对于写出高性能的代码也是非常关键的。专栏不仅仅是数据结构和算法知识的一种填鸭式的灌输,更加侧重于对你逻辑思维、算法思维的训练。通过 72 篇文章,跟随着我的逻辑讲解,潜移默化地提高你的逻辑思维、算法思维。


3.教会你如何将算法应用于实战,如何在实战中应用算法


我在讲解每种数据结构和算法的时候,都会配合一到两个真实软件开发中的问题来讲解,同时还会配合一到两个非常考验你思维的课后思考题,加深你的理解。除此之外,我还通过几个大的实战项目,完整的给你展示了,在一个大项目中,如何利用数据结构和算法,来解决问题,提升性能。


可以点击《数据结构与算法之美》试看专栏内容,下面是专栏目录:



戳我试读或订阅


2019 年 4 月 02 日 08:006726

评论 1 条评论

发布
用户头像
花了99,学习学习
2019 年 04 月 02 日 09:51
回复
没有更多评论了
发现更多内容

十年磨一剑-BIGO全球音视频技术解决方案

InfoQ_3597a20b53cc

人工智能 大数据 技术

linux入门系列2--CentOs图形界面操作及目录结构

黑马腾云

Linux centos7 操作系统 系统运维

吐血整理Windows电脑入侵自检大全

Young先生

黑客 windows 日志 异常 自检

CentOS 7 配置Supervisor 服务遇到的坑总结

Young先生

centos 报错 Supervisor

CIC国信公链:做坚实的底层技术支撑,让区块链为现代农业插上腾飞的翅膀

CNG农业公链

区块链 农业发展 CIC国信公链 CNG农业链 赵其刚

Mac JetBrains(IDE)常用快捷键

王坤祥

JetBrains 快捷键

RPC原理

石印掌纹

跟我一起基于Karma搭建一个测试环境(上)

Jack Q

前端进阶训练营 Karma 测试框架搭建

彻底解决雪花算法时间回拨问题新方案

柿子

算法 雪花算法

物流与区块链加供应链的现状与未来趋势

CECBC区块链专委会

行业资讯 区块链技术 供应链

lgloo Software 的 Jira Cloud 转型之旅

Atlassian速递

项目管理 DevOps 敏捷开发 Jira Cloud

linux入门系列4--vi/vim编辑器

黑马腾云

vim Linux centos7 操作系统 VI

linux入门系列5--新手必会的linux命令

黑马腾云

Linux centos7 Shell linux命令 linux操作

「分布式一致性协议」从2PC、3PC、Paxos到 ZAB

海星

低/零代码平台的优点有哪些?

代码制造者

编程语言 低代码 零代码 信息化 编程开发

话题讨论 | 特斯拉和拼多多杠上了,你有什么看法?

InfoQ写作平台

写作平台 话题讨论

linux入门系列3--常见的linux远程登陆管理工具

黑马腾云

Linux xshell securecrt putty finallshell

Django2.x中url路由的path()与re_path()参数解释

Young先生

django path url re_path 参数

9个典型的开发者关系面试题

开发者关系

开发者关系 开发者运营 技术运营 开源社区

定义“开发者关系”

开发者关系

开发者关系 开发者运营 技术运营 开源社区

Linux数据流重定向

王坤祥

Linux linux操作

360 Atlas生产环境使用心得

心平气和

MySQL 分库分表 Proxy Atlas

LeetCode题解:88. 合并两个有序数组,双指针+从后往前,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

Linux入门系列1--环境准备及Linux安装

黑马腾云

Linux centos 运维 操作系统

随着区块链技术的成熟,全球企业开始拥抱公共区块链

CECBC区块链专委会

区块链技术 公共区块链

Windows AD巡检报错处理

Young先生

windows AD 报错 巡检

同行分析优化

誓约·追光者

Sparksql 优化

开发者关系(DevRel)的新手指南

开发者关系

开发者关系 开发者运营 技术运营 开源社区

散列表高级应用之把用户访问记录优化到极致

架构师修行之路

哈希表 数据结构与算法

Django 表单处理流程详解

Young先生

django 表单 流程

Linux之crontab命令

王坤祥

Linux crontab

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