新人教育 教えるということは難しい。

ちゃんと新人教育をした経験も無いんだけど、今回、上海から戻ったらすぐに新人教育を開始することになっていた。

準備もそこそこに開始してみた。

本当ならちゃんと準備して開始できれば良かったんだけど、全然準備の時間が取れなったので、とにかく、始めることにした。日本のスタッフが、javaを使って変数とかメソッドとか教えてたらしい(なんでjavaか?とか、なんで変数からメソッドに飛べるのか?とかいろいろ)ので、それを前提にして、最初は、変数とか関数が判ってるものとして応用問題とか出してみたんだけど、どうもおかしい。全然判ってない様子。仕方が無いので、前提を全部捨てて、一番最初から教えることにした。

スペック

  • 新人は、大卒2人。文系。プログラム経験無し。
  • 俺は、昔、独学で遊びながらプログラムを覚えた。その後、実際のプロジェクトをやることで勉強してきた。要するに、ちゃんとした教育を受けていない。

うーん。教える方も教わる方も、スペック的に厳しいです。

うまく行かないのは

教わる方は、プログラムという未知の世界の話なので、何がわかっていて、何がわかっていないかもわからない状況におちいりやすい。教える方は、自分が初心者だった時のことは忘れているので、どこまでが常識的な話なのかが判断できない。

教育に使用する言語

プログラムを作れるようになるには、低いレベルなりに「あー、こうゆう風にやってけば、動くものができるんだな」という経験をする必要があると思う。(これは、数少ない昔の記憶の中で覚えていること) そのためには、「おまじない」が少ない言語の方が適していると思う。「とにかく#includeするんだよ。」とか、「とにかくpublic static main という…」のが沢山出てくると判った気になれない。あと、変数・関数を覚えようとしている初学者にとって、オブジェクト指向なんてものは、邪魔なだけだと思う。

ということで、教育に使用する言語は、PHPにしました。

定数、変数について

変数というものを知らない人に説明するのは非常に難しい。というか、説明はできるけど、理解してもらうのが難しい。定数が何の役に立つのか、変数が何の役に立つのか、定数と変数の違いは何か。説明はしてみたものの、理解してもらっている実感が無い。

変数に格納できる値の型について

値の型は、int型・文字列型・浮動小数型、その他諸々がありますよ。あと配列、連想配列がありますよ、ということを説明した。

よく、変数を箱に例えて説明している参考書とかがあるけど、今回の教育では、下のようなイメージで説明してみた。

f:id:smeghead:20090426173248g:image


$age = 21;

という文があったら、ageという名前の変数があって、そこから矢印が出ていて、どっかのint型の21を差していますよ。

$age;

という文があったら、ageという名前の変数があって、どこにも矢印が出ていない状態ですよ。

f:id:smeghead:20090426173936g:image

$arr = array(2, 4, 6, 8);

という文があったら、arrという名前の変数があって、そこから矢印が出ていて、どっかの配列を差していますよ。その配列の要素は、2, 4, 6, 8になってますよ。

関数について

関数の難しさは、変数より更に上でした。

一通り説明した後、一つのファイルの処理を、関数化してもらうように課題を出したのですが、回答を教えても理解しきれていない様子。

関数について、更に説明したこと

関数の利点について理解ができないようだったので、見方を変えて説明してみた。「関数はサービスである」という視点から、利用する側と提供する側に分けてみた。

  • 関数という機能を利用する人にとって大事なこと
    • 関数名
    • その関数が、何をする関数か?
    • 引数
    • 戻り値
  • 関数という機能を提供する人にとって大事なこと
    • 細かい処理を隠蔽することができる。
    • バグが出た場合、関数内の修正だけで、解決できる可能性が高まる。(修正部分の局所化)
    • ただし、凝集度が高まるので、実装の難易度は上がる。

だから、関数を作るときは、まず、利用者側が利用するための情報を決定することが一番大事ですよ。

考え出すと、本当に教えるということは難しい。本当に何も知らない人に教えるときの資料など、いいのがあったら教えて欲しいです。。。

4件のコメント

  • 確かに、教えるという事は難しいですね。
    彼等が何が理解出来ていないか、こちらも分からないので・・・

    ただ、身近な事に例えると理解し易いかな、と。

    例えば・・・
    変数ってのはサイフで、最初は1000円入っています。
    で、コンビニでペットボトルのお茶を買いました。
    $saifu=1000;
    $saifu=$saifu-150;
    とか。

    値渡しや参照渡しについては、おいおい教えればいいのかな、って感じです。

    教育って、自分でも改めて勉強する事もあったりするので、
    たまにはいいかなぁ~、とか思ったりします。

  • > ただ、身近な事に例えると理解し易いかな、と。
    でも、あんまり身近な例すぎると、判った気になるけど、あとですぐ別の矛盾にぶちあたって、逆に混乱してしまうってことも多い気がする。

    > 教育って、自分でも改めて勉強する事もあったりするので、
    > たまにはいいかなぁ~、とか思ったりします。
    これは確かにありますねー。

  • PHPで検索してここへ辿り着きました。
    私は教える側ではないですが、教えられてる側からして、
    確かに変数とか配列とか関数とか難しいって思っています。。
    まだPHPを学んで一ヶ月ですが、色んな関数とかが絡まってくると、
    全くわからなくなります。
    応用が全くできないです。やっぱり数学苦手なのと関係あるのかなって
    思っていますが、PHPわかるようになりたいです。
    勉強していたら、ひらめいたり、今まで謎だったことがすんなり理解できる
    ような日がくるのでしょうか。

  • >ころろさん
    数学は俺も苦手ですが、普通にPHPをやってる範囲で数学がわからないと話にならないような問題にはほとんど当たらないのではないかと感じています。さすがに算数は必要ですが。

    プログラムを作るには理論的に理解(思考)する力というのは必要なので、数学が嫌いでも物理が好きならプログラムを作れるようになるのは難しくないと思います。

    > 勉強していたら、ひらめいたり、今まで謎だったことがすんなり理解できる
    > ような日がくるのでしょうか。
    わからないことを調べつづけて行けばすんなり理解できるようになると思いますよ。
    PHPでプログラムを自由に組めるようになって、その後別の言語を勉強した時に、その日が来るのかもしれません。

    #偉そうなこと言える程の立場じゃないんですが。。。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください