市场趋紧,大前端趋势,移动端程序员如何做好职业规划,保持竞争力?本文与大家分享大前端的发展趋势,Android高级开发所需的技能,以及移动端程序员的职业发展之路。作者简介:孔涛目前在爱奇艺科技产品中心负责金融产品移动端研发。7年Android开发经验,曾在新浪、百度等大型互联网公司担任Android工程师,负责新闻、地图等APP的开发。熟悉Android系统原理和大型应用的模块化、组件化、插件化架构设计方案。移动互联网时代到来后,移动应用成为新的主流,需要开发Android和iOS终端。曾经有不同的版本,例如WindowsPhone。早期主要开发以PhoneGap为代表的Hybrid形式和App内嵌的WebView。浪费人力物力。从2015年的ReactNative开始,Weex、Flutter、Kotlin-Native等跨平台框架相继涌现。再加上手机厂商联合推广的微信小程序、快应用,前端技术在移动端的使用场景越来越多。因此,越来越多的企业也在组织架构上做出相应的调整,以适应这种大前端的趋势。之前的团队主要是移动端程序员,现在除了Android/iOS开发,还有RN/H5/小程序等开发人员。那么,大前端趋势是否意味着传统的NativeAndroid程序员需要转型呢?今天,唯一的主流移动操作系统是Android和iOS。以前者为例,目前Android已经广泛应用于手机、平板、车联网、物联网、智能电视等,被其他OS替代的可能性很低,所以原生程序员还是有很大的优势的。大市场。现在的技术分工越来越细,这也意味着大多数公司都需要专门的人才,尤其是一个或多个。去大公司面试安卓。如果你的Android技术不深,面试官是不会有兴趣去了解剩下的前后端和python技术的。所以并不是知道的越多越好,一定要做好减法,先专精一门技能,再去学习其他的技能。在大前端时代,一个合格的开发者应该是JS+iOS/Android。可以是精通前端,学一点native,也可以是懂JS的native程序员。如果公司专注于APP,专注于用户交互体验,一个合理的路线是原生APP开发者坚持精炼原生部分,然后学习JS前端知识,拓宽技术栈。1.从初级到高级,移动程序员的进阶书籍。下面以Android开发为例,从硬技能和软技能两个方面,梳理大前端趋势下的移动端程序员从初级到高级。需要的技能点,推荐一些实用书籍。(一)硬技能:专业技术知识1.Java/Kotlin开发语言(1)Java常用数据结构:ArrayList、Vector、CopyOnWriteArrayList、HaspMap、ConcurrentHashMap、HashTable等使用场景。JVM虚拟机包括Java内存管理、GC垃圾回收机制、类加载机制。推荐书籍:《深入理解 Java 虚拟机 JVM 高级特性与***实践》。多线程编程,包括线程池、锁机制、线程同步。推荐书籍:《Java 并发编程实战》和?。AOP编程实现,包括JDK动态代理实现,ASM直接操作字节码,CGLIB实现。其原理封装了ASM,使用起来更方便。Javassist:直接修改在字节码加载前需要切入的方法,注解处理器APT,Android中广泛使用的开源库,如DataBinding、ButterKnife、EventBus3等异常处理Exception,包括检查异常和运行时异常处理。IO流相关,包括阻塞IO和非阻塞IO。Java的一些高性能特性,如反射、代理、泛型、枚举、正则表达式等;同时了解jdk1.8、1.9、1.10等新特性。相关书籍很多,推荐《Thinking in Java》和《Effective Java》。(2)KotlinKotlin是一种基于JVM的新型编程语言,在GoogleIO2017中被谷歌宣布为Android官方开发语言。Kotlin有哪些优势呢?①简单性:提供了很多标准函数,大大减少了样板代码量。②安全:避免空指针异常等错误。③互操作性:充分利用JVM、Android和浏览器已有的库。④工具友好:可以使用任何JavaIDE或使用命令行构建。在Kotlin中,有必要树立函数式编程思想。将函数理解为一个值到另一个值的映射关系,将函数作为一个单元来处理每一个业务逻辑。该函数可以用作参数或返回值。使用Kotlin提供的标准函数,例如let、run、with、apply、also和Lambda表达式。尽可能使用闭包和高阶函数。Kotlin的另一个显着特征是协程,它为设计异步、非阻塞程序提供了强大的范例。协程是一种轻量级线程,它提供了一种廉价且可控的操作来避免阻塞:协程被挂起。将复杂的异步操作放到底层库中,可以顺序表达程序逻辑,从而简化异步编程。***简单来说,Kotlin/Native最初是为了支持在非JVM虚拟机平台环境下编程,比如iOS、嵌入式平台等,同时支持与C的互操作。推荐书籍:《Kotlin 实战》。2.Android进阶技术点流程相关,包括App流程原理和AIDL原理。性能优化,包括:内存、cpu、功耗、网络请求、UI布局、线程、数据库等优化方法和优化工具的使用。Android源码相关,包括:Binder机制、Activity启动流程、Handler原理、AMS、PMS、WMS原理、View绘制流程、Touch事件传递机制等编译打包过程,从java/kotlin源码到最终APK。热修复的实现原理,目前有很多种热修复框架,常见的有底层替换、类加载和InstantRun方案。逆向工程的原理主要是防止apk被反编译破解,了解apk的加固方案。插件化,目前也有很多解决方案。主流的技术实现是Hook方式,注册activity占坑,利用占位activity通过AMS验证,恢复插件activity。其他组件的原理大致类似。NDK开发,调用JNI和回调Java的方式。对于自定义控件,需要注意onMeasure、onLayout、onDraw的调用时机,以及Touch事件分发机制。AnimationViewAnimation,视图动画在很早的Android版本系统中就已经提供了,只能用来给View动画。PropertyAnimationPropertyAnimation,只针对3.0以上的版本,可以设置为任意Object,包括还没有渲染到屏幕上的物体。这种动画是可扩展的,可以自定义动画的任何类型和属性。Webview中的原生JS交互,常用的JSBridge等。Gradle的特性和DSL语法,比如GradleTransformAPI的使用,允许第三方插件在class文件转换为dex文件之前操作编译好的class文件。利用这个特性,我们可以在代码编译阶段实现代码注入或者代码修改,这也是很多埋点技术和热修复技术的基础。安全:HTTPS通信原理、数据加密方式,包括MD5、RSA等、webview安全、代码混淆、数据校验、组件通信安全、服务器通信。CI持续集成:Jenkins、GitlabCI等构建持续集成开发工具。Sersor传感器:包括陀螺仪、加速度传感器、方向传感器、重力传感器、光线传感器等。Android开发国际化。ART和Dalvik虚拟机的区别主要是AOT,Ahead-Of-Time预编译。熟悉DEX文件结构。单元测试:JUnit4、AndroidJUnitRunner、Mockito框架的使用。自动化测试:Monkey/MonkeyRunner、Espresso、UIAutomator等掌握模块化开发方式:主要注意层的划分和模块间的跳转通信。代码重构能力,推荐书籍:《重构改善既有代码的设计》、《重构与模式》GoogleDynamicFrameworkAppBundles。Jetpack,Google的新一代组件、工具和架构指南,旨在加速Android应用程序开发。Jetpack主要分为4个部分:Android开发常用的第三方库:响应式编程:RxJava、RxAndroid、Google的Agera网络库:包括Retrofit、OkHttp、Volley图片:Fresco、Gilde、Picasso依赖注入:Dagger2数据库:Realm、ORMLite、GreenDAO、ObjectBox数据总线:EventBus、otto内存泄漏检测工具LeakCanary等技术点,如果详细展开,会形成一个比较复杂的知识图谱,建议大家自己梳理消化。3、OOAD与设计模式在架构设计方面,首先要掌握的是面向对象的开发设计。具体知识点包括:面向对象的三大特点:封装、继承、多态。五个基本原则(SOLID原则)、单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口分离原则。23种设计模式:常用的有工厂、单例、适配器、桥接、组合、代理、命令、观察者、策略、状态模式等。4.APP架构设计包括MVC、MVP、MVVM、MVI、VIPER、CleanArchitecture、Flux.目前,除了MVC,MVP和MVVM被广泛使用,具体的架构设计必须结合业务来考虑。(2)软技能人身处职场,行走江湖。如果你想晋升为高级程序员,光有技术深度是不够的。你还需要掌握很多软技能,注重综合专业素养的培养。很多人一开始不够重视,很容易在职业生涯的下半场遇到瓶颈。以下是我个人总结的高级程序员必备的软技能,供大家参考。1、快速学习能力:包括技术深度和广度,能够不断探索新技术,不断学习。2、沟通技巧:加强表达、阅读、写作能力,即使在科技发达的今天也不会过时。因为任何形式的沟通在企业内部都是非常必要的。3、团队合作能力:开发人员很容易陷入人际交往的孤立状态,但开发工作永远不是一个人能完成的。成员只有真正融入团队,与其他同事顺畅地沟通合作,才能体现出自己的真正价值,才有更大的机会被列为未来职位的晋升人选。4、时间管理能力:可以参考时间管理的“四象限法则”,把精力和时间集中在处理重要但不紧急的事情上,做到未雨绸缪。5、影响力:一方面是业务影响力,另一方面是技术影响力。其中,提高技术影响力的途径包括:参与技术分享,总结和传播积累的知识;参与技术方案评审,分享技术经验;帮助新生解决技术问题;博客、Github、StackOverflow等平台对外分享。6.文档写作能力:代码注释。很多程序员很少写注释,或者注释太多,不合适。参考开源项目的注解规范。编写技术设计文档。包括流程图、类图、功能时序图等。另外推荐一本书:《软技能——代码之外的生存指南》2。技术专家VS管理,哪条路更适合你?工作3-5年后,他们已经晋升为高级程序员。很多人开始面临一个问题:未来的发展方向是技术专家还是技术管理,哪种职业发展路径更适合自己?选择哪条路线,首先要明确自己想要什么。你想做技术还是管理,跟你的目标和职业规划有关。每个人的实际情况不同,目标不同。建议做出符合自己性格的选择,并坚持下去。即使一时看不到效果,长期来看总能看到效果。1、什么样的程序员适合做技术达人?技术专家的核心是深厚而熟练的。熟悉一定的技术领域,保持编码热情,不断学习新技术,能够静下心来做技术,而不是急功近利。性格比较内向,不善于沟通协调,不想花很多时间带团队,主要负责把关键技术做专业和先进的人,这样的人更适合在技术路线上发展,例如技术专家和建筑师。2、什么样的程序员适合转型技术管理?首先要明确,所谓的技术经理需要做什么?团队建设:人才激励、团队文化、梯队建设。任务管理:任务分工和任务协作。管理规划:新技术研究、支持新业务重组等。相应的要求能力包括:向上汇报向下沟通的能力、团队管理能力、人才培养能力、上下游部门的协作与管控能力、业务需求沟通能力、重大问题的决策能力、长期目标规划能力、执行能力等等。总体来说,对管理能力和技术能力的要求是有很大区别的。作为技术管理者,首先要有角色认知的转变。与其站在程序员的角度看问题,不如站在更高的角度,站在全局的角度思考问题。推荐有兴趣走管理路线的移动端程序员参考这本书:??。3、两种发展路径的异同点(1)不同点:技术专家更依赖个人技术能力,需要将业务与技术规划、框架设计、性能优化和技术创新相结合;技术经理是协助团队一起把产品做出来,负责团队内外的组织沟通和相互协调。(2)相同点:毕竟要面对管理,只是管理工作多与少的区别。即使你是架构师,你也需要带领一个技术团队。所以,不管以后走纯技术路线还是走非技术路线,都需要增加管理能力,因为说到底,还是要管理沟通。当你层次很高,但是你没有跟任何人打过交道的时候,完全靠个人能力做出贡献的情况是很少见的。4.如果我选错了,还有第二次选择的机会吗?我觉得首先要考虑职业目标和职业规划,频繁的变动对职业的影响比较大。(1)技术向管理转移:提前掌握相关管理知识并转变角色认知,以团队为出发点思考问题,深入了解业务,提升部门内影响力,有合适的机会促销进行改造。(2)把管理转回技术:如果面对大量的跨部门沟通,在性格等方面觉得不合适,需要尽快做出决定,转回技术开发。3、大前端趋势下,移动端程序员如何保持竞争力?我从招聘网站上摘录了一些一线公司的职位描述要求:3年以上工作经验,深入理解移动端底层和原理,独立主导或开发过一个以上的核心项目产品,有丰富的项目经验或管理能力,有ReactNative或Weex的实践经验,掌握一些前端开发技术,HTML/JavaScript/CSS等,有后端开发经验者优先。可见市场对Android程序员的要求越来越高。除了对Android底层原理有深刻理解外,还有对前端JS等技术的要求。今天我们已经进入终端碎片化时代。自2007年第一代iPhone发布以来的12年里,智能手机丝毫没有被取代的迹象。但创新还在继续,比如智能手表、电视、眼镜、VR耳机等等,可以想象,这样的设备还会不断增加。这些新设备也是新平台。与智能手机类似,可以安装第三方应用,这些平台基本都支持浏览器或嵌入式浏览器引擎。在早期的Hybrid探索和后来的ReactNative中,前端开发已经成为显示端应用开发中必不可少的技术。因此,大前端趋势对移动程序员影响最大的就是新的移动开发技术栈。移动设备作为主流终端,其应用开发技术也应该是大前端最关注的技术。过去移动开发技术栈主要以原生开发为主,但现在的趋势是跨平台技术愈演愈烈。那么,在当今瞬息万变的技术环境中,移动程序员如何才能保持竞争力呢?首先,加强对Android/iOS技术的深厚储备,深刻理解系统底层原理,不断投入新技术。其次,逐步完善前端技术栈,扩大广度,熟悉前端JS,以及RN、flutter等跨平台框架。***、选择完善Android细分领域,如应用开发、逆向安全、音视频、车联网、物联网、手机开发、SDK开发、智能电视盒子开发等,任选其一并继续深化。4.Q&A(Q代表网友提问,A代表孔涛回答)Q:你是什么时候开始带队的?一开始从纯技术转管理岗位会遇到哪些困难?如何克服呢?A:大约4年前我开始带领团队,从一个人独立贡献到多人团队发展贡献。一个人的能力是有限的,每个人都有解决问题的动力。其中,有一个心态的转变需要克服。决策认知发生了变化。问:我一直在一家中小型公司担任小团队经理。后续发展的突破口在哪里?有没有可能进大厂,转让技术?A:你的突破点在于技术的提升。这是一条很好的路线。大厂做技术没问题。但是如果想继续做管理,就必须先提升一些大厂的经验,发展技术,然后再逐步转做管理Q:在创业公司带大团队还是带大团队,哪种方式更有优势大工厂的小团队?A:这个没有绝对的答案。如果之前在大公司带过小团队,积累了经验,在创业公司带大团队是没问题的。但另一方面,如果缺乏经验,对新事物缺乏一些了解,在小厂带领大团队可能会遇到一些瓶颈。所以个人建议先去大厂锻炼一下。
