一個iOS開發者學習Android之路

袁欣發表於2014-06-15

“朝向黑暗的一面!”

最近我參加了一次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平板的市場佔有率不重要麼,應為他們都算是手機!…

相關文章