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

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

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

谷歌公司最重要的兩位程序員不為人知的友情故事

DPVg_AI_era ? 來源:lq ? 2018-12-08 09:20 ? 次閱讀

《紐約客》雜志近日發(fā)表長(zhǎng)文,描寫了谷歌公司最重要的兩位程序員不為人知的友情故事:Jeff Dean和Sanjay Ghemawat。兩人的友誼已經(jīng)持續(xù)20年,他們都是天才的程序員,工作上是最默契的搭檔,生活上情同手足。

2000年3月的一天,谷歌最優(yōu)秀的六位工程師聚在一個(gè)臨時(shí)作戰(zhàn)室。

谷歌公司正處于空前的緊急狀態(tài)。上一年10月,谷歌的核心系統(tǒng)停止了工作,這些系統(tǒng)通過在網(wǎng)絡(luò)上“爬行”來構(gòu)建“索引”(index)。盡管用戶仍然可以在google.com上輸入查詢,但他們收到的結(jié)果已經(jīng)過時(shí)5個(gè)月。

更多的危險(xiǎn)工程師們還未意識(shí)到。谷歌創(chuàng)始人拉里·佩奇(Larry Page)和謝爾蓋·布林(Sergey Brin)當(dāng)時(shí)正在與雅虎進(jìn)行談判,為雅虎開發(fā)搜索引擎,并且他們承諾提供的索引比他們當(dāng)時(shí)擁有的索引還要大10倍。如果失敗了,google.com就仍然只是一個(gè)時(shí)間膠囊,與雅虎的交易也可能會(huì)告吹,谷歌公司將面臨資金耗盡的風(fēng)險(xiǎn)。

在比特級(jí)別理解計(jì)算機(jī)

在一間靠樓梯的會(huì)議室里,工程師們?cè)阡從炯苌箱伾祥T板,安裝了電腦。二十七歲的克雷格·西爾弗斯坦(Craig Silverstein)坐在遠(yuǎn)處靠墻處。Silverstein是谷歌的第一名員工:他加入公司時(shí),公司的辦公室就在布林的客廳里,他自己重寫了公司的大部分代碼。經(jīng)過四天四夜,他和一位羅馬尼亞的系統(tǒng)工程師Bogdan Cocosel一無所獲。“我們所做的分析沒有任何意義,”Silverstein回憶說:“所有東西都?jí)牡袅耍覀儾恢罏槭裁??!?/p>

Silverstein幾乎沒有注意到他左邊一個(gè)人的存在——Sanjay Ghemawat。Sanjay是幾個(gè)月前,也就是1999年12月加入公司的。他跟另一位同事——一位身材瘦高、精力充沛的31歲男子,名叫Jeff Dean,同樣來自Digital Equipment Corporation。

Jeff比Sanjay早10個(gè)月離開D.E.C。他們兩人非常親密,而且都更喜歡共同寫代碼。在作戰(zhàn)室里,Jeff把椅子轉(zhuǎn)到Sanjay的桌前,讓自己的桌子空著。Sanjay敲代碼,Jeff在一旁糾正他,就像新聞主播身邊的制作人。

Jeff Dean和Sanjay Ghemawat

Jeff和Sanjay開始仔細(xì)研究索引停滯不前的原因。他們發(fā)現(xiàn)有些單詞丟失了——他們搜索了“mailbox”,但沒有得到任何結(jié)果;還有一些單詞的順序被打亂。幾天來,他們一直在尋找代碼中的bug,沉浸在代碼邏輯中。一段一段地,終于全部檢查完畢。但他們沒有找到bug。

程序員有時(shí)將軟件概念化為層次結(jié)構(gòu),從頂層的用戶界面,再到越來越基礎(chǔ)的層。要深入到這種結(jié)構(gòu)的底部,即軟件與硬件相結(jié)合的地方,就必須拋棄柏拉圖式的代碼順序,轉(zhuǎn)向它所依賴的電和硅的元素世界。在作戰(zhàn)室的第五天, Jeff和Sanjay開始懷疑他們正在尋找的問題不是邏輯上的,而是物理上的。他們將混亂的索引文件轉(zhuǎn)換成最原始的表示形式:二進(jìn)制代碼。他們想看看機(jī)器所看到的是什么。

在Sanjay的顯示器上,出現(xiàn)了由1和0組成的長(zhǎng)列,每一行代表一個(gè)索引詞。Sanjay指出:一個(gè)本該是0的數(shù)字變成了1。當(dāng)Jeff和Sanjay把所有錯(cuò)誤排序的單詞放在一起時(shí),他們發(fā)現(xiàn)了一個(gè)模式——每個(gè)單詞都出現(xiàn)了同樣的小毛病。他們的機(jī)器的存儲(chǔ)芯片不知怎么壞掉了。

幾個(gè)月來,谷歌發(fā)生的硬件故障越來越多。問題的根源是,隨著谷歌的發(fā)展,它的計(jì)算基礎(chǔ)設(shè)施也在不斷擴(kuò)大。計(jì)算機(jī)硬件很少出故障,但到了硬件非常多的時(shí)候,故障就會(huì)經(jīng)常出現(xiàn)。電線磨損、硬盤崩潰,主板過熱。許多機(jī)器一開始就不能工作;有些機(jī)器會(huì)莫名其妙地變慢。環(huán)境因素會(huì)造成影響。超新星爆炸時(shí),沖擊波會(huì)產(chǎn)生高能量粒子,分散在各個(gè)方向;科學(xué)家們認(rèn)為,有一種被稱為宇宙射線的偏離軌道的粒子極有可能擊中地球上的計(jì)算機(jī)芯片,使其從0變成1。

世界上最強(qiáng)大的計(jì)算機(jī)系統(tǒng),如安裝在美國(guó)國(guó)家航空航天局、金融公司等的,它們使用了特殊的硬件,可以承受單比特翻轉(zhuǎn)。但當(dāng)時(shí)仍像一家初創(chuàng)公司的谷歌使用的是更便宜的計(jì)算機(jī),沒有這樣的能力。谷歌已經(jīng)到了一個(gè)轉(zhuǎn)折點(diǎn)。它的計(jì)算集群已經(jīng)發(fā)展到如此之大,以至于即使是不太可能的硬件故障也成了不可避免的。

Jeff和Sanjay一起編寫代碼,試圖修復(fù)這些問題機(jī)器。不久,新的索引就完成了,作戰(zhàn)室解散了。Silverstein是困惑的。他是一名優(yōu)秀的調(diào)試人員,他知道發(fā)現(xiàn)錯(cuò)誤的關(guān)鍵是找到問題的根源。但Jeff和Sanjay找得更深。

在3月份索引崩潰之前,谷歌的系統(tǒng)一直根植于其創(chuàng)始人在斯坦福大學(xué)研究生院編寫的代碼。佩奇和布林都不是專業(yè)的軟件工程師。他們是進(jìn)行搜索技術(shù)實(shí)驗(yàn)的學(xué)者。當(dāng)他們的網(wǎng)絡(luò)爬蟲崩潰時(shí),并沒有出現(xiàn)任何有用診斷信息——只有一句“Whoa, horsey!”早期員工把佩奇和布林編寫的一個(gè)名為BigFiles的軟件稱為BugFiles。修復(fù)所有重要的索引代碼需要幾天才能完成,如果遇到問題,又必須從頭開始。用硅谷的話說,谷歌不具備“可擴(kuò)展性”。

我們說“search the Web”,但實(shí)際上并不是;搜索引擎只是遍歷web的索引——一個(gè)映射。1996年,當(dāng)Google還是BackRub時(shí),它的地圖小到可以裝在佩奇宿舍里的電腦上。2000年3月,還沒有足夠大的超級(jí)計(jì)算機(jī)能夠處理它。谷歌能做的唯一方式就是購(gòu)買消費(fèi)者機(jī)器,然后將它們連接成一個(gè)機(jī)群。

因?yàn)檫@些電腦一半的成本都在谷歌認(rèn)為是垃圾的部件上——軟盤驅(qū)動(dòng)器、金屬機(jī)箱——因此公司會(huì)訂購(gòu)原裝主板和硬盤驅(qū)動(dòng)器,然后將它們裝在一起。在加州圣克拉拉的一棟大樓里,谷歌有1500臺(tái)這樣的設(shè)備,堆放在6英尺高的塔樓里;由于硬件故障,只有1200臺(tái)機(jī)器工作??此齐S機(jī)發(fā)生的故障不斷地破壞系統(tǒng)。為了生存,谷歌必須把它的計(jì)算機(jī)整合成一個(gè)無縫的、能迅速恢復(fù)的整體。

Jeff和Sanjay一同負(fù)責(zé)這項(xiàng)任務(wù)。曾在蘋果公司負(fù)責(zé)Macintosh前身的韋恩?羅辛(Wayne Rosing)在2000年11月加入了谷歌,管理大約100人的工程團(tuán)隊(duì)。

“他們都非常優(yōu)秀,”羅辛說。為了保障單個(gè)硬盤驅(qū)動(dòng)器發(fā)生故障時(shí)不破壞整個(gè)系統(tǒng),他們能連著每周工作90個(gè)小時(shí)寫代碼。他們?cè)谂老x過程中增加了檢查點(diǎn),以便可以在中途重新啟動(dòng)。通過開發(fā)新的編碼和壓縮方案,他們有效地使系統(tǒng)的容量增加了一倍。他們是不屈不撓的優(yōu)化者。當(dāng)汽車轉(zhuǎn)彎時(shí),外輪必須覆蓋更多的地面;同樣,旋轉(zhuǎn)硬盤的外沿必須比內(nèi)沿轉(zhuǎn)動(dòng)得更快。谷歌將最常訪問的數(shù)據(jù)移到外部,以便在讀頭下比特可以更快地流動(dòng),但內(nèi)部的一半是空的;Jeff和Sanjay使用該空間存儲(chǔ)用于常用搜索查詢的預(yù)處理數(shù)據(jù)。

2001年,他們花了四天時(shí)間,證明了谷歌的索引可以使用快速隨機(jī)存取存儲(chǔ)器(RAM)來存儲(chǔ),而不是使用相對(duì)緩慢的硬盤來存儲(chǔ);這一發(fā)現(xiàn)重塑了該公司的經(jīng)濟(jì)狀況。佩奇和布林知道,用戶會(huì)涌向一項(xiàng)能即時(shí)提供答案的服務(wù)。問題是,速度需要計(jì)算能力,而計(jì)算能力需要錢。Jeff和Sanjay用軟件解決了這個(gè)問題。

2005年,羅辛離開谷歌后,艾倫·尤斯塔斯(Alan Eustace)成為工程團(tuán)隊(duì)的負(fù)責(zé)人?!懊艿氖?,要解決大規(guī)模的問題,你必須知道最小的細(xì)節(jié),”尤斯塔斯說。Jeff和Sanjay是在比特的級(jí)別上理解計(jì)算機(jī)的。

Jeff曾經(jīng)分發(fā)過一份“每個(gè)程序員都應(yīng)該知道的延遲時(shí)間”的列表。實(shí)際上這是一份幾乎沒有哪位程序員知道的數(shù)字列表:L1緩存引用通常需要0.5納秒,或者從內(nèi)存中連續(xù)讀取1兆字節(jié)需要250微秒。這些數(shù)字根植在Jeff和Sanjay的大腦里。他們幫助推動(dòng)了對(duì)谷歌核心軟件的幾次重寫,系統(tǒng)的容量升了幾個(gè)數(shù)量級(jí)。與此同時(shí),在谷歌龐大的數(shù)據(jù)中心里,技術(shù)人員按照軟件生成的指令更換硬盤、電源和記憶棒。即使部分部件損壞或崩潰,系統(tǒng)仍能正常運(yùn)行。

今天,谷歌的工程師存在于一條巨大的鏈中,從1級(jí)開始。最底層是IT支持人員。2級(jí)是剛從大學(xué)畢業(yè)的學(xué)生;3級(jí)通常擁有碩士學(xué)位。達(dá)到4級(jí)需要幾年時(shí)間,或者一個(gè)博士學(xué)位。6級(jí)工程師(前10%)的能力非常強(qiáng),通常是項(xiàng)目主管;從6級(jí)升到7級(jí)需要很長(zhǎng)時(shí)間的貢獻(xiàn)記錄。首席工程師,即8級(jí),是主要產(chǎn)品或基礎(chǔ)設(shè)施的負(fù)責(zé)人。杰出工程師,即9級(jí),是備受尊敬之人。最后,成為Google Fellow,10級(jí),就是贏得了一項(xiàng)榮譽(yù),這項(xiàng)榮譽(yù)將伴隨你一生。Google Fellow通常是他們所在領(lǐng)域的世界領(lǐng)先專家。Jeff和Sanjay是谷歌的高級(jí)Fellow(Senior Fellow),他們是谷歌公司最初的、也是僅有的2位11級(jí)工程師。

谷歌園區(qū)位于一條高速公路旁,距離山景城市中心只有幾分鐘的路程。園區(qū)里有一群低矮的建筑,沒有什么吸引力,窗戶都是彩色的。去年夏天的一個(gè)星期一,在一起編程了一個(gè)上午之后,Jeff和Sanjay一起去園區(qū)食堂吃午飯。食堂名叫“Big Table,得名于他們?cè)?005年幫助開發(fā)的一個(gè)系統(tǒng)。

Sanjay又高又瘦,穿著一件老派的褐色亨利衫,灰色褲子,戴著一副小框眼鏡。他看到外面有張桌子,就輕快地走過去,搖開遮陽傘,在陰涼處坐了下來。他為Jeff把另一把椅子挪到陽光下。Jeff一分鐘后到了,他穿著短袖襯衫,腳上穿著時(shí)髦的運(yùn)動(dòng)鞋。

兩人就像一對(duì)夫婦。他們各自講起過去的事情,就這么拼湊出過往的回憶——兩人早期的項(xiàng)目。

“我們當(dāng)時(shí)還是手寫代碼,”Sanjay說。他的眼鏡在陽光下變暗了?!拔覀儼汛a重寫了一遍,結(jié)果怎么說,就感覺——‘哦,這似乎和我們上個(gè)月寫的差不多?!?/p>

“或是和索引的數(shù)據(jù)略有不同,”Jeff補(bǔ)充說。

“略有不同,”Sanjay說:“我們就是這樣發(fā)現(xiàn)問題的。”

“這是關(guān)鍵,”Jeff說。

“這是很常見的模式,”Sanjay說完,結(jié)束了他們的回憶。

Jeff吃了一口披薩。他的手指像水手一般,骨節(jié)突出且有些粗糙;相比之下,Sanjay就更加纖細(xì)了。他們是怎么成為一對(duì)的呢?

Sanjay說:“我記不太清楚了,我們是怎么成為搭檔的呢?”

“我們從進(jìn)谷歌之前就已經(jīng)是搭檔了,”Jeff說。

“但我不知道為什么我們決定在一臺(tái)電腦前工作,而不是用兩臺(tái)電腦,”Sanjay說。

“在D.E.C.的時(shí)候,我會(huì)從兩個(gè)街區(qū)外我的實(shí)驗(yàn)室走到他的實(shí)驗(yàn)室,”Jeff說:“中間有一家冰淇淋店?!?/p>

“原來是冰淇淋店!”Sanjay笑道。

Sanjay是單身,Jeff有妻子和兩個(gè)女兒,他們?cè)黄鸲燃?。Jeff的女兒們管他叫Sanjay叔叔,他們五人經(jīng)常在星期五一起吃晚飯。Sanjay和Jeff的大女兒維多利亞都喜歡烘焙?!拔铱粗呐畠簜冮L(zhǎng)大的,”Sanjay自豪地說。

在2004年谷歌IPO之后,他們搬進(jìn)了相隔四英里的房子。Sanjay住在老山景城一套不起眼的三居室里;Jeff在帕洛阿爾托市中心附近設(shè)計(jì)了自己的房子,在地下室安裝了蹦床。在設(shè)計(jì)這棟房子的過程中,他發(fā)現(xiàn)雖然自己喜歡設(shè)計(jì)空間,但并沒有耐心去完成建筑中所謂“適合Sanjay的部分”:橫梁的細(xì)節(jié)、螺栓、支撐建筑的梁柱等。

“我不知道為什么越來越多人不這樣做了,”Sanjay說,他指的是與搭檔一起編程。

“你需要找到一個(gè)能與你的思維方式兼容的人來做搭檔,這樣你們倆就能形成互補(bǔ)。”Jeff說。

最棒的搭檔:10x程序員

社會(huì)學(xué)家MichaelP. Farrell在2001年初版的《協(xié)作圈:友誼動(dòng)機(jī)和創(chuàng)造性工作》(Collaborative Circles: Friendship Dynamics and Creative Work)一書中,對(duì)法國(guó)印象派畫家、弗洛伊德及其支持派等創(chuàng)作型群體進(jìn)行了研究。

他寫道:“大多數(shù)后來成為新理論基礎(chǔ)的見解,不是在整個(gè)團(tuán)隊(duì)一起的時(shí)候出現(xiàn)的,也不是在成員們單獨(dú)工作的時(shí)候出現(xiàn)的,而是在兩個(gè)人相互合作、相互回應(yīng)的時(shí)候出現(xiàn)的?!?869年夏天,莫奈和雷諾阿并肩工作,形成了后來稱為印象派的風(fēng)格;在催生立體主義的六年合作中,巴勃羅?畢加索和喬治?布拉克經(jīng)常只在畫布背面簽名,不明確說每幅畫是兩人中誰完成的。(畢加索后來回憶說,“直到我們倆都覺得完成了,畫作才算完成。”)

在新科學(xué)或新藝術(shù)的“理論建設(shè)”階段,廣泛探索而不陷入死胡同是很重要的。弗朗索瓦?雅各布(Francois Jacob)和雅克?莫諾(Jacques Monod)共同開創(chuàng)了基因調(diào)控研究,他指出,到20世紀(jì)中葉,分子生物學(xué)領(lǐng)域的大多數(shù)研究都離不開這兩位的研究結(jié)果。

“在構(gòu)思理論和構(gòu)建模型方面,兩人總比一人好?!毖鸥鞑紝懙溃骸耙?yàn)橹挥挟?dāng)兩個(gè)人一起解決問題時(shí),思維才能飛得更快、更深。它們從一個(gè)人腦袋里跳到另一個(gè)人腦袋里。它們相互嫁接,就像樹上的樹枝一樣。在這個(gè)過程中,假象很快就會(huì)被扼殺在萌芽狀態(tài)?!痹谶^去的35年里,大約一半的諾貝爾生理學(xué)或醫(yī)學(xué)獎(jiǎng)?lì)C給了科學(xué)合作。

經(jīng)過多年分享工作和生活,二人有時(shí)會(huì)發(fā)展出一種私人語言,就像雙胞胎那樣。他們模仿彼此的衣著和習(xí)慣。幽默感也會(huì)在潛移默化中滲透。在他們之間分配信任是不可能的事。

但這種緊密的合作在軟件開發(fā)中并不常見。雖然開發(fā)人員有時(shí)會(huì)談到“組隊(duì)編程”——兩個(gè)程序員共用一臺(tái)計(jì)算機(jī),一人“駕駛”,另一人“導(dǎo)航”——但他們也認(rèn)為這樣的合作關(guān)系有點(diǎn)多余,就好像同一架航班上安排了兩名副駕駛員。

相比之下,Jeff和Sanjay有時(shí)更像是一個(gè)大腦的兩個(gè)半球。他們的一些著名論文有十幾位共同作者。盡管如此,谷歌的一位經(jīng)理Bill Coughran回憶道,“他們是如此多產(chǎn)、高效的合作伙伴,我們經(jīng)常是圍繞他們建立團(tuán)隊(duì)?!?/p>

這兩位天才程序員就像一個(gè)大腦的兩個(gè)半球

1966年,系統(tǒng)開發(fā)公司(System Development Corporation)的研究人員發(fā)現(xiàn),最優(yōu)秀的程序員的效率是最糟糕的程序員的十倍以上。從那時(shí)起,所謂的“10x(十倍效率)程序員”就一直存在爭(zhēng)議。這一說法推崇個(gè)人,但軟件項(xiàng)目通常規(guī)模龐大,需要多人參與。在編程世界中,很少有人能靠單打獨(dú)斗取得成功。即便如此,許多程序員仍然將Jeff和Sanjay共同完成的工作視為10x程序員存在的證據(jù)。

在同一臺(tái)電腦上編程的天才程序員

Jeff Dean于1968年7月出生于夏威夷。他的父親Andy是一名熱帶疾病研究員;他的母親Virginia Lee是一位醫(yī)學(xué)人類學(xué)家,會(huì)說六種語言。為了好玩,父子倆設(shè)計(jì)了一臺(tái)IMSAI 8080工具包電腦。他們?cè)跈C(jī)器上進(jìn)行焊補(bǔ)更新,掌握了機(jī)器的每個(gè)零件。

Jeff和他的父母經(jīng)常搬家。13歲時(shí),他跳過了8年級(jí)最后三個(gè)月的課程,去索馬里西部的一個(gè)難民營(yíng)做義工。后來,在高中時(shí),他開始為流行病學(xué)家編寫了一個(gè)名為Epi Info的數(shù)據(jù)收集程序;這個(gè)工具后來成為野外工作的一個(gè)標(biāo)準(zhǔn)工具,最終以十幾種語言分發(fā)了幾十萬份。(美國(guó)疾病控制與預(yù)防中心運(yùn)營(yíng)的一個(gè)網(wǎng)站“the Epi Info Story”上有一張Jeff Dean高中畢業(yè)時(shí)的照片。)

Jeff的博士期間主要研究編譯器,這是一種將人類編寫的代碼轉(zhuǎn)換成針對(duì)計(jì)算機(jī)優(yōu)化的機(jī)器語言指令的軟件。Alan Eustace說:“就性感程度而言,編譯器相當(dāng)無趣?!钡橇硪环矫妫鼤?huì)讓你“非常接近機(jī)器”。Sanjay描述Jeff:“在編寫代碼時(shí),他會(huì)有一個(gè)模型?!@段代碼的性能如何?’他幾乎可以半自動(dòng)化地考慮所有細(xì)微的情況?!?/p>

Sanjay直到17歲去康奈爾大學(xué)后才接觸到電腦。1966年,他在印第安納州的西拉法葉出生,但在印度北部的工業(yè)城市哥打長(zhǎng)大。他的父親Mahipal是一位植物學(xué)教授;母親Shanta照顧Sanjay和他的兩個(gè)兄妹。這是一個(gè)愛讀書的家庭:他的叔叔阿Ashok Mehta記得曾買過一本弗雷德里克·福賽斯的《豺狼之日》,裝訂已經(jīng)很破舊了,他看著Ghemawat家的孩子們一起讀那本破損的書,讀完后一頁一頁地傳下去。Sanjay的哥哥Pankaj后來成為哈佛商學(xué)院有史以來最年輕的教員。(他現(xiàn)在是紐約大學(xué)斯特恩商學(xué)院的教授。)

在麻省理工學(xué)院的研究生院期間,Sanjay認(rèn)識(shí)了一群關(guān)系親密的朋友。盡管如此,他從未約會(huì)過,直到現(xiàn)在約會(huì)的次數(shù)也是“屈指可數(shù)”。他說他并非是決定不結(jié)婚——事情只是自然而然地變成了這樣。他的好朋友們已經(jīng)知道不去打擾他,他的父母很久以前也接受了他們的兒子將會(huì)一直單身的事實(shí)。

也許因?yàn)樗矚g清靜,在谷歌,他的周圍也籠罩著神秘氣氛。他沉默寡言,但思想深邃——他思考深刻,思路異常清晰。在他的桌子上,放著一堆Mead筆記本,這些筆記本可以追溯到20年前,里面寫滿了整齊的清單和示意圖。他喜歡用鋼筆和草書寫字。他很少翻閱以前的筆記本,書寫只是為了思考。

他的研究生導(dǎo)師、MIT教授Barbara Liskov是一位有影響力的計(jì)算機(jī)科學(xué)家,研究的領(lǐng)域包括復(fù)雜代碼庫的管理。在她看來,最好的代碼就像一篇好文章。需要有一個(gè)精心設(shè)計(jì)的結(jié)構(gòu);每個(gè)字都應(yīng)該有用。編程也需要與讀者產(chǎn)生共鳴。這意味著不僅將代碼視為達(dá)到目的的手段,而且將其本身視為一件藝術(shù)品。

“我認(rèn)為Sanjay最擅長(zhǎng)的是設(shè)計(jì)系統(tǒng),”Craig Silverstein說,“如果你看過他寫的代碼文件,你會(huì)發(fā)現(xiàn)他的代碼就像比例勻稱的雕塑一樣美麗?!?/p>

在谷歌,Jeff的名氣要大得多。但對(duì)于熟悉他們兩人的人來說,Sanjay是不輸Jeff Dean的天才。

“Jeff非常善于提出大膽的新想法,并制作原型,”與他們共事很久的同事Wilson Hsieh說:“Sanjay是能夠長(zhǎng)期打造一個(gè)產(chǎn)品的人?!?/p>

在生活中,Jeff更外向,Sanjay更內(nèi)向。在代碼中,情況正好相反。Jeff的程序設(shè)計(jì)令人眼花繚亂——他能迅速勾勒出令人吃驚的想法——但由于編得很快,代碼可能令讀者費(fèi)解。Sanjay的代碼則易于理解。

“有些人的代碼太松散了,”Silverstein說,“一段代碼的信息量非常少。你總是要來回翻頁才能弄清楚寫的是什么。另一些人寫的代碼又太過密集,令人讀不下去。Sanjay在兩者之間。你看著他的代碼,你會(huì)想,‘很好,我能看懂?!?,你仍然能夠在一頁的篇幅中得到很多信息?!?/p>

今年春天一個(gè)周一的早晨,Jeff和Sanjay站在谷歌人工智能部門所在的40號(hào)樓的廚房里。在他們身后,一塊白板上寫滿了矩陣代數(shù);桌上放著一篇關(guān)于無監(jiān)督對(duì)抗網(wǎng)絡(luò)的論文。Jeff穿著一件褪了色的T恤和牛仔褲,看上去像一個(gè)改過自新的海灘流浪漢;Sanjay穿著毛衣和灰色褲子。明亮的窗戶映出一排高大的松樹,遠(yuǎn)處是一片田野。只要Jeff在谷歌工作,濃縮咖啡機(jī)就會(huì)出現(xiàn)。在小廚房的柜臺(tái)上,La Marzocco咖啡機(jī)嗡嗡作響?!拔覀円t到了,”Sanjay在咖啡研磨機(jī)旁說。已經(jīng)是八點(diǎn)三十二分了。

喝完卡布奇諾后,他們走到電腦前。Jeff把一張椅子從自己凌亂的桌子邊拉到Sanjay的桌子旁,Sanjay的桌子則一塵不染。他把一只腳擱在文件柜上,身子往后一靠,Sanjay在他們面前的屏幕上工作。他打開了四個(gè)窗口:左側(cè)是一個(gè)Web瀏覽器和一個(gè)終端,用于運(yùn)行分析工具;右側(cè)是文本編輯器Emacs中的兩個(gè)文檔,一個(gè)是待辦事項(xiàng)列表和筆記本的組合,另一個(gè)則滿是各種顏色的代碼。Sanjay的筆記本就放在電腦旁。

“好了,我們要做什么?”Sanjay問道。

“我想我們正要看TensorFlow Lite的代碼大小,”Jeff說。

這是一個(gè)機(jī)器學(xué)習(xí)的新軟件項(xiàng)目,Jeff和Sanjay擔(dān)心它過于臃腫;像圖書編輯一樣,他們想要削減代碼量。為此,他們構(gòu)建了一個(gè)需要優(yōu)化的新工具。

“我得看看它有多慢,”Sanjay說。

“超級(jí)慢,”Jeff說。他身體前傾,仍然很放松。

“120千字節(jié),大概是8秒?!盨anjay說。

“12萬個(gè)堆棧調(diào)用,”Jeff說,“不是千字節(jié)?!?/p>

“額, 千字節(jié)的文本,應(yīng)該是?!盨anjay說。

“好吧,我的錯(cuò)。”Jeff說。

“我不太清楚應(yīng)該為一個(gè)單元的大小選擇什么門檻。”Sanjay說,“0.5兆字節(jié)?”

“看起來不錯(cuò),”Jeff說。Sanjay開始敲代碼,Jeff的目光放在了屏幕上?!八阅愕囊馑际?,如果它比那個(gè)大,我們就取樣……”他沒有說完;Sanjay用代碼回答了他。

Sanjay開車時(shí),他會(huì)把雙手放在10點(diǎn)和2點(diǎn)的位置,專注地盯著前方。他在鍵盤前也是這樣的。他的雙腳與肩同寬,似乎這就是他工作的姿勢(shì)。他細(xì)長(zhǎng)的手指在鍵盤上輕快地移動(dòng)。

很快他們到達(dá)了一個(gè)小小的里程碑,Sanjay輸入一個(gè)命令來測(cè)試進(jìn)展。他看起來疲憊不堪,在程序運(yùn)行時(shí)他check了一下郵件。測(cè)試結(jié)束了,他也沒有注意到。

“嘿,”Jeff說。他打了個(gè)響指,然后指向屏幕。雖然平常談話時(shí)他經(jīng)常講笑話和雙關(guān)語,但在電腦前,他就變得固執(zhí)、粗魯,意見也經(jīng)常合不來。Sanjay對(duì)此泰然處之。當(dāng)他覺得Jeff動(dòng)作太快時(shí),他會(huì)把雙手從鍵盤上抬起來,攤開手,好像在說:“停一下?!?如果打個(gè)比方,Jeff是油門,Sanjay就是剎車。)這是他們最接近爭(zhēng)論的時(shí)候:在一起20年了,他們都沒有互相提高過嗓門。

接近午餐時(shí)間。他們一起工作了兩個(gè)小時(shí),中間休息了十分鐘,大部分時(shí)間都在交談。(普通程序員看到他們可能會(huì)印象深刻,因?yàn)樗麄儚奈幢豢ㄗ』蛳萑肜Ь场?讓另一位程序員檢查代碼,已經(jīng)成為標(biāo)準(zhǔn)的工程實(shí)踐,但是Jeff和Sanjay跳過了這一步,在他們的日志中輸入“l(fā)gtm”(looks good to me),即“在我看來很好”。

表面上看,他們的工作都是細(xì)枝末節(jié)。然而,他們的代碼在整個(gè)谷歌公司范圍運(yùn)行。他們所擔(dān)心的千字節(jié)或是微秒的問題會(huì)在世界各地的數(shù)據(jù)中心被放大無數(shù)倍。有時(shí),Jeff回到家會(huì)告訴他的女兒們,“Sanjay和我今天把谷歌搜索速度提高了10%?!?/p>

拯救谷歌的MapReduce

2003年,Jeff和Sanjay對(duì)Google進(jìn)行了可以說是4個(gè)月來最大的一次升級(jí)。他們用一個(gè)叫做MapReduce的軟件完成了這項(xiàng)工作。這個(gè)想法是他們第三次重寫谷歌的爬蟲和索引器時(shí)產(chǎn)生的。他們意識(shí)到,每次他們都解決了一個(gè)重要問題:在地理上廣泛分布、個(gè)別不可靠的計(jì)算機(jī)中協(xié)調(diào)工作。將他們的解決方案普及化(generalize),就可以避免一遍又一遍地重復(fù)遇到這個(gè)問題。但這需要?jiǎng)?chuàng)造一種工具,讓任何谷歌的程序員都可以用它來操縱數(shù)據(jù)中心的機(jī)器。

MapReduce是Jeff和Sanjay在一間可以俯瞰鴨塘的角落辦公室里寫的,程序?qū)赡軜O其復(fù)雜的過程強(qiáng)加了順序。在MapReduce之前,每位程序員都必須自己解決如何劃分和分發(fā)數(shù)據(jù)、分配工作和解釋硬件故障的問題。MapReduce為程序員提供了一種結(jié)構(gòu)化的方式來思考這些問題。

MapReduce要求程序員將他們的任務(wù)分為兩個(gè)階段。首先,編碼器告訴每臺(tái)機(jī)器如何完成任務(wù)的“映射”階段(例如,計(jì)算單詞在Web頁面上出現(xiàn)的次數(shù));接下來,編寫指令來“減少”所有機(jī)器的結(jié)果(例如,將它們加起來)。MapReduce處理分布的細(xì)節(jié),并且通過這樣做,可以隱藏細(xì)節(jié)。

第二年,Jeff和Sanjay根據(jù)MapReduce任務(wù)重寫了谷歌的爬蟲和索引系統(tǒng)。很快,其他工程師意識(shí)到它有多么強(qiáng)大,他們開始使用MapReduce處理視頻并在谷歌地圖上渲染圖塊。MapReduce是如此簡(jiǎn)單,甚至新任務(wù)一直是自我提示的。谷歌有所謂的“日使用曲線”——白天的流量大于晚上的流量——MapReduce任務(wù)開始吸收空閑容量。

很早就有跡象顯示,谷歌是一家偽裝成搜索公司的人工智能公司。2001年,曾與Jeff和Sanjay共用一間辦公室的Noam Shazeer,對(duì)谷歌從另一家公司獲得授權(quán)的拼寫檢查程序感到沮喪:它不斷地犯令人尷尬的錯(cuò)誤,比如告訴輸入“TurboTax”的用戶,他們可能是在說“turbot ax”。拼寫檢查器的好壞取決于它的字典,而Shazeer意識(shí)到,在Web上,谷歌可以訪問有史以來最大的字典。他編寫了一個(gè)程序,利用Web上文本的統(tǒng)計(jì)特性來確定哪些單詞可能拼寫錯(cuò)誤。軟件會(huì)知道“pritany spears”和“brinsley spears”都是指“Britney Spears”。當(dāng)Shazeer在谷歌的每周T.G.I.F.聚會(huì)上演示這個(gè)程序時(shí),員工們?cè)噲D愚弄它,但大多數(shù)都失敗了。

在Jeff和一位名叫Georges Harik的工程師的合作下,Shazeer應(yīng)用了類似的技術(shù)將廣告與網(wǎng)頁關(guān)聯(lián)起來。廣告定位成為了該公司的一筆收入,谷歌將這筆收入重新投入到計(jì)算基礎(chǔ)設(shè)施中。這是一個(gè)反饋循環(huán)的開始,更大的反饋循環(huán)將成為谷歌智能的源泉;智慧是財(cái)富的源泉;財(cái)富是公司增長(zhǎng)的源泉;這將使公司異常令人不安地占據(jù)主導(dǎo)地位。

隨著更多的程序員使用MapReduce從谷歌的數(shù)據(jù)中獲得見解,轉(zhuǎn)錄一百多種語言的用戶語音郵件、回答他們的問題、自動(dòng)完成他們的查詢和翻譯成為可能。這些系統(tǒng)是使用相對(duì)簡(jiǎn)單的機(jī)器學(xué)習(xí)算法開發(fā)的。

“非常簡(jiǎn)單的技術(shù),當(dāng)你擁有大量數(shù)據(jù)時(shí),就能工作得非常好,”Jeff說?!皵?shù)據(jù)、數(shù)據(jù)、數(shù)據(jù)”——用BigTable、MapReduce等來存儲(chǔ)和處理,成為公司的首要指令,谷歌的全球基礎(chǔ)設(shè)施變得更加無縫和靈活。分布式計(jì)算是一個(gè)古老的概念;“云計(jì)算”和“大數(shù)據(jù)”等概念出現(xiàn)在谷歌崛起之前。但是,通過讓普通程序員能夠方便地編寫分布式程序,Jeff和Sanjay使谷歌對(duì)這類技術(shù)有了新的掌握。用戶可能已經(jīng)意識(shí)到有些事情正在改變:谷歌的云變得越來越聰明了。

2004年,因?yàn)镴eff和Sanjay認(rèn)為MapReduce將對(duì)天文學(xué)家、遺傳學(xué)家和其他需要處理大量數(shù)據(jù)的科學(xué)家有用,他們寫了一篇論文《MapReduce:簡(jiǎn)化大型集群上的數(shù)據(jù)處理》,并公開發(fā)表。

MapReduce的論文就像一種扭轉(zhuǎn)乾坤之力量。廉價(jià)的硬件、Web服務(wù)和連接設(shè)備的增長(zhǎng)帶來了海量數(shù)據(jù),但很少有公司擁有處理這些信息的軟件。

兩位工程師,Mike Cafarella和Doug Cutting,他們一直在努力擴(kuò)大一個(gè)叫做Nutch的小型搜索引擎,他們非常確信MapReduce的重要性,所以他們決定從頭開始構(gòu)建一個(gè)免費(fèi)的系統(tǒng)克隆。他們最終將這個(gè)項(xiàng)目命名為Hadoop,名字來源于Cutting的兒子喜愛一個(gè)大象玩具。

如今Hadoop已經(jīng)被財(cái)富50強(qiáng)中一半的企業(yè)采用。它成了“大數(shù)據(jù)”的同義詞。Facebook使用Hadoop MapReduce來存儲(chǔ)和處理用戶元數(shù)據(jù)——包括用戶點(diǎn)擊了什么、喜歡了什么以及查看了哪些廣告的信息。Facebook一度擁有世界上最大的Hadoop集群。Hadoop MapReduce也為L(zhǎng)inkedIn和Netflix提供支持。Hadoop執(zhí)行分析任務(wù)的速度比之前的系統(tǒng)快1.8萬倍。它成為了情報(bào)收集新方法的基礎(chǔ)。

擁抱人工智能

Jeff有一種不安定的天性:一旦他看到問題的解決方案,他就會(huì)對(duì)這個(gè)問題失去興趣。2011年,當(dāng)全世界都在擁抱云計(jì)算的時(shí)候,他開始與吳恩達(dá)(Andrew Ng)合作。

吳恩達(dá)是斯坦福大學(xué)的計(jì)算機(jī)科學(xué)教授,曾在谷歌領(lǐng)導(dǎo)一個(gè)秘密項(xiàng)目,研究由虛擬“神經(jīng)元”組成的神經(jīng)網(wǎng)絡(luò)軟件程序。Jeff在大學(xué)期間認(rèn)識(shí)了神經(jīng)網(wǎng)絡(luò);當(dāng)時(shí),神經(jīng)網(wǎng)絡(luò)還不能解決現(xiàn)實(shí)世界中的問題。吳恩達(dá)告訴Jeff,這種情況正在改變。在斯坦福大學(xué),當(dāng)網(wǎng)絡(luò)獲得了大量的數(shù)據(jù)時(shí),研究人員已經(jīng)取得了一些令人興奮的結(jié)果。吳恩達(dá)認(rèn)為,有了谷歌這樣大規(guī)模的數(shù)據(jù),神經(jīng)網(wǎng)絡(luò)不僅可以變得有用,而且可以變得非常強(qiáng)大。

神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)的計(jì)算機(jī)程序有很大的不同。它們的行為不是由程序員用通常的方式指定的;相反,它是通過輸入和反饋“學(xué)習(xí)”的。Jeff的神經(jīng)網(wǎng)絡(luò)知識(shí)從他大學(xué)畢業(yè)后就沒怎么進(jìn)步,他在浴室里堆滿了課本。

Jeff開始每周花一天的時(shí)間在這個(gè)叫做“Google Brain”的項(xiàng)目上。谷歌內(nèi)部許多人對(duì)這項(xiàng)技術(shù)表示懷疑。“真是浪費(fèi)人才,”他當(dāng)時(shí)的經(jīng)理Alan Eustace回憶說。Sanjay也無法理解Jeff的舉動(dòng)?!澳銖氖禄A(chǔ)設(shè)施建設(shè)的,”他想,“你在那邊做什么呢?”

在接下來的7年里,谷歌大腦團(tuán)隊(duì)開發(fā)出了神經(jīng)網(wǎng)絡(luò),在機(jī)器翻譯、語音和圖像識(shí)別方面超越了當(dāng)前最先進(jìn)的技術(shù)水平。最終,它們?nèi)〈斯雀枳钪匾乃阉鹘Y(jié)果排名和定位廣告算法,Google Brain成為公司發(fā)展最快的團(tuán)隊(duì)之一。

2001年開始加入谷歌的工程師Claire Cui說,Jeff Dean的參與標(biāo)志著Google AI的一個(gè)轉(zhuǎn)折點(diǎn):“有人相信AI,也有人不相信,”Jeff證明了它是可行的。

AI很大程度上取決于規(guī)模。為此,Jeff Dean領(lǐng)導(dǎo)了一個(gè)名為TensorFlow的程序的開發(fā)——該程序試圖創(chuàng)建一個(gè)類似于AI版的MapReduce程序,簡(jiǎn)化在大量計(jì)算機(jī)上分布神經(jīng)網(wǎng)絡(luò)的任務(wù)。2015年,TensorFlow終于發(fā)布,后來成為AI的通用框架。而近年,谷歌CEO Sundar Pichai已經(jīng)公開宣稱谷歌是“AI first”的公司,正是Pichai決定讓Jeff Dean擔(dān)任公司人工智能部門的負(fù)責(zé)人。

Jeff現(xiàn)在每周花四天時(shí)間在谷歌大腦工作。他帶領(lǐng)著3000多名研究員。他經(jīng)常去做演講,每周開一次會(huì),研究一種新型計(jì)算機(jī)芯片(專門為神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)的張量處理單元TPU),并幫助開發(fā)AutoML,這是一個(gè)使用神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)其他神經(jīng)網(wǎng)絡(luò)的系統(tǒng)。

他每周只有一天時(shí)間能和Sanjay一起編程。

角色不同,但從未走遠(yuǎn)

工程上的壯舉往往會(huì)抹殺自己。我們會(huì)記得18世紀(jì)偉大的探險(xiǎn)家詹姆斯·庫克(James Cook)、喬治·溫哥華(George Vancouver),但卻不記得約翰·哈里森(John Harrison)了。哈里森是一名鐘表匠,他花了幾十年,發(fā)明了一種航海精密計(jì)時(shí)器,能夠可靠地在海上定位經(jīng)度。

最近,Jeff和Sanjay在他們經(jīng)常光顧的一家墨西哥餐館享用瑪格麗塔和玉米餡餅時(shí),Jeff拿出了手機(jī)?!癎mail是什么時(shí)候問世的?””他問道。“2004年4月1日,”手機(jī)回答道。Sanjay在社交場(chǎng)合很敏感,他似乎不喜歡用餐時(shí)被打擾,但Jeff很高興。如今,谷歌可以說話、會(huì)傾聽,也會(huì)回答問題了,這些功能通過一系列程序?qū)崿F(xiàn),這些程序無縫整合,基本上是看不見的,能將用戶的手機(jī)連接到世界各地的數(shù)據(jù)中心。

今天,他們兩人的角色已經(jīng)截然不同。在谷歌,Sanjay被稱為“個(gè)人貢獻(xiàn)者”——他獨(dú)自工作,不管理任何人。對(duì)此,他心存感激?!拔也幌胍狫eff的工作,”他說。他目前正在開發(fā)一種軟件,可以讓工程師們更容易地組合和控制幾十個(gè)程序——獲取新聞、照片、價(jià)格——只要用戶在Google的搜索框輸入文本,這些程序就會(huì)開始運(yùn)行。每周一次,他會(huì)見一群“區(qū)域技術(shù)領(lǐng)導(dǎo)”——谷歌的“工程絕地委員會(huì)”——他們做出的技術(shù)決定會(huì)影響整個(gè)公司。

如果將Google比喻成一座房子,那么Jeff是在建造房子的附加部分。Sanjay是在加固房子的結(jié)構(gòu),加固屋梁,擰緊螺栓。

與此同時(shí),在周一的編程會(huì)議上,他們開始了一些新的工作。這是一個(gè)AI項(xiàng)目:Jeff說,這是一個(gè)嘗試,訓(xùn)練一個(gè)“巨型的”機(jī)器學(xué)習(xí)模型來完成成千上萬的不同任務(wù)。Jeff多年來一直在思考這個(gè)想法;最近,他認(rèn)為這是可能的。他和Sanjay計(jì)劃建立一個(gè)原型,讓團(tuán)隊(duì)可以圍繞這個(gè)原型開發(fā)。

“我想他們彼此思念,”Jeff的妻子Heidi說。他們?cè)诤献鞣啪彆r(shí),會(huì)在每周五共進(jìn)晚餐。

3月的一個(gè)周末,Jeff和Sanjay在庫比蒂諾郊外徒步旅行。天氣晴朗,陽光明媚。Jeff開著一輛藍(lán)色的特斯拉跑車。Sanjay緊隨其后,也是特斯拉,一輛紅色Model S。Sanjay上午一直在看書。Jeff踢了場(chǎng)足球。(他小腿上的一個(gè)裝置告訴他,他已經(jīng)跑了7.1英里。)距離建立谷歌Index的那個(gè)三月已經(jīng)過去20年了,Jeff就像一名退役的耐力運(yùn)動(dòng)員,皮膚被太陽曬壞了。而Sanjay看起來幾乎沒有變老。

這條路有六英里長(zhǎng),蜿蜒穿過茂密的森林。Jeff帶路。在樹林里,他們說起谷歌的成長(zhǎng)速度有多快。 Sanjay 回憶說,在公司的第一次井噴式增長(zhǎng)期間,一名水管工在男衛(wèi)生間的一個(gè)隔間里安裝了兩個(gè)馬桶。“我記得當(dāng)時(shí)Jeff的評(píng)論,”他笑著說:“‘兩個(gè)總比一個(gè)好!’”

他們從樹林里出來,來到干燥、空曠的鄉(xiāng)間。一只火雞禿鷹從頭頂飛過。

“這里的山比我想象的還要陡,”Jeff說。

“我記得有人說條路相當(dāng)平坦,” Sanjay說。

“我想這就是那邊沒有自行車道的原因,”Jeff說。

他們開車回到樹林。在一個(gè)急轉(zhuǎn)彎中,Jeff向樹林外瞥了一眼,他說:“我們?cè)谀承┓矫嫘枰煤糜^察。”

小路一直通向山頂,又高又寬,沒有樹,全景盡收眼底。地平線上有一片薄霧。盡管如此,他們?nèi)阅芸吹侥厦娴氖タ唆斔股矫}和東面的米遜峰。

“Sanjay,那邊是你的辦公室!”Jeff說。他們站在一起,眺望著山谷的另一邊。

聲明:本文內(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)投訴
  • 谷歌
    +關(guān)注

    關(guān)注

    27

    文章

    6128

    瀏覽量

    104979
  • 存儲(chǔ)芯片
    +關(guān)注

    關(guān)注

    11

    文章

    883

    瀏覽量

    43059
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8357

    瀏覽量

    132324

原文標(biāo)題:《紐約客》長(zhǎng)文:Jeff Dean和他背后的男人

文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AI編程工具會(huì)不會(huì)搶程序員飯碗

    AI編程工具可輔助編程,減少手動(dòng)編碼,提升效率,對(duì)程序員有積極影響也有挑戰(zhàn)。程序員需深化技能、拓寬知識(shí)應(yīng)對(duì)。長(zhǎng)遠(yuǎn)看,AI與人類程序員將共生共榮。
    的頭像 發(fā)表于 11-08 10:17 ?59次閱讀

    程序員去面試只需一個(gè)技能征服所有面試官!

    為什么要學(xué)嵌入式?面試各方面感覺都良好,為啥最后給斃了?在這么多技術(shù)活兒里,嵌入式開發(fā)為啥這么吃香?嵌入式開發(fā)找工作,為何更容易?……來,來,來,看看不為人知的內(nèi)部消息!就像我最近聽說的這個(gè)事兒,有
    的頭像 發(fā)表于 11-05 19:35 ?119次閱讀
    <b class='flag-5'>程序員</b>去面試只需一個(gè)技能征服所有面試官!

    第五屆長(zhǎng)沙·中國(guó)1024程序員節(jié)開幕

    據(jù)官方媒體報(bào)道,10月24日;? 第五屆長(zhǎng)沙·中國(guó)1024程序員節(jié)在湖南湘江新區(qū)開幕;本次中國(guó)1024程序員節(jié)以“智能應(yīng)用新生態(tài)”為主題。設(shè)置有岳麓對(duì)話、技術(shù)英雄會(huì)、主題峰會(huì)及賽事、展覽等活動(dòng),一場(chǎng)
    的頭像 發(fā)表于 10-25 15:42 ?140次閱讀

    程序員節(jié)視頻創(chuàng)意大賽,用串口屏贏取千元大獎(jiǎng)

    10月24日,程序員專屬的節(jié)日里,我們盛大開啟“程序員節(jié)視頻創(chuàng)意大賽”特別活動(dòng)!這不僅是一場(chǎng)視覺的盛宴,更是智慧與創(chuàng)意的璀璨碰撞。我們誠(chéng)摯邀請(qǐng)每一程序員及編程愛好者,拿起你的鏡頭,記
    的頭像 發(fā)表于 07-08 10:38 ?72次閱讀
    <b class='flag-5'>程序員</b>節(jié)視頻創(chuàng)意大賽,用串口屏贏取千元大獎(jiǎng)

    程序員節(jié)視頻創(chuàng)意盛宴,邀您共襄盛舉!

    10月24日,程序員專屬的節(jié)日里,我們盛大開啟“程序員節(jié)視頻創(chuàng)意大賽”特別活動(dòng)!這不僅是一場(chǎng)視覺的盛宴,更是智慧與創(chuàng)意的璀璨碰撞。我們誠(chéng)摯邀請(qǐng)每一程序員及編程愛好者,拿起你的鏡頭,記
    的頭像 發(fā)表于 07-04 09:00 ?67次閱讀
    <b class='flag-5'>程序員</b>節(jié)視頻創(chuàng)意盛宴,邀您共襄盛舉!

    LTC2144-14個(gè)通道的最低兩位都失效的原因?

    ;b01010101010101到14'b10101010101010之間相互切換。 但是實(shí)際調(diào)試時(shí)發(fā)現(xiàn)一下異常(本人確認(rèn)引腳連接正常): 1.通道1的最低兩位一直是2‘b11,其余12都正常. 1.通道2的最低兩位
    發(fā)表于 05-28 07:39

    適者生存,程序員最終會(huì)流向哪……

    程序員沒有永遠(yuǎn)的護(hù)城河??!就目前的互聯(lián)網(wǎng)大環(huán)境來看,it行業(yè)已經(jīng)是……
    的頭像 發(fā)表于 03-11 17:11 ?372次閱讀
    適者生存,<b class='flag-5'>程序員</b>最終會(huì)流向哪……

    薪資高、青春飯,是不是程序員=青樓?

    花期太短。技術(shù)迭代快,年齡大容易失業(yè)。 就這幾年的互聯(lián)網(wǎng)環(huán)境而言,不管是前端、Java、Android開發(fā)等等行業(yè)。已經(jīng)感受到程序員不是太卷就是工作難找,薪資過低。以前高工現(xiàn)在拿著中低程序員薪資
    發(fā)表于 03-06 21:32

    瑞薩Flash程序員V3 發(fā)布說明

    電子發(fā)燒友網(wǎng)站提供《瑞薩Flash程序員V3 發(fā)布說明.pdf》資料免費(fèi)下載
    發(fā)表于 02-19 09:37 ?1次下載
    瑞薩Flash<b class='flag-5'>程序員</b>V3 發(fā)布說明

    2024程序員的未來方向如何走?還看今朝

    這幾年的IT行業(yè)想必大家已經(jīng)感受到了,Android、Java、前端等等程序員都經(jīng)歷了大廠……
    的頭像 發(fā)表于 02-02 09:45 ?761次閱讀
    2024<b class='flag-5'>程序員</b>的未來方向如何走?還看今朝

    1月18號(hào)“純鴻蒙”千帆啟航,程序員預(yù)備!

    。 如何正確看待鴻蒙? 我作為程序員來說,首先是看鴻蒙的發(fā)展、市場(chǎng)開發(fā)崗位、薪資以及前景。 這幾年對(duì)鴻蒙的發(fā)展情況來分析,從2019年開始鴻蒙的出來今天,華為鴻蒙取得了很大的成就。從“不兼容
    發(fā)表于 01-16 22:13

    半導(dǎo)體編年史:硅“不為人知”的故事

    半導(dǎo)體在當(dāng)代社會(huì)中發(fā)揮著無處不在的作用,為無數(shù)電子設(shè)備的功能提供了動(dòng)力。從計(jì)算機(jī)中的微處理器到智能手機(jī)中的內(nèi)存/SoC 芯片,半導(dǎo)體是數(shù)字領(lǐng)域不可或缺的一部分。在汽車行業(yè),它們?yōu)橄冗M(jìn)的駕駛輔助系統(tǒng) (ADAS) 和電動(dòng)汽車提供動(dòng)力
    的頭像 發(fā)表于 12-10 14:18 ?588次閱讀

    程序員表白程序

    電子發(fā)燒友網(wǎng)站提供《程序員表白程序.rar》資料免費(fèi)下載
    發(fā)表于 11-21 10:41 ?16次下載
    <b class='flag-5'>程序員</b>表白<b class='flag-5'>程序</b>

    嵌入式程序員應(yīng)知道的幾個(gè)基本問題

    電子發(fā)燒友網(wǎng)站提供《嵌入式程序員應(yīng)知道的幾個(gè)基本問題.pdf》資料免費(fèi)下載
    發(fā)表于 11-20 11:21 ?0次下載
    嵌入式<b class='flag-5'>程序員</b>應(yīng)知道的幾個(gè)基本問題

    S3C2410A GPB端口低兩位與次低兩位個(gè)反邏輯LED指示燈的交替閃爍

    各位大神求指導(dǎo), S3C2410AGPB端口低兩位與次低兩位個(gè)反邏輯LED指示燈的交替閃爍,這個(gè)當(dāng)初沒好好學(xué),求指導(dǎo)
    發(fā)表于 11-14 20:22