• このエントリーをはてなブックマークに追加

今なら、継続入会で月額会員費が1ヶ月分無料!

記事 1件
  • 【shi3zの華麗とはいえない日常】 プログラミング教育あれこれ

    2016-05-06 09:00  
    1pt
    実践としてのプログラミング講座 (中公新書ラクレ)が発売された。前作の続編的な位置づけではあるものの、内容はガチのプログラミング入門(なにしろ横書きになってる)なのでそのギャップに我ながら驚くが、MOONBlockで実用的なプログラムを書いてみようというチャレンジは自分にとっても冒険だった。この本を書くプロセスでMOONBlockの内容を見なおしたりできたので、まあ良しとしよう。POPを書いたのだが、字が汚すぎて使われていないのか、僕の手書きPOPを見た人はご一報いただきたい。まあでも前作ほどではないにせよそれなりに売れてる・・・のかなあ?よくわからない。今回は初版がめちゃくちゃ多いので、前と違ってバンバン増刷がかかる感じでもないしね。土屋さんと一緒に4月から始めたプログラミング教室。けっこう盛況で、まだ赤字ではあるけれども、生徒さんたちも順調に増えてきた。嬉しい限り。中には遠い所をわざわざやってきたりする人もいるくらい。この、秋葉原プログラミング教室、最大の特徴はカリキュラムにある。 ちまたの、あまたある、プログラミング教室は、ScratchやGameSalad、たまにSwiftやObjective-Cなんかを教えて、はい、それでおしまい、で終わることが多い。というのも、これは僕の想像だけど、彼らの教材づくりが間に合ってないんじゃないか。  けれどもそれでは、肝心のプログラミングスキルは何一つ身につかない。 たとえば大学の授業でC言語を教える時、今週は変数、来週は配列、といった感じに教えるんだけど、僕は前々からこれが疑問だった。 というのも、変数「だけ」を習っても、何一つできるようにならないからだ。 実際、大学の授業だけでプログラミングができるようになる人はいない。 実際には自宅で教科書を読みながら独学で写経しながら勉強するほうがよほど身につく。 だというのに、ちまたにあまたあるプログラミング教室では、大学の授業と同じように、プログラミング言語を要素に分解してバラバラに教える。これでは子供の教育に良くない。 プログラミングといえど言語なわけで、「今週は名詞を覚えたから名詞だけで文章を作ってみましょう」なんて無茶な教え方をする国語の授業があるわけない。 文法と、それを使ってみるということはセットでなければ意味が無いし、もっと重要なのは、自分が表現したいことがなにかわからない人にとって、言語の要素だけをバラバラに教わっても、全く役にたたないのだ。 たとえば僕はごく簡単な中国語が喋れる。まあこのレベルを「喋れる」といっていいのかわからんけど、例えばなにが喋れるかというと 「是(シェー)」/YES 「不是(ブーシェー)」/NO 「無用(メーヨー)」/いらない 「这个(ジェガ)」/これ 「您好(ニイハオ)」/こんにちは 「服務員(フーイェン)」/店員さん! 「买单(マイダン)」/お会計 「発票(ファーピャオ)」/領収証 「很好吃(ヘンハオチー)」/美味しいです(固形物) 「很好喝(ヘンハオフー)」/美味しいです(液体物) もうこれだけでとりあえずなんとかなるわけです。 どんな感じかというと、まあこれだけしか使えずに中国行きますよね。 電気屋に行って、「お、これなんだろう?」って思ったら、ガラスケースの中の端末を指して「ジェガジェガ」と言うわけです。 すると、お姉さんがガラスケースから端末を取り出します。 電卓を指差すと、値段を教えてくれます。 そしたらその値段を3で割って示します。 すると、お姉さんは首をふって、最初の金額より10人民元ほど安い値段を示してきます。 そしたら、僕も3で割った数に5だけ足して示します。 このやりとりを数回繰り返すと、結局、最初の金額の半額〜2/3程度でその端末を買えます。 買ってもいいなと思ったら 「マイダン」 と言えば商談成立。 さらに領収証が欲しいので「ファーピャオ」と言えば領収証がもらえる。 もうこれだけで中国で買い物できます。 中国は多民族国家なので、北京を中心とした普通活(プートンファ)を発する時に訛りがあるのが一般的です。 最低限、これだけは知っていれば会話ができる、ということさえ知っておけば、他の言葉は必要に応じて覚えていけばいいのです。 言語なんてそんなものです。 本来、プログラミング言語も全く同じで、自分が表現したいことに対して必要十分な言葉から学ぶのが一番身につきます。 ところが、なぜかプログラミング教室になると、言葉の構造だとかそういう、理屈から入ってパズルを解くかのように難解なサンプルコードを理解しないとできなくなってしまいがちです。それでは、子供はもちろん、大人だってプログラミングを理解することを諦めてしまいます。 僕たちの教室は、言葉を学ぶのと同じように、プログラミング言語を学ぶことを第一にしている。 そして何度でも自習したり復習したりできるように、紙のプリントの教材を必ず使うことにしている。 そうすると、子供がどこで躓いたのか、一人ひとり採点しながら、理解度を確認しながら、個別に丁寧に教えることができるからだ。 そして、表現のための道具として、数学や国語、英語の概念を学ぶことで、子どもたちは無理なく高度な表現を行うことができる。 単にプログラミングだけを教えても意味が無い。それに付随する種々の数学的概念とセットで教えてこそ、子どもたちは数学とプログラミングを好きになるはずだ。 だから最初の一年で、三角関数と複素数、力学、4✕4行列、テンソルといった概念を学ぶ。 大人でも尻込みするようなことを、子供だからこそむしろ効率的に学ぶことができる。なぜならそれは学校のテストの成績をとるための空虚な「お勉強」ではなく、自分たちがシューティングゲームや3Dコンピュータグラフィックスや人工知能、ニューラルネットワークといった、楽しいプログラミングを構築するために必須の道具で、目的が定まっていれば道具として高度な数学的概念を使うのは極めて簡単だからだ。 「現在位置が知りたい」という目的が定まっていれば、相対性理論を応用したGPSを搭載したスマートフォンのアプリを使うのは誰にとっても簡単だろう。 それと全く同じように、道具として数学や物理を使おうとすれば、難しいことはすっ飛ばして理解することができる。そして応用を理解しておけば、彼らが将来、高校や大学で本物の数学や物理に出会った時にも役立つはずだ。そのときそれは、無意味な数式の羅列ではなく、意味を持ったものに見えるはずだからである。先日、東京大学新聞のインタビューに答えた。もともと僕が「教養としてのプログラミング講座」を上梓したそもそものきっかけは、近所の東大生を集めてプログラミングを教える教室を提供していたからだ。意外だったのは、文系の参加者が思いのほか多いことだった。そして東大生にこそ、プログラミングを習得することは必須技能であるのではないかとインタビューには答えた。なぜならプログラミングとは、自分以外の知的存在を自分の思い通りに動かす手法、そのものだからだ。