新卒や中途採用で新たにシステムエンジニア職についた皆さん、こんにちは。システムエンジニア歴15年超のKENです。
今回の記事では、システムエンジニアになって1年目~2年目にどんな知識やスキルを身に着けるべきか、 紹介します。
専門用語に慣れる
どこの業界でも同じようなものかもしれませんが、システムエンジニアになって最初の頃はやたら専門用語が飛び交って戸惑うことが多いかと思います。
- ウォーターフォールモデル
- UML
- デグレード
- プロトタイプ
- マイルストーン
- コンパイラ、リンカ、デバッガ
- 単体テスト、結合テスト、ホワイトボックステスト、ブラックボックステスト、ストレステスト
等々。
先輩や上司も当たり前のようにこれら専門用語を使って会話するので、慣れないうちはなかなかついていけません。聞けば教えてくれるかもしれませんが、わからない言葉が出るたびに話の流れを止めてしまうのも気が引けますからね・・・
このあたりは経験を積みながら、少しでも早く慣れるしかないです。下記にシステムエンジニアがよく使う専門用語についてまとめたサイトを貼っておきます。
設計の基本を学ぶ
「プログラマとシステムエンジニアの違いは何か」
と言えば、業界(Web業界、組み込み系業界、など)や会社によってもまちまちだし、統一された定義はありません。
一般的にはシステムエンジニアはただコーディング*1をするだけではなく、設計スキルを求められることが多いです。
- 要件定義
- 基本設計
- 詳細設計
など。
プログラミングの経験があれば詳細設計は直感的にわかりやすいですが、より抽象化された基本設計や要件定義などの上流工程は、最初の頃はいまいちピンと来なくて苦戦する人も多いです。
ユーザー(お客さん)
↓
システムエンジニア
↓
プログラマ(実際にコードを書く人)
上記のように、ユーザーとプログラマの間に入って、ビジネス上で必要な機能をシステム実装に落とし込むための橋渡しをするのがシステムエンジニアの役目です。
このあたりのことを学ぶには「ユーザー要求を正しく実装へつなぐシステム設計のセオリー」がわかりやすくまとまっていておすすめです。
スケジュール感覚を身に着ける
システム開発の仕事だけではなく、大抵の仕事には「納期」という言葉があります。嫌な言葉です。今このワードをタイピングしただけでも手に変な汗をかきました。
納期とはようするに、いつまでに成果物をお客さんに納品するのかを示す期日のことです。
- 3/31までにお客さんに納品しなくてはいけない
- トラブルを想定してマージンを持たせるためにも1週間前の3/24までにはテストを終えておきたい。
- ということは、テストに要する時間を考慮すると、2/28までには設計・コーディングを完了しておく必要がある
といった具合に、後ろから逆算する形でそれぞれの工程のデッドラインを決めていったりします。もし納期が厳しいようなら、
- 機能の一部を削る
- 納期延長
などをお客さんと交渉する必要も出てきます。
この交渉はあまりギリギリになってから言い出してもお客さんも困ってしまいますので、なるべく早い段階で見通しを立てなくてはいけません。
そのためにはある程度正確なスケジュール感覚が求められますが、
「Aという機能を実現するためには、設計、コーディング、テストでざっくりどのくらいの時間がかかるだろうか?」
という計算は経験の浅いシステムエンジニアにとって鬼門となります。
過去の同じようなプロジェクトのスケジュールを参考にしたり先輩から経験を聞くなりして、早めにこのスケジュール感覚を身に着けておくことをおすすめします。
基本情報技術者資格を取得する
「基本情報技術者なんて持ってても実務では役に立たない」
と言われがちですが、僕の考えは少し違ってて、
「せめて基本情報技術者試験合格レベルの知識を持ってないと、実務をこなすのは厳しい」
と思ってます。
さらに、
- 会社によっては資格手当が支給されるところもある
- 技術者としての評価が上がる
という特典付きなので、取っておいて損はありません。
1ランク上の「応用情報技術者」をできれば30歳前後くらいまでには取っておきたいので、基本情報技術者は新卒3年以内くらいを目安に取得を目指しましょう。
「午後はプログラミングの問題が出るらしいけど、言語は何を選べばいいの?」
という人は、下記記事を参考にしてみてください。
エンジニアとしての方向性を考える
一口にシステムエンジニアと言っても、
- Web系エンジニア
- 社内SE
- 組み込み系エンジニア
などなど、職種は多岐に渡ります。
さらに各々のエンジニアの中でも分野は分かれていて、例えば組み込み系エンジニアでも、
- 画像認識などのアプリ層を開発するエンジニア
- ハードウェア(センサー等)を直接制御するドライバー層を開発するエンジニア
では、必要とされるスキルや適性が変わってきます。
前者はC言語以外にもPythonやJava等の高水準言語を使うこともありますが、後者は低水準言語のアセンブリの知識が必要となってきます。
システムエンジニアなりたての1年目~2年目の頃は、自分はどの方面に興味や適性があるのか、そのためにどういった武器(スキル)が必要になるのか、エンジニアとしての方向性をざっくりと考えることが大事です。
とは言っても、会社から任される業務が必ずしも自分の進みたい方向の分野とは限らないので、その場合は将来に向けて独学で学ぶしかありません。
「業務に必要なスキルを覚えるだけでも大変なのに、プライベートでそれ以外の分野を勉強するなんて、そこまでモチベーションが持たないよ・・・」
という人もいるでしょうが、若手の頃と言うのは積極的にスキルアップのための勉強をしているだけである程度会社から評価されるという貴重な時期でもあります。
「現在の組み込み系の業務ではC言語を使って開発していますが、スキルの幅を広げるためにJavaを使ったAndroidアプリ開発の勉強をしています。」
などと、人事考課面談で自己アピールする材料を作るチャンスだと思えば、スキルアップ&評価アップで一石二鳥です。
*1:プログラムのソースコードを書くこと