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文章
1766瀏覽量
57590 -
算法
+關注
關注
23文章
4615瀏覽量
93000 -
二叉樹
+關注
關注
0文章
74瀏覽量
12344
原文標題:不會翻轉二叉樹的大神
文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論