On Private Writing #9: Note Taking and Programming
(目次)
以下は特に actionable でない妄言である。
アカデミアや作家が論文や原稿のためにノートを書き溜めるように、プログラマがソフトウェアのためにアイデアの断片を書き溜めることはできないか。プログラマにとっての Zettelkasten はどういう姿を取りうるのか。個人的には二つくらい軸があると思っている。
ひとつ目は、探索的に小さなコードを書いて見ること。日常的にコードを書いている人、特に競技方面の人は ~/tmp とかに大量のコード片を溜め込んでいることが知られている。自分はやってない。でもそういう風に小さいコードを頻繁に書く方が良いのだろうなと思う。自分も要素技術を試すのに Hello Work というのを一時期やっていた。よく考えると要素技術に限る必要ないね。
自己完結したコードでなくても, Git 世代の我々は大きなコードに対する小さな変更を試し、それを自分のフォークにコミットしてほっとく、とかが簡単にできる。探索的なコードの可能性は割と広い。そうやってぱぱっとコードを書いて試す身軽さは、プログラマとして追求して良いものに思える。
もう一つは、そういうコード片をボトムアップに積み上げて、漸近的に大きいコードを書く可能性について。これはより野心的というか、どうやればいいのか想像するのが難しいが、なにかがありそうな気がするのでダラダラ考えてみる。
まず漸近的である裏返しとして、コードは別に完成しなくてもよい。未完成のものを沢山書くのはなんとなくダメっぽいイメージを持ちがちだが、それがアイデアの断片なのだと思えば悪いものではない。もっと積極的にコードを書きかけにして良いのではないか。
またアイデアの断片に実用性は必要ない。自分はコードの実用性を重視しすぎて、しかし実力のなさと実用性縛りが組み合わさるとしょぼいことしかできず、アイデアの探索といえるプログラミングをすることがほとんどない。実用的なのに越したことはないけど、そのせいで exploration の機会が失われるのは本末転倒に思える。実用度外視で実験的なコードを書く機会を増やせないか。
ソースコードは自然言語より厳密なので、アイデアすなわちコード片を monotonic に積み上げていくのは難しい気がする。書きかけコードを再開するのもかったるいし、コード片をライブラリ化するとか、いかにもダメそう。一方で、試作や実験を繰り返す過程で書いたコードを捨てず、どこかのブランチなりにコミットしてとっておき、それを参照しつつ次のイテレーションを進めることはできる。
つまり実用性とか完成可能性とか気にせず、面白いと思えるものを履歴を残しつつ何度も書いてみるのが、プログラマにとっての探索的 writing なのではないか。高速に何度も試行錯誤するのが良いプログラマの特徴であることは知られているが、高速でババっとやるかわりに時系列に薄めてちまちま試行錯誤というのも可能性としてはある気がする。ババっとできるならそれに越したことはないけど。
そうやって書きかけ、書き捨てたゴミがどこかにいってしまわないように manage する仕組みが programming as note taking というか探索的プログラミングライフには必要。これは色々やりようはあるとおもうけれど、とりあえずコードやコミットがリンク可能であることが重要で、つまり書きかけコードは GitHub にコミットするなり、ほんとに小さい断片であれば jsfiddle みたいな playgrounds に上げておくのが第一歩。それを発見可能にするには、それこそ Wiki のような PKB で目録化しておけば良いのだろう。
そうやってコードをかけたら良いなあ。ただ今の自分は書き溜めも書きたいものない錆びついた鉛状態なので、なんとかして動き出さないといけない。残念ながらそれが一番敷居が高い。時間も体力もないので。まあ、ぼちぼち考えたい。