世界を相手に腕を磨けるプログラミング学習サイト「Exercism.io」を使ってみた
少し前にWiredで世界を相手に腕を磨けるプログラミング学習サイト「Exercism.io」の紹介がされているのを見て、気になりはしたが試しはしなかった。
今回、ブログを書く順番が回ってきて、ちょうど良い機会なので使ってみた。
ログイン
Top画面には大きく the devil is in the details。
直訳すると「悪魔は細部に宿る」だが「物事は細部が難しい」とか「細部をおろそかにすると痛い目に遭う」「細部に予想外の面倒が潜んでいる」などの意味があるらしい。
かっこいい。
ログインにはgithubアカウントがあればよく面倒なメールアドレスやパスワードの入力もない。
「LOG IN VIA GITHUB」を押してログイン。
ツールのダウンロード
基本的には問題を取得したり、回答して送ったりは専用のツール(CUI)を使う。
ダウンロードページがあるので簡単に導入できる。
僕はMacなので下記のページを見ながらインストールした。
http://help.exercism.io/installing-the-cli-on-mac.html
上から下へ順にコマンドをがしがし叩くだけで特に困る事なくインストールできた。
最後の最後で「Homebrewならたったこの2行のコマンドで行けるぜ!」とでてくる。
はじめに書いてほしかった。
Configure keyの登録
ログイン後、チュートリアルのページが表示されている。
ツールのインストールが終わったらチュートリアルに従って、下記コマンドを打とう。
exercism configure --key=[your api key]
API keyはアカウントのページでも見る事ができる。
問題の取得
下記コマンドを叩くとHomeディレクトリに問題が取得される。
exercism fetch
exercismというディレクトリの中に各言語のディレクトリがあり、各言語のディレクトリの中に問題が入っている。
言語一覧は下記だ。
clojure、coffeescript、cpp、csharp、elixir、erlang、fsharp、go、haskell、javascript、lisp、lua、objective-c、ocaml、perl5、python、ruby、scala、swift
普段アンドロイダーな日々をおくってる僕にとってJavaがない事実に気付いて心が折れそうになったが、Rubyで試してみた。
問題を解いてみる
Rubyのhammingというディレクトリがあったので中を除いてみると下記の三つのファイルがあった。
GETTING_STARTED.md README.md hamming_test.rb
基本的にTDDでやっていこうというスタイルらしい。
GETTING_STARTED.mdにはざっくりいうと hamming.rb というファイルを作って hamming_test.rb のすべてのユニットテストをクリアしよう。進め方はTDD的な感じでというもの。
問題のレベルは至極簡単(まぁ一番初めだからかな)で、一言で言うとlengthの同じ二つの文字列の差分箇所数をだすというもの。実装して、テストが通ったのを確認した。
submit!
下記でsubmitできた。
exercism submit hamming.rb
submit後専用のページができた。
$ exercism submit hamming.rb Submitted Hamming in Ruby. Your submission can be found online at http://exercism.io/submissions/eebda98167924d08be977f0975a8d443 To get the next exercise, run "exercism fetch" again.
どうやらこのページでFeedbackもらえるらしい。(まだもらえてない。)
さぁ新しい問題を!
新しい問題を取得するときも下記のコマンドで大丈夫。
exercism fetch
やってみると、解き終わったRubyだけ新しい問題が追加された。
$ exercism fetch New: 1 problem Gigasecond (ruby) /Users/user/exercism/ruby/gigasecond unchanged: 19, updated: 0, new: 1
一問解いたら次の一問という感じでどんどんやっていける。
雑感
レビューはされることはあっても、なかなか海外の人にレビューされる機会を持っている人って言うのは稀だと思う。
また制限時間とかも特にないし、空いて切り替えたときとかに解いてみることもでき、気軽感があって良かった。
フィードバックが楽しみ。