题图:来自「训练日」屏幕截图
使用 macOS 的朋友大部分都用过 Homebrew。2015年,Homebrew 的作者 Max Howell 在 Twitter 上发布了一条消息:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
意思就是,我们90%的工程师都用你写的软件(Google 有多爱 Apple),但你居然不能在白板上写出反转二叉树的代码,所以,滚吧。
当时一石激起千层浪,程序员们奔走相告,并愤怒的谴责 Google:面试居然要徒手反转二叉树了,我在电脑上也写不出二叉树的算法啊,等等。很多人写文章表达了观点,唐巧曾经写过一篇「你会反转二叉树吗?」很有价值,大家可以找来读读。
[http://blog.devtang.com/2015/06/16/talk-about-tech-interview/]
上一篇关于「C10K 的文章」同样引发了类似的疑问,那程序员要不要去深入理解这些相对基础的概念和算法呢,「我每天只是去做做表单写写业务代码然后把数据存到数据库再取出来就这么点事需要了解算法吗?」
今天我从另一个角度给大家掰饬一下这件事。
过去五到十年,是中国互联网爆发性增长的时间,除了互联网巨头的飞速崛起,资本也催生了大量的创业公司。但是这些创业公司大部分都没有在做技术驱动的事儿,多数创业都是利用技术解决人们衣食住行和社交娱乐的需求,这些业务在不成规模的情况下,很少会使用到基础的、复杂的技术和算法。各个领域开源丛生,搭个架子就可以写业务代码了,至于用户和数据规模,那得公司能活到那个份上,95% 的公司都在没有遭遇 C10K 的时候就已经消失了。但是不要紧,因为新的创业公司又出现了,创业者和他的员工开始继续做类似的事情,所以很多程序员不知道 C10K 和二叉树就是很正常的事情了,因为不需要嘛。
时至今日,大公司已经起来了,资本变得冷静,衣食住行问题都解决的差不多了,缺乏技术、内容和数据门槛的创业会越来越少,创新和基础行业的突破迫在眉睫,重复写那些 CRUD 代码的好日子真的不远了,虽然现在即使大型科技公司也存在这样的工种,但是工具化势在必行,总有一天你会发现自己的编程工作就被别的什么东西取代了……呢?
这么看来,是不是应该去学习和理解那些基础的概念、算法和引擎呢?很多人会说,需要的时候再学吧,那万一你学不会呢?毕竟知道和掌握是两个相差十万八千里的概念,你写过反转二叉树的代码,至少说明你是有能力学会的,我想这也是很多大公司招聘时面试算法的原因吧。
今天推荐一个算法大赛,如果你不知道二叉树,那怎么参与呢?
点击阅读原文,报名参加。