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)二叉樹的大神,的原因吧。
-
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)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論