2013とある集まりがあってひょんなことから、とあるプログラムをその場で組んで遊んだ。40行くらいの非常に簡素なPerlスクリプトだ。どんなものかと言うと、そこにいたメンバーの一人が提案した小さなアイデアを叶えるもので、コマンドラインで実行するプログラム引数に英単語を入力するとその意味を日本語で返してくれるネットワークにつながれている環境を想定ってもの。実際出来たプログラムは「eiwa」コマンド。『リンゴ』;リンゴの木と意味が標準出力に出てくる。うん、これも十分なアプリケーションだ。実際このように課題が設定されるとついつい熱くなってしまい小さなものでも楽しみながら作れる。動いたときには嬉しいものである。ところで、そばにいた他のメンバーにこのプログラムをどうやって作っていったか?を説明していたら面白いことに気づいた。ところで、このスクリプトってどう考えて作ったんだっけ?俺。どのように考えればプログラムが作れるかを説明しているはずだが、はて、さきほどはそれほど「考える」作業をしていただろうか。「全く考えていない」とはさすがに言えないが「はい、考えてプログラムを書きました」とも答えられない。今回の場合は既に何回も書いた事があるようなスクリプトだったのである意味「型」が自分の中で作られていて無意識的にコードが浮かんで来てたから「考える」という作業をしていなかったという具合なんじゃないかと。そこで興味を持ったのが「プログラムを書く時に考えること」である。無意識的でもいいがどのように自分は考えてちょっとしたプログラムを普段作っているのか?前置きが長くなったが、気になったので以下にまとめてみよう。仕様を自分で解釈するそうそう「eiwa」プログラムなんだけど、そもそも彼がアイデアを口にした段階では仕様ってのがはっきりしていなかった。強引にも俺が実装出来る範疇で上記した通り仕様にまとめた。プログラムを書きだす前に、まずはそのプログラムへの要求と内部仕様や制約について「考える」もしくは「無意識的に考える」。使用技術を選定するなるべくどんな環境でも動くようポータブルにしたかったので「eiwa」プログラムは標準以外のCPANモジュールにあまり依存しないようにした。した条件も実は仕様なんだけど、それにあわせて、じゃあどういうライブラリを使って実現しようか、なんてのも考える。使用言語もそのうちの一つだし、その上に乗っかるモジュール、フレームワークをそれぞれの属性を理解しつつ選択する過程があるわけだ。過去作ったコードの流れを思い出すこれって考えるって言うのか分からないけど、先ほど申した通り、コードをいくつか作っていくと似た機能に対応するコード部分が「型」のように頭の中で共通化してくる。eiwaの場合だと外部の英和辞書APIを呼んでいるので、APIを呼びだすPerlプログラミングのパターンを脳内で呼びだす感じ。手を動かす時は考えない?小さな「eiwa」プログラムレベルだったら手を動かしている時は頭を空っぽにして、これまで解説した「考え」を元にガッとコーディングしてしまう。今回の場合、外部のAPIを呼びだすので、そのAPI仕様を理解するために試行錯誤はしたがこれも、いわゆる「トライ&エラー」を繰り返せばやり方が正確に分かるのであまり頭を使わないように思える。出来上がってから次を考えるいざ出来上がると試しに実行しながら色々考える。この段階が一番考えているかもしれない。だいたいこんな思考を巡らせてコードを書いている。コードを書いている最中よりもその前後の方が考えること多いってこと。コードを書いて使える「型」を増やしてより「高いところ」を考えれるようになりたいですね。読んでもらった方からプログラミングを「スポーツ」みたいに行ってるね、っていうニュアンスのことを言ってもらった。確かに身体化してるかもしれないですね。