1. 做一个有 ‘特色’ 的程序员
Android 开发,本身并不是一个可以走得多远的方向,真正有价值的地方在于与具体的业务方向结合,比如:Android 与音视频技术,Android 与智能硬件交互,Android 与前端技术的融合与探索,Android 信息安全,Android 源码深度定制等等……早日找到一个感兴趣的方向,深入探索和积累,而不仅仅局限于研究 Android API 本身,这样才能走得更远,才能有更好的前途。”
所以,要让自己在团队里更加有 “存在感”,要想将来的发展越来越好,你就不应该只满足成为一个会写 App 界面的 Android Programmer,而是要差异化地 “积累” 自己感兴趣的技术,并且成为这个领域的专家。
2. 善于总结排查问题的工具和技能
今年我有遇到一些客户的 Android 开发者,竟然不知道如何在命令行下用 adb 打 log 或者不知道怎么过滤 log,着实让我感到惊讶,打印和分析日志也是程序员的一项基本功,而且我们还不应该仅局限于此,我们还应该在工作中不断去积累一些有用分析手段、分析工具和网站,比如:
- 如何检测 Android 的内存泄漏、CPU 占用、Memory 占用
- 如何用 ndk-stack 分析 Android Native 库的 crash
- 如何用 wireshark , tcpdump 抓包以及分析协议问题
- 如何用 curl, dig, mtr, telnet, netstat 等命令排查网络问题
- 如何验证 YUV 数据、PCM 数据是否正确
- 如何分析 RTMP流、HLS流的异常、卡顿、时间戳等问题
3. 做事情要设定 deadline,完成比完美更重要
身在互联网行业我们能做的,就是要有一套自己的 “优先级”,先出版本,再谈优化。
有的时候,懂得合理地细化任务,也是一种能力。一般我拿到一个大的需求,肯定会把它细化成一个个小的任务,并且按照如下标准来进行分类和排序,甚至给出每个小任务的 deadline :
- 基础模块,其他工作需要依赖此模块
- 涉及到接口的定义或者修改的工作
- 当前必须支持的功能点
- 可以后期增加的功能点
- 可以后期优化的地方
当然,根据实际情况还可以继续细分。每当做完一个小的任务,就会先充分地测试,保证其正确性和稳定性后,保存一个版本,当必须支持的功能点完成后,至少已经有了一个可交付的版本了。
这里还需要强调的一点是,“完成” 并不是说带着很多 Bug 的完成,而是说一个稳定但不一定功能齐全的版本,因此,千万不要用 “完成而不完美” 作为忽略交付质量的借口。
4. 知其然也要知其所以然
这是一个老生常谈的话题,但是确确实实很多人没有做到,特别是在面试的时候,经常遇到很多人对自己亲自做过的东西理解完全不够,这可能是一个态度问题,不愿意花时间去钻研,或许这种钻研的确是一个比较费脑细胞的过程,但对于那些对技术充满热情的人,其实是一种享受。
举个例子:对于播放器开发,不能只是做过,或者用过,尽可能知道其原理。列举最常见的3 个问题:
- 从传入 URL 到第一帧视频渲染成功的整个流程
- 播放器有几个缓冲区,如何管理的,如何设计的
- 音视频同步是如何实现的
每个问题都可以再深挖几层,基本上可以判断其掌握程度和钻研精神,会用第三方播放器的人很多,会用 ffmpeg 的人也逐渐变多,但能改 ffmpeg 能自己解析流媒体协议,能自己编写出播放器的人,才能成为这个领域真正的大牛 。