时光荏苒,转眼 iOS 开发已经从最狂热时的“人傻,钱多,速来!”,变成了如今的“iOS 没人要了!”。前段时间也了解到了一些老牌的培训机构已经在削减 iOS 班级的数量甚至停掉了 iOS 培训班。一想到未来有可能后(zhao)继(bu)无(dao)人(ren),我的心中甚是惶恐。
这就是我写下这篇文章的原因:一方面希望能给在如此艰难的时期,仍然选择做一名 iOS 开发者的萌新们一些指导。另一方面也是对我之前两年工作的一个总结和反思,希望能在三年之期,自身技术能够有所进境。
学习 iOS 开发的方法论
首先需要明白的是,iOS 开发是工程问题,而非科研问题。每一位 iOS 开发工程师要做的是把现有的工程组件(各种框架)和公司自身的业务结合起来,做出一款产品(APP)。所以对于初学者来说,真的没必要特别深究其中的底层原理。尤其对于一些非计算机相关专业的同学来说,更是如此。就算你想要知其所以然,也要先知其然不是吗?
当然如果你已经是一名熟练的 iOS 开发者了,那么我想底下这篇文章可以为你的夯实理论基础之路提供一些指导:
按照上文的学习路线坚持走下来,对于软件工程师所必须的一些理论基础学习大有裨益,而且也会对整个计算机科学行业有一定的了解。
其次,在刚入门 iOS 开发这个行业的时候,一些业内大 V 推荐的诸如斯坦福 iOS 开发课程和苹果官方文档等学习材料在我看来非常不适合入门,甚至斯坦福这门课是完全没有必要去看的。斯坦福的 iOS 课程是用来给已经有一定面向对象语言经验的人学习 iOS 开发用的,一上来就是 MVC 了,要是不熟练的人一定一脸懵逼。而苹果官方文档则是缺乏实战例子,如果是初学者看过一遍之后可能连印象都会没有。况且文档本身是英语,对于非英语母语的人来说,还是有一定的障碍的,最好是留在有一定工作经验的时候再看。
最好的学习编程的方法(工程向,不仅限于 iOS ),就是把理论与实践相结合,两手都要抓,两手都要硬。基于这一点,并结合自身的工作经验,做出了一套学习路线图。
第一阶段:教学视频
对于入门级的 iOS 开发者来说,通过视频来学习是最好的方式了。因为如果通过看书或者是其他途径,往往只能一遍又一遍的学习到编程的语法知识,而对于如何开发工程项目却还是保持在一脸懵逼的状态。在大四最后一个学期的时候,我光靠啃书(大概三五本)学习了
Python 这门语言,结果毕业设计绞尽脑汁也只做出来一个极其简单的即时通讯项目,学习效率可想而知。
对于视频的选择,个人推荐李明杰讲的视频(旧版的是传智播客的,新版的是小码哥的)。这也是看过很多之后做出来的选择,授课顺序也较为科学,一路跟着学下来就好了。为了避免侵权,请大家自行前往淘宝购买。(逃
对于视频学习有一个建议,就是最好是先看视频,看完一段视频之后再凭借回忆把视频里的代码写出来,如果实在是想不起来再稍微回过去翻看一下。
iOS 开发中有些技术点是每个项目都必用的,而有些虽然火热(比如直播),但在实际工作中未必能用到,所以我总结了项目中必用的知识点和相对热门但却未必会用上的知识点,供大家参考:
必用知识点
- C、Objective-C 和 Swift 语言语法。 (Swift 可以放一放,反正还要变)
- UI 搭建(主要是 UIKit 框架、绘制、动画)
- 多线程(多线程并发的理论知识、NSOperation 和 GCD 的应用)
- 网络(网络请求的理论知识、如何优雅的发起网络请求)
- 版本管理(SVN、Git 的使用)
- 依赖管理(Cocoapods 的使用)
- 持久化(SQLite、Core Data、Realm)
热门知识点
- 富文本
- 直播
- React Native(Facebook 闷声作大死,马上药丸了~)
- 即时通讯
- 函数响应式编程
- ……
对于初学者而言,最重要的是掌握那些在每个项目中都会用到的知识,而那些热门的知识可以留作课余时间或者工作中遇到了再学,也是都来得及的。
第二阶段:阅读书籍
在第一阶段完成之后,再阅读一些书籍予以补充可以巩固所学的开发知识。iOS 的书籍不算少,在亚马逊上大体上有两百多本,但是良莠不齐。经过我多年的阅(cai)读(keng),推荐几本书供大家巩固基础和进阶使用,请按照顺序阅读。
《Objective-C 编程》讲述 Objective-C 编程语言和基本的 iOS/Mac 开发知识。作者首先从基本的编程概念讲起(变量、条件语句、循环结构等),接着用浅显易懂的语言讲解 Objective-C 和 Foundation 的知识,包括 Objective-C 的基本语法、 Foundation 常用类 、内存管理、常用设计模式等,最后手把手教读者编写完整的、基于事件驱动的
iOS/Mac 应用。作者还穿插介绍了 Objective-C 的高级内容,包括属性、分类和 Block 对象等知识。全书篇幅精炼,内容清晰,适合无编程经验的读者入门学习。
看完《Objective-C 编程》之后,关于 iOS 开发中用到的 C 和 Objective-C 语言相关的知识就基本掌握了,接下来就是:
2、iOS 编程
《iOS 编程》荣获 Jolt 生产力大奖。第 4 版更新了 iOS 7 和 Xcode 5 的内容。全书涵盖了开发 iOS 应用的方方面面。从 Objective-C 基础知识到新增加的语言特性;从 UIKit 库到常见的 Cocoa 设计模式;从
Xcode 技巧到 Instruments 等。如果读者刚接触 iOS 编程,阅读本书前两章可以快速入门。如果读者已经有 iOS 编程经验,阅读本书可以拾遗补缺。
看完《iOS 编程》之后,独立开发一个 iOS APP 基本不成问题了,但是如果想要做到极致,你还需要:
3、iOS 编程实战
本书深入介绍 iOS 7 新特性和新功能,涵盖 iOS 7 大部分新增特性,包括新的后台操作、Core Bluetooth、UIKit 动力学以及 TextKit。另外还介绍了如何处理新的扁平化 UI,并新增了一章你可能不知道的“小技巧”。如果读者熟练掌握 C 和 C++,读完本书即可创建性能优异的
iPhone、iPad 和 iPod touch 应用。
本书主要内容包括:
iOS 7 新特性和新功能概览;
深入解析多任务、多平台、安全服务、应用内购买、自动布局等高级主题;
全面介绍 REST、高级 GCD、本地化和国际化、Core Bluetooth;
细致讲解 UIKit 动力学、自定义过渡及其他内容。
本书助你充分利用 iOS 7 新特性,挑战编程极限,打造非凡应用。
《iOS 编程实战》是一本进阶向的图书,第一遍看一脸懵逼是很正常的,因为其中的很多内容你需要结合实际开发中的经验,对应着去看,才能获得最佳的效果。
《Effective Objective-C 2.0:编写高质量 iOS 与 OS X 代码的 52 个有效方法》是世界级 C++ 开发大师 Scott Meyers 亲自担当顾问编辑的“Effective Software Development Series”系列丛书中的新作,Amazon 全五星评价。从语法、接口与 API 设计、内存管理、框架等 7
大方面总结和探讨了 Objective-C 编程中 52 个鲜为人知和容易被忽视的特性与陷阱。书中包含大量实用范例代码,为编写易于理解、便于维护、易于扩展和高效的 Objective-C 应用提供了解决方案。
《Effective Objective-C 2.0》是 iOS 进阶书籍中最经典的一本,不管是用于优化工程还是准备面试,都是不二之选,但是本书偏工程向,如果希望了解技术细节,请看:
本书在苹果公司公开的源代码基础上,深入剖析了对应用于内存管理的ARC 以及应用于多线程开发的 Blocks 和 GCD。这些新技术看似简单,实则非常容易成为技术开发的陷阱,开发者仅靠阅读苹果公司的文档是不够的。
本书适合有一定基础的iOS 开发者阅读。
《Objective-C 高级编程》是从源码角度讲解了 ARC 、Block 和 GCD 这三种技术的底层实现,非常适合刨根问底,可以说,看完这本书这三方面的技术已经没有可以讲的了。
我认为值得一看的书籍只有如上五本,如果你还有好的书,可以在评论里推荐给我。
第三阶段:网络资料
到了这个阶段,常规的 iOS 开发技术你已经都掌握了,但是编程中的技术变更是很快的,光靠书和视频是远远不够的,这时候只能去网上寻找对应的资料了。
如果你开发中想寻找对应的资料,推荐使用 Google。不是说百度搜索技术不行,问题在于百度搜索出的内容重复率太高,不推荐。但是如果有人跟你说让你用 Bing,那么你可以直接让他 Go Die
了,本人亲测还不如百度。
如果你在开发中想找一个现成的第三方库,请去 Github
如果你在开发中遇到了你解决不了的问题,请去 Stackoverflow
如果你听说了一种新技术并想学习一下,请去 Raywenderlich
如果你想看看大神(AFNetworking 作者)最近在研究些啥,请去
NSHipster
当然还有 Objcio,是一个博客集合站,你不容错过。
当然,随着你工作经验的增长,一定会遇到许许多多的 iOS 开发者,多跟他们交朋友,你得到的提升将不只是技术,还有人生。
希望随着寒冬过去,我们每个人都能找到心仪的工作,收获美好的人生。
祝好。
PS:不要问我 Swift 应该怎样找资料,我马上也要第四次学习了,一起吧。
PPS:昨晚文章发到朋友圈之后,有非科班的开发者给我提了一些意见,我放在下面,供非科班的开发者们参考。
以我个人经验来说(非计算机):
1、推荐网易云课堂翁恺老师的C语言,和何以钦老师数据结构,也许看不懂,不过没关系,这两门课使我的思维从其他行业切换到计算机。
2、推荐斯坦福课程基本上一直在更新从OC到Swift都包含,从语法到项目,有字幕有代码,逻辑清晰。
3、各种视频资源(但是时间效率太低,进度好慢,从我一路看过来之后我觉得这一步其实意义不大)特别是李明杰老师的更多的是给我一个思想,为了就业大多知识点到为止,并不深入。
4、高质量博客,文档,github源码。
5、最后也是最重要学习的能力,资料检索能力,学会学习。仅个人经验,相互探讨。
其实第一点,现在还是我反复看,新的好多技术只是皮囊,要寻找不变量。每天都是业务UI又是会很迷茫,内心也不踏实,反过头来补补基础知识使内心平静,也能写出更好的代码
如果觉得我写的还不错,请关注我的微博@小橘爷,交个朋友吧~