Jon Skeet:我不想知道我在SO上到底花了多少時間(圖靈訪談)

盼盼姐發表於2014-04-24

Jon Skeet,谷歌軟體工程師,微軟資深C# MVP,擁有10餘年C#專案開發經驗。自2002年來,他一直是C#社群、新聞組、國際會議的活躍技術專家和Stack Overflow總排名第一的使用者,回答了數以萬計的C#和.NET相關問題,他還建立了Joda Time的.NET版本Noda Time。Jon著有《深入理解C#》,他常年維護部落格Coding Blog。外國程式設計師們調侃他的段子"Jon Skeet Facts"也很有趣。

Jon Skeet:我不想知道我在SO上到底花了多少時間(圖靈訪談)

圖靈訪談:毫無疑問你是一位C#方面的專家,撰寫了3版的《深入理解C#》,你有計劃為你熟知的其他語言或工具寫書嗎?

Jon:很遺憾,除此之外我很少有熟悉的工具或語言了。我在Java方面還算比較專業,但是我感覺講Java的書已經很多了。

這幾年,我一直想讓自己學習一下F#,Go或者Ruby……我覺得我真應該從某個時候開始學起來。我覺得在我學習F#的時候截個屏感覺應該很棒,這時候要是再有一個具體的學習目標就更好了。我希望讓其他人看到我的學習過程會對他們產生幫助。

圖靈訪談:你每週花在回答問題上的時間有多少?對你來說最大的收穫是什麼?

Jon:要弄明白我每週花在Stack Overflow上的時間非常困難——這不是件我想弄明白的事兒,因為我可能並不喜歡這個答案。回答問題會為我帶來各種各樣的收穫,我最喜歡的事兒就是在回答一個問題的同時學到新的知識。另外,有時候我很多年前回答的問題會突然收到新的評論,這個評論來自於現在仍需要面對這個問題的人,他們用我的答案解決了問題,這樣的事我也很喜歡。

圖靈訪談:很多你的讀者很好奇你在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:從軟體工程師到經理的轉換在西方也非常常見,我懷疑雖然這有時是個好事,但很多時候也不是。我經常會看到很多經理在私底下都極想要做自己手下工作範圍內的程式設計工作。我是想說,一個好的經理應該有能力用他們的經驗來幫助初級工程師變得更有效率,他們可以分享自己的經驗,在管理的同時也能指導他們。

從個人角度上說,我很高興這兩樣我都有所涉及——我不想把自己和程式設計隔離,但是肩負一定的管理責任也是一件好事。


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

相關文章