umentuのブログ

趣味や自学でプログラミングをする上で思ったことを書いていきます。pythonのブログ: http://blog.umentu.work

(プログラミングの)教え方、学び方概論

プログラミングを教えるときに何から教えればいいかという議論は、その瞬間で真剣に、もしくはなんとなく議論されている。

真剣に議論してもなんとなく議論しても、結論としてはそれまでの慣習に近い形でまとまっていく。 でも次の瞬間にはまたどこかで議論が始まるのだから答えではないのだろう。

まとまらない理由は、今書きながら思いついた限りでもいくつか思いつく。

・教わる側の対象が絞れていない ・教える側の対象が絞れていない ・何を教える(教わる)か定まっていない ・言語論争に走ってしまう

教わる側の対象が絞れていない

モチベーション

2chまとめなどで「プログラミングを教える」のような記事を見かけるが、大体が教わる側の対象を絞れていないことが多い。 まぁ教えたい側が教えたいように書いて、それを読んで理解できる人を教わる人としているのだろう。 教わる側に強いモチベーションがある場合は、それはとても効率的に働くことがある。

しかし、ある程度のモチベーションがあっても諦めてしまうか、どうモチベーションを作ればいいかわからない人が多い。 教わる側がどのくらいモチベーションがあるかどうかを計るは大事。

逆に教わる側は怖がらずにわからない単語を調べるだけでも、その後の興味の持ち方が段違い。 (個人的には調べてる暇があったらちょっとでも簡単なプログラムを書いてみて欲しいところ)

知識

知識量はあまり気にする必要がないように思える。 教わる側に知識があっても知識がなくても、教える内容は教える側に依存するところがあるからだ。 (教わる側の方が知識が有ることもしばしばあるし。)

ではここでいう知識が何かというと、 教わるまでに教わる相手がどのくらい知識をつけようとするか ということだ。(ブラックと思われそう) これは上でのモチベーションにも繋がるが、最終的には結局は自分で解決しないといけないというところに至る。 そこをみることで、どの程度教えればいいかも図ることもできる。 講義(ハンズオン)をやると決まった段階で、事前にどの程度の知識があって講義までにどの程度をつけたかをこっそり会話などで計っておくといいかもしれない。

一人?複数

教わる人が一人の場合は事前に悩むことはないように思える。 せいぜい課題のレベルを対象に合わせるか、固定するかくらいだろう。

複数の場合は悩みどころが増える。 個人個人の力量がばらつかなければ、ものすごく力があっても逆に全く力がなくても、そんなに問題はない。 問題はばらつきがある場合だ。

講義の場合はどこまでレベルを下げるのか、もしくは上げるのかの落としどころは見えづらい。 ハンズオンの場合は、レベルの上げ下げに加え、一律のことをさせるのか、作業を分担させるのかなどの問題が膨らむ。 これは教わる側に依存することはもちろん、教える内容にも依存する。

教える側の対象が絞れていない

教える側のモチベーション

教える側が教えたいか教えたくないかにかかってくる。 情報発信が簡単になっている現状で、

ブログなどで情報発信している側にいる人は基本的には「教えたい人」 発信していない人は「(あまり)教えたくない人」

と考えてもいいのかもしれない。 教わる側の人はブログを書いている人などにコメントを残すと喜んでほいほい返信してくれると思う。

教える側の知識量

当たり前のようだけど、教わる側より教える側の知識量はかなり重要。 知識量というより知識の吸収力というべきだろうか。 最終的に教わる側に教えないといけないことは 自分で解決する能力 なのだから。

何を教える(教わる)かテーマが定まっていない

意外と具体的に何を作るか、ということを定められていないことって意外とあるように思う。 例えば「スマホアプリを作る」というセミナーがあったとする。 スマホ上にアプリを表示するだけのアプリならSDKのインストールなどの環境設定の方でお腹いっぱいになってしまう。 ではSDKなどをインストール済みのPCを渡せばいいのだろうか? どこのディレクトリ(フォルダ)に何があるということを理解しないでエラーの内容が理解できるだろうか。 そもそもAndroid?iPhone?

まぁ実際にはこんなことを考えなくても、講師が話す内容で徐々に明らかになっていくようにはなっている。

しかしテーマは、「Java + cocos2dを使ってパズルゲームAndroidアプリを作る」と言った形で できるだけ検索できるワード を使って絞ったほうが教わる側のモチベーションに直結するように思う。

言語論争に走ってしまう

「どの言語から始めればいいですか?」 「C言語からやらないと」「オブジェクト思考でJavaから」「HTML+Javascriptは簡単でいい」「いやいややっぱRubyでしょ」

だいたい日本だとこんな感じだ。 (私の好きなPythonはまだあまり日の目を見ていない)

「◯◯というプログラミング言語は今後も発展していく余地があり、必ず学習しておいて損はない」 と1980年ごろに書かれた文章を紹介しているが、その◯◯という言語は1990年以降みたことがない。

といった文章をどの本かは忘れてしまったが読んだことがある。

「プログラミングはひとつ覚えると他の言語も簡単に覚えられる」というのは2、30年くらい言われ続けている言葉ではないだろうか。 いま熱い!という言語から始める間違いではない。でも昔の言語から始めるのはもはや間違いであると思う。 今となっては、古いプログラミング言語を修得するほうがハイコストローリターンだからだ。

ということで言語はローコストハイリターンな言語を選べばいいと思う。 その上でどの言語を選択するかは 教える(教わる)かテーマ を定めれば自ずと定まってくるはず。 いずれ必要になったらC言語などの言語を習得すればいいと思う。

今回は概論。 思いついたら具体的なパターン方法を公開していく。