《七週七併發模型》作者Paul Butcher:這是一個激動人心的程式設計時代,也是一個帶有很大不確定性的時代(圖靈訪談)
Paul Butcher
一位資深程式設計師,涉獵廣泛,從微控制器編碼到高階宣告式程式設計無所不精,現在他開辦了獨立諮詢公司Ten Tenths。他曾任SwiftKey的首席軟體架構師,並先後擔任Texperts和Smartner的CTO。
Paul Butcher的著作《七週七併發模型》延續了《七週七語言》的寫作風格,通過七個精選的模型幫助讀者瞭解併發領域的輪廓。除《七週七併發模型》外,Paul還著有在亞馬遜獲得全五星好評的《軟體除錯修煉之道》。
感謝Paul再次接受圖靈的訪談!您曾經講過,在1989年開始攻讀博士學位的時候,平行計算和分散式計算並不是當時的主流。為什麼不選擇當時的主流作為學習研究領域?
老實說,當時我的估計略有偏差。我當時認為平行計算和分散式計算不久就會成為主流。但實際上,CPU執行不斷加快,人們完全沒有必要為了顯著提升效能,從序列程式設計轉向併發程式設計。
最近,CPU的執行速度達到了瓶頸,很難再次提升。正因為如此,我當時的預測最終得以實現(離當時的預測已經有25年了)。
併發和並行非常相似,兩者容易相互混淆。那麼兩者之間的不同點有哪些?
不只是中國人,對於講英語的人也一樣,併發和並行是一種常見的易混淆概念。其實,大多數情況下,兩者的區別不是特別重要,重要的是,從序列程式設計轉向非序列程式設計,也就是併發和並行程式設計。併發和並行都屬於非序列程式設計,它們兩者面臨的挑戰也是一樣的。
併發程式碼具有多個邏輯的控制執行緒,但這些執行緒可以或者不必執行在多個核上。並行程式碼則真正執行在多個核上。通常,並行是關乎效能的(通過使用多核,我們希望我們的程式碼執行得更快),而併發則是關於解決一個本身就是併發的問題域。
我之所以在《七週七併發模型》中探討兩者的區別,是因為存在一個常見的誤解:並行指的是不確定性。事實卻並非如此。如果我們為了執行得更快,並行處理一些數值計算,得到的結果跟序列程式碼的答案完全一樣!
距離本書的出版日期也有一年多了。是否有其他的併發模型出現?
本書出版的時候,就已經存在超過7種的併發模型了!《七週七併發模型》的最後一章也列出了其他的併發模型,如Fork/Join 和work-stealing、資料流、響應式程式設計、函式式響應程式設計、網格計算和元組空間。其中,最有趣的,我認為是函式式響應程式設計。
書中的每一章都選用了恰當的程式語言來展示併發模型。除了程式語言這條線索,是否還有其他線索來學習併發模型?
為每一章選擇不同的程式語言,是為了儘可能地降低讀者對示例的理解難度。整本書也可以只選擇一種語言,比如Java,但這樣做的後果是,程式碼將變得囉嗦冗長,讀者也更難理解。這一點尤其適用於函式程式設計那一章。儘管我們可以用Java編寫函式程式碼,但這並不是Java的常見編寫方式。這樣很容易一葉障目,只見樹木不見森林。
重要的是要明白,你並不需要使用本書中使用的全部語言。如果你目前是一名Java程式設計師,你也可以使用Akka庫輕鬆地編寫Actor程式碼,但你的程式碼肯定會比使用Elixir或者Scala 更加繁瑣。因為你可以運用Elixir和Scala裡面的Actor 程式設計模型。
在選取程式語言的時候,除了考慮程式語言的併發特性,還需要關注哪些其他的特性?
還有許多特性需要考慮,大多數還特別實用,例如:
現有的程式碼有哪些,可以用於之後的互操作?
支援工具怎麼樣?
該語言社群的活躍度怎麼樣?
…...
不同程式語言之間的相互競爭,讓語言選取變得更加複雜。而且,目前很難預測出哪種語言未來會受歡迎。
我們正處於一個非常激動人心的程式設計時代,但也是一個帶有很大不確定性的時代。
程式語言變革對程式開發者的影響有哪些?
就像我在上一個問題的回答一樣,我們很難預測究竟哪種語言會變成主流語言。這對於程式開發人員來說,確實是一種嚴峻的挑戰。
儘管如此,我認為還是有一些明確的趨勢的。函數語言程式設計語言將越來越重要,併發、分散式程式設計和容錯性良好的語言同樣越來越受到青睞。
唯一的解決辦法就是繼續學習。選擇一門新語言進行學習,然後選擇另外一門,至少確保一門語言有很強的函式式語言韻味。
上次接受圖靈訪談的時候,您曾經說:“採用多語言編寫的程式本身就很有挑戰性,如果再引入多種併發模型,情況會變得更糟。”有沒有可能建立一種普遍適用的程式語言和一種萬能的併發模型?
建立一種“真正的”程式語言,是所有程式設計師努力追求的“聖盃”,但卻很難實現。有許多嘗試試圖建立一種語言,來滿足每個人的需求,但他們從來都沒有成功。
Scala是一種多範型的語言,允許很多不同的程式設計風格,比如命令式、物件導向式、函式式、Actor......雖然可以運作,許多人認為學習和使用Scala太過複雜。
就我個人而言,我喜歡更簡單、更集中的語言,一次做好一件事。
從我的角度看,編寫程式碼跟寫作在一定程度上非常相似。既然這兩種您都經歷過,可以給我們分享下兩者之間的相同點和不同點嗎?
這是一個非常有趣的問題!是的,至少對於我來說,編寫程式碼和寫書兩者之間有一些相同之處。不管是寫書還是編寫程式碼,最開始我只是大膽地寫出“東西”。它們可能特別冗長、混亂,甚至不能表達出我想要表達的意思。但是,通過反覆地閱讀、檢查,慢慢地我會找到自己最滿意的結果。
當然,寫作和編碼之間最大的區別在於,我可以用自己編寫的測試對程式碼進行驗證。如果測試通過,我有充分的理由認為程式碼的正確性。不過,寫作卻沒有對應的自動化測試。我只能把自己編寫的文字拿給別人審閱,看是否能被他們所理解。
《軟體除錯修煉之道》和《七週七併發模型》兩本書都受到了讀者的追捧,您是否有計劃再寫一本書?
我有計劃再寫幾本書,但計劃還處於非常早期的階段。可能是關於創業者和投資者的建議諮詢類圖書,幫助他們構建開發團隊,落實開發過程和合適的體系結構。
聽說您最近一段時間痴迷於賽車。在上週的一次季賽中,還獲得了第3名的好成績。如此喜愛賽車的原因是什麼?這項運動有沒有激發您某種思維模式或者鍛鍊了某些能力?
我真的希望說,賽車跟軟體程式設計之間存在一定的聯絡。但實際上,它們之間唯一的聯絡,就是軟體工程師的工作讓我賺到足夠的錢來支付賽車方面的花銷。
Paul在2016年Qcon大會做了精彩的演講,歡迎到視訊下載區下載欣賞。
更多精彩,加入圖靈訪談微信!
相關文章
- [英文]Paul Butcher: 這是一個激動人心的程式設計時代,也是一個帶有很大不確定性的時代(圖靈訪談)程式設計圖靈
- 《七週七併發模型》作者Paul Butcher訪談問題有獎徵集(圖靈訪談)模型圖靈
- 《七週七併發模型》作者Paul Butcher:用併發計算實現最大效率(圖靈訪談)模型圖靈
- [英] 《七週七併發模型》作者Paul Butcher:用併發計算實現最大效率(圖靈訪談)模型圖靈
- Java程式設計師:這是一個最好的時代,也是一個最壞的時代Java程式設計師
- Bruce Tate:恐懼是我寫作《七週七語言》的初衷(圖靈訪談)圖靈
- 雲風:一個程式設計的自由人(圖靈訪談)程式設計圖靈
- [英]Bruce Tate:恐懼是我寫作《七週七語言》的初衷(圖靈訪談)圖靈
- 筆記:《七週七併發模型》筆記模型
- 《我的第一本程式設計書》作者平山尚,訪談問題有獎徵集(圖靈訪談)程式設計圖靈
- 《高效程式設計師的45個習慣》作者:掌握多種語言是我的財富(圖靈訪談)程式設計師圖靈
- Java併發程式設計中的設計模式解析(二)一個單例的七種寫法Java程式設計設計模式單例
- 《智慧時代》讀書筆記:這是最好的時代,也是最壞的時代筆記
- 《Erlang程式設計(第2版)》作者Joe Armstrong訪談問題有獎徵集(圖靈訪談)程式設計圖靈
- 《Java程式設計師修煉之道》作者Ben Evans訪談問題有獎徵集(圖靈訪談)Java程式設計師圖靈
- 圖靈成立七週年——我也曬一下圖靈的書圖靈
- 有獎 |《Lua設計與實現》作者codedump訪談話題徵集(圖靈訪談)圖靈
- 《CSS設計指南》作者Charles Wyke-Smith訪談問題有獎徵集(圖靈訪談)CSSMIT圖靈
- 《黑客與設計》作者David Kadavy訪談問題有獎徵集(圖靈訪談)黑客圖靈
- 《Java 8函數語言程式設計》作者Richard Warburton訪談問題有獎徵集(圖靈訪談)Java函數程式設計圖靈
- 譯後訪談《Scratch少兒趣味程式設計》作者阿部和廣(圖靈訪談)程式設計圖靈
- 《物聯網設計》作者Adrian McEwen訪談問題有獎徵集(圖靈訪談)圖靈
- 《機器學習》作者Peter Flach訪談問題有獎徵集(圖靈訪談)機器學習圖靈
- 《一個定理的誕生:我與菲爾茨獎的一千個日夜》作者塞德里克•維拉尼訪談問題有獎徵集(圖靈訪談)圖靈
- 《Python計算機視覺程式設計》作者Jan Erik Solem訪談問題有獎徵集(圖靈訪談)Python計算機視覺程式設計圖靈
- 《程式碼本色:用程式設計模擬自然系統》作者Daniel Shiffman訪談問題有獎徵集(圖靈訪談)程式設計圖靈
- 《寫給大家看的設計書》作者Robin Williams:我永遠是一位教師(圖靈訪談)圖靈
- 《程式碼本色》作者Daniel Shiffman:藝術家也程式設計(圖靈訪談)程式設計圖靈
- Brian X. Chen:永遠線上的時代(圖靈訪談)圖靈
- @程式設計師鄒欣 訪談問題有獎徵集(圖靈訪談)程式設計師圖靈
- 《學習響應式設計》作者Clarissa Peterson訪談問題有獎徵集(圖靈訪談)圖靈
- [英]專訪《寫給大家看的設計書》作者Robin Williams(圖靈訪談)圖靈
- 【圖靈成立七週年】我和圖靈的那些事圖靈
- Dave Thomas:一個開發者的為與不為(圖靈訪談)圖靈
- [視訊]《我的第一本程式設計書》作者平山尚:“非科班”的逆襲(圖靈訪談)程式設計圖靈
- 《R包開發》作者Hadley Wickham訪談問題有獎徵集(圖靈訪談)圖靈
- 《Flask Web開發》作者Miguel Grinberg訪談問題有獎徵集(圖靈訪談)FlaskWeb圖靈
- 程式設計是一個沒有前途的工作程式設計