为什么要学习母语?
保罗·格拉厄姆在他的文章中写道:当大多数人真正注意到你的时候,他们并不是第一次看到你站在那里,而是发现这么久了你还在那里。
我就是保罗提到的“大多数人”。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