AtCoder株式会社・代表取締役社長、高橋直大氏
後藤智氏(以下、後藤):本日は、プログラミング力向上についてのお話をしようと思います。モデレーターを務める後藤と申します。現在キリロムのCTOをしています。よろしくお願いします。
では、高橋さんからそれぞれ自己紹介をよろしくお願いします。
高橋直大氏(以下、高橋):AtCoder株式会社で代表取締役社長をしています、高橋直大と申します。ネット上だと「chokudai」という名前で通っているので、「chokudai」と呼んでもらったほうが、たぶん通じもいいですし、そんな感じでお願いします。
AtCoderは、今世界で登録人数が40万人くらいいます。そのうち7割くらいが学生で半分くらいが日本人で、けっこうな日本人学生が取り組んでいるプログラミングコンテストなので、学生視点の話がけっこうできます。
あと、学生と会った時にどういう感じで勉強しているのかを話したりしているので、そういう感じの話ができるんじゃないかなと思っています。本日はよろしくお願いいたします。
後藤:よろしくお願いします。
Rubyの父、まつもとゆきひろ氏
後藤:では、まつもとさん、よろしくお願いします。
まつもとゆきひろ氏(以下、まつもと):まつもとゆきひろと申します。この業界で、ひらがなで「まつもとゆきひろ」と言えば私だと思っていますけれども。
Rubyというプログラミング言語が世にあるので、それを作った人になりますね。Rubyで作っている人じゃなくて、Rubyを作った人です。
ここの中でもだいぶお年寄りのほうなので、経験が長いですし、プログラミングを通じてなにかを達成したという意味では、みなさんの先輩なので、こんな道もあるよねという話ができるといいなと思っています。よろしくお願いします。
後藤:よろしくお願いします。
デジタル庁統括官・デジタル社会共通機能グループ長、楠正憲氏
後藤:では、楠さん、よろしくお願いします。
楠正憲氏(以下、楠):デジタル庁統括官、デジタル社会共通機能グループ長の楠と申します。2021年の9月からデジタル庁の立ち上げに携わり、このグループでは、ガバメントクラウド、ネットワークの統合、自治体システムの標準化、マイナンバー、データ戦略など、いろいろなものを見ています。
デジ庁は今、だいたい730人ぐらいいて、うち200人ちょっとがうちのグループにいるんですが、半分ぐらいが民間から来られている方です。
私自身は、デジ庁の立ち上げに入る前は、4年ぐらいMUFG(三菱UFJフィナンシャル・グループ)のフィンテックの会社のCTOとしてエンジニア部隊の立ち上げをやって、その前はヤフーに5年近くいて、IDやセキュリティを見ていて、その前は日本マイクロソフトに10年ぐらいいて、いろいろなことをやっていました。
日本マイクロソフトの終わりぐらいから、9年9ヶ月ぐらいマイナンバーの立ち上げを内閣官房でずっとパートタイムでやっていて、マイナンバーの後ろ側の仕組みを作っていました。コロナ禍で「特別定額給付金をみんなに配ろう」という時に、電子申請がなかなか簡単にできなかったり、それはちょっといまいちでしたが、その後、「ワクチン接種を加速しよう」と、システムを2ヶ月半ぐらいで作りました。これが1日最大160万回を超える接種を支える仕組みになったり、あるいはワクチン接種証明書のアプリも、今600万ダウンロードぐらいされているらしいですが、そういったものも立ち上げています。
国はあまり、アプリやサービスを作るのが得意じゃないんですが、これをなんとかデジ庁で変えていければなと思っています。よろしくお願いします。
後藤:よろしくお願いします。
プログラミングは楽しんでやるのが一番大事
後藤:まず最初のテーマは、今回の題目になっている「プログラミング力の向上」についてお話をうかがえればなと思います。
最初に高橋さんにおうかがいします。特にAtCoderは、まさにコード力を向上させるためのサービスで、人を採用する時の基準としてAtCoderを採用している企業も多くあると思います。
高橋さん自身も、多くのコンペティションに参加されて非常に優秀な成績を収められていますが、このレベルに達する人というのは限られてくると思うんですよね。
プログラマー、エンジニアは非常にたくさんいて、どんなにがんばってもこのレベルに達するのは、本当に一握りの人しかいないと思います。
その中でも高橋さんが好成績を収められたのは、なぜか? なにかコツがあるのか、どうやってソリューション能力を上げてきたのかは、たぶんみなさんがすごく興味があるところだと思うのですが、そのあたりはいかがでしょうか?
高橋:すみません。自己紹介の時に、「僕はプログラミングコンテストが強いよ」と言い忘れていたなと今気づきました、ありがとうございます(笑)。
そうですね。僕はプログラミングコンテストをずーっとやっていて、もう16年目くらいになります。当然才能も要りますが、楽しんでやるのが一番大事だと僕は思っています。
結局、時間×効率でどれだけ技術が身に付くかというのが決まるわけで、時間がどれだけ増やせるかと、効率をどれだけよくできるかの2軸で考えられると思います。効率は、3倍や5倍にはそうそうならないので、やはり時間が一番大切で、効率はゼロにならなきゃいいくらいで僕は考えているんですね。
そうなった時に、時間を増やすにはどうしたらいいか。大変なことを自分の中でやろうとしても、大変なものは体力や精神力が削られちゃうので続かないんですよね。
僕は、プログラミングコンテストやアルゴリズムを考えるのはゲームだと思っているので、どちらかというと遊び時間の中で取り組んでいる感じです。そうなるともう、『ドラクエ』を買ったら一生終わらないのと同じで、一生プログラミングコンテストをやっているので、学習時間がすごいことになると思います。自分の好きなものはよく覚えるので、効率も実はちょっと上がっている。
そんな感じで、正直僕は効率を突き詰めるタイプではないと思っているんですが、とにかく楽しいことを技術の中で見つけてやり続けたことによってここまで来た部分があるんじゃないかなと思っています。
後藤:ありがとうございます。
プログラミング力の向上にはモチベーションと場数が必要
後藤:まつもとさん、これについてはどのようにお考えですか?
まつもと:そうですね。私はプログラミングコンテストはぜんぜんダメなので(笑)、得意が違うということだと思うんですが、ベースとしておっしゃっていることは、ほぼ同じだと思っています。
プログラミング力が向上する人の共通点の1つは、今おっしゃったモチベーション、好きかどうかもありますが、やる気があるかどうかもあります。やはりモチベーションがない時には伸びないんですよね。「好きこそ物の上手なれ」という言葉もありますが、やる気がないとやはり続かないし、やる気もないし。そういうのはモチベーションが必要なんじゃないかなと思うんですね。
よく見ていると、プログラミングをやらなきゃいけない人の中で、「好きだ」とか「おもしろいからやっている」とか思う人はやはり全員ではありません。
もしプログラミングに才能が必要だと言うのなら、最初に必要なのは、「プログラミングがおもしろい」「もっとやりたい」「楽しい」と思うことができるかどうか。そこが実は一番入口の才能なんじゃないかなと思います。
その後の、例えば数学とかはジャンルによって必要だったり、要らなかったりするので。プログラミング全般の話をするならば、やはりプログラミングが好きか、おもしろいかどうかというところにあるんじゃないかなと思います。
2番目は、やはり経験を通じて学ぶので、コードを読む、コードを書くことをどのぐらいするかによって能力が伸びるんじゃないかなという気はしますね。
例えば私がプログラマーとして優秀だと思ってもらえるとするならば、それは、今までプログラムを開発するたびに問題を解決して、一つひとつ積み上げてきたものの経験値があるから、プログラマーとしての力があるとみなされているわけです。
それは、やはりモチベーションを持って続けてきたので、経験値が積み上がってできたのではないかなと思います。もう1度繰り返すと、モチベーションと、それから場数ですかね。どれだけコードを読んだか、コードを書いたかということになるんじゃないかなという気がします。
後藤:ありがとうございます。
プログラマーを活かす社会をきちんと作らなければならない
後藤:楠さんにおうかがいします。日本としては、たぶん高橋さんのような人材を増やしたいと思っていると思います。例えば高橋さんのような、コードによってソフトウェアで素早く解決できる、もしくはロジカルに物を解くことができる人材を増やしていきたいという立場にいると思うのですが、日本という非常に大きな部分から考えて、デジタル庁は、こういった優れた人材を日本でもっと増やすためにどのように考えているのでしょうか?
楠:困りましたね。模範的な回答ができればいいんだけど、この分野に関していうと、たぶん国で言っていることと持論がだいぶ違うので、どこまで好きにしゃべっていいか悩みます。
chokudaiさんにしても、まつもとゆきひろさんにしても、トップレベルの方じゃないですか。もはやこういう人たちって、育てるというものではなくて育つというか、天からの恵み物のような方々だと考えたほうがよいと思っていて。
日本がほかの国と比べた時に、そういう方が少ないかというと決してそんなことはないと思うんですね。日本は初等教育も大変レベルが高いし、特に中等教育までの数学は、けっこう全体としても良いレベルで、しかもテクノロジーにアクセスする環境もあるから、自分の才能に気がつくチャンスも十分にあると思っています。
一方で、足りない、足りないという話が出てくるのは、これはけっこう社会の構造的な問題があるような気がしています。コードを書きたい人たちが、好きなコードを書ける環境に身を置いてもらえているかという問題であったり。
chokudaiさんもまつもとさんも1日は24時間なんですよね。それを10時間ではなく15時間働いてもらうのは、僕は違うと思うんです。むしろ、ほんの閃きの1時間で書いたプログラムであっても、それが何億回、何百億回と実行されることによってプログラムというのは価値が生まれてくるわけです。日本からGAFAが生まれてこないのは、アメリカと比べて天才プログラマーが少ないからだと勘違いしている人がおそらくいると思うんですが。
そうではなくて、そうやって天からの恵みのようにすごい能力を持った人たちは日本にも、中国やインドやアメリカにもいます。人数だけで見れば、分母の多いインドがひょっとしたら多いのかもしれませんが、アメリカがすごいのは、世界中のそういう人たちを集めて、彼らに対してすごくいい給料を払うところです。
プログラマーは、プログラムを書く時間によって価値が生まれるのではなくて、そのプログラムが実行されることによって価値が生まれる。たくさん実行されるプログラムを回していく環境があって、その富を分配して世界中から優秀な人を集めているのが今のアメリカ企業です。日本は残念ながらそうではなくて、1ヶ月働いたからあなたはいくらというプログラマーへのお金の払い方が今でも多い。
そうすると、たくさん人がいればたくさん売上が上がるという考え方になります。そりゃ、育てて増える部分、機会が増えれば増える部分はまったくないわけじゃないけれども。どうしても向き不向きで人がすごく限られてしまう中で、その人たちをこき使うのではなくて、その人たちが生んだプログラムを使い倒していって、富を生む。それをちゃんと分配して次の世代を育てていくという産業構造を上手に作れなかったことが、今日の日本のデジタル敗戦に結びついているような気がします。
そういう意味で、プログラマーを増やす前に、プログラマーを活かす社会をきちんと作っていかないと負け続けちゃうし、どんなに日本で優秀なプログラマーが増えたとしても、みんな西海岸に渡って行っちゃうんじゃないかという心配をしています。
後藤:ありがとうございます。
(次回へつづく)