日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年3月10日火曜日

プログラミング教育の難しさ。 (3月12日改訂)

プログラミングの入門書は、ありきたりの手順で説明したものがほとんどのように感じる。
大体、変数の説明から入り、構文、フロー制御などをならい、それをどう使うか例にならいつつ応用を身につけていく。

この手順では、学習の間に出てくるいろいろな疑問が解消されることはなく進行していく。
まったくの初心者はどんどん出てくる見慣れない新しい知識に、ついていくだけで精一杯。
基礎編は短く、応用に入っていく速度は速い。うかうかしているとすぐに「プログラムを作ってみよう!」とか「応用編」のページになってしまう。

だが、「プログラムを作る」段階では、アルゴリズムを考えていく段階にはいっているのだが、アルゴリズムの組み立てに集中したり、そのおもしろさに気づくことができないことが多い。
それは、そこまでに説明された基礎知識をしっかりと身につけず曖昧なままだからだ。
構文の間違いや、コマンドの使い方を調べ直すのに、時間をとられる。
「プログラムは難しい」「こんなに短い基礎さえ自分には難しく感じる」「自分には向かないからプロに任せておこう」と思い始め、その本は途中からよまれることなく、積まれていく。

そういった教え方をする本に限って、
「プログラムは、自分で試行錯誤してたくさん作ること」
「先輩達の書いたプログラムをじっくりみて勉強する。」
「それが上達の早道」
と書いてある。

一理あるし、それしか方法がないので読む側も「エラーに挫けず、難しくてもなんども基礎に戻りつつ繰り返し練習しよう!」と思い頑張るわけだが、初心者にはその気力さえ続かないことがある。


基礎の説明をしてあるところでは、「変数」や「フロー制御」など、「最低限の」構文とコマンドについて説明はされているものの本当に目の前にあるコマンド最低限のプログラミング用語の説明で終っている。
その知識がうまれた背景や、しっかりと理解するための裏打ちとなる知識は省かれている。
理解を深めるような配慮といえば、当面のコマンドなどを「擬人化」して説明したり、プログラミングの世界とは違いあいまいなルールが通用する世界での「たとえ話」がほとんどだ。

そういった書き方を非難するつもりはないし、実際そうするしかないのだとは思うが、読んでいてなんとなくはぐらかされたような気持ちになる。

実際、そのような説明を読んでわかった気持ちになっても、頭には入っていないことが多い。
詰め込み教育になれた、記憶力の高い人は別かもしれないが、
自分のように記憶力が悪い人間には、ついていくのが難しい。

このような世界で生き残れるのは、自分の感じた疑問を自分で解決することが出来る人だけだろう。

しかしながら「プログラミング」の世界は、初心者に対してはそれほどあまくない。
「プログラミング」を勉強すると言うことは、「コンピュータ」という大きな分野に属する部分を勉強することでもあり、「コンピュータ」を勉強すると言うことは、人間の知識に関する哲学を勉強することでもある。
膨大な知識と知恵がつながり、それらが歴史を通じて発展し「プログラミング」というものに到達している。
哲学、記号論、数学、電子工学、社会情勢など様々なことがそのバックグラウンドにあり、一朝一夕に身につけることはできない。

それは大学などで専門教育のカリキュラムとして教えられることでもある。
ただ、大学のカリキュラムでも、プログラミングを習うだけの目的には、ポイントがずれていたり、不必要な情報が多すぎたりすることがあるし、これでも説明が足りないこともある。
大学生なら説明が足りない部分を、自習で補う時間はあるが、たくさんの知識の中から自分に必要な情報をみつけるには社会人には時間がたりない。


以上に述べたような点で、理想のプログラミング入門書には、基礎的な事柄をごまかしなく、本当に自分が勉強していることをしっかりと理解できる裏打ちされた知識。 そして適用する力を身につけることができる説明がほしいと思う。しかもそれが出来るだけ短時間で出来るとなお良い。
それには、作者の広い知識と深い理解がかかせないし、プログラミングの作業に必要な物は何かといった要点を見抜く力が必要だ。


この学習がどのように進行していくかを簡単に示すと
1) 理解(記憶が主目的ではない。理解すれば記憶される)
2) 適用(知識を実際の作業にあてはめて使えるようにする段階)
3) 応用(具体的な個々の事例、他の分野の事柄にあてはめて用いる。また、相手やその場の状況に合わせて変化させて用いること。(MSN) )

の順番である。
なんらかの技術を身につけるにはこの順番を踏んでいくわけだが、
プログラミングの学習でくじけるのは、
「(1)理解」が不十分なので、「(2)適用」がスムースに行かず「(3)応用」が出来ない。とうことではないかと思う。


特に今問題としているのは、(1)の「理解」である。
これがちゃんと出来ていなければ、後には何も続かない。

「プログラミング」のしっかりとした基礎知識を身につけるには、「コンピュータ」に関連する膨大な量の情報(知識、知恵)が必要だ。
とても奥が深く幅広い。
しかし、その広大な海に漕ぎ出すには、不十分なガイドばかりだ。

情報が多すぎるので、自分で調べるにしても「何を調べればよいのか」ということを示す地図だけでもほしい。「○○を深く知るには××を調べよう」というようなちょっとしたガイドでも助けになるかもしれない。

願わくば、プログラミングの知識を裏打ちしてくれるだけの最低限のエッセンスをまとめてあれば非常にありがたい。

そういった説明は「うざい」、「既存の入門書で十分だ」と感じる人は別だが、自分は違う。

地球の地図を作ってきた人たちは、その必要性と需要に気づいていたからこそ、それを苦労して作ってきた。
「プログラミング」という領域にそういった地図が存在しないのは、その必要性と需要に気がついている人少なく、また、それをまとめることが難しいのかもしれない。


いままでそのようなことを成し遂げ、初心者向けで理解しやすかった本は、ただ一冊だけだった。
それは「コンピュータ」を解説した本で、「TRON」でおなじみの「坂村 健」氏による「痛快!コンピュータ学」という本だった。

大学の先生には珍しくとても平易な文章で書かれて いて、尊敬する。必要と思われる部分にきちんと歴史的な記述も入っていて 理解を妨げるものは何もない。情報工学を一から理解するにはベストな 本じゃないだろうか(riywo氏によるリビュー

この本は初心者向けにコンピュータのことがわかりやすく書いてあるにもかかわらず、コンピュータの歴史や、エッセンスが簡略にまとめられており、読むだけで、コンピュータの骨の部分がしっかりと理解できる。
また、「コンピュータは何か」を調べるための勉強にも、この本がおおまかな地図となり、その後の勉強を切り開いてくれた。

--------------------
このブログを書いているのは、将来、「プログラミング」に関して、その地図を作りたいという気持ちと、その延長線上にある「体系づけられた知識をまとめる」目的がある。

そのために自分が、たどった道をできるだけ記録して地図にしておくのがこのブログの本当の目的だ。

性格上、一つのことをつきつめてやることはできないし、一人で出来ることは限られているので、完成までまとめることはできないで終わるかもしれない。
でも、できるだけ続けてやることで、後に続く人に何らかのガイドとなれば良いと思っている。
そのために、元々は未公開にしていたこのブログを公開に切り替えた。


 

0 件のコメント:

コメントを投稿