TECHSCORE BLOG

クラウドCRMを提供するシナジーマーケティングのエンジニアブログです。

技術職新卒社員に技術研修としてJavaを学んでもらいました

2020年度、当社は5名の技術職の新卒社員を迎えました。 入社して1ヶ月ほどは総合職の新卒社員と一緒にビジネスマナーや当社の事業などについて学び、その後、5〜6月にはプログラミング基礎として株式会社クロノスが提供している Java 技術研修を受講しました。 この記事ではこの技術研修を通じて得た気付きなどについて、新卒社員自らの言葉で語ります。

株式会社クロノスでは様々な IT 研修・トレーニング サービスが提供されています。
すべての研修は「現役のエンジニア」が講師を務めており、
・魚を与えるような研修ではなく、釣り方を学ぶような研修
・現場で得たノウハウや技術といった経験値を織り交ぜ、使える知識を伝える研修
を目指して、研修内容、教材の工夫が行われています。

昨年から当社で導入していますが、先生が丁寧でサイコーです。
オンラインでも支障はなかったですし、オススメですよ。(管掌役員 岡村より)

目次

研修の位置づけ

当社では技術系新卒社員に対し、

  • 早期に戦力化、プロダクトにコミットできる状態になる
  • 2年目以降は自らが新卒社員を研修・指導する立場になる

ことを念頭に、1年間の研修スケジュールを策定しています。 お客様に持続的にサービスを提供するにはサービスを支えるエンジニアの量と質が重要であると考え、特に質を担保するために計画的に研修・指導を継続して行うことを重視しています。一部のスーパーエンジニアに依存するのではなく、エンジニア全体の技術レベルを底上げするためには、新卒1年目の研修・指導が肝要となるため、育成プロジェクト「Tadpole」として特に力を入れています。Tadpole はオタマジャクシ、ゆくゆくは立派な Frog に、という願いを込めています。

f:id:techscore:20200825091204p:plain

トレーナーには年齢、経験の近い入社2〜3年目の社員をあてています。これには以下の狙いがあります。

  • 1年目の社員にとって自分と状況が近いので
    • 1年生からコミュニケーションがとりやすい。
    • キャリアパスをイメージしやすい。
  • 2〜3年目の社員にとって
    • 指導側にまわることでスキルの深い理解が必要になり、復習することで理解がより深まる。
    • チーム運営やタスク管理の能力が身に付く。

また、1年間の育成期間を3つのフェーズにわけ、それぞれのフェーズで目的を定義し、それにそった研修スケジュールを組んでいます。

f:id:techscore:20200825091222p:plain

最初の Start フェーズでは、エンジニアとしての基礎的な力を習得するために、

  • 内部講師による基礎 IT 技術研修
  • 外部講師による Java 技術研修

を実施しました。外部研修ではアプリ開発、内部研修で基礎と Web システム全体を学習するという位置づけになっています。

Java 技術研修の概要

ここでは今回受講した Java 技術研修の概要について説明します。

まず最初の3週間で Java の基礎、Web アプリケーションの基礎について座学で学びました。 次の1週間で簡単な Web アプリケーションについて実装を行いました。この Web アプリケーションの大枠は事前に実装されていますが、未実装の箇所があり、これを実装することで全体としてひとつの Web アプリケーションとして動作します。

次の1ヶ月間では、チームでの開発について座学で学んだ後、他の会社から参加している研修受講者とチームを組み、チームでの開発を行いました。 そして最後に成果発表を行いました。

なお、新型コロナウイルス感染拡大防止のため、研修はすべてオンラインにて行われました。

case 1: 松田 直哉(マツダ ナオヤ)の場合

情報系大学出身。大学時代の専門はネットワーク。
アルバイトで1年間、PHP(Laravel)での開発を経験。 また、競技プログラミングで C++ を使用。
Java に関しては基本文法の if 文や for 文の書き方を知っている程度。

今回の研修で Java のクラスやオブジェクト指向の概念を初めて学びました。
チーム開発では5人のチームで Java のアプリケーションを作成しましたが、初対面の方たちとのオンラインコミュニケーションは、プログラミングや設計書を共同で作成するうえで、とても大きな障害となりました。 しかし「コミュニケーションが取りにくいならば取らなくても進むようにしよう」と考え、最初にできるだけ役割(リーダー、計画の立案、実行、期日の設定など)をはっきりとわけることで順調に進めることができました。

このことから始めにルールや役割をしっかりと決めることがオンラインのチームで業務を進めていくコツだと学びました。

case 2: 岸本 大河(キシモト タイガ)の場合

情報系大学出身。大学時代の専門はソフトウェア工学で、リバースエンジニアリングやフォワードエンジニアリングについて研究。
Python が好き。 PHP、Java、C、C#、JavaScript、Scala での開発経験がある。
SpringBoot を使って RestAPI を組んだことがあり、Java の基礎的な書き方を知っているが、クラスやオブジェクト指向の概念等は本で少し読んだ程度。

今回の研修では Java の基礎はもちろん、チームマネジメント能力やオンライン特有のコミュニケーション力を得ることができました。 プログラミングが初めてという方が多く参加しており、多少なりとも経験のある自分がチームをまとめる機会が多かったため、プログラミング以外について考えることに長い時間を費やしました。

リモートではどうしても文字でのコミュニケーションが多くなり、その内容が伝わっているのか不安になります。 そこで分報を取り入れて、困っていることや何をしているのかを共有したり、 会議の際にファシリテーターを用意してビデオ通話でも話しやすい空気を作ったりすることで、円滑に開発を進めることができました。 これらの経験により、コミュニケーションが取りやすい場を作り円滑にプロジェクトを進めることが大事だということに気づきました。 また、それがプロジェクトの成功につながるということが分かりました。

これらの力は今の業務にも大きく役立っており貴重な経験となりました。

case 3: 小林 連(コバヤシ レン)の場合

情報系専門学校出身。学生時代は主にJavaを学習。
Web アプリを複数人で作成したことはあるが、知識は基本構文を覚えている程度。

今回の研修を通じて、Java に関する基礎知識だけでなく、今後社会人として必要になるコミュニケーション能力と意識を得ることができました。

研修中に私は3つの大きな壁にぶつかりました。

  1. チーム開発の際、メンバー全員に自ら適時状況報告をするという意識が薄かったため、メンバー同士で認識にズレが起こった。
  2. 受講者全員がリモートでのコミュニケーションに不慣れで、打ち合わせや問題解決が円滑に進まなかった。
  3. フロントエンドの経験が無いため、自分のイメージ通りの見た目を追及できずに悔しい思いをした。

それぞれ以下のように対応しました。

  1. チーム内で規則を作り、定期的にチャットのグループで報告するようにした。
  2. 朝会を設け、1日のノルマを全員で考えるなど強制的に話す機会を設けた事により、徐々に自然とコミュニケーションを取る回数が増えていった。
  3. 今後自身に必要な技術だと思い、現在進行形で空いた時間を利用して自主的に学習を行っている。

これらの問題に取り組んだ結果、対面では気づきにくかった報連相で情報を共有する事の大切さ、文字だけで自分の考えや悩みを適切に相手に伝える工夫、 チーム開発時には最初の環境作りがその後の円滑なコミュニケーションに繋がることなど、多くの学び・気づきを得ることが出来ました。

研修での経験をしばしば思い返して、日々の業務に役立てています。

case 4: 岸本 和哉(キシモト カズヤ)の場合

情報系専門学校出身。
C、C#、Python、JavaScript などを使用して、ゲームやゲーム内 AI を作った経験はあるが、プログラミング言語に関する知識は基本構文を扱える程度。

元々は独学でゲームを作成していましたが、そのときは「自分だけが読めるコード」を書いていました。 機能ごとのクラス分けは行わず、オールフォーワンの精神です。個性豊かな変数名で、コメントだけでは飽き足らず、変数ひとつひとつを別の紙にメモしていたような気がします。

今回の研修では、コードや仕様書の作成の際に「他人の目」を意識することが大切であるということを学びました。 チーム開発において、他人が書いたコードを読む際に迷いが生じたり、個人作業を持ち寄った際に認識がずれていることが発覚するということがありました。 このことから、基本設計が大事であること、特に変数名など共通知識をドキュメントとして残すのが大事であると痛感しました。

ここで学んだように、あとから見た人、ともに作業する人にも理解しやすい、人に優しいコードや仕様書の作成を心がけたいと思います。

case 5: 松木 自然(マツキ ジネン)の場合

情報系専門学校出身。
PHP、Python、JavaScript、Swift での開発経験があるが、主にフロントエンドを中心に学習していたため、バックエンドの知識は浅い。

学生時代は主にフロントエンドを勉強しており、本格的にバックエンドを触るのは今回の研修が初めてでした。 そのため、どこでセッションに値を保持すればいいのか、どこに保持した値を渡せばいいのかなど、データの流れがイメージできず苦労しました。 しかし、研修資料を見返したり、個人開発などの演習を通して徐々にデータの流れがイメージできるようになり、バックエンドを実装することの楽しさを感じることができました。

個人開発研修では、技術面を中心にスキルが向上し、チーム開発研修では、チーム開発で必要になるコミュニケーションスキルやチーム間での細かな進捗報告など、徐々に求められるレベルも高くなり、やりがいのある密度の濃い2ヶ月間を過ごすことができたと感じています。 またチーム開発では、【要件定義書→基本設計書→機能実装→テスト】のように、実際の開発現場に近いフローで開発を進めることができ、開発現場に出る前にエンジニアとしての働き方をイメージすることができました。

2ヶ月という短い期間で、コーディング力・人に教える力・コミュニケーション能力など幅広くスキルを向上させることで、自信をもった状態で開発現場に向かうことができています。

研修受講者(新卒社員)のまとめ

今回の研修では Java の基礎から Web アプリケーションの作成などの実践まで、幅広い内容を学習しました。プログラミングだけではなく、他社からの参加者を含め複数人で協力しながらの開発を経験し、コミュニケーションの取り方やタスク管理などについて学習しました。 研修はフルリモートで行われたため、今まで経験してきた環境との違いに少し戸惑う場面はありましたが、新卒社員全員で協力、工夫し合うことで研修をスムーズに進めることができました。

研修内容としてはインプットすることも多かったですが、それだけではなく、チーム開発や成果発表などを通してアウトプットの重要性に気付かされたと感じています。

さいごに

新卒研修以降も OJT を中心とした育成が続いていきます。 OJT では、その時点で使っている技術や実践的なテクニックなど ad hoc な知識を伝えることに偏りがちです。(悪い言い方ですが)手垢が付く前にきちんと体系化された技術を学んでもらいたいという思いから、外部講師による Java 研修を受講してもらいました。 受講後の新卒社員から研修内容についてフィードバックを受け、先輩社員も自らの知識の古さに気付かされたりと刺激を受けています。

当社にはベテランから若い人まで様々な年齢、バックグラウンドを持ったエンジニアがいます。 エンジニア全員が活躍できるように、エンジニア全員が幸せに働けるように、何ができるか、どうしたらうまくいくか、エンジニア自らで考えて実践する。それを続けることで、幸せな情報社会の実現に貢献することができると考えています。