見出し画像

未経験者を対象としたIT技術研修について

この記事について

この記事では、私がソフトハウスの新入社員向けに制作・実施を担当した研修プログラムを紹介したいと思います。

IT業界では「実務経験」が重視され、未経験者の就職のハードルが高いと言われています。そんな中で、IT業界に転職してきた人たち(未経験者)に対して「実際の開発に役立つ」「実務に近い経験ができる」研修とはどういうものか、ということを考え、この研修プログラムを作りました。
この記事はその概略を説明したものです。

実際に使用した教材やシラバスなどは権利の関係もあって記載しておりません。

研修で取り扱っていた内容には、技術的な目新しさはないと思いますが、私自身の開発経験から、特に未経験者には必要だと思われるノウハウをピックアップして構成したものです。

当時の研修の題材は「Access VBA」でした。これは、「データベース」「プログラム開発環境」「画面設計」などを同時に学べると考えたからです。また、当時はVBAを使った受託業務も、一定数あったいう事情もあります。
(研修全体としては、他にSQL、Excel VBAなどもありました)

なお、私が研修に携わっていた期間は2015.5~2019.3で、インターンを含めて約60名の方が研修を修了され、約50名の方がエンジニアとして就業されました。
この研修の後、そのままVBAやデータ解析関連の仕事に就く方がおられた一方で、その後にASP.Netの研修を経て、その分野の仕事に就く方もおられました(そちらの研修については私は担当していません)。

研修内容について

①基礎研修

一般的な「プログラミング言語研修」としての座学と演習が中心ですが、「データベースの基礎」「機能を少しずつ積み上げる」「異常系の考え方」「テストの考え方」などのポイントを押さえることで、「実際の開発に役立つスキル」を身につけることを目的としていました。

②応用研修

より実践に近い内容として、(新規開発ではなく)「改修」の技術を得るためのもの(仕様の分析、改修仕様の設計、利用者レビュー、テスト)、上流工程の一部(要求ヒアリング、フロー設計、利用者レビュー)などの研修を行っていました。

③報告、スケジュール立案

上記の演習を通して、自分の状態を管理・報告すること(進捗状況や問題点の把握)、工数を見積もること、スケジュールを計画することなどを求めていました。もちろん、最初からできるものではありませんが、演習の過程で「自分が何をしているのかを理解する」「仕事の全体像ややるべきことを把握する」ことができるようになると、報告や見積もりの精度が上がっていきます。

研修内容の概略:基礎研修

「プログラミング言語の書き方」を学んでもらうだけでなく、以下の点も含めて指導していました。

①データベース
②機能を少しずつ積み上げる(小さく完成させてから、大きくしていく)
③異常系処理
④テスト項目の抽出方法
※実際には、これ以外にもあります。

なお、演習には区切り(マイルストーン)を置き、その時点で(演習の)成果物を(講師である)私がレビューしていました。

①データベース

ビジネスアプリケーションは基本的に「データを扱うもの(=データベースをいじるもの)」であるという考えのもと、研修カリキュラムはまず「データベースの基礎」から始めました。また(VBAの研修と並行して)SQLの研修(演習)も行っていました。

②機能を少しずつ積み上げる(小さく完成させてから、大きくしていく)

演習課題については、まず機能を限定した上で、機能を追加していきました。また、その際に「穴をあける(貫通させる)」ために、次のような「機能を絞る」という方法も指導していました。

● 値の変化に対応して処理が変わる部分は、値を固定して個別の処理に対応する
● データを限定する(データベースや、入出力するデータのやりとりを一部に限る)
● 正常系のみ考える
など

③異常系処理

「異常事態」の部分は、課題で想定されていることに加えて、以下の点から「研修生が自分で考える余地」も残しておきました。
その場合は、以下の3つの視点から研修生に考えてもらいました。

A「予防」異常事態を引き起こす要因そのものを発生させないようにする(例:画面の設定などで想定外の値をそもそも入力できなくする)
B「検出」異常事態を引き起こす要因が存在していることを検知する(例:入ってきた値が想定外であるかチェックする)
C「復旧」発生した異常事態でプログラムが異常状態に陥らないようにする(例:例外の発生で停止しないようにする)

また、これらの処理を「再実行可能性」という観点から考えてもらいました(例えば、不可逆的な処理をまとめて、その前に「検出」処理を置く)。

④テスト項目の抽出

単体・結合テストと機能テストについて、テスト項目の抽出と実際のテストを実施してもらいました。。
この二つが未経験者には区別がつきにくいようでしたので、ここではそれぞれ

● 製造したプログラムそのものの挙動を確認するために、プログラム単位や連携の動作確認を行う。
● 利用者から見た機能(個々の操作)それぞれの動作確認を行う。

という視点で項目を挙げてもらいました。

研修内容の概略:応用研修

基礎研修の終了後には、次の研修を行っていました。

①改修の演習
②上流工程の一部を対象とした演習

これらの演習については、演習の「場」を実務の状況にできるだけ近づける(再現する)ことに重点を置いていました。
例えば、(講師である)私が(プロジェクトの)リーダーとなって(後述するような)スケジュール管理やレビューを行い、また研修性には進捗や問題点などの報告を求めていました。

※実際の演習は、これ以外にもあります。

①改修の演習

実務では、新規開発だけでなく、「改修」作業も発生します。そのための演習を行いました。
演習の内容は、実際の改修プロジェクトで使っていた技術をベースにしています。

演習の内容は、完成したアプリケーションに指定の機能を追加改修する、というものです。
ここでは条件を悪くするために、ドキュメントはユーザーの「取扱説明書」のみで、プログラム内のコメントはすべて削除していました。

この状態で、次のような手順で演習を進めました。

【1.取り扱いデータの把握】
アプリケーションの各機能を構成するプロシージャ、クラス、クエリなどで使われるデータを把握します。この段階では、深入りはしません。ほとんど機械的に得られる程度のものに留めます。

【2.改修仕様に関わるデータの選択】
上記の抽出結果から、修正対象の仕様に関連するデータと、それらが使用されているプロシージャ、クラス、クエリなどを抽出し、次にそれらの参照関係を把握することで、機能内のデータの流れを把握します

【3.改修後のデータの流れの設計】
改修仕様で新たに必要になるデータを上記の「データの流れ」の上にどう配置するか、という視点で、各機能に必要な改造内容を設計します。

【4.改修仕様設計】
改修した結果、利用者にとってアプリケーションがどのように見えるかという観点から、(機能)仕様書を作成します。

【5.実際の改修とテスト】
上記の仕様書に基づいて、実際の改修とテストを行います。

これらの各ステップは、講師のレビューを受けてから次に進みます。特に 【4.改修仕様設計】のレビューに関しては、講師がお客様役となり「お客様に仕様を説明する」という研修も行いました。

〈注〉Accessには、「VBA(含 SQL)」「マクロ」「クエリ」「フォームのフィルタ(のSQL)」というように、ロジック(データの加工処理)を書くことができる場所が複数あるため、(それらを事前に絞り込めない限りは)未知のアプリケーションの解析には手間と時間がかかります。

②上流工程の一部の演習

実務未経験者が最初に担当する開発工程は「下流工程」(製造、テスト)だと思います。そして、一旦実務でその工程に入ってしまうと「お客様の要望」に直接触れる機会は極端に少なくなります。

そこで、「お客様の視点で考える」ということを体験してもらうために、(実務に入る前の段階で)「上流工程」の設計の一部を担当してもらう研修を行いました。これはまた、下流工程で「上流工程から渡される設計書」を見る目を持ってもらいたい、という意図もあります。

この研修の内容は、業務パッケージの設計開発の中の上流工程で、実際に行っていた過程の一部を切り出したものです。

演習は次のステップで進めました

【1.要求のヒアリング】
機能要求を受けて、お客様(に扮した講師)から要件をヒアリングする

【2.機能の整理】
要件を整理し、必要な機能を洗い出す。同時に各機能の入出力を整理する(I/O関連図)。

【3.フローの設計】
「機能の流れ」(画面遷移、状態遷移)の設計を行う。併せて画面のラフスケッチを作成する。

【4.仕様説明】
上記のラフスケッチを用いて、お客様(に扮した講師)へ仕様(使い方)を説明する。

この演習はここまでです。プログラミングは行いません。

講師は各ステップでレビューを実施するほか、お客様(に扮した)ヒアリングや説明の場では、お客様の立場からの「確認・説明不足の点への質問(指摘)」も行います。

この演習は「未経験者向け」ですので、最初から「一人で」設計できるとは限りません。ですから、2~3人でペアを組み、ホワイトボードを使いながら検討を進めてもらいました。また、ペアが複数あるときには、相互レビューを行うこともありました。

このステップでは、特に【3.フロー設計】がお客様にとっての使いやすさに大きく影響します。

例えば、「データベース(台帳)」に「追加、検索、更新、削除」する、といった(非常にシンプルな)アプリケーションであっても、次に挙げるような業務においては、それぞれ中心になる機能が異なってくるため、お客様に適した(便利な)「機能の流れ(画面遷移)」も変わってきます。

● 登録が中心:売上登録
● 検索が中心:マッチング(機材レンタル、店舗紹介)

※「更新が中心:預金」もありますが、ここでは省きます(この例は、主にバックエンド側の非機能要件を主体とした演習としていました)

ここに着目して、妥当なフローを検討します。

悪い例:お客様の行う操作の「想定」が抜けた結果、フローに異常な「大回り」が生じる

また、追加の要望を出すこともあります。

要望例:「検索結果に誤りがあったら、その場で修正したい」「新規登録と更新は同じ画面で行いたい」「利用者の権限による機能の利用制限」など

報告、スケジュール立案

上記の研修を通じて、研修生に対しては

①自身のステータス管理(進捗や問題点の把握)と報告
②工数見積もりとスケジュールの立案、進捗状況によるスケジュール変更

をお願いしていました(②は応用研修から)。

これらも実務において必要になるスキルですが、未経験者にとってハードルが高いものです。
ですから、研修の過程では「見積もりのための技術」なども含めて指導も行っていました。
(例:遅れの原因が作業時間確保ではなくスキルに起因する場合は、遅れが拡大することを予測する、など)

もちろん、最初から正確な見積もりは難しいですが、演習を進める過程で「自身のやっていることの把握」「作業の全体像とやるべきことの把握」ができるようになると、精度が上がってきます。

まとめ

以上のように、「実際の開発に役立つ」「実務に近い経験ができる」研修というものを考えて、

①基礎研修:データベースの基礎、機能の積み上げ、異常系、テストなど
②応用研修:改修、一部の上流工程など
③報告、スケジュール立案:ステータス管理と報告、見積もり

という研修を行ってきました。

なお、私は現在、この研修を実施する立場にありません。また、現在のIT業界で、エンジニア向けの研修としてVBAを扱うことが、ビジネスとして成り立つのかどうかもわかりません。ただ、この研修で目指していたものは、VBAだけでなく他の言語での開発でも役立つかもしれないと思っています。


この記事が気に入ったらサポートをしてみませんか?