引言:最近其实还算忙的,但忙的同时又感觉空虚,可能这种忙是一种舒适区的假象,反而我觉得这段时间个人对技术的理解或者热情没有变强,个人成长的速度也在变慢。前两天和leader聊了一下自己的近况和以后职业发展的规划,聊的时间不长,可能一小时不到,而且后面基本发展成了技术讨论。。。。但是现在的确是个合适的时候点来总结一下自己近两年在这个行业的收获、理解、不足和规划。(本篇就不对个人的技术收获和不足展开长篇大论,毕竟这篇偏碎碎念~)


和leader聊天的过程中谈到了工作效率,leader给了一些建议,当然我自己在工作中其实也总结了一些最佳实践,我在下面的叙述中尝试总结一下(一般很难每天或者每次coding都按这种实践来做,但这些确实有助于提高效率。)

生产环境

先说一下工作环境,miui的迭代类似敏捷开发,每周都有一个版本的迭代,或是新feature,或是bugfix,这对软件开发、测试、管理而言都是一个不小的挑战,而且这些还得基于rom的质量(性能,功耗)作为保证前提。在密集的开发环境中找到高效率的工作模式对开发者而言是一个很重要的事情,下面提供一些工作效率上的经验和思路。

时间和任务分配

关于任务分配通常分为四种:

  • 重要而紧急
  • 紧急而不重要
  • 重要而不紧急
  • 不紧急而不重要

时间上的优先级大致如上顺序,我们暂且叫第一原则。
但是还可以再细分,我喜欢按难度来细分任务:

比如一个重要而紧急的任务——”我要完成一个新功能的开发,这个功能需要在较短的周期内上线”。那就细分一下这个功能,我们假设这个功能在交互上的开发略简单但是可能代码量不少调试的过程比较长(需要涉及适配各个机型,需要和产品以及设计商讨交互细节)我们暂且把ui上的难度级别定义为c,后台整体的逻辑框架搭建较难且代码量大我们定义为a(需要思考如何搭建一个解耦合,易用性高,可读性强,鲁棒性强的框架),接口、model的开发部分我们定义为b,调试部分定义为d。

所以现在有了一个新的任务分配。

  • a 难度高代码量大
  • b 难度高代码量小
  • c 难度低代码量大
  • d 难度低代码量小

接下来就可以引入时间效率这个概率了。

每个人一天中的每段时间时间效率都是不一样的,就我而言,我时间效率最高的时间点是上午9-11,这段时间我会用来处理a和b类型的工作,因为这段时间我的大脑思维最为活跃处理复杂问题速度最快,过了这段时间比如接近要吃午饭了,我可能会转而去做d类型的工作,而下午这段时间我会做c的事情顺便处理一些反馈的bug。当然这是理想情况,如果中间插入紧急事情,那还是按第一原则来,优先处理紧急事情。

这里我还推荐用Todolist来帮助自己完成任务规划,特别是有很多任务一涌而上的时候todolist可以很快为我们整理思绪并专注在两三件事情上。

工作细节优化

雷总常说细节决定品质,工作上也是一样的,优秀的对细节把控的能力是提高效率的利器。

  • 善用开发工具和快捷操作。(这个不多说了,工程师都懂得)
  • 提测前一定先自测并尽量想到各种cornel-case,减少因为来回提测导致的不必要的时间浪费。
  • 整合change,可以将一些change整合在一起提测或者将一些change合并。
  • 开发中一定注意编程规范(包括可读性),一定要考虑异常情况(空指针,多线程并发,oom),同时也要关注性能和交互。
  • log日志分析能力,快速查找定位问题并解决(建议了解android日志系统原理)
  • 善用搜索引擎和收藏夹
  • 对各个业务的熟悉程度,方便与各个业务负责人对接
  • 对生产环节的熟悉程度,便于规划工作时间表
    ….

沟通素质(先不提这部分)

大致分为:

  • 向上沟通
  • 同级沟通
  • 跨职能沟通

核心素质

以上很重要,但不是你的核心竞争能力,核心依旧是作为一名开发者的技术能力,所以我大概想通了为啥和leader聊着聊着变成了技术面试(手动滑稽),其实我之前也思考过这个问题,android开发的职业规划到底是怎样?能手写组件?能搭建框架?能写漂亮的UI?能关注解决性能问题?对framework和binder有深入理解和研究……

这些都是。但总结而言是知识深度和实践能力

比如写一个自定义button,如果你的知识仅限于在布局中写各种属性,我想很难写出一个漂亮的button,如果你懂android动画,深刻理解view的绘制过程,甚至对事件分发有深刻理解,我想下次需要你写出一款交互优良的button时问题并不大。

比如需要你分析异常,你对framework的阅读能力、分析能力,对android日志系统的理解,各种命令的熟悉程度均可以帮助你快速找到问题。

比如需要你在跨进程通信里面做一些文章,你对android binder架构的理解和分析就会有帮助。

比如你需要搭建一个可用性高的框架,你对组件化、解耦合、设计模式、mvp、mvc、mvvm的理解和实践就会帮你打造一个稳定且易用的框架。

实践其实是对你知识理解的二次巩固,空有阅读没有实践很难让你对技术原理有深刻的理解体会,所以leader对我说你可以试试写个listview….我想这大概是个好方法。

小米有个工程师总结了android的学习脑图,大致就是作为app层开发者的职业生涯需要探索的方向吧,如果你是android系统工程师或者是驱动适配工程师你可能需要其他的脑图~

android学习脑图

当然我觉得身为开发者有一些能力是基础且共通的:

  • 算法和数据结构
  • 计算机网络
  • 操作系统原理
  • 设计模式
  • 对主流语言的理解
  • 数据库原理
  • 对技术的热情,对新技术的敏感
while(developer) {
 reading
 thinking    
 summarizing    
 practicing
}

写在最后,大家共勉。