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