どうもです、タドスケです。
今年の4月から新人プログラマーの教育を任されて10ヶ月。
カリキュラムが特に決められていたわけではないので、本などを読んで試行錯誤を繰り返してきました。
この記事では、ゲームプログラマー歴10数年の僕が、新人プログラマーに教えていることをまとめます。
現在新人教育を担当している方、これから担当される方にとって一つの例を提示できればと思います。
全体方針
研修を始めるにあたり、まずはこちらの意図を先に説明して「なぜこれをやっているのか」を理解してもらいます。
僕が研修で大事にしていることは以下です。
- プログラマーである前に社会人
- 目的思考
プログラマーである前に社会人
会社員プログラマーとして働くのであれば、まずは組織内で信用を得ることが大切です。
納期を守る、報連相を行う、チームメンバーに敬意を払う。
どこの本にも書いてありそうなことですが、プログラミングスキルを高めることばかりに気を取られていると、意外と忘れてしまいがちです。
目的思考
全ての仕事には目的があります。
逆に言えば、目の前の仕事は目的を達成する手段でしかありません。
同じ目的をより安全に、より短期間でできるやり方があるなら、そちらを選択するべきです。
タスクの振りかた
意図を伝えたら、できるだけそれに沿ったタスク(作業単位のこと)をこなしてもらいます。
現場の状況によっては都合の良いタスクが無かったりして、必ずしもうまくいかないこともありますが、以下の順で渡していきます。
- セットアップマニュアルの回収
- ツール改修
- デバッグ用UIの作成
- リファクタリング
- 他の人から来たタスクを丸ごと投げる
順番を決めるポイントは、
- 影響範囲
- リスク
- 関わる人の多さ
- 工数
などが少しずつ大きくなるようにしていくことです。
セットアップマニュアルの改修
プロジェクト配属時に行う環境セットアップにおいて、セットアップマニュアルの改修も並行して進めてもらいます。
新人目線での「わかりやすさ」は、プロジェクトに慣れた人ではわからないため、貴重な情報となります。
また、マニュアルを書く作業を通して文章を書く力も同時に鍛えることができます。
ツール改修
開発ツールに関する要望のうち、チェックボックスの追加などの簡単な作業をやってもらいます。
スキルを高めるというよりは、依頼→作業→バージョン管理ツールへのコミット→タスク管理ツール上での報告といった一連の流れを体験してもらうことが主な目的です。
デバッグ用UIの作成
ゲーム内のデバッグメニューを新しく作ってもらいます。
ゲーム内のコードに触れて、ここを修正するとここが変わるという体験をしてもらいます。
同時にプロジェクト特有のコーディング規約を確認してもらい、それに沿ったコーディングが行えているかのレビューも行います。
リファクタリング
僕が過去に作ったクラスの分割を行ってもらいます。
既に動作していてゴールも見えている状況で、チームでプログラミングを行う上で重要なクラス設計について学んでもらいます。
他の人から来たタスクを丸ごと投げる
ここまで進めてもらったら、今度は僕の元に来ているタスクを丸ごと渡します。
最初は具体的な手順を示して、徐々に補助輪を外していくイメージです。
見積もりチャレンジ
社会人プログラマーとして重要な「見積もり力」を高めるためのトレーニングです。
方法
- タスクに取り組む前に工数を見積もる(できればその根拠も)
- タスクが完了後、実際にかかった工数を報告する
- 見積もりとの差が出た場合は(早く終わった場合でも)その理由を考える
狙い
予想の過程で自分の力量を客観視する習慣が、
途中で「あと何日で終わりそうか」を確認することでスケジュール意識が、
終了時の確認でスケジュールを乱す「予想外のできごと」に対する知見が得られます。
このように予想→確認→修正を繰り返すことで少しずつ見積もりの精度を上げていきます。
タスク振り返り
タスクから得られる経験値を最大化するためのトレーニングです。
タスク終了時に以下の項目について報告してもらいます。
- 新しく学んだことは?
- うまくできたことは?
- 苦戦したところは?
- 誰と関わった?
- 改善できそうなところは?
新しく学んだことは?
タスクをやっている最中は終わらせることに精一杯で、途中で学んだことを自覚せずに過ぎてしまいがちです。
「C#を使ってGUIを作る方法を覚えた」などを思い出すことで復習効果を狙うとともに、
「少しずつ成長している」という実感によりモチベーションアップが見込めます。
うまくできたことは?
「思っていたよりもすんなりできた」ということは、彼/彼女にとっての強みの可能性が高いです。
ここで報告する度に、「自分はこれが得意なんだ」という自覚を強めてもらいます。
苦戦したところは?
自分の弱みについても同様にここで確認できます。
「やってみたけどうまくいかなかったこと」を知っておけば、今後のキャリアの方向性を考える際の参考になります。
誰と関わった?
「この仕事をする時には必ずこの人の決済が必要なんだな」
ということが意識できるようになり、今後のコミュニケーションがスムーズになります。
改善できそうなところは?
作業中に気付いたツールの使い心地やクラス設計などの改善案を報告してもらいます。
「自ら問題点を発見して改善の提案を行う」という、将来のキャリアアップに必須のスキルを身につけられます。
そして独り立ちへ
このやり方で進めた結果、今では他の人から新人さんに直接タスクが回され、僕は途中の相談や完了報告を聞くだけで済むようになりました。
今後はもっと本格的な実装、デバッグ案件を任せたいと思います。
まとめ
以上、僕が今年行った新人プログラマー教育の内容を紹介しました。
ポイントは以下です。
- 研修の目的を先に説明して、この仕事の先に何があるのかを感じてもらう
- リスクの低いタスクで思う存分挑戦させる
- 少しずつ関わる範囲を広げていく
- タスクごとに見積もりと振り返りを行い、経験を確実にモノにする
この記事があなたの参考になれば幸いです!
コメント