開發者吐槽:Android開發就像「大便三明治」
作者|Steve Yegge
策劃|覃雲
本文簡要剖析 Android 生態系統在開發棧方面的現狀,告訴你原生Android開發是多麼的噁心,以及不同競爭對手圍繞 Android,從開發體驗、應用商店、廣告渠道三大領域與 Google 展開的戰爭。
作者聲明:本文純屬個人觀點,其中很多可能並不正確,所有言論與前端之巔無關,請用批判的思維閱讀本文。
我來了,又一次,正在飛往雅加達的航班上撰寫這篇文章,這似乎已經成了我的習慣。
至今我依然不能完全肯定,當初那篇「我為何從 Google 離職」博客文章怎麼就引起了那麼大的關注。基本上我只是表達了「我就是一個喜歡頻繁換工作的普通人」之類的觀點。可就這麼一篇文章被翻譯成了大概 80 種語言,甚至變得比娜塔莉·波特曼的兩性專欄更火,老實說,她的專欄內容可有趣多了。
也許可能那一周沒有其他更勁爆的新聞了吧,或者只是因為 Medium 的用戶數又再攀新高?Medium 是個很棒的平台,回首以前寫博客的日子,我還曾期待著 Google 能提供一種類似的創新式產品呢,不過……後來,你懂的。
今天,我想談談 Android,作為局外人兼業餘 Android/iOS 開發者,我自己對 Android 的看法。考慮到「麥芒落進針尖里」這種事不可能連著發生兩次,我也可以放心假設本文不會像上次那樣突然就火到不行,今天,這件事,我只說給你聽。
最近我們要招募移動開發者,所以又開始考慮 Android 的各種事宜。你也許覺得招聘開發者是個再簡單不過的事,但實際上開發者是目前市面上最搶手的資源。Grab (我的公司)需要開發者,每個人都需要開發者,可開發者的數量嚴重不足。看誰運氣好能搶到吧。
為什麼每個人都需要移動開發者?因為 Web 正在慢慢死去(編者註:這裡指PC Web)。我的一些友人(也許是「前友人」)就職於 Google 的幾乎每個部門,他們經常向我展示一些結果很悲觀的圖表,無論怎麼切片查看,隨著整個世界愈加移動化,Web 都在穩步衰退中。
見鬼,你也許還記得 Facebook 從 Web 為先向移動為先的轉換過程,這事是什麼時候開始的?八年還是九年前?Facebook 可是差點就掛了。我是說,雖然並沒有一夜之間突然完蛋,但當這家公司意識到自己必須轉型成移動公司,否則必然被歷史遺忘時,他們就開始面臨嚴重的生存焦慮。
他們設法做到了,但毫無疑問這個過程異常困難,因為 Android 開發棧是全世界最大的「大便三明治」。
便便烹飪法
Google 的大部分工程師在移動或 Web 編程方面實在是太自大了。「我不做前端」,他們用自傲的聲音高聲宣告著。這其中甚至存在一種我稱之為「DAG 蔑視(DAG of Disdain)」的現象,DAG 是指有向無環圖(Directed Acyclic Graph),有點類似於流程圖的東西。
在這個鄙視鏈中,使用 C++ 寫代碼的,崇高的搜索工程師位居最頂部,人們認為 C++ 比 Java 酷,而 Java 又比 Python 酷,Python 則比 JavaScript 酷。而搜索無疑要比廣告酷,廣告要比應用酷,應用則比工具酷,工具比前端酷。以此類推。
程序員們喜歡互相鄙視。
如果你倒了八輩子霉成為 Google 的移動工程師,就只能跌落鄙視鏈的最底端,其他所有人都位居你的上位,大家都在俯視你。
但當我一個人親自逐一完成所有這些工作,從系統編程到大規模數據工程,再從編譯器設計到服務框架開發,從遊戲開發到 Web 開發再到移動開發,我可以向你保證前端編程哪怕不會更難,至少也和其他工作一樣難。
後端的一切都顯得那麼美觀、簡潔、有序、分散式、可並行;儘管已經過了 25 年,但相比亂七八糟的 Web 開發,後端開發依然美好如天堂。如果再和包括 iOS 在內的移動編程那種「大便三明治」相比,哪怕 Web 編程也會顯得猶如巴厘島度假那般美好。
Android 呢?沒錯,Android 就是最大的「大便三明治」。如果你不介意的話,完全可以說 Android 開發者都是英雄。為 Android 開發諸如 Google Maps、Facebook 或 Snapchat 這樣的大型應用,說起來,你絕不會相信我的看法:哪怕只修改了一行代碼,也要坐等 20 分鐘才能知道結果。
你的每次改動,無論多麼微不足道,都有 80% 的可能首次嘗試就無法生效,因為 Android 的特徵互操作性矩陣簡陋到讓人吃驚。你當然可以使用 X,也可以使用 Y,但你就是不能同時使用 X 和 Y,反正就是不行。
設備兼容性這事更是沒法說。我的作品在 Google Play Store 有很多憤怒的一顆星評論,因為我開發的 Wyvern 遊戲就是會隨機地無法在 LG 的設備上運行,為了重現 Bug,不得已的我只能去 eBay 買了個售價 60 美元的低端 LG 設備(而不是 600 美元的高端貨),然後發現,獲取滑鼠點擊事件的 Android API 有兩個,而其中一個就是不能在 LG 的設備上使用。
事情實際是這樣的:很多廠商,無論規模大小,都會用自己的框架替換 Android 框架。這種做法不光發生在缺少的功能對應的支持庫上,而是普遍存在的情況。甚至有些廠商會全面替換 Google 的整個 Android 開發棧。微軟有 Xamarin,Adobe 有 Cordova,Facebook 有 React Native,這簡直是瘋了。再仔細看看,還有 Framework7、Appcelerator Titanium、Onsen、Sencha、Kendo、XDK、Ionic、Mobile Angular、Unity……講真,這到底是要鬧哪樣?
就好像每個嘗試過 Android 開發的人都會在放棄之後說一句:「局面太糟糕了,我要自己成立一家創業公司,創造更美好的明天。」
而 Google 呢,也沒比他的競爭對手好多少,對此問題只是說:「是嗎?但你是沒法戰勝我們的,因為我們自己都在左右互搏!」,然後 Google 就發布了 Flutter,這是一種專為與原生 Android 競爭而生的 Android 開發棧(這說法可不是我編造的),而 Android 團隊甚至拒絕承認它的存在。
襲擊 Android
上面這些開發框架的問題在於,會讓 Google 對 Android 的控制變得非常脆弱。大部分此類框架都是跨平台的,這意味著寫一個應用就可以同時在 iOS 和 Android 上運行。無論大公司或小作坊,沒人願意支付兩份薪水,組建兩個開發團隊,只為了針對不同平台開發完全相同的應用。巨大的經濟壓力迫使很多公司轉為使用跨平台框架。唯一拖後腿的地方在於,目前這些框架不如「原生」開發框架那麼棒。
但很多此類框架(尤其是 Facebook 的 React Native)距離這個目標已經非常非常近了。如果其中某個框架有幸佔據了足夠大的市場份額,那麼基本上 Android 就等於變成了開發者生態系統中的一環,並且是不再被 Google 控制的一環。
這似乎並不是什麼大不了的事情,因為 Google 依然控制著 Play Store、OEM 廠商以及技術授權之類的東西。對大部分人來說,他們也許很舒適地坐在駕駛位上,不過別忘了:如果所有移動開發者都開始使用某一個特定的跨平台框架 X,那麼基本上任何其他硬體/操作系統廠商或聯盟都會開始提出自己能直接兼容框架 X 的競爭性硬體/操作系統平台(例如,假設就說 Windows 吧),而所有應用都將能在這個平台上運行(也許啟動速度還能更快),這會將 Google 徹底淘汰。相信我,想做這種事的公司有很多。好吧,不該這樣說,並非所有公司都想。其實不管哪個公司,誰會不想呢?
面對這種情況,Google 的回應是繼續堅持自己的立場。他們開始加倍下注自己的「原生」(傳統)Android 編程,為 Kotlin 語言提供官方支持,對於原生 Android 程序員來說,這已經是一步很大的舉措了。我喜歡 Kotlin,它代表著 Java 的未來,但必須承認:它已經不是移動市場的未來方向了。
人們使用跨平台框架開發程序,主要出於兩大原因:首先,他們希望工作量不翻倍的情況下,就能讓自己的應用在兩個平台上運行;其次,由於 Android 原生編程至今依然讓人感覺痛苦,雖然有了 Kotlin,很多公司依然(無可非議地)認為應該徹底推翻原有的一切,換一種更簡單的方式從零開始。
如果你是 Android 或 iOS 開發者,並且花了一些時間嘗試過 React Native(Facebook 正是為了解決上述問題而發明了它),不到 30 秒你就會意識到,這果然是一種更好的方法,不過前提是你開發的不是遊戲,否則你可能更願意使用 Unity。
對於業務應用和生產力應用,React Native 提供了合理的性能、跨平台兼容性、極為方便的工具(最棒的工具來自微軟!上文剛提過他家的產品),以及大幅提高的開發速度。還記得上文說過的嗎,常規 Android 開發棧中,哪怕修改一行代碼,也要等 20 分鐘才能看到效果。諸如 Nest 或 Facebook 等最大型的應用中,這種問題已經司空見慣,對於中等規模的應用,通常等待 2-3 分鐘就夠了。但如果使用 React Native,立刻就能看到結果。更改代碼,改動立即生效。
夥計們,這就意味著產品發布速度可以提高 10 倍,產品上市速度可以變得更快,意味著你可以更好地發揮先行者優勢,意味著你會不斷地贏得競爭。放棄原生編程框架,轉為使用諸如 React Native 這種節奏更快地跨平台框架,這才是制勝之道。
我懷疑,在沒有證據的情況下,Google 的 Android 團隊並不能明確跨平台對他們而言是好是壞,但他們正傾向於認為是「壞」,否則他們就會為跨平台的 Flutter 提供更多支持。個人而言我覺得這對他們是有好處的,但我又懂啥呢。
無論如何,Google 目前正在努力改善原生體驗,試圖藉此維持自己的統治地位。原生開發體驗對諸如 Snapchat 以及 Instagram 這樣的大型應用會顯得最不友好,而 Google 的主要目標恰恰是改善大型應用的開發體驗,而這主要是由構建所需的時間決定的。
為此,Google 正在通過大量努力改善「官方」的 Android 應用程序構建系統,而這套系統自身是基於本就非常複雜的 Gradle 系統實現的,Google 只不過是在這基礎上塞入了一堆亂糟糟的 Android 規範。導致這個系統變得越來越複雜,以至於甚至構建工程師都無法完全理解其中的組件。構建類型(Build type)、產品風格(Product flavor)以及風格維度(Flavor dimension)之間有什麼區別?你猜!而 Google 還在不斷讓水變得更渾濁,因為他們覺得這些特徵對開發大型應用的大型公司很重要。
諷刺之處在於,大部分大型公司正在積極轉為使用 Facebook 的 Android 構建系統:Buck,Google 在這方面似乎已經陷入了死胡同。
儘管 Google 已經意識到問題所在,但他們下重注提出的解決方案卻沒人喜歡:原生開發棧,以及複雜程度進一步暴增的 Gradle 構建系統。開發者正在遠離,第三方技術棧正在攻城略地。
側翼襲擊
更糟的是,圍繞 Android 的襲擊不光發生在開發棧方面,他人還可以通過其他方式將 Android 從 Google 手中「盜走」。例如創建一個更成功的應用商店。Play Store 是 Google 對 Android 加以控制的主要方式之一,但在這方面已經產生了大量爭議(企業層面以及管控層面),因為 Android 據稱是一個開放的系統,但 Play Store 完全由 Google 控制。由微軟和 Twitter 支持的 Cyanogen 曾被視作推翻這一現狀的重大舉措,雖然由於內部權力爭鬥最終失敗,但也曾首次給予 Play Store 一記重拳。
另外也請猜猜看還有誰在應用商店方面下狠手了?沒錯:Jeff Bezos(譯註:Amazon 的 CEO)。Amazon 的應用商店已經發展得很好了,而 Amazon 與 Google 的每次面對面競爭中,長期來看 Amazon 的成績都很棒。當心啦!
如果這些還不足以讓 Google 開始擔心,那麼圍繞 Android 還有第三場襲擊,這場襲擊無異於在 Google 的傷口上撒鹽:在線廣告。Facebook 的 Android 應用已經變得無比龐大(數以百計的工程師多年辛苦工作的結果),以至於這個應用本身已經發展成為一個真正的平台,現在,企業可以直接將自己的廣告投放到 Facebook 應用中。例如紐約時報可以購買廣告位,而他們支付的費用將全部直接進入 Facebook 的口袋,一分錢都不會給 Google。你覺得 Google 對此會有何感受。
在中國,微信也在做著完全相同的事情。微信應用也已成為一個繁榮的平台,我們可以在此基礎上開發並部署其他應用(以及廣告),就好像這個應用內部就直接嵌入了一個完整的生態一樣。Facebook 和微信的移動應用已經成為了獨立的廣告發布渠道。
需要明確的是:Google 創造 Android 的唯一原因在於,對它而言 Android 是個廣告渠道。Google 是一家廣告公司,全球最大的廣告公司,而他們始終會面臨其他希望藉助 Google 之外的其他渠道,將廣告投放到用戶面前的企業無休止的攻擊。從財務角度來看,這與圍繞網路中立性的很多爭議幾乎如出一轍。電信運營商和 ISP 希望由他們提供你所看到的廣告,或者希望至少能從 Google 和 Facebook 的口中分一杯羹。
不管什麼時候,當你看到諸如 Facebook、Google、Amazon 或微軟這樣的公司突然很莫名其妙地開始涉足某個全新的、奇怪的業務領域,那麼你就可以確定:渠道爭奪戰又開動了。Google Chrome 是控制 Web 訪問的渠道戰產物;微軟的 Xbox 曾是對抗 PlayStation 的渠道戰產物,然而卻又威脅到了 PC 在家庭在線娛樂渠道中的地位;YouTube 曾是渠道戰的產物;Instagram 和 WhatsApp 也是類似產物;HBO/Amazon/Netflix 的內容戰爭實際上也都是渠道戰的產物。Amazon Echo 也是如此,每個人的家庭已成為當今渠道爭奪戰最大的戰場。對地方性的廣告公司來說,就算 Google Maps 也是渠道戰的產物。仔細看看,渠道無處不在。
底線在於,很多公司希望你能通過他們,而非別人的渠道欣賞自己喜歡的內容(書籍、電影、遊戲、Natalie Portman 的兩性專欄),這樣他們才能通過廣告獲得收益,或者最起碼也能通過你為所訂閱服務支付的費用獲益。
Android 可能是 Google 最重要的渠道,就算目前還不是,未來十年內肯定也會是。Google 無法承擔失去這個渠道的後果。但我們目前已知的,圍繞這個渠道已經在三個不同領域產生了至少三場多方配合的攻擊:開發者生態體系(以 React Native 為首的團伙)、應用商店(Amazon 的應用商店以及傳說中 Cyanogen 即將上線的商店),以及輕量級的應用內市場(目前以 Facebook 和微信為主攻)。截止目前,Google 對這三處攻擊的應對措施……額,姑且算是小有成果吧。但這只是暫時的。
所有這一切看起來都像是一系列沒什麼用處的誇張猜測(其實原本就是),但最終卻對 Grab 這樣的公司產生了切實影響,因為對於為自己的移動應用使用哪種技術棧,我們需要做出重要的決策,畢竟應用(具體來說其實是渠道)才是我們通向世界的窗口,對乘客、司機、商家、代理人員等無外乎於此。
如果你認為 Google 確實有可能失去對 Android 的控制權,哪怕只有一丟丟的風險,那麼最好選擇使用跨平台的框架,因為可移植性能夠為你提供必要的保護。而如果你(像 Grab 一樣)陷入了激烈的競爭態勢中並且需要加快產品的發布速度,那麼你可能至少要放棄 Android Native 方法。Android 依然在 Gradle 的道上悶頭朝前走,這條路怎麼走都不會快的,而這主要是因為 Android 在設計方面有很多嚴重,並且難以解決的遺留問題。
在眾多跨平台技術中,React Native 似乎將成為最後的贏家。它還吸引著廣大 Web 開發者,而他們可能是全世界最大的開發者群體,這一點毋庸置疑。Grab 最近也開始評估 React Native,我們想知道它能否實現自己的全部承諾,現階段我們的結論很樂觀。
距離 Grab 徹底放棄原生 Android 和 iOS 應用的那一天還很遠,因為移植工作需要花費不少時間。我們有 React Native 的工作,有 Android Kotlin 的工作,還有 iOS Swift 的工作,其實全球各地對這些工作崗位都還有著巨大的需求。如果你得不到老東家的賞識,不妨打量一下周圍的其他機會。過去三年來,這個領域發生的變動實在是太多了。
本文的中心思想可總結如下:和每個人一樣,Grab 也需要移動開發者,但很難招到理想的人員,因為 Android 編程實在是太煩人了,而且除了 Google 每個人都有類似的感受。因此目前整個生態中開始出現越來越多的競爭對手,他們都希望自己提出的方法最終將成為移動編程的唯一方法……而這也導致移動開發者更難招了,因為整個生態是如此的碎片化!
無論你傾向於哪種技術,現在都是成為移動開發者的最好時機。如果你還不是移動開發者,那麼應該考慮一下涉足這個領域體驗看看。你可以從後端體驗著手,隨後學習移動開發,進而讓自己成為「全棧開發者」,這可是一種更稀缺,也更有市場的獨角獸。
當然,現在也是通過競爭奪取 Android 控制權的好時機,如果你真想這樣做的話。正在做這事的公司可不少呢,鬼知道為什麼,就連 Google 內部的其他團隊也正在這樣做。越來越多的鯊魚正在登上 Android 這艘船,Google 需要小心了。
https://medium.com/@steve.yegge/who-will-steal-android-from-google-af3622b6252e
前端之巔
「前端之巔」是 InfoQ 旗下關注大前端技術的垂直社群。緊跟時代潮流,共享一線技術,歡迎關注。
活動推薦


※《中國古代婚姻》
※別天天瞎買,口紅辨別真假,千萬別花錢買假貨
TAG:全球大搜羅 |