binary-1695476_1280

Phil Nash

Phil Nash 最近加入JetBrains, 擔任C++,Objective-C 和 Swift 開 發工具的提倡者。 這裡是與 Phil 有關他的經驗和相關開發語言的對話。

Twitter: @phil_nash
Blog: levelofindirection
GitHub: philsquared

A: 嗨 , Phil, 歡迎加入JetBrains團隊! 讓我們談談你的故事。可以分享一下嗎? 

P: Hi Anastasia. 謝謝邀請我來到這裡。 要說說我嗎?  嗯…我從九歲就開始寫程式。 跟很多80年代開始寫程式的人一樣我從在8-bit的家用電腦(ZX-81、ZX-Spectrum、Commodore-64、BBC Micro 等等)上寫BASIC開始,過幾年進展到組合語言(大多時候是在6502 – 不過後來是Amiga的 68000 ,之後是PC的 8086 ).在90年代早期,我的第一份程式設計工作是寫C和C++,我在求職前一晚讀了一本C的書,有點靠唬人獲得這份工作–但我在做這份工作不久就發現我比其他人對C++懂得多。 那也是我C++職涯的開始。 很自然的,在90年代寫的是Windows的程式,從MS-DOS上開始寫–我的90年期完全都貢獻給Windows.

A: 你在軟體開發的背景是 ?  就我所了解你在Windows上開發 C++很長一段時間. 最後為何會做Objective-C 和 Swift 的 iOS開發呢?

P: 到2000年代,我做了些變動。 那時看來C++的輝煌時期已差不多到了盡頭,我認為我應該學學其他的語言,或看看C++還能在哪些產業活躍。 我先研究後者,再轉到嵌入式程式設計 –特別是行動通訊–在這領域我做了約五年。這是很好的經驗,且我很高興曾有這樣的經歷,不過我仍意識到嵌入式開發不適合我。所以我進入銀行產業,在這我待最久,一直到現在。在那期間,雖然我也換用了一些其他語言,先是C#,再是Python,然後是D和F#。在家,我完全改用Macs,所以我Objective-C很有興趣,但真正鑽下去學是在iPhone AppStore開張後才給我足夠的動機開始陡峭的學習曲線。

我用了三個星期不工作學習Objective-C和研究iPhone SDKs(那時還沒有iOS這名稱)並寫了我的第一支app – 根據經典的桌遊開發的輪流玩策略遊戲 Risk。

剛開始還蠻成功的-至少以業餘專案來看-足以讓我持續做下去。如果我一直保持那樣的動能誰知道今天將會變得如何。 很不幸地我還是在銀行工作,那時剛好遇到信用危機的打擊。 突然一星期工作80小時才是正常預期的作息且我還必須負更多額外的責任-所以那時除了工作沒有多的時間和空間。

到了我有時間回來趕進度,已經落後一大截。 我第一次寫的iPhone app,也是我第一次寫的Objective-C的程式基底已經很難維護和延展了 。我邊做邊學最後有些成果!   如此我可以開始加測試並做大幅度的重構。這時我也開始做Objective-C的分享 – 希望能幫助其他人通過初期的成長曲線-從過來人這邊來看這變得簡單多了。

A: 讓我們來談談 C++. 這語言已在出現很長一段時間。 你覺得它還能持續多久?  新的標準有足夠的價值幫助它與其他現代的編程語言競爭嗎? 

P: 當我第一次開始擔心C++作為現代程式語言的主導地位勢微,被 Java 和 C# 取代時,我也已經開始運用 Java 和 C# 寫程式,尤其是C#。 那時還看不清楚誰會是下一個標準,但 C++ 的勢微似乎在加速中。那時我想應該會有另一種系統語言上來取而代之。我注意到 D – 這讓C++開始起死回生 – 丟掉C語言的相容性(但保留binary相容性)。 D2.0由Andrei Alexandrescu開發維護,在C++圈內有很好的名聲-看起來很有希望。 可是D並沒有受到應有的矚目。同時 C++11 終於發佈,社群因此圍著它重回活力。事實上它開始看起來有重回潮流的樣子 (甚至在獲取lambdas上勝過Java)!因此已足夠啟程所謂的"C++復興"。 不過是什麼成就它呢?我想,未來的標準轉換到"Train Model":每三年出新標準,包含那時早已成熟的東西,以及個別的TSs (Technical Specifications,技術規格)想法,允許這些功能雖還未能標準化但仍能一致地實行,可能實驗性地由編譯器來做。C++14 繼 C++11後真的好好整理這個語言 – 且 C++ 一直朝這方向前進。 我們展望 C++20 以及之後的未來。

隨著委員會成員和參與者蜂擁而來,似乎之前造成 C++0x 絕境的障礙都被一掃而光,社群比以前更加活躍。看來,C++ 也許無法恢復90年代的主導風光,我相信它仍是個受歡迎且被廣泛地使用的語言,應該還有很長一段時間的榮景。

有人說 C++ 會被它70年代的既有程式碼給阻礙,C的緣故,其根源於60年代的限制。有些獨立的功能已經被放棄且完全去除,不過一般來說,對C++基礎而言只會長得更大更複雜。 且現在我們有許多很有趣的系統語言更吸引大家的目光–特別是 Rust、Go 和 Swift。 C++就算在自己的舵手室,也要把它的聚光燈分給這些。

A: 你對於新出爐的C++17有什麼看法?  看似有很多在社群的人對它的到來蠻失望的。 

P: 當 C++17 的新聞宣布哪些不會建入,我自己也屬於失望的那群。讓我們面對它吧,我們都期待看到Concepts(最終)建入其中,以及Modules。 我認為Modules很有潛力改變我們使用C++的方式 – 並解決兩個今日程式語言最大的問題 – build times 和 fragile dependencies。我們希望也能有其他的功能,如coroutines。當一看到新聞我想我們許多人都懷疑事實上是否有任何一樣建入。

不過仔細回想似乎真的有出好幾個不錯的功能。例如,我想我們許多人對 structured bindings 感到驚喜,這是一種特殊化的型態比對方式,在最後一分鐘放入。string_viewvariant  和  uncaught_exceptions 也讓C++有很大的變化。 這都沒標在主題功能上,不過這些都是C++的程式碼基底在很多方面非常需要的,讓它更整潔、更有效率。在最後,我將此視為 Train Model 的勝利。如果仍然採用C++11的處理方法完全不可能在2017年找到新標準。也許我們也甚至不會有C++14。 不過,既然我們已經有了,就好好享用C++14並期待很快就能看到C++17。 且C++20比聽起來還要接近我們了。且TSs(之前一段提過)意指我們可以事實上開始用一些功能如 Modules 和 Coroutines,在大多的編譯器已經具備。

A: Swift 基於好奇 – 當我看到你ACCU 2016的主題時我很驚訝。可以跟我們的讀者分享一下您對Swift的看法?  你覺得Swift會是在某些領域的未來嗎?

P: 目前看來這應該不會意外。我已經在用 Objective-C,也同時投資其他語言如 D 和 F# -並注意Rust 和Go。為 iOS 和 Mac 開發提供完全現代的語言正是我一直期盼的,但從沒想過這事真的發生了。 兩年前當 Craig Federighi 在 WWDC 台上發表的時候我感到無比的興奮。
第一版看起來就很有潛力,但仍有一些粗邊與缺點。Swift 2.x 插入很多那樣的東西-特別是處理錯誤的前置。我總是以"會檢查例外是否處理得當"來形容 Swift2.x -雖然它的能耐不只到這地步。Swift3.0 插入更多-但也投入大規模的整頓,去除不一致,不再採用傳統的命名(從Objective-C對應過來的框架功能時),並盡量去除來源相容中斷 (source-compatibility-breaking) 的變更。Swift3.0現在從語言的變動看來應該更加穩定-大部份計畫的變更是單純的加入。這代表很多 當初喊停的專案,尤其是比較大的,將回來擁抱 Swift。在社群中 Swift 受到很多地愛戴,我相信它的前途一片光明-在 Apple 的平台是必然的-甚至超出這範圍。 IBM 正密集地對 Swift 在 Linux 上的投資。他們甚至有一個採用Swift寫的開源網站的框架:Kitura

以語言特性來說,Swift 有許多如 Rust 和 Go 上的語言特性。但它也和 JetBrain 擁有的 Kotlin 有很多相同處。 兩者都是實用的語言,他們從函數世界中借用卻不承諾為函數程序設計語言。

A: 你個人的 部落格 說, “All problems in computer science can be solved by another level of indirection.” 這是很有趣的原則,你可以說說這嗎? 

P:  這引用David Wheeler的名言,意指我們運用抽象化(abstraction)來解決問題。  最常用的是關聯指標(pointers)或參考源(references),範圍不僅於此。 我特別喜歡 Kevlin Henney 的修改,他加入"除了太多間接層的問題"。我在一個談 Simplicity 的演說中談過太過抽象的問題。

幾年前我蠻驚訝地發現這個網域名稱還沒被佔用-所以我很快把它拿下。 當然我也必須登記 extralevelofindirection.com – 此轉到 levelofindirection.com (我總是樂此不疲地指出)

A: 你是開源C、C++和Objective-C單元測試框架 Catch 的作者,可以跟我們分享Catch背後的想法是什麼?   跟其他受歡迎的單元測試框架有何不同? 

P: 如果回到我正在測試與重構我的第一支iPhone app的時間,那時只有一種測試的框架:OCUnit-當時仍然是第三方沒有好好整合的框架。  使用這實在太痛苦了所以我開始玩票性質地以Objective-C++把C++的測試框架應用到Objective-C。  Objective-C++ 是橋接語言,它可以將 C++和Objective-C 混合在同一程式碼中 。 我開始評估C++的測試框架-包含我以前用過的-但並沒有找到任何我喜歡的。尤其它們看起來都很複雜且很難建置。 我開始有跟大多數開發者一樣的想法:" 會有多難? 一個週末我總可做出一些東西吧!" 所以我根據我自己的測試框架中想法用 C++ 寫一些東西,不過也可完全和Objective-C相容。 我有一些特定的想法,如採用原生的C/C++表示式而不用一組常看到的ASSERT_xxx macros -但仍然想把左手邊和右手邊的值分別擷取。 我剛開始試著從多個macros做起-真是一場惡夢。後來我看到 Kevlin Henney 用表示式模版完成類似的東西,我領悟到就是這條路了!  我借用他Sections(雖然它原來稱呼這為Dividers)的想法,接這他們就變成後來Catch的關鍵功能。 不過可能還有其他兩個功能造成Catch大受歡迎的原因: (1)它僅有標頭( header-only )-且裡面只有單一檔案,而且 (2) 一般來說所有的事都簡單好用且少磨擦。 你不用花一分鐘就可從 GitHub 下載這檔案並開始在真實的程式碼中用它。

最近出現一些其他很棒的框架,他們有一些,雖然非所有,相同的優勢。 所以競爭越來越激烈-不過我很高興看到這狀況,我認為大家都從中獲得利益。 我現在已開始做 Catch2,拿掉 C++11 和之前版本的編輯器的支援以幫助 muncher 簡單些,更容易在內部處理程式碼基底-也支援像多線程這樣的事。

A: 你對於身為 JetBrains 的 Developer Advocate的職責看法是? 計畫如何開始?  

P: 我喜歡JetBrains用 “提倡者(Advocate)"而非一般常用的"傳道師(Evangelist)" 來表示我這工職責的意義。 這暗示著兩種不同的關係:對社群我代表公司和她的產品,對公司我代表社群。 所以參與社群是很重要的一部分,且這是我喜愛做的事!  這包含持續在研討會分享、聚會以及更多活動,且我已經有多個安排 – 多寫些部落格 – 不管是在我自己個人的 或 JetBrains 官方的 – 並繼續我的開源軟體開發 – 尤其是 Catch 和 Catch2。 JetBrains很聰明地意識到為了保持關係,我的安排需要有相當的比例繼續寫程式。 此外,我將會做聚焦產品的屏幕錄製和網路討論會。

A: 現在來談談工具吧. 你通常用的是? 你什麼時候首次接觸 JetBrains 的工具? 

P:  在Windows方面,我採用Visual Studio很久了(可回溯到Visual C++ IDE的時代) – 在Borland C++之前 ; Mac方面我一直都在用XCode。不過當AppCode剛出現我就很熱切地想要試試看,因為我在寫C#時用過ReSharper。當時我也用過 TeamCity 幾年,且在那前一職位時我把這帶入我團隊,我也同時跟團隊鼓吹 ReSharper C++。所以在某個程度,我早就做過幾年的JetBrains產品的提倡者(Advocate)。 我也早在CLion一出版時就注意到這IDE,不過真正開始用它是因為最近我特別只用這IDE寫Catch2。 結果真的很棒,因為CMake專案可被用來產生其他建置系統專案,如此對於跨平台的開發很理想-就算所使用的編譯器在那時CLion本身還沒有支援(如Visual C++)。

A: 可以分享 CLion 、 AppCode 或 ReSharper C++ 你最喜歡的功能是 ?  什麼原因讓你最喜歡這些? 

P: 我的前一角色牽涉到一個很大且複雜的程式基底-超過百萬行的程式碼、分解跨約40個專案。 用Visual C++寫的解決方案,我們嚐試用ReSharper C++。 此IDE能很可靠地跨所有專案做程式碼流覽,這是很大的勝出。我用過類似的工具都在處理模板特別化與超載時遇到極限。 相近有關的是重構的工具-特別是重新命名-這功能也是很可靠。這些功能我最喜歡的是他們減少處理程式基底時的磨擦。我們常常提及可以省多少時間但這不一定是好的度量。 當更多你的開發時間都花在等待建置、鑽入程式中去解決問題、跟其他開發者寫信或討論,真正的程式設計時間其實只佔一天中很小的部分。 可是當你"進入一個區域"能馬上將事情搞定而不是要等上好幾分鐘好幾秒,這就差很多了。

A: Phil,感謝您接受訪問。我們祝您在這新職位上有最好的發展,也期待跟您一起共事。 

歡迎加 Phil 的  Twitter 並 問他問題。

原文: JetBrains 部落格  Soft & Share所屬公司 ESAST CO LTD 為JetBrains台灣經銷並獲授權翻譯JetBrains部落格上的文章

您會有興趣的

完整的 iOS 10 開發者線上課程- 建立 21 個 App

如果要學習 iOS App 開發的線上課程,最好找範例很多那一種,而且還是可以上得了檯面,這會讓你在「做中學」更加有成就感,這堂課似乎就是為這樣的需求所誕生.  這個課程目前使用這個 coupon code 會有折扣  coupon :  OCT2UDEMY15    

Exercises for Programmers

每次要學習新的程式設計語言會覺得很困難嗎? 如果使用你已經熟悉的練習題來學習新的程式設計語言 ? 這就是這樣的一本書, 無論對於新手或是已經很有經驗的開發者,通過作者設計的練習,讓你很快上手新的程式設計語言。

JetBrains IDE 新創公司特價專案 

您是三年內的新創公司嗎? 您將獲得企業版本半價的訂購優惠喔!

Advanced Swift: Updated for Swift 3

2016年三月出版的書, 亞馬遜獲讀者評價五顆星。 Advanced Swift帶您走過Swift的各種功能, 從低階到高階。 本書作者提供Swift程式開發高階的觀念。 如果你已經讀過Swift Programming Guide,想要探索更多, 這本書為你而寫。

喜歡我們的分享嗎?歡迎使用以下的社群分享按鈕分享給你的朋友吧!

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

分類

趨勢, 人生與成長

標籤

, ,