天天看點

可算有人把 Flutter 企業級應用開發說清楚了

閑魚技術
可算有人把 Flutter 企業級應用開發說清楚了

閑魚在 2017 年便引入了 Flutter,是國内第一個引進Flutter的團隊。

當時的 Flutter 還遠未成熟,行業内也沒有把 Flutter 放入已有工程體系進行開發的先例。

這兩年,Flutter 也逐漸在其他企業裡落地,但同時也不斷有質疑的聲音發出。甚至有傳言表示“閑魚的新業務已經放棄 Flutter”、“相信閑魚遇到了很大的難題”......

那麼,作為 Flutter 先驅和探路者,閑魚在過去幾年的摸索過程中遇到過什麼阻力?踩過什麼“坑”?對于相關技術開源的态度是怎樣的?對于以上的一些傳言又是怎麼看待的呢?

針對這些疑問,閑魚代表團隊分享了一些開發者背後不為人知的小故事。希望能讓大家從背後人的次元去看閑魚團隊,了解他們的初心,以及這個過程中遇到的挑戰、掙紮、付出的努力、得到的教訓。

1. 在新技術落地過程中,遇到過什麼阻力,有什麼避免“踩坑”的經驗?

閑魚從2017 年開始接觸Flutter,最初是一個自上而下的嘗試。

一方面,從創新團隊的角度來看,需要以戰養戰,為團隊儲備更多的人才;另一方面,希望切實解決當時團隊人難招、産能低的問題。

在前期的調研過程中,最初是希望将Flutter 作為閑魚國際化版本的主要技術選型;由于後續業務上的決策,導緻該項目夭折,是以希望将Flutter 引入主App 中進行探索。

在嘗試之初,從組織、配套工具,到架構側都沒有準備得特别好,項目落地面臨很多困難。在團隊抽調的突擊小組中,有大量的研發人員非常不看好這項技術,大部分研發人員并不認同Flutter,沒人知道這件事情該怎麼做。

當然,從2017 年開始,閑魚在多個技術方向都進行了類似的嘗試,實踐證明,創新的确比想象難得多。

時間來到2020 年,回首過去嘗試的多個方向,目前隻有Flutter 得到了階段性的勝利,并作為閑魚的技術品牌為大家廣泛熟知。這裡面所經曆的艱難險阻隻有當時參與過從0 到1 過程的研發人員才能體會。

由于Flutter 落地過程的艱辛,其間也有不少同僚離開了閑魚,幸好後續有更多希望這件事情成功的研發人員加入,大家一起努力至今,才有了今天看到的成果。我們也非常感謝在此過程中付出過努力的每一位同僚,不管今天他們是否還在閑魚,是每一位同僚的努力讓美好終于發生。

從Flutter 落地的過程中總結出以下觀點,供大家參考。

從布道者的角度來看,需解決以下兩方面的問題:向上,需要得到更多決策者的支援;向下,需要減少開發者進入的成本。

關于決策者鍊路,Flutter 在閑魚落地的過程中沒有上層的阻力,因為開始是一個自上而下的決策,但在後續的推廣和落地過程中,從更大的組織視角去看,比如建構AliFlutter 組織、建構Flutter China 組織,這些是一個自下而上的行為。

在這個過程中,閑魚選擇的是“農村包圍城市”的理念。先從社群出發,發現同路人,找到不同公司、不同業務的價值,再回歸内部,影響決策者。前期不管是建構集團Flutter 的興趣小組,還是正式有了AliFlutter 的虛拟組織,都是找到同路人,探讨和争論其技術價值的過程,這個過程可以請各團隊的關鍵決策者躬身入局。通過讨論又能幫助團隊進行更深入的思考,并為Flutter 提供一個階段性的明确定位——面向研發效能提升,建構新的研發模式,快速支援小前台業務落地。将該目标與阿裡巴巴集團大的研發效能目标進行連接配接和推動,即可順利地推進該項目。

關于開發者成本,首先是自己團隊的開發者成本。在任何新技術落地的前期,都有一定的成本,需要度過這個階段才能得到收益。是以,在開始階段,必須盡量降低落地成本。

在項目之初,最好以小規模團隊的形式進行嘗試,同時新技術在前期架構落地中需要重點考慮過渡階段的效率問題,不要斷崖式地遷移。閑魚在初期沒有充分考慮這個問題,導緻工程側開始的架構并不合理。後來,閑魚重點圍繞混合架構,以Flutter 開發小組與原生開發小組的協作模式進行設計和落地後,該問題得到了有效解決。

例如,前期閑魚就重點解決了原生項目無法獨立打包的問題,極大地解決了當時研發效率的阻塞問題。混合棧(Flutter Boost)的重新設計,也解決了當時由于Flutter和原生生命周期不一緻帶來的一系列複雜問題,保證了開發調試的穩定性。如果團隊仍有餘力,可以考慮對開源社群進行一些力所能及的輸出。閑魚先通過釋出文章,再通過部分開源項目以及内部開源的形式,給Flutter 社群和阿裡巴巴集團提供了一些幫助。閑魚相信“日拱一卒,功不唐捐”,雖然依然還有很多問題需要解決,但是随着更多開發者的進入,大量的問題終究會被解決。

2. 閑魚對開源項目的态度是什麼?未來會把大量文章中提到的技術開源出來嗎?

閑魚在2018 年完成Flutter 主鍊路的部分改造後,發現在落地過程中有很多問題,而且Flutter 社群并沒有給出很好的解決方案。

從幫助Flutter 社群其他開發者的角度出發,閑魚内部開始讨論開源事宜,這是閑魚第一次嘗試開源,所有人都沒有經驗。大家開開心心地希望能将自己做的一些事情同社群進行交流。

當然,作為第一次開源,很多事情做得也非常糟糕,糟糕的文檔、糟糕的Demo、沒有測試用例、問題維護不及時、沒有好的社群共建方式,于是引發了社群開發者的大量抱怨。

從自己真實的感受來說,要維護好社群項目,需要付出大量的精力和時間,這些甚至需要不少同僚全職去做,這對一個業務團隊來說有些勉為其難。

對開源的反思是要敬畏開源,敬畏社群,在回報中不斷地成長,完善自身項目。例如,Flutter Boost 前期的設計在相容性上侵入性太強,導緻後續的更新成本較高。在未來的3.0 版本中,閑魚會主動解決這一問題,減少關鍵的幾個類的繼承和重寫,簡化概念,降低接入成本。

目前,這個階段會重點關注已經開源的項目,尤其是Flutter Boost 這種在阿裡巴巴集團内外都屬于開發者剛需的項目,需要持續地維護,也非常歡迎更多的社群開發者參與進來。

關于文章中提到的其他Flutter 相關技術,閑魚會盡量考慮使用Demo 等形式将部分原理輸出,幫助開發者更好地了解文章及其背後的思想。

一方面保證了閑魚對Flutter 社群的啟發和幫助,一方面也緩解了閑魚目前面臨的無法保證全職人員從事開源工作的問題。但不論如何,閑魚希望通過文章及代碼,持續地幫助Flutter 社群,盡我們的一份綿薄之力。

也許我們做得并不完美,甚至不夠優秀,但随着閑魚有更多優秀研發人員的加入,在創新和分享文化方面進行不斷的自我革新,相信總有一天能伴随這項技術成為真正的國民級别應用的貢獻者。

3. 聽說閑魚放棄了Flutter,作為當事人,閑魚的态度是什麼?

在各類社交平台匿名區和公衆号中,都有人階段性地、煞有介事地散播閑魚放棄了Flutter 以及未來不會再投入的消息,作為當事人,我先說結論——這些都是謠言!

《Flutter企業級開發應用實戰:閑魚技術演進與創新》一書的出版是對這些謠言最有力的反駁,也感謝出版社幫我們辟謠。

移動網際網路發展的十年, 對于跨平台技術來說, 從最早的PhoneGap 到ReactNative、Weex,再到目前的Flutter,形形色色的技術不斷疊代和演進。

從目前階段來看,Flutter 具備跨平台技術的先驅——QT 的大部分優勢,且配套了更現代的語言、更合理的分層架構,并有Google 公司支援,是新一代跨平台技術的集大成者。

在下一個十年,面向萬物互聯的新作業系統,如華為鴻蒙及Google Fuchsia 的出現,使得跨平台技術的價值進一步凸顯。

是以,學習這項開源技術對未來的開發者來說是一個不錯的選擇。我們無法預測Flutter 是否一定為下一個十年的主流技術,但這套代碼和其背後的思想一定能給未來的開發者以啟發,就像我們的前輩用QT 開發了KDE,KDE 又提供了一個排版引擎KHTML,而蘋果公司Fork 了這個項目,進而産生了WebKit,而Google 又Fork 了WebKit,進而産生了Blink。

這些令人尊敬的公司和開發者站在巨人的肩膀上不斷地努力,最終打造了令人耳熟能詳的技術,進而改變世界。

今天,Flutter 代碼中有很多概念也存在浏覽器核心的一些影子。作為用戶端的從業者,希望開發者都能客觀地評價這些技術,根據實際情況進行學習并将其落地。

對于外界傳出的類似閑魚放棄Flutter 的謠言,大部分時間我們選擇付之一笑。

作為管理者,我不太希望團隊過于關注外部的評價和過度回應不實傳聞,希望閑魚的開發者可以做正确的事情,并保持長期的耐心。

未來的三年,閑魚更希望探索先進的研發模式,幫助整個阿裡巴巴集團在商業競争中保持技術的先進性和成本優勢。當然,我們希望這種研發模式是基于我們現有的技術沉澱基礎之上的,是以會依然持續地投入Flutter 之中。

同時,作為一個創新團隊,閑魚也一定會持續地關注行業的最新動态,未來也一定會像在Flutter 領域一樣,在其他領域有所建樹。

可算有人把 Flutter 企業級應用開發說清楚了

繼續閱讀