自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

我和Google的故事

開發(fā) 前端
我一直在反思自己在 Google 的經(jīng)歷,因為在這個公司工作總是感覺不對勁,但是卻總也說不清楚為什么。也許現(xiàn)在用自己的母語,我可以得出一個準(zhǔn)確一點的結(jié)論吧。

也許有人看見過我批判 Google 的那篇英文文章。它好像有一部分片面性,所以被我從英文博客上拿下來了。我一直在反思自己在 Google 的經(jīng)歷,因為在這個公司工作總是感覺不對勁,但是卻總也說不清楚為什么。也許現(xiàn)在用自己的母語,我可以得出一個準(zhǔn)確一點的結(jié)論吧。

受命于危難

先說說我的項目是怎么開始的吧。當(dāng)我加入的時候,我的老板 Steve Yegge 的小組試圖制造一個跨語言的“服務(wù)式”編程工具,叫做 Grok。你可以把它想象成 Eclipse 和 Visual Studio, 但是 Grok 的設(shè)計目標(biāo)不只是檢索和分析本機的某一種語言的代碼,而是大規(guī)模的檢索和分析 Google 的所有項目,所有語言,所有代碼。這包括 Google 的“四大語言”:C++, Java, JavaScript, Python,一些工具性的語言:Sawzall,protobuf 等,還有一些“build file”和所有第三方的庫。Grok 的初期設(shè)計目標(biāo)是一個靜態(tài)的代碼索引服務(wù),只要程序員點擊任何一個變量或者函數(shù)名,就能“準(zhǔn)確”的跳轉(zhuǎn)到它定義的位置。動態(tài)的編輯功能稍后也在陸續(xù)加入。

這種檢索不是像 ctags, etags 那種簡單的正則表達式匹配,而是像 Eclipse 和 Visual Studio 那樣的準(zhǔn)確的“語義檢索”,所以它必須真正的理解程序語言的語義。在 Grok 誕生以前,市面上和 Google 內(nèi)部都沒有一個工具能正確的支持所有“四大語言”,所以我不得不說,Steve 的項目比起 Google 的其他程序語言相關(guān)的項目是相當(dāng)先進的。

雖然 Grok 的技術(shù)含量挺高,但是 Google 的管理層對東西的評價并不是看技術(shù)含量的,而是看你有多少“影響力”(impact),說白了也就是有多少用戶。Google 當(dāng)時本來就只有不到一萬個程序員,一個“內(nèi)部編程工具”能有多少“用戶”呢?所以 Grok 比起像 CodeSearch 一類利用正則表達式來查詢程序的“低端”項目來說,在管理層心目中并不占任何優(yōu)勢。而且由于其它項目界面好看些,用戶多些,Grok 隨時有被取消的危險,這使得 Steve 心理壓力很大。我就是在這個“危難關(guān)頭”進入他們的小組的。我當(dāng)然沒蠢到會自己進入這樣一個組,但是 Steve 在電話面試時把一切都說得很美好的樣子。當(dāng)時小組里只有三個人:Steve 和另外兩個組員。

恐懼和疑惑

當(dāng)我開始的時候,Grok 小組已經(jīng)初步完成了 Java 和 JavaScript 的檢索模塊。但是他們的檢索并不是自己設(shè)計的,而是從 Eclipse (JDT) 和 JSCompiler (開源后叫 closure compiler) 里面分別“挖取”了對 Java 和 JavaScript 語義檢索的部分,修改之后插入到項目里的。Eclipse 的設(shè)計非常的不模塊化,以至于項目進行了一年多,大家還在忙著解決它帶來的各種 bug。

最開頭的時候 Steve 給了我兩個選擇:檢索 C++ 或者是 Python。我覺得 C++ 的設(shè)計太繁瑣,所以就選擇了看起來好一點的 Python。Steve 就讓我去找一個開源的 Python IDE,然后把里面的語義檢索部分挖出來插入到項目里面??墒窃诳催^十個左右的“Python IDE”之后,我發(fā)現(xiàn)它們沒有一個能夠正確的“跳轉(zhuǎn)到定義”。分析其原因,是因為這些 IDE 基本上做的是正則表達式匹配,而完全不理解 Python 的語義。所以我對 Steve 說,我要自己從頭寫一個。但他反對這個提議,因為他覺得這是三個月的時間之內(nèi)不可能完成的。不但是我不能,而且就算一個小組的人也不可能完成。就算完成了,他也不想“維護”這些代碼。所以他寧愿讓我去拿一個不怎么樣的開源項目,因為這樣“維護”的工作就轉(zhuǎn)嫁到開源項目身上去了。

可是我很清楚的看到,這樣一個語義檢索,不過是一個抽象解釋器 (abstract interpreter)。寫解釋器是我很在行的,所以我告訴他這是我可以完成的,而且由于設(shè)計上的簡潔,我的代碼的維護代價會比使用一個開源項目小很多。他沒有說話。我同時也在進行一些內(nèi)部培訓(xùn),看一些視頻,折騰 MapReduce 一類的內(nèi)部工具教程,就這樣過了一個星期。我隱約的感覺到 Steve 的不快,因為他不怎么說話了,可是也沒有太在意,仍然傻乎乎的到處湊熱鬧。到了周五的時候,Steve 下午很早就回家了。另一個組員還待在哪里,悶聲悶氣的。我對她說:“Steve 是不是不高興了?我知道我說話有點太自信,可能打擊到他了。”她好像打滿的氣球被開了一個孔:“他怎么會被你打擊到?你知道他以前做的項目有多厲害嗎?他是怕你做不出來。之前有一些 intern 設(shè)的目標(biāo)太高,以至于到最后沒有完成他們的項目。你知道我們以前一個類似的項目 JSCompiler,花了多少時間才完成嗎?一個小組的人,四年的時間!”于是她打開 Eclipse,把一塊代碼給我看:“看這一個文件就有 9000 多行代碼。你三個月能寫出這么多代碼嗎?”我翻了一下白眼,搞笑似地說:“啊~ 怎么可能有 9000 多行?這些人真的知道怎么寫這種代碼嗎……”

后來具體的對話我忘記了,但是她說得那么戰(zhàn)戰(zhàn)兢兢的,確實給了我一些壓力。再加上 Steve 那個悶聲子,真是不好受。所以那個周末我沒有出去玩,我下載了一個 Jython,把它的 parser 文件 (ANTLR) 拿出來。自己設(shè)計了一個更簡單的 AST 數(shù)據(jù)結(jié)構(gòu),把這個 parser 生成的 AST 轉(zhuǎn)換成我的結(jié)構(gòu)。然后就開始在上面寫一個抽象解釋器。由于 Java 的限制,我想出了一個更簡潔的用 Java 實現(xiàn)解釋器的方法,從而避免了使用繁瑣的 visitor pattern。一個周末之后,我做出了一個基本的原型。當(dāng)然因為 Python 語言的復(fù)雜性,有很多細節(jié)的東西到后來才完全的實現(xiàn)。

等到星期一的時候,我告訴 Steve 我做了一個原型出來,而且因為我拿了 Jython 的 parser,我們以后可以用這個理由把這代碼 merge 回 Jython,給他們提供功能,讓他們幫我們維護代碼,對兩方都有好處。他居然一點也不高興,把我叫到一個白板前面,板著臉說:“你知道我為什么擔(dān)心嗎?我怕在你離開四個月以后,我還在跟別人說,我仍然在改正我的 intern 代碼里的 bug!來,給我講一下你打算怎么做。”我就畫了一個 AST 的類關(guān)系圖,在每個類插入一個叫 interp 的方法,然后指出這個東西就是一個解釋器。最后他豁然開朗了一樣,說:“好。我相信你知道你在干什么了。就這樣做吧。”

陌路

在 Google 的整個夏天,我都覺得跟其他人沒有共同語言。我感興趣的東西,他們一點都不了解,所以我也不想談。我覺得不以為然的一些東西,卻被捧上了天。總體感覺就是過度“和諧”,像是回到了小學(xué)。每個人都像是“祖國的花朵”,對 Google 的一切都贊不絕口。你本來有時不想笑,不想說好話,身邊的“社會壓力”卻讓你不得不滿臉堆笑,所以很累。沒有人說真話,以至于你不知道到底什么好,什么不好。

人們總是喜歡談?wù)撘恍┤说娘@赫“地位”,傳說他們?nèi)绾蔚?ldquo;牛”。比如,有一次幾個人在談?wù)撘粋€ Google 的“牛人”,說他做了一個多么了不起的項目,很快就升為了 Staff Software Engineer (“Staff”是比“Senior”高一級的職位,Steve 就是個 Staff)。我去看了一下這項目,發(fā)現(xiàn)不過就是 JUnit 的“C++ 版本”。JUnit 這東西技術(shù)含量本來就是相當(dāng)?shù)偷模鲞@樣一個東西就能當(dāng)“Staff”,那我豈不是輕而易舉就可以成為“Principal”了?哈哈。我心里這樣想,但是沒有說出來。一個 Staff 就如此,談到 Google 的兩個創(chuàng)始人的時候,有些人就簡直是黑白不分了。對他們的各種武斷的甚至不講理的做法,居然都津津樂道。創(chuàng)始人在他們眼里儼然就跟皇帝一樣,他們做什么都是對的。甚至有人以自己的辦公室在創(chuàng)始人辦公室的正下方為豪。這種浮夸和互相吹捧之風(fēng),恐怕是在其它公司也少見的。Google 要求員工們保持一種“Googley”的態(tài)度,原來就是這樣的態(tài)度,過度的“正面”和“積極”。美國所崇尚的“個人主義”和“批判性思維”,在 Google 貌似高度缺乏。

另一些時候,我會遇到一些對某種語言或者技術(shù)有宗教情緒的人。有一次吃午飯,一個工程師主動坐到我面前,像是在面試我一樣,正兒八經(jīng)的開始自我介紹,后來我們就談到 C++。我說 C++ 設(shè)計實在是太繁瑣了,其實很多簡單的語言效率并不比 C++ 低,C++ 最近其實在向其它高級語言學(xué)一些東西…… 后來這人就不說話了。那天以后我就發(fā)現(xiàn)跟他打招呼他都不理了。后來我才發(fā)現(xiàn),在 Google 是不可以指出某種語言,特別是 C++ 的缺點的。C++ 在 Google 的“勢力”之大,連 Java 都只能算二流貨色。

最搞笑的其實是 Google 總喜歡故弄玄虛,把一些微不足道的東西說得很玄乎。很多文檔,視頻,活動都掛著“Google Confidential”的標(biāo)簽。等你去看了,卻發(fā)現(xiàn)其實是眾所皆知的東西,沒有什么機密可言??墒谴蟛糠值膶嵙?xí)生們卻有一種受寵若驚的感覺,以至于產(chǎn)生優(yōu)越感。每個星期五,都會有一個“TGIF”,兩個創(chuàng)始人會像主持人一樣組織一個大會。本來無可非議,但是總感覺氣氛過于群情激昂了,有點像小學(xué)的時候升國旗開大會的感覺。好不容易大家聚在一起,總是在聽新聞發(fā)布,不然就是談工作進度,不然就是表彰某些人。總之,你總是感覺在受到某種挑撥,有一種傳銷公司大會的感覺。大家輕輕松松一起玩的真正的 party,卻非常稀少。

由于 Google “免費”提供一日三餐和娛樂,健身設(shè)施,你總是感覺欠了公司什么一樣,而其實這些錢都是出自你自己的勞動。而且因為這些設(shè)施離工作的地方太近,你總是感覺 Google 在你的生活里無所不在,連玩的時候都在想著它。Steve 經(jīng)常叫幾個人出去 Starbucks 買咖啡,我開頭還覺得奇怪,因為 Google 有上好的咖啡機。后來才明白原來他們只是想出去換個環(huán)境和人氣。一些別的公司的人(比如我寄宿房子的主人)也在疑惑,Google 的員工到底有沒有下班的時間。

我就是這樣度過在 Google 的每一天,以至于后來我都不怎么在飯桌上吃飯了。自己把飯端到靠墻的吧臺去吃,或者坐在“冰激凌吧”跟里面的廚師聊天,省得遇到一些高談闊論的人無語。我發(fā)現(xiàn)自己跟打掃衛(wèi)生的大媽小妹們也談得來,她們也喜歡跟我說話。后來我發(fā)現(xiàn)有這種感覺的不只是我,另外兩個比較厲害的博士生也懶的在那邊吃飯了。其中一個說他一個星期就把自己的項目做完了,然后假裝仍然在做,免得又被增加任務(wù)。這就是所謂“能者多勞”吧。掌握了核心技術(shù)的人,往往會有一般程序員幾十,上百倍的效率,可是得到的“回報”卻是更多的任務(wù)量和壓力。

皇帝的織布工

雖然 Steve “允許”我自己從頭做一個 Python 分析器,但這卻不是沒有壓力的。這種感覺就像是“皇帝的新裝”里的織布工一樣。我揚言自己會做出精美絕倫的布料,皇帝的大臣們卻看不見,所以他們就相當(dāng)?shù)男⌒?。總是對我很敬畏的樣子,有時會來問候一下,做得怎么樣了。可是一旦扯到深入的話題,卻又怕被看穿其實他們不懂很多東西。因為我的教授們研究 Scheme,所以 Steve 有時候也會很激動的表揚 Scheme,或者類似 Scheme 的語言比如 Clojure。這種奉承真的讓我受不了,生搬來的術(shù)語都是錯亂的,所以經(jīng)常來回兩句之后,他就無語了。為什么程序語言總是引起這種宗教的態(tài)度,不是抵制就是膜拜?

有一次一個 Staff Software Engineer 來訪。看我在做這個 Python 分析器,很鄙夷的樣子,說:“你做那個東西干什么。Python 本來是沒有類型的,怎么推導(dǎo)得出類型來?我倒希望 Java 的類型推導(dǎo)做得更好一些,不用手寫很多類型。”顯然他不知道什么是類型推導(dǎo),他也不知道如何把 Java 的類型推導(dǎo)做得更好。很多人把自己的命運寄托在語言的設(shè)計者身上,自己沒有能力去改進它們,所以他們才會對程序語言頂禮膜拜。

壓力

直到有一天,我才發(fā)現(xiàn) Steve 為什么這么緊張。那天有另一個“分舵”的 director 來訪,給我們做了一個關(guān)于“創(chuàng)新”(innovation)的演講。基本內(nèi)容就是說,技術(shù)上的創(chuàng)新,如果吸引不到用戶,那就不算什么創(chuàng)新,拉得到用戶的東西才叫創(chuàng)新。完全就是扯淡嘛,可是他那個氣勢真像是在宣布圣旨一樣。

那天下午,這個 director 來到我們的辦公室。表情嚴肅的“審問”Steve:“你說你每天有 5000 個用戶。可是 Google 總共還不到 10000 個程序員。你是怎么算的?你把接受你的服務(wù)的那些下游項目的用戶全都算進去了吧!”唉,想不到大名鼎鼎的 Steve Yegge 在這種欽差大臣面前也只能唯唯諾諾。

我可以說,這個 Python 的東西,雖然沒有費特別多力氣,但卻是 Google 里很少有人可以做出來的。所以實際上這個東西在很大程度上拯救了這個瀕臨滅亡的項目,因為一旦 Grok 支持所有的“Google 語言”,就會有很多人注意到這個東西,從而會有“影響力”。這確實是后來發(fā)生的事,我走了之后,Grok 開始通過 API 給很多項目提供服務(wù),包括 CodeSearch。

Google 給我的那點工資,其實是根本買不起這樣的軟件的。你可以參考一下像 CodeSonar 之類“靜態(tài)分析”軟件的價格,一份基本上就是我三個月的工資。由于我上學(xué)想找點外快,讓他們撿了一個便宜??墒沁@種“上級領(lǐng)導(dǎo)”的壓力居然也間接的傳到了我身上,而且是以一種非常不尊重的方式。這種感覺就是,你做得再多再出色,你相對于 Google 的“大拿”們,什么都不算。這也許就是 Google 為什么雇傭 Dennis Ritchie, Brian Kernighan, Ken Thompson, Rob Pike, Peter Norvig, Guido van Rossum 等大牛吧。因為它就可以說:“看我們 Google 有這些頂尖牛人,你算個什么,要不斷努力!”Steve 不止一次的對我說:“你要為 Google 做出杰出的貢獻??!Google 的東西總是最好的,你要做出 Google 一貫的品質(zhì)來。你知道 Python 的創(chuàng)造者 Guido 也是 Google 的員工嗎?我一定會在他面前給你美言幾句。” 這種語氣,我好像在幾十年前的中國聽說過呢?“你要為祖國做出杰出的貢獻!”他也許以為我會受寵若驚,可是我心里卻不是個滋味。

有時候他又會突然把臉一翻,做出一副“博學(xué)”的樣子,說:“你得把這個問題解決了。不然的話你的 intern 項目就是一個失敗的項目!” 其它組員如果看我貌似心情比較輕松,也會不時的提一下:“這個做完了嗎?如果這個做完了,你可以做那個。反正我們有的是事情給你做……” 我心里其實在想,說得輕松,你自己來做一下,看看一年之內(nèi)你做得出來不??傊麄兙褪怯眠@種奉承,利誘,競爭,加威脅的方式,想方設(shè)法讓我多做事情。

本來這系統(tǒng)能做出來就不錯了,一個組員卻一直催著我寫 test。她根本不明白,一個程序并不是寫了測試就會是個好程序。這個程序經(jīng)過我多次的大規(guī)模修改甚至推翻重來,即使一早寫了測試,那些測試也會很快作廢。這種大公司給人灌輸?shù)?ldquo;test-driven”編程方式,在這種創(chuàng)造性的程序設(shè)計里是根本就是行不通的。要寫出這樣一個系統(tǒng),必須全神貫注,深入到語言的本質(zhì)。而去寫測試,往往會打亂原來的思路,所以測試應(yīng)該是最后完成之后才寫的。當(dāng)我最后完成這個系統(tǒng),可以大規(guī)模的處理 Python 代碼的時候,卻聽見從她的桌上傳來一聲沉悶的咆哮:“WRITE--THE--TESTS---”這真的非常 Googley!

結(jié)果

最后我順利完成了整個項目,從頭到尾都是我一個人設(shè)計實現(xiàn)的(除了 Jython 里的 parser)?,F(xiàn)在它每天都會把 Google 所有的 Python 代碼索引一遍。很多內(nèi)部工具比如 CodeSearch 里面的 Python 文件上的鏈接,都是這東西做出來的。我所有的代碼加起來才 4000 行。我怎么也想不通為什么他們一個文件就有 9000 行。

總結(jié)

這些就是我對 Google 的印象。有好幾次我都看到很不錯的工程師進入 Google 之后就銷聲匿跡了,為 Google “默默奉獻”,不再有自己的發(fā)明創(chuàng)造。我感覺 Google 就是一個埋沒人才的機器,而它的“創(chuàng)造性”的名聲,卻讓越來越多的人才被埋沒。主動找上門的人才被埋沒了不說,還吞并其它公司,并且對他們施行同樣的“Google 文化”,埋沒更多的人才。

Google 總是號稱自己的工程師“build things ground up”,實際上卻總是拿一些現(xiàn)成的代碼來修修補補,往往耗費更多的時間。當(dāng)你真的想要“從頭”做起,卻發(fā)現(xiàn)重重的阻礙和壓力。

Google 跟其它公司有一個明顯的區(qū)別就是,Google 不稀罕你,你不被尊重,你活在某些你說不出他哪里牛的“大牛”的陰影下。我沒有很多其他公司的工作經(jīng)歷,但是我面試過其它一些公司。也許它們在技術(shù)上或者名氣上會比 Google 差一些,可是我能感覺到他們對人才的渴望和尊重。所以如果你有很強的能力,何必去 Google 受氣呢?無論你走到哪里,那個地方就隨你而改進。

原文鏈接:http://blog.sina.com.cn/s/blog_5d90e82f010191rh.html

【編輯推薦】

  1. 如何在技術(shù)面試中脫穎而出
  2. 面試體驗:Google篇
  3. 面試體驗:Microsoft 篇
  4. 面試時,如何向公司提問?
  5. 面試體驗:Yahoo 篇
責(zé)任編輯:張偉 來源: 王垠的博客
相關(guān)推薦

2023-02-07 09:37:08

流計算

2015-08-10 14:56:31

Google

2011-09-08 14:24:57

51cto 51CTO

2021-04-23 11:22:57

ThreadJava進階Runnable

2011-05-05 17:13:10

Google Art

2023-12-27 17:20:09

2016-08-31 07:02:51

2015-04-13 18:29:54

H3 BPM

2009-05-22 10:18:44

C指針OO

2012-06-19 14:14:48

PalmwebOS

2016-12-12 14:19:59

LLVMClangApple

2012-06-19 14:10:52

PalmwebOS

2010-11-02 14:31:44

Google Maps

2014-01-08 09:35:54

計算機學(xué)習(xí)

2009-07-28 10:36:58

云計算Google秘密武器

2013-06-05 13:27:16

軟件糾錯

2016-05-09 10:40:03

啤酒和尿片數(shù)據(jù)挖掘商品推薦

2015-07-27 09:54:36

iPodGoogle Glas

2021-08-23 08:19:48

辭職Google工程師
點贊
收藏

51CTO技術(shù)棧公眾號