プログラミング学習の失敗

Someone let Toby paint on my car!

あけまして、おめでとうございます。

新年早々、ほんの少しネガティブなタイトルにしてみましたが、これは「プログラミング学習のブームは失速する」ということではありません。プログラミング学習では「失敗」を学ぶ必要があるという意味です。

デジタルネイティブ

今の若い人たちは、「デジタルネイティブ」「デジタル世代」なんて呼ばれています。

生まれたときから、ネットが身近にあり、スマホやPC・Webアプリを使いこなしています。

そこに、プログラミング学習のブームがやってきました。プログラミングを身に付けて、新しい仕事にチャレンジしたり、コンピュータについての理解を深めたり、子供たちの将来の可能性を広げたり、場合によっては貧困状態から抜け出すきっかけにしようと、世界中で多くの人たちが取り組んでいます。

では、このデジタルネイティブな人たちが、さらにプログラミングができるようになると、どうなるのでしょうか。スマホやPCやWebアプリをより細かく使いこなす・もっと道具として使いたおすことと、いったい何が違うのでしょうか。

アプリとプログラミングの違い

その違いは、失敗することだと思います。

アプリは、たくさんの機能をどんな組み合わせでも、デバイスが暴走したり、データが破壊されたりしないよう作り込まれています。

たとえば、設定ダイアログを呼び出して、何かひとつの設定を選んだら、それと衝突する設定は自動的に非アクティブになります。なので、衝突するような設定を選ぶことができません。

101

上の図は、WebブラウザFirefoxのオプションダイアログです。ダウンロードのところで「ファイルごとに保存先を指定する」を選ぶと、「次のフォルダに保存する」で保存先のフォルダは指定できなくなります。そのおかげで、自分に関係のない設定項目にユーザーがわずらわされなくなるのです。こういうところを、わざわざプログラマが作りこんでいるわけです。

一方で、プログラミングでは、組み合わせを間違えたら、ゴミのようなデータが出てきたり、デバイスが暴走する、なんていうのはよくある話。

だから、そういう事故が起こらないように、プログラミングでアプリに作りこんでいます。それができると、誰でも安心して使えるようになる。

プログラマーが荒野を突き進み、安全な場所を見つけて、そこに道をつける。途中で、危険な目に合うこともある。そうして、道路や避難所やガイドブックが整理されてから、一般のユーザーがアプリとして使えるようになるのです。

アプリのユーザーは、誰かがアプリを整備してくれないと、行きたいところに行けません。しかし、プログラマーは、失敗にめげなければ、自分の行きたいところに、自分の力が及ぶかぎりたどりつくことができるのです。

だから、プログラマーは失敗することを学ぶ

たくさんの失敗の可能性の中から、価値のある道具・環境を作り出すのがプログラマーの仕事です。それは、ただアプリの操作が得意というのとは異なる、クリエイティブな仕事なのです。そのために、プログラミング学習では、何度も失敗して、情況を整理して、最善の道を見つける方法を学ぶことが不可欠です。

もちろん、そういうクリエイティブさは、プログラマーだけの仕事とは限りません。
アプリを使う人たちにも、クリエイティブさは必要になる場合があります。
たとえば、情況に応じて複数のツールをどう組み合わせるか、試行錯誤することは、プログラミングと同じようにクリエイティブな作業になるでしょう。

また、プログラムを書く方法を身につけたとしても、問題解決力を身につけられるとは限りません。与えられた解答をプログラムとして書き起こすだけなら、けっこう簡単です。一昔前の大型計算機の時代には、プログラムを考える人と、それをコードとして入力する人が分業になっていました。コードを書くときに解決すべき問題もあるけれど、定型のコードで片付くことも少なくありません。

あらゆる仕事にクリエイティブな面はありますが、コンピュータとネットに取り囲まれた世界では、多くの問題がプログラミングで解決できるはずです。

失敗を許容する学習

一方で、最近の学習コンテンツは、あまり失敗しないようにできている感じがしています。多くの人に確実に効率よく教えようとするあまり、失敗する余地や時間が、ほとんどないようになっているのです。

プログラミング学習の場合、もう少し失敗そのものを学ぶ余裕があっても良いんじゃないでしょうか。