• 欢迎访问天天编码网站,Java技术、技术书单、开发工具,欢迎加入天天编码
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏天天编码吧
  • 我们的淘宝店铺已经开张了哦,传送门:https://shop145764801.taobao.com/

Google工程师巩朋的算法之路(4)

算法书单 tiantian 5488次浏览 3个评论 扫描二维码

提高

实习实习着就到了研二暑假,接下来就是求职季。

求职季时我有一种莫名的复仇感——尼玛之前百度实习面试老子被你们黑的漫天飞翔,这回求职老子要把你们一个个黑回来,尼玛。

现在回想当时的心理实属傻逼+幼稚,但这种黑暗心理也起了一定的积极作用:我丝毫不敢有任何怠慢,以至于在5月份底我就开始准备求职笔试面试,比身边的同学早了两个月不止。

我没有像身边的同学那般刷题——而是继续看书抄代码学算法,因为我认为那些难得离谱的题面试官也不会问——事实上也是如此。

1《The Algorithm Design Manual》

因为很多 Coding Interview 的论坛都提到这本 红皮书,我也跟风搞了一本。事实证明,仅仅是关于 Backtrack Template 那部分的描述就足以值回书价,更不用说它的 Heuristics 和课后题。

  • 豆瓣评分: 8.7
  • 购买链接: 京东
  • 推荐指数: 五颗星

2《编程珠玑》和 3《编程珠玑(续)》

这两本书就不用多介绍,《编程珠玑》 和 《编程珠玑(续)》,没听说过这两本书请自行面壁。前者偏算法理论,后者偏算法轶事,前者提升能力,后者增长谈资,都值得一读。

Google工程师巩朋的算法之路(4)

  • 豆瓣评分: 9.2
  • 购买链接: 京东
  • 推荐指数: 五颗星

 

  • 豆瓣评分: 8.3
  • 购买链接: 京东
  • 推荐指数: 五颗星

4《The Science of Programming》

读到 《编程珠玑》 里面关于 Binary Search 的正确性证明时我大呼过瘾,原来程序的正确性也是可以推导的,然后我就在那一章的引用里发现 David Gries 的 《The Science of Programming》。看名字就觉得很厉害,直接搞了一本开撸。

不愧为 《编程珠玑》 引用的书籍,读完 《The Science of Programming》 之后,我获得了 证明简单代码段的正确性 这个技能——求职面试三板斧之二。

证明简单代码段的正确性 是一个很神奇的技能——因为面试时大多数公司都会要求在纸上写一段代码,然后面试官检查这段代码,如果你能够自己证明自己写的代码是正确的,面试官还能挑剔什么呢?

之后就是各种面试,总之就是 项目经历纸上代码正确性证明 这三板斧,摧枯拉朽。

进化

求职毕业季之后就是各种 Happy,Happy 过后我发现即将面临另一个问题:算法能力不足。

因为据说以后的同事大多是 ACM 选手,而本屌从来没搞过算法竞赛,而且知道的算法和数据结构都极为基础:像那些元胞自动机、斐波那契堆或是线段树这些高端数据结构压根只是能把它们的英文名称 拼写 出来,连用都没用过,所以心理忐忑的一逼。

为了不至于到时入职被鄙视的太惨烈,加上自己一贯的算法自卑症,本屌强制自己再次学习算法:

5《算法(第四版)》

《算法(第四版)》 是我重温算法的第一本书,尽管它实际就是一本 数据结构的入门书,但它确实适合当时已经快把算法忘光的本屌——不为学习,只为重温。

Google工程师巩朋的算法之路(4)

这本书最大的亮点在于它把 Visualization 和 Formatting 做到了极致——也许它不是最好的数据结构入门书,但它绝壁是我读过的排版最好的书,阅读体验爽的一逼;当然这本书的内容也不错,尤其是红黑树那一部分,我想不会有什么书会比此书讲的更明白。

  • 豆瓣评分: 9.4
  • 购买链接: 京东
  • 推荐指数: 五颗星

6《Advanced Data Structures》

《Advanced Data Structures》 是 MIT 的高级数据结构教程,为什么会找到这个教程呢?因为 Google “Advanced Data Structures” 第一个出来的就是这货。

这门课包含各种让本屌世界观崩坏的奇诡数据结构和算法,它们包括但不限于:

  • 带 “记忆” 的数据结构(Data Structure with Persistence)。
  • van Emde Boas(逆天的插入,删除,前驱和后继时间复杂度)。
  • o(1) 时间复杂度的的 LCA、RMQ 和 LA 解法。
  • 奇幻的 o(n) 时间复杂度的 Suffix Tree 构建方法。
  • o(lglgn) 的 BST。

总之高潮迭起,分分高能,唯一的不足就是没有把它们实现一圈。

总结

从接触算法到现在,大概七年:初学时推崇算法牛逼论,实习后鼓吹算法无用论,读研后再被现实打回算法牛逼论。

怎么这么像辩证法里的肯定到否定再到否定之否定。

现在来看,相当数量的鼓吹算法牛逼论的人其实不懂算法的重要性——如果你连用算法解决 实际 问题的经历都没有,那你如何可以证明算法很有用?而绝大多数鼓吹算法无用论的人不过是低水平码农的无病呻吟——他们从未碰到过需要用算法解决的难题,自然不知道算法有多重要。

Peter Norvig 曾经写过一篇非常精彩的 SICP 书评,我认为这里把 SICP 换成算法依然适用:

To use an analogy, if algorithms were about automobiles, it would be for the person who wants to know how cars work, how they are built, and how one might design fuel-efficient, safe, reliable vehicles for the 21st century. The people who hate algorithms are the ones who just want to know how to drive their car on the highway, just like everyone else.

MIT 教授 Erik Demaine 则更为直接:

If you want to become a good programmer, you can spend 10 years programming, or spend 2 years programming and learning algorithms.

总而言之,如果你想成为一个码农或是熟练工(Code Monkey),你大可以不学算法,因为算法对你确实没有用;但如果你想成为一个优秀的开发者(Developer),扎实的算法必不可少,因为你会不断的掉进一些只能借助算法才能爬出去的坑里。

 


天天编码 , 版权所有丨本文标题:Google工程师巩朋的算法之路(4)
转载请保留页面地址:http://www.tiantianbianma.com/msra-gong-peng-algorithm-four.html/
喜欢 (11)
支付宝[多谢打赏]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(3)个小伙伴在吐槽
  1. 好,买了
    匿名2017-09-30 11:14 回复 未知操作系统 | Chrome 60.0.3112.78
  2. 不愧是大佬
    匿名2017-10-26 11:12 回复 Windows 7 | Chrome 50.0.2661.102
  3. alert('666')
    匿名2017-10-27 21:44 回复 Windows 10 | Chrome 62.0.3202.75