0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Max Howell因为不会翻转一棵二叉树,被Google拒绝

算法与数据结构 来源:是不是很酷 2020-09-03 10:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

2015 年 6 月 10 日,Max Howell 发表了一篇推特:

简单翻译:Google 说,我们 90% 的工程师都使用你写的软件——Homebrew,但是因为你不能在白板上翻转一棵二叉树,所以,滚蛋。

这条 Twitter 在当年引发了不小的争论。

Homebrew 是 MacOS 上的一款非常著名的软件,它极大地简化了在 macOS 上的软件安装和管理流程,所以使用者众多,相当有业界影响力。如这条推特所说:Google 里 90% 的工程师都使用这款软件。

Max Howell 就是 Homebrew 的创作者,也是一名业内知名的 MacOS / iOS 工程师。他曾经是著名的网络电台 Last.fm 的首席客户端开发者,后来是 Twitter 的客户端 TweetDeck 的首席移动开发者。

2015 年,Max Howell 决定加入 Google。但是,根据 Max Howell 的叙述,他去 Google 面试,作为一名 iOS 业界专家,面试官没有问任何和 iOS 相关的问题。

Max Howell 的面试进行到第七轮,在一道算法题上出了问题。这个算法问题就是:翻转一棵二叉树。

这其实是一个很简单的算法问题。相信对很多还没有毕业的计算机专业的同学,都是很容易的。

其实,如今我们也已经很难判断 Max Howell 到底是不是真的不会这个算法问题?还是只是对这样的面试流程抗议?

我们也很难分辨,Google 不聘请 Max Howell 的真实原因,到底是因为他没有解答出这个问题?还是有其他原因?

对这些问题的分析,在当年很流行。有业内人士指出,Google 出这么简单的算法问题,显然已经是在放水了。而 Google 决定不招聘 Max Howell 的真实原因,很有可能不是能力问题,而是在面试过程中认为,Max Howell 的个人性格不适合 Google 的文化。

毕竟,面试不是考试,不是把问题回答正确就可以了。很多时候,面试的过程,是面试官在看,和候选人共事,共同探讨一个问题,共同解决一个问题,是怎样的体验。

还有很多人据此吐槽硅谷大公司的招聘方式。

有的人说:Facebook 不要我,因为我解不出八皇后问题。

有的人说:曾经 Amazon 让我翻转一个链表,当时我的灵魂就已逃离了那个房间。

有的人说:如果问我如何翻转一棵二叉树,我会当场把那个白板翻过来,然后说,看,我完成了。

还有人说:1997 年,Google 面试了我 6 个小时。最后一个问题是:为什么我们要聘用你?我的回答是:你们 TM 自己想吧。最后我拿到了 offer。

对于当代计算机行业,算法是不是一定这么重要?我的回答是,不一定。为此,我写过一篇文章:算法到底有什么用?对你来说可能真的没用。

那大公司面试为什么总要考算法?对此,我写过一篇文章,叫:大厂面试为什么总考算法?以及如何避开算法面试。

但如今,5 年时间过去了,这一切争论,对于当事人来说,或许都不重要了。无论是 Max Howell,还是 Google,都在这五年间,做出了不错的成绩。

大家虽然没有合作,但都有很好的未来。

而就在最近,我无意中翻到了 Quora 上对这个问题讨论的一个“老帖子”。

这个问题在 Quora 上是这样的:Homebrew 的作者 Max Howell 因为不会翻转一棵二叉树,被 Google 拒绝,这背后的逻辑到底是什么?

没想到两年以后,在 2017 年的 12 月份,Max Howell 自己亲自回答了这个问题。

Max Howell 的这个回答,我今年才看到。说实话,我读了好几遍。语言并不多,但却让我感触颇深,以至于我想逐句翻译,和大家分享。

以下是 Max Howell 的回答。

Hi, I’m Max Howell, I’ve spent the last two years not answering this, and many questions like it. Maybe I shouldn’t answer this.

大家好,我是 Max Howell。我尝试用了两年时间,不去回答这个问题,或者千千万万个和这个问题类似的问题。或许,我不应该回答这个问题。

So, what's the logic? Clearly I wrote something worthy of Google, right?

Google 拒绝我的逻辑到底是什么?很明显,我写了一些值得去 Google 的代码,对吧?

Well, no I didn't. I wrote a simple package manager. Anyone could write one.

其实,不是这样的。我只写了一个很简单的软件包管理工具。任何人都能写出来。

And in fact mine is pretty bad. It doesn't do dependency management properly. It doesn’t handle edge case behavior well. It isn’t well tested. It’s shit frankly.

实际上,我写的非常差。它甚至没有做好软件包的依赖管理。它也不能很好地处理很多用户的边界行为。它没有被充分测试。坦白地说,它就是一坨屎。

Is it any surprise I couldn’t answer their heavily computer-science questions well?

所以,如果我不能很好地回答那种“重量级”的计算机科学问题,真的那么惊讶吗?

On the other hand, my software was insanely successful. Why is that?

但是,另一方面,我的软件不可思议的成功。为什么?

Well the answer is not in the realm of computer science. I have always had a user-experience focus to my software.

我想,答案和计算机科学无关。或许是因为,我在我的软件中,总是更关注用户体验。

Homebrew cares about the user.

Homebrew 在乎它的用户。

When things go wrong with Homebrew it tries as hard as it can to tell you why, it searches GitHub for similar issues and points you to them. It cares about *you*.

当软件发生问题的时候,Homebrew 会尽最大的可能告诉你:为什么?它会在 Github 上搜索类似的 issues,并且将你指向这些可能的问题解决方案。它在乎*你*。

Most tools don’t give a shit about you. If they go wrong, well screw you. Homebrew helps you. And if it can’t help you I made it so, so easy to fix Homebrew (I built a command into the base for editing and fixing Homebrew). You can make Homebrew better.

大多数工具不在乎你。如果事情出现了问题,那么你将一筹莫展。Homebrew 在尝试帮助你。甚至,如果它无法帮助你,你可以直接修改它!(我创建了一个命令,可以让你直接去编辑或者修改 Homebrew。)你可以让 Homebrew 更好。

Homebrew is a shining example of true Open Source.

我坚信:Homebrew 是真正开源世界中一颗闪亮的星。

Maybe Homebrew doesn’t do dependency management well, but it does it in a way you care about.

或许 Homebrew 没有很好地完成依赖管理,但是,它用一种可能你更关心的方式完成了它。

Unlike the competition at the time Homebrew used the dependencies on your Mac as a base thus saving you intense amounts of time installing software and quite a lot of pain, because practically speaking a large dependency graph breaks.

不像当时的大多数竞争者,Homebrew 直接使用你的 Mac 上的软件依赖关系作为基础,从而为你节省了大量安装软件的时间,少了很多痛苦。因为,根据我的经验,使用一个更大的依赖图,事情总是会出问题。

But that isn't computer science and it didn’t involve any graphs or trees so I guess I suck.

但是,这一点和计算机科学没有半点关系,也不牵扯到任何图或者树这类我完全不擅长的东西。

I want to defend Google, for one I wasn't even inverting a binary tree, I wasn’t very clear what a binary tree was.

在这里,我想为 Google 辩解两句。我确实不会如何翻转一棵二叉树。我甚至不是特别清楚二叉树到底是什么。

I studied Chemistry not Comp-Sci. Sure, for my masters dissertation I used Mathematica and modeled the quantum mechanical properties of Helium—I did a good job actually—but it wasn’t computer science.

我的专业其实是化学,不计算机科学。当然,我的硕士论文中使用了数学,并且为氦原子的量子学特性进行了建模。我相信我的硕士论文还不错,但这和计算机科学无关。

But well, what the fuck does comp-sci have to do with modern app development? And well, that’s all I want people to take from my tweet.

但是,计算机科学,到底和现代软件 App 的开发有什么关系?这是我希望大家通过我的推特,去思考的东西。

Google in fact gave me seven interviews and I did well in the software engineering ones, because that is actually my talent.

Google 实际上给了我七轮面试。在软件工程面试中,我是相当出色的。这是我的天赋所在。

I feel bad about my tweet, I don’t feel it was fair, and it fed the current era of outragism-driven-reading that is the modern Internet, and thus went viral, and for that I am truly sorry.

对于我发的那条推特,我也会觉得它可能不合适。这条推特为很多“愤青”提供了“养料”,并且火了。这就是现代互联网。对此,我感到抱歉。

But ultimately, should Google have hired me? Yes, absolutely yes.

但如果问我,Google 是不是应该聘用我?我的回答绝对是:是的,Google 绝对应该聘用我。

I am often a dick, I am often difficult, I often don’t know computer science, but. BUT. I make really good things, maybe they aren't perfect, but people really like them.

我承认,我是个混蛋,我很难相处,我不懂那么多计算机科学。但是,但是,我创造了优秀的作品。或许它不完美,但人们喜欢它。

Surely, surely Google could have used that.

其实,Google 本是可以抓住这一点的。

通过这个回答,我相信大家可以看出来,Max Howell 依然是那个“狂妄”的开源作者。我严重怀疑我的翻译让他谦虚了一些。实际上,上面的翻译,我修改了一稿,把一些原本我个人习惯使用的“谦虚”的用法去除了。

但这个回答给我感触最深的,是 Max Howell 描述的关于 Homebrew 的理念。用一个比较俗套的成语总结,就是以人为本。说的不要那么文驺驺,就是尊重你的用户。

我在国内做 iOS 开发,算比较早的。2011 年开始,陆陆续续上架了几个小 App,直到大概 2015 年停止维护。

学习 iOS 开发的过程确实极大地拓展了我的技术视野,因为 iOS 开发和我之前接触的大多数技术栈都极其不同。但是,这么多年过去以后,回头看,这段经历让我收获了更多和技术无关的东西。

我第一次感受到了:技术和人的距离,竟然如此之近。

有一名老爷爷,在 2017 年给我发来一封邮件,让我感触颇深。

邮件中,他给我的 App 提了一些建议,并且告诉我,他已经使用我的这个小 App 三年了。

后来,我跟他随便聊了两句,他说他住在美国一个鸟不拉屎的小镇上,他自称自己是名艺术家,还出版了一本和艺术相关的图书。

他给我了一个亚马逊链接,我说我不会买的。他打回一个笑 cry 的 emoji

这是我第一次意识到,冷冰冰的代码,竟然可以连接无论是年龄,国籍,种族,地理位置,职业,以及性格,都如此遥远的两个人。

后来,我在慕课网出了一些课程。

在这个过程中,给我感触最深的,是在课程的问答区,我和大家的交流。说句实话,我学会了很多东西。很多东西在技术之外,但是,它们被技术,连接在了一起。

所以我决定写公众号。我想,对于更加广泛的技术世界的探讨,或许能让大家带给我更多的启发。我的目的是自私的。

有很多同学问我各种问题,但我不是各个领域的专家,对于一些过于细节的问题,也没有时间精力在非课程的问答区一一解答。所以我又开设了知识星球,大家可以在那里畅所欲言。从技术提问,到发表观点。

可能并不是所有的观点我都赞同,但我喜欢这种观点的碰撞。每次这种碰撞后,都能带给我更深刻的思考。

我想,这就是“人”的魅力。

我喜欢代码,喜欢逻辑,喜欢它们的严谨,以及这种严谨背后,依然可以产生的无限可能。

我高中毕业后选择计算机专业,是因为我以为,使用计算机,我可以凭空创造出一个完全属于我自己的宇宙。

后来,我才慢慢发现,我们的宇宙之所以精彩,不是因为上帝的逻辑有多么严谨。而是因为,有我,有他,有她,还有你。

因为人。

或许,这就是我会突然如此崇拜这名,不会翻转二叉树的大神,的原因吧。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Google
    +关注

    关注

    5

    文章

    1819

    浏览量

    60693
  • 算法
    +关注

    关注

    23

    文章

    4816

    浏览量

    98795
  • 二叉树
    +关注

    关注

    0

    文章

    74

    浏览量

    13024

原文标题:不会翻转二叉树的大神

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MAX96712 linux驱动程序如何让它们正常工作

    步是尝试让max96712正常运行。我添加了max96712设备和驱动程序。该驱动程序是从ADI网站下载的:MAX96712设备驱动程序|ADI开发人员。第
    发表于 05-15 07:15

    UniStore正式全面开放

    5月7日,宇科技正式宣布,全球首个人形机器人任务动作应用商店——宇UniStore官方共享应用平台即日起面向全球用户全面开放。用户可通过该平台开发和下载机器人应用,像安装手机App样简单,无需任何底层编程能力。
    的头像 发表于 05-09 11:22 1083次阅读

    Cadence与Google合作,利用ChipStack AI Super Agent在Google Cloud上扩展AI驱动的芯片设计

    Cadence ChipStack AI Super Agent 集成 Google Gemini 模型,加速新代代理驱动型设计自动化 中国上海,2026 年 4 月 24 日 —— 半导体与系统
    的头像 发表于 04-24 10:36 2366次阅读

    科技,IPO申请获受理

    电子发烧友网综合报道 3月20日,上交所网站显示,宇科技股份有限公司科创板IPO申请已受理,成为又家科创板IPO“预先审阅”落地项目。此次IPO,宇科技拟募资42.02亿元。   招股书显示
    的头像 发表于 03-20 18:33 4400次阅读
    宇<b class='flag-5'>树</b>科技,IPO申请获受理

    TÜV莱茵与杭集团达成战略合作并颁发欧盟CE-MD符合性证书

    日前,国际独立第三方检测、检验和认证机构德国莱茵TÜV大中华区(简称"TÜV莱茵")与杭集团股份有限公司(简称"杭集团")签署了战略合作协议,标志着双方
    的头像 发表于 01-15 12:18 520次阅读

    亿纬锂能与杭集团达成战略合作

    近日,亿纬锂能与杭集团2025年战略研讨会暨战略合作协议签约仪式在杭州举行。亿纬锂能副总裁、商用车电池产品线总裁江吉兵博士,亿纬锂能商用车电池产品线国内销售部总经理井振江,杭集团董事、副总经理兼
    的头像 发表于 01-04 18:18 1230次阅读

    通过优化代码来提高MCU运行效率

    选择时间复杂度低的算法。 根据访问模式选择数据结构。频繁查找用哈希表,有序数据用二叉树等。 查表法:对于复杂的数学计算(如sin, log),或者协议解析,预先计算好结果存于数组中,用空间换时间
    发表于 11-12 08:21

    蜂鸟E203内核中断管理模块sirv_plic_man代码分析

    。 上面的代码生成二叉树结构来比较和选择具有最大优先级的挂起中断源及其ID。树状结构由级联比较器组成,每层的比较器数量是前层的
    发表于 10-23 06:05

    请问rtt studio 的文件夹打红什么意思?

    rtt studio 的文件夹打红什么意思?而且文件夹里面实际是有文件的,但是浏览不出来。
    发表于 09-18 06:34

    谷歌查找我的设备配件(Google Find My Device Accessory)详解和应用

    物品。为了更好的理解它的工作原理,我们先来了解下谷歌查找我的设备网络FMDN(Google find my device network)。FMDN由四部分组成:附件(Accessory),所有者
    发表于 08-31 21:10

    科技,起诉

    电子发烧友网综合报道 天眼查显示,近日,杭州宇科技股份有限公司(以下简称“宇科技”)新增1条开庭公告,原告为杭州露韦美日化有限公司(以下简称“露韦美日化”),案由为侵害发明专利权纠纷,该案将于8
    的头像 发表于 08-26 07:50 5317次阅读
    宇<b class='flag-5'>树</b>科技,<b class='flag-5'>被</b>起诉

    亿纬锂能荣获杭集团2022-2024年度优秀供应商奖

    近日,亿纬锂能凭借卓越产品、可靠交付与优质服务荣获杭集团颁发的“2022-2024年度优秀供应商”奖。杭集团副总经理兼杭电器董事长金华曙、杭电器总经理兼杭博电机总经理李明辉出席
    的头像 发表于 07-15 09:00 1158次阅读

    迅为RK3568开发板基本工程目录-工程级目录

    两个文件是分别叫 oh-package.json5,那实际上这里面是依赖的些配置。当然还包括你当前这个项目的些配置,包括项目的名字、第三方包的些依赖。有了这些依赖关系的话。那我们就可以基于这个依赖关系了,来生成
    发表于 07-10 10:45

    Google Fast Pair服务简介

    设备。多个Seeker设备可以拥有同Google Account 。Provider和第个Seeker建立关联的过程称为initial pairing;Provider和第个拥
    发表于 06-29 19:28

    代高速芯片晶体管解制造问题解决了!

    。在这种结构中,n型晶体管(nFET)和p型晶体管(pFET)集成在同结构中,但由绝缘壁(如氧化物或氮化物)隔开。这种设计允许nFET和pFET之间的间距进步缩小,从而减少标准单元的面积。
    发表于 06-20 10:40