システムエンジニアとプログラマーの仕事内容と違い【キャリア選択の必須知識です】

一般的に「システムエンジニア」と「プログラマー」は同じような仕事だと思われているかもしれませんが、その役割は異なるものであり、その違いはあなたのキャリアに影響を与える可能性があります。

この記事ではプログラマーとシステムエンジニアの違いに焦点を当て、それぞれの仕事内容について紹介していきます。プログラマーからシステムエンジニア、システムエンジニアからプログラマーと職務が変わる場合もありますが、どちらの仕事内容も知っておくことでIT業界を知れるはずです。

プログラマーとシステムエンジニアの違い

プログラマーとシステムエンジニアは一般的にみると同じような仕事をしていると思われがちですが、実は厳密に考えると両者の間にはちゃんとした「違い」があり、案件を進めていく中での役割も明確に異なっています。

簡単に特徴を説明すると「プログラマー」が担当するのは、実際にプログラミング技術を駆使して、必要な機能を実現していくことあり、「システムエンジニア」は案件を進行するために必要となる部分、例えばスケジュールや仕様決定など、において重要な役割をすることになります。

プログラマー:開発担当

「プログラマー」という職業はプロジェクトにおける「開発」を担うのが主な仕事内容になるポジションです。顧客が持っている要望や社内の新しいビジネスを実現させるために必要とされ、「プログラミングを使った仕事」はこちらのカテゴリーに属しています。案件の中のポジションとしては「プログラマー」を略した「PG」と呼ばれることもあります。

プログラマーは決定されたアプリケーションの仕様に基づいて、プログラミングを行って機能を実装することがメインですが、その機能の処理動作を担保するためのテストも実施することが多いです。プログラマーは、「モノづくり」を担当する職業と考るのがぴったりと当てはまると思います。

システムエンジニア:管理担当

「プログラマー」がモノづくり担当ですが、それに対して「システムエンジニア」は「管理」が主要な業務となるポジションになります。受注した案件の進行が滞りなく進むように日々の進捗を管理したり、問題が発生した場合に柔軟に対応策を考えたりすることが多いです。

  • 顧客との打ち合わせ
  • プロジェクト方針の決定
  • 日々の進捗管理

前回の「未経験から目指すエンジニア:アプリ開発における上流工程とは #6」でも紹介した「上流工程」と呼ばれるポジションですね。要件として定義された要求を設計書に落とし込み、それをプログラマーに伝える役割を担うのが「システムエンジニア」になります。また、スケジュールに対して遅延が発生したり、何かしらの問題に直面したら矢面に立って調整を行う必要があります。

プログラマーの仕事内容

プログラマーの仕事内容はシステム開発で肝となる「プログラミングの組み上げ」です。家を作るのに例えると、プログラマーは鳶職人や大工さん、配管工や電気工事士といったところです。設計書をもとにして、求められたものをつくり上げるのが仕事内容です。もう少し詳細に工程を分けて紹介します。

1.設計書に沿って組み立てる

先程も書きましたがプログラマーは大工さんのようなものです。設計書をもとにして、プログラミングスキルを駆使して動くものを作り上げていきます。この段階を「実装フェーズ」なんて呼びます。実装フェーズでは様々な問題点をカバーしなくてはならないため、しばしば重労働が求められます。

例えば、技術的に明らかに実現できない機能の解決策、最適なプログラミング言語の決定、プログラミング言語のスキル向上などなど。場合によっては、この段階で新しいプログラミング言語を覚える必要性もあります。プログラマーは、顧客とシステムエンジニアが決めたシステムを実現させる、重要な工程を担っています。

2.プログラムのテストを行う

プログラマーは作るだけではありません。作ったものが求められているものかどうかも検証していきます。具体的にはテストを行います。「単体テスト」や「結合テスト」と呼ばれる一連のテストがあり、それらを実施しながら品質を保証していきます。

そのためプログラマーは自ら組み上げたアプリケーションが設計書に沿っているかを確かめます。テストの実施は他の人に任せる時もあります。システムを完成させるまでがプログラマーの仕事です。わりと重労働ですが動くものを作るのは楽しいです。筆者はこの辺りをメインに仕事しています。

システムエンジニアの仕事内容

システムエンジニアの仕事内容は、主に顧客折衝やスケジュール管理であると解説しました。とはいえ、ザックリとしたイメージには、様々な作業内容がありますのでそれも併せて解説します。

1.プロジェクトの要件定義

システムエンジニアはプロジェクトの始まり(上流)を担当します。仕事を依頼してきた顧客と打ち合わせを行い、「どのようなものを作りたいのか?」を明確にしていきます。アプリケーションの開発は漠然としすぎているため、明確なゴールや目的がないと、手が広がりすぎて収拾がつかなくなります。

その舵取りをするのがシステムエンジニアということです。顧客との打ち合わせを通して、システムの目的や予算感、期間などを決めていきます。このフェーズを「要件定義」と、業界では呼んでおりをシステム開発の中において、最も重要な段階となります。

2.スケジュールや進捗の管理

顧客との打ち合わせを重ねながら、システムエンジニアはプロジェクトのスケジュールを作成していきます。それ以外にも案件をスムーズに進行するために様々な計画を立てていきます。

  • 打ち合わせの回数・頻度はどれくらいか?
  • どれくらいの期間でプロジェクトをするのか?
  • システム開発に必要な予算はどれくらいか?
  • プロジェクトチームに何人のメンバーが必要か?

システムエンジニアは案件のスタートと同時に、要件定義・設計・開発・テスト・納品までのスケジュールを決め、プロジェクトが円滑に進むように奔走する必要があります。エクセルを味方にして、期間・スケジュール管理・顧客対応などと戦います。そのため、スケジュール遅延などが発生した場合は矢面に立ち、顧客への説明責任を果たさなくてはなりません。仕事の負担もありますが、それだけでなく精神的なストレスも抱える職種といえます。

3.顧客とプログラマーの仲介

「上流工程」を通して出来上がったシステム開発の概要からシステムエンジニアは設計書を作っていきます。設計段階で作成する大まかな工程は以下の2つになります。

  • 基本設計
  • 詳細設計

ザックリとしたラフスケッチを描くのが基本設計であり、細かく仕様を決めていくのが詳細設計です。この工程を通して出来上がった設計書・仕様をプログラマーに伝えるのもシステムエンジニアの仕事内容です。場合によっては基本設計だけを行なって、詳細設計はプログラマーが担当する場合もあるかもしれません。

開発する部分はプログラマーが行い、開発中の質問などはシステムエンジニアが吸収します。システムエンジニアはプログラマーと顧客の間に立つ仲介として、プロジェクトがスムーズに進むように管理します。これらの仕事内容が、システムエンジニアの主な仕事内容となります。中にはプログラマーも兼任するエンジニアもいますが、大きなプロジェクトになるほど切り分けが厳密になる傾向が強いようです。

エンジニアもプログラマーも重要

この記事では「システムエンジニア」と「プログラマー」の両方を紹介してきました。あなたはどちらの仕事に就きたいと思ったでしょうか。多くの人は「エンジニア」と聞くと「プログラミングをする職業でしょ?」と思い浮かべるかもしれません。しかし実は違う、ということを解説しています

ここで重要としたかったことは「エンジニアもプログラマーも、実は作業内容が異なるので仕事として就きたい業務をしているかどうかを確認しましょう」ということです。エンジニアとして上流工程に特化している場合は、プログラミングを学ぶことが少ない可能性があります。

プログラミングがしたいならば、ちゃんとプログラマーが稼働している企業を選ぶ必要があります。「上流工程メイン」といった企業を選んで就職した場合、プログラミングを学ぶことなく案件に参画することになり、案件を「管理する側」に回る可能性があるので注意が必要です。それを見極めるためにも「システムエンジニア」と「プログラマー」の違いは知っておく必要があるのです。