どうして素人がコードを読めないのか

■分からなくなる理由が分からない
 さっき、色々痛感したので、覚えてるうちにメモ。読めない構造というのは結構自分じゃ面白い理由だなぁと思ったりしてみた。佐野さんの賢い反応をみたら、分からないという現象って、分かっている人と、分かっていない人では、分からなくなる理由が違うのかと妙に色々思ったりした。

■読めているのに分からない
 自分のようにプログラマでもなければ、まともに勉強した事もないような素人*1には、forward-pageみたいなのが普通に読めない。正確にはコードは読めているんだけど、意味が分からない。前提知識が足りてなくてその意味がつかめないというのが正しいのかも。リファレンスとかを辿れば大抵の言語は何をしてるか位は、分かると思うんだけど、詰まるのはそこじゃなくて、それがどういう意味なのかという意味づけとかの辺りで詰まってしまう。そう、読むだけなら本当は読めてると自分でも思ってたりするけど、前提知識がないとそこから調べまくる行為が結構必要でコレが辛い気がする*2。何が分からないのか分からないのでまさに馬鹿の壁状態。

■本当は使いかたが分からない。
 forward-pageの例で行けば、page-delimiterの中に^Lが入っていて*3、^Lは"\f"で、それが改ページ文字を現わし、lispの中に入れても問題ないという所が、分からないので何でpage-delimiterを調べてるんだろうと思うくらいで意味が分からなくなる。つまり、謎の呪文xyzzyをスキャンしている謎の関数の動作がどういう意味なのか分からない。と言う感じで写る。ちょっと頭を働かせてpage-delimiterを調べても^Lが出てくるだけで、^Lが分からないとまだ分からない。^Lが\fで改ページだと頭で理解しても、それがどういう意味なのか分からない。ここで分からないのは本当は使いかたが分からないという意味で分からない。更に印刷する時に^Lがあれば印刷するページを制御できるとと気づいても、それがlispとかの中で入力できると気づかないと、何処で使うのか分からない。

■何が便利なのかが分からない
 分からないというのも色んな分からないがあって、結局なんでもそうだけど、具体的にメリットがある所まで前提知識で飛躍して辿り着けて分かるみたいな部分が素人にはないので、そういう繋ぎが難しい。

 xyzzyキーバインドが便利だといっても、実際にはソレを使えるようにならないと便利じゃないので、便利なのが分からないのにも似てる。xyzzyをカスタマイズするのもxyzzyをちょっとだけカスタマイズする程度のlispなら簡単書けるのが分からないとxyzzyのカスタマイズは分からない。
 なんでもそうだけど、分からない構造は自分が何を分かってないのかに気づくのが難しい所にあるなぁとか色々思ったり、分からないって言葉はもっと細分化して色々状況を定義した言葉に分けて使ったらいいと思ったりした。

*1:いや、素人でも賢い人なら読めるかもしれないので、あんまり頭が足りてない部類の自分のような素人としておいた方がいいかもしれないけど

*2:コードが長くて関数が大量にある奴もそのコードに対する前提知識を要求するので凄く読みにくく感じる。こういうの書き方の慣習とかを知ると法則性で読みやすくなるのかもしれないけど

*3:今回はこれすら調べてなかったわけだけど