はじめに
ここ数年、プログラミング教育が注目されている。2017年に文部科学省の次期学習指導要領で、2020年から小学校でのプログラミング教育の必修化が明記されたことが大きい。またこれは世界的な潮流ともなっている。ただし今回の学習指導要領では、プログラミングそのものを身に着けることを目的にしているのではなく、プログラミング的思考を身に着けることを目的としている。
プログラミング教育が注目されている背景には、現在世の中にある多くの職業が、AIによって置き換えられると予測されていること、また将来、IT人材の劇的な不足が見込まれていることとがある。
プログラミングはAIに置き換えられるか?
AIはプログラミングによって作り出される。ではプログラミング自体がAIに置き換えられることはあるのだろうか。これはYesとも言えるし、Noとも言える。90年代後半に同じような議論があったことを覚えている。これからの時代、プログラミングはなくなっていく。人は指示を与えるだけでいい。そんなことがよく言われていた。確かにその片鱗は見えたが、個人的にはとても懐疑的だった。プログラムというのは人間の思考そのものだからである。弱いAIと強いAIで言われる、強いAIが生まれない限り、プログラミングという行為はなくならないと思われる。実際、20年後の現代も、プログラミングの需要は増すばかりである。
しかしながら、プログラミングの性質は大きく変わった。例えば昔は企業のお問い合わせフォームや掲示板などちょっとしたプログラムも毎回プログラミングで作成していた。ECサイトやCMSなども、全てフルスクラッチだった。しかし今ではそのような仕事はほとんどないと思われる。オープンソースソフトウェアや商用パッケージ、SasSが普及した今、典型的なアプリケーションをフルスクラッチで開発する必要はないのである。フルスクラッチで開発するのは、ライセンスを全て自社で保有したいか、他にはない独自のサービスを提供したい場合などに限られる。また90年代はパソコン向けのソフトウェアがほとんどであったが、現代ではタブレットやスマートフォンなど対象が多様化している。
プログラミングの自動化はある意味では可能かもしれない。例えば、Access や FileMaker などにはそういった側面が見られた。プログラミングなしに業務アプリケーションを作成しているケースも多くあった。今の kintone や Salesforce もその典型だと思われる。実際多くの業務アプリケーションは対応可能と思われる。でもそれは厳密にはそれはプログラミングの自動化とは言えない。画面の設計や、処理フローやパラメータを設定する時点で、プログラミングしているのである。
ここで気づくのが、プログラミングは狭義のプログラミングと、広義のプログラミングがあるのではということである。狭義のプログラミングとは、直接コードを書くプログラミングである。広義のプログラミングとは、コードを書くことを問わず、何らかの形でコンピュータに一連のロジックを与える行為である。そういった意味では、プログラミング教育が狭義のプログラミング(コーディング)ではなく、プログラミング的思考の習得を目的としているのは理にかなっているのかもしれない。
狭義のプログラミングがなくならない理由
今後、広義のプログラミングが拡大するのは予想できる。しかしながら、狭義のプログラミングがなくなるかと言えば、そうとも思わない。理由は大きく2つある。
1. 透明性
Access、FileMaker、kintone、Salesforce などの製品では、どこにどのような設定を行ったのか、どうしても属人的となる。実際、Access で作られたシステムのメンテナンスを頼まれたが、どこに何が設定されているか解読できず、他のプログラミング言語で作り直したことが多々あった。例えば今後は、対話型のプログラミングというのも生まれるかもしれない。自分の勝手な空想であるが、ひたすら人間と会話をすることで、ロジックを蓄積し、自ら判断できるようになるというものである。ある分野では非常に有効かもしれないが、ここにも透明性の問題がある。
どんな製品でも、独自の設計思想や仕様がある。そしてそれに開発者の設計が加わる。それが大きなバイアスとなり、他者を理解させにくくしている。コードというのは、一番バイアスがかかりにくく、透明性が高い。それだけ多く人が理解しやすい。数式と似ている。問題が発生しても原因の特定がしやすい。これまでコードによるプログラミングがなくならなかったのも、そういったことが大きいと思われる。
2. 汎用性
プログラミングというのは本質的に問題の解決のためにあると考えている。前述の製品では、ある決められた範囲の中での問題解決には、とても役に立つが、未知の問題には対応できない可能性がある。製品の持つ制約によってはそもそも実現できないデザインや機能も多い。またプログラミングの対象は拡大の一途をたどっている。20年前、ソフトウェアといえば、主にパソコン用のソフトウェアを指していた。しかし現在ではタブレットやスマートフォンに加え、家電製品や車にも高機能なソフトウェアが搭載されるようになった。
ハードウェアのソフトウェア化は、今後ますます進み、家の中や社会のあらゆるものがプログラマブルとなる未来が到来すると思われる。かつてのパソコン、そして現代のスマートフォンがそうであったように、プログラマブルなハードウェアが市場に普及した時、プログラミングの需要が爆発的に増える。コードは(もちろん言語にもよるが)それら全てのハードウェアに対応できる汎用性を持っている。この汎用性こそが、狭義のプログラミングがなくならないと考えるもう一つの理由である。
最後に
未来を予測することは難しい。でも考えることはとても大切だと思う。20年前、まだ10代後半、自分なりに未来の社会を必死に思い描いていた。目の前にある小さなノートパソコンにとてつもない可能性を感じていた。自分にとっては幸いだったのは、考えるきっかけや、考える時間があったということ。そして自分なりに答えが見つけられたこと。必死に考えて、考え抜いて、たどり着いた答えというのはかけがえのないものである。人に何かを言われてもそう簡単に揺らぐことはない。昔から行動指針となっている「自ら学び、考え、答えを見つける」というのは、その成功体験から来ている。それが今の仕事にもつながっている。プログラミング教育も、そういった何かを考えるきっかけになれば、とても意味のあるものになるのではと思う。