漫淡終端技術未來
前言
在終端發展的歷史看,終端裝置早已不再是單一的計算機,互動方式早已不再是單一的鍵盤滑鼠,但無論是怎樣變化,歸根結底不變的是人與端兩個角色的互動。
我在資料領域深根多年,看到資料在幕後不斷改變人類的生活,但終將與終端結合到一起。我從最具象的終端入口開始,講到終端的軟體互動,最後講資料時代的終端變革。講講最近的思考和一些淺見。
始於平臺之爭

虛擬世界,不存在於現實世界,由人類在裝置上構建而成。從人類所在的現實世界會經過終端所在的硬體平臺,硬體平臺承載的系統平臺,系統平臺承載的軟體平臺。
終端技術從廣義上說包括了從硬體到軟體所涉及到的平臺,狹義上只包括軟體平臺,而硬體與系統的發展直接影響了技術的發展,可以說終端技術始終面向下一代裝置。從上世紀 90 年代的桌面端時代,到今天蓬勃發展的物聯網時代,商業競爭的背後也是技術必爭之地。
早在上世紀 90 年代,桌面端技術架構為 C/S 架構,GUI 類庫在不同平臺下各不相同。在 windows 下,主流的是以 C++ 為基礎的 MFC,Mac 下有以 Object-C 為基礎的 Cocoa,很長時間都以體驗和效果壓過 windows,但市場佔有率 windows 平臺遠超 Mac 平臺。之後,window 平臺由 MFC 演進到 WPF 和 UWP,效果上已經與 Mac 平臺不相上下。真正要考慮相容各平臺這件事,Qt 佔據重要的地位,也是 Linux 的主選。在桌面端時代主流的做法還是獨佔式開發,相容性一般考慮在嵌入式等專業領域。
進入網際網路時代技術架構為 B/S 架構,瀏覽器成為新戰場。早期 windows 沒有利用 IE 一統網際網路為 Google 崛起埋下伏筆。和桌面端同樣,各瀏覽器競爭下,同樣的 Web 標準在不同瀏覽器下都有差異。與桌面端時代不同的是,瀏覽器相容性一開始就被提到高要求,成為早期的前端工程師重要的技能。
在瀏覽器戰場下,另一個版本相容性問題常被提起。從體驗的角度,相容性隨著版本的推進,是向下相容與研發成本的博弈。今天不論是瀏覽器還是客戶端都有多版本相容的方式,但根據市場的情況,平臺和應用都有權考慮是否降級。

隨移動裝置普及,硬體和頻寬成本降低,進入移動網際網路時代,不變的依然是激烈的平臺之爭。Google 和 Apple 兩家已然獨霸天下。為解決研發效率問題,相容跨平臺方案層出不窮,從以 WebView 為容器方案開始,發展今天 Native 自建容器方案誕生,經過了不少的嘗試,但沒有一種方案佔絕對優勢,高效能和低成本是永恆的技術目標。

在移動應用下,小程式這種新形態在近兩年萌生,它將移動應用作為平臺,借應用本身實現了跨平臺和沙箱能力,而標準,介面都是由 App 來定義,更能透出 App 本身的服務。小程式作為移動應用平臺化的產物,實質是商業模式的舊瓶裝新酒,早在桌面端時代這種模式已非常常見。在可期的未來網際網路巨頭會紛紛收攏移動入口,形成各自特色的生態。總之,商業上平臺化帶給終端跨平臺更高成本的現狀。

今天再回頭看桌面端,網際網路高速發展也改變了桌面端跨平臺方案,如 Electron,它的 GUI 核心來自於 Chromium 並結合了 Node.js 操作檔案系統和網路。再是 Desktop PWA 方案浮出水面,它是更貼近於用瀏覽器完成桌面端程式的方案。
看到未來,物聯網時代春天已來,Google 和 Apple 紛紛拿出了自己的佈局。此外,核心業務在硬體和軟體的廠商在新浪潮中也紛紛開發了各自系統,歷史在重演。掌握了入口即掌握了未來。
跨平臺還是獨佔,是商業策略,產品功能,技術成本共同決定的。網際網路產品將跨平臺作為基本選項,一套程式碼到處執行,並接近原生體驗和效能是一直以來的目標。

從技術上,可期待有幾種靜態型別 (Static Typing) 語言流行起來,像 Kotlin,Dart,Reason,TypeScript,Rust 等已經進入開發者世界。它們兼顧著開發和線上體驗,並能轉譯到不同的原生語言適配到多端,背後的巨頭們摩拳擦掌著佈局著未來語言。
另外,終端語言與服務端語言的越來越趨向。在桌面端過去就是如此,但瀏覽器端並沒有做到,直到 Node 開始流行,近年 WebAssembly 則帶來進一步的想象力,像底層用 C,邏輯層設計與語言無關,可以實現混合程式設計的模式應用在不少桌面端架構。
商業硝煙四起,背後的技術爭鬥同樣激烈,平臺渲染引擎以及跨平臺語言的設計都是永恆逐鹿之地。
互動革命與應用架構
平臺上層即是直面使用者的互動介面。平臺進化的同時,互動介面也在不斷進化。

過去,桌面端存在於 PC 這種專用裝置上,人與之互動的方式主要通過鍵盤,滑鼠和螢幕。到網際網路時代,PC 裝置輕量化到手持裝置,它弱化了滑鼠和鍵盤,增強了與螢幕的直接接觸,人與之互動的方式更貼近了現實。到未來,物聯網時代,已不拘泥於專用裝置,我們生活著的物品背後都有虛擬介面連線虛擬世界,我們坐在車裡,走在路上,看到的,碰到的都是數字媒介,真正地與世界萬物交流。

這樣變化的過程,即是真實的感官感受與虛擬世界的連線感受的契合程度,也是終端始終在追求的目標。因此,不論是使用者型產品還是專業型產品,第一是視覺呈現的真實性,對圖形渲染技術要求越來越高,第二是對硬體互動介面的標準化訴求越來越高。不論是圖形還是硬體,都會真正混入到語言,框架中運用。但互動始終還是人類與機器之間的互動。我們程式所面對的永遠是人觸發動作,程式作出反饋,最後機器反饋到介面的過程。
我們以介面互動為例,談論下介面架構的抽象。無論什麼介面,展現的是檢視元素,執行狀態像程序一樣控制著檢視元素的變化。這裡的執行狀態,可能是應用配置,服務端請求,快取,檢視事件等。在程式系統架構上,對於狀態是否內聚到介面中,分為面向元件模型和麵向領域模型兩種。

面向元件模型表現為狀態內聚到元件中,整個架構為元件構成的樹。元件必須保持輸入和輸出的穩定,邏輯上副作用同樣內聚在元件中。任何一個元件關聯子元件都可以獨立執行。以此,整體架構體系呈現分形態。
到底是不是有多少狀態的操作,不同應用差距是非常大的,但任何應用的基本組成就是元件化,因此,元件本身與外部互動的介面一定需要保持穩定態,對於元件來說,狀態是內聚的,需要外部響應會提供介面。

面向領域模型表現為分層架構,一般需要區分檢視層,服務層和模型層,檢視層處理檢視更新的邏輯,服務層處理狀態變更的邏輯,到模型層變更相應的狀態到檢視層。這裡有許多經典的架構,如 MVP,MVVM 等,廣泛用於客戶端或前端應用研發。
檢視層與模型層之間有兩種通知更新的方式,命令式與響應式,前者檢視需要程式指令來更新,後者狀態源更新就會觸發對應的檢視更新。其中,響應式更貼近人機互動觸發與反饋過程。一直以來,Event 模型就是一種響應式的表達,但 Event 模型並未處理狀態之間可能的操作,比如互相合並,競態,延遲等。現在 Stream 方案則結合了響應式與函式式來處理各種狀態在時間序列上的更新。
面向領域模型與服務端架構領域模型非常相似,但服務端的檢視層只是靜態模板,業務與業務之間通過遠端服務呼叫去耦合,達到服務複用能力。終端應用架構關注的重點主要在檢視的複用的矛盾上。分形架構顯然比非分形的更具備複用性。對於一個介面程式來說,把每一層 (View, Service, State) 都轉換成觀察源,定義結合在一起,架構是分形的。完善的複用設計不論是哪種架構都是框架實現的重點,理論上,符合代數系統的架構是理想的複用態。

框架之上是真實世界,一套元件系統對應到設計層面是一種設計語言,如 Material Design,Flat Design 等,它是不斷髮展的美學和對世界的理解。另一套是面向工程師的工程體系,管理了終端工程的全鏈路研發上線的流程。
資料驅動產品體驗

互動的表達的由產品承載,由平臺提供能力,產品是今天線上商業的主戰場。產品的表現從裝置、系統與軟體透出的是使用者使用的明線,而產品的發展與運營則是由資料驅動的兩條暗線,一方面從虛擬世界收集資料,一方面通過資料改變著產品。

從生到死,產品有它自身的生命週期,中間包括了無數個產品研發週期,今天加資料之後稱之為資料驅動的產品生命週期。從產生想法,設計,開發,測試迭代到釋出結束,對於資料來說對應的是提出假設和問題,進行價值評估,跟蹤和製作報表,作實驗和資料分析,再是資料監控和學習。每一個階段都在幫助產品找到產品新的機會來作決策。
以網際網路產品為例,產品目標始終是增長和留存,只有持續以及高質量的使用者才能帶來紅利。撬動流量實現使用者增長是首要目標,就是要降低流量的獲取成本,同時儘可能優化資源的效率。
過去流量為王,流量獲取的成本較低,但整體的轉化不高。到後流量時代,運營一塊紅海,發展一塊藍海,非常重要的是定位好使用者群體,找到他們,實現使用者價值與產品功能的核心匹配,實現高轉化和病毒傳播。因此,產品與目標人群的定位這件事越來越重要,便於精細化運營來實現高留存。

對於產品週期來說,資料衡量的是三個體系的能力:
1. 系統能力,它保障了產品穩定可靠,是產品的基石,系統包括了從資料端,服務端到終端,能力包括系統可用性,系統相容性,系統可擴充套件性,系統性能,系統可維護性等;
2. 產品能力,它是上層核心能力,是呈現給使用者的部分,分產品資訊架構,產品功能架構,產品視覺設計等;
3. 商業能力,它是實現商業化的最後拼圖,包括了營銷能力,服務能力等商業週期所需要閉環。
三者之間相輔相成缺一不可,核心衡量的所謂『使用者體驗』價值。使用者體驗反應使用者與產品從認知,使用到傳播整個情感的連線和反饋。狹義的使用者體驗是互動視覺,廣義的使用者體驗從內容、商業目標、互動、使用者目標四個方面展開,我在此基礎上擴充了基礎層系統能力。
比如,初創產品以增長為主要目標,系統能力的評估很重要,並能夠達成相應的壓力測試上線才有保障。此時,使用者互動表示的是資訊架構與產品邏輯,產品功能的賣點是最核心的。背後隱含著它們之間重要程度。
資料特徵匹配終端模板
對於端上的啟發是什麼?我們能否以這樣的資料與產品匹配起來。

我們可以將人群抽象成特徵,包括語言,年齡,行為偏好等,同時將我們的產品分解成邏輯模組,並抽象成特徵,包括視覺與互動層次,功能資訊層次等。然後,我們定義每一類人對於結構化模組的匹配,這樣他們就可以看到想要的產品呈現,同時又滿足了一個實驗過程。
結構化反映出終端是可複用的元件形態而且是和資料繫結的,這是一種將使用者體驗發揮到最大的完美假設。產品場景結構化結合了系統能力,產品能力和商業能力的沉澱,最終讓每一個人有使用產生最合適的體驗的機會。
但我認為人工智慧的直接匯出更適用於模式化的推薦系統。而這個過程理解為決策智慧,因為還是需要人不斷的作實驗和調整過程。因為商業並不能完全推匯出來,結合『人為規則』的適用性是最理想的方式。
終端研發常將技術效能放在搭建產品系統上,搭建系統的確是提效的工具,更進一步,業務抽象的模板系統,加入場景化概念,模板根據產品邏輯提供的快速搭建模板,但並未結合使用者和系統資料。
我認為再深一層是生成系統。推薦使用者資料與產品結構化的對映關係,給產品經理或研發角色看到針對使用者特徵的產品介面,再往上加工規則,達到一個數據能力與人為經驗的匹配。並通過資料迴流不停的調整產品的適應能力。

生成系統並不意味著產品生命週期的減少而是同時縮短其時效上加強商業能力,資料驅動始終輔助人類的工作,可以更好的讓我們釋放想象力。未來商業的終端架構是商業資料驅動的人機互動介面實現,技術需要面對更高的抽象能力和穩定性。
資料發展生態能力
以上邏輯大都是面向使用者型產品。談到為 B 端市場服務的專業型產品,截然不同。專業型產品的特點有特定人群,定製性強,功能性強,單價高等。
在服務專業產品市場時,會從兩方面發展,一方面是自身專業競爭能力,也是核心能力的體現;另一方面是佈局生態的能力,因為定製性的問題,B 端產品成功需要更多的合作伙伴進到生態。這裡擴充套件下生態能力不僅在 B 端產品中普遍存在,從使用者型產品發展起來的產品平臺也是活生生的案例。
整體架構從產品形態考慮,這類產品需要體現的是功能的內聚,分層架構還是最好選擇,包括今天大多數移動應用,儘管是面向使用者的產品,但本身功能內聚,很少存在幾個移動應用之間模組複用。但從生態佈局上考慮,如應用內構建小程式將應用形成平臺,則需要體現產品功能的可複用能力,模組結合安全地沙箱機制和可複用設計是基本要求。
涉及到終端展現相關的生態能力,比如功能元件,同樣可以複用資料特徵匹配終端模板。比如現代 BI 工具中就有著智慧洞察推薦的功能,就有將資料分析場景化的感覺,它結合演算法能力挖掘資料特徵,推薦給使用者合適的洞察模型,最後從之間的模型選擇生成報表。所謂生成系統本身即是我們平臺的一部分。
結語
產品終端呈現的就是產品本身,商業已經不是一層不變的商業,它背後是對每一個人的定製,為每一種情況呈現。未來資料與介面的結合會更近,更直接。背後需要技術的變革和想象力。