WWDC2014觀感兼回答iOS初學者的困惑

發表於2014-06-12

明天世界盃就要開戰了,為了不影響大家看球,趕緊在此之前把自己對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語言,一個是極致的執行效能,一個是極致的開發效率。好吧,這個話題不敢繼續了,無論是對所支援球隊的選擇還是對所喜愛程式語言的選擇,都是最容易遭到大家攻擊的,我還是趕緊閃了吧,明天早上還要起早看比賽呢~

相關文章