日本語プログラミング

僕が初めて作ったオリジナルのプログラミング言語はLaplasといって,逆ポーランド記法なリスト処理言語でした.専門用語だらけですみません.たとえば,1+2という計算は

1 2 +

と書きます.こう書くと「1と2を足す」と日本語で読むことができました.
もう少し複雑な式,たとえば 1+2*3 というのは

1 2 3 * +

となります.「1に2と3をかけたものをたす」です.苦しいですけど,ギリギリ意味を理解できます.

(追記)

繰り返しはこのように書きます

1 (2 *) 10 repeat

これは「1に2をかけるのを10回繰り返す」と読みます.1 * 2 * 2 * …ということで2の10乗を計算できます.ちなみプログラミング言語の設計者の悩みとしては,このrepeatの構文で順番を入れ替えて

1 10 (2 *) repeat

と書くよいような設計も考えられます.10が(2 *)より外側にあった方が良い場合が多いのでプログラミング言語の設計としてはこの方なんですが.しかし,これだと日本語では読みにくいです.それで,最初の仕様にしました.自分としては言語としてきれいなものを作りたかったのですが,ここだけは日本語を意識したので,そのきれいさを犠牲にしたので,今でもよく覚えています.

こういう式の書き方は逆ポーランド記法と呼ばれてて,FORTHという言語とかプリンタ用のPostScriptという言語に使われてました.

当時使っていたコンピュータは,まだ日本語を簡単には扱えないものだったので英字止まりでしたが,プログラムを日本語で読める素晴らしさはすごく理解しています.

その後,HyperCardというシステムにHyperTalkというプログラミング言語がありまして,この構文があまりにも英語っぽい書き方だったのに衝撃をうけました.たとえば

put 102 into card field x

と書いて,このカードの変数xに102を代入するという意味です(たしか).もともと英語は文法がしっかりした言語なので,そのままプログラムっぽくなるわけです.それに対して,日本語はいい加減な文法でも通じてしまうという,言語としては面白いけど,厳密じゃないものまでかけてしまうという不利さを感じました.

それと,やはりプログラミング言語は英語文化の人たちが発明したものなんだ,的な敗北感と,このレイヤでは太刀打ちできないな(もしくは自分が英語文化に染まって楽になるか)とも思いました.

その辺りから,文字を使わないプログラミング言語の道に進むようになるのでした.

さて,ビスケットで子供達にプログラミングを教える時には,意識してメガネを日本語で読むようにしています.たとえば,カニが進んだり止まったり,

2016-10-07_08h41_27

このように同じ部品に対して,メガネが複数あるときは「〜たり〜たり」と読むと通じます.

ビスケットの例では有名な風邪が感染するシミュレーションでは,健康な人(紫の棒人間)が何人かと,風邪を引いた人(赤い棒人間)が一人だけ居ます.

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-08-0-03-13

健康な人は横に進み,風邪を引いた人は縦に進みます.

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-08-0-02-48

ここで,健康な人が風邪を引いた人にぶつかりました.では「風邪がうつる」というメガネを作ってください.と言います.すると面白いぐらいにこんな間違えをする人がでてきます.

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-08-0-07-15

これは,「健康な人は風邪に変わる」です.ぶつからなくてもすぐに風邪に変わってしまい,全員が一瞬で風邪になります.それで「健康な人が風邪をひいた人にぶつかったら,風邪がうつるだよ」と言い直します.「ぶつかったら」がわからないようなので,ヒントをだします.メガネの左側を
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-08-0-10-21
のように並べて,これが「健康な人が風邪をひいた人にぶつかったら」という意味だと説明して,メガネの右側を考えてもらいます.

それで,「健康な人が風邪をひいた人にぶつかったら,風邪がうつるだよ」と強調すると,今度は
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-08-0-10-32
のような間違えをする人が現れます.これは意味としては「健康な人が風邪をひいた人にぶつかったら,風邪を引いた人一人になる」ということなので,人間が一人減ってしまう,と説明します.

これらの一連の間違えの理由は,言葉の意味をよく考えずに,出てきている言葉をただ並べただけだからでしょう.そして,間違ったメガネでも,それを正確に表す日本語があって,そのメガネはこういう意味だよと日本語で説明できるので,その間違えに気がつきやすい,ということでもあります.

で,正解は
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-08-0-03-37
です.読み方としては,「健康な人と風邪をひいた人がぶつかったら,風邪をひいた人はそのままで,健康な人は風邪をひいた人に変わる」となるのでしょうか.

「風邪をひいた人はそのままで,健康が人が風邪をひいた人に変わる」というのが「風邪がうつる」という言葉の翻訳だったのです.「風邪がうつる」という言葉から「風邪をひいた人はそのままで,健康な人が風邪をひいた人に変わる」という変換ができる能力がプログラミングに必要ということになります.

ここまでの様子は,この動画でも見ることができます.

盛り上がって,感染が広がる様子をみんなが体験した後で,時間があるときには次の課題を付け足します.

「では,病院を建ててください」

勘のいい子なら,すぐにとりかかります.わからない子のために,この文章も正確に分解した日本語にします.「病院を建てるということは,まず病院の絵を描いて,その絵を画面において,病院が風邪を治すということだね」ここで少し考えさせて,「病院が風邪を治すというのは,病院に風邪をひいた人が入ったら,病院から健康な人が出てくる」だね,と続きます.

メガネ自身は,言葉を持たないので,語順は違っていてもメガネを英語でも読むことができると思います.

シェアする

  • このエントリーをはてなブックマークに追加

フォローする