あなたの知らない新卒教育の世界

ペーペーの僕が社内の新卒教育研修でPHPやらMySQLやらの研修をやりました。

作った資料はブログにアップすることはできないですけど、作るにあたっての参考資料とか感じたことをさっくり残してみます。

まず、ゴールを決める

新卒たちの最終的なゴールはWebプログラマー的な立場として、プログラムを書いて欲しいんですが、Webサービスって単純にプログラムを書くだけじゃなくて、システム側がどう動いてるのかってのを理解してないといけないため、覚えることがめちゃくちゃあります。

Linuxの基本的なとこから、プログラムのこと、WebサーバーやらDBサーバーやらキャッシュやシェルスクリプト

また、新規立ち上げとは違うスキルが求められる運用ではログの漁り方やデータベースのチューニング、KPIデータの解析などなど。

あげればキリがないんですが、以下のスライドにすごくいい感じにまとまってるので、何が必要かはそちらを参照してください。

[ssl url='http://www.slideshare.net/takafumionaka/web-15929881' title='Webアプリケーションは難しい']

ちょっとの研修で全部覚えれるわけないので、日々勉強していくしかありません。(むしろ僕も全然足りないので勉強しないと…)

で、そんな人に設定するゴールとして全部覚えろって無茶ぶりしてもしかたないので、こういう設定をします

次の一歩が迷わないように知識を与えること。

以下のスライドに教育について紹介されています。

[ssl url='http://www.slideshare.net/ShuUesugi/20-9290892' title='20歳を過ぎてからプログラミングを学ぼうと決めた人たちへ']

できるとは、次の一歩がわかること

言い換えれば次の一歩がわからないようにすることだと思いました。

調べたいことはググれば大抵のことが解決しますが、ググりたい単語がわからなければ調べようがありません。

わからないことがわからないみたいな意味不明な日本語を使って欲しくないので、全体の仕組みを広く伝えてできる限りの知識を与えることをゴールにしました。

座学と経験のバランスは大切で、両方大切だと思います。

経験は現場にツッコんでおけばとりあえず身に付くと思うので、研修では知識を与えることを意識しました。

これが正しいのかわかりませんが、とりあえず自分のなかでこういう設定にしました。

プログラムを教える立場で考えること

今まで人に教えるって機会があまりなかったので、どういう視点に立って教えたらいいのかさっぱりわからずで悩みましたが、

とりあえず自分の体験から語って、どう覚えていったのかを説明しようと考えました。

僕自身のモデルが成功体験ってことは100%ありえないが、その辺にある教科書通りのストーリーを作って教えても話すほうも聞くほうもつらいんじゃないかなぁと。

で、何を教えるかってプログラムの書き方を教えるわけですけど、そもそもプログラムを書くってどういうことなのかを説明する時点ですでに挫折。。。

プログラム系の本を読んでも、Cはこういう構文で書きますとか、PHPはこういう処理したいときはこう書きますとかしか書いてなくて、

なんでプログラムをやるのかってまとまってる情報がありませんでした。(僕の調査不足かもですが)

僕は最初にC言語をやりましたが、for文とかif文とか説明されて、単体だったら意味はわかります。

繰り返し処理したいときとか、条件によって処理を分けたいときとか。

で、それが結局全体を通してどういうところに使われるのかってのがさっぱりわからずで、それを以下のブログで書かれていて、すごく共感できました。

6歳から60歳まで、幅広い年齢層にゲームプログラミングを教えてみた

実は子供は、「if」などの条件分岐は比較的すんなり受け入れるのだけど、大人になればなるほど、「if文」といった単純な制御構造でさえ、

「これはいつ使うのだ、なんのために使うのだ、どうして使うのだ」と悩み込んでしまう原因になってしまうらしい。

さらにループも問題だ。

なぜループが必要なのかわからない。

確かに、僕も最初にループを学んだときはなぜ必要なのか全くわからなかった。

けど、そのときはまだ6歳だったので、ループという遊びなんだと解釈することで消化できた。

そう、なぜ必要か?これが本当に最初はワカラナイ。

これをコピペしたら動くよとかはどうでもよくて、こういうことがやりたいって目的があるから書くんですよね。

例えば、HTMLのファイルを100個修正するのに1個ずつ手書きで書くことをせず、データベースから引っ張ってきた動的なパラメータにしておくと変更1箇所変えるだけだよねとか。

大量のデータを手動で1個ずつ書くなんてやってられないので、ループで繰り返しで処理を入れると楽ですよとか。

コピペでやっちゃうと、なんで必要かわからないので、動かなかったときにどう頑張っても解決できないため、1つ1つのプログラムに意味があるってのを理解してもらう必要があるわけです。

そのために教える立場として、最初はベタのHTMLを書いてもらうなどいろいろめんどくさいことをわざとやってもらいつつ、それをプログラムを使えば楽にミスなくできるのかをいろんな例を出してイメージを掴んでもらいました。

手動でやってるといろいろ問題が起こることを体験してもらいつつ、プログラムを使えばめんどくさいことがいろいろ解決できるのをわかってもらえたらなという感じです。

また、プログラムを書いてるって意識よりもWebプログラマーであればWebのシステムを作っているという意識も持って欲しいため、そのプログラムを書くことで、どういうシステムを作るときに使えるのかを意識してもらいました。

仮に掲示板システムを作る要件があって、それを作ってみるとする(掲示板は鉄板だと思ってる)

そのためにPHPMySQLを使ってどういうシステムを作れるのか。

投稿が100件あったら、1個ずつ指定して表示するなんてめんどくさいよね?じゃあループ使ったらHTMLを簡単に動的に出力できるよね?とか。

その場合は何を使えば要件を満たせるのかなど、プログラム単体の視点ではなくて、小さいながらもWebサービス的なシステムなモノを作ってることを意識しながらプログラムを書いてもらうことが一番理解できると思いますし、僕自身もそうやって覚えたところがあります。

最初は写経でも良いと思います。実際書いて動かさないと頭には入ってこないので、イメージしてもらいつつもとにかく書いてもらうことにしました。

写経のやり方はシンプルなこのツイートを引用させて頂きます。

https://twitter.com/t_wada/status/9000231741

まぁ最終的にはプログラム書けよって話になりますが、それでも知識を与えることで覚えが早くなると思います。

人に教えることでわかったつもりだったことが浮き彫りになる

ブログに記事書くとかもそうですけど、中途半端な知識ではやっぱり教えれないので、一から自分でも勉強しつつ資料作成をしてました。

講座の発表時間は決まっていたので、その時間内に最低限伝えないといけないことを考えて資料作成するんですが、この内容を決めるのに結構時間がかかってしまいました。

エンジニアとしての最低限の知識を伝えつつも実際に業務で使う知識もいるわけで、とあるシステムだけ作れますみたいな偏りがあるといけません。

というわけで汎用的に使える知識を重点的に入れながらも、現場で使う必要な知識を詰め込もうとするとどうやっても時間が足りなかったりするので、最後まで結構悩みました。

結果的に業務知識があまり伝えられなかったような気がしますが、あとは頑張ってくれると思います。(結果、丸投げ)

講座が終わっていくつか足りない項目があったのは反省点ですが、どう頑張っても時間的に詰めることができなかった点は仕方ないにしろ、もうちょっと補足できたらよかったなと…

参考書籍

パーフェクトPHP (PERFECT SERIES 3)

下手なPHPの本買うよりも、断然オススメです。初心者にはとっつきにくいかもしれませんが、どうせ他の本は読まなくなるだろうしこれあれば良いと思います。

あとは、セキュリティについての徳丸本があれば…

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)

はてなインターンの内容が書籍化された本。はてなインターンは毎年精神と時の部屋と呼ばれてるようにやってる内容が濃いです。

今でも読み返すと新しい発見がありますし、Webサービスに関わる人なら読んで損はないと思います。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

HTTP、URL、HTMLなど普段Webを使う上で欠かさない基礎的な知識ですが、これをわかりやすく紹介しています。

この辺の知識があればもっとWebのことが理解できます。

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)

MySQLの入門書としては、これが良いかと。これもちょっととっつきにくいかもしれませんが、広くMySQLについての紹介をしているのでオススメです。

参考資料

スライド

[ssl url='https://speakerdeck.com/dex1t/introduction-to-web-technologies' title='入門Webの仕組み']

Webを支える技術をものすごいコンパクトにまとめた内容。すごくわかりやすくWebを紹介しているので、オススメです。

[ssl url='http://koba04.com/slide/become_a_programmer' title='プログラミング未経験のタワレコ店員がエンジニアになって思ったこと']

全然わからないところからエンジニアになった方の体験記。

積極的な姿勢やいろいろな名言が入っててオススメなスライドです。

参考URL

[ssl url='http://www.1x1.jp/blog/2010/01/php-basic-syntax.html' title='PHP基礎文法最速マスター - Shin x blog']

[ssl url='http://ja.phptherightway.com/' title='PHP The Right Way']

[ssl url='https://gist.github.com/masakielastic/5457174' title='すぐれた PHP ライブラリとリソース']

まとめ

正直しんどい。

できればもうやりたくないと思えるほどの辛さでしたが、彼ら彼女らが頑張って成長しているのを日に日に実感できるのは楽しく、普段の仕事では味わえない感覚なので新鮮でした。

独り言

タイトルが思いつかなかったので、ホッテントリメーカー使ってみたけど、いい感じに煽った感じのタイトルが出たので使ってみた