テキシコー勝手に解説
みなさん「テキシコー」はもう見ましたか?見てない人は今すぐ見ましょう。
「テキシコー」は、「プログラミング的思考」を育むべく、Eテレで始まった新番組。プログラミング…難しそう…と思うなかれ。作っているのは、あの佐藤雅彦と、ユーフラテス。長年「ピタゴラスイッチ」を手がけてきたタッグです。変な生物あり、おもしろ実験あり、ショートアニメあり、マジックあり、10分があっという間です。本職がプログラマーであり、アニメやマジックにも片足を突っ込んでおり、佐藤雅彦大好き人間としてはもう最高のコンテンツでした。
その勢い余って、今回はプログラマーの視点から、テキシコーの内容を勝手に解説していきます。
プログラミング的思考
佐藤雅彦は、「アベベのぼうけん」という本でプログラミングについて次のように書いています。
プログラミングとは、未来に向かって「こうなるといいな」「こうしたいな」を構想し、その実現に向かって、具体的に何を準備するか、そしてどういう手順で実行するか、を前もって決めておく行為です。
佐藤雅彦、いいこと言うな…。
プログラミングとは、何もパソコンに向かってカタカタとプログラムを書き続ける行為だけを指すのではないのです。目的に向かって準備をしたり計画を立てるのは、大なり小なり、みなさんも普通にやっていることです。
プログラミング的思考とは、そういう場面で役立つツールです。想像力、考え方、視点、そういったものを養っておくと、あなたの力になってくれるはずです。テキシコーは、それを楽しく助けてくれる番組です。
オープニング:紙生物
プログラミング的思考と謳いながら、いきなり謎の紙生物と耳から離れなくなる歌を繰り出してくるのが、さすが、佐藤雅彦…。
ちなみに、佐藤雅彦は、広告マン時代に、「スコーンスコーンコイケヤスコーン」「ポリンキー♪」「バザールでござーる」などを生み出した人と言えばそのヤバみが伝わるでしょうか…。
この紙生物、「そもそもどうやって動いてるんだろう?」と思うところから、もうプログラミング的思考は始まっています。何かを見たときに、「アレどうなってるんだろう?」と考えてみるのは、プログラマーとして大事な素養です。
一見ランダムに動いているように見えた紙生物ですが、二枚の三角形のプレートで動いていたことが明らかになります。このように、一見複雑な動きでも、「分解」して考えてみると、シンプルな構造で達成されていることがよくあります。逆に言えば、シンプルなものであっても、その「組み合わせ」方次第で、複雑な動きを達成することが出来ます。
複雑な問題を、複雑な構造や解法で解決するのは、プログラマー的には良いとは言えません。出来るだけシンプルなものの組み合わせの方が、結果的に、理解しやすく、耐久性が高く、応用が効くのです。
この紙生物も、「プレートを四角にしてみたらどうなるだろう?」とか「プレートを三枚に増やしてみたらどうなるだろう?」とか、そういう可能性が色々と浮かびます。
シンプルなものの組み合わせを色々と考えてみるのが大事です。
あたまの中で動かしてみよ
先にも出ましたが、プログラミングとは、「前もって準備や計画をする行為」です。そうであるからには、「それがどうなるか」を「想像する力」が大切です。実際にプログラムを書いている時も、「こう書けば、こうなるだろう」というのを、常に想像しながら書いています。書いたプログラムを実行してみるというのは、いわば「答え合わせ」みたいなものです。
もし自分がプログラミング教材を作るとしたら、何よりもまず、この「想像力」を鍛えるものが必要だな…と思っていました。それに該当するコーナーを一番最初に持ってくる佐藤雅彦、分かってるな…!
余談:プログラミングとは失敗し続けること
プログラミング、特に、ソフトウェアの開発は、書いたプログラムが「うまく動かないのが当たり前」です。意外に思われるかもしれませんが、そうなんです。最初から一発で正しく動くプログラムを書ける人というのは、普通は居ません。
プログラマーが何をしているかというと、「こう書けば、こうなるだろう」を書いてみて、それを動かしてみて、「ここがうまく動かなかった、なんでだろう」そして「こう修正してみよう」。これをひたすら繰り返しています。
プログラマーとして仕事をしていくためには、「失敗を当たり前と思って挑むちから」、「間違いの原因を探し当てるちから」、プログラミング的思考のほかに、このふたつが結構大事です。
ダンドリオン
ある目的を達成するためのプログラムは、実は無数にあります。「問題」と言うと「正解が一つだけある」と感覚的に思ってしまう人も多いと思いますが、プログラムにおいてはそれは当てはまりません。正解は無数にあります。逆に言えば、絶対的な正解はありません。
しかしながら、「速い」とか「短い」とか「分かりやすい」などの目標が出てくると、それによって、「良いプログラム」と「悪いプログラム」というのが比較できるようになります。
ダンドリオンは、「効率」が第一です。アニメ中に出てくるふたつのやり方、どちらも「ゴミを片付ける」という目的は達成出来ています。しかし、「効率」という面で比べると、「2工程」で終わる手順の方が優れています。
このように、「目的」の他にどのような「目標」を据えるかによって、どんなプログラムを作るべきかも変わってきます。それを探していくのも、プログラマーの仕事です。
やっていることは同じなのに、命令の並べ方だけで効率が変わるというのも面白い性質ですね。
ロジックマジック
「ロジックマジックは、普通のマジックとちょっと違う」とナレーションが出てきますが、普通のマジックもこういう原理がたくさん使われています。マジックの世界には、手先の技術を使わず、数学的な性質を利用した数理トリック、手順を辿れば必ず現象が起こるセルフワーキングトリックというジャンルがあります。不思議な現象(目的)を達成させるために、どういう工程を踏めば良いかを考える、これはプログラミングそのものです。
プログラミングにおいて、複数のものに「共通する部分」と「異なる部分」を見つけ出す力はとても大事です。共通する部分を発見することによって、同じ性質を持つことに気付くかもしれません。なぜそれが大事かというと、物事をシンプルに考えることに繋がるからです。その気付きによって得られた視点で問題を見直してみると、思わぬ解法が浮かぶことがあります。
「寿司」と「牛丼」は全く違う食べ物ですが、「ご飯の上に具が乗っている」という点では、全く同じ構造です。プログラミングではそういう発想や視点が役に立つ時があります。
同じだと思っていたものが、違うものだと気付いた時に思わぬ解法が浮かぶこともあります。今回のロジックマジックもその象徴です。「紙の切れ端」という視点で見れば全て同じ物体ですが、「端があるかどうか」という視点で見ると、全く違う物体であることが分かります。
このように、都合よく視点を切り替えて、同じところ、違うところを見つけ出すスキルはとても大事です。
こんなところにプログラム
郵便配達の例は少し分かりにくいので整理してみましょう。プログラムとは、それ単体では成り立ちません。プログラムを実行するものがあって、初めて意味を持ちます。ソフトウェアの場合は、コンピュータの中のCPUという機械が、プログラムを実行しています。
今回の例では、「道順」こそがプログラムであり、「郵便配達のおじさん」は、そのプログラムに従って動くCPUだったのです。配達原簿というプログラムに従っておじさんが動くと、最も早く配達を終えることが出来るよ、ということだったのです。配達原簿は効率重視ダンドリオンのリーダーのような人が作ったプログラムでしょうから、どんな性能のおじさんであっても、最効率で配達を終えることが出来るのです。すごいですね。
このように、プログラムとCPUの関係にあたるもの、そして、色々な目的で作られたプログラム、色々な性能のCPUにあたるものが、世の中にはたくさんあります。そういった目で周りを見てみると面白いですよ。
参考になったらサポート頂けると嬉しいです!