该如何学习 Swift 编程语言?

现在回想起来,我从5月份开始学 Swift 语言到现在断断续续也算有近六个月,从对程序一点感觉也没有,到现在的“开坛做法”,一路经历了很多。可能说对于工作多年的高手来说,这些都太肤浅了,一句“你还需要项目经验”就可以把我杀的血槽-1,不过对于大多和我一样的“小白”来讲,我觉得我这半年走来的路是可以复制的。

对于OOP(面向对象编程)的入门,我是从学习 Swift 开始的。目前为止,我还能记得所有学习的过程,知道一个自学的人是多么的艰辛,遇到问题从来没有人解答,别人遇到过得还好,Google可以找到答案,如果是其他奇奇怪怪的问题,那几乎只能保留。推上经常有人说:“对于编程语言,只有两种,一种是比较新的语言,另一种是过时的语言”——Swift就是前者,这就注定了关于它的文章中文的资料没有多少,所以就有很多人错误地以为:“我想要学习Swift,就要学习OC(Objective-C)”

Swift 和 OC

Swift 不是 OC,相反它和苹果早年的 Objective-C 一点关系都没有。尽管由于 Cocoa 的关系 Swift 从一开始就在向 OC 做妥协,点那也只是时间的关系,现在 Swift 版本已经到了2.1,里边 OC 的影子越来越少了。所以说,如果你真的想要学习的是 Swift ,那么为此而先走一遍 OC 是没有必要的。

——“那企业里做 OC 和 Swift 混合开发怎么办?”

这可能是坚持先学 OC 的人最大的理由了,再进一步讲“现在大部分企业其实还是在用 Objective-C 做开发”,没错,这是事实,Swift 还需要时间来迭代,但目前的确有不少企业在向 Swift 做迁移,混合开发也是必要的,但……总得有人做 Swift 部分不是吗?如果你问我 OC 部分怎么办,我答你:“等你学会了 OC,那 OC 的开发者学会了 Swift,等你再学会了 Swift……”。

言而总之,Swift 是一门独立且完整的编译语言,将来开源的是 Swift 也不是 OC,如果你以语法为理由,那我觉得你还不如先去学 Python ,这是一门动态语言,但语法和 Swift 差不多——至少都没有分号

也许——学习OC的唯一理由就是 Cocoa ,这是做苹果平台开发的基础(比如 OS X 有 Cocoa ,iOS 有 Cocoa Touch ),为什么说这是唯一的理由呢?因为 Cocoa 是 OC 写的,它会对 Swift 做优化做迁移没错,但从年代来讲,关于框架的文献无论中文还是英文,都是 OC 的更多一些。好吧,关于这一条理由,我无法反驳——我目前还没有接触框架,因为我还在学习设计模式。这部分内容,我会在将来再回来讨论。

视频和书籍

读书!

别看我在网上录制视频讲课、在直播,但我自己却真的很少看视频来学习。一个是你很难遇到真的优秀的课程,另一个是视频讲的会很慢——也可能我就是那种所谓的视觉型学习者,我对于听进去的知识很难消化,无论是看视频也好,还是课堂听讲。

另外一点就是书籍的内容会相对比较严谨,也便于查阅。不过遗憾的是关于 Swift 的中午书籍少的可怜,另外由于 Swift 本身处在快速迭代期,而出版又有着滞后性,所以你买到的入门书籍也不可能是最新的语法——这一点和视频一样,你找到的视频,我想,几乎是没有 Swift 2.1 的。

总之,学习还是要继续下去,那么我就分别说说,这两种方式:

视频

相对于出版的困难,出一套视频就简单多了,这也注定了现在网上关于 Swift 的教学视频一抓一大把,不过你还是应该具有分辨视频年代以及 Swift 语法版本的能力,我的学院就经常会有抱着旧语法来问为什么报错的,所以,相对于学习了过时的语法再纠正——我们要尽可能地学习新语法——至少让纠正的成本变小。

视频如果提供了发布的时间,那么它至少应该在六个月以内,超过了,就不要看了——尤其是关于语法的东西。但也有例外,比如斯坦福有个cs106a的课程,几乎是10年前了,但还是可以看的,为什么?原因是它讲的是面向对象,这种理论性的东西,几十年可能都难以改变,所以就算编程语言不同,语法也旧了,但一样不会过时。

另外就是看 Xcode 的版本了,截止到这篇文章第一次发布的时间,Xcode 的版本是 7.1.1,Swift 编译器支持的版本是 2.1,如果是Xcode 6.4,那么对应的就应该是 Swift 1.2,所以,如果你看到的视频里Xcode 版本是 6.0,或者更低,那请转身就走。——除非你已经有能力根据语法特点进行排错——这也确实是一项不错的锻炼方法。

最后就是视频的推荐了,其实链接上文已经给出,是网易公开课的链接,就是我说的那个 cs106a 的课程,挺老的,语言是Java,但不妨碍我们学习编程的思想和面向对象。

斯坦福大学公开课:编程方法学
斯坦福大学公开课:编程方法学

另外,有个知名的公开课就是那个Developing iOS 8 Apps with Swift(斯坦福大学公开课:iOS 8开发) 不过可惜的是这个我竟然一直都没有机会看——一开始觉得自己水平不够所以没看,后来一直就没有顾上~现在看来,估计语法也过时了,不过喜欢的朋友也不妨一看:)。

最后,现在网上有不少关于 Swift 的专门教学的网站,去看看那些实际 APP 栗子的视频也是一个不错的选择。

书籍

那么说起书籍,就有的聊了,我们先来聊聊出版书籍,国内的出版书籍基本你就别看了——大家水平都一个样,那些《21天入门Swift》《xx带你玩转Swift》《Swift一笑而过》《由浅入深学Swift》《xx老师力荐Swift》(注:这些书名是我自己杜撰的,大家请不要对号入座,领会精神即可?)看看名字就好,如果其中真的有你喜欢的作者(比如将来的十步奶一人出书了的话?)那么就买一本来收藏就好了。

国外的出版书籍嘛,由于出版的滞后性,再加上翻译出版……我想,等它到你的手里,是不是一本好书我们先不说,至少它语法不是最新的了。所以,如果将来有了Swift关于框架的书,那么不妨买一本来研读,语法就算了,实在是跟不上的。

下面再说电子书籍,由于电子书分发快,又容易修改,所以大部分都是能够做到与时俱进,我们不要求作者追到最新的Swift 2.1,但至少作者会不停的去更新,这就让人很感动了。下面,我就把我学习 Swift 读的书分享给大家。

Head First Java(中文版)(第2版)
Head First Java(中文版)(第2版)

这其实是一本 Java 的入门书籍,它讲了Java语法,另外更详细地讲解了面向对象!——其实天下OO语言是一家,Swift 与 Java 也十分的相似。我入门 Swift,除了那门老旧的 cs106a 视频外,就是这本《Head First Java》

另外一本炒鸡好的书是AppCoda的《Beginning iOS 9 Programming with Swift》价格有点感人,但真的值这个价格,作者以一个APP作为栗子,从头开始,把一个APP的完整开发流程带你过了一遍!我在学习 Swift 的第二个月花了整整一个月的时间把这个APP从头到尾做了出来!——好吧,可能唯一的遗憾就是它是英文的,目前并无中文的翻译,不过语言并不复杂,呃——如果你英语不是特别差的话。

《Swifter - 100 个 Swift 必备 tips (第二版)》
《Swifter – 100 个 Swift 必备 tips (第二版)》

对于进阶,那么我推荐王巍大侠的《Swifter – 100 个 Swift 必备 tips (第二版)》,我觉得搞懂了这100个相关知识点,可以出师矣。书不贵,还持续更新,乃良心之作。我买了正版,读完之后还专门打印下来慢慢翻看,真的是很棒。

最后,自然少不了苹果官方的手册,《Swift 编程语言》这里我要吐槽的是它其实也不是最新的……咳咳,是的,最新的还要看 Xcode,不过,这是我们能找到的最新的权威文档了。遗憾的是它也没用中文版本,网络上有1.0和2.0版本的翻译,可惜由于是开源版本,更新并不迅速,翻译的错误也不少——所以我自己开了一个项目,目前基础章节的内容已经翻译完成,你可以来这里瞧瞧。

语法和理论

学习一门编程语言,我们的目的是在于如何用它来开发想要的软件(或者服务),而不是开发一个计算器,一个小游戏。所以你就必须要学会那些理论上的东西,因为这些东西对合作开发有着指导意义。

我们说 Swift 语言是一门OO语言,其实就是说它是一门面向对象的语言,那么它就和 Java,和 Python 差不多,你学会了 Swift,你不会 Java,但如果你学会了面向对象,那么可能 OC、Java、Python 就都能够读懂了。所以请千万不要忽视面向对象理论的学习,只熟练了语言的语法是没有多大用处的!

经常会有学员来问为什么这里就要这样做,那里不那样就不行吗?为什么看你讲课我就会,可是自己上手的话做什么都没有头绪?为什么你对任何应用一听就能分析能讲能设计?

其实是我会忽悠而你不会(误),其实是你不懂面向对象,没有设计程序的分析能力。这样对于一个问题甚至都不能把它拆分成基本的单位,有谈何把它写成代码呢?没错如果不会语言就算能分析懂面向对象也没有用,可是如果你不懂这些基本的 OO,又怎么能理解的了框架和设计模式呢?

不懂框架和设计模式,稳定的程序是必然不会出现的。你不知道mvc,怎么能用好框架?怎么能用好别人的轮子?又如何与团队合作?

——学好 OOP 啊,不然写出来的不是代码,是bug。

Baidu 和 Google

对于百度这个东西,我个人的意见是就连花边新闻也不要用它来搜索,我从来没有用百度找到过有用的东西,可能你会说关于隐私 Google 和 Baidu 是一样的都会偷窥,但我觉得只是 Google 确实会收录那些有用的东西——大部分情况下,如果你写代码遇到错误,把错误的内容贴到 Google 里,就能够找到先烈啦。

至于访问,我博客右上角有个链接“如何才能科学上网”,这里边收集了近期可以使用的 Google 反代,随便挑一个能用的不就行了?

最后

好吧,目前就只有这么多了,随着我学习的深入,我会再来填充更多的内容,希望这些东西对你的自学之路有所帮助!

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注