查看引用/信息源請點擊:中國AI網

Meta技術負責人詳解AR眼鏡的突破、挑戰與未來

中國AI網 2025年11月27日)Jinsong Yu是一位經驗豐富的軟件工程師,曾在谷歌、微軟和Meta等公司領導過多款產品的開發。例如在Meta,他負責了智能眼鏡Ray-Ban Meta和AR眼鏡Orion項目的軟件開發工作。日前,InfoQ分享了他在QCon London的演講,主題是Orion AR眼鏡的深層架構見解,詳細闡述了為散熱而使用的11個定制微控制器、實現世界鎖定渲染所需的SLAM/VIO技術,以及輸入融合。他最后為技術領導者總結了關于設定方向、通過測試管理復雜性以及戰略性軟硬件協同設計的關鍵經驗。

以下是Jinsong Yu發言的整理:

Meta技術負責人詳解Orion AR的突破、挑戰與未來  第1張

今天我們要談論的是Orion。在討論AR眼鏡之前,我想先引用一些術語,一些基本的東西。你們可能聽說過VR,虛擬現實。你們可能聽說過MR,混合現實,以及AR,增強現實。讓我簡單介紹一下這些術語是什么。

從VR,虛擬現實開始。你們很多人可能玩過VR游戲。你可能身處一個走廊里射擊外星人,或者在一艘潛艇里。當你玩VR游戲時,你實際上并不想看到物理環境,你希望完全沉浸在那個虛擬世界中。VR設備的設計,就是會阻擋你對物理環境的感知。這就是VR。

MR,混合現實,比VR更進一步。設備仍然會阻擋光線,但有時你想看到環境里發生了什么。你所做的就是在設備前面安裝幾個攝像頭,然后信息通過攝像頭,經過電子設備處理,顯示在屏幕上,這就是穿透式顯示。你會看到環境,但實際上是經過攝像頭傳到顯示屏的。物理設備仍然阻擋著光線。這就是混合現實。

AR,增強現實,則完全不同。我們說的是眼鏡。你實際上是在沒有任何電子設備介入的情況下看到你的物理環境,鏡片是透明的,然后你在顯示屏上疊加增強內容。想象一下,你的房間里有一堵物理墻,你可以在那里放一個虛擬電視,或者你有一個物理沙發,你可以在沙發上放一個虛擬墊子。這就是增強現實。這就是我們在這里要討論的。

在我們深入技術細節之前,我想介紹一下產品。我不是產品經理,我是工程師,所以我想我們可以請Meta最好的產品經理來介紹產品。我們最好的產品經理是扎克伯格。我錄了一段他的視頻。雖然他本人不在這里,但他會為我們做產品介紹。

這是Orion,我們的第一個全功能原型。如果讓我來說,這是世界上迄今為止最先進的眼鏡。大約十年前,我開始組建一個由世界上最好的人才組成的團隊來打造這款眼鏡。要求其實很簡單,但實現它們的技術挑戰是巨大的。它們必須是眼鏡。不是頭顯。沒有線纜。重量低于100克。它們需要廣視場角、全息顯示。清晰度足以呈現細節。亮度足以在不同光照條件下觀看。足夠大,可以顯示影院屏幕或多個工作顯示器,無論你走到哪里,無論是在咖啡店、飛機上,還是任何地方。你需要能透過它們看到現實世界。

別人也需要能透過鏡片看到你的眼睛,并與你進行眼神交流。這不是穿透式顯示。這是物理世界,上面疊加了全息圖。如果有人給你發消息,你會看到它。你不需要掏出手機,只會出現一個小小的全息圖,通過幾個微妙的手勢,你就可以回復,而不會打斷你當下的狀態?;蛘撸绻阆牒瓦h方的人在一起,他們能夠以全息圖的形式”傳送”到你的客廳,就像他們就在你身邊一樣。你可以動動手指,調出一局卡牌游戲、象棋或全息乒乓球,或者任何你們想一起做的事情。你可以工作、玩耍,做什么都行。

就是這個產品。非常神奇。每個試用過它的人都對其體驗感到驚嘆。你們很多人可能有個疑問,那Quest呢?或者,甚至Apple Vision Pro呢?我真的很喜歡Apple Vision Pro。我真的很喜歡Meta Quest。它們只是不同的產品。因為它們是不同的產品,所以有不同的目標。它們做出了不同的設計權衡。

例如,如果你看Apple Vision Pro,那頭顯幾乎有600克重。你簡直就像在頭上頂著一塊磚。即使有600克重,還有一根線伸出來。為什么?因為有一個電池包。電池包本身又有350克。他們沒法把它放在頭上,太重了。而對于Orion,我們做出了非常不同的權衡。如果你戴上AVP,你會得到極棒的顯示效果。他們的目標是獲得最好的顯示效果,他們也做到了。毫無疑問。這款眼鏡,如果你比較顯示效果,它不如Apple Vision Pro。甚至不如Meta Quest。這里的關鍵是100克。你可以舒適地戴在臉上。你實際上看到的是物理世界。這就是我們想要的產品體驗。它們只是非常不同的產品權衡。

我們將討論產品的三個部分。顯然,你有眼鏡。這是一切的亮點,是焦點。我們還有EMG腕帶。我會詳細討論。我們用它來輸入。最后,我們有計算模塊。我們設計計算模塊的原因是我們希望盡可能多地從眼鏡上卸載計算任務,這樣可以使眼鏡保持輕便,佩戴舒適。

Orion眼鏡

讓我們把注意力轉向最令人興奮的技術。這里的顯示技術,我們實際上花了數年時間才完善。它極其困難。當我們開始時,不僅僅是Meta不知道如何做,世界上根本沒有人知道該怎么做。我們最終采用的是Micro LED投影儀。它們位于鏡腿(太陽穴臂)上,鏡腿的前側。我們實際上自己定制了Micro LED投影儀。我們自己做是因為我們需要極小的像素,全世界最小、最精細的像素密度。以前沒有人這樣做過。我們必須自己做Micro LED投影儀。這僅僅是光子旅程的起點。你可以想象光子由Micro LED投影儀產生,但它需要進入你的眼睛。

投影儀不在你前面,實際上在你后面。過程是這樣的:在鏡片里,有一個波導。波導的工作方式是,光子從側面的Micro LED發出,進入鏡片,并在鏡片內來回反射多次,直到在正確的時機和正確的位置,光子擊中你的眼睛。

然后它從波導中出來進入你的眼睛。你可以想象需要多么精確地控制精度。對于像我這樣戴眼鏡的人來說,你可能知道,普通眼鏡的折射率相對較低。為了獲得更高的折射率,你實際上會使用高折射率塑料,就像我現在戴的這樣。即使那樣,也不夠高。如果我們用這樣的高折射率塑料來制造顯示器,顯示器會變得非常大和非常厚。你不想把那樣的東西戴在臉上。我們最終使用了碳化硅。同樣,這也是世界上沒人知道如何做的事情。碳化硅并不新,但使用碳化硅來制造鏡片和波導,這完全是新的。我們花了數年時間完善這項技術、工藝,使其真正可行。

最終的結果是我們擁有了這個非常大的視場角,70度視場角。每個試戴眼鏡的人都對此印象深刻,感覺就像你真的把增強內容放在了現實物體上。這是一個令人驚嘆的因素。眼鏡上有很多攝像頭。你可能看得見,也可能看不見。有四個朝外的攝像頭。它們的目的是弄清楚環境的幾何形狀以及眼鏡相對于環境幾何形狀的位置。我稍后在談論世界鎖定渲染時會談到這一點。還有朝內的攝像頭用于眼動追蹤。它可以弄清楚你在看什么。你所看的東西實際上成為了系統的一個重要輸入信號。還有揚聲器、電池。就像我說的,所有東西都是無線連接的。沒有線纜伸出來。它有2小時的電池續航。這非常了不起。

這是同一個設備。我們制造了少數幾個透明外殼的設備,這樣你可以看透并看到里面的東西。里面沒有一毫米的間隙是沒有被有用的東西填滿的。每個地方都塞滿了微電子元件。我想特別指出一點。通常,當你想到這種設備時,你會把它比作一臺電腦。當你想到電腦,你有一個CPU。通常,當你想到像手機、手表這樣的小型設備時,有SoC,片上系統。你把CPU塞進去,把GPU塞進去,可能還把DRAM和I/O控制器等一堆東西放進去。我們這里的情況不同。我們沒有單一的CPU。我們沒有單一的SoC。

相反,我們用了11個微控制器單元。它們是定制設計的芯片。你可能會問,為什么?為什么要做到這種程度?問題是散熱和熱管理。想象一下,我們有一個像手機或手表那樣的單一SoC。這些眼鏡上有很多計算任務。我剛說了有四個朝外的攝像頭在計算環境幾何形狀。有兩個朝內的攝像頭在計算你的眼球位置。有很多計算正在進行。

如果我們將所有計算負載放在一個CPU或SoC上,那么會發生的情況是,那個小小的方塊會產生大量熱量,而我們不知道如何散掉這些熱量。那會成為一個熱點,任何圍繞那個方塊的東西都會融化。相反,我們在里面放了11個微控制器單元。你可以想象這帶來的復雜性。就像在這個頭顯上,在這副眼鏡上,你是在和一個分布式計算機集群打交道。一切都變得復雜了。你想調試,想弄清楚發生了什么。你在這里調試的是分布式計算。甚至連啟動都很復雜,僅僅是為了讓這11個微控制器啟動、協調并開始相互通信。一切都很復雜。性能工作很復雜。軟件更新很復雜。我們花了很多時間處理那里的問題。

你可能會問,”你在這里撒謊。因為你剛說了有三個部分。其中之一是計算模塊。計算模塊存在的全部原因就是為了卸載計算。為什么你這里還有11個微控制器?為什么不把所有東西都發送到計算模塊?讓計算模塊去做工作。搞定”。還有另一個問題。處理來自攝像頭的信號并進行計算,這成本很高。事實證明,如果你想將數據無線傳輸到計算模塊,根據工作負載的不同,無線傳輸的成本實際上可能更高。假設計算模塊完全免費。沒有電池續航問題。沒有散熱問題。什么都沒有。它完全免費。

僅僅是為了優化眼鏡本身的熱管理,你實際上希望最小化從眼鏡傳輸到計算模塊的信息量。我們計算過。沒有可比性。我們必須在眼鏡上進行計算。如果我們把所有東西都傳輸到計算模塊,無線傳輸將消耗如此多的電量。即使所有計算都發生在眼鏡上,我們已經最小化了兩個單元之間的傳輸。事實證明,在眼鏡上進行無線傳輸的芯片組仍然是眼鏡上最熱的熱點。這只是為了讓你對我們談論的東西有個直觀感受。

EMG腕帶

下一個,EMG腕帶,表面肌電圖。肌電圖或EMG的工作方式非常有趣。假設你想做一個像這樣的手勢。用拇指點擊食指,就像這個手勢。你的大腦通過神經系統發送一個信號,即指令。它傳遞到手和手臂。它激活肌肉。肌肉的收縮實際上會產生微小的電信號。如果你有足夠靈敏的傳感器來拾取這個信號,你就可以逆向工程,弄清楚你的手試圖做什么。我說了表面肌電圖。”表面”部分是這里的關鍵詞。

為了使用這個產品,我們不是邀請你到手術室,讓一位好醫生切開你,植入一些電極。我們不那樣做。你就像戴手表一樣把腕帶戴在手臂上。沒有侵入性。沒有任何東西刺入你的皮膚。我們只是從皮膚表面拾取電信號。就是這樣。皮膚上的電信號實際上極其微弱。它們是超級微小的。我們說的是微伏級別的電信號。我們有多個傳感器,因為我們需要從不同的肌肉群拾取信號。傳感器超級敏感。我們進行放大。放大后,我們進行大量信號處理,輸入到機器學習模型中。

機器學習模型將弄清楚你試圖使用什么手勢。這里還有另一個挑戰。這是一個非常小的設備,就像一塊手表。里面的電池很小。我們希望那塊小電池能續航一整天,18小時的電池壽命。每一毫瓦的電池消耗在這里都至關重要。在數據中心訓練一個運行良好的模型并不難。但將模型提煉到能在腕帶上以微瓦級的功耗運行,并且仍然能夠進行所有的機器學習推理和分類,這真的很難。為了縮小模型、提高模型能效,同時保持高精度,我們投入了大量的工程和科研工作。

計算模塊

這是三部分設備中的最后一部分。這是一個計算模塊。它展示了同一設備的三個不同視圖。在某種程度上,與其他兩個相比,這是最不性感、最無聊的一個。它是一個標準的計算架構。我們只是運行沒有顯示器的Android。你可以把它看作一個沒有屏幕的Android手機。實際上這種看法是錯誤的。因為如果你考慮用戶體驗,這才是大腦。你實際上可以把眼鏡和腕帶看作外圍設備。所有重要的東西實際上都發生在這里。所有的業務邏輯,所有的呈現邏輯,一切都運行在計算模塊上。我給你講個有趣的軼事。

一年前,2024年4月,我們還在緊張地進行軟件開發和優化。開始時,我們認為眼鏡上的散熱問題將是一個主要挑戰,我們沒有預料到計算模塊的散熱會那么糟糕。去年這個時候,計算模塊運行得極其熱。當我們需要做演示時,我們實際上必須把冰冷的蘇打水罐放在上面以防止它融化。當然,我們花了幾個月時間進行非常嚴肅的性能優化,減少內存拷貝,重新思考組件邊界和API,在調度和信令方面進行優化,所有這些事情。大量的工程打磨才把溫度降下來。然后我們才能在一個合理的溫度下運行它。

架構亮點

關于設備就說到這里。我現在想換個話題,談談兩個架構上的亮點,即這三個部分如何協同工作以構建AR體驗。

第一部分是世界鎖定渲染。這是非常AR特有的。在我們討論計算、討論AR眼鏡之前,讓我們先想想人眼和大腦是如何工作的。想象你正看著我,然后你把頭向左移動。想象一下,當你移動頭時,看到我就那樣神奇地被傳送到舞臺那邊去了。這非常令人困惑,非常令人驚訝。會讓人迷失方向。在眼鏡上實現顯示的簡單方法,就會發生這種情況。簡單的方法是,我只需顯示圖像,無論我需要顯示什么在眼鏡上,我就完成了。如果眼鏡移動,圖像隨眼鏡移動。這稱為頭部鎖定渲染。

如果你做頭部鎖定渲染,那么如果你移動頭部、移動身體,任何渲染的內容都會隨之移動。這非常令人迷失方向。世界鎖定渲染的工作方式則非常不同。你實際上讓虛擬物體錨定在物理世界中。經過數百萬年的進化,人眼和大腦已經知道如何使其工作。如果你看著我,然后移動眼睛和身體,你毫不費力,但你的眼睛會持續看著我,即使你的頭動了,身體動了,你的眼球會移動以補償身體和頭部的運動。世界鎖定渲染就是我們將虛擬內容放在顯示屏上,錨定在物理世界中。

仔細想想,為了實現這一點,實際上相當復雜。我們談到SLAM。SLAM代表即時定位與地圖構建。建圖是你如何弄清楚房間的幾何形狀。比如,那里有一堵墻。那里有一張桌子。那里有一個沙發。你建立一個點云來代表墻壁、沙發、桌子、家具、人。建圖是繪制出環境的幾何形狀。定位是你在物理環境中的相對位置。VIO與SLAM非常相關。VIO代表視覺慣性里程計。你所做的是實際上使用多個攝像頭。一個攝像頭不夠。你需要多個攝像頭。同時,你使用你的IMO傳感器。結合起來,你構建VIO。VIO會在運行時實時計算出你相對于環境的位置,你的相對角度是多少。

有了這些完整的信息,你現在就可以進行世界鎖定渲染了。它的工作方式是你將物理環境的相對位置傳達給計算模塊。計算模塊會考慮到相對位置來渲染內容。它渲染3D內容,并假設攝像頭位置、眼睛位置就在這里。然后這些信息以相對較高的頻率推送到眼鏡,但還不夠高。我們實際上發現,為了使運動非常平滑,在你觀看時不會產生任何不適感,我們需要以90Hz的頻率重新計算。這是非常高的頻率。記住,我剛說過通過無線鏈路推送比特和字節的成本很高。我們實際上無法承受以90Hz的頻率推送這些信息。我們最終做的是以較低的頻率推送這些信息。它仍然相對較高,但不是90Hz。

然后我們進行另一輪計算。眼鏡以高頻,即90Hz,進行SLAM和VIO計算。如果你的頭移動了一點點,它依然會使用從計算模塊計算出的舊幀,然后以90Hz實時進行重新投影,以調整你的眼睛應該如何看到內容。這樣,內容就能以非常平滑且不令人意外的方式保持在原位。記住,在一開始,我談到了廣視場角,70度視場角。通常,我們實際上并不使用整個70度視場角。實際上使用的是更小的視場角。原因就在于世界鎖定渲染。想象你感覺那個視圖,然后你稍微移動一下頭。

那么發生的情況是,當你向左移動時,右側被切斷了。當你向另一個方向移動時,左側被切斷了。這實際上不是好的體驗。你想要做的是將你的內容放在外側留有一定邊距的位置,這樣當你移動時,什么都不會被切斷。這也是你想要一個真正廣視場角的部分原因。否則,當你移動頭部或身體時,你會得到非常令人驚訝的偽影,這不是好的體驗。

到目前為止,我一直在談論顯示、視覺方面。我還想談談音頻方面,空間音頻。想象有人打電話給你,你有一個視頻通話,那個人待在某個位置,并且是世界鎖定的。你也希望音頻感覺像是從那個人那里傳來的。如果視頻顯示那個人在那個方向,而感覺音頻來自另一個方向,或者如果你戴普通耳機,有時音頻感覺來自你的頭部內部,那會讓人迷失方向。這實際上不是好的體驗。

空間音頻的工作方式是我們進行計算,并可以精細調整兩耳之間的時序和信號強度。它感覺就像音頻來自特定的方向和特定的位置。然后你可以想象,如果你在房間里放置了多個增強內容,它們都會產生音頻。你實際上可以識別音頻的來源。空間音頻實際上也是極其有趣且非常重要的,如果你希望體驗感覺自然的話。

以上就是世界鎖定渲染。這在AR眼鏡領域非常相關。

另一部分是輸入。通常當我們想到計算時,你會想到鍵盤、鼠標、觸摸屏,當然,對于AR眼鏡,你沒有任何這些。你沒有鍵盤可用。你當然不能像這樣操作觸摸屏。你如何進行輸入?你如何與設備交互?我們最終使用了四種不同的輸入模式。我們使用眼動追蹤、手部追蹤、EMG和語音命令。事實證明,沒有單一的輸入模式是最好的。最好的實際上是你把它們融合在一起。它們協同工作。你實際上獲得了最佳的用戶體驗。這是最自然的。

眼動追蹤的工作方式是你有一堆紅外照明器將紅外光照在眼球上。然后你有一個朝內的攝像頭讀取圖像并找出紅外照明的模式。從圖像中,如果你進行足夠的計算機視覺和機器學習,并持續多年改進模型和算法,你實際上可以獲得非常高的精度來弄清楚你的眼睛在看哪里。這很棒。通過眼動追蹤,我們可以弄清楚你在物理世界中看的是什么物體。如果你有虛擬顯示器,假設你有一個面板,顯示屏上有一些按鈕,你實際上可以弄清楚,這個人正在看那個按鈕。因此,按鈕可以高亮顯示,表明獲得了焦點。眼動追蹤非常適用于識別用戶正在關注什么。

我們已經討論過EMG。使用EMG,我們可以識別不同的手勢,比如點擊這里、點擊這里、點擊并按住,甚至是一些精細的動作,比如上下或側向滑動等手勢。將其與眼動追蹤結合使用非常好,因為眼動追蹤提供了目標和焦點信息。但很難用這些信息來激活某些東西。它知道你在看按鈕,但你什么時候想點擊按鈕呢?相信我,你不想用眨眼來點擊按鈕。你使用EMG。手勢可以觸發動作。EMG很棒,因為你的手實際上可以藏在背后或口袋里。非常隱蔽。你可以這樣做而不會讓你的鄰居知道你在做什么。

另一種輸入模式實際上是手部追蹤。就像我說的,有四個朝外的攝像頭。它們可以弄清楚環境的幾何形狀。事實證明,這些攝像頭也非常擅長弄清楚用戶的手在哪里、手指位置等等。你可能會問,你已經有EMG了,為什么還需要手部追蹤?手部追蹤可以提供非常精確的位置信息,而EMG可以提供非常精確的肌肉運動信息。

它們的組合實際上是非?;パa的。如果你考慮眼動追蹤、手部追蹤加上EMG,它們都是低帶寬的通信通道。你可能以每秒幾位數的速率進行通信,而語音命令,特別是近年來AI的進步,可以傳達和發出任意復雜度的命令。你使用手部追蹤、眼動追蹤和EMG進行相對機械的交互,而使用語音命令進行開放和任意的交互。所有四種模式結合在一起,就是我們讓AR眼鏡以自然方式與人交互的方式。這就是我們最終所做的。

AR的未來

AR的未來在哪里?這是我個人的解讀。我家里有一個水晶球,我只是窺視它,看看未來幾年會發生什么。我的猜測是,未來幾年是關鍵時期。實際上會有不同的外形規格占據市場。并不是一種外形規格會保留下來。我的意思是將會有一系列的產品。最簡單的是純音頻眼鏡,只有一個麥克風,一個揚聲器,幾乎沒有別的。它甚至沒有攝像頭。你可能在市場上見過一些這樣的產品。盡管如此,它仍然有用。你可以播放音樂。你可以用語音與AI交互。它仍然有用。這種設備很棒,因為這樣的設備你可以做得很輕。你可以將設備的克數減到最低限度,而且使用起來非常舒適。你可以獲得很長的電池壽命,因為音頻不會消耗那么多電量。從那里,你可以再進一步。你可以添加攝像頭。有了攝像頭,你可以拍攝風景,但也可以很好地與AI交互。

例如,當我在倫敦漫步時,有很多歷史建筑。我想知道它們是什么。我想了解背后的故事。如果你有帶攝像頭的智能眼鏡,你實際上可以問AI,這座建筑是什么?告訴我它的歷史。AI會使用攝像頭拍照,用照片來識別這座建筑是什么。它實際上可以講述關于這座建筑的故事。這很棒。再進一步,你可以添加一個簡單的顯示器。不是我們剛才談論的3D、全息顯示,而是一個簡單的顯示器。它仍然有用。你可以以不顯眼的方式接收通知。你可以獲取一些信息,例如,如果你在走路,想獲取行人導航方向,你必須不時地掏出手機。

如果你有一個帶非常簡單顯示器的眼鏡,那么你就不需要掏出手機了。你可以直接在那里看到方向。最后的領域就是我們一直在談論的,全息3D AR眼鏡。它們的制造成本很高,但我認為它們是未來。在未來幾年,將會有來自各種公司的多種設備覆蓋整個產品譜系。我們將看到誰能贏得市場。這是我的預測。

經驗教訓

我想談談我們做這個項目時獲得的經驗教訓。我認為這里的經驗教訓可以相當廣泛地適用于任何復雜的項目,而不僅僅是AR眼鏡。

我學到的第一點是:要有雄心,但要有選擇地雄心勃勃。意思是,如果你在做工作、運行項目、生產產品,而你只是在做枯燥的工作,那么產品出來也會是枯燥的。如果你有一些雄心,做一些全新的東西,這才是我們都想做的。但你確實希望最小化新技術投入。你聽到扎克伯格說了,Orion花了10年時間開發,整整十年。之所以花了10年,是因為有很多NTI,新技術研究。如果你有一個,你有合理的機會。如果你有兩個,機會就越來愈小,越來越小。這是一個幾何級數。你不想有太多。來自橫井軍平,他是一位日本技術先驅,他有一句名言。他說:”成熟技術的橫向應用”。這是什么意思?意思是,你找到一項發展成熟、眾所周知、制造成本超低的技術,但你找到了這項技術的令人驚訝和新穎的應用,然后你用這種方式構建你的產品。這是構建產品的最佳方式。當你構建產品時,專注于你必須解決的挑戰,而不是你想解決的挑戰。同時,保持精簡、高效,并盡可能重用。

在開發或運行AR眼鏡項目后,我經常被問到的一個問題是,你們真的需要一個新的操作系統嗎?我的回答是,讓我來剖析一下。你所說的操作系統是什么意思?如果你說的是內核、設備驅動程序,那么,不,我們實際上不需要。我們使用Linux內核。我們實際上運行Android。如果你把操作系統看作是一組API和應用程序開發者需要用來構建業務邏輯的契約,那么答案是肯定的。為什么?因為沒有眼動追蹤的標準API。沒有手部追蹤的標準API。沒有EMG輸入的標準API。沒有將所有這些輸入融合在一起并弄清楚如何觸發3D全息輸出以世界鎖定渲染的格式呈現在你的世界中的標準API。我們需要構建新的API。我們需要建立一個新的契約。從這個意義上說,是的,我們必須構建一個新的操作系統。這是其一。

Orion超級復雜。我們有數百名工程師長時間為之工作。管理復雜性的一種確定方法是通過測試。你可能熟悉單元測試、集成測試、端到端測試的區分。在很多方面,它們像是過于簡化了。有時你實際上希望在不同的層級切斷依賴鏈,所以你最終可能得到一系列集成測試。有時你實際上希望以不同的方式進行端到端測試,所以你最終會有許多不同的端到端測試套件。

我說通過測試管理復雜性的原因是,如果你能清晰地定義組件邊界和工作單元,那么你就有辦法簡化并允許管理復雜性。測試是唯一的方法。根據我二十年的經驗,這是真正定義的唯一方法。所有的API都會過時。所有的文檔都會失效,它們會過時。測試是唯一的事實來源。你還可以運行壓力測試、故障注入、模糊測試,它們都是非常有趣和優秀的測試技術。

最后,如果你運行硬件項目,那么除了你實際使用的硬件之外,弄清楚如何使用開發板、代理設備(這些設備不真正屬于你,但你可以運行一些代碼來弄清楚某些事情)以及模擬器,是非常重要的。不要為了省錢而跳過這方面的投資。它們會救你的命。迭代速度極其重要。你可能比競爭對手起步晚,但如果你的競爭對手以月周期迭代,而你以周周期甚至日周期迭代,那么你可以很快趕上。為了提高迭代速度,保持簡單。堅實的基礎設施和工程質量確實有幫助。

很多時候你無法快速迭代的原因實際上是,我們簽入了一些代碼,現在產品壞了。你有工程質量問題。保持高工程質量。不要等到代碼質量實際很高了才運行。使用測試作為護欄。談到工程質量,我可以告訴你,原型代碼總是會以某種方式進入生產環境。別假裝,”我只是寫一些原型代碼。不用擔心測試。不用擔心代碼覆蓋率。不用擔心API的整潔性。沒關系”。不,不是的。它會變成生產代碼,你會后悔的,相信我。決定使用多個代碼倉庫或多個構建系統是件大事。即使一開始你不覺得,它總會回來困擾你。

語言選擇真的很重要。我自己在C++上花了超過二十年時間,但無論你對C++有什么經驗,你總會遇到內存安全和線程安全的問題??偸侨绱?。沒有例外。我不是說不要用C++。我只是說,如果你用,就要有計劃。計劃花時間調試那些棘手的問題。如果你使用像Python、Java、JavaScript、TypeScript這樣的語言,你可能在內存安全和線程安全方面問題會少一些,但性能可能是你需要關注的問題。同樣,使用它們,只是要意識到優缺點,并計劃好在性能上花時間。Rust是一種有趣的編程語言。如果你不熟悉Rust,我實際上建議你花點時間了解一下。你不一定非得用它,但要知道它能做什么。它提供了像C++一樣的裸機性能,但它在編譯時消除了C++中一大堆安全問題。

過度簡化的總結是,如果Rust代碼編譯通過,如果代碼編譯了,那么你的代碼中就沒有未定義行為。這太棒了。另外,無論你做什么,總是要投資于靜態分析、性能分析器等工具。

硬件-軟件協同設計很重要,但成本也很高。在決定引入自己的硬件組件之前要三思。如果你能只構建一個應用程序,如果你能保持純軟件,那就那樣做。這樣便宜得多。你可以迭代得更快。很可能你會構建出更好的產品體驗。如果你必須引入硬件,那就做。確保你的硬件團隊和軟件團隊每天相互溝通。進行軟件-硬件協同設計確實能在一些不可改變的障礙上取得進展。

例如,我們談論Orion。我們絕不可能把它做成一個純硬件項目。我們也絕不可能把它做成一個純軟件項目。唯一的方法是我們同時在硬件和軟件上打磨并進行協同設計。它們從彼此的進展中受益,并使其成功。

性能始終是一個難題。延遲,吞吐量。你想要做的是系統地在儀表板中跟蹤性能。你需要了解系統的性能。你需要構建強大的工具和基礎設施來真正理解你的代碼和系統的性能特征。如果你看到一個性能問題,你只需要集中精力專門處理。你可能實際上必須停止程序的所有其他工作,讓團隊專注于性能一段時間。

技術領導力。你們中許多人已經處于技術領導職位。對于年輕人,你們可能渴望以后成為技術領導者。根據我二十年的經驗,這四點是最重要的。

設定正確的方向。如果你設定了錯誤的方向,讓團隊朝著錯誤的方向奔跑,他們跑得越快,離目標就越遠。設定正確的方向。

聚焦極其重要,尤其是當你有一個大團隊時。每個人、每個團隊都有他們自己喜歡的功能。人性使然,他們會做自己喜歡的事情,而不是做重要的事情。如果你在項目接近尾聲時,你的產品每小時崩潰一次,卻有一個團隊在周末花時間在他們內置的彩蛋上,那你就有問題了。你需要整個團隊專注于最重要的功能和工作。

清晰,尤其是溝通的清晰。我們都是經驗豐富的專業人士,但有時我們仍然溝通不清晰:有時、或經常、或幾乎總是。嘗試寫簡短的文檔。如果你看到一份30頁的文檔,想想如何把它縮減到3頁。如果你看到一份3頁的文檔,想想如何縮減到1頁。確保閱讀文檔的人確切知道發生了什么。確保決策被清晰地傳達。

愿意做出權衡。我們總是處于”戰爭迷霧”之中。信息總是不完整的。優先級總是相互沖突的。如果你不做權衡決策,你的產品就會變得一團糟。要愿意做出權衡選擇。