プログラミング教育という言葉をよく聞くようになった昨今、そろそろプログラミングを勉強しようかな、という方もいらっしゃると思います。
ただ一言でプログラミング言語といっても種類はさまざま。CやC++、JavaやJavaScript、Python、Ruby、Go・・・結局どの言語を選べばいいか判断つきませんよね。
それもそのはず、プログラミング言語はその用途によって最適な使いどころが異なるからです。ひとつの言語ですべてをカバーすることは困難です。
これを逆に言うとプログラミング言語ひとつひとつに「活きる場所」があるはずなのですが・・・
実は、そうではないキワモノプログラミング言語と呼ぶべきものが存在します。
そこで今回は、実用性ゼロ、生産性ゼロ、存在自体がネタと言える出オチ系のプログラミング言語を厳選してご紹介しようと思います。
プログラミング言語とは
プログラミング言語とは、アプリやシステムで実行される処理を記述するための言語です。
コンピュータに対して命令を下し動かすための指示書を書くための言葉、とイメージしてもらうとわかりやすいかもしれません。
その種類は実に多く、Wikipediaによるとその数なんと278個。掲載されていないマイナー言語を含めると500個は超えるんじゃないでしょうか。
アプリやシステムの部位によって適切な言語が違ったり、時代とともに流行する言語が変わったり、言語ごとの派閥に分かれた宗教論争があったり・・・
プログラミング言語そのものの特性やそれを取り巻く文化は調べてみると実に奥深いのですが、今回はそこらへんは割愛します。
ここでは、プログラミング言語によって記述された処理をソースコードと呼ぶ、ということだけ覚えておいてください。
プログラミング言語が満たすべき条件
コンピュータはソースコードに記載された処理を忠実に実行するのですが、ここでひとつ大事な条件があります。
プログラミング言語で記述された内容をコンピュータが最後まで実行できること(計算可能性が確保されていること)です。
詳しいことはWikipedia先生に譲るとして、要するに一定のルールを守っていないときちんとしたプログラミング言語とは呼べませんよ、ということ。(そうでないプログラミング言語も一部存在しますが、ここでは割愛)
このルールに則っている(計算可能と数学的に証明されている)状態を「チューリング完全」と呼びます。コンピュータの基礎理論を確立した超有名数学者であるアラン・チューリングの名前から取られました。
大事なのは、このルールさえ満たしていればプログラミング言語で使う言葉尻はなんでもいいということ。
たとえば「Hello World!」と表示する処理を書いたソースコードを見てみましょう。
System.out.println("Hello World!");
puts 'Hello World!'
echo Hello World!
これらを実行するといずれも同じ結果をもたらすのですが、プログラミング言語ごとに実に表現に幅があることがわかっていただけると思います。
ぶっ飛んだマイナー系プログラミング言語たち
さて、本題です。
型にはまっていれば表現は自由。ルールさえ守っていればなにやってもいい。ならば最高にふざけてみようじゃないか!
というノリで作られた、ネタに全振り&実用性ゼロのぶっ飛んだプログラミング言語たちをご紹介します。
ファイルを開くとそこは雪国だった「Whitespace」
ソースコードといえば処理が文字で書かれているものである、という先入観を見事に裏切るプログラミング言語。ソースファイル(ソースコードの書かれたファイル)を開くと、そこには真っ白な世界が広がっています。
それもそのはず。この言語で使われる文字はなんと
- 半角スペース
- 改行
- タブ(Tab)
の3つだけです。いずれも真っ白、なにも見えません。そしてこれら以外の文字は全て無視されるというおまけ付き。
たとえばHello Worldと表示するためのソースコードはこちら。
(以下略)
真っ白ですね。ここまで真っ白だと禅の世界に入れそうな気がします。
このファンタスティックなソースコードの全文が見たい方は下記サイトからどうぞ。
笑えば、いいと思うよ「Grass」
「Whitespace」の類型です。この言語で使われるのは以下の3文字のみ。これ以外は無視されます。
- W
- w
- v
さて、どのようなソースコードになるのでしょうか。さっそく実物を見てみましょう。
この言語の名前はちょっと草植えときますね型言語Grass。笑いを表す「www」が草に見えることから、笑う=草生える。それを全面に押し出した笑いに溢れた言語です。
プログラミングしているとW、w、vがゲシュタルト崩壊を起こしてしまいそう。
参考 http://www.blue.sky.or.jp/grass/doc_ja.html
いつからソースコードはファイルの中に書くものだと思っていた?「Pxem」
ソースコードといえば、通常はファイルの中に記載されているもの。その既成概念をぶち壊しにかかったのが「Pxem」です。
Pxemでは、なんと処理の内容をファイル名に記述します。たとえば”Hello World!“を出力するプログラムのソースコードはこちら。
ファイル名:Hello World!.pxe
ファイルの中身:
なんと0バイトのソースコードでHello Worldが出力できていまいました。効率的!(と言いつつ、ちゃんと別の場所でディスク容量は食っているんですが・・・)
ちなみにプログラミングの練習問題として有名なFizzBuzzと呼ばれる処理の場合、ファイル名は
ak.-akbuzz.-ak4.-akfizz.-ak2.-1.p05.-.tab.z01.-.c.m.+.c.t05.-.%.w.s01.-.m03.-.%.W.s.m.nak.-.p00.-.c.c.c.a.wak.-fizz.p00.-.c.c.a.a.w01.-.m03.-.%.w.sak.-buzz.p00.-.c.c.a.wak.-fizzbuzz.p00.-.c.a.a.md2.-02.-.!.a.d.pxe
となるそうです。読めない。
これからはアートの時代だよ「Piet」
ソースコードは文字列である必要なんてない!画像でやって何が悪い!というアウトローでアーティスティックなプログラミング言語が「Piet」です。
論より証拠。さっそく”Hello World!“を出力するソースコード(画像)を見てみましょう。
(出典:http://www.dangermouse.net/esoteric/piet/samples.html)
なんだか現代アートそのものという感じですね。
その他にも見た目がキレイなソースコード(画像)がたくさん紹介されています。
ぼく個人的なお気に入りを紹介します。(いずれも出典はDM’s Esoteric Programming Languages – Pietから)
素数を出力する
左上を1として、素数のマス目にドット(・)が入っているのにお気づきでしょうか。
素数の算出ロジックにどう影響しているかは不明ですが、芸が細かいですね。
Hello World!を出力する(別バージョン)
その昔、MS-DOSという古いOSで走るプログラムに「vgaidemo.exe」というものがありました。
パソコンの画像処理性能をデモするためにキレイなグラフィックを表示するプログラムなのですが、その出力によく似てるんですよね。美しいので何度も実行して眺めていました。
(知ってる人は知っている、はず・・・)
“Tetris”という文字列を出力する
画像の構成要素がすべてテトリスのブロックになっている点に注目。
こういう芸も、画像をソースコードに使うからこそできる遊びです。
ここまでくるとプログラミングというより本当にアートの世界ですね。
キレイなソースコードを書く、というのはプログラマの至上命題ですが、これもひとつの解になりうるのでしょうか。
まとめ:暇を持て余した、プログラマーの遊び
というわけで、まさに誰得のキワモノプログラミング言語のご紹介でした。
プログラマーというと難しい顔しながらキーボードを叩くとっつきにくい人間というイメージがありますが、プログラマーにはプログラマーの遊びやユーモアがあるんですね。
ちなみに、「Whitespace」や「Grass」のように使う文字や言葉を限定するタイプのプログラミング言語はほかにもさまざまな派生があります。たとえば
興味がある方はぜひ見てみてください。
ちなみに記事内でご紹介したコンピュータ理論の始祖、アラン・チューリングについては、こちらの映画でその功績と人となりについてよく知ることができます。
ナチスドイツの開発した暗号「エニグマ」を解くことで戦争に勝つ、そのためにコンピュータ理論を生み出した・・・というお話。
今この記事を見ているあなたが使っているPCやスマホの基礎の基礎を作った人です。ぜひ一度見てみてください。
コメント