Zenny Chen訪談: iOS開發(fā)者應該關注Metal
CocoaChina: 請問您是如何與iOS開發(fā)結緣的?
Zenny Chen: 我是在09年注冊的CocoaChina,當時感覺這家論壇對于OS X以及iOS開發(fā)相關主題都做得很專業(yè),于是也興高采烈地加入于此,與大家共同探討OS X與iOS開發(fā)相關話題。我之前從事過嵌入式設備的驅動開發(fā)以及功能機的應用開發(fā),所以對底層硬件部分也是比較熟悉的。2011年11月正式開始進入移動互聯(lián)網(wǎng)產(chǎn)業(yè)。
與iOS的結緣說來也很離奇,我2008年的時候打算做游戲,甚至有想做游戲進行創(chuàng)業(yè)的念頭??墒菦]有很明確的目標,到底為哪個平臺開發(fā)游戲呢?我了解過了Sony、任天堂等,授權金相當嚇人,小微企業(yè)根本就無法承受,而且審核也比較嚴格,入門門檻相當高。后來無意之中就發(fā)現(xiàn)了App Store,對其做了很多相關了解之后,在2009年5月買了我人生中***臺Mac——Mac Mini,當時花費了4988元人民幣,然后就開始走上了iOS開發(fā)的道路。
CocoaChina: 您曾經(jīng)舉辦過Swift的講座,如何看待這門語言?需要現(xiàn)在開始學習嗎?
Zenny Chen: Swift語言感覺出得有些倉促,從Beta1出來到現(xiàn)在改了很多東西,比如一開始數(shù)組類型是type[],現(xiàn)在則是[type]。當然,這 無法掩蓋其先進性。Swift是我目前所見過的為數(shù)不多的支持元組(tuple)以及closure等諸多動態(tài)特性的編譯型編程語言。Swift中的 closure與C++的Lambda、LLVM Clang C擴展的Blocks、Java的Lambda表達式不同,它的表達方式更精簡,而且就是函數(shù)式的,非常地expressive!所以你在用Swift的 時候就感覺既像是在用類似于Python這樣的腳本,又像是在用Scheme這種函數(shù)式編程語言,同時又含有面向對象特性(當然,這個在Python、 JavaScript等腳本語言里都有)。
Swift是一個很龐雜的編程語言,其復雜度僅次于C++,遠高于C與 Objective-C。不過,正由于它可以采用多種編程范式,所以程序員的入門門檻其實比較低,我將在10月中旬舉辦的關于Swift編程語言的公開講座也將會邀請一些沒有什么編程經(jīng)驗的產(chǎn)品經(jīng)理、策劃、甚至美術等。而且結合Xcode自帶的Playground,學習起來也繪聲繪色,饒有情趣。而你要精通它,知道它所有坑,那也需要花費不少時間精力,并且自己也要正式用它做過幾個項目才行。
我覺得使用Swift進行開發(fā)會成為普遍的趨勢。正如我之前所描述的,現(xiàn)在不少公司仍然以iOS平臺為主打,所以美術人員往往會以 iPhone/iPad屏幕為基礎進行設計。如果它們能直接把圖切好,放在storyboard里,然后用swift編程來看實際運行效果,那應用開發(fā)者的壓力你想想,不就減輕很多了嘛。而且在以前,美術人員把圖切好后,還要自己量坐標,再告訴開發(fā)人員,在溝通上也存在一些額外成本,如果美術人員自己把基礎界面整好,其實對于他們而言,并不會增加太多工作壓力,反而會感覺更有趣,更有成就感。
所以我認為今后iOS開發(fā)的場景將是,iOS職業(yè)開發(fā)者可以結合Swift與Objective-C為美術、產(chǎn)品人員做好最簡單的接口,然后它們在應用里 直接調用這些封裝好的庫函數(shù)就能馬上看到界面效果,這樣整體的工作效率都會得以提升,尤其結合playground,真正做到了所見即所得~
CocoaChina: iOS 8開放了很多新特性,推出了許多API,您最關注的是它的哪些特性?這些特性有哪些特別之處?
Zenny Chen: 讓我感到比較有趣的是App Extensions與Handoff。關于App Extension,現(xiàn)在App Store里已經(jīng)有備受大家歡迎的搜狗輸入法還有百度輸入法。這個應該說是iOS一個非常具有革命性的特性,也打破了Apple之前一直非常保守的態(tài)度。 而Handoff也是很有趣的特性,它可以讓你在一臺設備上使用應用時,在另一臺設備也無縫地呈現(xiàn)出當前的活動,這個感覺很有意思。
而比較實用的新特性有PhotoKit、HealthKit、HomeKit以及CloudKit。HealthKit結合Apple Watch能搞出不少好玩的名堂出來。而HomeKit對于智能家居領域會有所幫助;CloudKit是一個好東東,用于在線同步數(shù)據(jù)。CloudKit 尤其對于一些小微企業(yè)來說是個很好的工具,有些偏向單機的應用直接使用CloudKit就能進行數(shù)據(jù)存儲與傳輸,不需要自己來搭建服務器。
當然,對于像我這種底層狂熱分子,最讓我激動的還是Metal,呵呵。
CocoaChina: 你之前是否開發(fā)過游戲應用,對SceneKit、SpriteKit是否做過了解?如果有的話能否分析一下蘋果為什么會推出它們?
Zenny Chen: 我之前業(yè)余時間搞過些小游戲,也做過一些簡單的游戲引擎。SpriteKit之前用過,就目前而言,功能上跟Cocos2D-X比起來還是要弱不少,當然其優(yōu)勢是能直接用Objective-C和Swift進行開發(fā),另外也有自己的粒子編輯器,使用起來也比較方便,但是性能上似乎還有不少改進空間。SpriteKit在iOS7.0開始就有了。而SceneKit是8.0新增的。SceneKit主要提供了描述3D場景的上層接口,并提供了一些3D模型的導入、材質、光照、物理碰撞、粒子效果等。不過我現(xiàn)在還沒開始嘗試使用,所以對其運行時性能等表現(xiàn)還不得而知。
我覺得Apple之所以推它們,還是為了吸引開發(fā)者為App Store注入新鮮血液。你想,Android提供的工具十分有限,所以很多應用或游戲開發(fā)起來就相對困難,這也導致了不少公司仍然把iOS作為首要開發(fā)目標平臺,而Android則是作為備胎。
CocoaChina: 新的iOS圖形處理框架Metal,和OpenGL ES有何區(qū)別,能否對其造成威脅?
Zenny Chen: Metal提供了一套比OpenGL更底層的圖形接口,而且現(xiàn)在就針對Apple A7或更新處理器的GPU。因為從PowerVR 6系列開始,GPU真正擁有通用計算能力,使得Metal在這版上就引入了Compute Shader,這點是相當不錯的。而在OpenGL ES上要在3.1版本上才引入Compute Shader。正是由于對Apple A系列處理器的GPU量身定做的,因此Metal會比通用的OpenGL ES執(zhí)行得更快,而且?guī)烊萘恳哺。磶斓拇a更輕便。
這次在Metal特性的介紹中我們也看到了,Metal對Draw操作功能的優(yōu)化效果非常顯著。 Metal的API更類似于OpenCL,盡管是用 Objective-C封裝的,不過即便是用純C語言來(滿足LLVM Clang擴展的GNU11,包括對Blocks語法的支持)封裝也將十分方便。而且整套API用下來,我感覺邏輯很清爽,沒啥冗余,就是整條渲染流水線 的操作步驟,呵呵。而且只要你懂點 OpenGL還是很快就能上手的。
至于對OpenGL ES的威脅,Apple畢竟不是微軟,因此對于開放標準還是會給予大力支持的。我認為今后在iOS上,Metal將會與OpenGL ES共存。而Apple將不太可能在iOS上引入OpenCL了。大家如果想在iOS上借助GPU做高密集通用目的計算,那么可以直接使用Metal的 Compute Shader。所以,我個人認為,Metal的引入其實也是開辟了通向GPU通用計算領域的新道路。
我用過 DirectX(9~11)、OpenGL(2.1~4.1)、OpenGL ES(1.1~3.0)以及Metal,目前感覺Metal***用。不過就API封裝層面上而言,Objective-C確實將簡潔與強大融為一體,這或 許也是我感覺好用的原因之一罷~當然,如果大家不習慣用Shader寫頂點計算與像素計算,那么仍然可以使用OpenGL ES1.1。Metal是不提供類似OpenGL ES1.1里的固定流水線的功能的。所以就這一點而言,我也認為Apple不會廢除OpenGL ES。
CocoaChina: 你在開發(fā)的過程中使用過哪些開源項目?使用過程中遇到過哪些問題?
Zenny Chen: 我現(xiàn)在開發(fā)過程中用到的開源項目比較少。比較大的是FFmpeg,這個用于處理音視頻的,在Mac上使用。而在iOS項目中我就用過minizip用于文件壓縮解壓,以及Cocos2D-X游戲引擎。其實使用第三方開源軟件主要問題就是眾所周知,iOS更新速度比較快,而不少開源項目維護了2、3年可能就不維護下去了,然后iOS一升級就是各種bug,各種崩潰。所以只有自己掌握的代碼才是最有保障的。我對于我的下屬的要求很簡單,盡量避免使用第三方的東西,如果用了,也必須了解里面每一行代碼都在做什么,便于后期維護。當然,像Cocos2D-X這種有大公司不斷維護的項目, 我們倒是可以放心地使用。
CocoaChina: 學習CPU、GPU等底層技術對iOS應用的調優(yōu)有何幫助?從提高性能方面,iOS應用有哪些優(yōu)化的技巧?
Zenny Chen: 其實對于普通的應用而言,針對CPU、GPU底層技術的性能調優(yōu)沒啥太大幫助。正如我在講Metal的時候提到的, CPU、GPU的底層技術的性能調優(yōu)主要是針對高密集計算,比如大規(guī)模矩陣乘法(像1024x1024),還有圖像處理(濾鏡、邊緣檢測、平滑等)、機器 視覺領域、視頻編解碼(比如MPEG-4、H264、H265、VP8等),除此之外就是一些科學計算,如我們現(xiàn)在炒得比較火的DNN,還有生物科學上的 DNA解析,還有分子動力學等。
而對于一些游戲之類的而言,大多依靠游戲引擎,所以優(yōu)化的余地也不大。對于大部分應用的優(yōu)化,目前主要手段還是通過多核多線程的并行來提升計算性能。另外像網(wǎng)絡通信這塊可以放到用戶線程而避免用于處理UI的主線程受太多干擾。
CocoaChina: iOS開發(fā)者應該如何規(guī)劃自己的職業(yè)發(fā)展路線?除了iOS之外,是否需要學習其他方面的技術?
Zenny Chen: 這個問題問得很好。我工作快有10年了。而iOS職業(yè)開發(fā)也就剛做滿3年,呵呵。其實我覺得如果大家想往技術方向發(fā)展,那么首先要做的還是把基礎打好。把基礎打好之后,能應付各種新的編程語言,各種處理器、各種操作系統(tǒng)平臺。所以我建議大家在業(yè)余時間里把傳統(tǒng)的大學里所學的科目再鞏固好,比如操作系統(tǒng)、數(shù)據(jù)結構、數(shù)理邏輯、計算機體系結構、匯編語言、C語言、網(wǎng)絡通信、數(shù)據(jù)庫。此外,大家也可以再熟悉一下HTML5相關技術,畢竟iOS所涉及的大多數(shù)都是移動互聯(lián)網(wǎng)領域,所以有點HTML5知識的話會更好些。如果自己感覺C語言學得還不咋樣可以再鞏固它。C語言就是計算機編程領域里的數(shù)學,是所有類C編程語言的鼻祖語言,而且從TIOBE排名上大家也能看到,它目前一直處于***位。另外,Objective-C***無縫地兼容C語言,就從這點上來說,C語言仍然是十分重要的。
C、Objective-C與Swift的關系是:Swift是對Objective-C的封裝,盡管這封裝得改動很大,以至于你確實看不出它仍然是類C 語言;而Objective-C則是對C語言的封裝,在C語言的基礎上又添加了面向對象以及反射動態(tài)特性。所以,學好了C對于iOS開發(fā)來說非常有幫助。
上述主要是講iOS職業(yè)技術開發(fā)者如何能進一步提升技術能力。其實歸根結底,就是把基礎打好,然后可以嘗試去專某一更專業(yè)的領域,比如通信領域、3D圖形領域、圖像識別領域等。因為大凡做iOS的基本都是在應用層上搗鼓,應用層老實說做個一年兩年能基本掌握,再繼續(xù)下去對技術提升不大。
有些iOS開發(fā)者想要提升自己在公司的地位,我覺得很大程度上取決于自己對所在公司的核心業(yè)務的了解情況。對于中小企業(yè),產(chǎn)品設計人員以及策劃不可能把產(chǎn)品描述得很細,有不少地方需要開發(fā)者對設計意圖做思維擴展。如果你對自己公司的企業(yè)文化、工作流程、核心業(yè)務邏輯都能很好把握的話,就能夠做出超出期望的產(chǎn)品,再加上好好處理人際關系,要提升地位也不會是很困難的事情。
當然,我碰到比較多的還是很多年輕的開發(fā)者對未來感到迷茫,不知道今后的路該怎么走。所以,我認為對于那些開發(fā)者自己先把心沉靜下來,然后把基礎打好,然后思考自己今后的技術走向。畢竟,iOS開發(fā)在很長一段時間以內都將是熱門的技術崗位。
要想向更高的職位發(fā)展,除了技術之外,我認為還要有對產(chǎn)品的把控、甚至市場新動向的嗅覺。既然已經(jīng)在這個行業(yè)了就必須學會如何不斷學習,快速應變市場的新熱 點。目前app開發(fā)處于快速發(fā)展變化的移動互聯(lián)網(wǎng)的中心,開發(fā)者有機會做出***潮流甚至改變世界的作品,這些經(jīng)歷本身就是寶貴的財富,只要打好基礎,做足 準備,抓住機遇,未來的前途一定是光明的。
本文鏈接:http://www.cocoachina.com/programmer/20141010/9870.html