読者です 読者をやめる 読者になる 読者になる

タオルケット体操

サツバツいんたーねっと

学校教育とプログラミングは相性が悪い そして適性とかの話

f:id:hachibeechan:20140913235722j:plain

最近はあまり話題にのぼらない気もしていますが、何かと動きの遅い我が国でもプログラミング必修化の流れはちゃくちゃくと進んでいるような感じを感じます。

プログラミングの義務化についての問題点は、カリキュラムや、適切なスキルをもった教師の明らかな不足など色々と挙げられていますが、今回はそれとは別な、そもそも的な論を展開したいなぁとかそういう感じです。ちょっと長いです。

決して、僕が学校が嫌いだったからとりあえず批判しておきたいとかそういうことではないです。

減点方式

学校教育が減点方式であること自体の是非はここでは述べない。
とりあえず、採点をしやすくするという目的を達成するためには悪くない方式だとは思っていますよ。何のための採点か、という理想が欠けているのが問題になっているのだとは思うけども。

エジソンの
「失敗なんかしていない。うまくいかない方法を一万通り発見しただけだ」
なんていう結構有名な発言があるわけで。
この考え方は、何も新規性のある発明に限らず、既知の分野の学習、例えばプログラミングの上達にも大きくかかわるものなんだと思うんですよ。

  

例を出そう。今まで見てきた、プログラミングの上達が遅い人に共通する特徴に、「失敗を過度に恐れる」というものがある。
これはどういうことかというと、恐らく適性があればあるほどその心理は理解出来ないと思うが、彼らはコンパイルエラーや例外の発生を非常に恐れる。

なんらかのお手本を見ながらコードを書く、自分の書いたコードを読み直す、不備があれば書き直す、そこでようやくビルド(LL言語ならそのまま実行するわけだが)を行う。 そこでエラーが出た場合、まずは手を止めて画面をしばらく眺めた後、おもむろに教科書を取り出して眺めはじめ、その後人によっては先輩に教えを請い、コードの修正を行う。 そしてその後、再度コンパイルを……しない。本当に間違いがないかどうか、モニターを無為に眺め続けるのである。
コーディングの作業と、書いた部分のミスが赤ペンされて返ってくるといった過程が、テストと採点に似ているためにそうなるのだろう。多分。

上達の早い人間や、ある程度慣れてきた人間は間違いを指摘されることにためらいがない(というか間違えがどうだとかそもそも考えたことないけど)。
がんがんコードを書いて、ばんばんビルドして、どんどんエラーを出す。間違えが発覚するのは早い方がいい、エラーは直せば良い、最後に正しく通れば良い。
技量が未熟である時期は特に、試行回数の数だけプログラマーは成長していく。

シンタックスエラーを例えに出したけども、例えばオブジェクト指向の存在を知った時に、その場でそれを試してみる。失敗する(最初はクラス、メソッドなどといった構文自体が理解出来ないもんね)。
より効率的なアルゴリズムを試す、新しいフレームワーク、VCS、etcetc......

減点主義に染まってエラーを怖がる人間と、そうでない人間は試行錯誤の回数に圧倒的な違いが出る。
同じ失敗を何十回でも繰り返すアホでもない限り、人間は試行錯誤の回数だけ技術の精度が上がっていく。この差はまさに圧倒的で、学校の授業でのみ何年か惰性でやってました程度の人間だと、失敗を恐れない初心者に1、2ヶ月と待たずに抜かれることになる。

無論学びはじめにとどまらず、いつまでもそれなり以下に甘んじる技術者と常に進歩する技術者では、才能以上に試行錯誤の回数が違う。

某大手SIでは、コンパイラのない環境でコードを書かせて、提出されたそれがビルドエラーを起こすと始末書を書かされた。などということが大昔にあったりなかったりしたらしい。
恐らくほとんどの人が同意してくれると思うが、そんな環境でまともなプログラミングは出来るわけがないし、まともなプログラマーが育つことはないだろう。

でも上の話、どこかの義務教育のやり方とそっくりだよね?

失敗は成功の母?

失敗はただの結果なので、それ自体に特別な意味を見出す必要はないとおもうね。
下手に恐れるのは当然良くないけど、別にわざわざ持ち上げる必要もないと思う。

っていうか失敗は成功の母って言葉は、なんか結局成功しかみてないじゃんというか、無論うまく運用してる人もいるんだろうけども、躁的なポジティブシンキングが見え透くようであんまり好きじゃないんよね。

本当に大事なのは挑戦なんだと思う。
挑戦というものは、当然のようにほとんどの確率で失敗する。運、経験、能力、その他もろもろがうまく運べば成功する。失敗も、成功も、どちらも挑戦の子供なのである。
そんでもって、失敗が嬉しいマゾヒストでもない限り、人が挑戦するモチベーションは成功にあるだろう(知的好奇心もからめたいがややこしくなるので省略)。だから子供は褒めて伸ばせなどと言われるわけだ。

ちなみに、僕がことさらに失敗(挑戦)することの重要性をことさらに強調する理由の一つは、ソフトウェアという分野については得られる知見に対して失敗のコストが圧倒的に安いことが多いから。
これが例えば化学の実験だったりすると、個人では買うのが難しい何万円もする試薬を、何千万円の機械で扱って、結果が出るのが一週間後なんてのはザラなわけで。勿論プログラミングだって、銀行のシステムをブッ飛ばせば何億円レベルで損害が出ますけど、そういう重箱の隅をつつくような話は先生嫌いです。

急に壮大な感じになってしまったが、話をいい感じに矮小化したい。
(大多数の)SIerに在籍するプログラマーの圧倒的多数(全員とは言ってない)がまともな技術を持ち合わせていないのは、減点方式の失敗が許されない制度(そのくせ納品物は失敗作そのものなのが殆どだというのはIT業界七不思議の一つに数えられている)と、挑戦とその成果に対する評価制度が欠如しているからだ、というのが一般論だろう。

義務教育において、100点満点は与えられるうちでは最高の報酬の一つだ。
ただし100点満点が意味するのは成功ではなくて、あくまで失敗がないということだ。
僕の記憶にある限り、学校教育では成功を讃えるような制度は存在しない(少なくとも印象にはない)。熱心な教師が、個人的な裁量でそれを行っているようなケースは散見するが。

あるいは運動会などのイベントはそれに近かったのかもしれないが、今は成功も失敗も圧縮するという最低最悪の方向に進歩している。尤も、失敗を容認しない制度化での運動会は、運動が苦手な人間にとって最悪のクソであろうことは想像に難くないわけだが。

プログラミング技術の成長には挑戦が不可欠だとするならば、挑戦が産む必然である失敗を叱責して、挑戦を産む原料となる成功を取り上げない学校教育を指して「相性が悪い」とするのもやむなしだよね。

失敗すら楽しむ

ただの教育disに終始すると大変に印象が悪いことになるので、じゃあどういうものが向いてるんだとか教育がどういう方向に向かえば問題は解消するんだとかそういうアレについて書いて終わりにしたい。

皆さんは「クラッシュ・バンディクー」というLisp(強調)で書かれたゲームをご存知だろうか。

'子供がゲームにハマるのは10分に一回は手を替え品を替え褒めてくれるからだ'なんていう論がありましたね。これがゲームの本質だなどと言ってしまうのはあまりに薄っぺらすぎですけども、一つの側面としてはその通りなわけです。

ここでクラッシュ・バンディクーに話を戻しますけども、クラッシュ・バンディクーのすごいところは失敗すらもエンターテイメント化してしまったことだと僕は勝手に思ってるわけなんですね。
中身を知らない人に説明すると、いわゆるアクションゲームなんですが、ステージにあるトラップや敵の攻撃に対してクラッシュ・バンディクーが色々とコミカルな死に方をするんです。

爆弾で吹っ飛んでパンツだけになったりとか、電撃でビリビリしてパンツだけになったりとか、穴に落ちたらパンツだけ飛んできたりとか、そういう感じです。
失敗に対するストレスを和らげるどころか、むしろ新しい攻撃パターンの敵が出てくるとわざとぶつかって死んでみたりするようになる。失敗を楽しんでいるうちに、プレイしてる人も段々と上達してきて成功を享受出来るようになる。

失敗を褒めていたらゲームとして成立しなくなるわけなんですけども、失敗すらも楽しいと思わせるような仕組みを作ることで試行回数を上げて成功の手助けをする。こういう仕組みをうまく取り入れられているゲームってなかなか見た事がないと思うんですよ。
やっぱりLispってすごい。

なのでプログラミングの教育に関しても、個人的にあんま好きな言葉じゃないんですけども、ゲーミフィケーションが一つの答えで、それプラス失敗を歓迎されるような仕組みを作るっていうのが一つの解答なんじゃないないかなぁとか。ちょっと月並みすぎですが。

しかしまぁ悲しいことに、「失敗を歓迎」だとか「面白い失敗」だとか、そういったものってとにかくシステム化された評価体制との相性が悪いんですよね。なので実現する日は……きたら楽しそうですけどね。

現状としては、両親がプログラマーとしてやっていけるくらいに勉強して子供に教えるか、 http://codespells.org/https://minecraft.net/ を与えて適当に遊ばせるってのが現実的な選択肢なんじゃないでしょうかね。学校に期待するのはやめましょう。

色々と書きましたけども、現時点でも専門学校や情報系で義務的に勉強してただけのプログラマーが全くお話にならない反面、そもそも好きでその分野の学校にいた人間の技術力はマジでヤバイというか羨ましすぎなので、世の中が良い方向にするんでくれるといいですね?

IT業界の進歩の早さが引き起こすであろう問題については……書かずもがなっぽい

最後にスティーブンスティール氏からのお言葉です

失敗というのは……いいかよく聞けッ! 真の失敗とはッ!
開拓の心を忘れ! 困難に挑戦する事に、
無縁のところにいる者たちのことをいうのだッ!
このレースに失敗なんか存在しないッ!
存在するのは、冒険者だけだッ!
この「スティール・ボール・ラン」レースは、
世界中の誰もが体験したことのない競技大会となるだろうッ!!

以上。

ピープルウエア 第3版

ピープルウエア 第3版

  • 作者: トム・デマルコ,ティモシー・リスター,松原友夫,山浦恒央
  • 出版社/メーカー: 日経BP社
  • 発売日: 2013/12/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (6件) を見る

How Google Works (ハウ・グーグル・ワークス)  ―私たちの働き方とマネジメント

How Google Works (ハウ・グーグル・ワークス) ―私たちの働き方とマネジメント

  • 作者: エリック・シュミット,ジョナサン・ローゼンバーグ,アラン・イーグル,ラリー・ペイジ,土方奈美
  • 出版社/メーカー: 日本経済新聞出版社
  • 発売日: 2014/10/09
  • メディア: 単行本
  • この商品を含むブログ (15件) を見る