掘金 AMA - 聽閒魚客戶端架構師宗心談 Flutter 和他的團隊

清蒸不是水煮發表於2018-07-22

一週前的 沸點,掘金團隊請來了閒魚技術團隊 Leader、閒魚客戶端架構師、Flutter 佈道者的作者 @宗心 (於佳) 做了為期三天的 Ask Me Anything (AMA) 活動。我們在此精選了一些來自使用者的提問及宗心的回答。

關於宗心:

掘金 AMA:@宗心(於佳)

社群小夥伴提問

如何看待目前大前端這個概念? ─ @一縷殤流化隱半邊冰霜

想問宗心兩個問題:

  1. 如何看待目前大前端這個概念的,大前端之所以為大,是因為涉及的面比較廣,那前端的邊界在哪裡呢?前後端以 Nginx 為界麼?那前端在 Nginx 之前的所有事情都可以做麼?在我們這邊還是有大前端的概念,我們大前端甚至也會接觸到後端 mysql 這些。不過我看在阿里集團內部,這個概念好像並沒有,內部好像是客戶端終端團隊,前端團隊。

  2. 我之所以會問前一個問題,其實是因為在大前端的概念裡,不管是前端的 leader 想帶領好客戶端同學往前進,還是客戶端的 leader 想帶領好前端的同學往前進,都是挺不容易的,雖然兩者有結合點,但是在縱深方向兩者差異挺大的。阿里內部是如何處理好這種問題的呢?

1.我其實覺得工種的細分,一定還是有原因的,所以其實針對大前端的概念,一方面我希望客戶端的同學能擁有部分前端的知識,擴充套件自己的邊界,另一方面,我很敬畏這件事情,曾經我以為我的團隊特別優秀,一個月就可以全團隊切換到weex,而且還能保證大專案的落地,但在後續的過程中隨著對知識體系的深入瞭解,我發現,很多事情我們在短期內是無法搞定的,比如我們不擅長玩法和運營活動相關的事情,而且我們在weex的程式碼規範和工具體系建設上,實話說還是需要我們的前端團隊以及我們自己的weex專家來幫助。所以我覺得尤其在大公司,要保證某些場景下的專精的情況下,分工依然在。這也是為什麼公司沒說大家都走全棧的原因。但大家可以在各自棧的場景下多走一步,多創造一些可能性,比如客戶端會了weex可以在部分產品上使用該技術,比如店鋪,比如閒魚號,另外客戶端同學能不能學點AI相關的東西呢,在端側把tf-lite的工程體系用起來。總之,我希望的大前端概念上,應該有一定的跨棧能力,但不用做到都非常專精,依然還是在自己的領域有自己的專長。

2.對於leader來講,在不停承擔責任的同時,這個問題一定都會出現,試想我之前只做iOS帶iOS團隊,後來帶android,我android勉強還可以吧,再做flutter要學flutter,再如果讓我帶服務端呢?我還是要會,但作為TL,我需不需要都是團隊第一,我覺得不是,否則你帶的團隊一定很菜,所有人都不如你,那你就是團隊的天花板,所以TL在技術上我來看,要有自己的專業度和方法論。再有就是業務TL一定要有廣度,我的老闆服務端出身,做客戶端他肯定做不過我,但他的廣度上面,他看業務的角度以及破局的能力,老實說高我好幾個段位,那這就是他給予團隊的獨特性,所以我覺得如果今後我要做一個好的TL,我也需要補充這些內容,而深度的話,我覺得會能找到更多比我更專業的同學,一起做的更好。TL最重要的作用,是他有沒有給公司帶來一支有想象力的團隊,這個應該就是阿里對TL的要求,聚人成事,借事修人

在面大廠的時候,簡歷、面試該關注哪些點?或者說,你招人的時候看中候選人的什麼特性呢? ─ @永遠的根號三

你好,我本科讀的機械專業轉的安卓開發,現在在一個不到 20 人的初創小公司,請問像我這種非科班出身的程式設計師,在面大廠的時候,簡歷、面試該關注哪些點呢?或者換句話,你們找人的時候看中候選人的什麼特性呢?學歷我也是 985 的只是非計算機專業出身

你好,我相信這個也是很多同學關心的問題,校招的同學如果有問題我單獨再講,社招的同學,除了經驗和技能上的要求以外,我想突出說兩點,一個是希望在做事情的時候有自己的思考和總結,比如你做的專案,好在哪裡,有什麼問題,後續要怎麼解決,度量標準是什麼,這個很重要,我們希望這個同學是不斷思考持續進步的,送大家一句話,if you cannot measure it,how to improve it。第二點,好奇心,除了你本職工作以外,想不想了解你上下游的同學在做什麼,這個業務整體架構是什麼,你們公司在端側核心競爭力的那些程式碼是怎麼實現的,為什麼這麼做,業內流行趨勢是什麼,有沒有嘗試過,怎麼看這些技術的未來。我在面試每位同學的時候,打心裡希望大家都能過,因為我們真的非常缺人,但可能很多同學在工作以後,沒有以上兩點意識,造成後續的積累就會比較慢,這裡講給你,也希望能幫助更多同學成就更好的自己,找到好工作。

基於什麼樣的考慮選擇在閒魚客戶端中使用 Flutter ?─ @liutao

你好,新技術剛釋出的時候,通常都有很多未知的坑要去填,風險比較大,所以很多技術團隊都不會第一時間去選擇新技術來開發業務,請問你和團隊當時是基於什麼考慮選擇在閒魚客戶端中使用 Flutter ?

講一下心路歷程,確切的說我們是在去年flutter還在alpha版本的時候就已經跟進了,開始的時候更多的是做預研部分的事情,比如做了一個內部國際版的閒魚,完全基於flutter的,整個工具鏈和flutter的內部原理我們都趟過一遍,在我看來flutter的設計思想比較先進,在ui的相容性以及效能上,較其他的跨平臺框架是有較大優勢的,加上我們跟google的flutter團隊建立了長期的完善的交流機制,為後續的落地打下了比較堅實的基礎,另外,我在flutter上看到了未來跨終端上友好的擴充套件性,據我所知google團隊已經完成了flutter在mac上的demo,後續是否可以在其他桌面作業系統和iot裝置上應用,讓我們拭目以待。我們在一年的調研沉澱以後,基於上述的原因,選擇了flutter在閒魚業務線的嘗試和落地,目前看起來,會有少部分相容性問題,但整體來看,距離大面積商業應用已經比較近了。

請閒魚使用 Flutter 開發時,移動客戶端的分工是怎樣的 ?─ @NeXT

請閒魚使用 Flutter 開發時,移動客戶端的分工是怎樣的?會有專人進行 Flutter 的開發還是 Android 和 iOS 都要參與到 Flutter 的開發和學習中?會考慮更大範圍使用 Flutter 嗎?

很好的問題,閒魚在使用過程中,採取了混合工程的場景,所以確實是有專人寫flutter,部分同學仍然開發native的程式碼的,所以這個過程中,如果希望平滑的做技術棧的切換,我們在工程改造上做了很大的努力,研發模式上,我們針對native和flutter的同學有兩種開發模式,比較好切換,對native同學來說,是感知不知道flutter存在的,當然,未來我們希望在業務程式碼測逐漸切換成flutter。

為何阿里一直在基於其他技術做改造 ?─ 令狐洋蔥

為何阿里產出不了類似react, webpack, babel, flutter等框架/工具,一直在基於其他技術做改造 ?

我跟google團隊接觸的過程中,確實能看到,跟世界最頂端的公司相比,我們的技術水平上確實還是有一定的差距,我覺得沒什麼,正視差距跟優秀的團隊看齊,繼續努力學習他們的優勢,把他們的優勢帶回來,另外,公司在工程化和技術的商業化上,我覺得做的挺好,只要能產生商業價值,基於這些現有的架構體系改造是最快的。

淘寶為啥不把首頁改為flutter ?─ @快樂有家

問個無關的問題。很多人都已經把淘寶作為新時代的跑分軟體了,卡的死人的淘寶為啥不把首頁改為flutter ?

淘寶首頁其實使用了另一種模版引擎的技術叫dynamic,是我的其他同事做的,相比weex來講,主要負責模版的渲染,會更輕量一些,如果考慮首頁的方案,建議也可以去看下天貓的同學的Tangram的方案,是比較完善的。我看來現階段flutter的初次載入,其實也比較慢一些,可能還達不到首頁的載入效果,我們正在考慮優化這個載入過程。

怎麼在flutter裡處理h5連結跳轉,flutter和native間的資料傳遞和狀態儲存怎麼管理 ?─ @不萬能的喜劇6

一般用flutter結合native去寫的時候,怎麼在flutter裡面處理h5連結跳轉,flutter和native之間的資料傳遞和狀態儲存又是怎麼管理的呢?

1.第一個問題,我這邊的場景會有一個統一的openurl方法,在native側,native呼叫大家應該都很清楚,flutter的呼叫的話,寫一個plugin,呼叫dart的openurl方法通過channel機制轉到native的openurl統一處理即可,剩下的不管是什麼連結,都跟native的處理方式是一樣的。

2.第二個問題的資料傳遞和狀態儲存是個難點,因為flultter對native的資料傳遞都是copy生成一份的,所以native和flutter的狀態就是兩份,不同步的,目前如果有變更我們主要還是採取通知的方式,但處理起來還是有點不優雅,有更好的方案可以跟我們交流哈,我自己的希望是,可能後續都存在一邊會比較好,不管是flutter還是native,理論上來講可能是flutter,因為後續希望把剩餘的native程式碼遷走。

一般19屆的進去,需要什麼樣的條件呢 ?─ @山鬼

19屆的同學看你投遞的崗位哈,我目前也在負責閒魚的校招,對大部分同學來說,建議投遞工程相關的崗位,比如java研發,客戶端開發等,要求一般是三點:1.基礎,要求重點學科優秀,對資料結構/演算法/作業系統原理/計算機網路等掌握紮實,或在某個領域有特別的特長 2.熱情,瞭解目前廣泛應用的技術,有自己的學習技術的路徑,對某一領域有自己的強烈好奇心,並願意額外投入很多精力,並最終能取得好的結果3.成果,這個主要指專注於某一個領域,深入瞭解了技術在實際場景的應用,可以通過自己專注的領域去解決實際問題,或者有重要學術論文和專利。

滿足兩條的同學是最低要求,滿足三條的同學一般比較合適。希望能幫到你。

如何管理一個技術團隊?在團隊管理上你踩過那些坑 ?─ @一百一

宗心大佬我想問下,你們技術團隊現在有多少人?如何管理一個技術團隊?在團隊管理上你踩過那些坑?

我們大技術團隊大概70多人吧,還屬於一個比較小的團隊,當然我們希望能在今年招到更多優秀的同學做同事,我的目前團隊大概不到20名同學,都是我招進來的。

我覺得技術團隊的管理相對簡單一些,比較重要的其實是要關注大家的成長,自己需要在大的框架目標確定後,在過程中放權和訓練團隊的思考能力,讓團隊同學在重要的事情上面形成自己的判斷和決定,引導他們思考,而不是直接給他們結論,其實總結起來也很簡單,就是一切都是以團隊同學的成長為出發點思考,並不斷溝通和對焦,懷著對大家負責的心,應該就能做好。

踩坑上面,我覺得我犯得比較大的錯誤是我剛帶團隊那會兒,自己是p7,團隊大部分同學是p5和p6,招進來新同學的時候,發現很多事情他們做不了,所以自己主動就把大的架構升級改造的遷移全部自己做了,也承擔了很多業務,但最後的結果就是,新的同學其實在試用期並沒有承擔很大的壓力,也沒有獲得快速的成長,後續的過程中,表現的就比較不好,這個結果我一直都覺得對兩位同學有所內疚,我覺得如果當時對他們要求高一些,而不是當老母雞一樣護著他們,他們也許會有更好的發展,老母雞是帶不出雄鷹的,所以自己後續有了改變,知道TL更多是做引導和訓練,而不是直接給結論,而且你要允許下屬在一定時間段內產能不如你,學會放手,下屬的成長就是要主管給予指導和放權。

我去年自己也會看一些課程,推薦得到上的寧向東老師的清華管理學課,非常贊。不但對一線TL管用,對公司的中高層同樣管用,後面課程裡的戰略地圖等都是很有效的方法。

閒魚招 iOS 嗎?具體的崗位要求是怎麼樣的呢 ?─ @周熵

大佬好,我最近在找 iOS 的工作,方便的話可以分享下你之前面試的時候提的面試題嗎?以及閒魚招 iOS 嗎?具體的崗位要求是怎麼樣的呢?

我自己在阿里內部整理過比較多iOS的面試題,但後續隨著時間推移,一個是知識已經比較過時了,另一個自己在招聘上對人的思考也有提升,可能我覺得面試題本身不太適合找到合適的人,所以更多是從人本身的特質上去看一個人是什麼樣子的。

我們有閒魚的崗位JD,裡面描述了一些知識層面的基本要求,崗位要求

我這裡補一些閒魚或者說阿里在這上面的軟性的要求

我可以說下閒魚希望iOS開發是什麼樣子的 1.基礎好,基本上iOS的一些基礎的知識體系要知道,但可能我不會直接就問你題目,我希望你能在自己做的專案或者實踐中有體現,比如我問記憶體管理相關的知識,如果你只知道它的原理,但根本沒用到過,我覺得基本上也是屬於死記硬背型的,沒有專案或者技術方案落地的基礎知識,我覺得可能只能對工作2年內的同學是work的,再工作久一些的我覺得就不行了。 2.有好奇心的,關注最近產出的新技術,不管是wwdc也好,還是github上的重點專案,並關注它的一些原理性的東西,這是很好的習慣,但我希望可以再進一步,將你關注的這些內容落地,比如我覺得現在大部分的iOS開發應該都瞭解一些RN和weex的知識,那原理是什麼,有沒有做過擴充套件,有沒有踩過什麼坑,能答上來有一些不一樣的思考我就覺得很棒。3.精益求精,這點特別體現在效能和穩定性上,這裡既可以考知識體系的基礎,也可以考知識體系的系統性,專業性。比如每個人看待效能優化都是不一樣的,你的整體解決方案是什麼,哪一部分是你優化的重點,效果如何度量,你的方法能不能沉澱作為基礎設施,都是很重要的。這裡其實能看出P6/P7/P8在上面的區別。

所以我希望能找到的同學是--基礎好/好奇心驅動/有匠心/理論結合實際有結果 這樣的一個人。

請問,閒魚App中有哪些地方使用RN,你怎樣看待最近Airbnb和Udacity都相繼放棄了RN ?─ @zyf在掘金

閒魚app裡沒有使用RN,但有不少頁面使用Weex,在我看來,不管是Weex還是RN,我們去看成本1.前端體系的學習成本 2.debug和相容性的成本 3.基礎設施建設的成本 這三個成本是逃不過的,所以如果覺得這三個成本大於你的收益,建議不要用。而對於閒魚來說 1.我團隊有專門的weex專家帶一些有前端知識體系的同學 2.基礎設施有阿里巴巴集團的基礎設施做基礎,自己需要再建設的不多。 這兩個其實已經決定了我們在使用過程中成本沒有那麼高,目前最高的可能就是debug成本和相容性問題了,暫時是可以接受的。再說收益1.我們有一套從sketch到程式碼的生成工具,所以UI還原部分,我們基於此少寫了很多程式碼2.三端一致性,在部分業務上確實帶來了好處,尤其閒魚要在外部多端進行投放,不管是手淘還是外部投放,我就寫一份程式碼,相比來說成本肯定要低一些,所以這個要看場景3.作為前端使用,效能上比h5還是會好很多,前端使用過程中也有一些收益。 均衡來看,我們還是在對應的場景下會持續使用下去。

這裡延伸一下flutter,成本可能會是1.flutter的學習成本2.debug體系和工程體系的成本3.基礎設施的成本 這裡沒提到相容性,因為從UI還原的角度上來,flutter的相容性肯定還是好於weex,至少兩端的一致性是比較強的。我們看怎麼解這個問題1.學習成本上dart比較接近java非常好學,基本上看一遍就會了,工具體系也像java,團隊有成熟的android同學完全可以cover 2.debug體系和工程體系成本,確實是一個成本,目前在逐步解決,但怎麼說,IDE開發flutter的時候,還是相對更接近客戶端的開發體驗3.基礎設施的成本,確實也有,所以我們現在考慮,怎麼後續通過建立一套基礎設施能支援flutter/weex/h5/native等多個體系,也就是說,通過架構統一底層能力,而不用重複建設。我們再看收益1.同樣我們有sketchToFlutter的工具,部分程式碼也可以不用寫了,雖然還有一些bug,後續會持續做優化2.雙端一致性,效率翻倍,這個過程前期只要相容性問題我們做好,後期應該不太會有相容性問題 3.高效能,整個flutter的效能是非常好的,native的效能表現

這麼看來,對native側的需求來說,flutter是另一個比較好的選擇。


本期 AMA 社群小夥伴提了許多實用問題,同樣感謝宗心認真地為掘金小夥伴解答了不少疑問。瀏覽更多的問答,可以到宗心的 AMA 進行閱讀和討論。


下期預告

下期 AMA 嘉賓為騰訊 NOW 直播技術團隊的 Rand,大家記得準備好問題喲~ 下期 AMA 結束,嘉賓將會指定一名他覺得提出好問題的小夥伴贈送一本書籍 《碼農翻身》,同樣的,官方會根據誰的提問獲得最多點贊贈送他一本《碼農翻身》喲~ 下期 AMA:2018.07.25 - 2018.07.27 見

相關文章