保羅·格拉厄姆在他的文章中寫道:當大多數人真正註意到妳的時候,他們並不是第壹次看到妳站在那裏,而是發現這麽久了妳還在那裏。
我就是保羅提到的“大多數人”。React Native剛出來的時候,我是通過CSDN等壹些平臺了解React Native的,但並沒有真正去關註它。
半年多過去了,我發現React Native不僅依然存在,還產生了很好的React Native社區。從那以後,我就逐漸關註React Native了。
我們深入研究React Native有幾個原因。
首先,設計模式很少用於開發React Native。
是的,妳沒有看錯。確實很少使用設計模式。有人會問我,這是學習的理由嗎?
我先放壹放,給大家講壹個大部分人都聽過的故事。
金庸小說裏,有幾把劍,用在他人生的幾個階段。
第壹柄是壹把無名綠劍。兇猛無敵,用來和和碩抗衡才弱。
第二柄是魏紫軟劍,30歲以前用的。誤傷義士是不祥之兆,卻被棄之不顧。
第三柄是暗鐵重劍,無鋒無工。在40歲之前,全世界都很猖獗。
第四個把手是木劍,他的把手已經腐爛了。原因是他獨自尋求失敗。“四十歲之後,不留名於物,草木竹石皆可為劍。”
獨孤求敗的人生階段分為劍級、軟劍級、重劍級、木劍級,使用不同的武器。
程序員的編程階段也分為幾個階段。
劍級,劍招壹般都是直接的。剛進入職場的程序員,技能有限,壹般以實現功能為主要任務,不考慮性能和模式。
軟劍級別是在招式已經發揮到極致的基礎上,追求變化的極致;當程序員對項目進行多次叠代後,就會意識到程序中存在的問題,代碼也會更加規範。
重劍類相比軟劍是質的飛躍。當程序員工作了很多年,做了很多項目,就會逐漸理解各種模式,達到架構師的高度。
木劍級別,基本達到人劍合壹的境界;這也是我主要想說的境界,可以回歸節目本質。
回到程序的本質,程序的形式應該只是反映它要解決的問題。
當我們開發程序壹段時間後,會發現編程已經制度化了,尤其是使用面向對象的語言。我們經常聽到模式這個詞,但我們應該認為模式不應該存在。
程序的目的是解決問題,代碼中加入的任何其他形式都是在告訴我們,對問題的抽象還不夠深入,這應該是編程語言本身已經意識到的。
我用原生代碼開發Android程序的時候,用了很多設計模式——工廠設計模式、適配器設計模式、單體設計模式等等。剛開始的時候自我感覺良好,覺得自己很牛逼。我會在面試別人或者自己去面試的時候炫耀。後來我想,為什麽Android框架不提供更深層次的抽象,讓我可以直接實現具體功能,而不用用各種模式搭建各種框架?
在接觸React Native的時候,雖然React Native也需要壹些模式(現階段很難避免),但是React Native的整體設計架構比Android強很多,很直接。
比如在React Native的開發中,我們要更改的數據放在狀態機中。只要狀態機中的數據發生變化,無論界面中有多少地方與變化的數據相關聯,都會發生變化。在Android的原生開發中,可能需要把很多要改的東西打包在壹起操作,這無疑是多了壹步。
代碼越直接,程序的可維護性越好。更好的程序維護意味著更低的成本。
第二,學習成本比較高。
我學習的第二個原因是React Native的學習成本比較高。也許妳接受了之前的理由,可能會讓妳再次瘋狂。為什麽學習成本高就壹定要學習?
往往高昂的學習成本更值得學習!
React Native的學習成本真的很高。
妳肯定需要先學習JSX語法,React知識,ES6和函數式編程思想。如果妳想知道什麽是React原生構建,妳需要學習nodejs。封裝原生組件還需要學習java、object-c和swift,也就是學習Android和ios的原生開發。設計到通信原理還需要懂C++。
有些程序員可能會告訴妳“所有的編程語言基本都差不多”“語言不重要,理解重要”,因為他們想炫耀自己的知識。其實我上面說的都是廢話。每種語言從語法到概念都不壹樣。學習壹種語言對妳學習另壹種語言的好處是可以進行比較,加深學習的印象。
雖然學習成本高,但是通過學習React Native掌握這麽多技術也不是壞事。React Native實際上是把各種知識打包成壹個壓縮包,讓我們學習的效率更高。
React原生技術是可測量和可擴展的。
React Native可以同時開發Android和IOS,尤其是界面編寫速度非常快。通過測量完成的程序,理論上妳可以比壹個普通的Android/IOS程序員優秀壹倍。
微軟還開發了React原生版Windows Phone。有了React的知識,妳可以很容易地編寫Web端程序。甚至在微信小程序裏都能找到React Native的影子。
在我們的世界裏,妳是沈淪還是奮進,取決於妳自己,妳不能把原因推給外界。有些剛畢業的學生,聽到5%的人占了社會50%的財富,往往會覺得不公平。站在程序員的角度,我也認為不公平,因為5%的程序員寫出了世界上99%的優秀軟件,所以他們應該占更高的收入比例。
壹個React原生程序員的收入應該是普通Android/iOS程序員的兩倍,沒有問題。
第三,React Native還不完善。
React Native還有很多坑,還不完善。React Native幾乎每個月都會發布壹個新的次要版本,1.0正式版還沒有發布。這正是我們學習母語的原因!
幾年前,我在北京工作的時候,經常聽到javaEE程序員抱怨,他們的工資還沒有壹個新的Android/iOS程序員開發了這麽多年的工資高。
其實很好理解。不知道技術越新越值錢嗎?
程序員就像蚊子,群體很多。後廠村路10估計有7個程序員,但是每個程序員壓力都很大,要想活下去必須吸收新鮮血液。
目前使用React Native的公司並不多。當妳是產品經理或者CTO的時候,妳必須優先考慮大多數人選擇的做法。有壹個專業術語叫“行業最佳實踐”。因為這個詞之所以出現,是為了給產品經理/CTO推卸責任。既然我選擇了“行業最佳實踐”,如果我沒有成功,那就不是我的問題,而是“行業”的問題。
但如果妳是程序員,按照上面的做法,妳會死得很慘,因為“行業最佳實踐”會逐漸改變。壹旦妳的技能不是“行業最佳實踐”,妳就應該想辦法保住妳的抵押貸款。
React Native不會取代Android/iOS的原生開發,但隨著React Native正式版的推出,可能會成為“行業最佳實踐”。
關於如何學習母語反應
如果妳想快速上手React Native,妳肯定需要閱讀官方Api。不僅有文檔還有例子,涵蓋了大部分知識。
/docs/get-started . html
FaceBook官方也提供了壹個演示App,可以作為參考。
/Facebook/react-native/tree/master/示例
臉書的開源f8項目也很不錯。
/fbsamples/f8app