descjop で遊ぼう day 13 : Clojure ワークショップでTAしてきた話
descjop (Electron + Clojure) Advent Calendar 2015 - Adventarの13日目です。
今回は番外編です。

12月12日に、東京日本橋のサイボウズ株式会社にてClojureワークショップが開催されました。
主催は、サイボウズスタートアップの_ayato_pさん。
今回はワークショップということで、40人ほどいる参加者のうち、おそらく詰まった人は誰かと一緒に問題解決していくというスタイルになるので、TAと呼ばれる質問に答えたりする人が7人くらい運営側にまわりました。
僕もTAとしてイベントに参加してきました。
このワークショップ自体は夏ぐらいからじんわりとみんなで内容を詰めていって実現できたものなので感慨深いです。
当日用意されたカリキュラムはこちらになります。
どこにつまづく人が多いのか
まず、当日は初級者、中級者、上級者というざっくりとした区分けが行われました(そういう名前じゃなかったかもしれませんが...)。もちろんここでの上級中級とかいうのは、あくまでこのワークショップの独自判断での分類です。
初心者というのは、ほぼClojureはじめての人。
中級者というのは文法はわかっているので、実用的なサンプルを改造するという形で会に参加する人。
上級者は自分でやりたいことをやったり、アルゴリズム系の実装をしたりなどのお題がありました。
割合としては、初心者ほとんど(7割くらいいたんじゃないかと)で、中級者が少し、上級者ほんのちょっと(数名くらい?)という感じでした。
僕が見た範囲ですが、初心者でClojureでつまづく人は、エディタ(もしくはIDE)から、REPLに接続して実行結果が出るのを繰り返すという状態にたどり着くまでが一番苦心していたように思えます。
逆に、ここのプロセスを通過した人は、実際にコードを書き、その後評価をし、結果を返すまでを短いサイクルで繰り返すことになるので、たとえつまづいても、短時間で解にたどり着くケースが多かったようです。
Middlewareは一つのつまづきポイントかも
続いて中級者コーナーのところで悩んでいるケースが多かったのが、ClojureのRingとルーティングまわり。
RingとそのMiddlewareは、ClojureでWeb開発をするときに必要となるデファクトスタンダードなライブラリ&仕様です。
ルーティングから何が渡ってきて、どう処理されているのか、何が起きているのか、何が返ってくるのかがよくわからないという感想を持ったようです。
新しいルーティングを見よう見まねで作成すると、何か得体の知れないエラーが出てしまう。
このときに、エラーメッセージとともにスタックトレースが大量に出るのですが、ここで慣れていない人はエラーの原因自体を探せないようです。
関数が主体だから関数の使い方がわかれば話ははやくなる
引数の数が足りない、もしくはおかしいなどのエラーも見かけました。
この段階になって参考になるのは、コアコードやライブラリのソースコードとドキュメントだったりします。
mapという関数なら、REPL上から(docs map)
とやるとドキュメントを見ることができますし、必要なら(source map)
とやればソースを見ることもできます。
Clojureのドキュメントで
というのがあるのですが、これは使い方だけでなく、コミュニティ主導による実用例なども掲載されています。
mapの例でいうと、
このように実例も書かれています。これらを駆使し、わからないときはコードを見たりすると、何を渡せばよくて、何が返ってくるかわかるようになります。
今回はLispの方言であるという前提知識があってきてくれた人が多かったせいか、Lispぽいところがネックでどう読んでいいかわからないというような人はあまりいなかったように記憶しています。
Clojureは、括弧が複数種使われているおかげで、適切なインデントがあれば普通のプログラミング言語程度には読みやすくなると思います。
そのほか、チュートリアル的に
を片っ端から解いていっている人もちらほら見かけました。
4clojureは、一問一答式の穴埋め問題で、たとえば、
(= __ (.toUpperCase "hello world"))
上記の__の部分を埋めよという感じで問題が出ます。
ブラウザで解くことも出来るし、Androidならアプリもあります。
問題は沢山あり、簡単なものから難しいものまで様々です。
に取り組んでいる人もいたようです。
LTもしました。
最後、LTタイムがあったので、LTをしました。これは当日即興でつくったスライドです。
このアドベントカレンダーのことを一人でも多くの方に知っていただけたらと思い、紹介しました。
内容は、このアドベントカレンダーのこと、descjopのこと、Electronで出来たアプリの最新事情などです。
参加された皆さん、主催者の_ayato_pさんお疲れ様でした。
Colophon
- 編集長
- Greative GK. 原一浩 ( kara_d )
- 製版システム
- Clojure / Compojure / Ring / Enlive / markdown-clj / Jetty / MySQL
- Share this magazine!
- Follow designudge
- Follow @designudge