「身近な課題を解決するところから始めれば良い」ウェルスナビ株式会社 岸田 崇志氏
GEEK JOB編集部
SE(システムエンジニア)とプログラマーって何が違うの?なんとなくは知っているけど具体的にはわからない。そんな疑問にお答えします。
プログラマーとSE (システムエンジニア) 。
両方よく聞く名前ですが、具体的にどう違うのかと言われると答えづらいですよね。
両方プログラミングを使って仕事をしているイメージですが、なぜ名前が違うのでしょうか?
調べてみても専門用語が多すぎて分かりづらいという人も多いかと思います。
そこで今回は、SE(システムエンジニア)とプログラマーの違いを仕事内容から年収まで含めて詳しく解説していきます。
目次
一般的な言葉でいうと、SEは開発の上流、プログラマーは下流を担当すると言われています。
ただし、これは単純にSEが上でプログラマーが下という意味ではありません。
まずは、この言葉の意味がわかるように、開発というものがどうやって進んでいくのかを理解しておきましょう。
まず、下の図を御覧ください
これは一般的な開発の流れを表した図になっており、上から下へ川が流れていくように進んでいくことから、上の方にある項目を上流工程、下の方にある項目を下流工程と呼んでいます。
基本的には、システム構築から下を下流工程と呼ぶことが多いです。
SEとプログラマーはこの流れの中で担当している業務が分かれており、SEが要件定義から詳細設計、プログラマーがシステム構築から運用までを行うとされるのが一般的です。
次の項目ではそれぞれで工程がどんなことをしているのかを解説していきます。
要件定義では「ユーザーやクライアントがどんなものを欲しているか」「システムを何の目的で作るのか」を整理し、そのためにはどんな機能を持ったシステムを作る必要があるのかを決めていきます。
例えば、みなさんがよく利用するTwitterの要件定義を行う場合は
・ユーザーが直接文章を投稿できる
・写真を添付することが出来る
・ツイートを検索することが出来る
・過去のツイートを遡れる
といったように、システムで何を実現しなければいけないのかを具体的にしていった上で、それをどんな技術で実現するのかを検討していきます。
要件定義は1人で行うものではなく、お客様と複数回のミーティングを行い認識をすり合わせながら決めていきます。
自社開発の場合は、マーケティングチームなど開発メンバー以外と開発チームの認識をすり合わせ、ユーザーのためにどんな機能を実装すればいいのかを明確にしていきます。
基本設計では「最終的にどんなものができあがるのか」を決定していきます。
画面のイメージを含め、要件定義で決めた機能がどのように実装されるのか。
ユーザーはどうやって使うのか、といった完成図の見本を作るイメージです。
ここも、開発者だけではなく、お客様が欲している完成イメージと合っているかしっかりとすり合わせながら進めていきます。
ここでお互いの認識がずれていると「お客様がイメージしていたものと最終的に全く違うものができあがった」という事態が起こります。
詳細設計では「基本設計で決めたものをどうやって作るか」を決めていきます。
各機能を実装するためにどんなプログラムを組む必要があるのかを考え、作業の工程を決めていきます。
詳細設計は、プログラマーがコードを書くための指示書の役割になるので、作成にあたりお客様とすり合わせをする必要は基本的にありません。
プログラマーを含めた技術者が理解できるものになっていれば大丈夫です。
一般的には、ここまでがSEの仕事と言われています。
ここからいよいよプログラマーの出番です。
詳細設計で指示された内容をもとに、実際にプログラミング言語を使ってコードを書いていきます。
まさに「手を動かしてシステムを作る」工程で、みなさんがイメージしているエンジニアの姿はここになるでしょう。
プログラマーの力量によって完成までのスピードは大きく変わりますし、どんなスキルを持ったプログラマーがいるかによって、会社全体でどんなものを作ることが可能なのかも変わってきます。
構築が終わったらテストを行います。
作り上げたものが実際にイメージ通りに動いているのかを確認していきます。
1つの機能ごとに確認していく「単体テスト」と、最終的なシステム全体をテストする「統合テスト」に分かれており、設計書を作成したSEが担当することが一般的です。
テストが終わればいよいよ実装です。
こつこつと作り上げたものを、ユーザーやお客様が使える状態に公開します。
自分たちが作ったものを世に出す。
SEやプログラマーにとって最も緊張する瞬間です。
実装したら終わりというわけではありません。
システムは常に動かし続ける必要があります。
スマートフォンアプリなども同様、公開した後もユーザーが快適に利用できるよう常に気を配っています。
バグは発生していないか、通信は正常に行われているかなどを常時チェックし、以上があればメンテナンスを行って対応していきます。
開発の流れと、SE・プログラマーそれぞれの担当範囲を解説させていただきました。
これで、SEは上流、プログラマーが下流を担当するとはどういうことかわかったかと思います。
次の項目では、SEとプログラマーがそれぞれどういう仕事内容なのかを、もう少しわかりやすく解説していきます。
SEの仕事は、一言で言うと「どんなものをどうやって作るか」を考える仕事です。
SEという仕事に対して黙々と作業をしているイメージを持っている方もいらっしゃると思いますが、実際は真逆。
どんなものを欲しているか明確にし、どんなシステムを作ればそれが満たされるのかをお客様と密にコミュニケーションを取りながら考えていきます。
システムの設計と考えるとイメージしづらいかもしれませんが、家造りにたとえてみると案外簡単です。
家造りは、お客様がどんな家に住みたいかの相談を受けるところから始まります。
「料理がしやすい家が良い」
「子供と遊びやすい家が良い」
「明るい雰囲気の家が良い」
「子供が小学校に入る前に住みたい」
といった要望が出てくるでしょう。
住宅会社では、建築士と呼ばれる人たちがこういった要望をヒアリングし、要望をもとに
「コンロが3つ以上あるキッチン」
「〇㎡以上のリビング」
「床と内壁は白をベースにする」
「来年の3月までに完成させる」
と、要望を叶えるためには家にどんな機能が必要なのかを具体的に設定していきます。
これがまさにSEで言う要件定義の仕事になります。
どんな機能を持った家を作るのかが決まったら、実際にどんなものが出来上がるのかをお客様とすり合わせていきます。
住宅会社では、どんな家が完成するのかの具体的なイメージが出来るように、3Dの完成予想図やミニチュアを作成します。
それを見ながら「コンロの位置をそれぞれもう少し離す」「床の色をもう少し明るく」「リビングはもう少し広く」といった細かい要望を聞いて、お客様のイメージと実際に出来上がるものが同じになるように調整していきます。
これがSEで言う基本設計の仕事です。
箇条書きでまとまっていた機能を、より具体的なイメージにしていきます。
ここまで終われば、後はお客様は完成を待つだけ。
ですが作る側の仕事はまだまだ続きます。
どんなものを作るかが決まったら、今度はそれをどうやって作るかを決めていきます。
簡単に言えば、プラモデルの説明書をすごくレベルアップさせたものを作っていきます。
木材をどうやって加工するか、インフラをどう通すかといったところまで設計していき、大工さんにパスします。
ここがSEでいう詳細設計の仕事。
お客様とすり合わせた完成イメージを、どういった作業工程で作り上げていくのかを、プログラマーが理解しやすい設計書にしていきます。
さあ、詳細設計が終わればいよいよプログラマーの出番です。
プログラマーの仕事は文字通り「プログラムを組んでシステムを完成させる」こと。
持てる技術をフル活用してシステムを実際に構築していきます。
家造りに例えればまさに大工さんのポジション。
どれだけ素敵な家をデザインしても、実際に組み立ててくれる大工さんがいなければ永遠に家は完成しません。
また、大工さんや建設会社によって加工できる素材や使用できる技術が違うように、プログラマーのスキルによってもどんなものが作れるかが変わってきます。
家を造っている現場を想像してみてください。
黙々と作業していることもありますが、大工さんは声を掛け合いながら仕事を進めていますよね。
プログラマーも同じです。
黙々と仕事をしているイメージがあると思いますが、人と話さないわけではないのです。
家造りを1人で行うことが少ないように、ほとんどの場合開発はチームで行います。
だからこそ、チームの中での連携や、それぞれが担当している箇所に問題はないかといった方法共有が非常に大切になってくるのです。
SEの仕事で最も大切なのはお客様とのイメージのすり合わせ。
技術的な能力よりは、どんな機能が必要かを提案するための幅広い知識や、お客様がどんなものを欲しているかを正確にキャッチする能力が求められます。
あわせて、プログラミングに関する知識も必要になります。
実際にプログラミングを行うことは殆ど無いですが、野球の経験がない野球監督がいないように、技術的な知識や経験がなければ、プログラマーが理解しやすい設計書を作ることもできません。
プログラマーに求められるのはとにかくプログラミングスキルです。
プログラマーとして生きていくのであれば、自身のプログラミングスキルは常に伸ばし続ける必要があるでしょう。
設計書通りに作ると聞けば簡単そうに聞こえるかもしれませんが、卓越したスキルを持っていないと作れないものもたくさんあります。
しかし、プログラミングスキルだけで仕事ができるわけではないのも事実。
先程も述べたとおり開発はチームで行うことが多いため、チーム全体で滞りなく仕事を進めるためにはコミュニケーション能力も必要です。
「SEとプログラマー、結局どっちが稼げるの?」というのは気になる人も多いでしょう。
賃金構造基本統計調査(平成29年)によると
SEの平均年収は563.6万円
プログラマーの平均年収は426.3万円
となっており、平均的にはSEの方が高額になる傾向があります。
これは、SEにはプログラミングの知識に加えて、全体を設計していく能力やITに関する幅広い知識や、お客様とコミュニケーションをとる能力も必要とされるためです。
また、SEを目指す場合は一度プログラマーを経て、ある程度技術を習得した上でSEの仕事に就く場合が多いので「入社1年目からSE」という人はそれほど多くはありません。
結果、SEという職種になった時点ですでにある程度給与が上がっている場合が多いため、平均収入にも差が出ています。
ただし、プログラマーがSEより稼げないというわけではありません。
プログラマーであっても、スキルを伸ばしつづけて需要の高い技術を習得すれば、1000万円以上の収入を得ることも可能です。
今回はSEとプログラマーの違いを説明しましたが、全ての会社でSEとプログラマーが分かれているわけではありません。
自社サービスを運営する会社などでは、全てのエンジニアが要件定義から実装まで一貫して担当する場合もあります。
今回ご紹介したような、構築を始める前に完成図までを決めきる開発手法は「ウォーターフォール型」と呼ばれています。
他にも、機能ごとに細かく構築とテストを繰り返す「アジャイル型」と呼ばれる開発手法もあります。
求人に応募する際に、自分がどんな業務を担当するのかが気になる場合は「どんな開発体制なのか」を聞くようにしてみましょう。
いかがでしたでしょうか?
一見するとわかりづらいSEとプログラマーの違いを、できるだけわかりやすくまとめてみました。
この記事を読んで、少しでもSEやプログラマーに興味を持った方は、ぜひGEEK JOBに遊びに来てみてください。
GEEK JOBでは、完全未経験の方が、プログラミングを学んでエンジニアに就職 / 転職するまでを完全無料でサポートしています。
体験会も毎週開催しているので、少しプログラミングに触れてみたいという方もぜひ参加してみてください!