Uploaded avatar of iHiD

專訪 Erik Schierboom

@iHiD
7年多前

這是一篇 Erik Schierboom 的訪談,他與 Jeremy Walker 在訪談中聊到函式式程式設計、維護 Exercism track,以及即將登場的 Exercism 解答靜態分析。

嗨,Erik。謝謝你擔任第一期「Exercism 貢獻者焦點」的受訪者!我們想特別介紹你的貢獻,因為你似乎參與了 Exercism 的每一個角落,而且從橫跨整個專案的工作中累積了許多很棒的觀察!

先從背景聊起,你一開始是怎麼接觸到 Exercism 的呢?

2014 年,我修了一門以 Scala 授課的函式式程式設計課程。修完之後,我到處尋找能進一步增進 Scala 能力的資源,就這樣找到了 Exercism。沒過多久我就著迷了,也開始嘗試 Exercism 上的其他語言 track。由於別人留在我解答上的評論讓我獲益良多,我後來也開始在 C# track 上評論其他人的解答。某個時間點,有人問我願不願意擔任 C# track 的維護者,我欣然答應。五年後,我現在是 C# 和 F# track 的導師、C#、F# 和 Scala track 的維護者,也協助跨 track 題目規格的工作。

不錯嘛。所以你從 Exercism 還很早期就加入了。對於還不熟悉的人,可以請你說明一下 Exercism 的維護者是在做什麼的嗎?

當然。抽象來說,Exercism 的維護者要為一個 track 的「健康」負責。實務上,那可能代表很多事情,例如實作新的練習、更新現有的練習,或審閱其他維護者送出的拉取請求。另一個重要的面向是把 track 的練習排序好,確保學員能有最好的學習體驗。要注意的是,當維護者並不代表一定得參與上面提到的所有工作;只專注在一、兩項工作上,也完全沒有問題。

謝謝!除了專注在 C#、F# 和 Scala 之外,你幾乎把 Exercism 上每個語言 track 都做過一輪了。從學習者的角度來看,有沒有哪幾個是你特別喜歡的?

雖然我從做過的每個 track 都學到很多,但我最喜歡的 track 非 Haskell 莫屬。它不僅是個充滿有趣概念的出色語言,導師的品質更是讓我大開眼界。其他我很喜歡的還有 Kotlin 和 F# track,Kotlin 和 F# 都是設計得極好、非常務實的語言,我很愛用它們寫程式。

是啊,我也聽過很多關於 Haskell 導師的好話!我想做過這麼多 track,應該讓你對寫程式累積了一大堆有趣的觀察。有沒有什麼是特別從這段經驗中學到的?

喔,當然有,多到數不完!接觸各式各樣的語言,會讓人看到許多不同的解題思路。這些不同的思路都或多或少影響了我寫程式的風格,不過函式式語言對我的影響大概最大。我現在發現自己只要有機會就會用上函式式的概念,就算在非函式式語言裡也一樣(而這些語言也正慢慢加入函式式的特性)。

我也學到,雖然每個語言都不一樣,但很多其實相當相似。因此,只要先學會兩、三個語言,之後要學新語言就會輕鬆許多。舉例來說,會 Haskell 的人大概很快就能上手 F# 或 Scala。所以學新語言對職涯發展也是不錯的選擇,因為你會更容易在不同語言之間切換。

最後,我學到的是:在學一個語言時有導師引導,會讓整個過程變得有趣又有效率得多。

我也有同感。向別人學習真的能帶來加倍的效果!從實務的角度來看,你是怎麼處理這麼多不同語言的環境設定的?我常覺得要學一套新的 IDE 有點嚇人。你在做這些語言時,是固定用自己熟悉的編輯器,還是會換來換去,好得到更道地的體驗?

對某些語言來說,以前要設定新的開發環境還挺麻煩的,但現在大多數語言的設定都相當簡單。接著我會找一套對那個語言來說體驗最好的 IDE。由於我會在 Windows 和 Mac OS 之間交替工作,這套 IDE 也得是跨平台的。一個很棒的跨平台 IDE 例子是 Visual Studio Code,我用它來做 Haskell、JavaScript、TypeScript、Elm 和 Elixir 這幾個 track。至於其他 track,我用的是 JetBrains IDE:Rider 用於 C# 和 F#,IntelliJ IDEA 用於 Java、Scala 和 Kotlin,最後 RubyMine 則用於 Ruby(順帶一提,這些也都是跨平台的 IDE)。如你所見,我會用多套編輯器,好讓每個語言都有最好的體驗(不過 JetBrains 的 IDE 們顯然都相當相似)。

小撇步:如果你是某個開源專案的核心貢獻者,JetBrains 讓你可以申請免費的開源授權!

這太實用了,謝謝你!那麼,你是 C#、F# 和 Scala 的維護者。這幾個語言有什麼特別吸引你的地方?

C# 在 2002 年推出時,馬上就成了我最喜歡的語言。它是個設計優良、優雅的語言,工具和文件都很棒。這個語言演進得也相當快,代表永遠都有新東西可以學!最後一個優點是,它跑在優秀的 .NET (Core) 框架上。

F# 同樣是一見鍾情。它有優雅的語法,以及豐富的(函式式)語言特性,我發現自己能用更少的程式碼做更多事,特別是在做領域建模的時候。它也是非常務實的語言,具備物件導向的特性,而且能與現有的 .NET 程式碼良好互通(它和 C# 一樣跑在相同的 .NET (Core) 框架上)。另一個強項是它的工具支援,在函式式語言中屬於數一數二的。額外的好處是,fsharpforfunandprofit 網站上有我最喜歡的語言入門教材之一。

Scala 是帶我認識函式式程式設計的語言,因此它在我心中有個特別的位置。和 F# 一樣,它也是個務實的語言,原因也大同小異。拜它與 Java 生態系的整合之賜,它真的幫助函式式程式設計普及了不少。

有趣的是,你是透過 Scala 踏入函式式程式設計、擔任 F# 的導師,卻把 Haskell 評為最棒的 track。如果有人想在 Exercism 上投入函式式程式設計,你會建議他先試哪一個?

好問題!我投 F# 一票,因為我覺得它是最容易上手的語言。這主要是因為 F# 比其他兩個語言單純。F# 優秀的工具和文件在入門時也是一大加分。話雖如此,我還是非常推薦你在做完 F# track 之後,也加入 Haskell track,因為 Haskell 有一些 F# 沒有的、非常棒的高階特性。

你對我們為 Exercism 的未來所做的不少規劃都略知一二。這個專案有沒有什麼讓你特別期待的地方?

在所有規劃中的改進裡,我最期待的就是解答的靜態分析。我們的想法是建立一套系統,透過程式自動分析送出的解答,找出常見的問題與建議,然後自動留下評論。這對導師會很有幫助,因為他們就不必再針對這些常見的問題與建議留言,可以把心力放在更有意思的問題上。

如果你有興趣,可以看看我(還很早期)的 C# track 分析器原型,它使用 .NET Compiler Platform 來靜態分析 C# 程式碼。

是啊,靜態分析對我來說也幾乎是最令人興奮的事。看到你已經做出一個原型,真是太棒了。我認為靜態分析帶來的速度提升會大幅改善 Exercism,而且我很期待能把它延伸來教完全不會寫程式的初學者。我覺得這會真正改變整個局面。

最後一個問題,你有沒有什麼個人專案或理念是你在意的,想藉這個機會跟大家分享的?

對我來說,參與 Exercism、為它的開源程式碼庫做出貢獻,以及引導別人,都是收穫滿滿的經驗。我學到了非常多東西、認識了一些很棒的人,也覺得自己幫助了許多人。

我也想鼓勵大家看看自己能不能也一起參與。如果你有熱愛的語言,也想幫別人學會它,就來 Exercism 註冊當導師吧。如果你更喜歡寫程式,那就挑一個開源專案開始貢獻。我保證,它遠比聽起來要不嚇人,而且你會做得很開心!

太棒了!謝謝你撥空和我們聊聊,也謝謝你為 Exercism 付出的所有心力!

2019年01月21日 · 覺得有幫助嗎?