こんにちは。CTOのid:motemenです。みなさん趣味プログラム書いてますか?
このエントリは Backyard Hatena #4 のフォローアップ記事です。エピソードの最後のほうで、「motemenが作って公開しているツール、どんなことを考えて作ってる?」という話になりました。そのときは時間の関係もあってあまりちゃんと話せなかったな、という感覚があったので、ここであらためて考えてみようと思います。
治具のようにつくる
ウェブ上で読める自分が好きな記事のひとつに、Go Is a Shop-built Jig(抄訳)というものがあります。一言でいうと、「Goは現実的な問題を解くための治具である」ということをいっています。治具とは何かを達成することを補助する小さな目的のために作られた道具、という感じかな。fujiwaraさんの隙間家具のたとえからも近いニュアンスを感じます。
自分がツールやライブラリを作るときにも、こういう治具として作ることが多いです。業務でも趣味でも、コンピュータで何かをしたいときに感じる小さな不便や不満をとらえて、それを自力で解決するためにコードを書きはじめる。コンピュータに親しみ、プログラミングを覚えたことで、自分で解決できる種類の問題が格段に増えたと感じるのは、こういう道具をつくることができるようになったからだと思います。
詩歌のように推敲する
自分の問題をピンポイントに解決できれば目的を達成しているはずですが、つくっているうちに別のモチベーションも湧き上がってきます。みなさんにも心当たりのあるだろう、問題を抽象化してみたい、という欲求ですね。
自分がこのプログラムを書くにいたった痛みは、きっとほかの人も感じているだろうと確信しているので、それが他人にも伝わるように推敲していきます。コマンドラインツールであれば起動オプションや引数、ライブラリなら関数名やインタフェースといった具合です。名前もとても重要ですね。治具であれば自分だけが使えていればよかったですが、ほかの人にも使えるように、しかし抽象化しすぎずのバランスが重要です。
自分は趣味で俳句や短歌をやってい(たことがあり)ますが、こういった詩歌を推敲は、ミニマルな表現のなかでいかに自分の感覚を過不足なく表現するか、という過程であり、その現場は違っても、プログラムのインタフェースを研ぎ澄ますというのはこれに似ているところがあると思います。趣味でやるなら特に。歌人でプロダクトマネージャーの嶋稟太郎さんのエントリもおもしろい。
そして公開する
ここまでに正しく課題を認識して、よいものがつくれていれば、成果物を公開して、人の目にうまいこと留まることができるかもしれません。そうでなくとも自分はすでにじゅうぶんに満足しているので、また次のプログラミングに向かえますね。
とまあこんな感じで、趣味プログラミングの過程やその楽しさにもいろいろあるのでした。技術のことなので、惜しげなくオーバーエンジニアリングしてみる、など中身の話もあると思いますが、今日はこんなところで。