1980 年にBASIC というプログラミング言語に出会って以来、ソフトウェア技術者としての仕事を通じて、これまで様々なプログラミング言語を使ってきました。ワードプロセッサの仮名漢字変換のプログラムをアセンブラで書いたり、機械翻訳のプログラムをC 言語で書いたり、グラフ入りレポートをExcel で自動作成するプログラムをVBA で書いたり。最近はScratch やPython なども使う機会がありました。
ビジュアル化や開発環境の高機能化などによって、プログラミングの敷居も随分と低くなってきたと思います。その一方で、昨今の第3次人工知能ブームに象徴されるように、作成されるプログラムは昔に比べて遥かに高度で複雑なものになっています。
その発展は、プログラムを動作させるハードウェアの驚異的な性能向上や技術革新によってもたらされたことは言うまでもありません。「いつでもどこでも手のひらの上で世界中の情報にアクセスすることができる」。ソフトウェアとハードウェアの進歩が両輪となって私たちにもたらした世界は、20 年前とは全く異なるものです。
様々なプログラミング言語を使ってきましたが、どの言語を使おうともプログラミングの基本はデータとアルゴリズムです。ちょうど日本語でも英語でも中国語でも、どの言語にも名詞と動詞があることと同じですが、それも当然のことです。なぜならプログラミング言語は、できるだけ人に近い言葉でコンピュータに命令できることを目指して開発されてきたものだからです。プログラミング言語は、更に人が命令しやすいように進化して、最終的には自然に話しかけるだけで、複雑で高度なプログラムが作れるようになるかもしれません。
そうなると、英語を話す能力の前に伝える内容を考える能力が重要であることと同様、プログラミング言語を自由に操る能力の前に、コンピュータに何をやらせるかというアイデアを生む力とそのアイデアを整理して相手に伝える力がより重要だということになります。小学校でのプログラミング教育必修化の真の狙いも、アイデアを生む力とアイデアを整理して伝える力を養うことです。21 世紀型スキルであるこの力のことを「論理的思考力」と呼びます。
良いプログラムを書くためには、データとアルゴリズムの他に、抽象化や具体化、モジュール化といった概念も必要になりますが、それでも基本はプログラミング対象のデータとアルゴリズムをよく考えて整理することから始まります。
理解しやすいように現実にあるもの、例えばボールペンをプログラムで表すことを考えてみます。それにはボールペンをよく観察することから始めます。ボールペンは、ペン先のボールが紙に接すると一定量のインクが紙に付着します。ペン先を紙に接したままボールペンを移動すると、ボールが回転してその軌跡通りにインクが紙に付着します。
どんなデータがあるでしょう? インクの種類、インクを運ぶボールの半径、回転するボールにまとわり付くインクの厚み、ボールにインクを供給するスリーブ( 軸) に入っているインクの量、ペン先の平面(XY) 座標と垂直(Z) 座標、などなど精密に表そうとすればデータはまだまだありそうです。例えば、ボールペンの温度というのも重要かもしれません。
アルゴリズムはどうでしょう? 直線や正確な円を描くためのXY 座標の計算、ペン先を下げるスピードの調整(紙を破らないように)、スリーブのインクの減り具合。
このように、つぶさに観察しデータとアルゴリズムを整理して初めてプログラムを書くことができます。どこまで精密にプログラムで表すかは用途次第です。パソコンやタブレットのお絵かきソフトであればインクの減り具合などは必要はないでしょうし、製図などで使われるXY プロッタという機械の制御プログラムの場合は、インクがなくなる前にペンの交換を促すためにインクの減り具合を計算するアルゴリズムが必要になるかもしれません。
例えば自作のオリジナルゲームのキャラクタなど、現実にないものをプログラムで表すこともあります。この場合は、観察ではなく想像することになりますが、それでも筋の通った想像をする必要があります。そうしなければ一定のルールで動かすことができず、ゲームのキャラクタとしては使い物にならなくなってしまうでしょう。筋の通った想像というのはコンピュータグラフィックスやコンピュータミュージックの創作でも同じですし、コンピュータを使うまでもなく、鉛筆で五線譜に音符を並べる行為もプログラミングそのものに思えます。
高度経済成長期には大量生産とそれを支える均質な労働力が重要視されましたが、成熟期のこれからは多品種少量生産と人材の多様性がより重視されていくことでしょう。そのような時代の到来を念頭に、中学校で必修化された創作ダンスの狙いは、個性を表現する自己表現力の育成にあったと思われます。そしてダンスとは使う力は異なりますが、論理的思考力を養うプログラミングもまた、強力な自己表現の手段なのです。