プログラミングの素養には何が重要か、よく聞かれます。僕の答えは数学と国語です。数学は主としてアルゴリズムを設計、あるいは実装する時に必要になります。一方、国語は、問題の理解と実装の橋渡しに大事な役目を果たします。たとえば、暦プログラムを作っていて「振替休日」の箇所に出くわしたとします。まず振替休日の定義はどうなっているか、定義を理解していないことには始まりません。定義を理解したら、次に個々の要素と互いの関係を、プログラミングコードのデータ構造と操作にマッピングする必要があります。この場合、自然言語は「振替休日」を意識さえすればいいのに対し、プログラミング言語は自動処理を前提としたデータ構造とデータ構造上の操作を意識せざるをえません。かつ、この自然言語からプログラミング言語への「翻訳」では、翻訳後のプログラムコードが正しく働くことが要請されます。
プログラムを書く人は、頭の中で、この主の翻訳を常に繰り返しています。日英翻訳ならば片言英語でも通じるかもしれません。しかし相手がコンピュータの場合、片言コードではコンピュータは指示を聞いてくれません。仮に正確に表現したつもりでも、ピリオド1つ忘れた(たとえば小数点が整数に化ける)だけで、コンピュータの挙動はまったく異なるものになってしまいます。
コンピュータ言語で表現できる対象は、世界全体のほんの一部でしかありません。それでも、自然言語とコンピュータ言語のようにまったく異質な言語間で翻訳を可能にする能力は、どのように生まれ、進化したのか、興味ある話です。