一個iOS開發者學習Android之路
英文原文: Learning Android Development: an iOS Developer's Perspective
“朝向黑暗的一面!”
最近我參加了一次 Big Nerd Ranch 在 Banning Mills 的 Android 訓練營,這件事在 推ter 上引發了一片錯愕,因為我一直被認為是一個 Objective C 和 Cocoa 的腦殘粉,事實上我就是 Big Nerd Ranch iOS 訓練營的老師 。
參加 Android 訓練營的事曝光后讓我掉了好幾個粉絲。這是我整個人氣下滑故事的開始。
在 非死book 的一段往事…
差不多一年前,當時我在 Menlo Park 的 非死book 總部教 iOS 訓練營的課程,有一次下課后我遇到了一位我在 Palo Alto 工作的朋友 Eduardo,他也是一位 iOS 開發者,不過最近他開始做一些“不好的事情”,他大部分的時間已經在從事 Android 開發。那周他剛好參加了 Google I/O大會,我不得不忍受幾小時關于 Google 炫酷技術的教化。雖然有點煩人,不過還是不會動搖我的信念,尤其像我這樣”忠心”的人。
我們經常在蘋果 Cupertino 總部門口的一家牛排館吃晚飯。雪上加霜的是,他每次進入這家全是蘋果員工的餐廳時有一個很不好的習慣,那就是帶著……沒錯,谷歌眼鏡!我常常在想保安會不會把我們踢出去。
安德森先生,你不覺得這幅眼鏡很不合適么?
呆瓜混合體
面對現實吧:帶上谷歌眼鏡讓你看起來就像一個傻叉一樣…還是一個書呆子型的傻叉。我反抗了好幾天,最后還是妥協了想要去試一下(當然,我不是真的那么感興趣)。
在看了一圈周圍米有蘋果的保安之后,我迅速的戴上了它…人氣下滑是跑不了了。
我帶的這副絕對只是一副原型機,雖然是一副原型機但是卻是我這幾年見過的唯一一副真實設備。老實說帶上它你真的不能看起來更傻了。這種原始的書呆子氣對某些同志可能會有不可抗拒的吸引力,帶上它看起來就像下面這位。
在我回家的路上為谷歌眼鏡開發應用的想法突然闖進了我的腦海。事實上幾年前我曾經試過第一代的 Nexus,老實說這臺電話真的不是為我準備的,它的屏幕跟下面的塑料之間有一條缺口,每次用它打電話都會扯掉我的頭發。一部會讓我變成禿子的電話不值得 浪費我的時間,不過這副眼鏡嘛…
回到 Banning Mills
如今我的行程表總是非常滿,讓我幾乎不可能停下來用幾周的事件去學點新東西。不管你怎么努力,(分心)它總會偷偷的冒出來接近你。
在 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 的棧結構。
來學 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 開發者,也讓我有機會以一個全新的視角來審視移動開發。了解兩個平臺的技術讓我成為了一個更好的移動開發人員。
無路可退:我是一個有證的 Android 開發者了。
如果你是一位業余開發者,你可以選擇忽略其中一種平臺,但是作為一名職業開發者,無論對于你的職業生涯還是公司的商業角度掌握兩個平臺的技術都具有重要意義,不管你是不是偏愛其中的一方。
因此,如果你是一個 iOS 開發者,你可以繼續開關于 Android 的玩笑,但是你還是應該去學習它。如果你是一個 Android 開發者,來加入我們體驗一下另一種世界:我們保證不會嘲笑你們夸張的“電話板”的。我保證。
你知道為什么 Android 平板的市場占有率不重要么,應為他們都算是手機!…
翻譯: 伯樂在線 - 袁欣
譯文鏈接: http://blog.jobbole.com/68744/