IT知識ゼロですが、システムエンジニア(以下SE)を目指しています。
システムエンジニアに必要なスキルとは何だろ?
経験者に聞いてみたいです。
本記事の内容
- システムエンジニアに必要なスキル
- スキルの身に付け方
- 持っておくべき資格など
本記事を書いている僕は、過去にIT(SIer)企業やWEB会社に勤務しプログラマーやシステムエンジニアを経験。
そして現在、WEB系フリーランスとして活動中。
結論を言うと、システムエンジニアに必要なスキルは3つ。
- プログラミングスキル
- コミュニケーションスキル
- マネジメントスキル
上記スキルを備えていないと、システムエンジニアの仕事はこなせません。
なぜなら、システムエンジニアはシステム開発の「上流工程」に携わり、クライアントやプログラマーと関わっていくお仕事だからです。
この記事では、システムエンジニアとして必要なスキルをご紹介しつつ、そのスキルを得る方法などについて解説します。
システムエンジニアはプログラミングは必要ないの?と疑問に思う方も読み進めてくださいね。
どの程度の理解が必要かということも解説していますよ。
1.システムエンジニアに必要なスキル|プログラミングは必要!
冒頭でも話したように、システムエンジニアに必要なスキルは以下3つ。
- プログラミングスキル
- コミュニケーションスキル
- マネジメントスキル
順番に解説しますね。
1.プログラミングスキル
SEの仕事は、クライアントにヒアリングし主に設計書を作ることです。
参考システムエンジニアの仕事内容を実体験から詳しく解説!【就活時にも役立つ話】
とはいえ、SEにはプログラミングスキルは欠かせません。
その理由は以下の通りです。
- クライアントからの質問に即答できる
- (下請け)プログラマーのコーディングレビュー
- 理論的なスケジュールの組み立てができる
深掘りし順番に解説します。
1.クライアントからの質問に即答できる
SEがプログラミングのスキルがあると、クライアントからの要望に対し、実際にシステム化の「実現可否」の判断がすぐにできます。
もし実現が難しそうなのであれば「時間が掛かりそう」という判断もできます。
「どういう風にコーディングすれば良いか」
「どんなAPIを使えば良いか」
「使用するデータは?ファイルは?」...
SEの頭の中で、実際のコーディングをイメージしながら、システム化の構成を考えることができるのです。
しかし、SEがプログラミングスキルがない場合には、上記のようなコーディングをイメージした構成は考えることはできません。
ですから、クライアントからの要望に対し即答できない状況になるのです。
担当のプログラマーに確認しに行ったりしますから、時間的にもロスとなってしまいます。
何よりも、回答を待つクライアントのストレスも溜まっていき、エンジニアとしての信頼性も疑われることもあります。
実際に、クライアントがSEを飛び越えプログラマーのところへ来て、機能の実現可否を聞いている場面を見たことがあります。
さらに、プログラマーの結果を見て、外部設計書を作り直す始末...
こういう開発もあるとは思いますが、SEの立場を疑いましたよ。
2.(下請け)プログラマーのコーディングレビュー
プログラミング工程を下請けに発注した場合の、コーディングレビューもできるので、より高品質なシステムとなります。
例えば、
「誰が読んでも見やすいソースコードなのか...」
「保守性はあるのか...」
「コーディング規約は守られているか...」
設計書通りのコーディングができているかのチェックも当然のこと、上記のような観点でチェックすることができます。
命名規約、メソッド名、変数名などが決められた通りにできていないと、非常に読みづらいです。
また、意味のないロジック(デスロジック)や同一のロジックなどがあると、メンテナンスにも面倒なばかりでなくバグの原因となります。
ですから、ただ設計書通りにコーディングができて、システムが機能すれば良いということではありません。
その後のカスタマイズや仕様変更などにも耐えうるシステムとならなければ、後々大きな問題にもなりかねません。
過去に外注に作ってもらったシステムは、メンテナンス性に問題がありました。
同じロジックが色んなモジュールに組み込まれていて、カスタマイズが大変になるばかりでなく、バグをも生み出していました。
3.適切なスケジュールの組み立てができる
SEはプログラミング工程における、プログラマーのスケジュールも管理します。
SEの立場としては、チームリーダーとなる場合も多いので、各プログラマーの管理もしないといけないのです。
コーディングにxxx日、単体テストにxx日と...
しかし、SEがプログラミングスキルがないと、各機能を作り上げるための時間(日数)が正確に判断できません。
前述した「1.クライアントからの質問に即答できる」と同じで、SEの頭の中でロジック構成ができないからです。
ですから、本当にコーディングに必要な日数がプログラマーに割り当てられず、プログラマーのスケジュールがタイトになることにもなるのです。
そうなってしまうと、最終的に納期が遅れたり、低品質のシステムとなってしまう恐れがあるのです。
僕自身もプログラミング経験が浅かった時、スケジュールの組み立てが甘かったこともありました。
一部のプログラマーからひんしゅくを買った経験があります。
また、炎上する開発となってしまう要因の一つとして、このスケジュールの組み方のまずさが挙げられます。
どの程度のプログラミングスキルが必要か
まずは、プログラミング言語を一つマスターしておくことです。
オススメはJavaやPHPまたはPythonなどといったオブジェクト指向です。
(手続き型言語は上から実行されていくので割と解読しやすいですから、後回しでOK)
なぜオブジェクト指向かというと、例えばオブジェクト指向の利点として「大人数での開発による分業化がしやすい」こと。
クラス、インスタンス、カプセル化などオブジェクト指向のルールに則っていれば、その効力も発揮できます。
しかし、あまりオブジェクト指向がわかっていないプログラマーもいるわけですから、ルールに添っていないコーディングとなっていることもあるんです。
そんな時、システムエンジニアがきちんと指摘をしてあげないと、バグやメンテナンス性が低いプログラムとなってしまうんです。
また、システムエンジニア自らもプログラミングに携わるプロジェクトもありますよ。
プログラミングスキルが必要ない(重要視されない)企業もある
大企業のIT企業です。
特にSIer企業のトップ(元請け)ともなると、上流工程に携わり直接クライアントと「要件定義」を担当します。
「要件定義」では、クライアント側の要求を聞いてシステムに必要な機能をまとめます。
関連システムエンジニアとは?仕事内容など実体験から解説|就活時にも役立つ話
IT知識のないクライアントが見ても分かるような設計書を作るのが、SIer企業のトップ(元請け)の仕事になるわけです。
どのようにシステム化するか(具現化)は、後の基本設計(外部設計)以降となります。
ですから「要件定義」段階ではプログラミングスキルは重要視はされないんです。
むしろ、SIer企業のトップ(元請け)ともなると、プログラミングスキルよりも以降で解説する「コミュニケーションスキル」「マネジメントスキル」が重要です。
2.コミュニケーションスキル
コミュニケーションスキルの役割は以下のとおり。
- クライアントとのヒアリングで必要な機能漏れも防げる
- プログラマーに対する指示なども明確にもなる
クライアントとのヒアリングで必要な機能漏れも防げる
クライアントにヒアリングするなかで、クライアントにとっては業務上当然のことだからあえて言わないこともあるのです。
(決してクライアントのSEに対する意地悪ではありません)
しかし、SEにとってはクライアントの当然だとすることが分かりません。
もしそのまま設計をしてしまうと、クライアントレビューの中で漏れが発覚し、余計な手直しが必要になります。
ですから、SEはクライアントの要望に対して、システム化を構想しながらその影響を考えます。
もし何か影響があるようであれば、その都度クライアントに確認しなければなりません。
僕が経験したデータ移行のシステム開発では、全てのデータが正常に移行できないことがデータ調査時に発覚しました。
システムでうまく移行できるデータと、できないデータがあることをクライアントに伝えることで、設計作業にかかる工数の見直しなどしてくれましたよ。
クライアントとのヒアリングの中で、クライアントの要望をただ聞いて設計に盛り込むことは厳に謹みたいところです。
プログラマーに対する指示が明確になる
プログラマーへの指示を設計書だけではなく、SEから口頭の説明もあるとプログラマーは的確にプログラミングができます。
設計書の中には不明瞭な記述や、どう捉えたらよいかわからないプログラマー泣かせの記述があるからなのです。
例えば、以下のようなものがプログラマー泣かせの設計一例です。
- ダラダラと何枚もの設計書があるにもかかわらず、全体概要なく分かり辛い
- 図表がないから直感的に理解しにくい
- 関数呼び出しについて「xxx仕様書参照」としか書かれていないもの(引数の設定が不明)
詳細設計書を細かく書きすぎたり、逆に簡略化しすぎて理解し辛いものや、悩んでしまうものが多いです。
ですから、SEの方からプログラマーに仕様書を渡すと同時に、口頭での補足説明が必要です。
そうすることで、プログラマーの設計書で悩む時間も減りますし、勘違いもなくなるため無駄なバグも防げます。
設計書があるからプログラミングはできる。
とはいえ、やはりSEからプログラマーへの口頭での説明は、製品の品質を確保するためにも必要です。
最後に、プログラマーを束ねる「チームリーダー」として必要なスキルをご紹介します。
3.マネジメントスキル
SEであれば、プロジェクトチームのリーダーに立ってプログラマーを引っ張っていきます。
全体のプロジェクトが遅延なく、かつ若手プログラマーの育成環境をも整えていきます。
ですから、プログラマーなどのエンジニアを管理するスキルが必要となります。
しかし、プログラマーにもスキルがある者とない者がいますから、プログラミングの作業進捗は様々です。
例えば、あるプログラマーが作業が遅れていたりすると、フォローやカバーリングに入れるプログラマーをアサイン(割り当てる)したりすることも必要です。
また、経験の浅いプログラマーを教育する必要があるので、ベテランプログラマーの近くで仕事させるなり工夫も必要です。
とにかくSEは自分の仕事のことだけではなく、周りのエンジニアの仕事の状況に対し常にアンテナを張っておくことが大切です。
2.システムエンジニアに必要なスキルの身に付け方
結論をいうと、プログラマーを経験することが早道です。
理由は、プログラミングに携わることで、自ずとプログラミングスキルが身につきます。
また、システムエンジニアの作る「設計書」に目を通すことから、どんな風に設計し書けば良いか分かります。
さらに、システムエンジニアとコミュニケーションをとっていくことで、コミュニケーション能力も養われていくのです。
ですから、システムエンジニアになるために、特別に何かを学んだりすることはありません。
まずはプログラマーとなって、見習うべき上司や先輩などから、システムエンジニアとして必要なエッセンスを吸収すれば良いだけです。
そのためには、まずはIT企業などに採用される必要がありますよ。
とはいえ、未経験からのプログラマーはキツイことがいっぱいです。
キツイことが多く、辛くて挫折することを回避するためにもあらかじめプログラミングを学習しておきましょう!
≫目的別におすすめな未経験者のためのプログラミングスクール|現役エンジニアが厳選
3.持っておくべき資格など
システムエンジニアとして持っておくべき資格は「応用情報技術者」資格です。
「応用情報技術者」は、IPA(経産省が管轄する情報処理推進機構)が主宰する、情報系の資格試験です。
ではなぜ「応用情報技術者」なのかというと、システムエンジニアとして知っておくべき知識を得ることができるからです。
プロジェクトマネジメント手法やシステムの開発手法、さらには技術的なネットワーク技術やデータベース技術など、システムエンジニアとして活躍するための基礎知識が学べます。
多くのIT企業でも、システムエンジニアとして「応用情報技術者」取得を推進していますよ。
...しかし、未経験からプログラマーを目指すのであれば、まずは「基本情報技術者」資格の取得をオススメします。
未経験なら「基本情報技術者試験」から取得しよう!
「基本情報技術者資格」は「応用情報技術者資格」の1ランク難易度が低いプログラマーレベルの試験です。
試験内容も「応用情報技術者資格」とほぼ同じ内容ですが、あまり深いところまでは問われません。
関連【基本情報技術者試験の難易度や合格率】他の試験と比較し解説します!
また「基本情報技術者」試験では、プログラミング試験があるということも特徴です。
自分のプログラミング知識がどれほどのものなのか試すことができますよ。
資格試験の学習は、仕事をしながらとなると時間もあまり取れないため非常にキツイです。
ですから、比較的時間に余裕のある大学生などは早めに取得しておくと良いです。
「応用情報技術者」や「基本情報技術者」資格を持っていることで、転職にも有利になったり、資格手当がもらえるなどお得にもなりますよ。
関連基本情報技術者試験|取得する6つのすごいこと!キャリアアップや就職・転職にも有利!!
関連基本情報技術者試験まとめ|IT知識ゼロから合格を目指す!
まとめ:まずはプログラマーを目指そう!
システムエンジニアに必要なスキルは全部で3つ。
- プログラミングスキル
- コミュニケーションスキル
- マネジメントスキル
プログラミングスキルがあることで、システム開発の円滑な遂行と品質の高いモノづくりができます。
その他にもSEとして、コミュニケーションやマネジメントスキルも必要です。
クライアントのシステム化に対する要望を細かく引き出したり、システム開発のリーダーとしてプログラマーなどのメンバーを管理していかなければなりません。
まずはプログラマーを目指し、経験を重ねながらシステムエンジニアとして活躍するためのスキルを得ていきましょうね!