ちゃんと新人教育をした経験も無いんだけど、今回、上海から戻ったらすぐに新人教育を開始することになっていた。
準備もそこそこに開始してみた。
本当ならちゃんと準備して開始できれば良かったんだけど、全然準備の時間が取れなったので、とにかく、始めることにした。日本のスタッフが、javaを使って変数とかメソッドとか教えてたらしい(なんでjavaか?とか、なんで変数からメソッドに飛べるのか?とかいろいろ)ので、それを前提にして、最初は、変数とか関数が判ってるものとして応用問題とか出してみたんだけど、どうもおかしい。全然判ってない様子。仕方が無いので、前提を全部捨てて、一番最初から教えることにした。
スペック
- 新人は、大卒2人。文系。プログラム経験無し。
- 俺は、昔、独学で遊びながらプログラムを覚えた。その後、実際のプロジェクトをやることで勉強してきた。要するに、ちゃんとした教育を受けていない。
うーん。教える方も教わる方も、スペック的に厳しいです。
うまく行かないのは
教わる方は、プログラムという未知の世界の話なので、何がわかっていて、何がわかっていないかもわからない状況におちいりやすい。教える方は、自分が初心者だった時のことは忘れているので、どこまでが常識的な話なのかが判断できない。
教育に使用する言語
プログラムを作れるようになるには、低いレベルなりに「あー、こうゆう風にやってけば、動くものができるんだな」という経験をする必要があると思う。(これは、数少ない昔の記憶の中で覚えていること) そのためには、「おまじない」が少ない言語の方が適していると思う。「とにかく#includeするんだよ。」とか、「とにかくpublic static main という…」のが沢山出てくると判った気になれない。あと、変数・関数を覚えようとしている初学者にとって、オブジェクト指向なんてものは、邪魔なだけだと思う。
ということで、教育に使用する言語は、PHPにしました。
定数、変数について
変数というものを知らない人に説明するのは非常に難しい。というか、説明はできるけど、理解してもらうのが難しい。定数が何の役に立つのか、変数が何の役に立つのか、定数と変数の違いは何か。説明はしてみたものの、理解してもらっている実感が無い。
変数に格納できる値の型について
値の型は、int型・文字列型・浮動小数型、その他諸々がありますよ。あと配列、連想配列がありますよ、ということを説明した。
よく、変数を箱に例えて説明している参考書とかがあるけど、今回の教育では、下のようなイメージで説明してみた。
$age = 21;
という文があったら、ageという名前の変数があって、そこから矢印が出ていて、どっかのint型の21を差していますよ。
$age;
という文があったら、ageという名前の変数があって、どこにも矢印が出ていない状態ですよ。
$arr = array(2, 4, 6, 8);
という文があったら、arrという名前の変数があって、そこから矢印が出ていて、どっかの配列を差していますよ。その配列の要素は、2, 4, 6, 8になってますよ。
関数について
関数の難しさは、変数より更に上でした。
一通り説明した後、一つのファイルの処理を、関数化してもらうように課題を出したのですが、回答を教えても理解しきれていない様子。
関数について、更に説明したこと
関数の利点について理解ができないようだったので、見方を変えて説明してみた。「関数はサービスである」という視点から、利用する側と提供する側に分けてみた。
- 関数という機能を利用する人にとって大事なこと
- 関数名
- その関数が、何をする関数か?
- 引数
- 戻り値
- 関数という機能を提供する人にとって大事なこと
- 細かい処理を隠蔽することができる。
- バグが出た場合、関数内の修正だけで、解決できる可能性が高まる。(修正部分の局所化)
- ただし、凝集度が高まるので、実装の難易度は上がる。
だから、関数を作るときは、まず、利用者側が利用するための情報を決定することが一番大事ですよ。
考え出すと、本当に教えるということは難しい。本当に何も知らない人に教えるときの資料など、いいのがあったら教えて欲しいです。。。