プログラマとシステムエンジニアの違いを超わかりやすく解説!【現役SEが】

こんにちは。プロラボです。

この記事を書いている僕は、現役でシステムエンジニアをやっています。

現在31歳。毎日定時で帰って年収600万くらいです。びっくりするほど高収入なわけではないですが、それなりにストレスのない生活をしています。

システムエンジニアって良いですよ。

今回は、

[jin-iconbox15]
  • システムエンジニアとプログラマって何が違うの?
  • どっちを目指すべき?
  • どうやったらなれるの?
[/jin-iconbox15]

こんな疑問を解決します!

今回はいきなり結論を出すことができないので、以下の目次の通り順を追って解説していきます。

それでは早速いっていみましょう!

両方ともお仕事はシステム開発

まず最初に理解しておくべきは、システムエンジニアもプログラマも「システム開発」と言う仕事を行います。

システム開発はいつくかの工程に分けられて進められますが、ざっくり説明すると

  • 要件定義
  • 基本設計
  • 詳細設計
  • コーディング
  • テスト
  • リリース
  • 保守・運用

こんな感じです。

ちなみに要件定義~詳細設計までを「上流工程」コーディングから保守・運用までを「下流工程」とグループ分けしたりもします。

またシステム開発をマイホームの設計に例えるとわかりやすいので、それも交えて簡単にそれぞれの工程がどのような役割を持っているか解説します。

あなたが夢のマイホームをハウスメーカーさんに依頼するつもりで読んでみてください。

要件定義

「要件定義」はシステム開発で一番最初の工程です。

お客さんが求める機能をヒアリングし、要件定義書に書き起こして行きます。

例えば「LINE」のようなアプリの要件定義は、

[jin-iconbox05]
  • SNS機能がほしい
  • 写真を送信できる
  • グループでチャットが出来る
  • ユーザーがメッセージの受信に気づける
[/jin-iconbox05]

こんな感じになるかなと思います。

要件定義は基本的に複数回お客さんとミーティングを繰り返しお互いの認識をすり合わせていきます。

 

要件定義をマイホームの設計に例えると、

[jin-iconbox03]
  • 家の中の行き止まりを無くしたい
  • リビングでプロジェクターを使って映画をみたい
  • リビングの日当たりは確保したいけど一目が気になるので窓は少なくしたい
[/jin-iconbox03]

こんな感じかなと思います。

基本設計

「基本設計」は要件定義で書き起こした内容を元に、実際にどんなシステムになるのか設計をしていきます。

お客さんと意識合わせをする最後の工程でもあり、アプリのようなシステムの場合は完成イメージがわかる画面設計もここで作成します。

基本設計では出来上がったシステムの全ての機能が記されていることになります。

先ほどのLINEの例に例えると、

[jin-iconbox05]
  • チャット機能とSNS機能はタブで切り替える
  • 受信を気付かせるためにPUSH通知を利用する
[/jin-iconbox05]

こんな感じですね。

「基本設計」をマイホームの設計に例えると、

[jin-iconbox03]
  • プロジェクターを天井から吊れるように天井を補強する
  • リビングに窓を一つにし、吹き抜けを作りそこから明かりを取り込む
  • 廊下→リビング→キッチン→脱衣所→廊下へと移動できるようにする
[/jin-iconbox03]

こんな感じのことを記した図面に近いかなと思います。

詳細設計

「詳細設計」では「基本設計」で決めた機能をどうやって作るかより細かく設計していきます。

ここから先は専門的な内容になるため、お客さんは登場しません。

「詳細設計」をマイホームの設計に例えると、

[jin-iconbox03]
  • 天井を補強する素材は●●にする
  • 吹き抜けを作るために柱を4本設置
[/jin-iconbox03]

こんな感じです。

一般的にはここまでがシステムエンジニアの仕事になります。

コーディング

「コーディング」の工程では「詳細設計」を元にプログラミング言語を使ってソースコードを書いて行きます。

「実装」「M」「メイク」などと言われる場合もあります。

マイホームの設計に例えると、

[jin-iconbox03]建築士が書いた図面を元に大工さんが実際に家を建ててくれる工程です。[/jin-iconbox03]

一般的にここからがプログラマの仕事になります。

テスト

「テスト」では「コーディング」の工程で作り上げたシステムが、

  • バグはないか。
  • 設計通りに出来上がっているか。

などをテストします。

この工程はさらに細かく分けられており、それぞれが設計とリンクしています。

  • 単体テスト:詳細設計
  • 結合テスト:基本設計
  • 総合テスト:要件定義

こんな感じで、単体テストから総合テストへと下って行きます。

単体テストでは単一機能に対してのテストを行い、

結合テストは機能同士を組み合わせたテストを行い、

総合テストはより運用に近いテストを行います。

[jin-iconbox03]要するに細かいところから、徐々に大きな内容へとテストをしていくんです。[/jin-iconbox03]

「単体では問題なくても、機能同士を結合するとバグになる」ということがどんなシステム開発でも発生します。

未経験や新卒でソフトウェア会社に入社した場合、主にこのテスト工程を任されることがほとんどです。

ここから徐々に上の工程へとスキルアップしていくイメージですね。

設計通りになっていなかったり、バグが発生した場合はバグ票と呼ばれる状況報告書を起票し担当者へ渡します。

担当者はバグ票を見て、問題の個所を特定・修正したうえで再度試験を依頼する流れになります。

このような流れを繰り返し、バグを取り除いていきます。

「テスト」工程ばっかりはマイホームの設計に例えずらいですね。

強いて言うなら、ちゃんと電気は付くか?水はでるか?的なところでしょうか。

バグのないシステム開発はあり得ない

ちなみにバグの出ないシステム開発はあり得ないです。

もしバグ0でテスト工程を終えてしまった場合、テスト工程に問題あるでしょう。

またコーディングした行数によってどの程度バグが発生するか計算することもできます。

 

リリース

「テスト」工程で発生したバグをすべて取り除いたらいよいよリリースです。

完成したシステムがお客さんの手に渡ることになります。

システムエンジニアやプログラマにとって最も緊張する瞬間でもあります。

なぜならテストを行った環境とリリースした環境との違いでバグが発生するケースがあったり、そもそも「テスト」工程でバグを発見ん出来なかったケースなどがあり得るからです。

リリースしてからのバグは基本的に許されません。ほとんどの場合クレームにつながってしまいます。

[jin-iconbox03]マイホームの設計に例えると、家の引き渡しですね。[/jin-iconbox03]

保守・運用

リリースしたら終わりというわけではありません。最終的な工程として「保守・運用」が待っています。

システムが正常に動作しているか監視を続けたり、バグが発生していれば修正し新しいバージョンとしてリリースする必要があります。

[jin-iconbox03]マイホームの設計に例えると、アフターサービス的なイメージかなと思います。[/jin-iconbox03]

担当する工程が違う

というわけでシステム開発について解説してきましたが、

システムエンジニアとプログラマで担当する工程が変わってきます。

  • システムエンジニアは上流工程
  • プログラマは下流工程

と言った感じです。

システムエンジニアは建築士

システムエンジニアとはお客さんの要求に対して「どうやって作るか考えるお仕事」です。

マイホームに例えると建築士にいています。

お客さんの要求を理解し、ときには折衝力も求められるため、高いコミュニケーションスキルと幅広いITの知識が必要になります。

特にお客さんとやり取りするため、接客に近い外向けのコミュニケーションスキルも必要になってくるかなと思います。

プログラマは大工さん

一方プログラマはシステムエンジニア=建築士が設計した「設計書=図面を元にプログラミングをするお仕事」です。

マイホームに例えるなら大工さんに似ています。

プログラマのレベルによってコーディングのスピードも違いますし、レベルが高い人のコードは可読性が良く改良しやすかったり、同じ機能でもシンプルに書かれていたりします。

自分のコードに署名する人もいたりするなど、職人的な感覚がありますね。

システムエンジニアと違ってお客さんとコミュニケーションをとるようなスキルは要求されませんが、全くコミュニケーションスキルが無くていいというわけではありません。

基本的にプログラマは一人でプログラムを組むことはなく、チームでコーディングを行うのでチーム間でのコミュニケーションスキルは必須です。

給与の違い

ざっくりですが平均で、

  • システムエンジニア:560万程度
  • プログラマ:460万程度

となっており、システムエンジニアの方が年収が高い傾向にあります。

理由としては、「システムエンジニアは0から設計をする人」、「プログラマは設計通りに作る人」と言うのが一般的で、0から何かを生みだす方が比較的難しいからです。

難しいことをできる人の方が必然的に給料もあがります。

ただプログラマがシステムエンジニアよりも下というわけではなく、スキルを突き詰めスペシャリストのようになれば「引っ張りダコのプログラマ」となりシステムエンジニアと同様もしくはそれ以上の給料を得ることだって可能です。

システムエンジニアを目指すべき人とプログラマを目指すべき人

ざっくりいえば、

  • バリバリお客さんとコミュニケーションをとって、機能の設計をしたければシステムエンジニア
  • 仲間内のコミュニケーションで黙々とコーディングしたい人はプログラマ

と言った感じです。

システムエンジニアは機能を設計している時がとにかく楽しいですが、お客さんとコミュニケーションをとるため、ストレスを感じる場合も少なくないでしょう。

プログラマはシステムエンジニアに比べて責任が低く、比較的のんびりできるイメージですがその分給料が低い傾向にあります。

[jin-iconbox09]バリバリかのんびりかが一つの指標かなとおもいます。[/jin-iconbox09]

プログラマ、システムエンジニアになるには?

ちょっと悲報ですが、いきなり未経験からシステムエンジニアになることは難しいです。

NTTDATAさんの様な業界最大手のような上流階級なら別ですが、ほとんどの場合プログラマを経験し、徐々に仕事を覚えて上流工程であるシステムエンジニアに上って行く感じです。

結論、

[jin-iconbox03]まずはプログラマになって、徐々にシステムエンジニアになって行く[/jin-iconbox03]

と言った感じです。

ただし、システムエンジニアが自分に合わないなと思ったらプログラマの道を突き進めばOKだと思います。

独学で行き詰ったらプログラミングスクールもお勧めなので是非検討してみてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です