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