間違ったプログラムを直してプログラム書いていることに気づいた
今日小さめではあるが古典AIの文脈で多少の規模のあるシステムを拡張する形のプログラムを書く必要のある問題を解いたのだが、 そのときに利用しているプログラミング言語が Common Lisp でよかったと感じたことについて書く。
なお、これについてうだうだ考えて眠れないので出力してしまってすっきりするための文書なのであまり鵜呑みにしないように。
与えられた問題に対してどう書けば正しいものを書けるのかを探るのに、 まず間違ったプログラムをまず書くという方法があると思う。
最初は問題を解くための方針をとりあえず考える。 ただそれでも今日の問題は少し難しくアイデアが漠然としていて、プログラムの設計みたいなのを明確にするのは難しかった。 それに実質的な提出期限みたいなのもなんとなくあって時間もなかった。 だからまず雑にアイデアに沿う関数をなんとなくテキトーに書いた。この関数は間違っている。
これを REPL で実行して、間違った関数がどう振る舞うのかを観察する。 その結果を見ながら、どう修正すれば正しく動くのかを考えて手を動かした結果、 わりと短時間で正しい挙動をするプログラムを書くとができた。
で、こんな経験についてわざわざ書いたのは次の3つの理由がある。
- これができるのは REPL が強力かつ動的型付きなおかげなので、Lisp じゃないと苦痛ではないのか?
- みなさん、間違ったプログラムを動かす前に正しいプログラムを導けるんですか?
- 結局のところ、正しいプログラムを書くのに必要なことは間違ったプログラムを書くことなのでは?
ということをなげかけたかっただけである。
もちろん、他の人達と協調してプログラムを書くことが大切みたいな文脈もそれはあると思っていて、 そういうときには最初に設計を共有してそれから外れないようにプログラムを書けることが大切な場合もあるんだろうなとは思う。
でも、本当にそれがプログラミングの仕事をするのに大切なことなのかも疑問に思っている。 いま世の中で必要とされているプログラミングのほとんどは Web 開発だろう。 で、私はこれから Web 開発が始まるという文脈にいるのだが、 Web 開発において究極的に大切なことは DB の設計であってプログラムそのものではないことがもう見えている。 正直なところテーブル設計以外の部分はみなただの雑用のようにしか見えていない。 おそらくテーブル設計の要素を除いてしまえば、今日書いたプログラムよりも高度なことは何もないんじゃないかとすら思えてくる。
そこで、「正しいプログラム」を設計して正しくプログラミングができることにどれだけの価値があるのかまったく分からない。 まあ、私はまだ Web 開発に投入されていないのでそう思っているだけなのかもしれないが。
もしかしたらこの認識は一ヶ月くらいしたら変わるかもしれないが、どうせ変わらないんじゃないかなあと思っている。
というわけで、寝ます。おやすみなさい。