初心者にプログラミングを教えるにはどうしたらよいのか

広告

いきなりC言語をやらせる人は古い人だと思う。そういう人は自分がプログラミングをやろうと思ったときに選択肢が乏しかった時代に始めたのである。今ならPythonかRubyあたりが簡便かつ強力でよいだろう。

自然言語にネイティブスピーカーがいるように、プログラミング言語でも幼い頃からやっているとあまり理屈を考えることなく使えるようになるのかも知れない。自分はたとえば、x = x + 1という表記には疑問を持つこともなかった(イコールが代入であることに疑問を持つのは健全な批判精神だと思う。例えばPascalの代入は:=であるし、プログラミング言語でも代入がイコールでないものもある)し、ポインタなんかもすんなり理解することができた。しかし、大学をもうすぐ卒業するくらいの人に教えるというのは小学生に教えるのとは勝手が違うかも知れない。

自分の場合は初歩のプログラミングは写経だと思っていた。とりあえず手を動かすことが大事である。本に書いてあるコードを眺めて終わりにするのではなく、あるいは付属のCDやダウンロードサイトからコードを持ってきてコピーするのではなく自分の手で打つことが大事だった。そうするうちに最初は見ながら写していたのが見なくても書けるようになる。オブジェクト指向もそうで、人の真似をして書いているとこういうときはこうするという流儀を自然と覚える。

余談だが、むかし買った本を当時はダメな本を買ってしまったと思ったこともあった。あとでその本を処分するときに懐かしいからぱらぱらめくってみたら、意外とまともなことが書いてあったことに気づいた。つまりその本がダメなのではなく、当時の自分の理解ではその本の価値がわからなかっただけということもある。

話を戻して、これから会社に入るくらいの人でプログラミングをまったくやったことのない人にどう教えていいかを思案している。変数とかそういったことももしかするとその人にとっては未知のことかも知れない。そもそもプログラミングとは何であるかもよくわからないかも知れない。

参考に

あたりの目次を見てみる。Amazonの「なか見」である程度は読むことができる。

『初めてのプログラミング』の第1章は環境についてなので飛ばす。おっと前書きは意外といいことが書いてあるかも知れない。この本はRubyを選んだようだ。なぜ選んだかについてあれこれ書いてある。Javaだと何もしないプログラムを書くだけでもクラスを作りstaticなmain()が必要だがRubyは簡単だとかそんなことが書いてある。

あとの内容は目次から想像するしかない。第2章の冒頭には「puts入門」がある。なるほど、まずputsから始めるのか。そしてintegerとfloatの話が続き計算を行う。第3章からは文字列の話。12と”12″が違うということらしい。続いて代入、数と文字列の変換、メソッド。流れ制御は第7章でやっと登場。第8章が配列。この辺くらいでいいかな。第10章の再帰も大事なことだけど、ちょっと重いかも知れない。再帰を使うってことは、深さ優先探索などの探索アルゴリズムの話になってくるから。クラスについてはもっと早く取り上げていいと思う。自分でクラスを設計するのではなく、あるものを使うことから。

『情報科学入門―Rubyを使って学ぶ』はirbを使って計算することから始まるようだ。いきなり第2章で「配列による画像の表示」というのはぶっ飛んでいるような気もする。それから条件分岐などの制御構造に戻る。そしてすぐにアルゴリズムの話に入っていく。この本はプログラミングの入門書ではなく、プログラミングを使って情報科学を学ぶ本らしいので今回の用途には適さないような気がしてきた。

結局、プログラミングを教えるにはどうしたらよいのか。今のところの自分の意見は、役に立つプログラミングから入るのがよいと思う。ゲームとかネットワークをまずやる。Rubyを選ぶのならネットワークだろうか。mechanizeというライブラリを使ってどこかのサイトにアクセスし”.jpg”画像だけダウンロードするとかそういうやつ。putsはその過程で、例えば取得したURLの一覧を確認するときに使えるね、という形で導入する。これだけで結構役に立つプログラムは書けるのではないかな。

続いて重要なのが独学の方法だろう。制御構造とか基本的なことがわかったら逆引きRubyを読みながら自分のやりたいことを調べる習慣を付ければちょっとしたツールくらいは作れるようになって日常的なPCの利用でも利便性を感じられるはず。その際にはここに書いてある用語の「制御構造」「正規表現」「変数とスコープ」「ハッシュ」「数値」「文字列」などの意味がわからなければ調べる事も困難なのでこのあたりが基礎事項になりそう。

人に何かを教えるというのは難しい。