Erik Schierboomへのインタビューです。彼とJeremy Walkerが、関数型プログラミング、Exercismのトラックのメンテナンス、そして今後予定されているExercismの解答の静的解析について語ります。
こんにちは、Erik。初のExercismコントリビューター・スポットライトへの出演をありがとうございます! あなたはExercismのあらゆる部分に貢献しているように見えますし、プロジェクト全体を横断してきたことから得た素晴らしい知見をお持ちなので、取り上げたいと思いました!
まずは背景から伺わせてください。最初にExercismに関わったきっかけは何だったのでしょうか?
2014年に、Scalaを言語として使う関数型プログラミングのコースを受講しました。そのコースを終えたあと、Scalaのスキルをもっと伸ばせる教材を探していて、Exercismを見つけたんです。すぐに夢中になり、Exercismの他の言語のトラックにも取り組むようになりました。自分の解答に寄せられたコメントから大きな恩恵を受けたので、次は自分がC#トラックの解答にコメントするようになりました。あるとき、C#トラックのメンテナーになってほしいと頼まれ、喜んで引き受けました。それから5年たち、今はC#とF#トラックのメンターを務め、C#・F#・Scalaトラックのメンテナーとして、トラックをまたぐ問題仕様の作業も手伝っています。
いいですね。かなり早い時期からExercismに関わっていたわけですね。ご存じない方のために、Exercismのメンテナーとはどういう役割なのか説明していただけますか?
もちろんです。抽象的に言えば、Exercismのメンテナーはトラックの「健全さ」に責任を持ちます。実際には、新しい演習を実装したり、既存の演習を更新したり、他のメンテナーからのプルリクエストをレビューしたりと、本当にいろいろなことを意味します。もう一つの重要な役割は、学習者が最高の学習体験を得られるように、トラックの演習を正しい順序に並べることです。なお、メンテナーだからといって、先に挙げた活動のすべてに関わらなければならないわけでは_ありません_。メンテナーが1つか2つの活動だけに集中するのも、まったく問題ありません。
ありがとうございます! では、C#、F#、Scalaに注力するかたわら、Exercismのほぼすべての言語トラックをこなしてきたわけですね。学習者としての視点で、特に好きなトラックはありますか?
取り組んだどのトラックからもたくさんのことを学びましたが、一番好きなのはHaskellトラックです。面白い概念がたくさんある素晴らしい言語であるだけでなく、メンターの質が本当に素晴らしかったんです。他に好きなのはKotlinとF#のトラックです。KotlinとF#は非常によく設計された実用的な言語で、私はこれらの言語でプログラミングするのが大好きです。
Haskellのメンターについては、私も素晴らしい話をたくさん聞きます! これほど多くのトラックをこなすと、コーディングについてたくさんの興味深い気づきが得られたのではないでしょうか。その経験から特に学んだことはありますか?
ええ、もうたくさんあります! さまざまな言語に触れると、問題へのたくさんの異なるアプローチに出会えます。こうした異なるアプローチはどれも、何らかの形で私のコーディングスタイルに影響を与えましたが、おそらく関数型言語の影響が一番大きいです。今では、関数型ではない言語でも、できる限り関数型の概念を使うようになりました(そうした言語も少しずつ関数型の機能を取り込んできています)。
また、言語はそれぞれ違っていても、実際にはよく似ているものも多いと学びました。そのおかげで、いくつかの言語を知っていれば、新しい言語の習得はずっと楽になります。たとえばHaskellを知っていれば、F#やScalaは比較的すぐに身につけられるでしょう。こうして新しい言語を学ぶことは、キャリアの面でもよい選択になり得ます。言語をより簡単に切り替えられるようになるからです。
最後に、言語を学ぶときにメンターが導いてくれると、その過程がずっと楽しく、効果的になると学びました。
私も同じです。人から学ぶと、効果は何倍にもなりますよね! 実際のところ、言語ごとの環境構築はどうしていたのでしょうか。新しい統合開発環境(IDE)を覚えるとなると、少し身構えてしまうことがよくあります。言語を進める間、使い慣れたエディターを使い続けましたか、それとも、よりその言語らしい体験をするためにいろいろ変えてみましたか?
以前は、言語によっては新しい開発環境の構築が少し面倒でしたが、今ではほとんどの言語がかなり簡単にセットアップできます。そのうえで、その言語に最適な体験ができるIDEを探します。WindowsとMac OSを交互に使っているので、IDEはクロスプラットフォームである必要もあります。優れたクロスプラットフォームIDEの例がVisual Studio Codeで、Haskell、JavaScript、TypeScript、Elm、Elixirの各トラックで使っています。他のトラックではJetBrainsのIDEを使っています。C#とF#にはRider、Java、Scala、KotlinにはIntelliJ IDEA、そして最後にRubyにはRubyMineです(補足:これらもクロスプラットフォームのIDEです)。ご覧のとおり、各言語で最高の体験を得るために複数のエディターを使い分けています(ただし、JetBrainsのIDE同士は明らかにかなり似ていますが)。
豆知識:オープンソースプロジェクトのコアコントリビューターであれば、JetBrainsに無料のオープンソースライセンスを申請できます!
それはとても役に立つ情報です。ありがとうございます! では、C#、F#、Scalaのメンテナーをされているわけですが、これらの言語の特にどこに惹かれるのでしょうか?
C#は2002年に登場したとき、すぐに私の一番好きな言語になりました。よく設計されたエレガントな言語で、ツールやドキュメントも充実しています。言語自体の進化もとても速く、常に新しいことを学べるのも魅力です! 最後の利点は、優れた.NET (Core)フレームワーク上で動くことです。
F#も一目惚れでした。エレガントな構文と豊富な(関数型の)言語機能のおかげで、特にドメインモデリングをするときに、より少ないコードでより多くができると感じました。また、オブジェクト指向の機能を備え、既存の.NETコードと優れた相互運用ができる、とても実用的な言語でもあります(C#と同じ.NET (Core)フレームワーク上で動きます)。さらに強みなのがツールで、これは関数型言語の中でも最高レベルです。おまけに、私がこれまでで最も好きな言語入門のひとつがfsharpforfunandprofitのサイトにあります。
Scalaは私に関数型プログラミングを教えてくれた言語なので、その意味で特別な存在です。F#と同じく、ほぼ同じ理由で実用的な言語です。Javaのエコシステムとの統合によって、関数型プログラミングの普及に大きく貢献しました。
Scalaで関数型プログラミングを始め、F#のメンターをし、それでいてHaskellを最高のトラックと評価しているのは興味深いですね。Exercismで関数型プログラミングに飛び込んでみたい人には、これらの中からどれを最初に試すことを勧めますか?
いい質問ですね! 私のおすすめはF#です。一番とっつきやすい言語だと感じるからです。主な理由は、F#が他の2つより複雑でないことです。F#の優れたツールとドキュメントも、始めるときには大きな利点です。とはいえ、F#トラックを終えたら、ぜひHaskellトラックにも取り組むことを強くおすすめします。HaskellにはF#にはない素晴らしい高度な機能があるからです。
あなたはExercismの今後の計画のかなり多くを知っていますよね。このプロジェクトで特に楽しみにしていることはありますか?
計画されている改善の中で、私が一番楽しみにしているのは解答の静的解析です。送信された解答をプログラムで解析し、よくある問題や提案を見つけて、自動でコメントできる仕組みを作るという構想です。これがあれば、メンターはこうしたよくある問題や提案にコメントする必要がなくなり、より面白い問題に集中できるので、大きな助けになるはずです。
興味があれば、私のC#トラックアナライザーの(初期の)プロトタイプを見てみてください。.NET Compiler Platformを使ってC#コードを静的に解析するものです。
はい、静的解析は私にとってもほぼ一番わくわくする話です。すでにプロトタイプをまとめているのを見ると、すごいなと思います。静的解析がもたらすスピードの改善はExercismを劇的に良くすると思いますし、これを拡張してまったくの初心者にコーディングを教えられるようにする方法には、とてもわくわくしています。まさにゲームチェンジャーだと思います。
最後の質問です。個人的に大切にしているプロジェクトや活動で、ここで紹介したいものはありますか?
私にとって、Exercismに関わり、そのオープンソースのコードベースに貢献し、人々のメンタリングをすることは、信じられないほどやりがいのある経験でした。たくさんのことを学び、本当に素晴らしい人たちと知り合い、多くの人の助けになれたと感じています。
みなさんにも、自分も関われないか試してみてほしいと思います。好きな言語があって、その言語を学ぶ人を助けたいなら、Exercismでメンターとして登録してみてください。コードを書くほうが好きなら、オープンソースプロジェクトを選んで貢献してみてください。思っているよりずっと怖くないですし、やってみればとても気分がいいですよ、間違いありません!
素晴らしい! お話しする時間を取ってくれて、そしてExercismでのすべての活動に感謝します!