2019年5月21日システムエンジニアって何してるの?システムエンジニアにはどういうキャリアがあるの?システムエンジニアとプログラマーは何が違うの?こういった疑問に答えます。これからシステムエンジニアを目指そうとしている人は、どういった職業なのかわからず不安だと思います。「システムエンジニア=プログラマー」と勘違いしている人も結構いるんですよね。そこで現役エンジニアである私が、システムエンジニアとはどういう職業なのか、またプログラマーとの違いを詳しく解説していきます。私はIT企業に丸5年勤めていて、上流工程から下流工程まで幅広く担当しているため、情報の信頼性は高いと思います。(上流工程や下流工程の用語もこれから解説していくので安心してください)では、早速見ていきましょう。目次システムエンジニアとは?システムエンジニアという仕事がある理由システムエンジニアは何をしているかシステムエンジニアが各フェーズですることシステムエンジニアとプログラマーの違いおわりに:システムエンジニアの今後システムエンジニアとは?システムエンジニアとは、一言でいうと「システムの上流から下流まで幅広くこなす人」のことをいいます。この説明だけだと伝わらないと思いますので、詳しく見ていきます。システムエンジニアという仕事がある理由そもそもシステムエンジニアという人はなぜ必要なのでしょうか?それは、「世の中の人がシステムを使って作業を効率化しようと思っているけど、自分では実現できないから詳しい人に全部やってもらいたい」という需要が世の中にあるためです。一般企業の人を例にイメージを見てみましょう。一般企業の人そうだ、お金を払って詳しい人にやってもらおう!つまり、「自分ではできないことを、その道のプロに頼んでやってもらう」という発想です。普段の生活でも同じようなことをしていますよね。歯が痛くなったら歯医者に行く髪が長くなったら美容院に行く資格取得のために学校に通うどれも「その道のプロ」にお金を払う代わりに価値を受け取っています。システムエンジニアは「システム開発をする」という価値を与えているということになるのです。システムエンジニアは何をしているか具体的にシステムエンジニアは何をしているのでしょうか。「プログラムを書いている」というイメージがある人も多いかもしれませんが、システム開発全体の期間で言うと、実はプログラムを書く期間はほとんどありません。テスト結合テストシステムテストこれらをわかりやすくまとめたのが以下の図です。この図は「V字モデル」と呼ばれ、以下のように見ることができます。いう単位を「フェーズ」と呼んでいます。フェーズを「下流工程」と呼びます。システムエンジニアは、この1〜7までを幅広く担当しているのです。いう単位を「フェーズ」と呼ぶことはわかりましたが、各フェーズでどのようなことをやるのでしょうか。要件定義とは先ほど例に挙げた「納品書をパソコンから印刷したい女性」を例に話を進めていきます。要件定義では、まず以下のようなことを決めます。納品書以外は印刷しなくていいのか?他の業務もパソコンで入力できるようにしたいか?どのくらいの費用を想定しているか?これは一部ですが、要件定義では「お客さんに話を聞き、どういったシステムにしたいかを明確にする」という作業を行います。資料を作成するというよりも、お客さんと打ち合わせをすることがメインになるフェーズです。要件定義を問題なく終わらせるには以下のような能力が必要になってきます。実現するシステムがどのくらいの費用になるかを見積る力これを見ると「けっこう大変だな」と思う人も多いと思います。要件定義が大変なのは事実で、「お客さんが今どういった業務をしているか」というのも正確に把握しなければならず、最初からできるものではありません。このフェーズをできるようになると、システムエンジニアとして高く評価されるようになります。最低でも5年くらいの経験がないと要件定義は難しいでしょう。基本設計とは基本設計は、要件定義で決めたことをもう少し具体化するフェーズです。要件定義では「パソコンから納品書を発行する」ということが決まったとすると、基本設計は以下のようなことを決める必要があります。納品書に印字したい項目は何か?納品書はどのようなレイアウトにするか?Excelから印刷するか?別の方法で印刷するか?さらに具体的になってきましたね。要件定義よりもお客さんと打ち合わせをする回数が減る代わりに、具体的に決めたことを設計書として資料に残していくことがメインになります。最低でも3年くらいの経験がないと基本設計は難しいでしょう。詳細設計とは詳細設計は、基本設計で決めたことをさらに具体化するフェーズです。ここで作成した資料をもとに、実際にプログラムを書くことができるレベルまで以下のようなことを詳細に決めます。納品書に印字するデータはどのように取得するか?例外処理はどのように行うか?処理の順番はどのようにするか?詳細設計の目的は「製作フェーズで問題なく実装ができるようにすること」なので、簡単な機能の開発だとやらないこともあります。企業によりますが、駆け出しのエンジニアは詳細設計フェーズか、次の製作フェーズから関わることが多いです。関わっていくようなイメージです。システムエンジニアとプログラマーの違いここまでで、システム開発の流れが理解できたと思います。システムエンジニアとプログラマーの違いは何なのでしょうか。フェーズを「下流工程」と説明しましたが、2つの職種の違いはこの「担当する工程の違い」です。簡単に表にまとめてみました。やらないつまり、違いはこういうことです。世間一般的には「プログラムを書く人=システムエンジニア」というイメージが強いように感じますが、実際にはその人は「プログラマー」と呼ぶのが正しいです。システムエンジニアはプログラムを書かないの?そういうわけではなく、システムエンジニアはプログラマーの仕事領域をさらに広げたイメージで、プログラムを書いたりもします。上流工程をメインに担当する人は「上流SE」と呼ばれていて、その場合は詳細設計から単体テストまではプログラマーに担当してもらうということが多いです。値段が安いため海外にプログラム開発を委託したり(オフショア)、開発者として海外のプログラマーを雇う(ニアショア)ということも進んできています。そのため、正社員は製作以外のところを担当し、製作はオフショアやニアショアをしている企業が増えていることも事実です。今後の世の中としては「AIによる仕事の自動化」「プログラム開発の外注化」というのがどんどん進んでいきます。「プログラムが書きたくてエンジニアになりました!」という人もいると思いますが、この先のIT業界で生き残るためにはプログラムが書けるだけではいけません。2020年度からは小学校でプログラミングが義務教育化もされ、どんどんエンジニアの人数が増えていくでしょう。なったとき、生き残る人は「替えのきかない存在になっている人」です。最初から替えのきかない存在になるのは無理ですが、そういった存在になることを目標にしているのとしていないのとでは、数年後の成長度がガラリと変わります。お客さんとしっかりコミュニケーションが取れる存在になりたければ上流SEを目指すのもいいですし、プログラミングが好きなのであればプログラミングを極めるのもいいです。目標を決めたら、「上流SEになるためにはどうしたらいいのか?」「プログラミングで生き残るにはどうしたらいいのか?」ということを考えて毎日行動することで、今後も生き残るエンジニアになることができるでしょう。みなさんも一緒に「替えのきかないエンジニア」になれるように今から頑張りましょう。nekojokerねこじょーかーぶろぐエンジニアブロガーねこじょーかーIT企業で働くエンジニア。20代〜30代の会社員に向けた「知って得する」情報を発信しています。独学で作ったWebサービス→LookmineQiitaも始めました。ねこじょーかーぶろぐ。