金三银四已经过去了,移动端的冬天就要来了吗?未必!拿到满意的offer相信才是每个人最想得到的,只有有了机会和平台,才能施展自己的才华和能力,那么到底如何能“快速”成为高级工程师呢?接下来就进入正题:两个部分非技术要求/技术要求
高级工程师所要达到的非技术要求:
1.沟通:为什么把沟通放在第一位?因为在平日开发过程中几乎一大半的时间实在和各部门沟通,更换一个icon会和UI争得你死我活,会为了某些需求文档上的语义不清和伟大的pm据理力争,在测试过程中会和QA为了某些事遗留线上crash还是最新版本改出来的问题争论,留给我们开发的时间其实不多,所以说为了提高我们的开发效率,良好的沟通技巧事必不可少的,其实大部分的程序员都是属于笔记内向的,但是我们可以观察在我们的身边哪些性格比较外放同时技术水平不一定最好的同事能在这个职场上混的更好,所以说不管是为了自己今后的发展也好,为了今天的开发任务能按时完成也好,大家都需要去提高沟通技巧,至少你要去学着主动和别人沟通,这样也可以让问题尽早的暴露,而不会造成延期和线上问题。最后我想说的是我们虽说现在是程序员,但是我们绝不仅仅是程序员,我们要做一个有着产品思维、有着运营思维、有着Qa思维的程序员!(UI思维就算了,太天马行空了,哈哈)
2.态度:态度不仅体现在你的工作态度和别人沟通上,更体现在你遇到困难的时候,不论何时,不论deadline压的多么的紧,大家都要把自己的态度端正好,要正视自己现在的身份,把自己的本职工作做好。同时态度也体现在我们的心态上,特别是提测临近而线上问题和遗留老问题纷至沓来的时候,更需要又一个良好积极向上的态度来应对一切,就我的个人经验,一定要不断的给自己心里暗示:什么问题都是可以解决的,什么bug都是可以解决的(如果自己实在解决不了,及时和自己的上级领导沟通,尽早暴露问题)
3.潜力:很多人都觉得自己都毕业好多年了,哪还有潜力?!这种观念是错的,你的潜力将伴随你很久,很多很多年前我的一位老领导和我说过一句话让我受益匪浅:如果你想在这个行业做到做好,一定要不断发掘自己的潜力,超过别人的时间段不是周一到周五,而是周末别人都在嘻嘻哈哈的时候,如果你每个周末都能给自己定个小目标,然后坚持去完成,你就能慢慢的超越很多人,现实生活中我们会遇到很多阻塞我们的事情,这时候就需要良好的心态来平衡了!坚持!
说了这么多看似题外话的内容,接下来我们还是讲点大家最关心的问题吧:
高级工程师所要达到的技术的要求:
Android的基本知识
四大组件、Fragment、自定义控件、动画、组件之间的消息传递等等,这些都是基本知识也是开发过程中所必须掌握的,同时也是为今后的发展所打的基础,在这个基础上我们还要掌握组建的生命周期呀,activity启动模式的区别和场景应用、scheme跳转协议、 组件之间消息传递的机制、动画的种类和区别、属性动画的特点和作用等
Android的技术难点
AIDL、Binder、多进程、View的绘制流程、事件分发、消息队列等。这类知识对于定位自己为高级Android工程师的人来说是必须掌握的,同时他也是能鉴别高级和初中级工程师的一块试金石,其中binder是Android系统进程间通信最重要的手段之一,现阶段app的发展离不开多进程的运用,经常会启动例如定位、推送等需要在后台开启动的进程来来保证主进程的内存运行;所以合理的使用多进程也是十分必要的;view的绘制是我们自定义控件的理论基础,只有掌握了view是如何绘制的才能个性化的自定义控件;事件分发一直是Android开发的难点之一,也是必须掌握的,后期我也会在博客上推出这个系列;关于handler机制也是android的一块难点,因为包括Asynctask、系统启动、Intentservice等底层都是通过handler来实现的,所以掌握后handler机制不仅能提高你的实战开发能力,更能让你系统的了解整个android系统运作的情况。
网络框架的理解
现如今Android的网络框架可谓纷繁杂乱,但不外乎这三类:网络请求框架、图片加载框架、事件处理框架、IOC框架,其中的代表分别是Retrofit/volley/Okhttp,fresco/glide/picasso,eventbus/rxjava,butterknife/dagger/dagger2,平时应该多看下这些的源码的设计理念,不仅可以纠正我们的一些代码漏洞,我们要知道这些成熟的开源框架在github上已经经过了无数次的检验,所以学习这些框架能快速提高我们的代码能力,毕竟在大家还没有转型前写代码的能力是我们工程师的根本。
Android系统的一些核心机制的运作:
在Android源码中最重要的三个类:ActivityManagerService/PackageManagerService/View,推荐大家周末的时候可以去阅读下这部分的源码,阅读源码能提高我们今后设计架构自己代码的能力,同时也能从底层了解整个android系统的运行原理,其他一些比如主线程的消息循环、主线程如何和AMS如何跨进程交互、SystemServer进程中的各种Service的工作方式、AsyncTask的工作原理等。这些知识也是作为一个Android高级开发工程师必须掌握的,不能整天沉溺于ui和四大组件的交互,要站在更高的角度去考虑Android的有些问题。
5.android编译构建
构建编译打包是我们开发过程中的最后一环,但是也是最容易被很多人忽视的一个知识点,现在的大型app开发团队都有自己的自动化构建工具,比如常用的jenkins,在这个基础上大家要对一些常用的工具有深入的了解:比如git的使用和它的内部原理,gradle如何加快我们编译apk的时间以及它的一些基本语法,proguard的作用和混淆的内部原理,lint是如何来检测我们代码中的问题的和如何自定义lint配置等。
这就是我对于高级工程师的理解。理科生写作风格。。大家见谅!