一位iOS开发者的进阶之旅

背景

这篇文章来源于v2ex上的一个帖子:"iOS开发有什么国人写的比较好的书籍推荐?"(原文连接)。这里汇总的基本都是lujie2012的回答,另外我还附带了一些他与别人的讨论内容。虽然帖子题目是推荐iOS书籍,但设计内容已经超出了这个题目,在我看来其中还迸发出不少有意思的观点,因此就想把内容整理出来。在通过其本人赞成以后,有了以下内容,但愿对你们有所帮助。前端

正文

推荐书籍

本人以前是从 Object-C 开始入门 iOS,所有自我学习写项目找工做混饭吃。由于以前犯过大部分 iOS 开发者犯过的错,没有深刻学习知识,没有得到长进。我决心从新在 iOS 方向深刻认真的投入一次,看本身能够扎入的有多深。nginx

我开始没有关注 Swift,如今 Swift 成熟了,因此决定从头开始学习 iOS 的一切东西。后面 19 年开启 Swift,二次学习 iOS 开发,也感受到突破了本身头顶那块天花板。我10个月看了10多本本身买的书,还为业务补充了好多知识,有坚持不下去的时候,可是就想把项目上线。最后克服了困难,回过头有收获和总结,我如今爱上了看技术书籍,钻的越细愈加现有趣,也想去看算法了。相似写论文同样,没有秘密,直接分析到底。目前在模块化接入 Flutter,React Native,两端开发速度不同,某些功能由 H5 作,咱们就很闲了。如今的目标差很少就是把 Flutter 玩转,基本是二次从头学习 iOS 花了 1 年时间告一段落。程序员

期间啃的书,有些是objccn里喵神的书,这些书对iOS开发帮助仍是挺大的,其他都是些比较经典的技术书。面试

这些书我都看过一遍。(如下是笔者对书籍汇总成的一个表格)算法

分类 书名
Objective-C Objective-C程序设计
Objective-C高级编程
Effective Objective-C 2.0
Swift Swift权威指南
Swifter 100个Swift2 开发必备Tip
Swift进阶
Swift经常使用算法
函数式Swift
iOS iOS数据库应用高级编程
iOS动画核心技术与案例实战
iOS Auto Layout 开发秘籍
高性能iOS应用开发
iOS测试指南
iOS应用逆向工程
LLVM COOKBOOK 中文版
AV Foundation开发秘籍
Core Data 应用开发实践指南
Core Data
其余计算机书籍 SQLITE权威指南
图解数据结构与算法
数据结构与算法经典问题解析(Java语言描述)
数据结构教程
Java 9编程参考官方大全
Java并发编程实战
深刻理解Java虚拟机
深刻理解Nginx
Tomcat内核设计剖析
C Primer Plus 中文版
音视频开发进阶指南

另外须要补充的内容还有,tomcat 源码、nginx 源码、关于 HTTP 协议后端相关的东西。不少东西,写不成书,由于自己没有多少内容,有些东西只有国外有,可是 400 块,没有翻译版本。例如关于布局,从frame-》 constriants-》 archor-》到 StackView 其实苹果也是在不断的提供解决方案,目前最好的布局方案就是 stackview + anchor + constraint,可是没有这么一本介绍这些内容的书,我也是翻边了官方文档,在各自项目中看到蛛丝马迹去思考对比的。spring

其余学习途径

老话长谈,最好的资料是苹果官方开发者文档,官方的 WWDC Session。为了更深刻理解苹果产品,我把历年的 WWDC 都看了一遍,从 2007 年 iOS6到2017年发布iphoneX,每一年差很少 100 个介绍最新技术和解决方案的视频,并且内容含金量还很是高。哈哈,学到了不少苹果产品使用高级用法,体验了好多产品介绍。sql

iOS 开发者必定要关注 boxue 网站,能够的话买个终身会员,下载博主的 app,看看他的项目架构,里面的视频学起来。我 boxue 完成了 156 个 iOS 的视频,终身会员。boxue 的视频看一遍懂一点点,过段时间在看,又有一点点理解,例如 RxSwift,Protocol,Sequence 这些。另外能够结合 objccn 里喵神的那三本书,我是买了一块儿看的,它会使你对 swift 的写法和运用更高阶,让你的思想更接近 apple 官方或者大牛。例如序列化,持久化,函数编程,这些流行的概念能够带入项目中。数据库

真心经验分享,中文书籍的东西只能看到 30%的技术,英文书籍的东西能够看到 50%,还有 50%在官方英文文档,各位必定要学好英语,在官方找一手资料和解决方案。这样就慢慢能够成为 Contributor,为社区贡献代码和解决方案,成为开拓者了。否则永远只是旁观者,玩技术,就但愿把它玩到极致对吧,比如玩音乐,玩音乐的的境界能够看 Vista 2002 年演唱会。编程

另外,以上学习最难的是什么,是英语水平!!!! 我如今天天学习英语,英语水平上来了,感受发动机动力杠杠的。二手知识基本过期,想要成为一流,那么英语水平就得要一流,差很少雅思 7 分这个水平。写代码看资料,以为不是一个等级哦。小程序

感谢公司提供的英语学习网站,https://english-bell.com.tw/default.aspx 。我大概充了 1 万 8,坚持天天 25 分钟的一节课学习 DME,如今学习了 300 天,学习英语推荐:购买朗文当代+DLL ebook + English bell,使用 SKype 上课,菲律宾老师 24 小时能够学习。

更多的讨论

若是学 iOS 都没有用过 CoreData,或者 Sqlite 进行持久化,那么几乎不可能成为高阶程序员。CoreData 当然难用,难学,可是我我的认为必须耐心学完,必须每一个项目都使用,里面的设计思想和理论都颇有用,每一年的 WWDC 都有 session 讲解这一块。

iOS 自己知识的书籍不是不少,更多的是须要你去查阅官方文档去理解学习。有不少内容是涉及视图绘制技术,音频,网络这些,他们自己是最基础的东西,可是苹果没有给你知识辅导,不自学这些,只会使用苹果API,永远都只懂皮毛。以为 iOS 端没有东西,其实东西多的很,例如 socket 编程,什么语言均可以实现,什么平台都有,可是 iOS 没有告诉你这个很重要,你就不学,不深刻,调用一下 API 就行了。其实这才是真正的技术,再深挖就是 TCP/IP 协议,蓝牙协议,学编程要不要学这个呢?学 iOS 要不要学这些呢,确定的,作程序员,不学这些就永远停留在初中级水平,35岁等着被淘汰。

当你学了这些底层知识,例如7层网络协议,就会明白什么技术和语言都是起始于二进制。字节编码,变成 Unicode,变成语言。那么语言写好的代码,变成什么呢?写好的代码变成汇编语言、command、再变成二进制,用户安装二进制,二进制再在运行环境变成 code,再执行逻辑。不懂编译器原理,怎么优化代码,怎么去作安全加固,反 hook ?

如此思考,HTTP 到数据的展现是最简单的编程工做。最近我在想一切的数据通信,例如家里的电视遥控器,怎么作数据交互,转换,传播。光波,红外线,wifi,5G,想象最底层的实现和全路径思考才有意思。因此,计算本科教育虽然水,可是如今想一想那时候用的滤波器和调制解调器,上模电不知道干什么,如今工做后,慢慢都明白了,这就是本科专业教育的本质和做用。系统的教育才是有意义的,为何学高数,如今才多少明白了些。

对了,你对加密了解清楚吗? HTPPS 怎么实现的知道吗,看过源码实现吗?程序员对加密都不清楚,那真的不算高阶程序员。openSSL 库,均可以让你玩好久。iOS 也好,Android 也好,只是各自技术封装的一个平台,用于解决必定的问题。当你看透本质了解一个平台真正的东西,那么你也将知道技术的发展都是有着类似的规律的。

有个题外话,iOS 有出路么?你把他当成 HTTP + 页面来玩天花板确实很低,但你以iOS为出发点,研究整个系统体系,那天花板无限高。将来 20 年,领先技术和先进应用基本都会是移动领域带领的变革。

不要以为iOS开发上限很低,iOS 岗位也很细的,你能够玩日志系统,埋点系统,推送系统,crash 系统,socket 聊天系统,实时在线系统,视频系统,相机系统,地理位置系统,三维系统,AR 系统,声音系统,安全系统。玩的东西多了呢!没有饭吃?没有前途?大部分人是岗位,是项目驱动,我也是,没有事情没有遇到难题就不会进步。但仍是要自我驱动,不断往上拔,才能离那个最高处的天花板更近一些。

比如玩音乐,写歌做曲,你能为所欲为组合,基本是就是高级人才了。写代码同样,要玩它,玩技术,否则白费了那些年的教育。对于业务和技术,等你技术积累到必定程度,我我的倾向于先作技术专家靠谱一点。谁是榜样呢? JSPatch 的做者就是榜样,被挖到蚂蚁 P8 !时间对每一个人都是公平的,记着不要重复劳动,要迭代你的技术,不断思考。看最底层的书,思考最底层的原理,你就不会迷茫。

问答环节

问:CoreData 有什么特别好的场景使用吗,我作了五年了,都是用的 sqlite 。

答:CoreData 最大的好处是他们的设计思想和结构,能够买来 《CoreData 应用开发与实践》+ 《Core Data》 看看。我也是看了这两本才明白 CoreData 真正的含义,但它也有个很大的缺陷:没有加密!!!!! 大部分项目采用 Sqlite 是为了加密!本质 CoreData 底层也是 Sqlite,它就是对Sqlite的一层封装。你想一想手机相册 1 万多张照片,他们的存储和检索,不知相册,官方不少APP应该都用了 CoreData 来实现。会玩 CoreData,确定会玩 Sqlite 。最好在项目里使用,用着用着就熟练了。Sqlite 作版本管理和迁移更方便,直接 SQL 操做数据库。个人建议是最好二者都学一下,都用起来。

问:我也一直在学习前端跟 iOS,为之后作独立开发者进行技术储备。但我历来不去研究背后深刻的技术原理,CSAPP(Computer Systems A Programmer's Perspective 中译:深刻理解计算机系统) 包括操做系统相关的书我至少读了 3 遍,但这些跟 IOS 开发基本上半毛钱关系都没有,由于 APP 跟操做系统原理至少离了十万八千里的距离,另外就是这些底层知识根本用不上,大部分独立开发都是业务驱动的,有钱才有技术研究的需求,除了音频、视频等特殊算法场景,大部分技术方面的需求都是业务驱动的 UI 交互跟业务计算。

答:不争辩,我以前想说明通常程序员和高阶程序员解决问题思路问题。学习 7 层协议,不是造轮子,是知道水的源头。平台语言个有喜好,萝卜白菜各有所爱,兴趣是最好的老师,好奇心是最好的动力。小程序,Weex,React 不是不会写,API 文档看一下,组件模块用一用,市面上什么样的 APP 搞不定?可是性能优化,高级特性,没有足够功力你能搞定?前端目前大量时间涉及 UI 开发,后端须要算法,若是不本身去补充知识,那么所谓大前端天花板固然低。阿里前端高 P 多仍是后端高 P多,固然是后端高 P 多啊。But,无论哪一个方向,最重要是成为专家。成为专家只看到本身项目范围内的知识确定不够,前端不能看后端知识吗?我把 tomcat,ngnix,spring 源码都看过,固然也忘记了,可是我就是想知道数据通道怎么创建,TCP 怎么维护。google 牛皮就是发现目前协议不行,本身改协议、加密算法、HTTP2 通讯、消息协议、TCP 协议,它勇于创新和实践。目前的我相对业务和赚钱,我更关注技术,只会应用技术是大部分人,but 要成为专家只有极少数人才能够作到,由于那要学好多东西哦。

再举个例子吧,Rx 这个东西,Java 有 RxJava, JS 有 Rxjs,iOS 有 RxSwift。如今各个平台都是把对方好的设计和轮子拿过来,编程思想和设计思想是同样的。可是由于编程语言和平台业务特性,没有机会接触更好的东西。那么就须要突破官方提供的限制,用编程思想来设计和架构改造本身的项目。若是只安于会基本使用语言,不精通语言,了解背后的逻辑,那么永远是入不了程序员门的。

移动互联网热的时候,培训班培训一下就能够干活,拿高薪。但高薪不该该是你作程序员的惟一缘由,互联网发展的本质是技术结合业务,最后带来经济繁荣,技术永远是第一驱动力。而程序员就正是创造技术,运用技术,推进互联网繁荣最关键的一环,做为这个时代的弄潮咱们应该很光荣才对。

我我的计划是学习英语+开发,在成为高级开发的同时,不断提升英语水平好,开阔本身的视野。东南亚,海外市场不是没有机会。固然,在目前巨头林立的环境下,你本身单干,那确定一个浪花就没了。

问:如今 APP 成本太高,中小公司基本都不重视这一块了,并且目前一样三年经验的后端、前端、移动端,iOS 可能属于比较没有地位的了; 看你说的只会写应用层就不行了?通常公司原本就是面向业务编程,能解决业务问题,移动端通常公司哪管你那么多技术问题;还有一个更严重的问题,就是通常去面试 iOS 的公司,面试造轮船的风气实在过重了,大部分进去不就是个 UI 仔嘛,认清现实吧,本人面过其余技术,比 iOS好的多。

答:每一个公司开发 APP 都想造航母,如今的确这样。就是大部分进去以后变成 UI 仔,因此我才建议若是从事 iOS 或者移动端开发,必定要自我学习,自我突破限制。我以前和一位同事一块儿作 iOS 端,后面他转了 JAVA 还升职了。But我始终认为咱们项目的技术解决方案和技术不够强,不是没有业务,业务好的很,可是就是感受移动端开发节奏和技术体系太碎片,每一个人一个模块,最后重复劳动,效率还不高。对于这样的现实,确定须要提高自我去解决,而不是等待机会。也正所以,产生了 Weex,React Native,Flutter 这样快速解决两端,热部署的技术,解放 UI 仔。

不讨论了, 看 Flutter 文档了。iOS 有没有人要,确定要,前提你真正的热爱写代码,能够分析问题,解决问题,了解编程本质,精通OC、Swift语言,熟练前先后后一个 APP 的所有 API 和细节实现。比如相机,你只会 Github 上找一个高 Star 的库用用是不行的,那你永远不能体会苹果原始 API 设计思路,作不到为所欲为的使用。但愿你们有时间多琢磨,想作一个优秀的程序员,放大了说想成为一个优秀的人,都是须要不断学习,不断成长的,你们加油吧!

相关文章
相关标签/搜索