C++ API設計大師Martin Reddy:選擇最合適的語言

非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/article/58481程序員

Martin Reddy博士是軟件行業的一名老兵,有着15年以上的從業經驗,早年,他曾在SRI International 供職5年,他成功建立了在Web上描述3D地球空間信息模型的ISO標準,而且還連續兩年被選爲Web3D協會的會長。他曾在Pixar動畫工做室工做過6年,擔任內部動畫系統的首席工程師,這些API在一些奧斯卡獲獎及提名影片的製做中都發揮了關鍵做用,這些影片包括《海底總動員》、《超人總動員》、《賽車總動員》、《料理鼠王》,以及《機器人總動員》等。聽說《超人總動員》中的超人爸爸的頭部原型就是借用自Martin Reddy。  web

他還開辦了一家諮詢公司Code Reddy,爲各家軟件公司提供技術諮詢,爲大型在線3D虛擬世界《第二人生》設計了API並改善了其基本架構。如今Martin Reddy擔任ToyTalk公司的首席技術官。咱們聯繫他的時候,他正在爲公司即將發佈的第一個產品忙得不可開交。算法

圖片描述

圖靈社區:恭喜大家公司在最近推出了新產品,大家的新產品是基於語音識別和人工智能技術,你認爲語音識別和人工智能會是將來的主要發展方向之一?shell

Reddy:很是感謝!是的,在幾年前,Siri問世以後,咱們就開始看到愈來愈多的用語音做爲輸入機制的應用和設備。從控制電話,到電視,再到遊戲控制。我認爲咱們想和計算機交流的方式應該和咱們彼此間交流的方式相同。因此我預測咱們將會看到語音識別技術的大規模飛躍,並且爲了更好地理解咱們說的話和作出合適的迴應,天然語言處理和人工智能這些相關領域發展也會突飛猛進。編程

圖靈社區:你曾經爲Pixar動畫工做室工做過,這是一家領先於世界的團隊。你把它的成功更多地歸功於創造力仍是它在技術上的優越性?服務器

Reddy:從基礎的層面來講,Pixar的成功能夠歸功於富有創造力的故事設計。複雜的故事線,討喜的角色,以及機智的對白會讓你鍾情於這部電影;而不是射線追蹤反射,或者新的子面散射算法。可是,Pixar的獨特之處更在於它可以把好故事和精彩的3D圖像相結合。就像是John Lasseter(《玩具總動員》、《怪物公司》導演,《海底總動員》 和 《超人總動員》製片人)所說的那樣:「藝術挑戰科技,而科技激發藝術。微信

圖靈社區:除了C++你還喜歡什麼語言?你喜歡什麼工具?網絡

Reddy:我喜歡用合適的工具來作合適的工做。C++對於開發可移植和性能優先的代碼來講是一門很好的語言。可是其餘的語言對於其餘的工做極可能更加勝任,並且有些語言在某些環境下能夠達到獨霸天下的程度,好比Objective-C之於iOS,JavaScript之於網頁。當我能夠選擇的時候,我就愛上了Python。我曾經喜歡使用perl或者shell腳本編程,我如今轉向了Python。甚至對於不少GUI工具,我也轉向了Python,PyQt和 PyInstaller環境下,我能夠很快的開發代碼,而後做爲獨立的二進制代碼在Windows, Mac OS X, 以及Linux平臺上運行。對於我來講Python的最大問題在於run-time類型查看的時候容易把代碼運送給用戶,這樣就會由於類型不匹配或者未定義名稱而形成運行時的異常。爲了彌補這個缺憾,我會常常在個人Python代碼上使用源碼檢查器,好比PyFlakes 或者 PyChecker。架構

圖靈社區: C++的應用領域變得愈來愈小,你認爲它將來會有什麼樣的發展?C++的強勢領域在哪裏?你認爲C++的演進方向是什麼樣的?併發

Reddy:好問題!我一直以來看見的都是C/C++處在最受歡迎語言的前列,可是其餘的語言也在變得愈來愈被你們接受。在個人公司咱們仍然在不少場合使用C++,由於它能夠成爲在衆多平臺上都能運轉的有效代碼,同時也能夠進入性能優先的3D圖像庫和語音識別系統。可是,新的設備和環境已經讓其餘語言變得愈來愈突出。好比移動、平板,以及web開發如今正值火熱的時候,並且如今看來這樣的勢頭在將來只會有增無減。我認爲C++在我前面說過的領域中是很強勢的,可是這些新涌現出的編程環境會有一些不一樣的需求,而C++對於這些需求來講未必是最好的選擇。我認爲這是一件好事。

圖靈社區:你怎麼看C++新標準?它會影響API的設計嗎?現存的庫如何保持更新呢?

Reddy: C++11對於C++來講有不少很棒的提高。對於API設計而言,有不少新的特性你能夠拿來用在你的API上,包括向元組、匿名函數、線程基元、智能指針,以及嶄新的重寫和最終關鍵詞。固然,若是你的API必需要被沒法使用C++11編譯器的客戶使用的話,那麼你就須要維持C++03語法了,或者爲你的C++11客戶提供一個API包裝器。

圖靈社區: C++的ACE框架至關複雜,但ACE是當年分佈式框架的首選。現今可選的技術至關多,使用複雜的C++構建分佈式應用還有優點嗎?有沒有更易用的C++網絡技術框架?

Reddy:我對ACE不是十分了解,可是有一些能夠選擇的底層網絡框架,包括Boost Asio, cpp-netlib, 以及Qt的網絡訪問API。

圖靈社區:一個新設計的系統API,早期版本常常陷入「狂熱」的增長特性(接口、參數、用途),而到了穩按期卻經常成爲升級時甩不掉的包袱,甚至連早期bug都會變成被迫持續支持的「feature」。請問設計初版API時如何在表達力、易用性、兼容性方面達到平衡?

Reddy:這是API設計最爲重要的部分之一:保持事情的簡單性。有一點你說得很對,全部出如今早期版本API中的特性都必須在API的整個生命週期中獲得持續支持(除非你打破向後兼容性的限制)。我支持不要在接口上添加任何東西的辦法,除非真的有必要。不要添加任何如今沒有用,可是你懷疑可能在將來會有用的東西。集中精力解決核心問題。

圖靈社區: Go語言變得愈來愈流行了,你對這門打算要取代C/C++的語言是什麼態度?

Reddy:我愛Go!它真是一門偉大的語言。事實上,在咱們公司裏,咱們在服務器端的基礎設施上用的都是Go語言。它的編譯方式是靜態類型的,這一點和C以及C++很像,可是設計上卻比C++簡單不少,並且Go有強大的網絡支持以及內置併發性基元,這點真是太妙了。並且Go語言的設計人之一正是Ken Thompson,他也是C語言的最初設計人,因此這門語言註定是很靠譜的!

圖靈社區:像Python這樣的「可執行僞代碼」被愈來愈多的人所接受,你能預測一下將來的編程語言會是什麼樣的嗎?是寫文章同樣任人都會仍是仍然屬於程序員?

Reddy:像我上面說的那樣,我喜歡Python。它解讀清晰和動態類型的特性讓它變得更容易上手,更好學習。加上大量的標準庫以及垃圾回收存儲器管理,我認爲Python是最適合做爲第一門編程語言來學習的。我也認同Python能夠服務於非計算機科學家,來幫助你們實現計算和自動化,好比Python已經在生物信息領域裏很是受歡迎。可是我認爲咱們始終會存在語言的分水嶺,不一樣語言會有各自適合的領域。有一些語言對於普通人來講更加平易近人,可是我相信咱們仍然須要以性能爲目的,可編譯、靜態類型的語言,這些語言在效率和準確性至上的領域會更爲重要。

圖靈社區:做爲程序員應該怎麼學習?要變成編程大牛須要數十年的時間嗎?有沒有捷徑可走?對於計算機專業的大學生們,你有什麼特別的建議嗎?

Reddy:我認爲要變成編程大牛不須要數十年的時間。可是我認爲要了解你的編程語言的深度和細節須要不少的熱情,要理解你的編譯器或註釋器是如何幫助你的,它們在後臺作的工做細節是什麼樣的。對於C++來講,你理解如何爲模板生成代碼嗎?你知道虛函數表是如何工做的嗎?或者多重繼承的問題在哪裏?對於Python來講,你理解引用計數是如何工做的嗎?你知道變量是由值仍是由引用經過的?對於你工做上最重要的工具,不要知足於表面的知識。你對本身的工具瞭解越深,你就會成爲更好的程序員。

可是我我的認爲一個好的程序員和一個好的工程師是不一樣的。優秀的程序員知道如何寫代碼,而一個優秀的工程師知道如何架構以及如何建造複雜的系統,在這樣的結構上會有更多的工程師爲其工做。要成爲一個好的工程師更加困難,而最好的老師就是經驗。因此我會建議在校生去擁有大型軟件產品的公司作實習,同時做爲工程師團隊的一員,學習在複雜生產的軟件上工做的流程和技巧。

圖靈社區:在中國,不少人都更傾向於成爲管理層。你認爲程序員能夠做爲一輩子的事業嗎?

Reddy:這是個有趣的現象,由於我看到的多數高級工程師都想一直寫代碼,而不想變成管理層。若是你很擅長你正在作的工做,你可能就會獲得升職,從傳統意義上講,這就意味着管理層。可是我如今看見不少「雙軌」型的事業發展,尤爲在科技公司裏,也就是說你會獲得升職可是仍然從事一線的開發工做。好比在Pixar的時候,咱們就有一個「技術帶頭人」,這我的就會決定其餘幾位工程師的技術方向,而另外一位「管理帶頭人」就會接受你們的報告,同時也要指導併爲這些人寫評語。固然,像技術總監、軟件架構師、以及主工程師這樣的路線都是你提升本身的方向,因此你沒有必要非得擔負起管理這個包袱。


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

圖片描述

相關文章
相關標籤/搜索