プログラマーとは?
プログラマーとは、「プログラミングする人」のことです。
システム開発をする際、一番、労力がかかる(人がいるところ)は、プログラムを書くところになります。
そのため、プログラマーは非常にニーズが高く、IT業界のファーストキャリアがプログラマーという方も多いです。
なお、プログラミング言語はいくつもあり、言語によって年収などが大きく変わってきます。
そのため、プログラマーとして働く上で、どの言語でプログラミングができるかは、非常に重要なポイントになります。
ちなみに、JavaプログラマーやCプログラマーといった風に、できる言語に因んで〇〇プログラマーという呼び方もありますが、語呂の問題もあってかCOBOLができるプログラマーのことはCOBOLerと呼びます。
エンジニアとは?
エンジニアとは技術者のことです。
特にIT業界に所属するエンジニアのことをシステムエンジニア(SE)と呼ぶことが多いです。
ここでよくある、質問を1つ。
「プログラマーだって、システム開発に関わるエンジニア(技術者)ですよね?」
ここが難しいところで、言葉の意味的な話をすると、プログラマーもエンジニアの一つと呼んで間違いないのかもしれません。
そもそも、システムエンジニアという職種の呼び方自体、微妙なところがあります。
一口でシステムといっても、様々なものがありますよね。
ERPシステムやコンビニなどのPOSシステム、あるいは銀行の勘定系システム、飛行機などの航空券システム、行政機関に目を向ければマイナンバーシステムなど、エンタープライズ系システムと言われる、非常に規模の大きなシステムがあります。
その一方で、スマートフォンアプリや、パソコン用ソフトなど個人利用の小さいシステムもいっぱいあります。
また、冷蔵庫やテレビなどの電化製品、あるいは車の制御システムなど、利用者があまり意識しないところで人知れず頑張っているシステムもあります。
昨今、注目度の高い人工知能(AI)も、本質的にはシステムです。
また、システムの構成要素という話をすると、多くの方がプログラミングして作られるソースコード部分に注目しがちですが、実際はソースコードを作っただけでは、システムの完成とは呼べません。
作ったソースコードを動かすためのハードウェア、例えばサーバなどの用意も必要です。
今どきのエンタープライズシステムだと、遠隔地接続が当たり前ですので、遠隔地接続用のネットワーク構築も行われます。
さらに別の視点をすれば、システムへの関わり方も様々です。
直接的にシステム構築をする方もいれば、システムを買ってくれそうなクライアントへの営業活動に赴き、デモンストレーションを含めて技術的な面からソリューション紹介を行う人もいるでしょう。
あるいは、納品したシステムの保守・改善に関わる方も少なくありません。
“システムに関わるエンジニア”は非常に多種多様で、実は会社や組織によって、同じ“システムエンジニア”という言葉でも、微妙に使われているニュアンスや業務領域が異なることも多いです。
そのため、担当領域を表す言葉を付けた〇〇エンジニアと呼ぶことも多いです。
例えば、担当システムにちなむ区分としては、Webエンジニア、AIエンジニア、組み込みエンジニアといったものがあります。
担当領域という視点で言うと、フロントサイドエンジニア、アプリ系エンジニア、ネットワークエンジニアといった呼び方があります。
業務内容という意味では、カスタマーエンジニア、サービスエンジニアなどの呼称が使われることがあります。
ただ、このような一般論的なエンジニアの区分は現場で厳密に行われているわけではありません。
1人で複数の役割を担っている方も多いです。
そして、このような業務の境界線が曖昧になった結果、一部の“プログラミングを行うエンジニア”とプログラマーの違いも分かりにくくなっています。
でも明確に、プログラマーとエンジニアは別物です。
その違いを事項では見ていきます。
開発工程からその違いを考証
プログラマーとエンジニアの違いについて、結論から言ってしまうと、やや暴論ですが、プログラマーはプログラミングする担当者、エンジニアはソースコード作成の管理者、という認識で良いと思います。
システム開発の流れは大雑把に説明すると、以下の5段階に分かれます。
①クライアントとどのようなシステムを作るか合意する
②システムの設計を行う
③システムを開発(製造)する
④想定通り作られたかテスト
⑤納品する
このシステム開発の流れを川の流れに例えて、どういうシステムにするか決めて設計するまでのフェイズを上流工程、実際の開発工程を下流工程に二分割することが多いです。
そして、一般的にはエンジニアを上流工程の担当者、プログラマーを下流工程の担当者として扱う場合が多いです。
もう少し現場的なことをいうと、設計したアプリケーション開発エンジニアだけで全てのソースコードを書くのは労力的に(技能的にもかも)難しいので、ソースコード作成を実際に進めてくれるのがプログラマー、という位置付けになります。
案件によっては、エンジニアは自分でソースコードを書かず、プログラマーが書いたソースコードの精査者兼進捗管理者という位置付けになることもあります。
つまるところ、プログラマーとアプリケーション開発のエンジニアはプログラミングができる、ソースコードが読めるという点では共通です。
しかし、プログラマーは「プログラミング“を”する」というところに特化した人材なのに対して、エンジニアは、いくつもある業務の中で「プログラミング“も”する」形になります。
ちなみに、プログラマーは、“プログラミングという手順がある領域”であれば、どのIT分野でも参画する可能性がある反面、ネットワークのようなインフラ周りの構築など、プログラミングという手順のない業務領域の場合は登場しません。
ネットワークエンジニアなどのインフラエンジニアたちが自分たちで上流工程から下流工程まで対応することも多いです。
プログラマーとエンジニア スキルの違いを解説
プログラマーとエンジニアのスキルの違いは、役割の違いから推測していただけるように、プログラマーはプログラミングの専門家として、プログラミングスキルを深化する必要があるのに対して、エンジニアは上流工程に対応できるよう、スキルを横展開していく必要があります。
プログラマーのスキルアップとは、より複雑なロジックが組める、新しいライブラリーに対応できる、プログラミングできる言語を増やす、といったプログラミングスキルの向上が基本です。
一方でエンジニアは、スケジュール管理を含めたマネジメント能力、クライアントを始めとするステークホルダーとのコミュニケーション能力、設計書や作業報告書の作成など、管理者的なスキルです。
もちろん、システムエンジニアですからITスキルも必要です。
ただ、プログラミングに関わるエンジニアであっても、自身の持つプログラミングスキルを高度化し、より複雑なロジックを組めるようになる、というよりも、プログラマーが作ったものをチェックするスキルや、設計に活用するために近年の技術動向を理解することの方が重要かもしれません。
また、プログラミング、つまりはアプリケーション開発に関わるエンジニアであっても、アプリケーションのことしか分からないようでは、高度なシステム設計ができません。
優秀なエンジニアを見ると、プログラミングができてアプリケーション開発部分を専門としていて、特に詳しいが、ハードウェア側のことも知識がある、といった風に、知識の幅が広い方が多いです。
ちなみに、一般的には、管理者的なスキルを持ったエンジニアの方がプログラマーよりも年収が高いと言われています。
しかし、非常に高度なスキルを持つプログラマーの中には年収2000万円以上の方もいらっしゃいます。
まとめ:あなたはどっち派?
最初からエンジニアとして新卒採用された方たちは別として、転職者など業界未経験者の方を見ていると、プログラマーとしてIT業界にデビューし、その後、キャリアを積んでいく中で、プログラマーからエンジニアに転向する方が出てくるように思います。
どちらが上、どちらが下というわけではありません。
スキルセットが異なるので、どちらのルートに進むかに合わせて、必要な技術を身に付けていきましょう。