Clojureを再びやっていこうと思い,Twitter Botを作成してみました.
https://github.com/tsu-nera/meigen-bot-clj
Twitter Botそのものについては公開しません, たぶんすぐ停止するので.
今までのClojure学習履歴振り返り
Clojureについては,実は7年前から半年くらい頑張っていたのですが, うつ病で会社を休職したタイミングでプログラミングそのものを1年くらいやらなくなってしまい学習が頓挫してしまいました.
- Clojure で Hello, World | Futurismo
- Clojure で楽器を演奏しよう! Overtone をインストールしてみた | Futurismo
- オンライン学習 Functional programming with Clojure をやってみた | Futurismo
- Living Clojure を読んだ | Futurismo
- プログラミング Clojure 第2版を読んだ | Futurismo
Clojureを再びやっていきたくなった
Clojureを再びやりたくなったのは、Emacsを再び使い始めたのがきっかけです.
そもそもEmacsから離れてしまったのはJavaがメインの言語になってたのでEmacsをメインのエディタにすることが大変つらい状況だったので. 最近Org-modeをヘビーにつかうようになりEmacsをメインエディタに戻したので,プログラミング言語もLispをメインに据えようと想いました.
はじめはCommon Lispを勉強していたのですが,やはり情報量やライブラリの充実を考えると今の選択肢はClojureかなとなりました. 私はもうガッツリエンジニアではないので,なければつくるとかはできないので,なければJava の資産を使いたいと考える人間です.
しかしClojureをやろうと思い立って実は4ヶ月かかってTwitter Botができました. はじめの1ヶ月はEmacsの設定ばかりいじっていて(とくにOrg-roam), それが終わるとLand of Lispを再読しはじめてました. しかし,なんかCommon Lispは今の動機とは違うかなと思い,Living ClojureとProggraming Clojureを読み直し,今に至る感じです.いや,長かったな…
勉強内容はWikiにまとめてAnkiをつかってActive Recall
7年前に基礎文法は全て覚えたはずだったのですが,使わないとほぼ忘れてますね…たぶん今までの勉強法が間違っていたんだと思います.
記憶はなんども思い出すことに強化されるので,中途半端な期間取り組んでも想起回数が足らなかったのかなと. 今回は改善するために,勉強法を工夫してます(そんなことをしていたので4ヶ月かかったのかも). Wikiに学んだ内容をまとめつつ,学んだ内容に対する質問をつくってAnkiというフラッシュカードアプリでひたすら毎日クイズに答えて文法を覚えました.
まあこれで忘れないかはわからないですが,科学的にはTestingが最強の勉強法と言われているので,以前よりはましな気がします. Ankiは最近のお気に入りの習慣なので継続していきたいです.
同じテーマを繰り返し, 過去と現在をつなげる
7年前にRailsチュートリアルを終えたときになんか作ろうと思ってつくったのがRailsによる努力の名言サイトだったので,そのテーマをなぞってみることにしました. 今後も新しい言語を学ぶときはこの戦略はいいかもしれません. そしてTwitter Botというのも定番といえばそうですが,よい勉強素材かも.
Ruby on Railsで努力の名言を表示するのサイトを作成した | Futurismo
記憶は過去と現在をつなげることによってより強化され,私の中での意味も強化されるので,新しいことは過去とつなげることを能動的に積極的にやっていこうと思います. Railsの名言サイトは2015年なので,7年前.
Clojure, というよりREPL駆動開発の改めての感想
Clojure, というよりもREPL駆動開発というのはほんとうに今までの開発方法を変える可能性を感じます. ゲームチェンジャーです. はじめはTwitterのClojure Clientとか,ほかのサービスのClientとかもPythonやnode.jsに比べたらいまいちかなと思いました.
しかし,そもそもREPLから関数を呼び出してレスポンスをjson で受け取ればそれがインタフェースになっているのでリッチなクライアントライブラリとか不要なのかもしれません. REPLから関数を呼べばそれがネットワーク越しのファイルだろうがローカルファイルだろうが,結局jsonが返却されてそれを素の文法で操作するだけいうのは楽です. REPLというより実際の操作はEmacsから式を評価するだけ.
これがどのくらい衝撃的かというと,わたしはC言語の開発経験が長いのですが, Cだとソースを編集したらコンソールに移動して makeを叩いてコンパイルしてさらには実行してようやくフィードバックが得られる. いや得られればいいのだけど組み込み開発だとそもそも実行がハードウェアへ転送とか…それから考えるとREPLの即時フィードバックがどれだけ楽か. もちろん組み込みCとTwitter Client開発ではドメインが違いすぎて厳密な比較ではないけれども.
別の経験と絡めれば, わたしはC言語のめんどくさい開発の中にいたときにテスト駆動開発(TDD)のようなテストによる即時フィードバックに衝撃を受けた経験が10年くらい前にあるのですが, RDD(REPL駆動開発を略すとこうなるらしい)は TDDと同じ程度の衝撃でありゲームチェンジャーな可能性があります.
もはやガラケーおじさんがスマホに感動しているようなものですね. 古いものに対してイライラしていたからそこ味わえる知的興奮, これはスマホとTDDが当たり前の世代にはわからないかもしれない.
ref: そろそろ『test driven development for embedded c』について書いてみる | Futurismo