非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/article/76098程序員
Jon Skeet,谷歌軟件工程師,微軟資深C# MVP,擁有10餘年C#項目開發經驗。自2002年來,他一直是C#社區、新聞組、國際會議的活躍技術專家和Stack Overflow總排名第一的用戶,回答了數以萬計的C#和.NET相關問題,他還創建了Joda Time的.NET版本Noda Time。Jon著有《深刻理解C#》,他常年維護博客Coding Blog。外國程序員們調侃他的段子"Jon Skeet Facts"也頗有趣。數據庫
圖靈訪談:毫無疑問你是一位C#方面的專家,撰寫了3版的《深刻理解C#》,你有計劃爲你熟知的其餘語言或工具寫書嗎?編程
Jon:很遺憾,除此以外我不多有熟悉的工具或語言了。我在Java方面還算比較專業,可是我感受講Java的書已經不少了。微信
這幾年,我一直想讓本身學習一下F#,Go或者Ruby……我以爲我真應該從某個時候開始學起來。我以爲在我學習F#的時候截個屏感受應該很棒,這時候要是再有一個具體的學習目標就更好了。我但願讓其餘人看到個人學習過程會對他們產生幫助。網絡
圖靈訪談:你每週花在回答問題上的時間有多少?對你來講最大的收穫是什麼?閉包
Jon:要弄明白我每週花在StackOverflow上的時間很是困難——這不是件我想弄明白的事兒,由於我可能並不喜歡這個答案。回答問題會爲我帶來各類各樣的收穫,我最喜歡的事兒就是在回答一個問題的同時學到新的知識。另外,有時候我不少年前回答的問題會忽然收到新的評論,這個評論來自於如今仍須要面對這個問題的人,他們用個人答案解決了問題,這樣的事我也很喜歡。異步
圖靈訪談:不少你的讀者很好奇你在Google的工做。Google內部有用C#寫的項目嗎?是什麼項目?函數
Jon:對於我在Google的工做我不能說太多,可是我能夠告訴你們我在Google已經寫了兩個C#的項目:個人針對C#的協議緩衝(Protocol Buffers)端口(20%的時間)以及Windows Phone 7上Google搜索應用的第一個版本。工具
還有一些關於訪問Google API的C#項目,.NET的Google APIs Client Library是這些項目的根。性能
圖靈訪談:你Google軟件工程師的身份和微軟MVP的身份之間有衝突嗎?若是有,你是如何作到在Google提高你的技術能力的?
Jon:我只是個名義上的MVP,事實上——我並無在保密協議(NDA)下,我也沒有從微軟那裏獲得什麼禮物,好比MSDN(微軟開發者網絡)的免費訂閱之類的。可是做爲MVP我仍是很高興的,這證實了微軟已經承認了我對.NET社區作出的貢獻。
要想在Google提高技術能力和在別的公司決然不一樣,在Google編程的挑戰和在其餘地方遇到的挑戰有着天壤之別。爲了要在C#方面跟得上,我都得在本身我的的時間裏學習——好比我在Noda Time上花的時間也是個人業餘時間。
圖靈訪談:確實,C#是一種優雅、便捷、規範化的語言,可是,你認爲C#最大的問題是什麼?有什麼已經存在的語言已經解決了這個問題?
Jon:仍是那個問題,我對其餘語言知之甚少——因此讓我來講哪一個語言解決了C#沒有解決的問題仍是挺難的。好比,雖然之前也被告知過,可是在我習慣於在C# 2裏以匿名方法閉包以前,我都不太喜歡這樣的用法。這是一個關於Blub困境的例子。我很喜歡C#讓處理數據(經過LINQ)和異步代碼變得更簡單,可是,我不喜歡在C#裏大量使用動態類型,雖然我很欣賞C#把這部分加入到語言中。我懷疑將來的語言可能會混合使用動態類型和靜態類型,可是要從頭開始就這麼作——這樣就能夠避免這兩種類型偶爾在C#裏產生的矛盾了。
C#曾經有個問題(雖然已經在C# 6中得以解決了)是執行不可變類型時所須要的樣板代碼的數量。長時間以來我一直都很喜歡不可變性,可是C#在幾年來的衆多改進中(好比對象初始化設置)都只是幫助提升了可變類型。能看到主構造函數和只讀自動執行屬性開始解決這方面的問題我很高興。
圖靈訪談:你但願看到C#在將來有什麼樣的新特性?Go的並行執行goroutines?或者是像F#或Scala那樣的模式匹配?
Jon:我認爲模式匹配是頗有可能的,可是對於goroutines我並不肯定……我感受C#已經選擇了異步這條路線,若是混搭上goroutines會顯得很奇怪。
說到其餘特性——C#最好的特性永遠是那些讓我產生驚喜的特性。我以爲這樣的特性對於我來講就必需要有CLR改變,固然,個人意思並非它們已經毫無可能。若是代碼能明確顯示出與之工做的數據類型的話,我就會比較欣賞,這樣就能夠很好地阻止你在上面執行不合適的操做了。在這樣的一些原則下,我更願意看到能夠容許讓單一實現分享到多種類型的類型系統,每一個類型只能顯示底層API的有限子集。在某些狀況下,可能會出如今同一個API下的多重類型,可是它們仍舊會是徹底不一樣的類型——可能之間還會有一些顯式轉換。固然,F#的「測量單位(Units of Measure)」的概念可能也是出於這樣的考慮。
圖靈訪談:C#或者說.NET彷佛只能運行在Windows或者Linux下的Mono上,C#的發展前景對於C#程序員來講彷佛也不是很明朗。你認爲.NET應該擴展跨平臺的兼容性嗎?
Jon:我很是高興能看到像Xamarin這樣的工具,它可讓C#代碼運行在iOS和Android上,並且,我還買了一臺iPad和一臺Mac Mini,就是爲了探索代碼的運行狀況。到時候你也可讓C#代碼運行在全部主流的移動平臺上,還包括Mac,Linux以及Windows,我感受這還不算是很受限制吧。Mono的邊邊角角上仍是有點糙,這是當我研究Noda Time國際化的極端案例時發現的——可是它的工做性能仍是好得讓人驚歎。Roslyn如今已經開源,並且已經能被Mono所用也是很振奮人心的事兒。
圖靈訪談:微軟如今將9寸如下wp受權費降爲0。你認爲這會增長C#開發者的數量嗎?你對WP有什麼樣的期待?
Jon:由於Windows Phone和Android之間的利益衝突,我以爲我最好仍是不要回答這個問題。
圖靈訪談:做爲一位C#高手,你對C#初學者們有什麼建議嗎?對於有編程經驗的人來講,你想提醒他們在學習過程當中要注意哪些事?
Jon:若是是個人話,我會首先關注語言的核心方面。不少寫給初學者的書(在我看來)從開始的時候就用GUI和數據庫的溝通做爲第一章的內容,讀者們還不知道他們敲下的代碼是什麼意思呢!這樣作就是欲速而不達。我認爲應該先要確保你理解這個語言,以後再去學習一堆關於函數庫的知識……若是這樣,就算你不知道具體某個調用是幹什麼的,至少你能夠理解你面前代碼的運行機制,而後你能夠經過查看相關的文檔來理解剩下的。
最常常被人誤解的C#(以及Java)的方面彷佛就是各類變量、對象、以及索引的區別——若是你能夠百分之百地肯定你理解了其中的區別,那你就已經上路了。
圖靈訪談:在中國不少程序員隨着年齡增大會轉換角色,變成經理,你對這些程序員有什麼樣的建議?
Jon:從軟件工程師到經理的轉換在西方也很是常見,我懷疑雖然這有時是個好事,但不少時候也不是。我常常會看到不少經理在私底下都極想要作本身手下工做範圍內的編程工做。我是想說,一個好的經理應該有能力用他們的經驗來幫助初級工程師變得更有效率,他們能夠分享本身的經驗,在管理的同時也能指導他們。
從我的角度上說,我很高興這兩樣我都有所涉及——我不想把本身和編程隔離,可是肩負必定的管理責任也是一件好事。