「プログラマ(PG)」と「システムエンジニア(SE)」の違い
予備知識
| 用語 | 意味 |
|---|---|
| ウォーターフォール型 | システム開発のやり方のひとつで、工程を1つずつ順番に終わらせていく やり方 |
| 上流工程 | システム開発において前半でやることになる作業 |
| 下流工程 | システム開発において後半でやることになる作業 |
ウォーターフォール型の開発では、全体の作業がいくつかの工程に分けられます。
一般的なのは
1.要件定義
2.基本設計
3.詳細設計
4.プログラム設計
5.プログラミング
6.単体試験
7.結合試験
8.総合試験
のような分け方でしょうか。

※各工程の中身が分からない人は、それぞれの用語の解説を ご覧ください。また、お仕事現場によっては一部の工程がなかったり工程の呼び名が違ったりします。そこら辺は、ゆるく捉えてください。
実は、これらの工程は大きく2つに分けられます。
それは
1.要件定義
2.基本設計
3.詳細設計
4.プログラム設計
と
5.プログラミング
6.単体試験
7.結合試験
8.総合試験
です。

開発の前半にやる
1.要件定義
2.基本設計
3.詳細設計
4.プログラム設計
は「考える作業」です。
頭をウンウン悩ませて「何を作る?」や「どう作る?」といった内容を決めます。

開発の後半にやる
5.プログラミング
6.単体試験
7.結合試験
8.総合試験
は「実際に作る作業」です。
「考える作業」で決まった内容をもとにして、プログラムを作ったり、作った物がおかしくないかテストします。

この2つに分類した工程のうち、前半の
1.要件定義
2.基本設計
3.詳細設計
4.プログラム設計
が上流工程です。
システム開発の作業工程を川の流れに見立てると、上流の方でやる作業ですよね。

後半の
5.プログラミング
6.単体試験
7.結合試験
8.総合試験
が下流工程です。
システム開発の作業工程を川の流れに見立てると、下流の方でやる作業ですよね。

お仕事現場によっては、区切り方が違う場合もありますけどね。
基本的には、そんな感じです。
それぞれの用語の意味
| 用語 | 意味 |
|---|---|
| プログラマ(PG) | システムを作るのがお仕事な職業のひとつで、実際のプログラムを作るのが仕事の人……だけど、状況次第ではいろいろやるよ |
| システムエンジニア(SE) | システムを作るのがお仕事な職業のひとつで、主に、どんなシステムにするか設計するのが仕事の人……だけど、実際にはいろいろやるよ |
似ているところ
どちらもシステムを作るのがお仕事な職業です。
違うところ
一般的には、作業の担当範囲が違います。
ものすごい大雑把に分類すると
プログラマ:プログラムを作る人
システムエンジニア:設計をする人
です。
プログラマさんの主な作業は下流工程です。
実際に手を動かすのが、お仕事です。

システムエンジニアさんの主な作業は上流工程です。
うんうん唸って考えるのが、お仕事です。

実際には、結合試験以降の大事なテストはシステムエンジニアが中心になってやることが多いですけどね。
プログラマさんが中心になってやる仕事は、詳細設計やプログラム設計から単体試験くらいまでが多いはずです。

あとは、プログラマよりもシステムエンジニアの方が、お給料が高い傾向にあります。
いろいろと理由は考えられますが、おそらくは
上流工程の方がミスるとヤバい
からです。
新作料理の発表会で考えるとイメージしやすいかもしれません。
新作料理の発表会において、料理がレシピ通りに作れませんでした。
どうしましょうか?
簡単ですね。
作り直せば良いだけです。
時間が足りなかったら、人を増やすとかの対応も考えられます。
それでは、レシピ自体が間違っていたら、どうでしょうか?
これは、もう、お手上げですよね。
一から考え直さなくては、いけないわけですから。
システム開発も同じです。
下流工程のミスは比較的、簡単に取り戻せます。
決して喜ばしい状況では ありませんけどね。
プログラムに不具合(バグ)があったとか、作るのが遅くて時間が足りないとかであれば、人を増やせば何とかなります。
一方で上流工程のミスは取り戻すのが大変です。
必要な機能が漏れていたとか、機能同士の関係性に矛盾があったとかが発覚すると考え直しです。
考える作業は人を増やせば何とかなるとも限りません。
しかも、間違った状態ですでに物を作っていたら、その作った物は全部、使えません。
工数が無駄になります。
そんなわけで、上流工程の方が責任重大な分、(ベテランがやることが多いから?)お給料が高い傾向にあります。
個人的な使い分け
あまり責任を負いたくないときは「プログラマ」を名乗ります。
偉そうに見せたいときは「システムエンジニア」を名乗ります。
冗談です。
システム開発の一通りの流れは経験しているので「システムエンジニア」を名乗っています。
ちなみに、プログラマやシステムエンジニアに限った話ではありませんが、IT系の職種は
自己申告制
だと思っています。
備考
システム開発の仕事に携わると、最初はプログラマから始まるのが一般的です。
他の人が作ったプログラムをテストしたり、他の人が設計したのを実際に作ったりするのが、お仕事です。
経験を積むに従い、作業の質と量が重くなってきます。
テストしかやらせてもらえなかったのが実際に作らせてもらえるようになり、簡単な機能しか作らせてもらえなかったのが重要な機能を作らせてもらえるようになったりします。
そして、あるとき「設計もやってよ」と言われるのです。
そこから先も似たようなものです。
作る仕事(プログラマ的な仕事)が中心だけど簡単な設計もやらせてもらえるようになり、そのうち重要な設計もやらせてもらえるようになり、設計が忙しくなるにつれて作る仕事(プログラマ的な仕事)をやっている暇がなくなったりします。
ですから、まぁ、その人が「プログラマ」なのか「システムエンジニア」なのかは
どちらを名乗っているか次第
です。
プログラムを作ったことがないのに「プログラマ」を名乗ったり、テストしかやったことがないのに「システムエンジニア」を名乗るのは、さすがに微妙ですけどね。
そうでなければ、自己申告な職業です。
人が足りなくてプログラマな人が設計したり、あるいはスケジュールが遅れていてシステムエンジニアな人が実際にプログラムを作ることも多々あります。
地続きになっている職業なので、明確に区別するのは難しかったりします。






