0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Max Howell因?yàn)椴粫?huì)翻轉(zhuǎn)一棵二叉樹,被Google拒絕

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:是不是很酷 ? 2020-09-03 10:52 ? 次閱讀

2015 年 6 月 10 日,Max Howell 發(fā)表了一篇推特:

簡(jiǎn)單翻譯:Google 說,我們 90% 的工程師都使用你寫的軟件——Homebrew,但是因?yàn)槟悴荒茉诎装迳戏D(zhuǎn)一棵二叉樹,所以,滾蛋。

這條 Twitter 在當(dāng)年引發(fā)了不小的爭(zhēng)論。

Homebrew 是 MacOS 上的一款非常著名的軟件,它極大地簡(jiǎn)化了在 macOS 上的軟件安裝和管理流程,所以使用者眾多,相當(dāng)有業(yè)界影響力。如這條推特所說:Google 里 90% 的工程師都使用這款軟件。

Max Howell 就是 Homebrew 的創(chuàng)作者,也是一名業(yè)內(nèi)知名的 MacOS / iOS 工程師。他曾經(jīng)是著名的網(wǎng)絡(luò)電臺(tái) Last.fm 的首席客戶端開發(fā)者,后來是 Twitter 的客戶端 TweetDeck 的首席移動(dòng)開發(fā)者。

2015 年,Max Howell 決定加入 Google。但是,根據(jù) Max Howell 的敘述,他去 Google 面試,作為一名 iOS 業(yè)界專家,面試官?zèng)]有問任何和 iOS 相關(guān)的問題。

Max Howell 的面試進(jìn)行到第七輪,在一道算法題上出了問題。這個(gè)算法問題就是:翻轉(zhuǎn)一棵二叉樹。

這其實(shí)是一個(gè)很簡(jiǎn)單的算法問題。相信對(duì)很多還沒有畢業(yè)的計(jì)算機(jī)專業(yè)的同學(xué),都是很容易的。

其實(shí),如今我們也已經(jīng)很難判斷 Max Howell 到底是不是真的不會(huì)這個(gè)算法問題?還是只是對(duì)這樣的面試流程抗議?

我們也很難分辨,Google 不聘請(qǐng) Max Howell 的真實(shí)原因,到底是因?yàn)樗麤]有解答出這個(gè)問題?還是有其他原因?

對(duì)這些問題的分析,在當(dāng)年很流行。有業(yè)內(nèi)人士指出,Google 出這么簡(jiǎn)單的算法問題,顯然已經(jīng)是在放水了。而 Google 決定不招聘 Max Howell 的真實(shí)原因,很有可能不是能力問題,而是在面試過程中認(rèn)為,Max Howell 的個(gè)人性格不適合 Google 的文化。

畢竟,面試不是考試,不是把問題回答正確就可以了。很多時(shí)候,面試的過程,是面試官在看,和候選人共事,共同探討一個(gè)問題,共同解決一個(gè)問題,是怎樣的體驗(yàn)。

還有很多人據(jù)此吐槽硅谷大公司的招聘方式。

有的人說:Facebook 不要我,因?yàn)槲医獠怀霭嘶屎髥栴}。

有的人說:曾經(jīng) Amazon 讓我翻轉(zhuǎn)一個(gè)鏈表,當(dāng)時(shí)我的靈魂就已逃離了那個(gè)房間。

有的人說:如果問我如何翻轉(zhuǎn)一棵二叉樹,我會(huì)當(dāng)場(chǎng)把那個(gè)白板翻過來,然后說,看,我完成了。

還有人說:1997 年,Google 面試了我 6 個(gè)小時(shí)。最后一個(gè)問題是:為什么我們要聘用你?我的回答是:你們 TM 自己想吧。最后我拿到了 offer。

對(duì)于當(dāng)代計(jì)算機(jī)行業(yè),算法是不是一定這么重要?我的回答是,不一定。為此,我寫過一篇文章:算法到底有什么用?對(duì)你來說可能真的沒用。

那大公司面試為什么總要考算法?對(duì)此,我寫過一篇文章,叫:大廠面試為什么總考算法?以及如何避開算法面試。

但如今,5 年時(shí)間過去了,這一切爭(zhēng)論,對(duì)于當(dāng)事人來說,或許都不重要了。無論是 Max Howell,還是 Google,都在這五年間,做出了不錯(cuò)的成績(jī)。

大家雖然沒有合作,但都有很好的未來。

而就在最近,我無意中翻到了 Quora 上對(duì)這個(gè)問題討論的一個(gè)“老帖子”。

這個(gè)問題在 Quora 上是這樣的:Homebrew 的作者 Max Howell 因?yàn)椴粫?huì)翻轉(zhuǎn)一棵二叉樹,被 Google 拒絕,這背后的邏輯到底是什么?

沒想到兩年以后,在 2017 年的 12 月份,Max Howell 自己親自回答了這個(gè)問題。

Max Howell 的這個(gè)回答,我今年才看到。說實(shí)話,我讀了好幾遍。語言并不多,但卻讓我感觸頗深,以至于我想逐句翻譯,和大家分享。

以下是 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。我嘗試用了兩年時(shí)間,不去回答這個(gè)問題,或者千千萬萬個(gè)和這個(gè)問題類似的問題?;蛟S,我不應(yīng)該回答這個(gè)問題。

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

Google 拒絕我的邏輯到底是什么?很明顯,我寫了一些值得去 Google 的代碼,對(duì)吧?

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

其實(shí),不是這樣的。我只寫了一個(gè)很簡(jiǎn)單的軟件包管理工具。任何人都能寫出來。

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.

實(shí)際上,我寫的非常差。它甚至沒有做好軟件包的依賴管理。它也不能很好地處理很多用戶的邊界行為。它沒有被充分測(cè)試。坦白地說,它就是一坨屎。

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

所以,如果我不能很好地回答那種“重量級(jí)”的計(jì)算機(jī)科學(xué)問題,真的那么驚訝嗎?

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.

我想,答案和計(jì)算機(jī)科學(xué)無關(guān)?;蛟S是因?yàn)?,我在我的軟件中,總是更關(guān)注用戶體驗(yàn)。

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*.

當(dāng)軟件發(fā)生問題的時(shí)候,Homebrew 會(huì)盡最大的可能告訴你:為什么?它會(huì)在 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.

大多數(shù)工具不在乎你。如果事情出現(xiàn)了問題,那么你將一籌莫展。Homebrew 在嘗試幫助你。甚至,如果它無法幫助你,你可以直接修改它?。ㄎ覄?chuàng)建了一個(gè)命令,可以讓你直接去編輯或者修改 Homebrew。)你可以讓 Homebrew 更好。

Homebrew is a shining example of true Open Source.

我堅(jiān)信:Homebrew 是真正開源世界中一顆閃亮的星。

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

或許 Homebrew 沒有很好地完成依賴管理,但是,它用一種可能你更關(guān)心的方式完成了它。

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.

不像當(dāng)時(shí)的大多數(shù)競(jìng)爭(zhēng)者,Homebrew 直接使用你的 Mac 上的軟件依賴關(guān)系作為基礎(chǔ),從而為你節(jié)省了大量安裝軟件的時(shí)間,少了很多痛苦。因?yàn)?,根?jù)我的經(jīng)驗(yàn),使用一個(gè)更大的依賴圖,事情總是會(huì)出問題。

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

但是,這一點(diǎn)和計(jì)算機(jī)科學(xué)沒有半點(diǎn)關(guān)系,也不牽扯到任何圖或者樹這類我完全不擅長(zhǎng)的東西。

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 辯解兩句。我確實(shí)不會(huì)如何翻轉(zhuǎn)一棵二叉樹。我甚至不是特別清楚二叉樹到底是什么。

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.

我的專業(yè)其實(shí)是化學(xué),不計(jì)算機(jī)科學(xué)。當(dāng)然,我的碩士論文中使用了數(shù)學(xué),并且為氦原子的量子學(xué)特性進(jìn)行了建模。我相信我的碩士論文還不錯(cuò),但這和計(jì)算機(jī)科學(xué)無關(guān)。

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.

但是,計(jì)算機(jī)科學(xué),到底和現(xiàn)代軟件 App 的開發(fā)有什么關(guān)系?這是我希望大家通過我的推特,去思考的東西。

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

Google 實(shí)際上給了我七輪面試。在軟件工程面試中,我是相當(dāng)出色的。這是我的天賦所在。

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.

對(duì)于我發(fā)的那條推特,我也會(huì)覺得它可能不合適。這條推特為很多“憤青”提供了“養(yǎng)料”,并且火了。這就是現(xiàn)代互聯(lián)網(wǎng)。對(duì)此,我感到抱歉。

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

但如果問我,Google 是不是應(yīng)該聘用我?我的回答絕對(duì)是:是的,Google 絕對(duì)應(yīng)該聘用我。

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.

我承認(rèn),我是個(gè)混蛋,我很難相處,我不懂那么多計(jì)算機(jī)科學(xué)。但是,但是,我創(chuàng)造了優(yōu)秀的作品?;蛟S它不完美,但人們喜歡它。

Surely, surely Google could have used that.

其實(shí),Google 本是可以抓住這一點(diǎn)的。

通過這個(gè)回答,我相信大家可以看出來,Max Howell 依然是那個(gè)“狂妄”的開源作者。我嚴(yán)重懷疑我的翻譯讓他謙虛了一些。實(shí)際上,上面的翻譯,我修改了一稿,把一些原本我個(gè)人習(xí)慣使用的“謙虛”的用法去除了。

但這個(gè)回答給我感觸最深的,是 Max Howell 描述的關(guān)于 Homebrew 的理念。用一個(gè)比較俗套的成語總結(jié),就是以人為本。說的不要那么文騶騶,就是尊重你的用戶。

我在國(guó)內(nèi)做 iOS 開發(fā),算比較早的。2011 年開始,陸陸續(xù)續(xù)上架了幾個(gè)小 App,直到大概 2015 年停止維護(hù)。

學(xué)習(xí) iOS 開發(fā)的過程確實(shí)極大地拓展了我的技術(shù)視野,因?yàn)?iOS 開發(fā)和我之前接觸的大多數(shù)技術(shù)棧都極其不同。但是,這么多年過去以后,回頭看,這段經(jīng)歷讓我收獲了更多和技術(shù)無關(guān)的東西。

我第一次感受到了:技術(shù)和人的距離,竟然如此之近。

有一名老爺爺,在 2017 年給我發(fā)來一封郵件,讓我感觸頗深。

郵件中,他給我的 App 提了一些建議,并且告訴我,他已經(jīng)使用我的這個(gè)小 App 三年了。

后來,我跟他隨便聊了兩句,他說他住在美國(guó)一個(gè)鳥不拉屎的小鎮(zhèn)上,他自稱自己是名藝術(shù)家,還出版了一本和藝術(shù)相關(guān)的圖書。

他給我了一個(gè)亞馬遜鏈接,我說我不會(huì)買的。他打回一個(gè)笑 cry 的 emoji

這是我第一次意識(shí)到,冷冰冰的代碼,竟然可以連接無論是年齡,國(guó)籍,種族,地理位置,職業(yè),以及性格,都如此遙遠(yuǎn)的兩個(gè)人。

后來,我在慕課網(wǎng)出了一些課程。

在這個(gè)過程中,給我感觸最深的,是在課程的問答區(qū),我和大家的交流。說句實(shí)話,我學(xué)會(huì)了很多東西。很多東西在技術(shù)之外,但是,它們被技術(shù),連接在了一起。

所以我決定寫公眾號(hào)。我想,對(duì)于更加廣泛的技術(shù)世界的探討,或許能讓大家?guī)Ыo我更多的啟發(fā)。我的目的是自私的。

有很多同學(xué)問我各種問題,但我不是各個(gè)領(lǐng)域的專家,對(duì)于一些過于細(xì)節(jié)的問題,也沒有時(shí)間精力在非課程的問答區(qū)一一解答。所以我又開設(shè)了知識(shí)星球,大家可以在那里暢所欲言。從技術(shù)提問,到發(fā)表觀點(diǎn)。

可能并不是所有的觀點(diǎn)我都贊同,但我喜歡這種觀點(diǎn)的碰撞。每次這種碰撞后,都能帶給我更深刻的思考。

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

我喜歡代碼,喜歡邏輯,喜歡它們的嚴(yán)謹(jǐn),以及這種嚴(yán)謹(jǐn)背后,依然可以產(chǎn)生的無限可能。

我高中畢業(yè)后選擇計(jì)算機(jī)專業(yè),是因?yàn)槲乙詾?,使用?jì)算機(jī),我可以憑空創(chuàng)造出一個(gè)完全屬于我自己的宇宙。

后來,我才慢慢發(fā)現(xiàn),我們的宇宙之所以精彩,不是因?yàn)樯系鄣倪壿嬘卸嗝磭?yán)謹(jǐn)。而是因?yàn)?,有我,有他,有她,還有你。

因?yàn)槿恕?/p>

或許,這就是我會(huì)突然如此崇拜這名,不會(huì)翻轉(zhuǎn)二叉樹的大神,的原因吧。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Google
    +關(guān)注

    關(guān)注

    5

    文章

    1754

    瀏覽量

    57386
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4592

    瀏覽量

    92524
  • 二叉樹
    +關(guān)注

    關(guān)注

    0

    文章

    74

    瀏覽量

    12304

原文標(biāo)題:不會(huì)翻轉(zhuǎn)二叉樹的大神

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是默克爾(Merkle Tree)?如何計(jì)算默克爾根?

    01 默克爾的概念 默克爾(Merkle Tree)是種特殊的二叉樹,它的每個(gè)節(jié)點(diǎn)都存儲(chǔ)了個(gè)數(shù)據(jù)塊的哈希值。哈希值是
    的頭像 發(fā)表于 09-30 18:22 ?523次閱讀
    什么是默克爾<b class='flag-5'>樹</b>(Merkle Tree)?如何計(jì)算默克爾根?

    指電極上覆蓋敏感材料的阻值計(jì)算

    覆蓋的敏感材料厚度超出指厚度時(shí)計(jì)算電阻,是否可以視作指電極指間電阻多個(gè)周期串聯(lián)后與超出指厚度部分敏感材料電阻并聯(lián)
    發(fā)表于 07-05 14:48

    EVASH Ultra EEPROM:Google認(rèn)定為五大硬件廠商之

    EVASH Ultra EEPROM:Google認(rèn)定為五大硬件廠商之
    的頭像 發(fā)表于 07-01 12:47 ?266次閱讀

    使用google-translate和wwe合并后無法使用google-tts怎么解決?

    我打算使用lyrat-mini做個(gè)使用喚醒詞喚醒然后后續(xù)通過google-sr和google-tts進(jìn)行交流的聊天機(jī)器人,但是當(dāng)我合并了adf的例子中的wwe和google-tran
    發(fā)表于 06-28 06:05

    中國(guó)工程師指盜竊Google機(jī)密還轉(zhuǎn)給中國(guó)企業(yè) 正面臨起訴

    據(jù)媒體報(bào)道,曾在Google任職的中國(guó)人丁林葳指盜竊了Google TPU、GPU等相關(guān)技術(shù)機(jī)密,還轉(zhuǎn)給中國(guó)企業(yè),目前正面臨起訴。
    的頭像 發(fā)表于 03-11 14:17 ?746次閱讀
    中國(guó)工程師<b class='flag-5'>被</b>指盜竊<b class='flag-5'>Google</b>機(jī)密還轉(zhuǎn)給中國(guó)企業(yè) 正面臨起訴

    哈夫曼編碼怎么算 哈夫曼編碼左邊是0還是1

    二叉樹,將出現(xiàn)頻率高的字符用較短的編碼表示,而出現(xiàn)頻率低的字符則用較長(zhǎng)的編碼表示。通過這種方式,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行高效的編碼和解碼。 下面我們將詳細(xì)介紹哈夫曼編碼的算法過程。 統(tǒng)計(jì)字符頻率 在進(jìn)行哈夫曼編碼前,首先需
    的頭像 發(fā)表于 01-30 11:27 ?2474次閱讀

    instance是何時(shí)翻轉(zhuǎn)的?每次有多少instance在翻轉(zhuǎn)?

    在run dynamic vectorless IR時(shí),instance是何時(shí)翻轉(zhuǎn)的?每次有多少instance在翻轉(zhuǎn)?
    的頭像 發(fā)表于 01-26 09:31 ?480次閱讀
    instance是何時(shí)<b class='flag-5'>翻轉(zhuǎn)</b>的?每次有多少instance在<b class='flag-5'>翻轉(zhuǎn)</b>?

    文讀懂:圖像特征檢測(cè)算法!

    而斑點(diǎn)與角點(diǎn)是兩類局部特征點(diǎn)。斑點(diǎn)通常是指與周圍有著顏色和灰度差別的區(qū)域,如草原上的一棵樹棟房子。它是個(gè)區(qū)域,所以它比角點(diǎn)的噪能力要強(qiáng),穩(wěn)定性要好。而角點(diǎn)則是圖像中邊物體的拐角
    的頭像 發(fā)表于 01-18 16:37 ?1389次閱讀
    <b class='flag-5'>一</b>文讀懂:圖像特征檢測(cè)算法!

    數(shù)字IC設(shè)計(jì)中的分段時(shí)鐘綜合

    為什么需要分段去做時(shí)鐘呢?因?yàn)?/b>在某些情況下,按照傳統(tǒng)的方法讓每個(gè)clock group單獨(dú)去balance,如果不做額外干預(yù),時(shí)鐘天然是做不平的。
    的頭像 發(fā)表于 12-04 14:42 ?1784次閱讀
    數(shù)字IC設(shè)計(jì)中的分段時(shí)鐘<b class='flag-5'>樹</b>綜合

    電源管理之clock驅(qū)動(dòng)構(gòu)架設(shè)計(jì)解決方案

    Clock 時(shí)鐘就是 SoC 中的脈搏,由它來控制各個(gè)部件按各自的節(jié)奏跳動(dòng)。比如,CPU主頻設(shè)置,串口的波特率設(shè)置,I2S的采樣率設(shè)置,I2C的速率設(shè)置等等。這些不同的clock設(shè)置,都需要從某個(gè)或某幾個(gè)時(shí)鐘源頭而來,最終開枝散葉,形成一棵時(shí)鐘。
    發(fā)表于 11-29 09:53 ?805次閱讀
    電源管理之clock驅(qū)動(dòng)構(gòu)架設(shè)計(jì)解決方案

    用1452的source/square產(chǎn)生個(gè)10HZ的方波,但是方波不會(huì)自動(dòng)翻轉(zhuǎn)怎么處理?

    您好: 我想用1452的source/square ,產(chǎn)生個(gè)10HZ 的方波,去驅(qū)動(dòng)個(gè)IO 口,但是現(xiàn)在測(cè)試的IO口直為高,把勾去掉就變低,不會(huì)自動(dòng)
    發(fā)表于 11-29 07:17

    Google 無障礙功能更新 | 第

    和舉措的最新動(dòng)態(tài),幫助您及時(shí)掌握無障礙功能的最新進(jìn)展,期望您與我們起構(gòu)建無障礙應(yīng)用與功能,共同創(chuàng)造更大范圍無障礙的美好世界。 第期視頻 中,我們與您分享了實(shí)用的無障礙資源與激動(dòng)人心的無障礙功能更新。本文為您帶來該系列視頻的第
    的頭像 發(fā)表于 11-27 18:40 ?521次閱讀

    堆的實(shí)現(xiàn)思路

    什么是堆? 堆是種 基于樹結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu),它是一棵二叉樹 ,具有以下兩個(gè)特點(diǎn): 堆是個(gè)完全二叉樹,即除了最后
    的頭像 發(fā)表于 11-24 16:02 ?382次閱讀
    堆的實(shí)現(xiàn)思路

    二叉樹的定義

    型結(jié)構(gòu) 是類重要的 非線性數(shù)據(jù)結(jié)構(gòu) ,其中以二叉樹最為常用,直觀來看,是以分支關(guān)系定義的層次結(jié)構(gòu)。
    的頭像 發(fā)表于 11-24 15:57 ?1253次閱讀
    <b class='flag-5'>樹</b>與<b class='flag-5'>二叉樹</b>的定義

    OP-TEE安全存儲(chǔ)安全文件的格式

    時(shí),默認(rèn)情況下, 加密后的數(shù)據(jù)會(huì)被保存在/data/tee目錄中。 安全存儲(chǔ)功能使用 二叉樹的方式來 保存加密后的文件。 當(dāng)?shù)?b class='flag-5'>一次使用安全存儲(chǔ)功能創(chuàng)建用于保存敏感數(shù)據(jù)的安全文件時(shí),OP-TEE將會(huì)在/data/tee目錄中生成兩個(gè)文件:dirf.db文件和以數(shù)字命名的文件
    的頭像 發(fā)表于 11-21 11:49 ?709次閱讀
    OP-TEE安全存儲(chǔ)安全文件的格式