我的 2013
今年很长一段时间都感觉很迷茫。
身边好几个做开发的同学说想转产品,我该如何规划自己的职业方向?继续深钻技术 or 尝试转型产品?
毕业后才发现想学的技术领域真的好多,但精力明显不够。
是继续做 Android 应用开发?还是深入底层 Framework 甚至 ROM 开发?抑或是回到暴利的游戏行业做 Ccos2d-x / Unity3D 开发?
公司技术老大甚至曾建议我重新回去写 Java Web.
第一点很快便明确,自己更适合做技术(同事也这么认为),但是也需要对产品和设计有一定了解。
技术方面则一直处于不断摸索中。
巩固 Android 大本营
这个目前属于谋生的技能,当然需要不断加强。
对公司的项目代码进行了重构,主要是 ViewPager
动态预加载逻辑重写和封装,以及自己从头实现瀑布流组件。
熟悉了 GitHub 上的一些开源项目:Afinal 、
UniversalImageLoader 、
AsyncHttpClient 、
Zxing 、
RootManager 等,并运用到了实际项目中。
将自己平时写的代码进行整理,也陆续开源了一些项目:Roid-Library 、
AND-WebP 、
AND-Waterfall 、
Roid-PullToRefresh 、
AND-ScrollViewX 等。
通过一些书籍对 Android 开发有了更深入的理解:
《Android 内核剖析》,主要看了『View 工作原理』这部分内容,因为平常开发自己写组件经常会用到。
《深入理解 Android 卷 I》、《深入理解 Android 卷 II》,主要看了下
init
、zygote
、ActivityManagerService
、Binder
等相关内容。《Android 应用性能优化》,主要看了『时间测量』、『方法跟踪』、『布局优化』方面的内容。
《Android 软件安全与逆向分析》,主要看了『反破解技术』这部分内容,这篇文章算是总结。
试水 WinPhone8 未果
年初的时候很看好 WP8,觉得在很多方面都介于 iOS 和 Android 之间,算是取长补短。本身也比较喜欢 Metro UI,经过亲身体验更觉爱不释手,512M RAM 就已经相当流畅!
之前本身在大学就是 C++ / .NET 转过来的,有 C# 基础,于是果断入手了一台 HTC 8S,并买了一本《深入浅出 Windows Phone 8 开发》开始搞起。
记得当时还为自己用大学的 .edu 帐号注册了个免费的开发者帐号(每年能节省 $ 99)而兴奋不已。
但好景不长,刚过完 UI 编程进入『数据存储』部分,HTC 8S 即被盗。
加上 WP8 本身一直市场表现不佳,形成了”用户少 -> 开发者热情不高 -> 应用匮乏 -> 用户少”的恶性循环。
确实如同某些人所说,WP8 生不逢时,诞生之时 iOS + Android 就已经占据了 90% 左右份额,加上没有特别刺激用户的亮点,最终只能沦为消化 Sybian 和 BlackBerry 市场份额的角色。
最后连公司都放弃了原本定于年中投入 WP8 版本开发的计划,所以这个尝试最终不了了之。
重返游戏行业希望渺茫
11 年校招签的五分钟网络,12 年 2 月过去实习了三个月,期间虽然除了一个 Android 应用项目外并未参与任何手游项目,但对手游开发还是产生了浓厚的兴趣,并学习了一系列游戏开发框架技术:LibGDX 、Rokon 、Cocos2d-X 等,虽然只写过一个 demo 和简单的五子棋。
后来公司因为融资失败,加上好几个项目亏损,大量裁员,被迫离开公司。最终由于很多原因(主要是没有游戏开发实际项目经验),离开了游戏行业,进入了互联网公司做 Android 应用开发。
当初只是权宜之计,加上上海这边认识的大部分是做游戏的(除了两个写 PHP 的大学同学),他们也劝我回去做手游。而且近年来手游行业的火爆更是让不少移动开发者眼红。
因此业余我又买了《Cocos2d-x 高级开发教程》和《Unity 3D 游戏开发》开始学习手游开发,但经过几次面试发现困难重重:要么公司不靠谱(比如让你过去负责 Flash 游戏向 Android 平台的打包),要么依然觉得你游戏开发项目经验不足。
而且后来一想,就算别人愿意要你,你过去得从最底层做起,对于一个已经具备两年左右 Android 开发经验的程序员来说,那个薪资水平肯定让你心理上很难接受。
最后还是想通了,”隔行如隔山”这句话一点没错,IT 行业本就是日新月异,当你离开一个行业长达一年以上,也就基本沦为门外汉了。
不过还是会持续关注手游行业,特别是 Cocos2d-x 、Unity3D 、UnReal Engine 、CryEngine 等技术。
首次接私活
对于接私活,虽然很多同行在做,家里人也比较主张,但我始终觉得没必要为了这些眼前利益而浪费宝贵的业余学习时间。
因此之前有两个前同事给我介绍的 Android 外包项目我都婉拒了。但国庆前夕又有个前同事给介绍,而且也是以前一个项目组的,人不错,实在不好再次推脱。
这项目原本是是五角场大学路那边一个小公司接的日本外包项目,后端和设计资源他们负责,我只需要负责 Android 端。
业务其实并不复杂,连续扫描三张二维码,然后识别出文本数据,不过这数据是经过特定算法加密的(就像火车票上的),解密后和 16 张图片一起上传到服务端就 OK 了。
技术实现上难度也不大,用我的 Roid-Library 快速搭建项目,然后加上扫描二维码的 Zxing,以及自定义 Camera
、Bitmap
处理等技术,基本一天就搞定了。
但首次体会到,做外包其实最大的成本就是沟通方面!比如那边设计给的 icon 居然是 .ico
格式,9.png
也不知道为何物,给的 Button 切图也不知道至少得两种状态,无力吐槽…
最后拖了一个多月才完成交接,虽然得到了 5K 的”零花钱”,但感觉这成本太大了,因此短期内不会再考虑。
重新拥抱 Web
当时大三顺利由 JavaEE 转到 Android,还觉得自己挺幸运的,赶上了移动互联网浪潮,并一度看衰 Web。
毕业把一大堆 JavaEE 相关的书籍都贱卖了,除了毕业设计因为 Android 需要通过 WebService 和后端通信而采用了 JAX-WS,后来几乎完全不关注 Web 开发领域了。
但随着接触到云计算、大数据这些概念,重新认识到了 Web 的重要性:没有 Web,没有云,任你 iOS 多受人追捧,任你 Android 份额多大,你也就只能跑一些简单的本地 APP。
于是开始重新接触 Web 开发,首先是 Golang,特意买了一本《Go Web 编程》,惊叹于它的语法和设计,但考虑到不成熟(虽然国内已经有七牛等公司在用),毕竟社区生态不够完善,玩一玩还是可以,想用来做大型项目就得深思熟虑了。
至少 AppEngine 方面就只有墙外的 GAE 支持,而且 Google 的项目你懂的,说不定哪天就像 Google Reader 一样被砍掉了。
Ruby 也是同理,少数人玩的游戏,浅尝则止。
至于 Python?虽然知道它适合快速开发,但考虑到效率(之前公司后端都开始逐渐从原来的 Python 转到 Java 了),而且之前大学也学过一点,很不喜欢它的语法。因此基本不予考虑。
最终选择了重抄旧业 – JavaEE,虽然有点不情愿(SSH 那些臃肿而笨重的框架用起来真的很烦),但毕竟有众多的成熟的开源解决方案。而且由于是重新捡起来,学习成本也最小。
最近开始关注 Play! ,据说就是瞄准了 Ruby On Rails 的快速开发特性。
然后还一口气买了《Java Web 整合开发王者归来》、《Java 并发编程实战》、《大型网站技术架构-核心原理与案例分析》、《大规模分布式存储系统-原理解析与架构实战》、《实用负载均衡技术-网站性能优化攻略》、《软件框架设计的艺术》、《淘宝技术这十年》等一大堆书,有空慢慢看吧。
其他收获
开始使用 GitHub 和 Bitbucket 管理和维护自己的项目,非代码文档采用 Evernote + Dropbox 同步,摒弃了之前用的 Ubuntu One;
申请了自己的域名,配置了自己的域名邮箱(首先是用的 ZOHO ,后来改用腾讯的企业邮箱),然后通过 Octopress + Heroku 搭建了自己的博客,并尽量把开发中遇到的问题记录下来;
业余时间写了个 Android RSS 阅读器,算是温习了下 Dom4j 和 SQLite 等技术; ([项目代码][30])
发现了知乎这个神奇的网站(其实是通过 Quora 间接知道的),不仅 UI 和 UE 上高大上、小清新,而且里面有很多专业领域的高质量内容,非常喜欢;
2014 年计划
技术方面:
继续深入 Android 相关技术的学习,主要是围绕之前买的那几本未曾深入研究的书;
贯彻落实『重返 Web』战略,特别是系统架构方面的内容,而不仅限于掌握 Web 框架使用;
熟悉 Obj-C 语法,入门 iOS 开发。不求精通,至少应具备独立完成一般项目的能力;
坚持写博客,记录开发中遇到的问题,但不仅限于此,尽量保证平均每个月至少 1 ~ 2 篇;
持续关注和研究开源项目,继续尝试感兴趣的新技术,以及个人项目的维护;
生活方面:
不局限于技术书籍,平时多阅读其他领域的内容,比如历史等;
善待自己的身体,不求每天都坚持锻炼,但至少做到早睡早起、合理健康膳食;
克服不良习惯,克制不良情绪,多沟通交流,保持乐观、激情;
情感方面,顺其自然,切勿焦躁;做好自己,静待缘分;
计划赶不上变化,先写到这里。