ポエム
教育
新人プログラマ応援

新入社員研修中のエンジニアによる新入社員研修中に関わる人のための新入社員研修に感じたこと

はじめに

新入社員研修について書きますが、自社の研修内容については社外秘なので書きません。当然ですが。
ですので、内容について参考にしたい、と希望を抱いてこの記事をご覧になっている方には期待はずれかもしれません、あしからず。

この記事では具体的に3つ、

  • 講師側が認識しておくべき新入社員のスキル
  • 新入社員が持っておくと便利な技術/知識
  • 運営が事前に確認/伝えておきたい項目

について感じること、思ったことを書いていこうと思います。


新入社員が持っている技術・経験の実態

弊社同期のエンジニアについて、というよりかは、新卒世代のエンジニアに共通している実態だと思います。
もちろん、面接の時点でこのスキルは必須、ここは別に見ていない、等の基準はあると思います。

そのため、エンジニア志望の学生〜入社直後までのスキルだと考えて頂ければと思います。

UNIXコマンド

エンジニア職で入社した学生が全員UNIXコマンドをある程度理解して使えているとは限りません。
「触ったことがある」くらいの人がほとんどではないでしょうか。

事実、大学の研究ではwindowsを用いることも多いですし、Visual Studioで完結してしまうことも多いため、linuxに触れていなくても不自然ではありません。
自分の出身大学でも研究室はひとつを除いてwindows機がデフォでした。(もちろん、仮想化してlinuxを入れていたりもします。マルチブートしているといった話は聞いたことはありませんでした。)

情報系以外の出身でプログラミングスクールでRailsやWordPressを経験してエンジニア職で入社する人も最近は多いと思います。
cloud9などを利用し、自前で環境構築をしていないパターンも少なくないのではないでしょうか。

これらを踏まえると、
研修時にインフラ、ネットワーク、その他環境構築から操作のスピードに差が出てしまいます。

流行りの人工知能のように、「Deep Learningって凄いんでしょ?○○くらいの機能ならすぐ出来ちゃうよね?」くらいの感覚で注文されては困るように、
「コマンド操作くらいはできる」を前提に内容が組まれてしまうと、操作の理解や慣れに時間が割かれ、結果として操作が事前に出来ていた人との差が大きく広がってしまいます。

技術力のボトムを揃えることが研修の目的とするならば、研修を行う側はこれらのことを考慮する必要があると感じます。


内定者時代のうちに、研修ではこれくらいのことをする予定です、と簡単に伝えておくだけでもフォローになると思います。

可能であれば、把握しておいてほしい事項は資料を作成して渡しておくだとか、薄めの本を一冊渡すくらいしてもいいのではないでしょうか。

内定者への負担になる、と考えられなくもないですが、研修で差が広がってプレッシャーからストレスを感じる方がマイナスですし、
内定者側としては、なにをするかもわからない、どのくらいのレベルを要求されるのかわからない、といった不安の方が大きいと思います。



今まだ就活中、それ以前の学生さんは、基本的な操作だけでも自然にこなせるようにしておくと、入社後に少し楽かもしれません。

経験言語

ここも重要なポイントだと思います。
普段から慣れ親しんでいる言語をもう一度文法から学ぶ必要がある、というのも苦ですし、
かといって全く知らない言語を1から学ぶことも、複数言語を触っていないと不安だと思います。

情報系学生パターン

最近はDeep Learningの流行でpythonやRを使う研究も増えているため、スクリプト言語に触れる機会も少なくはありませんが、画像処理やロボット、センシングではでは今でもC系が現役です。

大学は授業ではCしか教えないなんてことはザラで、選択の授業でもJavaに触れるくらいではないでしょうか。
これには利点もあり、ポインタの理解や、データ構造やアルゴリズムの実装をCで書く地獄の日々を送ることで、スクリプト言語に出会った際に感動を受けることができます。

しかしその半面、オブジェクト思考への馴染みが薄いことも多々あるでしょう。

自分にも言えることですが、オブジェクト指向は知っているがオブジェクト指向らしい書き方ができない学生/新人エンジニアは非常に多いです。

また、Web系の書き方やフレームワークに馴染みがない学生は非常に多いです。

ここをフォローするために、馴染みのあるCとの比較や、オブジェクト指向の概念から学ばせる等のステップが必要かもしれません。

他学科卒エンジニアパターン

情報系の学科ではCを教えることが主ですが、
一方でプラグラミングスクールでCやJavaを教えているところは少ないのではないでしょうか。

こちらではむしろRubyやPHP(WordPress)が主流で、ポインタや変数型についてあまり詳しくないほうが自然です。

C++やC#を業務に用いる場合、やはりポインタが一番の強敵になるのではないでしょうか。

また、複数の言語を経験している人は多くないと思います。

そのため変数の型を宣言せずに使用することに慣れすぎていたり、スコープの概念が曖昧であったり(特にPHPer)と、便利な言語の副作用が響いてくるかと思います。

しかし、MVCのフレームワークに触れていて、ディレクトリ構造やGET/POST、セッション等の理解は情報系の学生よりも進んでいることもあると思われます。

インフラ部分の知識が弱い反面で、表面的で実践的な部分に関しては強みを持っていると考えられるため、
データ構造だとかネットワークの部分を集中的にしてしまうと、日の目を浴びるまでにインプット量がオーバーフローしかなりの精神的な負荷が掛かってしまいます。

自分達にも強みがあることを感じさせるよう、研修生同士で何を得意にしているかを話し合う時間を
設けるだとか、彼らの得意とする分野(用語等)をチラ見せするだとかで、自分が学んできたこと、やってきたことが活かされると言う認識を与えることが大事だと私は思います。

基礎理論/技術要素

基本情報処理技術者試験を参考にすると、
基礎理論(2進数、情報量、計算量等)、アルゴリズム、ヒューマンインタフェース、マルチメディア、データベース、ネットワーク、セキュリティの分野に当たります。

この分野は研究で1項目触れるかどうか、くらいが普通なのではないでしょうか。

情報系の学生であれば、「単位が貰えるから」といった理由で基本情報処理技術者試験を受験していることもあるため、若干の知識をキープしていることもあります(私です。)が、
知識があっても実際に触れる機会は少なく、試験を受け合格していても時と共に記憶は薄れてしまいます。

またネットには資格なんて持っていても意味がないといった意見や、入社してから合格すると特別手当が貰えるからまだ待て、だとかで受けることを推奨しない意見もあるため、
そもそも知識のインプットをしていない学生も少なくはないでしょう。


プログラミングスクールから始めた人は、Webサービスを作るほうが楽しいですし、
わざわざ受験する人はかなり少ないと思います。



よって、この分野はなるべく実例を出しながら、可能な限り手を動かせる内容にすることが望ましいです。かなり難しそうですね。

nmaptracerouteなどコマンドで叩けるものを叩かせて、そこから、これはこういう意味で〜だとか、皆が見ているWebはこんな構造になっていて〜だとか、HTTPリクエストのヘッダにはこんな記述があって〜だとか、
「そんな資料作れるなら本にして出すわ」ってくらいの内容が研修を受ける側としては欲しいところです。





「そんな資料作れるなら本にして出すわ」





そう、それです。




そんな資料を作れるから、本にして出している人がいるはずです。

本を渡して下さい。



ちゃんと読みますから。



もしくは読む時間を与えてくれればわからない部分を教え合えますから。



正直、これに尽きると思います。

すべてを講師側が担うのではなく、講師はサポートで研修生に主体的に学んでもらうようなスタイルを一部取り入れて良いと思います。

説明が難しい分野は何事にも存在します。それならば、よく出来ている既存の資料に頼ってもいいと思います。(理解できず集中力が欠けて眠くなってしまうより建設的です)

わからない部分は教え合うことで、
わからない側は恥ずかしがらずに聞くことを学び、
教える側は人への教え方を学べます。

開発経験

実際にサービスを公開したことのある新入社員は、
そういったフィルタリングをしていない限り、少ないと思います。
私自身も、学科内向けに公開したものや、身内で使うために開発したものが精一杯です。

サービス開発をしていないことが悪ということでは決してありません。
研究が忙しかったり、作りたくてもアイデアがでないことはよくあります。

ですが、まだ学生であれば一度サービスの開発・公開までを経験してみるといいと思います。

実際になにかを開発することで、公開までに必要な様々な要素が見えてきます。
今までに学習してこなかった部分にも触れる必要が出てきますし、
想像していなかった問題に直面することもあると思います。

もちろん、Qiitaへの記事にしてもいいですので、何かしらのアウトプットをして、
他人に見せること、使ってもらうことが大事だと思います。



研修で簡単に何かを開発する体験をし、
それを実際に触ってもらってフィードバックを貰う、といった要素は絶対にあったほうが良いと思います。

チーム開発の方が経験が少ないため、gitを用いて開発することを望んでいる研修生も多いはずです。

ビジネスマナー

これに関しては学生がどれくらい外に出て活動したか、
どんな人生を歩んできたかに完全に依存すると思います。

エンジニアの新入社員の多くは、「外に出ないんだから別にいいだろ」と感じているかと思います。確かにそれもわかります。

しかし、筆者はエンジニアでもビジネスマナーは重要だと思っています。


某社から内定を頂いてそこのエンジニアと軽い面談(質問会)する機会があったのですが、
そこにセッティングされたエンジニアの方がはっきり言って最悪でした。

最初に2名の方とお話をさせて頂いており、その後にもう1名入室されたのですが、

  • 遅刻して入室 ( 謝罪なし )
  • 常にスマホ触ってる
  • 足を組み机に肘をかけ寄りかかった姿勢
  • フレンドリーという意味ではないタメ口

と、こんな始末でした。
しかもこれはどこぞの中小企業などではなく、
テレビでバンバンCMを流している東証一部上場企業です。

その会社からの内定はもちろん辞退しました。

外部との接点が少ないエンジニアであっても、
社会人である以上、最低限の常識/教養としてマナーが欠けているのは論外だと強く感じた瞬間でした。


採用担当にとっても、ビジネスマナーを身につけられていないエンジニアがいることはマイナスであることをしっかりと認識して欲しいです。

新入社員には、初めから身につけておく必要はありませんが、自分達のせいで会社全体に悪い影響が起こり得るという自覚があればいいと思います。

おわりに

私自身、まだ1ヶ月研修が続きますので、
今後も追記するかと思います。

あくまで1個人の意見に過ぎませんが。
運営/講師/研修生が全員納得し充実した新入社員研修が行われるための助けになれば幸いです。

異論反論アドバイス、募集しています。特に個人的にアドバイス募集しています。