随着移动互联网的发展,移动 APP 基本称为大众互联网产品的标配。移动技术的飞速发展,成就了一批人,但是在红利期过后,必然会回归到均值。在跨平台大行其道的今天,一直有人在唱衰原生技术,但是退一步看,大前端何尝不是一条新的出路呢。
一、前言
大前端笼统的讲,就是包含 Android、iOS、前端 等等各种客户端技术。即使有 ReactNative、Flutter 这种跨平台框架,也不可能抛弃原生开发,在国内的环境下,开发 APP 最基础的一些 SDK,例如:推送、统计等等,以及与一些外设的交互,最终都是逃不开原生开发。
哪怕以后跨平台发展的非常好,各大公司都用跨平台的解决方案来研发 APP。到时吃香的也必然不是单端开发人员,而是大前端这种多面手的开发。
二、知识体系的建立
iOS 开发需要掌握哪些知识,以及如何把这些知识融会贯通,进而形成一套成熟的知识体系。
我们现在所处的互联网时代,学习资料真的是非常完备。比如,GitHub 上各领域的 Awesome 系列,就是专门用来搜集各类资料的,其中 iOS 的 Awesome 里面,就涉及了 iOS 开发的各个方面。
但知识掌握的牢固、精细程度,是根据学习资料收集的多少来衡量的吗?我有收集了N G的资料,但学习或掌握的不多,所以,答案当然不是了。
再看看我们身边那些“厉害”角色,他们并不是样样精通,而是有擅长的领域。从我接触的这些“大神”们的成长经历来看,都是先深挖某一领域,经过大量的学习和实践后理解了编程的本质,从而可以灵活调配和运用自己已经积累的知识。在这之后,他们再探索其他领域时,就做到了既快又深,成了我们眼中的“大神”。
身边有开发者,刚学会通过网络请求个数据、摆摆界面弄出 APP 后,看到人工智能火了就去学一下,区块链火了又去学一下,前端火了又开始蠢蠢欲动。但结果呢?每一门技术都学不深不说,学起来还都非常费劲。因此,我的感觉还是不要被新技术牵着鼻子走,而是努力提升自己的内功,这样才能得心应手地应对层出不穷的各种新技术。
学习 iOS 也一样,毕竟精力有限,我们需要一些“立竿见影”的效果来激励自己。我们应该先学习哪些知识,才能快速提高日后学习和工作的效率呢?进而形成一套自己的核心且有深度的知识体系。
iOS 的知识体系,包括了基础、原理、应用开发、原生与前端四大模块。好的知识体系首先需要能起到指导 iOS 应用的开发和发现并解决开发问题的作用。所以,可分为如下四大模块:
- 基础模块的作用,就是让你具有基本的发现并解决开发问题的能力
- 应用开发模块,就是用来指导应用开发的
- 原理模块的作用,就是帮你掌握原理和理清规律
- 原生与前端模块,会助你看清方向
好的知识体系还要能够应对未来变革,也就是需要打好底子掌握原理、理清规律,看清方向。
三、基础模块
iOS 开发者需要掌握的整个基础知识,按照 APP 的开发流程(开发、调试测试、发布、上线)进行了划分,如下图所示。
我们在开发阶段需要掌握的基础知识,主要包括:启动流程、页面布局和架构设计。
- 启动的快慢,可谓 APP 的门面,同时关乎日常的使用体验,其重要性不言而喻。而只有了解了 APP 的启动流程,才能合理安排启动阶段对功能初始化的节奏,将启动速度优化到极致。
- 界面是开发 APP 的必经之路,是一定绕不开的,如何提高界面开发的质量和效率,一直是各大团队研究的重要课题。
- 架构怎么设计才是合理的,也是这个阶段需要探索的一个重要课题。毕竟每个团队的情况不一样,什么样的架构能够适应团队的长期发展。
在调试测试阶段,我们需要掌握的主要就是提速调试和静态分析的内容。
- iOS 开发的代码都是需要编译的。那么,程序体量大了后,编译调试过程必然会变长。
- 对 APP 质量的检查,分为人工检查和自动检查。而质量检查的自动化肯定是趋势,所以会涉及自动化静态分析代码。
在发布阶段,我们需要做些和业务需求开发无关、涉及基础建设的事情。这部分工作中,最主要的就是无侵入埋点和包大小优化。
- iOS 安装包过大会导致 4G 环境下无法下载的情况,所以对包大小的控制已经成为各大公司最头疼的事情之一。
- 发布前需要加上各种埋点,这样才能让你充分地掌握 APP 运行状态是否健康,同时埋点也是分析上线后遇到的各种问题的重要手段。但是,如果埋点的代码写的到处都是,修改和维护时就会举步维艰。
在上线阶段,开发质量的高低会影响上线后问题的数量和严重程度,比如有崩溃和卡顿这样导致 APP 不可用的问题,也有性能和电量这样影响用户体验的问题。对于这些问题你一定不会袖手旁观,那怎么才能监控到这些问题呢?怎样才能够更准确、更全面地发现问题,同时能够收集到更多有助于分析问题的有效信息呢?
四、应用开发
应用开发部分,我们需要关注的就是一些经典库,因为这些经典库往往出自技术大拿之手,代码结构和设计思想都非常优秀,同时经过了大规模的实践,不断打磨完善,具有很高的质量保障。比如:动画库 Pop,响应式框架 RAC、RxSwift,JSON 处理库 JSONModel、Mantle 等。
应用开发中和视觉表现相关的 GUI 框架、动画、布局框架、富文本等部分知识掌握好了,直接能够让用户感知到你 APP 的优秀表现。响应式框架、TDD/BDD、编码规范等知识能够让你的开发更规范化、更有效率。
有道是选择大于努力,可能你使用一个不恰当的库所做的大量努力,也不及别人用对了一个好的库轻轻松松、高质量完成的任务。
五、原理模块
说到 iOS 开发原理,主要就是系统内核 XNU、AOP、内存管理和编译的知识。这些知识具有很强的通用性,其他任何语言、系统和领域都会涉及到。
掌握这些通用知识,可以提升自已的内功,助你打通任督二脉;深挖知识,可以帮你理清楚开发知识的规律,达到融会贯通的效果;掌握通用知识,也能够让你对未来技术见招拆招。
六、原生与前端
随着 Flutter 和 React Native 越来越完善,关注的人也越来越多。原生还是前端,才是移动应用的未来,谁都没法说得清楚。有句话怎么说来着,无法选择时就都选择。
从 H5 到 Flutter,渲染底层图形库都使用的是 Skia。也就是说,这么多年来渲染底层技术就基本没有变过。而且,向 Flutter 的演进也只是去掉了 H5 对低版本标准的支持。但,仅仅是去掉这些兼容代码,就使性能提升了数倍。
所以说,对于新的技术如何去看,很重要,先不要急着深入到开发细节中了,那样你会迷失在技术海洋中。需要先建立好自己的知识体系,打好基础,努力提升自己的内功,然后找好指明灯,这样才能追着目标航行。
七、小结
在学习知识的道路上,我的认为是求精、求深,基础打牢,以不变应万变。在工作上,则要注重开发效率,避免不必要地重复造轮子,理解原理和细节,同时开阔眼界,紧跟技术前沿。
说到底,不要急着看到啥就去学啥,有目的、有体系地去学习,效果才会更好。即使工作再忙,要找时间成体系地提升自己的内功,完善自己,然后反哺到工作上,让工作效率和质量达到质的提升,进而从容应对技术的更新迭代。