WWDC2014观感兼回答iOS初学者的困惑

584 查看

明天世界杯就要开战了,为了不影响大家看球,赶紧在此之前把自己对WWDC的观感以及对Swift的个人观点分享一下吧。之所以要写这篇文章,就是因为很多朋友(特别是初学者)在探讨这个问题。

WWDC都开完一周了,我也迟迟没有拿出自己的观点。不是我不想第一时间来个评测之类的,实在是这次WWDC上值得关注的内容太多,以至于我原定在世界杯前看完WWDC session中自己感兴趣视频的计划彻底宣告破产。

现在有一个非常严肃的问题摆在我的面前:在接下来的日子里,难不成我要一个窗口看世界杯比赛,一个窗口看WWDC视频?这还能愉快的玩耍吗?

对于广大程序猿来说,2014年6月3日的WWDC上最令人激动的不是一众刷机党期待已久的iOS8,不是要扁平到底与iOS合体的Yosemite,不是让可穿戴设备创业者们津津乐道的Health Kit和Home Kit,当然更不是Cook大厨或者英俊潇洒的VP Craig Federighi,而是Swift(雨燕)这个听起来颇有浪漫主义色彩的编程语言。我其实很想和老板们坐在酒店的沙发上,一边举着高脚杯品尝红酒一边探讨如何在可穿戴设备上整合Health Kit、Home Kit这样高大上的话题,但发现最后还是不由自主的窝在电脑前看一大帮知名非知名程序猿就该不该学Swift这个蛋疼的话题斗得死去活来。

Swift发布当日,苦逼程序猿们如同打了鸡血一样的讨论这门新生语言,当然更少不了的是和当前各种编程语言的对比和吐槽。有人说iOS开发者继续死守Objective-C不学Swift就等同于自宫了,有人说Swift是个畸形的怪物根本没有苹果说的那么好,有人说苹果从此要一统天下拳打Android脚踢WP,也有人说苹果从此日暮西山忆往昔峥嵘岁月荣。。。

作为一个苹果粉丝,我也看了6月3日的keynote,虽然无缘在现场为苹果雄起,但个人认为WWDC 2014是自2010年之后最成功的一次开发者大会。没有鸡肋的硬件升级,没有显摆零售店又新开了几家,即便是对Beat30亿美刀的巨额收购,也只是靠Craig在Mac上给Dr.Dre打了个电话提醒大家Dre博士已然是苹果的自家人,就此轻轻飘过,不带走一片云。WWDC 2014是一个百分百的开发者大会,Cook大厨特意强调他在看开发者的邮件反馈,而整个keynote中宣布了iOS 8的众多开放之处,从第三方输入法到Touch Id,从可以说完全就是Of the Developer, By the Developer,For the Developer。看完之后,我忍不住想高唱一曲Viva la Apple(我不懂西班牙语,生凑的)。

苹果,至少这次在软件系统上实在干的漂亮。虽然对广大消费者来说苹果是一个设计消费类电子产品的公司,但连乔帮主都曾经说过,苹果从本质上来说其实是一家软件公司。只是,People who are really serious about software should make their own hardware.

我想对于开发者来说,无论是打脸的吐槽还是跪舔的恭维都意义不大,接下来只谈两个话题。

一个是针对正在搞iOS开发的,这次WWDC上有哪些东西对我们开发者真正有用,而另一个是针对初学者的,到底该不该学Swift(或是该不该学Objective-C)。

一.哪些东西是iOS开发者需要特别关注的。

对于iOS开发者来说,我认为除了要看6月3号的那场Keynote,其实更需要看session部分的视频,特别是以下几个视频是一定要看的:

https://developer.apple.com/videos/wwdc/2014/

1.Platforms State of the Union

这个视频的重要性仅次于Keynote,如果说Keynote多少还有点照顾普通大众的赶脚,那么Platforms State of the Union的内容其实就是开发者定制版的Keynote。里面涵盖了所有苹果认为非常重要的更新和重大的变化,几乎上看完Keynote和这个视频也就自然明白了第一个问题的答案。

2. Introducing CloudKit

iCloud目前在消费者市场谈不上成功,对于开发者来说始终是一个鸡肋的功能。但是CloudKit显然野心很大,试图通过向前端开发者提供类似BAAS的服务而将iOS开发生态系统的闭环完全掌握在自己的手里。大家都知道传统的iOS开发(包括Android开发)其实是分成两部分的,一部分是客户端开发,一部分是服务器端(或者说后台)开发。即便是一个非常有天赋的iOS开发者,要同时精通客户端开发和服务器端开发都是不太现实的,至少不是最高效的。因为服务器端的开发往往还是依赖于java,PHP,Node.js,Python等等,在增加了开发人员成本的同时,也给Android留下了可乘之机。

我想苹果之所以提供强大的CloudKit(因为时间原因,我对于CloudKit还没有做深入的研究,这里的观点可能有误),最重要的意图还是形成iOS开发生态系统的闭环。也就是说把客户端开发和服务器端(网络,数据库等)合二为一,通过强大的功能和便利的服务进一步降低iOS开发的门槛(包括引入Swift编程语言也是这个目的)。CloudKit不是为了抢服务器端开发者的后台,而是为了把开发者牢牢绑定在iOS的战车上,同时因为有CloudKit,那么第三方开发者的各种数据也都一并收入了苹果的帐下(包括Health Kit和Home Kit也是这个目的),后面要搞搞真正的大数据云计算就不必再打广告了。

通过CloudKit, 我看到了一个野心勃勃的苹果和一个力图完全摆脱乔帮主阴影的Cook大厨正在角落里面偷笑。

3.Introducing HealthKit

因为最近在研究和了解互联网健康医疗领域,因此对于HealthKit我个人是高度的重视。

苹果发布了Health应用和Health Kit开发工具包,虽然没有提到传闻中的iWatch,但外星人都知道苹果对健康可穿戴设备谋划已久,蓄势待发。

Health Kit可以做三件非常重要的事情:

(1)从其它应用中获取和健康相关的数据

(2)通过自己的应用保存和读取数据到云端

(3)进行查询和统计分析

具体来说:

(1)向HKHealthStore中保存数据

(2)从HKHealthStore中读取数据
(3)使⽤用HKQuery和HKSampleQuery查询数据

 (4)使⽤用HKObserverQuery实时监督数据库中的相关数据变化 

(5)使⽤HKAnchoredObjectQuery来限制返回的数据范围(返回新添加的对象) 

(6)使用HKStatistics进⾏行简单的统计分析(Sum求和,Min最⼩小,Max最⼤大,Average平均数) 

(7)使用HKStatisticsQuery执⾏行统计查询 

(8)使用HKStatisticsCollection⽣生成基于时间段的统计图表(借助AnchorDate) 

(9)使用HKStatisticsCollectionQuery执⾏行统计图表的操作

在HealthKit推出之前,健康管理类APP从功能上看主要分为以下几类:

(1)收集数据(通过手机传感器及可穿戴设备)

(2)分析数据并提供统计分析结果

(3)提供在线健康管理和咨询服务

(4)搭建医患平台(如春雨医生)

(5)搭建用户社区(某种特定疾病的患者,或者减肥,瑜伽等)

在HealthKit推出后,特别是未来的iWatch推出后,我个人认为只提供(1)和(2)功能的产品基本上没有太大的发展潜力。健康管理类APP只有真正走O2O之路才可能有前途。

4. Introducing HomeKit

说到这儿,我觉得苹果的野心太大了。智能家居是又一个庞大的蓝海市场,和车联网,互联网医疗,在线教育是当前互联网/移动互联网最大的四个蓝海市场之一。

苹果对于Google收购Nest看似没有反应,但内心绝对不会轻敌,HomeKit其实是对这个收购行为的反戈一击。

智能家居,车联网,互联网医疗,在线教育作为具有刚需的蓝海市场为何总是雷声大雨点小,其实最根本的原因是因为没有形成一个类似iOS开发这一可以自循环自生长的生态系统。而要打造这样的生态系统和完整价值链,绝逼不是深圳华强北一个小厂商开个模具搞个可穿戴设备或者智能设备就可以搞定的,即便是小米这种靠互联网思维异军突起的公司,至少在目前也不具备这样的领袖风范。

是的,我也买了小米路由器,但一个孤立的设备和靠HomeKit整合在一起的智能家居系统可以相提并论吗?

那么接下来要看什么?当然是要看Android那边会出怎样的应对策略。毕竟苹果对高端市场,Android对中低端市场已经是大家默认的事实了。

现在苹果针对第三方开发者开放如此多的接口,其用心实在是太明显了。不过这并不是坏事,只有靠领袖公司打造一个完善的生态系统才能带动整个产业链。

5.Introduction to Swift

好吧,为什么苹果要推出一款全新的编程语言?是苹果工程师世界杯间歇期闲得蛋疼?还是Cook大厨对外界评论自己没有创新精神非常恼火?

我不是Cook,猜不到他的真实想法,但个人觉得Swift的发布和其它举措一样,都是在打造一个”One Apple”战略。

开发者不是觉得Objective-C上手太难吗?大家不是觉得Objective-C的方框语法难看难写得一逼吗?那么我们搞一个比java还上手容易,性能比java还强的不是一逼的雨燕,android开发者还有什么好得瑟的。

除了这个,还可以看:

Intermediate Swift

Advanced Swift

Integrating Swift with Objective-C

Swift Playgrounds

Swift Interoperability in Depth

6. 游戏相关的几个视频

我想在游戏部分最让大家震惊的就是Zen Garden的Demo。当漫天的樱花花瓣迎风飘洒时,我可以想象台下的游戏开发者眼镜碎了一地,因为我就不小心把眼镜摔地上了。

性能超越OpenGL ES的Metal技术其实对于一般开发者来说无需太过在意,毕竟这些是游戏引擎开发商才需要关注的,而Unity,Unreal,Crytek等老牌引擎都第一时间支持了Metal,这是准备立马出Apple TV横扫PS4和Xbox One的节奏吗?

因为最近对Oculus Rift产生了浓厚的兴趣,其实我最想知道的是,如果有如此强大的性能,以后Oculus Rift是不是不需要配个强悍的PC/MAC才能跑,而是可以随身活动了。如果是这样的话,虚拟现实的很多困扰是不是也可以真正得到解决?(身体不需要固定在椅子上)。不过应该还是在室内吧,不然估计跑出去掉水里了都还以为自己在太空中战斗呢。

对于为casual game准备的SpriteKit和SceneKit,原谅我真的不是很看好。在游戏开发的世界里面,第三方游戏开发引擎(cocos2d-x,unity3d,unreal等)才是真正贴心的工具。

如果说应用还可能只出iOS版的话,那么几乎所有的游戏都希望是跨平台的,能赚钱还嫌用户多?

个人判断,这两货对于主流的移动游戏引擎(cocos2d-x,unity3d,再加上个希望主流的unreal)几乎不会有大的影响。

相关视频清单(原谅我在世界杯前还是没看完):

What’s New in SceneKit

What’s New in SpriteKit

Working with Metal:OverView

Working with Metal: Advanced

Working with Metal: Fundamentals

Best Practices for Building SpriteKit Games

Building a Game with SceneKit

Designing for Game Controllers

以上就是这次WWDC上需要关注的一些重点内容。

可以说,只要开发者愿意弃暗投明(从Android转投苹果或者从双修者转成专修者),苹果愿意为你提供一切。

编程语言太难学?我们提供了Swift,上手堪比javascript,性能仅次于C语言远超java和众脚本语言。亲,满意的话给个好评吧。Cook大厨在等着收你的邮件呢。

想搞一个自己的输入法?好吧,第三方开发者现在可以光明正大的在不越狱的iOS设备上提供输入法了。

想靠高大上的指纹识别进行验证解锁?好吧,给你。Keychain and Authentication with Touch ID

想调用其它应用完成某些功能?好吧,给你。

想要强大的游戏性能?好吧,我们有比OpenGL ES还快的Metal,还有NB的WebGL

想要游戏引擎?好吧,我们有SpriteKit和ScreenKit。

好了,第一个问题回答完毕,现在来回答第二个问题。

二.对于iOS开发初学者,究竟是要学Objective-C还是Swift?

在提供自己的答案之前,我首先要说明,不许人身攻击。如果你要打脸,我不反对,不过打脸一次要给一张毛爷爷,这样的话欢迎大家多多打脸~

首先问初学者一个问题,你今年多大了?你已经上班了吗?如果没有,请问你在哪儿上学?以后打算搞学术还是去公司打工,甚至是自己创业?请问你在天朝吗?你是富二代或者有一个NB的干爹吗?。。。

这TMD什么问题,个人隐私我会告诉你?这个跟学什么语言有毛线关系?

个人认为,有很大的关系。

现在利用产品经理常用的用户画像来说明下我的答案:

1.你是一个90后高富帅,出生时就含着金钥匙,老爹老妈开奔驰宝马法拉利送你去小学中学,剩下的我不必展开了,总之你是富二代或者是富二代的亲戚,不差钱。

if(你是富二代){

    choice = “Swift”

}

原因:

Swift代表未来,Objective-C代表现在。

既然你不必为现在的小钱忧虑,而根据苹果的尿性必然会大力支持Swift,那么何不一开始就从Swift开始?

2.你是一个90后屌丝,毕业两年了,之前一直在搞java开发,勉强混成了北上广深的小白领,看到现在iOS开发非常火热,想转行搞这个。老爹老妈都是普通工薪族,没钱帮你买房,未来一片混沌。

建议:

先上Objective-C,上手后再学Swift

if(你卡里的钱少于500万 && 现在急着换一个工作){

choice = “Objective-C”;

}

原因:

Swift代表未来,Objective-C代表现在。

一个新语言的成熟需要至少两年时间,而在这两年的时间里面,你要干活吃饭。可能你要开发全新的项目,也可能你要维护之前的项目,但那些老鸟们(其实从08年算起最老也才勉勉强强6年经验,谁敢说自己有6年以上iOS开发经验谁TMD是金正恩他爹)不会因为你会Swift就会放过你,至少1-2年内不会。

3.你是一个屌丝90后,明年即将从一个二类院校的计算机专业(或者是跟软件开发完全不沾边的广告设计专业)毕业,想以后从事高大上的iOS开发,不知道该学什么语言。

建议:

先上Swift,上手后也要学Objective-C

if(你卡里的钱少于500万 && 马上要毕业了){

firstChoice = “Swift”;

secondChoice= “Objective-C”;

}

原因:

Swift代表未来,Objective-C代表现在。

Swift上手快,可以通过Swift迅速入门,但也要学Objective-C。

4.你是一个95后,还要过几年毕业。

好吧,不用描述后面的情况了。

if(你这两年不急着找工作){

choice = “Swift”

}

5.你已经在搞iOS开发了。

好吧,

if(你是一个苦逼的iOS开发者){

choice = “什么都要学(不光是Swift和Objective-C开发语言)”

}

其实第5个选项的答案同时也适用于前4个选项。

如果情景式的答案让大家看得混迷糊,这里还是用逻辑描述的方式吧。

1.iOS开发入门不等于Swift或Objective-C入门

不管是Swift还是Objective-C,都只是iOS 原生应用开发的一种编程语言而已。

注意,这里强调的是原生应用开发,因为我们还有其它开发方式,比如PhoneGap(HTML5,javascript语言),比如Xamrian(使用C#语言),甚至还有RubyMotion(使用Ruby语言)。

而且除了应用开发,我们还有游戏开发,而iOS游戏开发极少有人用native或者SpriteKit,90%甚至更多的游戏开发商采用的是cocos2d-x(c++,javascript,lua语言),Unity3D(C#,javascript)引擎。

因此,当你说自己想要学iOS开发的时候,首先要问自己,你想开发一个什么样的东西。

如果是游戏,那么要学习的是游戏引擎,相关开发语言,甚至还有OpenGL ES。

如果是应用,那么要看是想开发原生应用(native)还是混合式应用(hybrid),当然目前来说绝大多数的开发商还是采用native开发。

如果是开发原生应用,才会涉及到选择Swift还是Objective-C的问题。

 而且学会某种编程语言只是iOS开发的最初一步,后面还有大量的东西要学,可以参考我的文章“一个iOS开发者的修真之路”,这里就不再赘述了。

2.你打算何时进入iOS开发的正式工作

如果急着找工作或者换工作(两年内都算急),那么没话说,你必须得先学Objective-C。当然Swift还是要学,不过不必这么急。

首先之前所有的项目都是Objective-C开发的,大量的第三方框架,开源项目和技术支持都是针对Objective-C的。

如果是新的创业型公司,想快速切入iOS开发领域,那么有可能会招聘Swift程序猿。

但是对于有一定规模的公司来说,至少在1-2年的时间里面,肯定是objective-C。

如果是企业级应用开发,更加不用说,肯定是短期内不会切换到Swift的。

如果目前不急着找工作(两年内),但又对iOS开发感兴趣,那么就直接上Swift吧。

3.一专多能,与时俱进

只要你开始进入程序猿的行业,就要不停的学习新的知识。在Jony Ive的传记中提到他当年学习工业设计的T字学习法,就是所谓一专多能,博采众长。

个人认为,一个程序猿至少要掌握三类编程语言,精通其中的1-2种。

1.系统级语言

 

C,C++

2.普适性语言

Java, C#,Objective-C

3.脚本语言

javascript,PHP,Python,Ruby,Perl

Swift语言目前还不好分类,姑且可以放在第二类。

学习系统级语言可以了解计算机一些相对底层和内核的东西,即便不以此为主要方向,但一定要有所了解。

学习普适性语言,是因为干活最常用的就是这些语言。

学习脚本语言,是因为轻量级开发用的是这些语言。

希望以上内容回答了之前提到的两个问题:

1.WWDC上我们需要关注哪些东西?

2.iOS初学入门者应该选择哪个语言(Swift还是Objective-C)?

顺便说一下,我最喜欢的球队是意大利队和阿根廷队。两只球队都是蓝白队服,一个是极致的防守,一个是极致的进攻。意大利队我最喜欢的球员是巴乔,阿根廷队我最喜欢的球员是巴蒂,可惜都不是现在的球员。001nxiB0gy6JCor72jB3f&690 001nxiB0gy6JCorb7Tre1&690

顺便也说一下,我个人最喜欢的编程语言是C语言和javascript语言,一个是极致的运行性能,一个是极致的开发效率。好吧,这个话题不敢继续了,无论是对所支持球队的选择还是对所喜爱编程语言的选择,都是最容易遭到大家攻击的,我还是赶紧闪了吧,明天早上还要起早看比赛呢~