Android 告急!

“誰會從 Google 手中搶走 Android?”早在去年,Google 就曾因 Android 移動操作系統涉嫌壟斷行為而面臨鉅額罰款威脅。再加之各類競爭者虎視眈眈,以及跨平臺替代框架對原生 Android 的圍攻,Google 的日子似乎並不好過。作為一個曾在 Google 工作了 13 年之久的技術老兵,Steve Yegge 在離職加入了東南亞出行巨頭 Grab 公司之後,發佈了一篇分析自己為何離開Google 的博文,強調了 Google 在創新能力方面的漸趨弱勢,一度引發廣泛熱議。時隔近一年,他又在本文中重點介紹了 Google 的 Android 技術本身存在的一些問題,譬如 Dev Stack 缺失、兼容性差、開發框架安全性低等等,對此,你怎麼看?


Android 告急!


作者 | Steve Yegge

譯者 | 蘇本如

出品 | CSDN(ID:CSDNNews)



前言:從離開 Google 到糟糕的 Android


我至今仍然不能百分之百地確定為什麼我發表的那篇叫做《我為什麼要離開谷歌》(https://medium.com/@steve.yegge/why-i-left-google-to-join-grab-86dfffc0be84)的博文會受到如此多的關注。在那篇博文裡,我只是嘮叨了些諸如“我換工作比較隨性”之類的廢話,卻不知為何會被逐字逐句地翻譯成 80 種語言來傳播,直到後來某一天才被娜塔莉·波特曼的一篇專欄文章超越。公平地說,那個專欄要有趣得多。

我猜其中一個原因是因為那一週沒有什麼勁爆新聞吧?另一個原因可能是 Medium 網站擁有了大量的用戶?Medium 網站是一個很好的平臺,回想起寫博客的日子,我曾經希望谷歌也能創造出一個像 Medium 這樣有新意的產品,但正如你所知,事實上並沒有……

無論原因是哪一個,我的博文收到的回覆還是很有趣的。巴基斯坦的某個傢伙說如果我碰巧和他在同一個城市的話,就要請我喝杯啤酒。倫敦的某人願意出一千刀,讓我在電話裡花一個小時和他聊聊語音搜索市場或關於 Garbo 的話題,我禮貌地拒絕了,因為我實際上對這些一無所知。一個俄羅斯人甚至在一次聚會上走過來對我說:“你樹立了不少敵人啊”。哈哈,多麼有趣的時光。

網上也有很多評論對我想在那篇博文中表達的關鍵信息有不少誤解,有人甚至問“這不就是個專車服務嗎?” 我曾嘗試描繪一張更大的“畫”,但似乎搞砸了。有時間我會回過頭再重新看看那篇博文,看能否讓大家更明白些。

但今天我想要討論的重點是 Android——站在一個外行者以及業餘愛好 Android/iOS 的開發人員的立場,分享下我的個人觀點。

我一直關注 Android 是因為我們正在嘗試招聘一些移動開發人員,你會認為這件事情很簡單。但事實證明移動開發人員是當今市場上的“搶手貨”,很多公司都有需要,而且市場上懂得移動開發的人並不多。招聘他們就像想抓獨角獸一樣不容易。

為什麼每個公司都需要移動開發人員?因為桌面網頁開發正在慢慢消失。我在谷歌的各個開發團隊都有些朋友——好吧,或許現在只能算是前朋友吧——他們曾經在背地裡指責我。但不管他們如何批評我,隨著整個世界向移動端傾斜,桌面網頁開發會漸漸減少。你可能還記得 Facebook 從“Web First”到“Mobile First”的轉變吧,那差不多是在 8、9 年前的事了,Facebook 當時差點就完蛋了。我並不是說這種轉變會在一夜之間發生。但這家公司在意識到他們要麼成為一個移動互聯網公司要麼被市場拋棄的時候,確實經歷了一場生存危機。

他們成功了,但這確實不容易,因為 Android 的 Dev Stack(開發堆棧)是世界上最大的一坨 poo sandwich。



Google 內部工程師的鄙視鏈造成的 Android 窘境


在谷歌,大多數工程師都很傲慢而不願做移動或網頁開發工作。他們非常傲慢地宣稱“我不做前端開發”。那裡有一種現象,我喜歡稱之為“鄙視 DAG 鏈”,這裡的 DAG 是指有向無環圖,有點像流程圖。在鄙視 DAG 鏈的頂端坐著的是用 C++ 寫搜索引擎的工程師,他們比 Java 工程師酷,Java 又比 Python 酷,Python 又比 JavaScript 酷。同樣,寫搜索的比寫廣告系統的酷,寫廣告的比寫 App 的酷,寫 App 的比工具酷,工具又比做前端的更酷。諸如此類。程序員喜歡互相看不起對方。如果你不幸成為谷歌的移動開發工程師,那麼你將被困在幾個鄙視鏈的底部,每個人都在俯視你。

但是,當我一個又一個地從事了所有這些開發工作之後,從系統編程到大規模數據工程,從編譯器設計到服務框架開發,從遊戲開發到 Web 開發,再到移動開發,我可以向你保證,前端編程即使不會更難,也至少和其他開發工作一樣困難。後端中的一切看上去都是美觀、整潔、有序、分佈式並且是可並行的——與 25 年後仍然一團糟的前端網頁開發相比,這簡直是天堂。如果再和包括 iOS 在內的移動編程那種“便便三明治”相比,哪怕前端網頁編程也會猶如巴厘島的一次美妙之旅。

Android 怎麼樣呢?沒錯。這是他們中最大的“poo sandwich”。如果不介意我說句俏皮話的話,Android 開發人員都是英雄。如果用 Android 來開發巨型應用,如谷歌地圖、Facebook 或 Snapchat……如果我告訴你,你都不會相信——改完一行代碼,坐在那裡要等上 20 分鐘才會看到發生了什麼。你所做的每一個更改,無論多麼細微,在第一次嘗試時都有 80% 的機率不會有效果,因為 Android 的特徵互操作性矩陣異常簡單。你可以用 X,也可以用 Y,但是因為某個該死的原因你就是不能同時用 X 和 Y。

設備兼容性這事更是讓我火大。我在 Google Play 商店裡有一堆一星評論,因為我的 Wyvern 遊戲 App 隨機地不能在 LG 設備上工作,所以我不得不去 eBay 上買一個 60 美元的廉價 LG 設備(而不是那種劣質的 600 美元的 LG 設備)來重現這個 Bug,結果發現 Android 有兩個在滾動列表上獲取鼠標點擊事件的 API,但是有一個 API 在 LG 上不起作用。

我想說,有沒有搞錯!

正因為 Android 總有這樣的莫名其妙的事情發生,現在許許多多的競爭對手,無論大小,都推出了自己的 Android 替代框架。他們想替代的不僅僅是缺失功能的支持庫(儘管很多這樣做了),他們更想要做的是全面替代谷歌 Android 的全面的開發堆棧。現在已經面世的替代框架有微軟的 Xamarin、Adobe 的 Cordova、Facebook 的 React Native。除此以外,再仔細看看,還有 Framework7、Appcelerator Titanium、Onsen、Sencha、Kendo、XDK、Ionic、Mobile Angular、Unity——天吶,這到底是要整哪一齣!

就像所有曾經嘗試過 Android 開發的人放棄後都會說:“Android 太糟糕了,我要自己去做一個更好的。”

而谷歌,不甘於被競爭對手超越,回應說,“哦,是嗎?你無法和我們競爭,因為我們的競爭對手是我們自己!”。然後他們推出了 Flutter,這是一個 100% 嚴肅的 Android 開發堆棧,與原生 Android 競爭,而 Android 開發團隊甚至拒絕承認它的存在。



Android 的對手


這些開發框架的問題在於它們使 Google 容易受到攻擊。大多數此類框架都是跨平臺的,這意味著你只需編寫一個應用就可以在 iOS 和 Android 上運行。不管你是大公司還是小作坊,沒有人願意付雙份薪水請兩個開發團隊在不同的平臺上編寫完全相同的應用。因此,巨大的經濟壓力驅使公司遷移到跨平臺框架。唯一拖後腿的地方在於,目前這些框架還不如“原生”開發框架那麼棒。

但其中一些框架(尤其是 Facebook 的 React Native)距離這個目標已經非常非常近了。如果它們中的一個成功搶佔了足夠大的市場份額,那麼 Android 基本上就成了開發者生態系統的一部分,並且這個系統已經不再由谷歌控制了。

這似乎不是什麼大問題,因為谷歌仍然擁有 Play Store、OEM 和許可授權等。對大多數人來說,他們似乎很舒服地坐在駕駛座上。但是考慮一下:如果所有移動開發者都開始使用一個特定的跨平臺框架 X,那麼從字面上來看任何其他的硬件/操作系統製造商或聯盟都可以和他們自己的競爭硬件/操作系統平臺(比如 Windows)一起直接支持該框架 X,並且所有的應用程序都可以在其上運行(可能更快,更容易啟動)。這將完全把谷歌切割出來。相信我,很多公司都想這樣做。對不起,我說錯了,不是很多,而是全部。誰不想呢?

谷歌對這種情況的反應是絕不讓步。他們加倍投入到自己的“原生”(傳統)Android 編程,為 Kotlin 語言提供官方支持,這對於原生 Android 程序員來說是一個很大的進步。我喜歡 Kotlin,它代表 Java 的未來。但讓我們面對現實:這已經不是移動開發的發展方向了。人們編寫跨平臺框架的原因有兩個:第一,因為他們希望公司的應用程序在兩個平臺上工作,而不需要做兩倍的工作。第二,因為 Android 原生開發仍然如此痛苦,即使有了 Kotlin,許多公司也感覺他們應該扔掉它,並從一個更容易的技術上從頭再來。

如果你是一個 Android 或 iOS 開發者,並且你花了一些時間嘗試 React Native(Facebook 創建它是為了幫助解決這些問題),不到 30 秒你就會意識到這是更好的方法,不過前提是你開發的不是遊戲,否則你可能更願意使用 Unity。對於業務和產品類的應用,React Native 提供了合理的性能、跨平臺兼容性和極為方便的工具(最好的來自 Microsoft),極大提高了發展速度。還記得我前面說過一行代碼的改變效果在常規 Android 堆棧中要花 20 分鐘才能看到嗎?這可能發生在像 Nest 或 Facebook 這樣的大型應用程序中,但即使是中型應用程序,也可能需要 2-3 分鐘。而 React Native 則即時的,你一旦改變了代碼,就能即刻看到效果。

這意味著產品功能的發佈速度可以提高 10 倍;這意味著更快的上市時間;這意味著先發制人的優勢;這意味著你們在競爭中不斷取勝。放棄原生編程框架,轉而使用像 React Native 這種快節奏的跨平臺框架,將會讓你立於不敗之地。

我懷疑,在沒有證據的情況下,谷歌的 Android 團隊並不能確定跨平臺對他們是好是壞,但他們傾向於“壞”,否則他們會為跨平臺的 Flutter 提供更多支持。我個人認為這對他們有好處,但我說了不算。

不管怎樣,谷歌目前正致力於通過改善原生體驗,來保持自己的領先地位。而且,由於原生體驗對於像 Snapchat 和 Instagram 這樣的大型應用程序來說是最糟糕的,它們主要是試圖解決大型應用程序開發體驗問題,而這主要又是由構建時間來決定的。

為了解決這一問題,谷歌在改善“官方”的 Android 應用程序構建系統上做了大量工作,而這個系統自身是基於本來就已經非常複雜的 Gradle 系統,谷歌隨後又在其上加入了大量亂七八糟的 Android 特有的東西。日復一日,這個系統變得越來越複雜,甚至構建工程師都不再能理解其中的某些部分。如果你想試著搞清楚構建類型(Build type)、產品風格(Product flavor)和風格維度(Flavor dimension)之間到底有什麼區別,那隻能說祝你好運了。因為谷歌一直在增加這個系統的複雜性,他們認為增加的這些東西對於擁有大型應用的大型公司很重要。

諷刺的是,大多數大型公司都在積極地將其棄之不用,轉而支持 Facebook 的 Android 構建系統——Buck,看起來谷歌正在走向一個死衚衕。

因此,似乎谷歌已經明白這是一個問題,但是他們卻在加倍致力於一個沒有人喜歡的解決方案——一個擁有極其複雜的 Gradle 構建系統的原生堆棧——開發人員正在遠離,而第三方開發堆棧正在不斷獲得市場份額。



互聯網巨頭們針對 Android 發起“攻擊”


更糟的是,開發堆棧並不是安卓系統受到的唯一攻擊。還有其他一些方法可以將 Android 從谷歌竊走。一種方法是創建一個更成功的商店:Play Store 是谷歌對 Android 最主要的控制手段,它在公司和政府層面引起了很多爭議。因為 Android 據稱是一個開放系統,但 Play Store 卻 100% 由谷歌控制。而微軟和 Twitter 支持下的 Cyanogen 曾是打破這種局面的重大嘗試。雖然由於內部權力爭鬥而最終失敗,但這是第一次認真嘗試對於 Play Store 進行“割喉”打擊。

另外猜猜還有誰和競爭對手正在聯手對谷歌大打出手呢?你猜對了,正是 Jeff Bezos(Amazon 的 CEO)。因為如果不從谷歌偷取 Android 系統,他就不能成為全球首個萬億富翁。亞馬遜的應用商店已經做得相當不錯了,而我看到的亞馬遜和谷歌之間的幾乎每一場面對面的競爭中,亞馬遜的表現都會隨著時間的推移而越來越好。當心了,谷歌!

如果這些還不足以讓谷歌擔心,那麼針對 Android 系統還有第三場襲擊,而這場襲擊正中谷歌的要害——在線廣告。如今,Facebook 的 Android 應用變得相當龐大(多年來有數百名工程師致力於此),已然發展成為一個真正的平臺,現在企業可以直接將廣告投放到 Facebook 的應用中。例如,《紐約時報》可以在那裡購買廣告投放,所有的錢都直接從紐約時報轉到 Facebook,而不必勻一分錢到谷歌,可以想象這讓谷歌有何感受。

正如微信在中國一樣——微信應用已經成為一個蓬勃發展的平臺,可以在其上構建和部署其他應用(和廣告)。就像把一個完整的市場嵌入到應用內部,Facebook 和微信移動應用已經成為獨立的廣告發布渠道。

讓我們澄清一下:谷歌創建 Android 的唯一原因在於 Android 是一個廣告頻道(Channel)。谷歌是一家廣告公司,世界上最大的廣告公司,因而總是受到諸多公司無休止的攻擊,這些公司想把用戶眼球轉移到他們自己的頻道而不是谷歌頻道。歸根結底,這和針對網絡中立性的攻擊幾乎如出一轍。電信運營商和 ISP 希望為你提供所有你想看到的廣告,或者至少從谷歌和 Facebook 的廣告中分得一杯羹。

每當你看到像 Facebook、谷歌、亞馬遜或微軟這樣的公司神秘地進入一個陌生的新業務,你可以確信新的廣告頻道爭奪開始了。谷歌的 Chrome 是一個控制 Web 訪問的廣告頻道;微軟的 Xbox 是一個針對 PlayStation 的廣告頻道,它威脅要將 PC 作為在家上網的頻道;YouTube 是一個廣告頻道;Instagram 和 WhatsApp 也是類似產物;HBO/Amazon/Netflix內容戰是一個直白的廣告頻道;亞馬遜 Echo 是一個廣告頻道,而你的家已經變成今天最大的廣告頻道之一;即使是谷歌地圖,也是本地廣告的一個廣告頻道……一旦你開始觀察,就會發現廣告頻道無處不在。

最重要的是,企業希望你通過他們的頻道而不是其他人的頻道觀看你最喜歡的內容(書籍、電影、遊戲等),這樣他們就可以獲得廣告收入,或者至少是訂閱收入。

Android 可能是谷歌最重要的頻道——即使今天不是,在未來的十年肯定是。他們不能失去對它的控制。但我們已經看到,至少有三個不同維度的協同攻擊正在發生:開發者生態系統(React Native 和它的朋友們)、商店應用(Amazon 的 App Store 和 傳言中的Cyanogen 繼承者)以及輕量級的應用內市場(Facebook 和微信等)。到目前為止,谷歌對每一個威脅的反應都是……好吧,不得不承認他們仍然處在領先地位,至少現在是。

言歸正傳——

所有這些看起來像是一堆無用的高談闊論(原本就是),但它實際上對 Crab 這樣的公司產生了實質的影響,因為我們必須對我們開發移動應用要使用哪些技術堆棧做出重大決策,這些應用對於我們的乘客、司機、商人、代理等而言,是通向外部世界的窗口(也即頻道)。

如果你認為谷歌確實有可能失去對 Android 的控制,那麼你最好的選擇是使用跨平臺框架,因為它將通過改進的可移植性來對沖你的賭注。如果你陷入了激烈的競爭中而需要更快的產品發佈速度,你可能應該選擇原生 Android 以外的產品。Android 仍在追逐著“Gradle”列車,但這條路絕不會走得太快,而這很大程度上是因為 Android 設計的遺留問題很難解決。

在跨平臺選項中,React Native 看起來像是一個贏家。它吸引了許多 Web 開發人員,這可能是全球最大的開發人員受眾,很難與之競爭。Grab 最近開始投資 React Native,看看它能否實現自己的承諾,到目前為止,看起來相當不錯。當然,要把我們的原生 Android 和 iOS 應用退下來,還有很長一段路要走,因為移植確實需要時間。

總結一下這篇博文背後的主要觀點:移動開發人員市場緊缺,很難僱傭得到,因為除了谷歌以外,所有人都知道 Android 編程很艱難。所以現在整個生態圈正在迅速發展,很多競爭對手正在努力讓自己的方式成為移動開發的唯一真正方式……這使得招聘移動開發人員更加困難,因為整個生態圈是如此的分散。

但是如果不考慮你的風格,現在正是成為移動開發人員的好時機。如果你是一個非移動開發者,你應該考慮切換到移動開發一段時間。從後端體驗和學習移動開發開始,您將成為一個“全棧開發人員”,這樣的開發人員在市場上更加罕見,是更具市場價值的獨角獸。

如果你對此有興趣,是時候參與這樣的競爭中來,以獲得對 Android 的控制,很多公司都在這樣做,甚至谷歌的其他團隊也在這樣做。現在有很多大鯊魚繞著 Android 這條船在打轉,谷歌需要提高警惕。

免責聲明:以上是我的個人觀點,其中可能有很多有失偏頗之處。同時我也不代表我的僱主(Crab 公司)說話,你大可不必盡信。事實上,我自己甚至都沒回過頭再讀一遍。原文:https://medium.com/@steve.yegge/who-will-steal-android-from-google-af3622b6252e本文為 CSDN 翻譯,如需轉載,請註明來源出處。作者獨立觀點,不代表 CSDN 立場。


分享到:


相關文章: