プログラミングを学ぶということは「協力する方法」を学ぶということ

by 清水亮


UEIエデュケーションズ会長の清水亮です。

先週は新潟県長岡市で中学生と高校生を対象としたプログラミング教室を開催してきました。

三日間におよぶハッカソンを中心としたワークショップで、教える側にとっても非常に刺激的でした。

そのとき私が子どもたちと保護者の方々に一番伝えたかったのは、プログラミングを学ぶことの本質的な意味です。

私は人工知能の研究者でもあるので、人工知能が発達することによってなくなる仕事のかなり上位にプログラマーを入れています。

なぜなら、まず自動翻訳が翻訳者の仕事をなくすとして(実際、翻訳だけで食って行けている人はどんどん減っています)、次になくなるであろうものは、プログラマーだろうと思うからです。

プログラマーは、アイデアや思いをコンピュータがわかる言語に翻訳する、一種の翻訳者です。

そもそもプログラマーの負担を減らすためにプログラミング言語が考案されました。コンピュータは、根本的には0と1の2進数しか扱うことが出来ず、人間の直感とは大きく乖離しています。

プログラミング言語を設計したり、それを機械に分かる形に変換(翻訳)したりするプログラム(コンパイラやインタプリタと呼ばれます)は、全て人工知能研究のいち分野と見做されていました。

つまり「アイデアや考えを正確に記述する方法」を考えるのがプログラミング言語の設計であり、「記述されたアイデアや考えをコンピュータにわかる言語に翻訳する」という作業を行うのが、コンパイラやインタプリタの仕事なわけです。その2つは今では単に「言語処理系」と呼ばれています。

今日、プログラミングを教えるときに2進数の話から始める先生はどこにもいません。なぜ2進数だけでコンピュータの機能の全てが実現できるのか、本当に隅々まで理解している人は今や数えるほどしかいないからです。

今のプログラミング言語は、無数の名もなき人々の努力と工夫の積み重ねでできています。

コンピュータの根本であるCPUやメモリ、ハードディスクやSSD、ディスプレイやキーボード、マウス、タッチスクリーンといった部品の細部にまで凝らされた工夫。

そして少しでも簡単に正確かつ緻密に、それでいて大胆かつ複雑で膨大な機能を実現するためにソフトウェア工学という学問が生まれ、我々プロのプログラマーを含む全ての人々がこうしたソフトウェア工学の恩恵を受けています。

たとえば、30年ほど前、私がまだ小学生の頃、大人たちは「プログラマー30歳定年説」というものを本気で信じていました。

曰く、プログラミングは非常に困難かつ複雑であるため、30歳を超えると脳がついていけなくなるという話です。

それを真に受けた大人たちから「プログラマーを職業として目指してはだめだ」と言われて私は育ちました。

しかし実際には私が30歳になる頃には、プログラマーの定年は事実上なくなっていました。たとえば、私がとても懇意にさせていただいているドワンゴCGリサーチの西田友是氏(東京大学名誉教授)は、還暦を超えた今でも、自らプログラミングを行って論文を書いています。

なぜそんなことになったのかというと、30年前、あまりに複雑になりすぎたプログラミングを、いかに簡単に正確にするかということを本気で考えた人たちがいたからです。また、そうした考えを自分だけのものとして独占せず、広く世の中に公開したからです。

30年前、ソフトウェア工学上の発明がいくつも行われました。この頃発明された諸概念、構造化プログラミングやオブジェクト指向、ガベージコレクション、イベントドリブン、デザインパターン、テスト駆動開発、そしてオープンソースやフリー(自由な)ソフトウェアなどのアイデアがなければ、たぶん私達が今のようにスマートフォンを使いこなす日は永遠に来なかったでしょう。

こうしたソフトウェア工学上の発明品というのは、いわば「人々が知恵をあわせる方法」の発明といっても過言ではありません。

オープンソースソフトウェアやフリー(自由な)ソフトウェアは、アイデアを独占せず共有財産とすることでより早く人類の持つ叡智を共有することを可能にしました。こうした概念がなければ、iPhoneは生まれていなかったでしょうし、WWWもなかったでしょう。

オブジェクト指向や構造化プログラミングは、誰かの考えたアイデアを自分のものとして瞬時に使いこなすための強力な方法です。これらの発明によってプログラマーの負担は大幅に減り、専門知識なしでも複雑な概念を扱えるようになりました。

今日、プログラマーたちは離散コサイン変換やハフマン符号化の知識がなくても、簡単にJPEGやPNGといった画像ファイルを扱うことが出来ます。一昔前は、それを扱うためには何ヶ月も勉強をしなければなりませんでした。

たとえ職業としてのプログラマーがなくなっていったとしても、より創造的な仕事をみんなができるようになると私は考えています。プログラマーの最終段階をアーキテクト(棟梁)と言います。たとえばビル・ゲイツはMicrosoftのCEOを退いたあともしばらくチーフ・アーキテクトを名乗っていました。アーキテクトはアイデアを翻訳するのではなく、翻訳するもとになるアイデアそのものを考えるのが仕事です。この仕事は永遠になくならないでしょう。

これまではアーキテクトになれるのはごくわずかなスーパープログラマーだけでした。普通の職業プログラマーは日々の仕事をこなすのに精一杯で、ごく少数の、それこそ15万人の組織のトップに立つような人間だけがアーキテクトという仕事をこなすことができました。

しかし、人工知能が発展していくことで、誰もがプログラマーではなくアーキテクトになれる時代がやってくるでしょう。

そして逆説的には、アーキテクトになるためにはプログラミングのスキルを持っていなければなりません。なぜならプログラミングは「アイデアを正しく正確に記述する方法」であり、「見知らぬ人の知恵を借りる方法」でもあるからです。

プログラミングを学ぶ意味について説明してみました。

長岡での好評を受けて、東京でも長岡と同じようにハッカソン形式の講義を試してみたくなりました。

年内に企画したいと考えています。


▪️筆者プロフィール:清水亮
株式会社UEIエデュケーションズ会長。ギリア株式会社代表取締役社長。2004年度の独立行政法人情報処理推進機構により天才プログラマー/スーパークリエイターとして認定を受け、自らもコーディングし日々深層学習を研究している。深層学習GUI環境CSLAIERを開発し、近年は深層学習を中心とした分野を重点的に研究し、AIの社会実装などにとりくむ。著書に「はじめての深層学習プログラミング」「よくわかる人工知能」など。
ギリア株式会社 https://ghelia.com
秋葉原プログラミング教室 https://www.akiba-programming-school.comニコニコニコ生放送:公式チャンネル「電脳空間カウボーイズZZ」http://ch.nicovideo.jp/akiba-cyberspacecowboys
毎火曜〜金曜 12:00〜(ランチのお供に放送中)


この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

6
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。