学习计划

2016年过的很快,回顾这一年发现自己的能力并没有提升多少,曾经有位老司机给我说,每天都在写代码,但是写的核心代码很少,也就是说我们都在写义务,写UI,写一些重复的代码。对此我也发现了这个问题,如何才能提升自己的核心编码能力呢,首先就是要有稳固的基础知识。因此在2017年我也为自己定下第一个目标,看书,做记录。

1.读书计划

对于我来说,我不是一个特别喜欢读书的孩子。网上很多关于iOS进阶的书籍推荐,对于我来说 根据我自己想读的,我列出了几本,有些我已经看过了,但是都是笼统的看了一遍,我需要的是精读,所以今年给自己订一个目标,每看完一本书,就坚持写几篇对应的博客,加深一下理解。下面这几本书是我看的公众号,有一个列出的书单,我觉得和自己的很像,就直接拿过来了。

  • 编写高质量iOS与OS X代码的52个有效方法 (Effective Objective-C 2.0)
    这本书介绍了一些OC的语法技巧,runtime,内存管理等方面的知识,确实很不错,陆陆续续算是看了一遍,但是都没有认真记录,所以趁着2016还没有结束,我打算再认真的看一遍这本书。非常推荐!
  • iOS与OS X多线程和内存管理(Pro Multithreading and Memory Management for iOS and OS X)
    这本书详细介绍iOS的内存管理,不厚,200多页好像,之前也算读过一遍,不过是过目就忘,但是不妨碍我认为这本书绝对算是想要学习iOS内存管理,block的最好的书,没有之一。 重点推荐!
  • iOS.Animations.by.Tutorials.v2.0
    这是Raywenderlich出版的一本关于iOS动画的书,Raywenderlich的书是真不错,基本上每一本都是精品。不管是入门的书或者是进阶的书,强烈推荐去Raywenderlich的网站里面找找你想要学的。今年花了不少时间在动画学习上面,但是如果有时间,这本书我想我应该要再认真读一遍。
  • iOS Core Animation: Advanced Techniques
    这本书同样是介绍iOS动画,但是侧重于介绍CALayer等各种原理行的东西,Raywenderlich的书则侧重在实践上面,各取所需吧,但是如果想要深入了解iOS动画的实现,这一本看完,基本没问题,推荐!
  • HTTP权威指南
    这本HTTP权威指南我一直都想找时间读一遍,可惜每次都是读了一点点就进行不下去了。但是就是这一点点我也认为对我帮助非常大。如果想弄懂iOS中的网络相关知识,强烈推荐先看一下这本书,绝对事半功倍!
  • iOS网络高级编程(Professional IOS Network Programming)
    这本书我没看过,网上有人推荐,因为我也想深入了解一下iOS的网络知识,所以先列入清单。
  • Cocoa设计模式
    设计模式平时在工作中用到的总是那两三种,单例,代理,我想这方面也是我的弱项,需要补一补了。
  • OS X与iOS内核编程
    这本书同样是网上有人推荐的,如果我能把上面所有的书读完,我想我会更加深入的想要了解iOS背后的东西了,不过这本书优先级我应该会放在最低。
  • Swifter - 100 个 Swift 必备 tips
    在之前的项目中一直是使用OC语言开始,但是现在swift这个语言已经很成熟了,如果启动新项目的话,肯定是要启动swift的,所以我应该尽可能熟悉swift的一些使用姿势。

2.代码计划

代码技术,主要是在新的一年里,应该注重自己的代码质量,从代码规范,代码设计,代码封装,代码重构等方面,提升自己的代码的质量,在项目开发中要做到一些几点

  • 要有一颗怀疑的心态
    对于引入的第三方的框架,一定要把源码看明白,保证在使用时出现问题时能够快速解决。
  • 要有一个造轮子的心态
    在开发项目的过程中,在很多页面会用到相同的代码,如何能够提高开发效率,就需要我们把相同功能的代码抽取到一个类中。需要注意的是在造轮子的时候,这个类的设计要尽可能的规范,让别人在使用的使用能够比较顺手。比如封装一个View的时候,需要注意同事支持Frame以及AutoLayout,既能锻炼自己写代码的能力,又能让调用者舒服。
  • 要有一个自信以及大胆尝试的心态
    我们要对自己的代码有信心,信心来源于哪里,这就要求我们对自己的代码要足够的熟悉,另外对自己的代码质量要求很高的要求,大胆尝试的心态,指的是我们要接到一个复杂的交互或者从没有涉及到的技术的时候,要给自己先打个气,自己先去从各个方面先去思考一下,先动手去做,不要直接退缩,这样的话,永远都不会有成长,而且时间久了,会让自己有一个退缩的心态。
  • 保存一颗底层的心
    很多时候,我们都是去调用API去实现自己的需求,但是有的时候,我们并不知道为什么要这样做,这样就会带来一个问题,如果某一个我们调用某一个API突然达不到我们的要求,这个时候我们应该怎么做。这就要求我们对这个方法,或者对这个框架有深入的了解。

3.开源代码学习

从开始做程序猿的时候,心里就有一个梦想,就是要像github上面的那些大牛一样,写出一个个牛逼的框架,有n多start,但是到现在这个梦想还始终只是梦想。我在看这个开源的框架的时候,并没有从根本上弄到这个框架设计的精妙之处,因此无法写出像他们一样牛逼的代码。因此新的一年需要给自己顶一个目标,去看一些优秀的开源框架。

  • iCarousel
    这样拥有8000多个start的框架,是一个实现各种旋转木马的效果的框架,它集成了我们常用类的功能,比如:UIScrollView,UITableView,UICollectionView ,具体牛逼之处只可意会不可言传。
  • ReactiveCocoa
    这个框架有多么厉害,我想不用我多说大家都知道了。以美团为首的第一阵营是这个框架的重度使用者,而且他带来的方便也是有目共睹的,因此必须要学会用它。
  • YTKNetwork
    为什么要学习这个框架,首先在我们的项目中的网络框架使用的就是这个,所以为了更好的使用这个框架,我必须弄懂它。这个是猿题库团队基于AFNetWorking封装的一套网络框架,我们使用MVVM,然后结合这个框架使用感觉很好用。相比 AFNetworking,YTKNetwork 提供了以下更高级的功能:
    • 支持按时间缓存网络请求内容
    • 支持按版本号缓存网络请求内容
    • 支持统一设置服务器和 CDN 的地址
    • 支持检查返回 JSON 内容的合法性
    • 支持文件的断点续传
    • 支持 block 和 delegate 两种模式的回调方式
    • 支持批量的网络请求发送,并统一设置它们的回调(实现在 YTKBatchRequest 类中)
    • 支持方便地设置有相互依赖的网络请求的发送,例如:发送请求 A,根据请求 A 的结果,选择性的发送请求 B 和 C,再根据 B 和 C 的结果,选择性的发送请求 D。(实现在 YTKChainRequest 类中)
    • 支持网络请求 URL 的 filter,可以统一为网络请求加上一些参数,或者修改一些路径。
      定义了一套插件机制,可以很方便地为 YTKNetwork 增加功能。猿题库官方现在提供了一个插件,可以在某些网络请求发起时,在界面上显示“正在加载”的 HUD。
  • Aspects
    这个神奇的类,在我们的项目中我们有用到这个类去做一些埋点的操作。Aspects是一个轻量级的面向切面编程的库。它能允许你在每一个类和每一个实例中存在的方法里面加入任何代码。可以在以下切入点插入代码:before(在原始的方法前执行) / instead(替换原始的方法执行) / after(在原始的方法后执行,默认)。通过Runtime消息转发实现Hook。Aspects会自动的调用super方法,使用method swizzling起来会更加方便。

4.组件化之路

  • 组件化的来源
    随着移动互联网的不断发展,很多程序代码量和业务越来越多,现有架构已经不适合公司业务的发展速度了,很多都面临着重构的问题。
    在公司项目开发中,如果项目比较小,普通的单工程+MVC架构,或者MVVM就可以满足大多数需求了。但是像淘宝、蘑菇街、微信这样的大型项目,原有的单工程架构就不足以满足架构需求了。
    就拿淘宝来说,淘宝在13年开启的“All in 无线”战略中,就将阿里系大多数业务都加入到手机淘宝中,使客户端出现了业务的爆发。在这种情况下,单工程架构则已经远远不能满足现有业务需求了。所以在这种情况下,淘宝在13年开启了插件化架构的重构,后来在14年迎来了手机淘宝有史以来最大规模的重构,将其彻底重构为组件化架构。
  • 为什么要组件化?
    在一个项目越来越大,开发人员越来越多的情况下,项目会遇到很多问题。
    业务模块间划分不清晰,模块之间耦合度很大,非常难维护。
    所有模块代码都编写在一个项目中,测试某个模块或功能,需要编译运行整个项目。
  • 洋葱组件化
    目前我们业务线只有洋葱数学,但是随着业务线的不断扩大,洋葱物理,洋葱化学,等各个学科就会慢慢涌现出现,如果把这些学科都放到一个项目中,就会造成整个项目的逻辑异常复杂,代码量也会急剧性的飙升,因此今年可能会尝试组件化。

5.总结

其实上面列出了这么多之后,我还有一些自己的想法,比如做一个属于自己的项目,抽时间熟悉一些苹果官方的设计文档,深入了解苹果的设计风格,以及深入了解iOS sdk的一些框架的实现原理,上面四条一定要完成的。如果有时间我会在继续做更多的想法。

你可能感兴趣的:(学习计划)