システムエンジニアとプログラマーはこんなに違う【IT企業社員が解説】

システムエンジニアとプログラマーはこんなに違う【IT企業社員が解説】 エンジニアの紹介
システムエンジニアとプログラマーはこんなに違う【IT企業社員が解説】

こんにちは。

この記事を読んでいるあなたは、

「システムエンジニアとプログラマーの違いって何?」
「自分はシステムエンジニアとプログラマー、どっちを目指すべきなの?」

このように思っているのではないでしょうか?

似ているようで違う役割のシステムエンジニアとプログラマー。

この2つの違いをしっかり把握しておかないと、実際にプログラマーやシステムエンジニアになったときに、「あれ、思ってたのと違うぞ・・・!」なんてことになってします。

そこでこの記事では、システムエンジニアとプログラマーの以下の内容に関して徹底解説します。

この記事を読んで分かること
・システムエンジニアとプログラマーの仕事内容、年収や将来性
・システムエンジニアとプログラマー、それぞれ向いている人の特徴
・システムエンジニアとプログラマーを目指すための方法

この記事を読むと、プログラマーとシステムエンジニアの違いや、あなたに向いている方を理解することができます。

最後までしっかり読んで、この2つに関して理解を深めてくださいね!

  1. [体験談]僕はシステムエンジニアとプログラマーをどちらも担当し、結果、システムエンジニアの道を選んだ
    1. 僕のシステムエンジニア経験: Webサービスのシステムエンジニア的役割 (現在)
    2. 僕のプログラマー経験: スマホアプリのプログラマーとして働いた(過去)
    3. 僕自身、システムエンジニアとプログラマーのどちらが向いていると考えているのか?
  2. システムエンジニアとプログラマーの違い
    1. システムエンジニア: とにかく人とコミュニケーションをとるのが仕事
      1. お客様から作るものをヒアリング、作るものを決める
      2. 「要件」や「仕様」と呼ばれる、何を作るか?を記載した資料を作る。
      3. 予算の見積もり
      4. プロジェクトの進捗度合いをレポート
      5. お客様から今後来るであろう要件変更の内容を予測する
      6. プログラマーに作るものを伝える
      7. パートナー企業とやりとりをする
      8. 対自社の上司や関係者に状況を共有する
      9. プロジェクトの進行管理をする
    2. システムエンジニアの仕事の特徴
      1. お客様の仕事内容や、作ろうとしているシステムで実現したいこと(ドメイン)に対する知識が必要
      2. 全体を俯瞰する能力
      3. 全体的にレベルの高い社会人の基本スキル
      4. (最低限度の)プログラミングスキルやシステムに関する知識
    3. プログラマーの仕事の概要
      1. システムエンジニアとの議論
      2. システムの設計
      3. 大きいタスクを小さい粒度に分割
      4. プログラミングの実施
        1. どのような修正を行うのか?の方向性を検討する
        2. プログラミングをする
        3. 他の人にレビューしてもらう
      5. テストの実施と、不具合の修正
    4. プログラマーの仕事の特徴
      1. プログラミング言語自体はもちろん、システムに関する深い造詣が必要
      2. システム設計の知識が必要
      3. 1つの物事への集中力
  3. システムエンジニアとプログラマーの年収と将来性、キャリアパス
    1. システムエンジニアとプログラマーの年収の違い
      1. システムエンジニアの年収
      2. プログラマーの年収
    2. システムエンジニアとプログラマーの将来性
    3. システムエンジニアとプログラマーのキャリアパス
      1. システムエンジニアのキャリアパス
      2. プログラマーのキャリアパス
  4. システムエンジニアとプログラマーに向いている人
    1. システムエンジニアに向いている人
      1. いろいろな人のバランスを取り続けられる人
      2. チームでプロジェクトを進めたい人
      3. これまで営業などの仕事をやってきた人
      4. 作るものを自分で決めたい人
      5. (補足)プログラミングがそこまで得意ではない人
    2. プログラマーに向いている人
      1. プログラミングが大好きな人、プログラミングを極めたい人
      2. 1つのことに集中力がある人
      3. とことんこだわって、追求できる人
      4. 慎重で、問題に気づける人
      5. 作るものは誰かに決めてほしい人
  5. システムエンジニア、プログラマーになる方法
    1. 独学でプログラミングを勉强する
    2. 好きなWebサービスやアプリを作る
    3. プログラミングスクールに通う
  6. [最後に]システムエンジニアもプログラマーもオススメの仕事
    1. Related Posts:

[体験談]僕はシステムエンジニアとプログラマーをどちらも担当し、結果、システムエンジニアの道を選んだ

[体験談]僕はシステムエンジニアとプログラマーをどちらも担当し、結果、システムエンジニアの道を選んだ

僕は過去、システムエンジニアとしてもプログラマーとしても働いたことがあります。

両方の仕事とも面白いのですが、僕の性格にはシステムエンジニアの方が向いていると思いました。

僕のシステムエンジニア経験: Webサービスのシステムエンジニア的役割 (現在)

僕は今、新規の企業向けWebサービスのシステムエンジニア的な役割で働いています。

新規事業で使うシステムの立ち上げ中で、お客様を含め、毎日試行錯誤しながら進めている状態です。

お客様は非常に理解のある方なので、やっていてつらいということはありませんが、やはり非常に気を遣います。

特にプロジェクトで問題が起きているときの報告は、毎回どのように伝えるか?に頭を使います。

そのまま伝えすぎてもお客様を心配させるだけですし、伝えなさすぎるのも後から問題が発覚した場合、問題になってしまいます。

社内のプログラマーも個性的なメンバーが多く、

「俺はこう思うからこう作る!」

という頑固な人もいたりして、作るべきものを伝えるのも一苦労です。

一日中喋り続けるので、その日のミーティングが終わる夕方6時や7時くらいには、もうグッタリ・・・なんてこともあります。

それでも、少しずつプロジェクトが進んでいくのを見るのは、非常にやりがいがあります。

僕のプログラマー経験: スマホアプリのプログラマーとして働いた(過去)

僕は大学を卒業後、新卒で携帯電話メーカーに就職し、プログラマーとして働いていました。

そこで作っていたのは、携帯電話自体のソフトウェアや、スマホアプリです。

一番最初は、携帯電話の画面で、各アプリ共通で使うライブラリ(便利機能)のようなものの開発でした。

開発するものは基本的に決まっており、プログラマーだった僕は、決められたものを毎日開発していました。
とは言っても、最初からうまくプログラマーとして働けていたわけではありません。

周りの先輩からボロボロに言われながら、どのように作るのか?の検討を行い、レビューを行います。

特に入社当初はそれほどプログラミングが得意でもなかったので、検討も大変でしたし、レビューにも人一倍苦労していました。

新人だった僕は、

「プログラマーってプログラミングだけじゃないんだ・・・。こんな仕事もするんだ・・・」

なんて思いながら、がむしゃらに仕事をしていたのを覚えています。

そのレビューを何とか終えると、次はプログラミングです。
プログラミングの作業自体は、一人で黙々とできるので「楽しい・・・!」と思ったのを覚えています。

僕自身、システムエンジニアとプログラマーのどちらが向いていると考えているのか?

僕は、「プログラマーの楽しさはこういう感じか」というところまでは理解することができました。

プログラミングで手を動かしつつ、ものを作っていくのは楽しいと思います。
今でも実際、プログラミングは好きです。

ただ、僕は、自分で手を動かすよりも、作るものを考える方が好きであることに気づきました。
そして、いろいろな人と仕事をする方が好きである事に気づきました。

僕はプログラミングで必要とされる非常に細かいところを突き詰めるよりは、全体をいかにうまく進行させるか?を考える方が向いていると感じています。

ですので、僕は今、システムエンジニア的なポジションで仕事をしています。

この記事はそんな僕自信がシステムエンジニアとプログラマーの両方をやった経験を踏まえて、それぞれの仕事の特徴や、向いている人を紹介しています。

システムエンジニアとプログラマーの違い

システムエンジニアとプログラマーの違い

それではまず、システムエンジニアとプログラマーの違いを説明していきます。

システムエンジニア: とにかく人とコミュニケーションをとるのが仕事

システムエンジニアは、実に多くの人と関わり合いができます。

ここでは、

・社外のお客様からシステム開発を受注した
・(社外の)パートナーとなる企業と共同で開発をする

というケースを想定して、システムエンジニアの仕事を紹介したいと思います。

お客様から作るものをヒアリング、作るものを決める

まず最初にやるのは、お客様にヒアリング、作るものを決める仕事です。

一般的に、お客様はシステムについて詳しくないこともあり、何がほしいか?が具現化されていません。

「何となくこんなものあったらいいな〜」

というレベルであることがほとんどです。

そこで、システムエンジニアはお客様からヒアリングを行い、本当に悩んでいるポイントが何か?を深く理解します

社内の業務プロセスや、社内部署の関係性、決済を出す人の性格など、ありとあらゆるものを把握します。

その上で、お客様が本当にほしいと思っているであろうものを提案します。

このステップを省略して、お客様から欲しいと言われたものを作ると、プロジェクトの後半になって、

「何か違うんだよなぁ・・・」

という反応が返ってきて、せっかく作ってきたものが台無し・・・なんてことにもなってしまいます。

「要件」や「仕様」と呼ばれる、何を作るか?を記載した資料を作る。

お客様の要望を聞いた後は、「要件定義書」や「仕様定義書」と呼ばれる、何を作るか?を記載した資料を作ります。

要件定義書と仕様定義書の違い
会社によって厳密な定義は異なりますが、
・要件:「やりたいことリスト」
・仕様:「システムがどのように動くかを詳細に記載した資料」
というイメージです。
ですので、一般的に要件定義書の方が粒度が粗いものになります。

システムエンジニアは、実際の開発に入る前に要件定義書の項目を、お客様と一緒に指差し確認をして、認識齟齬がないことを確認することもあります。

これをやっておかないと、後から「言った・言わない」の話になり、モメることもあります。

予算の見積もり

要件が大まかに出揃ったら、社内に持ち帰り、開発に必要な期間と金額を算出します。

一般的に予算は、

プログラマー1人が1ヶ月稼働する金額(単価といいます) x 実際に開発にかかる人月(合計何人のプログラマーが何ヶ月働けば完成するか?)

の式で算出されます。

この見積もりが出来た後、お客様と再度議論をし、この要件で問題ないのか?金額を減らしたりスケジュールを優先して対応する要件を減らすのか?という議論を行います

場合によっては、最初予定していた機能を削って予算やスケジュールを優先することもあります。

プロジェクトの進捗度合いをレポート

開発がスタートした後は、定期的にその進捗度合いをレポートします。

また、必要に応じてお客様の社内でやっていただく必要がある内容も共有・タスク管理をします。

具体的には、まだ決済が下りていない場合はいつまでに決済をしてほしいと伝えたり、新しい利用規約を作る必要がある場合は、その内容のすりあわせや検討の依頼を行ったりします。

お客様から今後来るであろう要件変更の内容を予測する

プロジェクトが中盤〜後半に差し掛かってくると、よくお客様から要件の変更依頼がきます。

ちなみにこの要件の変更は、ほぼ100%、どのシステム開発プロジェクトでも起きます。
これは、プロジェクトが後半になって具体的に動くものが見えてきたことにより、
・細かいポイントに気づきやすくなったこと
・プロジェクト開始当初に検討が漏れていた箇所が見つかること
こういったものが原因です。

この要件変更は、システム開発において致命的なダメージとなることもあります。
ですので、いかに要件変更が起きないようにするか?要件変更が起きるとするとどのあたりか?を前もって察知し、プログラマーに伝えておくのも、システムエンジニアの重要な仕事の1つです。

プログラマーに作るものを伝える

プログラマーに作るものを伝える

システムエンジニアは、社内のプログラマーに対して開発の依頼を行います。

その際、「要件定義書」などの資料をプログラマーに見せるだけだと伝わらないため、ミーティングなどを実施し、作るものを説明することになります

プログラマーはシステムエンジニアよりも、システムの詳細を作り込む必要がある分、よく細かいところに気づきます。

プログラマーから質問される、そういった細かいポイントをシステムエンジニアが回答できればシステムエンジニアがその場で回答をすることになります。
もし、システムエンジニアが判断できない場合は一度お客様と議論をして、仕様を決めることになります。

また、プロジェクト開始時にはどのくらい開発にかかりそうか?や、技術的な問題がどこにありそうか?リスクは何か?などをプログラマーと話すことになります。

パートナー企業とやりとりをする

社外に開発を担当するパートナー企業がいる場合は、いつまでに何を開発するか?などを相談します。

パートナー企業側でも何かシステムを作る場合は、自社とパートナー企業のシステム間をつなぐ仕様(APIと呼ばれます)を定義します。

また、お互いの開発状況や、起きている問題点の共有を実施するために、週に1回程度の定例を実施することもあります。

その定例の場では、お互いのシステムに関する不明点を質問したりすることもあります。

不明点の扱い方
Excelなどで「QA表」や「課題管理票」と呼ばれるものを作って管理することが多いです。

対自社の上司や関係者に状況を共有する

開発自体には登場してきませんが、自社の上司にも現在の進捗を理解しておいてもらうのは重要です。

もしシステムエンジニア自身では解決できない問題が起きた時、上司に何か行動をしてもらう可能性があるためです。
例えば、お客様から無知薬茶な要求がきている場合は、上司からその要求を断ってもらうこともあります。

そのため、システムエンジニアは、逐一、状況や進捗を報告します。
もし進捗が遅れていたり問題があった場合、人のアサインなどの相談をすることになります。

プロジェクトの進行管理をする

システムエンジニアは、プロジェクトの進行管理を行います。

これまでに説明してきたような、お客様の要望をヒアリングしつつスケジュールを立てるところはもちろんです。

さらに、プロジェクト進行中も、プロジェクトが問題なく進んでいるか?遅れている場合にはその遅れに対する打ち手も検討することになります。

もし発生している問題や遅れが深刻な場合、上司とかけあって人を追加したり、お客様と相談してシステム開発のスケジュールを延ばしてもらうことにもなります。

一般的に、システムが完成するスケジュールを延ばす場合、それが致命的なものであれば違約金が発生することもあります。
この違約金が発生するか?は、開発を行う前に締結する契約書に記載されていることがほとんどです。

システムエンジニアの仕事の特徴

システムエンジニアの仕事の特徴

それでは続いて、ここまで説明してきたシステムエンジニアの仕事の特徴を紹介します。

お客様の仕事内容や、作ろうとしているシステムで実現したいこと(ドメイン)に対する知識が必要

お客様は、基本的にシステムに関する知識はありません。
「やりたいことはあるものの、システム的にどのように実現したらいいかが分からない」という状態です。

そこで活躍するのがシステムエンジニアです。

お客様の言っていることを踏まえつつ、本当にお客様のやりたいことを理解し、最適な解決方法を提案をする必要があります。

そこで必要になるのが、お客様が何に困っているのか?今後どのように会社や事業を成長させたいのか?などに関する、深いレベルでの理解です。

深いレベルで理解できていれば、お客様から言われた言葉の背景や理由も汲み取り、より適切な提案ができるようになります。

「お客様に対する深い理解」はお客様と話していく中で自然と身についてくるものなので、システムエンジニアを目指すタイミングでは、特に気にする必要はありません。

全体を俯瞰する能力

プログラマーに求められるのが(この後紹介しますが)、1つの事柄を進める集中力です。

一方、システムエンジニアに必要なのは、全体を俯瞰する能力です。

システムエンジニアがプロジェクトの旗振り役をすることが多いため、プロジェクトの全体がどのような状態になっているか?どのあたりが問題になりそうか?などを理解している必要があります。

もし全体を俯瞰して、プロジェクトの進行を阻害しそうなポイント・すでに遅延しているポイントが見つかったら、システムエンジニアが率先して対策をとることになります。

全体的にレベルの高い社会人の基本スキル

システムエンジニアの仕事には、以下のような総合力が求められます。

システムエンジニアに必要とされる社会人の基本スキル
・お客様のやりたいことを想像したり、リスクを検知する「気付く力」
・システムの要件や仕様を分かりやすくプログラマーに伝えるための「ドキュメンテーション力」や「コミュニケーション力」
・状況に応じて上司に人をアサインしてもらうための「社内政治力」
・プロジェクトが予定通りに進んでいるのか?を管理する「プロジェクトマネジメント力」

プログラマーは、プログラミングに関するスキルが特に必要とされますが、システムエンジニアは総合力での戦いとなります

ここに挙げたような基本スキルがある一定レベル以上でないと、システムエンジニアとして活躍するのが難しいかもしれません。

想像力やコミュニケーション力の欠けたシステムエンジニアは、プログラマーから影で「使えない人」という烙印を押されてしまいます。

(最低限度の)プログラミングスキルやシステムに関する知識

システムエンジニアは、あまり自分でプログラミングをすることはありません。

とはいえ、お客様の言っていることをそのままプログラマーに伝えるだけだと、「伝書鳩」でしかありません。

お客様の言っていることをシステム的な制約などで実現が難しい場合、お客様とのミーティング時にNoを言ったり、代替案を提案する必要があります。

これをするために必要なのが、最低限度のプログラミングスキルや、プログラマーが作ろうとしているシステムに関する知識です。

プログラミングやシステムに関する知識があれば、お客様とのミーティングの場においても、

「この要求をOKしてしまうとデータ構造が大きく変わって、かなりの開発が必要になるので対応できないな・・・」

といった対応ができるようになります。

プログラマーほど深いレベルではないにせよ、システム的にできること、できないことを判断するための最低限度のプログラミングスキルやシステムに関する知識は必要です。

プログラマーの仕事の概要

プログラマーの仕事の概要

続いて、プログラマーの仕事に関して説明します。

システムエンジニアとの議論

客様とのミーティングを実施したシステムエンジニアと、作るシステムに関する、詳細な認識のすり合わせを行います。

システムエンジニアとプログラマーで同じ理解ができていない場合、想定しないものを作ってしまう可能性があるため、このすり合わせは非常に重要です。

週に数回のミーティングを実施して、この認識のすりあわせや、タスクの管理を行うことが多いです。

もし実現が難しい場合は、もう少し開発が簡単な要件や仕様にできないか?をシステムエンジニアと相談することになります。

プログラマーは、システムエンジニアから依頼されたシステムをそのまま作るだけではなく、「もう少しxxxの部分の仕様を改善したら、開発にかかる時間を大幅に短縮できる」という提案まで出来るとなお良し、です。

こういった提案の内容は、お客様やシステムエンジニアからは気づかないことも多々あります。
プログラマーからこの提案をすることで、開発にかかる予算もスケジュールも大幅に短縮できることがあります。

システムの設計

システムエンジニアが作った「要件定義書」や「仕様定義書」をベースに、どのようなシステムを作ったらいいか?を検討します。

これはシステムエンジニアがやることもあります (会社やプロジェクトによって異なる)

具体的には、コンポーネント図やクラス図、シーケンス図と呼ばれる、プログラミングをする前の設計図を作ることになります。

その設計図を作った後は、システムエンジニアや他のプログラマーとレビュー(確認会)を実施し、認識が合っているかを確認します。

この設計図を作る際は、

・プログラムをメンテナンスしやすいか?
・今後、お客様から追加で要望があったとしても、そのインパクトを最小にできることができるか?

こういったポイントも考える必要があります。

大きいタスクを小さい粒度に分割

大きいタスクを小さい粒度に分割

システムは非常に大きいことが多いので、プログラミングをする範囲も、少しずつ進めていくことになります。

ですので、「システムの開発完了」に向けて、作業内容を決めることになります。

一般的には大勢の作業に影響のある箇所、例えばデータ周りや、スケルトンと呼ばれる、全体の骨子から作っていきます。

プログラミングの実施

ここまできて、ようやくプログラミングを行います。

プログラミングで特に難しい箇所は、全力で集中することになります。

場合によっては、朝、チームでミーティングをやった後、夕方まで誰とも喋らずひたすらプログラミングをしていた、というケースもあるくらいです。

ちなみに、プログラミングをする際も、3つの状態に分かれます。

プログラミングを行うときのステップ
1: どのような修正を行うのか?の方向性を検討する
2: プログラミングをする
3: 他の人にレビューしてもらう

どのような修正を行うのか?の方向性を検討する

プログラマーの作業のうち、特に難しいのが1番の方です。

どのようなシーケンス(流れ)で処理が進むのか?どのような型でデータを保存するのか?などを決めることになります。

これがプログラミングをしている中で一番難しく、そのプログラマーの腕が試されることになります。

この作業は全力で集中する必要があるため、他の人から邪魔されたくないタイミングです。

ある程度、この流れやデータの保存方法が決まったら、一気にプログラミングをしていくことになります。

プログラミングをする

1のステップが終わっていれば、あとはあまり何も考えずにプログラミングをするだけなので、意外と簡単に作業ができてしまいます。

プログラミングは、プログラマーにとって最も達成感を感じられて、楽しい段階です。

人によってはお気に入りの音楽を聴きながら、一気にプログラムを書くこともあります。

ちなみに、プログラミングをしている段階で、要件や仕様が定義されていない箇所が見つかることがあります。

例えば2つのシステム間で通信を行う場合、サーバが落ちていた場合や、通信中にエラーが起きたケースなどです。

プログラミングは、システム的に起こり得る全てのケースを網羅したものになるため、システムエンジニアが見つけきれないケースを見つけることが多々あります。

プログラマーだけで仕様を決められない場合は、システムエンジニア (あるいはその先にいるお客様)と、どのような仕様がいいか?を相談することになります。

プログラミングが終わったら、その内容が問題ないか?を他の人にレビューしてもらいます。

他の人にレビューしてもらう

他の人からのレビューでは、

・そもそも方向性が合っているか?
・他の人と齟齬が発生していないか?
・第三者の目で見て、不具合となる箇所がないか?
・プログラム的に問題のある書き方がないか?

などの観点で見てもらうことになります。

このレビューで問題がなければ、その部分のプログラミングの作業は終わりとなります。

テストの実施と、不具合の修正

動作テストなどを行い、問題があれば修正します。

テストの実施自体は、システムエンジニアが行うこともあります。

テストや不具合の修正は、正直、プログラマーとしてあまり楽しいものではありません。

特に難しい不具合だと、1日かけても1つも解決できないこともあり、忍耐力が必要とされます。

システム開発の初期段階で発見される不具合は比較的容易に発見や修正が可能です。
一方、開発の終盤になると、

「100回、特定の操作を繰り返したら、1回発生した不具合」

なんてものも出てくるため、どのようなケースでその問題が発生するのか?を特定するだけでも大変です。

また、修正もこれまで作ってきたものと整合性をとる必要があるので、非常に難易度が高くなってきます。

プログラマーの仕事の特徴

プログラマーの仕事の特徴

それでは続いて、プログラマーの仕事の特徴を紹介します。

プログラミング言語自体はもちろん、システムに関する深い造詣が必要

プログラマーは、プログラミング言語自体に対する深い理解が必要です。
また、今作ろうとしているシステムの特性も理解できている必要があります。

・例えばint型の変数はどのくらいの数まで格納できるのか?
・今回作ろうとしているシステムは、その変数に大きい数字が入力されることはないのか?

など、プログラミング言語自体や、今回作ろうとしているシステムのことを理解しつつ、プログラミングができる必要があります

作ろうとしているシステムのことを理解できないプログラマーは、システムエンジニアから「手のかかるプログラマー」認定されます。

逆に、これができるプログラマーは、システムエンジニアから重宝されます。

システム設計の知識が必要

(システムやプロジェクトによってはシステムエンジニアが対応することもありますが)どのようなシステムにすると効率がいいのか?の知識が必要です。

プログラマーは、今後の拡張の可能性を考えつつ、システムの構成やデータの流れ方を検討することになります。

例えば、システムは見た目に関するところは変更が入りがちです。
これは、お客様からしても非常にわかりやすくコメントがしやすい(=文句を言いやすい)こと、そして時代の流れによって見た目の部分はトレンドがあるからです。

そんな見た目に関する部分と、データを保存するところを密に結合しすぎてしまうと、少し見た目が変わるだけでシステム全体が作り直し・・・なんてこともあります

なので、優秀なプログラマーは、見た目に関する部分とデータを保存する部分は出来る限り「疎な結合 (結びつきが弱い状態)」にしておきます

この見た目の話はあくまで一例ですが、この他にも、拡張性を考えた上でシステムの設計ができるスキルが必要です。

1つの物事への集中力

プログラマーは、プログラミング中はすさまじい集中力が必要となります。
途中で作業を止めてしまうと、そこまで考えていた内容を忘れてしまうからです。

プログラマーは1つの作業の区切りがつくまでの最低でも1時間から長い場合は3時間〜半日くらい、集中して作業ができる集中力が必要です。

難しい作業をしている間、トイレに行くのも惜しいくらい集中することもあります。

システムエンジニアとプログラマーの年収と将来性、キャリアパス

システムエンジニアとプログラマーの年収と将来性、キャリアパス

この章では、システムエンジニアとプログラマーの年収と将来性を紹介します。

どちらを目指すかを決める際は、年収と将来性も含めて判断するようにしてくださいね。

システムエンジニアとプログラマーの年収の違い

全般的に、システムエンジニアの方が高い傾向にあります。

特に日本の場合は、プログラマーを経験した後システムエンジニアになるケースが多いのも1つの理由でしょう。

今回、システムエンジニアとプログラマーの年収は、政府統計の「職種別きまって支給する現金給与額、所定内給与額及び年間賞与その他特別給与額」の数字を参考にしました。

システムエンジニアの年収

政府統計によると、システムエンジニア全体の平均年収は569万円となります。

これは日本全国の平均年収である約430万円と比べると、140万円くらい高い水準となります。

ちなみにこの金額は企業の規模によっても異なり、1000人以上の従業員がいる大企業で628万円、10人〜99人くらいの比較的小さい企業で537万円となります。

プログラマーの年収

同じく政府統計によると、プログラマー全体の平均年収は425万円となります。

これは、日本人の平均年収とほぼ同じくらいの水準といえるでしょう。

ちなみにプログラマーの場合、企業の規模によって平均年収が大きく異なります

1000人以上の従業員の大企業で547万円、10人〜99人くらいの従業員の比較的小さい企業で390万円となります。
その差は150万円くらいとなります。

特にプログラマーの場合、年収を上げるためのコツは、「いかに大きい企業に入社するか?」ということになりますね。

システムエンジニアとプログラマーの将来性

システムエンジニアもプログラマーも、現在、IT化が進む中、両方とも将来性がある状態です。

特に優秀な人材であれば、どちらの仕事をしていても求人が多数あります。

ですので、あなたの好きな方、あなたの向いている方を選ぶとよいでしょう

ちなみに、日本の企業においては、どちらかというとシステムエンジニアの方がマネージャーなど、役職がつきやすい傾向にあります

これは、システムエンジニアの方が人に対する仕事をすることが多かったり、プログラマーを束ねるような働き方が多いためだと推測されます。

ですので、もしあなたが今後課長や部長、マネージャーなどの役職につきたいと思うのであれば、近道はシステムエンジニアになります。

もちろん、プログラマーであっても優秀でコミュニケーション力が優れているのであれば、役職がつくこともあります。

僕の周りのプログラマーも、役職がついている人は大勢いるので、「プログラマーになると役職がつかなくなる!」とは考える必要はありません。

システムエンジニアとプログラマーのキャリアパス

システムエンジニアとプログラマーのキャリアパス

システムエンジニアのキャリアパス

システムエンジニアは一般的に、以下のようなキャリアパスが多いようです。

 システムエンジニアのキャリアパス
・最初にプログラマーとして働き、プログラミングスキルを身につけたりシステムの基本的な知識を身につける
・システムエンジニアとして働く
・マネージャーになったり、プロジェクトマネージャーやプロダクトマネージャーなどになる

システムエンジニアも、プログラミングのスキルやシステムの基本的な知識は必要です。

ですので、まずはプログラマーとしてキャリアをスタートする人が多いようです。

僕もこのキャリアパスです。

もちろん最初にプログラマーをやらなくてもシステムエンジニアになることはできます。その場合は、より営業寄りのシステムエンジニアになることが多いようです。

その後、システムエンジニアを経由して、人のマネジメントをやったり、プロジェクトマネージャー、プロダクトマネージャーのようにより広い領域を担当するキャリアパスがあります。

プロジェクトマネージャーやプロダクトマネージャーも、IT企業では年収1,000万円を狙える、オススメの仕事です。

プログラマーのキャリアパス

プログラマーのキャリアパスは大きく3つに分かれます。

プログラマーのキャリアパス
・1: プログラマーとしてエキスパートになり、極める
・2: プログラマーとして働き、マネージャーになる
・3: プログラマーからシステムエンジニアに転向する

プログラミングが大好きなプログラマーが一番好きなのが、「プログラマーとしてエキスパートになり、極める」という、専門家になる方向です。

一時代前までは、

「ある程度プログラマーとして経験を積んだ後はシステムエンジニアになるべき」

なんて言われていましたが、今ではその常識も変わってきています。

プログラミングの世界も奥が広いので、エキスパートを狙う価値は十分にあります。
そして、エキスパートになれれば、企業からの引く手あまた、という状態になります。

2つ目が、プログラマーとして働き、年齢を重ねた後に人のマネジメントをするケースです。

このケースでは、プログラミングをやりたい人がマネージャーになるケースが多いため、プログラミングをやりつつマネージャーもやる、プレイングマネージャーになるケースが多いようです。

少なくとも僕が勤めているIT企業では、プログラマーからマネージャーになった人は、例外なくプレイングマネージャーになっています。

3つ目が、システムエンジニアのケースで説明した、プログラマーで経験を積み、途中からシステムエンジニアに転向するケースです。

このキャリアのどれがいい、どれが悪いということはありません。
あなたの好みによって選んで貰えれば大丈夫です。

システムエンジニアとプログラマーに向いている人

システムエンジニアとプログラマーに向いている人

続いて、システムエンジニアとプログラマーに向いている人の特徴を紹介します。

システムエンジニアに向いている人

いろいろな人のバランスを取り続けられる人

システムエンジニアは、常にいろいろな人の間のバランスを取り続ける必要があります。

お客様の要望を受け入れすぎてもやることが増えすぎてプロジェクトが破綻します。
一方、プログラマーの言うことを聞きすぎてもお客様の要望を満たすことができません。

これはあくまで一例ですが、システムエンジニアは、こういった複数の関係者の間のバランスを調整できる人が向いています

バランスを調整するためには、

・それぞれの関係者の状況がどうなっているか?が分かっている
・今何を優先すべきか?という優先度が判断できている
・関係者間のパワーバランスがどうなっているか?を分かっている

など、プロジェクト全体の全体像が見えている必要があります。

チームでプロジェクトを進めたい人

システムエンジニアは、あまりプログラミングをすることはありません。

基本的に複数の関係者とプロジェクトを進めることになります。

システムエンジニアには、複数の関係者と1つの物事を進めることに喜びを感じる人が向いています

システムエンジニアが独りよがりになったら?
システムエンジニアも、もちろん重要な場面の意思決定は必要です。
ただ、それは関係者の意向を汲んだ上での最終的な判断です。
関係者の意向を組まないまま、システムエンジニアが勝手に物事を進めると、そのプロジェクトは破綻する可能性が高いでしょう。
(というのも、過去、僕自身も独りよがりになり、この失敗をした経験があるのです・・・)

これまで営業などの仕事をやってきた人

ここまで説明してきた通り、システムエンジニアは、プログラマー的な面と、営業的な面が混在しています。

もしあなたがこれまで営業など主に人と接する仕事をやってきているのであれば、その経験とスキルはシステムエンジニアになった後も活かせるでしょう

プログラマーからシステムエンジニアになる人は、一般的にあまりコミュニケーションがうまくない傾向になります。

あなたが人とのコミュニケーションが得意なのであれば、そんな「プログラマーからシステムエンジニアになった人」と差別化することができるでしょう。

作るものを自分で決めたい人

システムエンジニアは、お客様とプログラマーとの間に立ち、具体的に作るシステムの要件や仕様を決めていくことになります。

ですので、「作るものを自分の手で決めたい」という人には向いています

逆に、「作るものは誰かに決めてほしい」という場合は、プログラマーの方が向いているかもしれません。

もし「作るのものは誰かに決めてほしい」と思う人がシステムエンジニアになった場合、お客様やプログラマーの要望を聞きすぎてしまい、プロジェクトがうまく進行できない可能性があります。

(補足)プログラミングがそこまで得意ではない人

これは補足情報ですが、

「プログラミングの勉强をしたけど、他の人と比べてそこまで得意になれない・・・」

という人はシステムエンジニアを目指してみるのがよいでしょう。

ここまで説明してきた通り、システムエンジニア自身がプログラミングを行うことはあまりありません。

ですので、多少プログラミングが苦手だったとしても、システムエンジニアとしては十分活躍できる可能性があります

とは言っても、ある程度システムのことが分かっている必要があるので、プログラマーを数年やったあと、システムエンジニアになるというキャリアがよいでしょう。

プログラマーに向いている人

プログラマーに向いている人

続いて、プログラマーに向いている人の特徴を紹介します。

プログラミングが大好きな人、プログラミングを極めたい人

まずは何と言っても、プログラミングが大好きで、プログラミングを極めていきたい人です。

プログラマーは、仕事の時間のほとんどで、プログラミングに関する作業を行うことになります。

プログラミングが好きであれば非常に楽しいですが、あまり興味がない場合、非常に苦痛になってしまいます。

また、特にプログラミングに関連する技術の進化は早いため、仕事中はもちろんですが仕事が終わった後や、休日にも勉强できるような人がプログラマーに向いています

1つのことに集中力がある人

特に複雑なシステムでは、プログラミングの作業は、非常に難易度が高くなります。

そんな難しい作業をミスなく行うために、高いレベルの集中力が必要となります。

「プログラミングの勉强をしていたらいつの間にか夜になっていた!」

くらい、プログラミングの作業に集中できる人の方が、プログラマーに向いているでしょう。

とことんこだわって、追求できる人

プログラミングの作業は、実は、手を抜こうと思えば抜けてしまいます。

例えば、

・想定されるユースケースをあまり考慮せずにプログラミングをする
・本当はもっと効率のいいプログラムの書き方を検討できるのに、それをサボる
・すでに書かれているプログラムをちょっと修正することでプログラムの質が大幅に向上するのに、それをやらない

こういったケースが該当します。

同じプロジェクトのメンバーがレビューするとは言っても、指摘できる範囲には限りがあります。

それぞれのプログラマーがこだわりを持っていい品質のプログラムを書くようにすれば、作ろうとしているシステムのレベルは高くなっていきます

ですので、作業にとことんこだわって追求できる人は、プログラマーに向いている人ということになります

慎重で、問題に気づける人

プログラミングは、非常にレアなケースにも気付いて、1つずつ対処する必要があります。

「このケースは、もしかすると不具合が起きるかもしれない」

というように気づけるのは、いいプログラマーの重要な要素の1つです。

プログラマーが作業中に問題に気づけるかどうかで、プロジェクトの後半で出てくる不具合の数や、システムをリリースした後に問題になる可能性が全然変わってきます。

作るものは誰かに決めてほしい人

これは、システムエンジニアと逆のパターンとなります。

プログラマーは仕事の特徴上、自分で作るものを決めることはあまりありません。

どちらかというと、作るものは他の人に決めてもらうケースが多いでしょう。

もしあなたが、プログラミングの学習中に

「作るものを考えたり決めたりするのは苦手なんだよな・・・」

と思っているのであれば、実はプログラマーに向いている人なのかもしれません。

システムエンジニア、プログラマーになる方法

システムエンジニア、プログラマーになる方法

ここまで読んでくださったあなたは、システムエンジニアやプログラマーの仕事内容や、向いている人に関して理解できたのではないでしょうか。

続いてこの章では、システムエンジニアやプログラマーになるための方法を解説します。

システムエンジニアやプログラマーになるには、基本的にやるべきことは同じです。
システムエンジニアにしてもプログラマーにしても、プログラミングなどの基礎的なスキルは必要だからです。

システムエンジニアやプログラマーになるための方法
・独学でプログラミングを勉强する
・好きなWebサービスやアプリを作る
・プログラミングスクールに通う

独学でプログラミングを勉强する

システムエンジニアにしてもプログラマーにしても、プログラミングのスキルはある程度必要になります。

システムエンジニアとして働くにしてもプログラミングの経験とスキルがあるかどうかで、仕事のやりやすさが全く異なります。

プログラミングの上達のコツは、以下の記事にまとめています。

「プログラミングをどうやって始めたらいいかわからないよー!」

という場合は、こちらも合わせて読んでみてください。

好きなWebサービスやアプリを作る

ある程度プログラミングができるようになったら、あなたの作りたいものを作ってみましょう。

何故なら、プログラミングのチュートリアルばかりやっていても、本当のプログラミングのスキルは身につかないからです。

もし作りたいものが思いつかない場合は、以下の記事がオススメです。

プログラミングスクールに通う

この記事では何回も強調してきましたが、システムエンジニアになるにしても、プログラマーになるにしても、プログラミングができるだけでは戦力になりません。

プログラミングの他、チーム開発のやり方やシステムを設計するスキルなど、いろいろなものが必要になるからです。

これらのスキルを身につける上で特に問題になるのが、

「独学だと何からやったらいいか分からない」

という点です。

プログラミング自体は、オンラインの教材で勉强をすることで身につきます。
一方、オンラインの教材で勉强するだけでは、チームで開発をすることはできないですよね?

そこでオススメなのが、プログラミングスクールで実践的なスキルを身につける方法です。

僕は社会人になったタイミングでプログラマーになりましたが、正直、かなり苦労しました。

それは、どのようにシステムを開発するか?などの知識がまったくなかったためです。

この記事を読んでくださっているあなたには僕と同じような苦労をしてほしくないと考えています。
そこで、システムエンジニアやプログラマーになる前に、3ヶ月くらいの短期間で良いので、プログラミングスクールで学んでおいて欲しいのです。

知っているかどうか?で、実際にシステムエンジニアやプログラマーになった後の苦労の度合いが全く違います。

とはいえ、

「プログラミングスクールはたくさんありすぎてどこがいいか分からない・・・」

と思うのではないでしょうか?

そこで、以下の記事にあなたの目的に合わせたオススメのプログラミングスクールをまとめました。

これらのプログラミングスクールは、元システムエンジニア/プログラマーである僕が厳選したものばかりなので、安心して選んでいただけます。

特にいくつかのプログラミングスクールは、今だけキャンペーンをやっていたりするので、その機会を逃さないようにしてくださいね。

[最後に]システムエンジニアもプログラマーもオススメの仕事

[最後に]システムエンジニアもプログラマーもオススメの仕事

この記事では、システムエンジニアとプログラマーの比較や、どちらがいいか?をまとめてきました。

少しでもあなたの仕事選びの参考になれば、と思っています。

ちなみに、過去に両方とも経験したことがある僕の立場から言わせてもらうと、システムエンジニアもプログラマーも将来性抜群の職業です。

どちらもいいポイントがあり、これからよりIT化が進む社会において、非常に重宝される職業になります。

この記事を読んでくださっているあなたが、システムエンジニアとプログラマー、あなたの性格やスキルにあった方を選べることを、心よりお祈りしております。

この記事は以上です。
ここまで読んでくださり、ありがとうございました!

コメント

タイトルとURLをコピーしました