プログラマーっていったい何やってるのかを、日本語だけで説明してみる

背景

ニューヨークのプログラミングラボ Recurse Center に滞在中、ひょんなことから 日本語の話し言葉でLispっぽいプログラムが書けるJapalisp というプログラミング言語をつくりました。 つくったからには、それを何かに活かせないかと思い下記チュートリアルを書いてみました。 興味持たれた方は、作者までご連絡ください。


序章:足し算を自分でつくってみよう

「ねぇねぇ、足し算ってどうやるの?」

そう聞いてきたのは、よちよち歩きのプログラミング言語 Japalisp(ジャパリスプ)くん。 この記事の目的は、このジャパリスプくんに足し算の仕方を教えること。

足し算を、小学校で最初に習ったときまで遡って考えてみよう。

「ここに、3個のりんごがあります。 こちらには、4個のりんごがあります。 全部で、何個のりんごがあるでしょう?」


どうか 3 + 4 を思い浮かべないでほしい。 「+」という記号をあなたが思い浮かべるのは、もうあなたが足し算を知っているから。 足し算をまだ知らないJapalisp(ジャパリスプ)くんには、どうやって足し算を教えたら良いのだろう?

一つのやり方は、おそらく自分で数えやすい順に、 「1個、2個、3個...6個、7個!」という風に、一つずつ指をさしながら数えるやり方だろう。

このやり方は要するに、 こっちは3個、こっちは4個、と数えていたものを、 まとめて数えるようにすること。
ってことは、別々にあったものを「くっつける」と、足し算ができるはずだ。よしっ!

「Japalispくん!左のりんごと、右のりんごをくっつけて数えてごらん!」

「んー、くっつけるって、僕まだ知らないなー。。 でも僕、0は分かるよ!何もないってことだよね。 あと、一つ増やすっていうのと、一つ減らすっていうのは分かるよ!」

Japalispくんは、一つずつだったら、増やしたり減らしたりできることが分かった。 なので、1つずつ、えっちらほっちらとりんごを移動させてみよう。


これだけわかれば、もう君はJapalisp(ジャパリスプ)くんに足し算をお願いすることができる。 次の文章が、実際に彼に「僕の足し算」をやってもらうためのお願い文。
この文章を、Japalispくんが住む遊び場にコピペしてみよう。なにが返ってきたかな?

作者註:まだスマホでのコピペには対応していません。お願い文をつくるときは、パソコンのブラウザから遊んでね。

僕の足し算っていうのは、
こっちとあっちを使って、
もしあっちが0ならこっちを教えてね、
それ以外なら
こっちで一つ増やした数と、あっちで一つ減らした数で僕の足し算をし続けるんだよ。

「僕の足し算だね!」と返ってきたら、とりあえずは安心して。 あなたが伝えたお願いが、Japlispくんに伝わったという合図だから。 ここからがJapalispくんのすごい所。 彼は、画面を閉じるまでは、僕の足し算の仕方を決して忘れることはない。

まずは、彼が足し算を正しくできるか確かめてみよう。 お願い文をコピペした遊び場で、「10と4で僕の足し算してみて!」って言ってみて。 なんて返ってきたかな?

「14だよ!」って返ってきたなら、彼は僕の足し算を理解してくれているってことだ! やったね!

もしかしたら、10と4で足し算ができるのは何てことないかもしれない。
でも、「78と39で僕の足し算」は? 「5678と1234で僕の足し算」は?

彼にとっては、これも同じくらい何てことない計算だ。それもこれも、君が僕の足し算のやり方を、彼に教えてあげたから。 おめでとう!

ここで一旦休憩しよう。と思ったら、興奮したJapalispくんは、次のこんなことを聞いてきた。

「ねぇねぇ、引き算ってどうやるの?」

ふぅ、ここから先は、読者のあなたに、Japalispくんに計算を教える役目を担ってほしい。 もしあなたのJapalispくんの遊び場で、Japalispくんに引き算のやり方がきちんと伝わったと思ったら、 「僕の引き算っていうのは、、」から始まるお願い文を、下の何らかの方法で僕に教えてほしい。

1. Twitterで、#僕の引き算 をつけてつぶやく。
2. Japalispくんの生みの親にメールを送る。
3. GithubでIssueとして回答を書く(バグがあると思ったらプルリクもね!)

Japalispくんはまだ足し算を習ったばかりだけど、僕たちがお願い文を正しく書きさえすれば、 ものすごい量の計算をすぐにやってくれるようになる。
下にあげるのはそのほんの一例。

・掛け算
・大小関係
・イコール
・べき乗
・割り算
・階乗

ここまで読んだあなたなら、Japalispくんにお願いする方法のコツを、すぐに掴めるはず。 計算そのものが楽しいって感覚が、すぐにやってくると思う。

Japlispの生みの親として、あなたの解答を心待ちにしています。

つづく