这总结本应在元旦前写的,只是这两天正好要去参加一个大学同学的婚礼,后来就索性放到今天来写了。这次见着了许多老同学,毕业两年多,时间倒也不长,面孔依然亲切,看上去大家都还是老样子,尚能吃两碗饭。单身的依然是单身,有对象的倒是更进一步煮成了熟饭,看来煮饭还得早点准备米啊。

今天已经是 2017 年的第二天了,最近这几天,大家都在回顾过去的一年,顺便定下新年的目标。虽然每年总结时都会感叹一下年初的计划再次一一落空,但还是依然会写下对来年的期望,想必这其中隐藏着某种神秘的力量,支撑着我们年年写计划、定目标。

回顾 2016 年,人生轨迹并没有什么太大变化,没中什么大奖,也没遇到什么富婆,一整年都在工作。中间换过一次工作,从大而全的团队来到一个小而精的团队。这一年也认识了很多新朋友,当然,也没忘记那些老朋友,同时也很感谢那些给予过支持和帮助的朋友们。

工作

大概估计了一下,今年在公司写了差不多 4~5 万行代码,大概写了 48 篇周报,记了约 180 篇印象笔记。

  • 2月份的时候主要做了两件事,一个是让 UIWebView 支持 WebP 格式的图片的加载,这也是第一次真正接触到 NSURLProtocol 和 URL Loading System;然后就是在原生控件中嵌套 UIWebView 的使用时对 web view 高度的动态调整。这期间碰到了不少坑,后来也是硬着头皮上,不过最终还是把问题都解决了,通过这次填坑也提高了不少信心。

  • 3月份主要是做了一个新人专场的活动,期间也专门针对设备 id 做了次调研,后来我自己索性也总结了一下,写了篇文章《iOS开发:如何获取设备唯一标识?以及多个App间如何共享同一个设备唯一标识?》,截止目前,这篇文章收到了8个赞,阅读量接近3000,虽然写的并不是很满意,但也算是自己对于知识分享的一点尝试。

  • 4月份的做的事情稍微丰富些,包括电商 app 首页改版,颜值提升,A/B 测试等等,这个月和团队里其他几个小伙伴合作开发一个首页,交流的更多,对 git 工作流的理解也更进了一步。这期间也造了几个轮子:自己写了一个首页 UI 框架SCStickyCellHeaderCollectionView;通过学习 MJRefresh 和 SVPullToRefresh,自己写了一个下拉刷新的框架MTRefresh。除此之外,还通过 Instruments 找出了一例机身发热问题的“元凶”;自己没事还写了个用 xcbuild 自动打包的 shell 脚本。

  • 5月份跟前端同学接触的比较多,一起解决了web view 加载 h5 页的性能问题,并开始部分引入 WKWebView 的使用。后来又做了分类导航和搜索这一块的业务,又造了个轮子SCScrollBarController;做搜索和分类时,对 UICollectionViewFlowLayout 和 UICollectionDecrationView 也有了更深入的应用;做三级分类时,充分利用了数据源模式来达到解耦的目的。这期间还简单接触了一下正则表达式。

  • 6月份主要是处理 Native 与 h5 的一些交互,CMS 模板搭建,以及 DeepLink 的实现。期间通过一边读一边翻译的形式(技术文献翻译系列),阅读了一些有关 web view 的官方文档。正如张铁蕾在《技术的正宗与野路子》一文中所说的,看官方文档是学习技术的最佳途径。

  • 7月份主要是做一些关于社区的业务,我自己负责帖子详情和发帖那一块,对于图、文、视频的排版有了初步的认识。

  • 8月份来到了新的团队,开始独自搭建项目框架,参考了田伟宇的iOS 应用架构谈系列,以及 limboy 的 《做一个 App 前需要考虑的几件事》。这一次是真正意义上的从零开始,没有任何现有的体系束缚,所以很多决定都必须要慎重,毕竟好的架构是功在当代,利在千秋的。做的不好,就会以后的路挖坑。还有一件让我印象深刻的事就是卡片动画的实现,这个动画完全是我们自己所设想的,并未模仿任何现有的例子,所以这期间也遇到了不少问题,最终我是通过自定义 UICollectionViewLayout 的动画效果与 pop 框架的结合来实现的;在实现这个动画的过程中,我也意识到,作为程序员,很多问题需要自己去尝试、去设想,没有人(包括设计师、PM)会直接给你一个答案的。

  • 9月份更改过一次产品方向,在业务方面没有遇到什么大问题,只是在技术选型上还缺些经验。

  • 10月份主要是视频聊天这部分的工作,也就是最核心的部分,一是难在技术难点,一是难在业务逻辑复杂度上。① 视频处理需要对滤镜、OpenGL 等图像处理相关技术有所了解。② 在使用第三方 SDK 时遇到不少问题,所以知道如何提问便成了一个很重要的技能。③ 解决问题不要急于下结论,要看清楚问题的本质是什么,再想解决方案,甚至很多问题都是相似的,业界也早已有了成熟的方案。

  • 11月份主要是修复 bug,完善功能,主要工作包括数据缓存(基于YTKKeyValueStore)、日志记录(便于问题诊断)、接入 In-App 调试工具、URL route等。在测试和调试视频聊天功能的过程中遇到不少坑,后来在一前辈的建议下,通过记录日志并同步到服务器的方式来进行诊断,问题得到大大改善。

  • 12月份共提交了两个版本,主要包括首页banner、优惠券、支付流程的更改、新增“跳过”功能、埋点(AOP方式)、cookie 的处理、h5 与 原生的交互等等,在实现过程中,我们针对原来遇到过的坑和以后可能遇到的坑都做了大量讨论。

回头一看,这一年做过的也不算少,但是还是有很多没有更深入,也没有好好总结归纳一下,一方面由于中间有段时间太忙了,时间精力不允许,另一方面也是因为自己的思考也不够深刻。希望自己今年对于改善问题,积极思考方面以及处事的态度能做的更好。

GitHub

2016年在 GitHub 上建了12个repo,有几个还没来得及上传代码,总体来说,还算是差强人意,希望今年能多产几个有质量有思考有意义的repo来。

My Contributions on GitHub in 2016.png

阅读

去年看过的书:

  • 《Objective-C 高级编程》(未读完)
  • 《禅与Objective-C编程艺术》
  • 《iOS Drawing》(未读完)
  • 《Graphics and Animation on iOS》
  • 《iOS Core Animation Advanced Techniques》(未读完)
  • 《MacTalk·人生元编程》

去年看书的时间并不多,最主要的问题是没有延续性,有三本书都只看了一半。有些学过的知识很久不用就会忘了,而学习又是需要时间的,人的精力有限,所以得先想清楚自己当前最需要学习的是什么。除此之外,还有最重要的一点,那就是如何把所学的知识在第一时间应用起来串联起来,不然学完很快就忘了,14年看完 《iOS 编程》那本书,就有很多知识点忘记了。

当然,除了读书,碎片化阅读也算是一种阅读形式。相比2015年,去年我花费了更多的时间到微信公众号上了,也读到了不少高质量的好文。但是这其中有个问题,我自己平时读完后基本上就不管了,碰到不错的就收藏了,这种做法其实收获并不大,这种读法就如同走马观花,一篇好的文章,作者要花上好几个小时,甚至几天的时间来完成,如果读者要消化这些文章,也要花些功夫才行,比如做笔记,反复阅读。当然,对于那些讲究时效性的快餐文,就没有太大必要了。

博客

去年一共写了31篇文章,其中28篇是原创,除去翻译和读后感一类的之外,就只剩下8篇真正原创的了。其实中间写过不少,但很多都是写到一半就停了的。写文章是需要时间的,但我觉得质是比量更重要的。希望今年能够保持每周至少一篇纯原创的频率,记录自己的所思所学。

英语

现在用到英语的地方倒还不少,看文档,写文档,都有要用到英文的地方。但是过去一年,忙于敲代码,忙于加班,也无暇顾及英语学习了。英语角大概去了6到7次的样子,但即便是去了,也没有做太多的准备和回顾,系统地和有意识地学习才能起到作用。今年可以尝试多用一用英语,促使自己有意识地去学习。

新突破

  • 开始使用 Markdown 写博客
  • 开始参加线下英语学习活动
  • 独立完成了一个商业项目

计划

1.每月1本非专业书,一篇读书笔记。

2.每周至少一篇有深度的技术博客,可以是对自己解决过的问题的总结归纳,也可以是学习新技术的体会。

3.每天一篇有思考的总结,长度不限,记录自己的一些经验和思考,以及自己对于工作(产品/设计/技术)或者生活方面的个人见解。

4.至少完成 1 个 side project ,争取把知识盲点和工作中的痛点都打通,比如,2D 绘图,多线程,动画,交互、设计模式等等。(1个半月时间)

5.学习swift ,写一个项目;(预计2个月时间)

6.学习前端开发,自己搭建一个博客。(预计2个月时间)

7.GitHub 上的活动频率不能太少,一年至少300个 contributions。

8.阅读AFNetworking ,SDWebImage ,MJExtension,Aspects,GPUImage,MBProgressHUD,WebViewJavascriptBridge 等常用框架的源码,至少完成前4个(1~1.5w/repo)。

对于我自己来讲,2016年是这几年来收获最多的一年,也是最踏实的一年,但是离理想的自己还远远不够。不管怎样,超越了自己便是进步。2017年需要更多的思考,行动,和坚持。

“但行好事,莫问前程。”
——丙申腊月初五祥龙与你共勉