一个iOS开发者学习Android之路

jopen 10年前

英文原文: Learning Android Development: an iOS Developer's Perspective

        “朝向黑暗的一面!”

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

一个iOS开发者学习Android之路

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

         在 非死book 的一段往事…

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

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

一个iOS开发者学习Android之路

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

        呆瓜混合体

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

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

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

一个iOS开发者学习Android之路

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

        回到 Banning Mills

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

一个iOS开发者学习Android之路

        在 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 的栈结构。

一个iOS开发者学习Android之路

来学 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 开发者,也让我有机会以一个全新的视角来审视移动开发。了解两个平台的技术让我成为了一个更好的移动开发人员。

一个iOS开发者学习Android之路

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

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

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

一个iOS开发者学习Android之路

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

        翻译: 伯乐在线 袁欣
        译文链接: http://blog.jobbole.com/68744/