- 歩きつづける アバラ骨 折りつづける
- 昔のほんだな
2009-07-01
■極道的研修のあらまし「引数と戻り値が分かりません」
極道的研修によって怒りの沸点が上がり、ちょっとやそっとではキレにくくなった yuripop です。もともとキレるタイプではないのですが、より温厚になりました。おめでとうございます!
かくして yuripop は、二度と降りることのできない大人の階段の踊り場でふと立ち止まり、時計の音に耳を澄ませながら極道的研修をふり返ってみるのであった。
研修内容
ゴール
ウォーターフォール技法に則って、Java言語で作られたWebアプリケーションの改修を行うこと。開発期間は講義の6日間を除くと7.5営業日。
ロールプレイ
- 1クラス30名弱を約6名ずつの開発チームに分ける
- 講義を行うメイン講師(外部の研修屋さん)は各クラス1名
- Webアプリケーション改修の発注者役は、アシスタント(yuripop たち先輩社員)がつとめる
- 開発チームのPMは、アシスタント(1人2役)及びメイン講師がつとめる
- アシスタントは先輩社員として後輩たちの質問には機嫌よく答えなければならない
注目すべきは、それぞれのロールに演技指導が入ってたことです。演劇部に所属したことのあるゆりぽは本気の目になります。
留意すべき点
- 開発期間が短いため、「要件定義」工程は行わなくても構わない
- 行わない場合、アシスタントが勝手に改修課題を割り振る
- 開発期間が短いため、「UT工程」はスルーしてもよい
- 基本的に、クラスごとの差異が出ても構わないので、アシスタントの裁量で難易度を決めてよい
- 開発期間内に工程が終了しなかった場合はPM役の責任になるので頑張れ
- 「誰もがJavaのクラスを1つは作れるように割り振ってください」
- 「これは言語の研修ではないので開発工程を教えてください」
- 社内標準に完璧に従うため、JSP+Servlet+JDBCかつMVCの厳密なアーキテクチャは壊さないように指導すること
- 全員eclipseを唯一無二のツールとして利用、UMLはJUDEで描くこと
- 悪名高いTomcatプラグイン必須
- 「warを作ってデプロイなどはさせないでください」←なんで?
- インターネットは(害悪なので)使えません
ことごとく血を吐くルールです。細かくはまだまだあるんですが、あんまり書くと恥さらしになりかねないと yuripop にだって分かるのでやめます。
生徒たちの前提知識
ただし、HTMLやJavaScriptといった「Web開発」に必要な知識を有する子はほとんどいませんし、JDKのバージョンは1.5以上にこだわるくせしてアノテーションや列挙型は教えていません。
開発が始まると、そこは阿鼻叫喚の地獄です
だいたいどの企業も「開発研修」なんぞこんな感じだったりする、というのは、Twitterで仲良しのお兄さんも言ってましたが、それにしても悲しいことになりました。
たとえばこんなやり取りをしました
生徒Sくん「ゆりせんぱーい、『HTTPセッション』というのが分かりません」
ゆり「あらあら、それはWebコンテナやJavaEEのパッケージ群が管理してくれているオブジェクトのことですよ」
Sくん「一切分かりません」
ゆり「予想済みです。さっき言ったことをとりあえず頭に置いておいて、今から描く図を見てみて。Tomcatさんの中にはね、オブジェクトを保管しておくことができます。いいですか、ひとりのユーザがHTTPリクエストを送ってくると、Tomcatさんの中でうごめいているJSPやServletがまず反応します。そんで反応を返す、これがHTTPレスポンス」
Sくん「興味が持てません」
ゆり「分かっていますよ、みんなが今やらされてる研修はね、前提知識が圧倒的に少ない、言わば人生の抜き打ちテストみたいなもんだからね、でも会社なんて基本そんなもんだからね。今のうちに絶望に慣れなさい。では続きを見て。HTTPリクエストとレスポンスは、ブラウザで画面表示が切り替わるたびに、一旦は完結しています」
Sくん「ふーん」
ゆり「でも、毎回完結していたら、このホラ、『ログイン』ボタンを押した人が、次の画面でどの商品の『購入ボタン』を押したのか、分かんなくなるでしょ?」
Sくん「うん」
ゆり「だからね、HTTPリクエストから取得することのできた情報を、溜めておくようにするの。そのためのオブジェクトがセッションと呼ばれるやつです。実際はMapという型に入っているよ、で、こいつが持続する時間とかも一応は定義されてるの。ちょっとソースを見てみて」
Sくん「ああ! Mapなら前の研修で習いました。キーと値があるやつでしょ」
ゆり「そうだよー! よく分かってるね、きみはとても賢いですね」
Sくん「でもせんぱい、このログイン情報っていうやつをね、データベースまで持っていくときには、どこでMapに入れたらいいの?」
ゆり「データベースまで持っていくの?」
Sくん「だって、データを保持ってやつ? しないといけないんでしょう?」
ゆり「ちょっと先輩は今わきの下に汗をかいてるんだけども、それはひとつのHTTPリクエストを受け取ってから、レスポンスを返すまでのあいだにする処理のことを言ってる?」
Sくん「そうです、ここの『ログイン』シーケンスの中身」
ゆり「このシーケンスは途切れないから、つまり画面の遷移がない、分かるかな、ひとつの処理、ええとメソッドとして完結させられるからね」
Sくん「でもBeanっていうやつを使わないといけないんでしょ? どうやってBeanに情報を教えるんですか? セッションてやつに入れればいいの?」
ゆり「それは単純に、Beanのインスタンスを作って、コンストラクタか、あるいはgetメソッドに引数で渡してあげればいいのよ」
暗転。
なんとかなりました
「プログラムというのは1本の線で一筆書きをするように動いていく」「Javaが実行されるときは基本的にソースコードの上から順番」「メソッドがあるとそこへジャンプする」「このときに、入力と出力がある」などなど、結城先生のご本をはじめ、自分がピヨピヨのヒヨコだったときに学んだ概念などを駆使し、たまに冗談やジョジョ立ちも交えながら教え、あるいはTwitterでわずかな時間にヘルプを求めながら、なんとか引数と戻り値については分かってもらいました。
ただ、言葉で説明するのは、本当に大変でした。
ゆり「これ以上は言葉じゃ無理だから、ちょっと書いてみようよ」
Sくん「だめです。だって『外部設計』の工程ではプログラムを書いちゃだめなんでしょう?」
ウォーターフォールをこれほど憎いと思ったのは、はじめてでした。でも、誰もが一度はこういう経験をして、アジャイルに惹かれるようになるのですから、耐えるのです。がんばるのです。
こうしてゆりは、結果的に己の無学を思い知らされたのでした。
(つづく?)
