一个iOS开发者学习Android之路

“朝向黑暗的一面!”

最近我参加了一次Big Nerd Ranch在Banning Mills的Android训练营,这件事在Twitter上引发了一片错愕,因为我一直被认为是一个Objective C和Cocoa的脑残粉,事实上我就是Big Nerd Ranch iOS训练营的老师 。

 tweet

参加Android训练营的事曝光后让我掉了好几个粉丝。这是我整个人气下滑故事的开始。

 在Facebook的一段往事…

差不多一年前,当时我在Menlo Park的Facebook总部教iOS 训练营的课程,有一次下课后我遇到了一位我在Palo Alto工作的朋友Eduardo,他也是一位iOS开发者,不过最近他开始做一些“不好的事情”,他大部分的时间已经在从事Android开发。那周他刚好参加了Google I/O大会,我不得不忍受几小时关于Google炫酷技术的教化。虽然有点烦人,不过还是不会动摇我的信念,尤其像我这样”忠心”的人。

我们经常在苹果Cupertino总部门口的一家牛排馆吃晚饭。雪上加霜的是,他每次进入这家全是苹果员工的餐厅时有一个很不好的习惯,那就是带着……没错,谷歌眼镜!我常常在想保安会不会把我们踢出去。

Do you really think those glasses are appropriate, Mr Anderson?

安德森先生,你不觉得这幅眼镜很不合适么?

呆瓜混合体

面对现实吧:带上谷歌眼镜让你看起来就像一个傻叉一样…还是一个书呆子型的傻叉。我反抗了好几天,最后还是妥协了想要去试一下(当然,我不是真的那么感兴趣)。

在看了一圈周围米有苹果的保安之后,我迅速的戴上了它…人气下滑是跑不了了。

我带的这副绝对只是一副原型机,虽然是一副原型机但是却是我这几年见过的唯一一副真实设备。老实说带上它你真的不能看起来更傻了。这种原始的书呆子气对某些同志可能会有不可抗拒的吸引力,带上它看起来就像下面这位。

Jean-Luc Picard, trying to the first prototype.

在我回家的路上为谷歌眼镜开发应用的想法突然闯进了我的脑海。事实上几年前我曾经试过第一代的Nexus,老实说这台电话真的不是为我准备的,它的屏幕跟下面的塑料之间有一条缺口,每次用它打电话都会扯掉我的头发。一部会让我变成秃子的电话不值得浪费我的时间,不过这副眼镜嘛…

回到Banning Mills

如今我的行程表总是非常满,让我几乎不可能停下来用几周的事件去学点新东西。不管你怎么努力,(分心)它总会偷偷的冒出来接近你。

At Banning Mills, a Mountain Lion was preying upon the unsuspecting Androids...

在Banning Mills,一只山狮(Mountain Lion)正在毫无防备的机器人(Android)上方掠食…

在看过了我疯狂的日程表后,Hillegass医生给出了他的药方:在乔治亚州的乡下进行一周的全浸式Android培训。

虽然每天要学习10到12个小时,这个训练营感觉却像一次短途旅行:没人打断,没有电话,没有邮件。在Big Nerd ranch训练营,你可以只专注一件事情:学一些“书呆子”的东西。

我估算了一下在Banning Mills与我的Android同学以及我们的导师Kristin Marsicano共度的一周 ,起码节省了我三周自学的时间。最重要的是我有机会从紧张的行程里得到一丝喘息,从这点来看就很值了。

iOS开发者眼中的Android

学习安卓的过程让我有些意外,因为我一直以为所有的环境会很相似。毕竟,iOS与Android系统都是基于Unix,两者的开发语言也都是基于C的。可惜事实并非如此。

Android有一个特殊的并且十分有趣的特性,和我之前所见过的其他OS都不同。在iOS中包括几乎其他所有的OS,应用是整个系统中最基本的交互单元。但在Android上不是这样。它的基础交互单元叫做Activity,有点类似iOS中UIViewController的概念。

不同应用中的Activity可以独自通信因此可以变成你的应用的不同入口。所以当你想要完成一项任务,比如在邮件中添加一幅照片,你可能会用到好几个Activity(邮件Activity和其他应用的Photo Activity)。一个设计良好的Android应用可以很好的融入到OS之中,变成一套松耦合的Activity。是不是棒极了?

不过相比iOS中UIViewController的通信,Activity间的通信要复杂得多。通信行为被封装在一个叫做intent的类中。这种通信机制让我想起了当年Windows统治地球的时候,和利用CORBA访问分布式对象的方法很类似。

Activities和Fragments(和Activity类似的一种概念)在屏幕上组织的方式也与iOS很不一样,对于一个新手,你会发现根本没有类似UINavgationControler的东西,整个系统已经是一个Activity的栈结构。

Come to the Dark Side, we've got cookies! Android Studio, Big Nerd Ranch's book and cookies.

来学Android把,骚年,这里有饼干!
Android Studio, Big Nerd Ranch的书还有饼干。

不过最惊奇的是Android的语法比iOS要啰嗦不少。尤其当一个iOS开发者跟你说这东西很啰嗦,你最好把这当回事!一个最要的原因是Android SDK没有将一些行为抽象出来,比如你在iOS新建一个UIViewController时,你不用去给它指定xib文件的名字,除非你在做什么诡异的操作。否则UIViewController会自己去寻找和自己同名的xib文件,在Android中,你只有手动去指定每一个布局文件,一遍又一遍。

从这里你可以看出你可以把你在一个平台中学到的东西带到另一个平台之中。iOS开发者也可以从Android的布局技巧中有所收获,用来弥补Cocoa中AutoLayout的不足。

作为一个iOS开发者最让我想念的就是一门不将就的语言(对不起,情不自禁),还有blocks,Core Data。

两者兼备

学习Android的过程让我成为了一个更好的iOS开发者,也让我有机会以一个全新的视角来审视移动开发。了解两个平台的技术让我成为了一个更好的移动开发人员。

There's no way back: I am a certified Android Nerd

无路可退:我是一个有证的Android开发者了。

如果你是一位业余开发者,你可以选择忽略其中一种平台,但是作为一名职业开发者,无论对于你的职业生涯还是公司的商业角度掌握两个平台的技术都具有重要意义,不管你是不是偏爱其中的一方。

因此,如果你是一个iOS开发者,你可以继续开关于Android的玩笑,但是你还是应该去学习它。如果你是一个Android开发者,来加入我们体验一下另一种世界:我们保证不会嘲笑你们夸张的“电话板”的。我保证。

Do you know why Android tablet marketshare is insignificant? It's because we call them phones!

你知道为什么Android平板的市场占有率不重要么,应为他们都算是手机!…

收藏 1 评论

关于作者:袁欣

关注移动开发;玩一点萨克斯,架子鼓 ;游泳与网球入门者(新浪微博:@袁欣_Jason) 个人主页 · 我的文章 · 17

可能感兴趣的话题



直接登录
最新评论
  • 仔仔   2014/06/16

    android 和iOS的开发者之间有必要仇视么?都会不可以么?

跳到底部
返回顶部