構文糖衣


[tag:]

Google I/O 2017でAndroidの主要開発言語にKotlinが加わった。
クラス定義が劇的に短くなったり、Java→Kotlinを自動変換 したりというデモを見ていると、KotlinもまたJavaの構文糖衣 になっているということがわかる。

プログラムをつかって問題を解くことを主題にした講義は もちろん、プログラミングそのものの教育においても、 何をどこまで教えるかというのはとても難しい。
トランジスタの仕組みやNANDの完備性を知らなくても CPUやフラッシュメモリは使える。
命令セットの詳細を知らなくてもプログラムは書けるし、 プログラムが書けなくてもアプリは使える。
一人の人間がすべてを知らなくても何かが実現できる 状態をつくるためのカーテンが構文糖衣であり、 それは隠蔽よりも分離として捉えた方がよい。

何かに構文糖衣を着せることは、目的によってよいことにも なるし、悪いことにもなる。
それは構文糖衣を脱がせることも同じだ。
プログラミング教育を始めるのはよいが、目的がないことには アプリケーションの構文糖衣をどこまで脱がすかが決められない。

文科省の言う「プログラミング的思考」とは、こういった特性をもつ、 人間とは異なるシステムとのコミュニケーション能力に近い。
目的を明確にすることで、あらゆることを精度よく高速に行えるが、 明確化の精度をかなり高いものにしないと思ったようには動かない。
ある種のカルチャーギャップである。
An At a NOA 2016-06-17 “プログラミング教育2

というカルチャーギャップを埋めるためのコミュニケーション能力を 身に付けることが目的であれば、プログラミング言語の文法の詳細は 構文糖衣に包まれている方がよい。
文法が簡単になったとしても、慣れない内はバグにたくさん遭遇する だろうが、プログラムは書いたとおりにしか動かず、こう動くように 書いたという想定と、こう書いてあるように動いたという結果のズレ であるバグのすり合わせは、一種のコミュニケーションであり、 それがプログラミング教育の目的になり得る。

プログラムには様々なモデル化が関係するが、 そのモデル間の齟齬がバグと呼ばれるものである。
An At a NOA 2017-02-16 “バグのないプログラム

アプリケーションがよしなに動いているように感じたとしたら、 その挙動が予測され、よしなに動くようにプログラムがコード されているからである。
個々のアプリケーションを使う限り、そのモデルが張る解空間の 中でしか動けないこともまた、認識されるべきだろう。