[JSDC 2021] 從 React Native 跨屏開始的多領域開發歷程
投影片:https://revteltech.pse.is/jsdc2021-rn-sharing
議程共筆:https://hackmd.io/@JSDC-tw/2021conference/%2FHsWC5T1CQWWPzzK_H55w6A
學生時期就開始參加 open source 的各種大拜拜,還經歷過不需搶票就能進場 COSCUP 的年代 (似乎有點透露年齡 … XD)。工作後比較忙碌參加這些活動就變成偶爾中的偶爾了。
今年因緣際會受到 JSDC 邀請來做點分享,說真的以前從沒想過會有這種機會。抱持著事事都是學習的心就挑了個主題來講,主軸放在一些心得上的梳理。
算是蠻難得的經驗,也將內容稍微做個紀錄 :)
以跨領域開發來當成一個觀看的視角
工作以來涉足的範圍確實是蠻雜的。
除去職涯前幾年比較是鎖定在嵌入式系統之外,幾年來做了蠻多顧問及管理性質的工作。快速在多個 domian 內切換是常有的挑戰。
在這個情況下將視角拉高的不斷去比較每件工作、每個領域的議題可以容易找尋一些通則以及建立通用的世界觀。
畢竟如何避免燈下黑是永恆的挑戰。在這個快速變遷的時代,我們面對的往往不是找出盲點,更可怕的是對一整個維度丟失卻毫無知覺。
分享的技術範例 — React Native
React Native 在我的工程歷程扮演很重要的角色。從 0.26 版開始的血淚起點一直到後期穩定並變成自身及外部合作團隊的技術選型,很多時候的思考都是以此為坐標。
在前端越來越重要的時代,跨域時能碰到相佐的技術實在也是一種幸運。
設定節奏挑技術
大家是怎麼挑技術的?
真實世界的技術挑選就算能排除政治及慣性問題(這往往佔了九成),要做到起碼不算失敗的選型依舊是困難重重。但坊間也是 Medium-driven 選型的啦 … (看看文章就選了?
走過這一遭還繼續使用 RN 的理由大概過了幾個評估階段:
- 能用:實驗性質過重的技術長期未必適合量產環境
- 大公司能用:不要把 Google 的問題當成你的問題
- 自己能用:確保和自己的技能樹有關聯
- 團隊能用:確定這是團隊值得的發展路徑
- 協作方能用:確定能有效提升產值並避免技術衝突
設定好驗證的目標才能避免見樹不見林。
維持扁平結構為熟悉領域知識爭取時間空間
溝通常常才是開發中最大的挑戰。
把系統解構成小元件以及用組件組合代替全覆蓋描述似乎是某種政治正確。這裏比較想提的是用這種架構來爭取溝通空間。
其實系統的架構設計有多面向,但一個妥善(不一定是「好」)的設計也會具有組織及文化價值。扁平化的系統設計可以有效爭取餘裕來釐清未知。
還有個額外好處是扁平結構更有利於團隊養成及技術資產累積。在多領域開發總要思考切換能留下什麼,扁平化可以降低心智負擔且整理泛用邏輯。
最後,從軟體架構中去思考組織合作也是有趣的,比如您能從 Scale Cube (https://en.wikipedia.org/wiki/Scale_cube) 能看到什麼呢?而在 GatsbyJS 及 RN 等技術又代表什麼呢?
結合純軟領域的慣性做軟硬整合
軟硬整合是這十幾年的幾個科技熱點之一。
由於硬體思考方式跟軟體思考方式底色上略有不同(比如硬體相對較重垂直整合,而軟體更追求水平擴展及組合),而在產品設計上很多時候會以硬體為能力下限,且以軟體拓展上限。這種種使兩邊在合作時容易雞同鴨講。
將軟體測試的概念及方法論帶進軟硬整合開發會有很好的效果。過往我們將 RN 這邊常用的測試方法引入韌體及通訊部分的驗證,這使得團隊在協作上能夠更好的做資源整合並提升品質。
最後留個思考:如果我們想在硬體開發上做 DevOps 會有哪些作法呢?
為有源頭活水來的開源分享心態
基於 RN 我們可以將個體能力在一定限度上凝鍊在 js 領域。但在不斷切換領域中,要怎麼維持團隊的活性而避免在日常工作中消磨熱情呢?
在這點上,導入開源的心態為核心能很好解決這個問題。
軟體領域能夠看到很多「善」的力量。很多時候最新最好的東西往往都是開源,這都是來自於各方無私分享才能讓我輩能站在巨人肩膀做好的產出。
是以在公司治理上我們採取讓資深同仁領導方向,但定期以 bottom-up 方式讓第一線戰鬥同仁將看到的新東西以及嘗試導入。適當的時間再將軟體做開源,如 react-native-nfc-manager 及 ReactConf.TV。
說到底文化養成才是永續開發的核心議題。
結論:從大處看,從小處做;同中求異,異中求同
總結來講,不外乎就是「從大處看,從小處做;同中求異,異中求同」。
軟體開發是將真實世界的問題抽象到虛擬領域找尋解方,往往在 A 領域的問題在 B 領域已經被解決。這些跨域的整合才是整個故事中最有樂趣的地方!舉個例子來說,甜點電商的庫存管理與飯店訂房的管理接近,而與一般零售系統有點差距。
類似的案例還很多。
身為一個持續成長的工程師,保持正向心態來看待可能跨域挑戰會得到很多事前未曾預期的收穫!