「Please Don't Learn to Code(コーディングは学ぶべきではない)」という記事を読んだ生徒から、今朝たくさんのメールが送られてきて、私は目を覚ましました。
最初は、2012年にRedditで書かれたJeff Atwood氏の記事が再浮上したのかと考えました。しかしそうではなく、同タイトルのTechCrunchの新しい記事で、万人にプログラミングの学習を勧めることは、万人に配管工事の学習を勧めるようなものだとする、Atwood氏の主張を繰り返すものでした。
この際ですから、プログラミングは配管工事とは違って、皆が学ぶべきもので重要な技能である理由を示したいと思います。
プログラミングは、人間が機械と会話する手段なのです。
プログラミングは誰もが必要なものです。我々が「召使い」と会話する手段なのです。―John McCarthy氏
数千年にわたり、人の管理は人の手で行われてきた
古代ローマ人は奴隷を使って、帝国を築き上げました。イギリスは、己の願望を数多の植民地住民に強いることで帝国を築きました。そして、アメリカは近代の安価な移民労働力によって、一大経済勢力となりました。
しかし、21世紀の現在、穀物畑の耕作やアジア植民地からの香辛料輸入、ロッキー山脈を貫く道路の敷設といった仕事に携わる人を管理するだけでは仕事は収まりません。
現在では、機械を管理することで仕事を行うのです。
仕事の環境は根本的に変化した
現在、作業のほとんどは人の手ではなく、機械の手で行われます。
考えてみてください。Google検索は毎日35億件行われています。この検索作業を行うのは人ではなく、機械です。
1件の検索を人が手作業で解決するのに、いったいどれほどの工数がかかるでしょうか。大勢の博士号所持者が集い、四六時中電話をかけ続け、どの文書を誰に示すのか審議している場面を、あなたは想像できますか? この作業は、機械が遠隔で行ってこそ有効なのです。
Trip Advisorは、休暇で訪れる場所を決めるのに役立ちます。Expediaはそこまでの飛行機の予約に有用です。Google Mapは飛行場までの道案内として使えるでしょう。これらが一般の利用者の手が届くサービスであるのは、機械が激務をこなすおかげです。
しかし、機械がこれらの作業を行えるのは、何をするべきか、人間が正確に指令を送っているからです。そして、人間にとってその唯一の方法こそ、ソフトウェアを書くことなのです。
そうです。コンピュータは人間に迫るほどに賢くはないのです。コンピュータが人間に与えられた仕事を完遂するには、我々人間がこの上なくはっきり手順を示すことが必要なのです。
これはつまり、プログラミングです。
プログラミングは専門技能ではなく「新たな教養」
プログラミングは、成功を望む人が学ぶべき21世紀の必須技能です。
信じられないかもしれませんが、法律の専門家界隈でも異変が起こっています。ソフトウェアが業界をひっくり返していて、コードを書けない弁護士の大量解雇を引き起こしています。
管理職、マーケティング担当者、経理担当者、医者、そしてほとんどのサラリーマン職の間でも、同じ気運が高まっています。
そして、車の運転を主とする仕事に就くアメリカの300万の人、また遠からず、安価で効率の良い機械が担うであろう、繰り返しの単純作業に就いている世界の数十億の人については、言うまでもないでしょう。
これらの仕事を機械に置き換えられた人々が、安価な再教育を通じて、新しい職能の獲得ができることに期待しています。例えばスターバックスとアリゾナ州立大学の提携がそうで、ここで全ての従業員は無料で大学教育を受けることができます(ソフトウェア開発のような現実味のあるものを選ぶとよいのですが)。他には、政府の設ける類似制度もあります。
少なくとも、EdXなどが主導する数学や計算機科学の無償授業や、Free Code Campを通じた無料のプログラミング教育に触れる機会がなくてはなりません。
プログラムするか、されるか
ソフトウェア開発において、「技術のスチームローラー」と呼ばれる構想があります。
新技術という名のスチームローラーが転がってあなた巻き込むとき、そのローラーの一部に加わらないのであれば、あなたは道路の一部でしかない。―Stewart Brand氏
技術の進歩を止めることはできません。できることは、それに適応することです。
ひとたび魔法のランプから歴史を形作る新技術が現れれば、それを元に戻すことはできません。飛行機、抗生物質、核弾頭がそうでした。マイクロプロセッサ、インターネット、機械学習についても同様です。
これらの波に適応した人は、繁栄を手にしました。これらを一笑に付したり、存在に気付きすらしなかった人は、少しずつ見当違いの方向に向かっていきました。
プログラミングは、新たな教養です。
識字能力が12世紀に、執筆能力が16世紀に、算術能力が18世紀に、車の運転が20世紀にそうであったのと同様です。
そして、文章を書くことを学んだ人すべてが作家に、また算数を学んだ人すべてが数学者の道に進むわけではないように、プログラミングを学んだ人すべてがソフトウェア開発者になるわけではないでしょう。しかし、これらの知識を学んだ人は皆、努力の結果として非常に豊かな暮らしを手に入れることでしょう。
処方箋が必要な薬のラベルを解読する技能や、預金引き出しの際、銀行員に手渡された金額を数え上げる技能があった場合を考えてみてください。コードが書ければ、これらと同様のことが可能です。日常の退屈な作業をなくし、自動化することができるのです。
さらに、こういった基礎的な技能を発展させて、富を築き上げたり、世の中をより良くするのに役立てたりした人もいます。
船の目的は、漕ぎ出すこと
「港の中にとどまっておけば船は安全ですが、船はそんなことをするためのものではありません。船は海に漕ぎ出し、未知なることを成すためにあるのです。」―Grace Hopper氏
コンピュータというものは、数字を解読する機械です。
それに対し人間の脳というものは、学習をする機械です。
人間にはコードを書くことは不可能に思えるかもしれません。人間はコードを書くように作られてはいないように思えるかもしれません。
もしかすると、同じくプログラミングを学ぼうとして挫折し、あなたに対しても同情を向けたくてしょうがない人たちが、列をなして存在するかもしれません。
こういった人は、昨日の14,000人の人がそうしたように、TechCrunchの記事などを読み、Facebookでシェアして、この新しい教養に取り組む数百万の人々のやる気を削ごうとするのでしょう。
しかしプログラミングを中傷する人は、自身にプログラミングを学ぶ能力がないとする点で間違ってはいないでしょうか。教育者や認知科学者の間では、知能に疾患のない人は誰でも、文字の読み書き、算数や車の運転と同様に、プログラミングも習得できるという意見が強くなっています。
重要なのは自分自身を信じることだとする、成長する考え方の持つ価値についてのKhan Academyによる動画
もちろん、失読症を患う人には文字を読むのは大変で、計算力障害を抱える人には算数に困難が伴うので、どちらの人もプログラミングを学ぶのは容易ではないでしょう。しかし、これらの制約も克服が可能であり、プログラマーは日夜制約を乗り越えているのです。
そこで、Grace Hopper氏の助言に耳を傾けましょう。海に漕ぎ出して、新しいことを学ぶのです。あなたの頭にある学習機械を活用しましょう。
プログラミングを学んで機械との対話手段を学び、豊かな暮らしを手に入れましょう。