Clojureを歩いている
前書き
昨年9月ごろからLispを勉強しています。
最初はCommon Lisp、途中からEmacs Lispを経たりして、今はClojureを勉強している感じです。
以前は「リーダマクロがない?、引数はベクターで受け取る? そんなの邪道だ」と思ってCommon Lispを中心に考えていましたが、今はClojureの設計はとてもきれいだと思って、その考えをとりあえずできる限り盗もうと思って頑張っています。
Clojureのimmutabilityあたりにちょっと詰まりましたが、それさえ乗り越えれば、Clojureはとてもシンプルで使いやすい言語だと思います。
逆に言うとClojureはなんとなく使いやすい言語で、なんとなく書けるのでその先に行くには意識的な努力がいるんじゃないかなというのが今の感想です。
だから、最初はとりあえずなんとなく書きたいものを書いて、読みたいものを読むというスタンスでしたが、計画的に努力するように心がけているところです。
勉強のメディア
本
プログラミングClojure
最初は本を読んで勉強していました。
「プログラミングClojure」は日本語の中では一番まとまっていてよかったです。改めてみるとつまみ食い感がすごい気もしますが、大事な情報がきちんと入っていて3回くらい読み直しました。
今ならちょっと古いのかもしれませんが、選択肢があまりないので導入なら問題ないかなと思います。
Clojureによる、初めての関数型プログラミング
基礎を固めた後としてはこれがよかったです。とてもシンプルな設計でどうやってアプリを作っていくかを学べてよかったです。
全体としてみてどうかといわれると難しいですが、細かいテクニックとかはこれで覚えた気がします。
売り上げランキング: 64,595
Clojure Programming
ちょっと学んだらあとは英語で頑張れというのがClojureですが、洋書のなかで1番好きなのはこの本でしょうか。
一つ一つの概念について丁寧にページを割いて説明してくれていて、構文への愛があります。多少古いので最先端ではないのかもですが、Clojureを学ぶという意味ではとても好きです。
洋書であればWeb、機械学習に絞ったものなど色々ありますが、自分はきちんと基礎から学びたいタイプなのでそういう系はあんまり肌に合っていない感じはします。
関数型、リアクティブプログラミングの設計あたりは次あたりに読んでみようかなぁと思っています。
Oreilly & Associates Inc
売り上げランキング: 69,016
Web
Git Hub
最初はClojureのTrendのリポジトリを眺めていました。
Trending Clojure repositories on GitHub today · GitHub
でも、ClojureのTrendは毎日ほぼ変わらないですし、上がってくるのはほぼデータ系でこれだけに頼るのは厳しいですね。感覚的にはRubyとかJavaScriptあたりだと変動が大きくて面白かったんですけどね。
勉強が目的なら、Clojureの公式のリポジトリをめぐるほうが楽しいと思います。
その先の調べ方はあんまり考えていないので、今発掘中です。
Clojure Docs
Clojure Docsを眺めるのも勉強になってよかったです。APIにどんなものがあるか眺めるのも楽しいですし、サンプルを自分なりに作り直してREPLで叩くのも楽しいです。
Community-Powered Clojure Documentation and Examples | ClojureDocs
Clojureは細かい関数、マクロが多いので時々API一覧を見て不要な処理を本当に書いていないのかを確かめるのがいいと思っています。
その他
Qiitaとか、ブログとかはちょいちょいありますが、あまり更新されていないので主要な情報源にはならないかなぁという印象はあります。
Clojure界隈にはとても優しい方々がおられるので、そういう人たちと仲良くしながら情報がないかアンテナを張っておくほうが大事かなぁと思います。
おすすめされた情報源
一応自分なりの勉強方法はあったものの百戦錬磨のClojurianたちはどうやって勉強されているのか聞いてみました。
情報収集の場合、redditとMLくらい眺めておくと、とりあえず最新の情報は自動的に入ってくるかなーという感じです(どう取捨選択するかはさておき)。
— あやぴー (@_ayato_p) 2018年4月18日
あとはathosさん、t_yanoさん、カマイルカさんあたりのTwitterを把握しておけば、だいたい重要そうなものはちらほら流れてくる印象です。
reddit https://t.co/hlbqpmMZ4J
— あやぴー (@_ayato_p) 2018年4月18日
ML https://t.co/gXRKdqaJCP
MLはメーリングリストで通じると思ってました…そういえば、最近はマシンラーニングですよね…。
RSSリーダーを確認してみたら、私はClojure/Lisp関連ではこのあたりを購読してました。https://t.co/QhmDh0Vw8Xhttps://t.co/5XoZTllpPghttps://t.co/6y82NxT6sshttps://t.co/9a5ZltKZ7Ahttps://t.co/bY5Q64BHGp
— lagénorhynque🐬カマイルカ (@lagenorhynque) 2018年4月18日
Clojure の情報ということでもないのですが、 Clojurian の発表を文字に起こしている方がいます。こういうのも面白いかもしれません https://t.co/UAn085FANr
— Yoshito Komatsu (@ykomatsu0) 2018年4月18日
redditとMLは確かに毎日眺めるにはちょうどいい感じでした。
Podcastなどはいくつか聞いてみて、意外に英語でもプログラミング系ならわかりました。ただ、通勤しないので、聞くタイミングがなかなか作れないのでもう少し考えたいです。
transcriptsはかみ砕きながらみないと難しいですが、研究材料としてはこれ以上なく楽しそうでした。
勉強の方法
REPL it
やはり書くことが一番の勉強だと思っていて、本でもWebでも面白いものを見つけたらREPLに打ち込んで改変してテストするのが一番よかったです。
マクロあたりもずーっと読んでいるだけではわからなかったものの、色んなパターンをうちこんでもう最近は間違えないですね。
テーマをもってやる
前にも書いたのですが、Clojureは自分の思うように書きやすすぎるので特定の構文を使わなくても意外に何とかなります。自分だと、
- マクロ
- メタ情報
- 表明
- オブジェクト指向的なもの
とかは別に自分で書かなくても何とかなるというところがあって、やっぱり時間をとって研究しないといけないなという風に思っています。
そのためには何かアウトプットを書くといいのかなと思って、Qiitaとかにあげたりしています。正直、Clojurianの方々から見るとミスリーディングなどが多くて恐れ多い部分もありますが、それを自分だけで認識できないので開き直ってアップするという感じです。
今のところこんな感じです。
Clojure公式リポジトリの構文上の比較研究が多いですが、いずれはライブラリ、プロジェクトあたりの研究をして、それが終われば自分なりの形を作れればいいかなと考えています。
Clojurianへの道は遠いですが、自分は少しずつ進むほうが性に合ってそうなので、地道にやっていきます。
まとめ
ClojureはC#とかJavaScriptに比べて日本語の情報量が少ないので、より情報を得る手段が洗練されてきている気がします。
実務はLispではないので、きっちりこのやり方をそちらにもフィードバックしていけたらエンジニアとしてのランクがちょいと上がるかなぁとか考えます。
最近は実用物はあんまり考えていませんが、Lispの長い歴史を追いながらエンジニアはどういう風にしてきてこれからどうなっていくのだろうかというところにも興味があり、どうしようかは迷っています。
ただ、今とても楽しいのでもう少しだけ、研究という体で学んでいきたいです。やり方がガラッと変わったら、また何か書きます。