標籤:
今天是十一長假,自己整理了寢室,差點累死,現在才開電腦,隨便逛逛部落格,看到不錯博文,轉載一下。。
在移動開發領域我們發現一個很奇怪的現象:普通菜鳥新手經過3個月的培訓就可以拿到 8K 甚至上萬的工作;在北京稍微有點工作經驗的 iOS 開發,就要求 2 萬一個月的工資。不知道大家是否想過:行動裝置 App開發已經在市場上火熱了這麼多年了,為什麼很多公司還仍然會面臨移動開發人才稀缺的問題呢?對於移動開發人才的增長速度總是趕不上市場需求發展的原因,我認為不應該簡單歸為市場供求關係的問題,其源動力還是來自行動裝置 App整體的開發模式和開發效率低下的內因。正是這強大的市場需求和低下的原生開發效率結合在一起才導致了這幾年軟體開發行業人才的嚴重失衡,導致大家沒辦法也只能漲工資的方式來搶人才。為此我們一直在尋找高性價比的應用開發方案(實現低成本投入和高品質的產出),儘可能的降低應用開發複雜性。應用複雜性的本質是邏輯和控制,邏輯決定了代碼複雜性的下限,而控制則包括對應用環境和裝置環境的進一步最佳化。我們常抱怨應用不夠簡潔的最根本原因:就是其沒能處理好邏輯與控制之間的耦合。說到應用複雜度的解耦,最常見的解決方案就是通過元語言抽象讓邏輯和控制進行分離,也就是人們通常所說的中介軟體方案。先普及一下:什麼叫元語言?簡單說,元語言就是對應用文法和語義的配置,對應的中繼資料則是對這些配置的具體描述。也就是說元既是資料也是代碼。為了能說清楚這個問題,讓我們來簡單回顧一下中介軟體開發技術的發展曆史:
最早也是最基礎的應用開發方式是元編程(Meta Programming):也就是從元語言到目標語言的編譯器,將中繼資料編譯為目標程式碼的開發過程。元編程的模式要求我們要面向具體裝置進行編程,每種裝置在作業系統基礎上會提供給開發人員大量的api服務,最終的應用的原始碼經過編譯和連結兩個過程產生可以直接啟動並執行應用程式。雖然開發過程的複雜度較高,但元編程產生應用的執行效率確實非常高。採用元編程方式的開發套件括:組合語言、c語言、PowerBuilder、VC、Objective-C等。我們可以通過來理解元編程:
元編程之後,緊接著就出現了元驅動編程(Meta Driven Programming) :它是直接在目標語言中實現元語言的解譯器,這是支撐中介軟體技術的基礎方式。元驅動編程帶來的最大的好處就是我們不必再面向具體的裝置進行編程,元語言需要先先行編譯成中間代碼,中間代碼對於不同類型裝置的適配工作完全可以交給“運行時引擎”去完成,從而達到了“write once and run anyway”的能力。 採用元驅動編程方式的開發套件括:Java、Flex、.Net等。我們可以通過來理解元驅動編程的模型:
這些年比較流行的應該還是元解釋編程(Meta Interpretive Programming):它可以讓元語言直接運行在不同的目標環境中,這也就是我們所說的指令碼語言編程。由於省去了編譯和先行編譯的過程,代碼的語法檢查的過程只能在運行期間完成,理論上講這會降低應用的執行的效率。但隨著電腦硬體效能不斷的提升,效能問題已經被越來越弱化,同時元解釋編程簡潔強大的文法也大大提高了應用的開發速度,也降低了程式的複雜度。採用元解釋編程方式的開發套件括:Javascript、Python、Lua等。我們可以通過來理解元驅動編程的模型:
為什麼在移動互聯時代,很多傳統應用開發的規則都不再適用了呢?讓我們來對比一下行動裝置和傳統電腦體繫結構之間的差異,看看行動裝置到底在結構上發生了哪些重要的變化。首先行動裝置去掉作業系統的緩衝,為了控制個體應用對系統造成的任何不良影響,在應用的實體記憶體不夠時,該應用馬上就會強制退出。 這就是app開發中為什麼一點點的記憶體問題就會產生閃退的根本原因,也是我們在項目中需要通過底層原生編程來最佳化app穩定性的必要原因之一。另外由於移動作業系統中個體應用獨立化的設計,讓系統級的運行時引擎無處載入,這自然也就顛覆了元驅動編程在app開發中應用的可行性,於是程式員們就又要重新開始尋找移動中介軟體技術的解決方案了。
第一代移動中介軟體的編程(HTML5 Based App Programming)是基於HTML5技術的跨平台app開發模型。在這個模型中一般都通過內嵌的webkit核心來實現原生擴充代碼的橋接,用HTML5構建網頁UI,用網頁中的Javascript編寫業務代碼。在這個模型下HTML5技術天生就具備跨平台的能力,而且很多傳統的網站開發程式員在技術上也可以很自然的過度。採用第一代移動中介軟體模型的產品包括:PhoneGap平台、數字天堂中介軟體產品、烽火中介軟體產品等。我們可以通過來理解第一代移動中介軟體產品的模型:
在第一代移動中介軟體技術的發展過程,吸引了大量傳統的web程式員,很多人都希望能夠通過html5技術進入app開發的陣營裡。但經過幾年內大量的嘗試後我們發現,市場上主流app開發工作仍然還是要交給原生開發人員完成,幾年下來用Html5開發出來的優質app在市集裡仍然是鳳毛麟角。html5的互動體驗能力和原生app開發之間的差距似乎越來越大了,雖然硬體裝置的高速發展解決了部分html5頁面運行效率的問題,但android和IOS每次大版本升級在UI互動能力上的提高卻讓html5技術有點越來越望塵莫及了。
隨著技術的發展很自然又出現了對第一代移動中介軟體編程技術的改進模型,其結構如所示:
在改進模型中的變化主要體現在兩個方面:首先是對原生擴充能力進行了進一步增強。除了對檔案、照相機、通訊錄等本地能力的擴充外,還增強了對原生UI架構的擴充能力以及對第三方服務的擴充能力;另外改進模型中還增加了擴充模組的概念對外提供開放平台,允許開發人員擴充自己開發原生組件。雖然改進的模型在很大程度上了增強了HTML5和原生的原生互動能力,但最大的技術瓶頸仍然能解決,即對於基礎UI的構建還是只能通過網頁方式實現。開發人員仍然需要通過網頁渲染來類比原生互動,所不同的只是可以通過網頁內的javascript再去調用一些原生擴充功能而已。目前採用第一代移動中介軟體改進模型的產品包括:Appcan、APICloud、HBuilder等。
HTML5技術是第一代移動中介軟體技術發展的核心動力,但隨著IT技術的發展,它也成為了移動中介軟體技術進一步發展的最大瓶頸。無論大家在第一代中介軟體的改進模型多麼努力,卻始終改變不了WebView的單執行緒模式、改變不了DOM/CSS的複雜而低效的排版和渲染水平、改變不了瀏覽器通過內嵌Cavas、WebGL和定時器來實現動畫的在使用者體驗效果上的失敗。 很多人都還在幻想著HTML5會成為App的未來,要知道HTML5這項Web時代的技術本身就不是為移動互聯時代而生的,HTML5的骨子雷根本就不具備移動互聯的基因,它與App的未來實際已經是漸行漸遠了。
Facebook在2015年初重磅推出了React Native移動開發中介軟體技術,在結構上完全擺脫了HTML5的束縛,真正開啟了一套通過自訂原生控制項渲染UI的架構的道路,我們可以稱之為第二代移動中介軟體的編程(Meta Extended App Programming)。我們可以通過來理解該模型:
Facebook在React Native產品中所提出的 “Learning once, write anywhere” 本身也是一種複用的思想。大家厭煩了各種各樣的程式設計語言,如果有一種語言真的能夠統一移動開發領域,對於所有人都是好事。先不說這個架構後續是否能得到福士認可,單從源碼來說,這個架構源碼裡有非常多的設計思想和實現方式值得學習。React Native產品雖然在實用性還有很大的不足,但它最大的價值則是為移動中介軟體技術提供了全新的發展思路。或許很多人還沒有關注到,2015年中旬的時候一款DeviceOne的移動中介軟體產品正式對外發布,它對React Native產品架構進行全面的繼承和改進,不僅實現了跨平台移動開發的“Write once, run anywhere”能力(同時支援IOS、Android、Windows10),還實現了原生開發擴充平台的完全開放。我們來研究一下這第二代移動中介軟體的改進模型吧:
在DeviceOne這個模型中所有UI組件功能組件都已經被抽象成可被自由擴充的跨平台組件,就連Webkit本身在模型中也僅僅退化成一個普通的UI組件而已,App開發人員可以自由選擇js指令碼、lua指令碼甚至python指令碼來編寫商務邏輯,讓昂貴的原生開發人員能夠更專註於底層技術創新和組件封裝,讓應用開發人員可以更加專註於具體項目的業務需求,實現原生開發和應用開發的分離,也就是讓邏輯和控制充分解耦。
隨著移動互聯時代的高速發展,人類對“低成本高品質”app開發技術的需求越來越迫切。Fred Brooks在人月神話中曾闡述的 “沒有銀彈”理論一直以來對IT界產生了很深的影響:他認為不存在一種技術能使得軟體開發在生產力、可靠性、簡潔性方面提高一個數量級。但在我看來也不一定要那麼悲觀了,凡事都沒那麼絕對,任何原則都有其假設的前提和範圍,如果超過這個範圍,原則可能都要失效了。例如:如果超出了宇宙大爆炸基點的範圍,我們就會失去任何參照物,那麼就連時間概念同時也都會消失,更何況Fred Brooks的理論呢?雖然“沒有銀彈”理論在軟體工程範圍內是被普遍認可的,但我們這並不能僅以此就推理出 “低成本高品質”的需求是無解的。App的開發技術的發展曆程不是可簡單線性描述,也更不會局限於軟體工程理論的範圍內。就像Kevin Kelly在《失控》中所說的那樣,IT技術應該更貼近大自然自身的發展規律。工業時代的標誌是機械設計能力的登峰造極,而以IT技術為代表的新生物文明則應使設計再次迴歸自然。React native和Device one的出現就讓我們看到了app開發的新希望,這可能就是我們期待了已久的移動中介軟體技術發展拐點。凡事不破不立,React native通過擴充標籤的方式實現了去HTML5化,而Device one繼而則在支援跨平台的同時還還進一步實現了去中心化,按照這樣思路再發展下去移動中介軟體技術的未來將會是怎樣的呢?一旦我們能通過分布式的、至下而上的去中心化控制系統來激發大量個體(開發人員)的差異化發展,就能夠最大限度的實現整個系統的自學習和自遞增,當系統的進化進而再反過來再影響和改變個體的時候,那麼軟體開發的生產力、可靠性、簡潔性可能就會在每次迭代過程中實現突破,甚至能以指數層級的速度開啟全新的增長…
【轉】中介軟體的曆史來看移動App開發的未來