まじでぐだぐだな経験談

今日は、私のgdgdな体験談を書く。最初に断っておくが、この文章は、プログラミングのプロには何の役にも立たない。

私は、大学で情報系の学科に入学した。ひどい落ちこぼれだった。まあ今も頭が悪く、落ちこぼれであることに変わりはない。まず、プログラミングの授業がわからず、おもしろくなかった。わかりたいなとは思っていた。でも、それぞれの授業に関係性が見えず、別々の塊に見えた。単位をとるのに、友達に助けてもらっていた。卒業もなんとかできた。就職もなんとか適当にできた。

今でも鮮明に覚えているのだが、私は大学1回の後期でSICPの授業を履修した(させられた)。当然のごとく生徒の理解も悪く、先生も笑顔の裏になにか怒りを隠していたように見えた。こわかった。先生の低音マシンガントークと、大量の宿題は、私を含む多くの生徒にトラウマを焼き付けた。しかし、戦友(クラスの友達)の援助もあり一応単位は取れた。ちなみに私はこのときSICPの中身は全然理解できていない。友達には助けられてばかりだった。私のような落ちこぼれが落第せずに済んだのは、本当に友達のおかげだったのだ。この授業が終わると同時に私はSchemeから一旦、離れる。

学科は情報系だったが、プログラムは苦手だし、嫌いだった。3回生終わりの時期の研究室選択で、私は、プログラミングをほとんどしなくてすむ研究室を選択した。

とはいっても、大学院修士でMATLABでプログラムを時々書いていた。MATLABでは数値例を作るくらいなので、プログラミング的に難しいことはなかった。MATLABの便利さにはすごく驚いた。

卒業後の、いまの仕事では、せいぜいエクセルでマクロを時々書くくらいだ。エクセルでも、マクロの中で、別のマクロを呼び出すことはできる。自分でやってて、(Schemeほど徹底していないが、)このやり方は高階関数っぽいなと思うことはある。

それでは、エクセルのマクロとSchemeの違いは何か?
一言で言えば、

ということになるだろう。
MATLABは命令型と関数型のいいとこ取りで、エクセルとSchemeの中間くらいだと思う。MATLABで数値例を作った経験は、今の私の Schemeへの熱意につながっている。

Cやエクセルのマクロなど、命令型言語だと、変数の挙動をチェックするのに、いわゆるprintfデバッグが簡単にできる。
一方、Schemeでは変数への代入自体を極力避ける。だから厳密に言えば、変数のprintfデバッグはほとんどの場合Schemeには使えない。
その代わり、Scheme は関数ごとにデバッグできる。言い換えれば、塊ごとにデバッグ、確認できる。慣れれば、こっちの方が、デバッグと書く速度は速いと思う。

逆に、Schemeで書いてて、なんでこんなに変数への代入が難しいのだろうかと頭を掻きむしったことも多い。Schemeを勉強し始めたとき、それが一番嫌だった。それに、Schemeには、変数の型宣言もない。ルーズだなと思った。でも、それらは一面的な見方でしかないことに、時間が経ってから気づいた。関数型言語を使えば、場合によってはこんなに美しくコードが書けるのかと驚いた。

そもそも、私は大学入学祝いに初めてパソコンを買ってもらい、それでゲームして、その後だいぶ経って、本を買って、C言語Hello world。大学1回生後半で初めて、SICPを読まされたときも、「代入はなぜ必要なのか?」とすら考えなかった。だめじゃん俺。

Scheme使いが、「どういう場合に変数"代入"を使うべきか?」について、SICPの 3.1節で、かなり詳しく議論されている。これからSICPを読み始める方には、Schemeの基本的な文法が分かったら、この3.1節の議論をよく読むことをオススメします。

で、結局、「仕事に、Schemeを使ったりして役立っているの?」という質問に対する答えは今のところNo。プログラミングは趣味でしても、仕事ではしたくない。でも、「Schemeは楽しいか?」という質問に対する答えは、今はYes。