どんな社会的課題が次の時代に来ても、ロジックを組むという行為は必要

――これまでの競技プログラミングとこの検定とはどのような関係にあるのでしょうか?

 競技プログラミングは、「数学パズル」っぽい問題があるのですが、検定では、より「実務に役立つ」に寄せた問題作りをしています。「実務にアルゴリズムを適用できるか」という視点で問題を作っています。

 これはプログラミングコンテストの話になってしまいますが、プログラミングコンテストって世の中にいろいろあるんですけれど、一般的には、プログラムを作って、それを発表(プレゼン)して、それに対して審査員が審査をする。

 ……でもそれって、アイデアと、見た目と、一応動く程度のプログラミング能力、あとプレゼン能力を競っているんですね。冷静に考えて、それは「プログラミングの能力」を競うコンテストなのでしょうか、と思うんです。

 純粋にプログラミング能力、アルゴリズムを自分でイチから記述する検定は、AtCoder以前には日本にはなかったと思うので。それは価値があるかなと思います(図4)

図4●検定合格者は、結果に応じて5段階で認定される

――エンジニアのプログラミング能力をどのように評価するかについてお聞きします。

 エンジニアの能力を測る方法については、皆さん困っているんです。例えば、就職や転職の際の面接で、そのプログラマーのスキルをどう評価するかを考えると、だいたいは「自己申告」か、「成果物(プログラム)を見せる」の二つになります。

 自己申告では、本当の実力はわからないですよね。もう一方の、成果物を評価するという方法をとった場合はどうなるか。アイデアが良いのでプログラミング能力がなくても成立してしまっている成果物だったら、プログラミング能力を正しく測れないですよね。

 こんなことを言っていますが、私たちのアルゴリズム検定も、プログラミング能力の一部しか測ってはいません。アルゴリズムを記述する(ロジックを正しく構築できるか)は、あくまでもプログラミング能力の一部分に過ぎません。

 例えば、プログラミングで使うフレームワークなど特定のツールの使い方を知っているかどうかは、この検定では測れません。面接している会社でそのツールを使うことが業務の前提となっていても、そのツールを使う能力は測れないのです。

 また、どのプログラミング言語で検定を受けたかも、わかりません。検定では、どの言語でもいいのでロジックを構築できるか、を問うているのです。なので、専門分野になればなるほど、この検定が測れる能力からは離れていってしまいます。

――個別の会社の事情はわからないですよね。

 アルゴリズム検定では、ロジックを組めるか(コードを自分で書けるか)ということを測るのみです。しかし、日本にこうした検定ができたことで、ロジックの大きな部分を押さえられるようになったのは大きいと思います。

――初等教育でのプログラミング必修化が今年から始まりますが、思うところはありますか?

 小学校でプログラミングを学べるというのは、基本的には、いい流れだと思っています。

 やりたいことをプログラムにするというのは、プログラムを書いているうちに、「あれ?こんな場合はどんな風に動かすかは考えてなかったな」とかいったことが出てくる。それがいいんですね。動くモノを作るという行為をしてみて、初めてそこに“抜け”があることに気づく。自分が考えていたことに、まだ足りない部分があるとわかるんです。

 子どものうちは、論理的に考えるのはやっぱり難しいんです。それがプログラムを実際に自分で書いてみて、動いた動いていないと目に見えるようになることには価値があります。

 プログラミングの初等教育においては、僕は、論理を楽しく学べる、という風になるといいかなと思っています。

 プログラミングを記述するっていうのは、国語的、算数的なところがあります。言語でありながら、論理と計算が必要になります。でも、算数で学んでいることと、国語で学んでいることがつながっている子は、案外少ないと思います。これがつながってくると、これまでの既存の教科にもいい影響が出てくるでしょう。なので、将来的にその子がプログラミングをやるような職業に就かないのだとしても、プログラミングは小さいうちからやるべきと思います。

 ……ただ、嫌いになる人が増えないようにしてほしいかな、とは思います。「全員に教えなくてはならない」という状況は、それが怖かったりしますね(笑)。

――アルゴリズムは社会人にこそ必要な“教養”になっている気がします。

 このアルゴリズム検定は、仕事にいますぐ役立つわけではないかもしれません。でも、アルゴリズム自体は、ずっと世の中で必要とされてきています。

 どんな社会的課題が次の時代に来たとしても、ロジックを組んで対処するという行為は変わりません。そのロジックを組むことがアルゴリズムそのものなんです。

 アルゴリズムは古典的なものもあり、新しくもなんともない基礎的なものだったりします。しかし、ロジックを構築できることで、どの分野にも活用できるようになる。問題解決ができるようになる。

 そのときのために、知識や知恵の基礎固めをしておくのは大事なことだと思います。