《Swift基礎教程》作者Boisy Pitre:Objective-C很不錯,但它已經是過去時(圖靈訪談)

盼盼姐發表於2015-09-23

Boisy G. Pitre是一位資深蘋果開發專家,曾任Siri語音識別技術提供方Nuance公司Mac產品小組的資深軟體工程師,參與開發了語音識別軟體Dragon Dictate。MacTech雜誌“Developer to Developer”月度專欄作家,曾多次在MacTech和CocoaConf等會議上發表技術演講。現任情緒識別公司Affectiva的移動遠景規劃師,領導團隊致力於將公司的表情分析技術遷移到移動平臺。Boisy著有《Swift基礎教程》一書。

《Swift基礎教程》作者Boisy Pitre:Objective-C很不錯,但它已經是過去時(圖靈訪談)

問:你寫作《Swift基礎教程》的目的是什麼?

當蘋果引入Swift時,我就知道這門語言會在幾年之內成為計算機語言版圖中的重要一塊。我的目標是以有趣而輕鬆的方式向讀者們介紹這門新語言,讓讀者們搶先起步,並在之後的學習中迅速加速。寫作這本書很具有挑戰性,因為這門語言可以討論的東西實在是太多了,而我不想讓讀者們感到不知所措。這本書是我為初學者設計的,從這個角度上說,這本書很成功。

問:你能否向讀者們介紹一下你在Affectiva從事的工作?

當然。Affectiva是一家在數字體驗中引入情緒智力的科技公司。我們的技術根據實時面部分析來判斷一個人的情緒狀態。我是這家公司的移動遠景規劃師,我的責任是把技術和移動世界連線起來。我們已經實現了這個目標,而我現在正在努力提高移動平臺的技術,這些平臺包括iOS和Android。我們有一個可以供開發者使用的SDK,用於把情緒智慧整合到他們的應用中。

問:在你看來,開源Swift會改變iOS的生態環境以及iOS和Android之間的關係嗎?

很難預測作為開源語言的Swift會如何影響Android開發。Google在語言初創方面有Go語言,它對於Android來說就像是Swift之於iOS。我期待會有人用Swift寫Android應用,就像是有人用Go寫iOS應用一樣。一種語言會比另一種語言更成功嗎?各自平臺的語言會依附在它們本來的平臺上嗎?只有時間能告訴我們。但是話說回來,蘋果開源Swift語言的決定肯定會讓各種變化朝更好的方向發展。

問:Swift從其他語言中整合了哪些特性?其中你最喜歡的特性是什麼?

所有計算機語言都會從其他語言身上借鑑一些東西。對於Swift來說也是如此。從語法和儲存模型的角度上說,我在Swift上能看到很多Rust的影子。很明顯,Swift對於安全的強調使其與C和C++保持了一定距離,所以它們之間的共同點比較少。我相信蘋果很努力想讓Swift遵從自己的主張,成為自己的語言。對於未來,我們拭目以待。

到目前為止,我最喜歡的Swift特性是語法的清晰度。用關鍵字‘let’建立一個常量變數,和用關鍵字‘var’建立一個可變變數相比,很大程度上簡化了C/C++風格的語法。用執行命名引數可以清晰地寫函式(如Objective-C),而建立和使用閉包也變得更簡單。

問:Swift在未來有可能會取代Objective-C嗎?

當然。但是沒人知道會用多長時間,但是我認為應該是在5年之內。我們很容易就忘記計算機語言的生命有多長(現在C語言已經40歲了)。Objective-C不會徹底消失,但是我能預見在未來的某一個時刻,它在語言世界中的份額將變得非常小。

問:iOS中的很多應用框架都還是Objective-C的,目前呼叫的方式是使用橋接標頭檔案,今後的呼叫是否有可能變為更加簡潔的方式?未來是否會出現更多基於Swift的框架?

幾乎可以肯定是這樣的,而且我相信蘋果正在努力實現這件事。但是我們得記住,這是一個艱鉅的任務,需要轉換的框架可不在少數。但是我相信這些工作不會花費太久的時間,而且我們很快就會看到專屬於Swift的新框架,這樣的框架在Objective-C中甚至都找不到同類。這種情況的發生肯定會對Objective-C的後續使用造成很大的影響。

問:你建議初學者應該先學Objective-C還是Swift?

肯定是Swift。Objective-C是一門很不錯的語言,但是它帶有C語言的遺留問題和包袱。對於編寫應用來說,Objective-C在未來會變得越來越脫節。事實上,我現在不會用Objective-C來開啟任何一個新的iOS或OS X專案。對於新專案來說我只使用Swift來開發。

問:對於已經掌握一兩門程式語言的程式設計師來說,你認為他們怎樣才能快速有效地學習一門新語言?

這取決於已有的一兩種語言是什麼。如果這兩種語言是Objective-C和Swift,或者C和C++,或者其中任何組合,為了挑戰思維,我會推薦你學習一種完全不同的語言。像C, C++, Objective-C,以及Swift這樣的命令式語言都遵循著相同的模型,所以要學習同類語言很簡單。你一定要讓自己多接觸不同的語言泛型,所以我會推薦你學一種函式式語言,比如Scheme。雖然你不會用這種語言來寫應用,但是它會全面開啟你對計算機語言的理解。

問:在學習程式語言的過程中,你認為什麼時候接觸大量的庫和API比較合適?對於某個平臺的開發者來說,他有必要掌握所有可能用到的API嗎?

我經常會用木匠的工具腰帶做類比。他的腰帶中會裝有所有想象得到的工具嗎?不……只有那些經常使用的工具。當他需要特殊工具的時候,他會走到他的卡車前,開啟放在裡面的大工具箱,然後使用某種工具一次到兩次,然後把它放起來。

對於程式語言和API來說也是如此。你無法完整地瞭解所有API,但是你知道得越多,你就越能更好地解決問題。我會建議你先比較完整地學習一門語言,然後再繼續研究這種語言的細微之處,也就是開始接觸這門語言中可以用來建立有用應用的框架和API。然後你可以每週一次,選擇一個新的API,投入3-5個小時來學習它的功能。你可能並不會經常使用這個API,但是你知道它就在那,當遇到適當的時機時,你就會準備好用它來完成特定的任務了。

問:對於一位iOS開發專家來說,他的知識框架是什麼樣的?

一個全面的iOS專家必須掌握這四樣東西:

  • (1) 用來寫應用的語言(Swift / Objective-C);
  • (2) 對建立軟體的工具的控制(Xcode);
  • (3) 關於iOS應用基礎框架和API的強大知識儲備;
  • (4) 鑑別好的UI設計的能力。

要經歷很多應用和上百小時的程式設計才能達到這個水平。每個應用都會帶來自身的要求和需要的API,所以你寫的應用越多,就能越廣地接觸到各式蘋果框架的,而你的UI設計技巧也會越來越好。


更多精彩,加入圖靈訪談微信!

相關文章