義務教育でもプログラミングを教えるなんて話題になってる。
僕の少年時代にはコンピュータは憧れの存在でプログラミングを学べるなんて考えたこともなかった。夢のような話だ。
だけど心配なこともある。適切なプログラミング教育が行われるかどうかだ。
自身の経験からプログラミング教育について少し述べていきたい。
プログラミングは表現方法の一種類である
僕が思うのはプログラミングは表現方法の一種類だということ。
絵筆を持ってキャンバスに色を塗って作品を作り上げるように、プログラミングというのもデジタルの世界で何かを作り上げるための技術にすぎない。
プログラミングというのは絵の具を混ぜて適切な色をキャンバスに塗るのと同じなのだ。
しかし、そこを誤解したままプログラミング教育がされると困る。
我々はデジタルの世界で自由だ。自由であるためにプログラミングが出来る。
なのに教育という手段によってプログラミングの世界が狭まってしまうのは非常に不幸なことだ。
プログラミング教育といえばアルゴリズムや計算?
例えばプログラミングをはじめてみようと思った時に、演習問題で出されるのは主に基本的なアルゴリズムや数学的な計算だったりする。
それらを面白いと思えるのならば良いだろうが、多くの人は面白く感じないだろう。
いくら技術が発展してもプログラミングの初学者は、アルゴリズムや数学に苦しめられ邪魔される。
確かにコンピュータが登場した当初はそれが大事だったのだろう。
しかし今やプログラミングでアルゴリズムや数学は大事ではないのだ。
もっと一般化すべきだ。
コンピュータは日に日に頭が良くなり向上していく。
計算やアルゴリズムに沿って動くだけではない。プログラミングという言葉はもっと大きな意味を持ち始めているのだ。
プログラミングは直感的になっていく
プログラミングは積み重ねだ。一度実装したプログラムを改めて実装する意味はない。
だからこそコンピュータはどんどん賢くなっていく。
現在時点でコンピュータはかなり賢くなっている。
例えばあなたが近所の美味しいラーメン屋さんを探そうとする。
地域のラーメン屋の情報を集めて、お客さんの感想を聞いて、データを集める。
集めたデータを整理して、どのラーメン屋さんが美味しいかを判断する。
その間には多くの作業が必要だ。
しかし現在では、一言マイクに向かってこう言えばいい。
「オッケーGoogle、美味しいラーメン屋さんを教えて」
それだけだ。
我々人類は偉大なる祖先が積み上げてきた歴史の上に立っている。
プログラミングの世界でも同じだ。
車輪を再発明する必要はない。
誰かが組んだシステムはそのまま使うべきだ。
だからこそ、プリミティブなプログラミング教育を今からするのだとしたら完全に無駄でしかない。
バブルソートについて学んでどうする? 今の開発環境なら array.sort でソートができるんだぞ?
大局的なプログラミングとは、すなわち論理的な指示ができるということ
現代のプログラミングは小さい命令を積み重ねて、一つの作業を組むという段階ではない。
大きな作業命令で多くのことができるようになっている。
それらを知らずに、未だに何かを作ろうとした時に一から作り始める馬鹿も多い。
いちいち車輪を作る必要はない。誰かが作った車輪を使えばいいじゃないか。
枯れた技術の水平思考というやつだ。
もはや現代のプログラミングはその域まで達している。大きな命令をすれば、あとは適当にやってくれるレベルになっている。
もっと技術が進めば人間の曖昧な命令でも適切に仕事をしてくれる未来になるだろう。
だからこそ、学ぶべきなのは命令の仕方である。
アルゴリズムや計算をするためにプログラミングをすべきではない。
我々は適切で分かりやすい指示の出し方、命令の方法を学ぶべきだ。
これは恐らく人類にとって最大のメリットとなるだろう。
いい加減で曖昧な指示を出す上司を撲滅したり、よく分からないままシステム化を望む顧客も激減する。
要求を相手に分かるように伝える。
このことこそが未来のプログラミングなのだ。
分かりやすく、自分の要求を相手に伝える。
そのために何をすべきか?
そういうことを教育してほしい。
プログラミング教育は単にコンピュータを相手にすることではない。
人対人のコミュニケーションにも役立つことなのだ。
分かるように相手に伝える。
そういう技術をプログラミング教育では是非教えて欲しい。
プログラミングって結局はそういうことなのだ。
何をしてほしいかをコンピュータに必死に伝える作業なのだ。
少なくとも現代では。