多くの人にとって「システムエンジニア」と「プログラマー」は同じような仕事をしていると思いがちですが、その役割は異なるものになります。この記事では主にエンジニアとプログラマーの違いについて解説していきます。
プログラマーとは
プログラマーの仕事内容は、システム開発における肝の部分である「プログラミングの組み上げ」です。家を作るのに例えると、プログラマーは鳶職人や大工さん、配管工や電気工事士といったところです。設計書をもとにして、求められたものをつくり上げるのが仕事内容です。
1.設計書に沿って組み立てる
先程も書きましたが、プログラマーは大工さんのようなものです。設計書をもとにして、プログラミングスキルを駆使して、実際に動くものを作り上げていきます。この段階を「実装フェーズ」と呼んだりもします。
実装フェーズでは様々な問題点をカバーしなくてはならないため、しばしば重労働が求められます。
例えば、技術的に明らかに実現できない機能の解決策、最適なプログラミング言語の決定、プログラミング言語のスキル向上などなど。場合によっては、この段階で新しいプログラミング言語を覚える必要性もあります。プログラマーは、顧客とシステムエンジニアが決めたシステムを実現させる、重要な工程を担っています。
2.プログラムのテストを行う
プログラマーは作るだけではありません。作ったものが求められているものかどうかも検証していきます。具体的にはテストを行います。業界では単体テストや結合テストと呼ばれるものがあります。作ったものが求められたものでなければ、システム開発は大失敗です。
そのためプログラマーは自ら組み上げたアプリケーションが設計書に沿っているかを確かめます。テストの実施は他の人に任せる時もあります。システムを完成させるまでがプログラマーの仕事です。わりと重労働ですが動くものを作るのは楽しいです。筆者はこの辺りをメインに仕事しています。
エンジニアとは
システムエンジニアの仕事内容は、主に顧客折衝やスケジュール管理になっています。一般的に「エンジニア」と聞くと「作りてかな?」というイメージを抱きがちですが、IT業界における「エンジニア」とは、作り手より少し上流の工程を担当し、プロジェクトが円滑に進むように管理する仕事がメインです。
1.プロジェクトの要件定義
システムエンジニアはプロジェクトの始まり(上流)を担当します。仕事を依頼してきた顧客と打ち合わせを行い、「どのようなものを作りたいのか?」を明確にしていきます。アプリケーションの開発は漠然としすぎているため、明確なゴールや目的がないと、手が広がりすぎて収拾がつかなくなります。
その舵取りをするのがシステムエンジニアということです。顧客との打ち合わせを通して、システムの目的や予算感、期間などを決めていきます。このフェーズを「要件定義」と、業界では呼んでおりをシステム開発の中において、最も重要な段階となります。
2.スケジュールや進捗の管理
顧客との打ち合わせを重ねながら、システムエンジニアはプロジェクトのスケジュールを作成していきます。それ以外にも案件をスムーズに進行するために様々な計画を立てていきます。
- 打ち合わせの回数・頻度はどれくらいか?
- どれくらいの期間でプロジェクトをするのか?
- システム開発に必要な予算はどれくらいか?
- プロジェクトチームに何人のメンバーが必要か?
システムエンジニアは案件のスタートと同時に、要件定義・設計・開発・テスト・納品までのスケジュールを決め、プロジェクトが円滑に進むように奔走する必要があります。期間・スケジュール管理・顧客対応といった管理・調整業務に奔走します。
そのため、スケジュール遅延などが発生した場合は矢面に立ち、顧客への説明責任を果たさなくてはなりません。仕事の負担もありますが、それだけでなく精神的なストレスも抱える職種といえるかもしれませんね。
3.顧客とプログラマーの仲介
「上流工程」を通して出来上がったシステム開発の概要からシステムエンジニアは設計書を作っていきます。設計段階で作成する大まかな工程は以下の2つになります。
- 基本設計
- 詳細設計
ザックリとしたラフスケッチを描くのが基本設計であり、細かく仕様を決めていくのか詳細設計です。この工程を通して出来上がった設計書を、プログラマーに伝えるのもシステムエンジニアの仕事内容です。
場合によっては基本設計だけを行なって、詳細設計はプログラマーが担当する場合もあるかもしれません。
開発する部分はプログラマーが行い、開発中の質問などはシステムエンジニアが吸収します。システムエンジニアはプログラマーと顧客の間に立つ仲介として、プロジェクトがスムーズに進むように管理します。これらの仕事内容が、システムエンジニアの主な仕事内容となります。
プログラマーも兼任するエンジニアもいますが、プロジェクトの規模が大きくなるにつれ、調整役が必要となっていくため切り分けが厳密になる傾向が強いように感じています。
プログラマーとシステムエンジニアの違い
プログラマーとシステムエンジニアは一般的にみると同じような仕事をしていると思われがちですが、実は厳密に考えると両者の間にはちゃんとした「違い」があり、案件を進めていく中での役割も明確に異なっていることが分かってきたかと思います。
簡単に特徴を説明すると「プログラマー」が担当するのは、実際にプログラミング技術を駆使して、必要な機能を実現していくことあり、「システムエンジニア」は案件を進行するために必要となる部分、例えばスケジュールや仕様決定など、において重要な役割をすることになります。
プログラマー:開発担当
「プログラマー」という職業はプロジェクトにおける「開発」を担うのが主な仕事内容になるポジションです。顧客が持っている要望や社内の新しいビジネスを実現させるために必要とされ、「プログラミングを使った仕事」はこちらのカテゴリーに属しています。案件の中のポジションとしては「プログラマー」を略した「PG」と呼ばれることもあります。
プログラマーは決定されたアプリケーションの仕様に基づいて、プログラミングを行って機能を実装することがメインですが、その機能の処理動作を担保するためのテストも実施することが多いです。プログラマーは、「モノづくり」を担当する職業と考るのがぴったりと当てはまると思います。
システムエンジニア:管理担当
「プログラマー」がモノづくり担当ですが、それに対して「システムエンジニア」は「管理」が主要な業務となるポジションになります。受注した案件の進行が滞りなく進むように日々の進捗を管理したり、問題が発生した場合に柔軟に対応策を考えたりすることが多いです。
- 顧客との打ち合わせ
- プロジェクト方針の決定
- 日々の進捗管理
前回の「」でも紹介した「上流工程」と呼ばれるポジションですね。要件として定義された要求を設計書に落とし込み、それをプログラマーに伝える役割を担うのが「システムエンジニア」になります。また、スケジュールに対して遅延が発生したり、何かしらの問題に直面したら矢面に立って調整を行う必要があります。
エンジニアもプログラマーも重要
この記事では「システムエンジニア」と「プログラマー」の両方について紹介してきました。あなたはどちらの仕事に就きたいと思ったでしょうか。多くの人は「エンジニア」と聞くと「プログラミングをする職業でしょ?」と思い浮かべるかもしれません。しかし実は違う、ということを解説しました。
ここで重要としたかったことは「エンジニアもプログラマーも、実は作業内容が異なるので仕事として就きたい業務をしているかどうかを確認しましょう」ということです。エンジニアとして上流工程に特化している場合は、プログラミングを学ぶことが少ない可能性があります。
プログラミングがしたいならば、ちゃんとプログラマーが稼働している企業を選ぶ必要があります。「上流工程メイン」といった企業を選んで就職した場合、プログラミングを学ぶことなく案件に参画することになり、案件を「管理する側」に回る可能性がありますので注意が必要になります。
それを見極めるためにも「システムエンジニア」と「プログラマー」の違いは知っておく必要があると考えています。しかしながら、エンジニアであってもプログラミング知識などは持っておくに越したことはありません。