今回は、IT業界を目指そうと考えている方のために、SE(システムエンジニア)とPG(プログラマ)の違いについて解説しようと思います。
IT業界に就職した後の将来像について、なんとなくでも分かって頂けるかと思います。
SE(システムエンジニア)とPG(プログラマ)の業務範囲

大雑把にいうと、システムを開発する上に置いて、プログラミング以外の全てを担当します。
一般的な開発工程において、SE、PGの担当範囲は次の図の様になります。
よく、「SEは上流工程、PGは下流工程を担当する」と表現される場合があります。
ザックリ言うとその通りなのですが、もう少し細かく見ていくと、後工程には結合/総合テスト、納品、運用が続き、これらはSEの仕事になります。

詳細設計については、会社やプロジェクトによって、SEとPGのどちらが担当するかはケースバイケースですが、どちらかというと詳細設計をSEが担当するケースの方が多いと思います。
それでは、個々の工程について簡単に概要を紹介しておきましょう。
企画
業務が抱える課題に対して、どの様な対策を取れば良いか、その為にはどんなシステムが必要かを、顧客とディスカッションしながら纏めていきます。
また、必要に応じて要求仕様書(欲しいものリストみたいなもの)と呼ばれるドキュメントを作成します。
要件定義
顧客の要求に対して目的を明確にするとともに、要求を満たすために必要となるシステムの機能や仕組みの概要、システムの運用方法、開発人数や開発期間などをドキュメント化(=要件定義書)します。
基本設計
要件定義によって明確に規定されたシステムの機能を実現するための方法をドキュメント化します。
例えば、「データベースAから項目1と項目2に対して○○の処理を行い、その合計をデータベースBの項目3に格納する」などです。
ここで記述漏れがあると出来上がったシステムが正しい動作をしなくなるので、第三者による内容の確認(第三者レビュー)が行われることが普通です。
詳細設計
基本設計書の内容をプログラマーがプログラミングできるレベルにまで落とし込みます。
例えば「データベースAの項目1と項目2は1度の命令で取得し、○○の処理は項目1と項目2に対して並列で行い、結果を合計した後でデータベースBに書き込む。その際、3回失敗したらエラーを表示する」みたいに、より細かく、より具体的に処理を記述します。
プログラミング
詳細設計書に記載された内容を、指定されたプログラミング言語で記述します。
通常はコーディングルール(プログラムの書き方は人それぞれなので、後で第三者が見て修正しやすいよう、書き方をルール化している)があり、それに従ってプログラミングします。
単体テスト
プログラミングした成果物が、詳細設計書に記載されている通り動作するかを、テストデータを使って確認しします。一般的には、テスト内容と期待される結果を一覧にした「単体テスト項目書」を用いてテストを実施し、結果を「単体テスト成績書」に記載するという方法がとられます。
時には、テストごとに結果のスクリーンショットを「単体テスト成績書」に張り付ける事もあります。
結合テスト
基本設計書に記載されている内容が全て実装されていて、且つ正しく動作するかを確認するためのテストです。通常はSEがこの工程を担当し、「結合テスト計画書」「結合テスト項目書」「結合テスト成績書」などのドキュメントを作成します。
総合テスト
要件定義書に記載されている内容が全て満たされているかを確認するためのテストで、結合テストと同様に「総合テスト計画書」「総合テスト項目書」「総合テスト成績書」などのドキュメントを作成します。
このテスト工程も通常はSEが担当します。
納品
成果物をお客様に納品する作業です。形式的に、納品物として作成したドキュメント一式とプログラムソース一式をDVDに焼いて納品する事もありますが、通常はどこかの本番サーバにプログラムをインストールし、使える状態にすることを指します。
運用
本番稼動を迎えたシステムが問題無く顧客に使っていただけるようシステムを監視し、トラブル発生時の対応や顧客からの質問に答えるなどのフォローを行います。
システムエンジニアは主治医、プログラマは看護師

SEとPGには色々な例えがありますが、私は主治医と看護師に例えてみたいと思います。
主治医は患者さんに対して、日頃の体調や体の問題点などを把握しています。
そして、問題(病気)が発生したら、治療方針を立てて治療に当たります。
看護師は治療方針に従って薬剤を投与し、必要な看護を行い、経過を主治医に伝えます。
看護師のスキルは経験が浅い医者よりも病気の事や治療の事を熟知しており、且つ主治医の治療方針についても理解しており、時には主治医に助言することもあります。
こうやって、主治医と看護師は連携しながら患者さんの病気の治癒に取り組んでいくのです。
甲斐あって患者さんの病気が治っても、主治医と患者の関係は続きます。
どうでしょうか。SEとPGの関係にそっくりだと思いませんか?
SEが設計したシステムを、実際に動くプログラムにすべくPGがプログラミングを行います。
優秀なPGは経験の浅いSEよりもスキルが高く、設計書の不備を指摘したり、設計書に記載されていない細かい点まで考慮してプログラミングします。
そして、出来上がったシステムは、使われ続ける限り運用が発生し、SEがそれを担当する・・・
どうでしょう。
SEとPGは主治医と看護師に似てると思うのは、私だけでしょうか・・・・
システムエンジニアとプログラマの平均年収
厚生労働省が発表した賃金構造基本統計調査によると、令和元年(2019年)の会社規模ごとの平均年収は、従業員1000人以上の規模でシステムエンジニアが627万円に対し、プログラマは548万円でした。
また、会社規模に関係なく、プログラマよりシステムエンジニアの方が年収が高い傾向があります。

SE(システムエンジニア)とPG(プログラマ)では求められるスキルが違う

SEとPGの年収の差はどこからくるのでしょうか?
答えは、求められるスキルが異なるからです。
システムエンジニアに求められるスキル
コミニュケーション・スキル
SEは顧客に寄り添って、コミニュケーションを取りながら、顧客が気づいていない顧客が抱える真の問題を洗い出し、その解決策を考え、顧客に提案します。
時には顧客から無茶な事を言われることもあります。
そんな時は、出来ない理由を的確に説明し、代替案を提案して納得してもらう事も必要です。
また、コミニュケーションは社外だけではありません。
プロジェクトを推進するために様々な部署や担当者と打合せをし、物事を決めていかなければなりません。
PGに対しても、プログラムが納期通りに出来上がるよう、様々な配慮を行います。
このように、SE業務は顧客をはじめ社内外の担当者とコミニュケーションを図る機会が非常に多いため、コミニュケーション・スキルが必須なのです。
マネジメント・スキル
システム開発にはトラブルが付き物です。
顧客都合によるもの、開発メンバーのスキルに起因するもの、採用したパッケージやツールに起因するものなど、様々な要因で問題が発生します。
最初に引いたスケジュールが、何らかのトラブルで遅延していくことはよくあります。
SEはメンバーとのコミニュケーションの中で問題や課題を早期に発見し、対策を講じたり、後れを取り戻すためにメンバーの作業割り当てを変更したり、増員すべく関連部門や上司に掛け合うなど、プロジェクトの目標である品質、コスト、納期の全てが達成できるよう、さまざまなことを管理しなければなりません。
ITスキル
システムを開発するわけですから、ITに関するスキルも必須です。
データベースやサーバなどのハードウェア、セキュリティ、通信、ソフトウェア、開発ツールなど、その範囲は多岐に渡ります。
勿論、全ての内容を深く理解しておく必要はありませんが、概要は押さえておく必要があります。
概要といっても少しITに詳しい一般の方のレベルではありません。
当然ですが、一般の方のレベルよりもっと深い理解が必要です。
プログラミングスキルはあった方が良いのですが、必須ではありません。
プログラムでできること、できないこと、これくらいのことを実現しようと思ったら、どれくらいのプログラマーがどれくらいの時間を掛ければ実現できるのかが分かる程度のスキルは必要です。
ただ、プログラミングが出来ると、プログラマが不足した場合にその分を穴埋めできますし、若手プログラマに助言することが出来るので、スキルは合った方がベターです。
業務スキル
他のサイトではほとんど触れられていないようですが、業務スキルは非常に重要です。
といういのは、多くの場合は顧客の業務上の問題や課題を解決するためのシステム開発なのですから、顧客の業務を知っているかどうかで解決策の出し方が変わってきます。
また多くの場合、業務で使われている専門用語や概念、業務の進め方やルールなどは会社や部署によって固有のものがあります。
そもそも専門用語や概念が理解できていなければ、要求仕様書や要件定義書すら作れませんし、もし作れたとしても間違った理解によって、トンチンカンなシステムに仕上がってしまいます。
業務スキルを身に付けるのは一足飛びには出来ませんが、それだけに大切なスキルなのです。
プログラマに求められるスキル

プログラマーに求められるスキルは2つあり、プログラミングに関するスキルと、コミニュケーションスキルです。
プログラミング・スキル
プログラマーなのでプログラミング・スキルは必須です。
様々な言語を扱える必要はありませんが、何か1つの言語は熟知しておく必要があります。
プログラミングの考え方は、業種や作る対象物によって違う部分もありますが、基本は同じです。
ですから、1つの言語を極めていれば差分や違いを覚える事で他の言語もマスターできます。
参考までに、どんなプログラミング言語が人気なのかをランキングで見てみましょう。
日本では、1位がC/C++、2位がPython、3位がJavaScriptとなっています。

C/C++が1位になっているところは、にわかに信じがたいです。
通常、これらの言語はシビアなタイミングや処理速度が要求され、且つメモリ搭載量が少ない機器の制御に使われることが多く、利用シーンが限定的だからです。
私の感覚では、どう考えてもJavaやJavaScriptの方が需要が多いと思うので、きっとアンケートに偏りがあるのかもしれません。
一方、PYPLのサイトで公開されている世界のプログラミング人気ランキングでは、1位がPython,2位がJava、3位がJavaScriptとなっています。
Pythonが一位なのはAIが流行っているからだと思いますが、こちらの結果の方が私としては納得できます。

コミニュケーションスキル
SEほどではありませんが、プログラマにもコミニュケーションスキルは必要です。
システム開発は、SEとプログラマがチームを組んで進めていきます。
SEもプログラマも、自分の作業と期日が決まっていて、誰かの作業が遅れるとプロジェクト全体に影響します。
そこで、各自作業の進捗状況や発生した課題をプロジェクトメンバーが共有し、必要に応じてリカバリ対策を決定するための進捗ミーティングが、毎日もしくは定期的に行われます。
進捗ミーティングでは、自分の作業の状況説明や、進捗が遅れた時のリカバリー対策、或いは応援が必要な場合の意思表示など、最低でもプロジェクトメンバー間でのコミニュケーションが発生します。
SEの様に、社内での調整事や顧客との折衝を行うところまではしなくとも、プロジェクト内で意思の疎通が図れる程度のコミュニケーション力は必須です。
ちなみに、プログラマも経験を積んだリーダークラスになると、SEからの要請で顧客との打ち合わせに参加して意見を言ったり、何らかの調整事を任されることも多々あります。
プログラマーのスキルチェンジがSE

IT業界に入って、SEとPGのどちらを目指すべきか・・・そう考えるかたも多いかと思います。
会社によっては、プログラム経験をほとんどせずにSE教育されるケースもあります。
が、一般的にはPGで入社したとしても、徐々に後輩やメンバーの上に立つという役割を与えられ、やがてはSEとしての役割を任せられるようになります。
つまり、PGで一生終わるということではなく、どこかでSEにスキルチェンジしていくという事です。
これは、本人にとっても会社にとってもプラスです。
というのは、会社にとってはPGよりSEの方が高い単価で顧客に請求できるからです。
また、本人にとっても給料面でのメリットがあるわけです。
IT業界では文系の方が出世する

これは賛否両論あるかもしれませんが、私の経験上のお話です。
私が所属する会社が特別なのかもしれませんが、文系の方が出世して部長や事業部長になる確率の方が高いように思います。
何故かというと、理系はどうしても技術的なことが好きで、技術にのめりこんでいく傾向があります。
一方文系は理系に比べると技術的なことにそこまで拘りは無く、人間関係に重きを置く傾向が有ります。
役職が上がれば上がるほど、技術より管理能力や調整能力が要求されるため、文系はそちらの方向に力を入れるようになり、管理者としての能力を身に付けていくのだろうと思います。
ですから、将来出世したいのであれば、技術力を磨くと同時に、管理能力や調整能力を磨いていってください。
まとめ
今回は仕事の内容や必要なスキル、そして年収について、SE(システムエンジニア)とPG(プログラマ)の違いを解説しました。
PGで入社してSEにステップアップするというのがIT業界の王道です。
もしIT業界に就職するのであれば、まずPGでスキルを高めつつ、管理能力を身に付けて、SEを目指して頂ければと思います。