システムエンジニア、プログラマ・・・。ひとくちにIT業界の職種と言ってもさまざまな物があります。この記事では一般的な物からそうでない物までさまざまなIT業界の職種について説明していきます。
実際は35種類もの専門分野に分かれているIT業界
まずは下図を見てください。IPA(情報処理推進機構)が発表している「ITスキル標準」から抜粋した表になります。求人広告を見ていると10種類ぐらいかな?多くても20種類ぐらいかな?、と思えるIT業界の職種ですが、実際には35種類もの専門分野に分かれています。と言ってもあくまでも企業向けに公的機関が指針として定めたもので、実質的な「職種」として考えるともっと少ないです。
但し、専門分野という事であれば、35種類では大雑把過ぎて分類しきれてないと思います。プログラマと言ってもプログラミング言語は1種類ではありませんし、サーバエンジニアと言ってもWindowsとUnix・Linuxでは全く違います。ですので今回は求人広告でよく見る一般的な募集職種について解説していきたいと思います。
プログラマ(PG)
IT業界と言えばまず「プログラマ」という職種を思い浮かべるのではないでしょうか。文字通りプログラミング言語を使ってプログラムを書く仕事です。プログラミング言語と言ってもさまざまな物がありますが、大体のプログラマは最終的に数種類の言語を扱えるようになります。というより扱えないと仕事にならない場合が多いです。基本的に独学ですのでプログラミングが好きな人でないと長続きしない仕事とも言えます。
「プログラマ」と一括りで言ってしまってますが、実際にはプログラミングする言語や環境や機器等でかなり多岐に渡ります。WindowsやLinuxや汎用機等のOSによっても全く違いますし、フレームワークやミドルウェアの使用等で言語内でもかなり違います。通信関係が絡んだり低レベルのデバイス操作や組込系になると同一言語でも出来ない人が多かったりします。
プログラマの種類
プログラマの求人情報には言語だけではなく、どの言語を使ってどの環境でプログラミングするかが基本的に記載してあります。これは同じプログラミング言語でも環境によってやる事がかなり違う事を意味します。
最近はVM系の言語やスクリプト言語が増えてきているので環境差をそこまで考慮しなくても動きますが、それでもその言語でどのような物を作るのかでかなり違ってきます。ここでは環境によってどのような使用用途が多いのか挙げていきます(あくまでも個人的な見解)
- Windows - クライアントOSの圧倒的なシェアがあるので、一般的にWindows系の開発はお客様が使うアプリケーションを作成することが多いです。WindowsですのでGUI系のアプリが主流で、 .netフレームワークを利用する言語が多くなります。
- Linux/Unix - サーバOSの主流で、あらゆる言語が動きます。サーバ用途が主になりますのでCUIのサーバアプリケーションが多くなります。日本のIT業界(SIer)ではWebアプリケーションとして動かすJavaサーブレットが主流でしたが、近年は多様化してきています。
- Android, iOS(iPhone等) - スマートフォンOSで、AndroidはJava、iPhoneはObjective-c,Swiftでアプリケーションを作成できます。最近はどちらのプラットフォームでも動く環境が出てきています(Xamarin/C#、Unity/C#、等)。
- Web系 - 俗に言うWebアプリです。基本的にWebインタフェースとバックエンドにあるサーバとセットでシステムを作ります。一昔前迄はJavaのサーブレットが多かったですが、つい最近迄はRuby on Railsが隆盛でした。今後はサーバサイドとWebインタフェースサイドで別言語を利用する構成が増えてくると思います。
- 汎用機(メインフレーム) - 80〜90年代初頭まで主流だった大型のコンピュータです。どれぐらい大型かというと、ビルの1フロア独占したりするぐらいの巨大さです。新たにシステムを立ち上げる際に汎用機を使うことはまずありませんが、古くからのシステムを利用しているお客様がまだいるので、メンテナンス要員としてのプログラマ職はまだ募集があります。
- 組込系 - なかなか一言で表すのは難しいのですが、大雑把に言うと組み込み機器で動作する特定機能に特化したプログラムをプログラミングします。家電などに入っているコンピュータ等ですね。
プログラミング言語の種類
- 主なコンパイルする言語 - C, C++, C#, VisualBasic, Java, Swift, Objective-c
- 主なスクリプト言語 - Perl, Python, Ruby, PHP, Javascript
コンパイルというのは、これまた判りやすく言うと「翻訳」です。人間が判りやすい(容易に読み書きできる)プログラミング言語で書かれたプログラムを、コンピュータが判りやすい形に「翻訳」するのをコンパイルといいます。
コンパイルする言語で書かれたプログラムは、日本人(プログラマ)がアメリカ人(コンピュータ)に仕事を頼むとして、日本語で書いたお願いを予め英語に翻訳してアメリカ人に渡すイメージです。つまりコンピュータが判りやすい形に「翻訳」しておいて、実行する時は翻訳済みのプログラムを動かすので基本的にスクリプト言語よりもコンパイルする言語のほうが動作が早いです。
対してスクリプト言語は実行時にコンピュータが人間の書いたプログラムを読みます。日本人がアメリカ人に仕事を頼むとして日本語で書いたお願いをアメリカ人が読んで仕事をするイメージです。アメリカ人は日本語で書かれたお願いを読む必要があるので「翻訳」されたお願いを読むより手間が掛かります。
コンパイル言語の最大の利点は実行スピードにあります。スクリプト言語の利点は容易に書き直しができ、開発や保守運用がやりやすい事がメリットとなります。
※上記の説明はあくまでも初心者向けにざっくり説明したもので、厳密に言うと間違ってます。ですが、興味を持つのが大事で入り口は例え間違っていても、こういう説明の方が良いんじゃないかと思ってます。
プログラマが使用する言語
環境と言語で大雑把に分けると以下のような感じになると思います(あくまでも個人的な見解です)
- Windows - VB, C#, C++, Java
- Linux/Unix - C, C++, Java, Ruby, Python, Perl
- Android - Java
- iOS(iPhone等) - Objective-c, Swift
- Web系 - Java, PHP, Ruby, Javascript
- 汎用機 - COBOL, C, PL/I
- 組込系 - C, C++, アセンブラ
本当に大雑把ですが、大体こんな感じです。もちろん上記以外の言語も各環境で使えますが、あくまでも一般的な物としての分類です。基本的にスクリプト言語であれば環境を選ばずに使うことができます(汎用系・組込系を除く)。汎用機に関しては前々時代の機器なので動く言語も少ないです。組込系に関しては機器の制限があるので、出来る限りコンパクトなサイズにする必要があります。ですのでJavaみたいなVM系の言語やスクリプト系言語は不向きと言われてます。
プログラムの書き方について
SEが作った設計書を元にプログラムを書くことになりますが、各プロジェクトでほぼ確実に「コーディング規約」と言うものが用意されていますので、その「コーディング規約」に沿った形で設計書の内容をプログラミングしていくことになります。
コーディング規約に沿って書くことで、書いた人の「癖」を取り除き、後からソースコードを見直した時に誰が見ても判りやすくする為です。独学でプログラミングを勉強していると変な癖がついてしまう事はよくあるので、勉強する時から綺麗に書く癖をつけておいた方が良いと思います。なるべく小さな処理単位に分けて、簡潔に書くのがコツです。大きな処理単位で長大なプログラムを書くのは絶対にやめましょう。問題が起きた時に収拾がつかなくなります。
プログラマの求人
プログラマの求人は常にあります。慢性的に人不足と言っていいと思います。ただ、時代によってプログラミング言語の種類や環境は違うものに変わってきています。
一番多いのはやはりJava/サーブレットでしょう。次いでPHPでしょうか。まだWebアプリが主流の時代だと思いますが、スマホアプリ等の開発案件も増えてきていますので、Java/AndroidやSwift/iOSの求人もかなり増加しているようです。逆にRuby/Railsの求人は減っている様な気がします。また近年の機械学習ブームからでしょうか、Pythonの求人をちらほら見かけるようになりました。今後は要注目でしょう。
システムエンジニア(SE)
プログラマがプログラムを書く時に参照する設計書を作るのや、プログラマを直接マネジメントするのが主な仕事です。お客様の意図とプログラマとの間で意思疎通を仲介する大事な仕事になります。基本的にプログラミングが出来ないとプログラマとの意思疎通が出来ないので、プログラマ出身者が圧倒的に多いですが、逆にプログラマ出身のSEは対人スキルに問題がある人も中にはいるので、お客様の意図をうまく聞き出す為に最近はプログラミングできないSEも増えてきています。ただ、プログラミング出来ないSEの人が主流になって深く関わるプロジェクトでうまく回った話を聞いた事がないので、未経験からいきなりSEを目指すのは絶対に辞めた方がいいです。お客様とプログラマの間で双方からの圧力にやられて心労で体を壊すと思います。
よく求人広告で未経験のSEを募集している事がありますがあれは方便で、実質的にプログラマだと思ってください。未経験で出来るほど甘い仕事ではありません。「プログラマ=残業が多くて過酷な仕事」みたいなイメージが定着しているので、プログラマという名称を敢えて使わず、役割的にプログラマの事を「プログラマ=システムを作る人=システムエンジニア」みたいな呼び名にしている場合がほとんどです。
なぜIT業界で「システムエンジニア」という名前がここまでもてはやされているのかは謎ですが、殆どのSEの人がプログラマ兼任なので、SEだから仕事は楽、ということは無いと思ってください。むしろ普通のプログラマより仕事量は多いです。
システムエンジニアの求人
また、ある程度経験を積んだSEはPL等にキャリアアップしていきますが、最近はPLにならないで独立を選ぶ人も増えてきているようです。SEという仕事だと客先と接する事も多いのですが、有能なSEはそのコネを活かして独立後もうまくやっていけるみたいです。
ネットワークエンジニア(NE)
イーサネットが出て来る前迄はネットワークと言えば拠点間ネットワークで、データセンタ等に置かれた汎用機と専用線を介して行うネットワークでしたので、ネットワークエンジニアと言うとパケット交換機やフレームリレー交換機の設定だったり、更に下のレイヤのMUXやTDMみたいな伝送機器の設定等が主な仕事でした。現在は全く違います。現在のネットワークエンジニアはTCP/IPのネットワークの仕事が主な仕事で、LANやWANの設計からケーブル敷設、スイッチやルータからVoIPやVPN、ロードバランサの設定まで、ネットワーク周りの事を一通りやります。実作業はケーブル敷設やラッキング等、少し泥臭い仕事もありますが、機器の設定等は比較的テンプレート化されてて決まった通りに設定する仕事なので、プログラマと違って余り頭を悩ますことはないかもしれません。
但し大規模なネットワークは別です。ネットワークを止めるという事はシステムを止める事と同義ですので基本的に無停止で動かさなければならないのですが、作られてもいないシステムのデータ使用量をきちんと見積もって、対障害性まで考慮するとかなり複雑な物を設計する必要があります。
ですので、外から見ると実作業も少なくかなり楽そうな仕事に見えますが、実際はかなり頭を使います。大人数でプロジェクトに参加する事は無く、1プロジェクトにいても数人程度で、本当に他のエンジニアから見ると羨ましい位に楽な仕事に見えますが、ネットワークに不具合が起きるとシステム全体が使えなくなるので、仕事量と反比例して責任はかなり重い仕事になります。
ネットワークエンジニアの求人
また爆発的にネットワークエンジニアの求人が増えた際に未経験の人員を大量導入したせいで給与相場が一気に下がり、未経験からネットワークエンジニアになろうとするとかなり安価な給与になるかもしれません。
但し、それなりの資格と経験があるネットワークエンジニアは少なく、企業にかなり重宝されそれなりに高給なようです。基本的に資格を持ってないと相手にされない職種でもあるので、最低でもCCNP程度を取ってから転職に挑みましょう。
サーバエンジニア/インフラエンジニア
SIerの中心にいるのがサーバエンジニアです。ネットワークエンジニアが文字通りネットワークの仕事を専業でやる様になる前迄は、サーバエンジニアがネットワークエンジニアも兼務している時期がありました。ですので、サーバインフラ・ネットワークインフラのエンジニアという事でインフラエンジニアと呼ばれたりもします。旧来からのシステムが動いてる現場だと「基盤」と言ったりします。聞きなれない言葉ですので初めて聞いたときは違和感がありまくりでした。サーバエンジニアの仕事は文字通り、サーバの設計・構築が仕事になります。と言われても何するの?と思う人が大半だと思います。おそらくサーバ周りでみなさんが想像出来ることは一通りやります。プログラマはプログラムを書く事が仕事になりますが、その出来上がったプログラムを動かす環境を整えるのが仕事になります。
どれぐらいのCPUスペックが必要だとか、メモリがどれぐらい必要だとか、どれぐらいの台数のサーバが必要だとか、バックアップの周期はどれぐらいでテープはどれぐらいの容量が必要だとか、そういった諸々を計算して機器選定してサーバベンダに発注して、届いた部品を組み立てて、ラッキングして、OSインストールして、必要なミドルウェアをインストールして設定して、不具合時の復旧方法だとか、バックアップからの戻し方とか、障害監視方法だとかの手順書を作ったり・・・・etc、もうありとあらゆる事をやります。何でも屋的な要素が強いので、大体PLやPMと一緒に仕事をすることが多いです。
仕事内容は上記の通り様々な事をやるのですが、お客様に納品する手前、やったことは全てドキュメントも納品しなければなりません。サーバの詳細設計(基本的にサーバ仕様1つにつき1冊書きます)以外にも保守運用の手順書も書きます。ですので、仕事の7割〜8割はドキュメントを書くことに費やされている様な気がします。
はっきり言って楽な仕事ではないのですが、なぜか「OSインストールするだけでしょ?」ぐらいの認識しかされてませんので、世間の目と実作業の乖離が一番大きい仕事なんじゃないかと思ってます。
こんな大変そうに見えるサーバエンジニアですが、未経験から入るなら一番お勧めです。なぜならSIerの中心で働く事になるので、いろんな経験ができますし、経験を積めばPLに一番近い職業でもあるからです。システム全体を把握出来てないとPL・PMは出来ませんからね。SIerの時代がこのまま続くのであれば間違いなくサーバエンジニアが一番キャリアアップしやすい仕事だと思います。
クラウドという流れ
さらに、最近のプログラマはサーバの設定を苦手としている人が多い(昔のUnix系プログラマはサーバエンジニアがいない時代を生きてきましたので全て自力で出来ます)のですが、そのサーバの設定を自動化する手法としてChefやPuppetというソフトウェアが開発者の間では使われる様になってきています。
この流れでいくと、IT業界からサーバエンジニアの職は無くなりそうだと予想する人もいますが、私はそうは思いません。日本企業は実態の無いものにお金を払いたがりません。それが膨大な量のドキュメントでありサーバです。システムを作ったらサーバも欲しい物なのです。ITという時代の最先端で働きながらこういうのって前時代的だよなぁと思うのですが、よく考えてみてください。大多数の会社経営者はその前時代の人達です。経営陣が代替わりするまでの間はサーバエンジニアの職も安泰でしょう。未だに80年代の汎用機が動いていますしね。
サーバエンジニアの心得
サーバエンジニアはそれが最も顕著です。他のエンジニアと違って関連する機器が多いので、サーバと言うよりもコンピュータ全般に関する情報を常に収集している必要があります。ですので新しい技術を知ったらすぐに試すようにする心構えが必要です。ですので、自宅にテスト用のサーバを持っている人が少なくありません。私も3台持っていますが、VMを使って実質的に12台のサーバテスト環境を構築しています。
とにかく常に勉強するという心構えを持って仕事に臨まないと、いつの間にか時代遅れの技術者になってしまいますので、常に勉強することを心がけてください。
サーバエンジニアに必要な資格
サーバエンジニアの求人
給料はかなり幅が広いです。それこそOSのインストールが出来る人とDBのチューニングが出来る人で、同じサーバエンジニアという名前でも給料は倍以上違ってきます。平均すると、一人前のサーバエンジニアでSEと同程度の給料は貰えてると思います。
カスタマエンジニア(CE)
カスタマエンジニアはここまで紹介してきた職種と違い、保守寄りの仕事になります。具体的にはサーバのハードウェアが故障した祭のパーツ交換等、ハードウェアに関する仕事をやります。具体的には、問題が起きたサーバの問題のあるハードウェアを特定して交換したり、常時動いていなければならないサーバを延々と面倒見る仕事です。ですので、周期的に客先を訪れたり、問題が起きたら夜中でも駆けつけたりと、なかなかにハードな仕事です。他のエンジニア側からみると、営業職と同じぐらい人当たりが良い人が多い様に思えるのですが、ハードウェアが壊れてシステムが止まった状態で怒っている客先へ行ったりするので、それなりにコミュニケーションスキルが高くないと出来ないと思います。
カスタマエンジニアの求人
オペレータ/テクニカルサポート
オペレータは運用要員、テクニカルサポートは保守要員になります。役割的に分けて書いてますが、ほぼ兼務です。SIerの作ったシステムが出来上がり、客先に納品された後、実際にサーバの運用や保守を担当することになります。例えば、バックアップテープの交換や機器の状態監視の様な日々の運用、客先からの問い合わせや不具合の連絡等を受け、それを該当部署に取り次ぐ仕事になります。
定型的な業務が多く、殆どの業務は運用手順書が用意されているので、未経験から就業するのも容易に思えますが、この仕事に就いた人は長続きしない人が多く見受けられます。サーバは24時間365日稼働しているのが殆どなので、保守運用の仕事に就く人もシフト制で夜中の対応があったりします。若いうちは良いのですが、それなりに歳を重ねるとやはり夜勤はきついです。
夜間働くので夜勤手当がついたり、シフト勤務なので残業は殆どありませんし平日が休みだったりと、普通のサラリーマンとは全く違う就業形態ですので、スーツ着てラッシュの電車に乗って通勤するのが嫌な人には向いてるかもしれません。仕事内容自体も定型作業が主で楽な部類です。
そして、この保守運用を経験した人が養うことのできる技術というか感覚があります。それが「故障切り分け」です。さまざまな事象を元に問題のある箇所を切り分けるのですが、これは机上で開発しているエンジニアでは容易に身につけることはできません。実際の運用場面でどういう事が起きてどういう対処をすれば直るのかというのをリアルタイムに味わうことができます。
ですので、大企業で上流工程をやるために入社してきた社員でも、新卒時は保守運用業務を経験させるところが多いです。ただの時間が不規則なだけで定型的な作業を繰り返す楽な仕事と思って仕事をするのと、この「故障切り分け」の感覚を身につけるのを意識して仕事をするのとではその後のキャリアで雲泥の差がつきます。お客様からの切実な電話や怒声、そしてそこから何を読み取ってエンジニアに伝えればスムーズに問題が解決するのか。そういう事を経験できるこの仕事は、ある意味IT業界で一番奥が深い仕事なのかもしれません。
オペレータ/テクニカルサポートの求人
プロジェクトマネージャ・プロジェクトリーダ(PM/PL)
これは職種と言うよりも役職に近いのですが、お客様とエンジニアとの間に立って、プロジェクト全体を動かしていく仕事になります。上流工程を担当するので上流SEと言ったりもします。小規模プロジェクトだとSEが兼務することが多いです。お客様の要望をどうやったら実現できるのか、それをシステム化するのに何が必要か、どれぐらいの人員が必要でどれぐらいの期間で完成できるのか、そういったことを考え、SEやPGに指示してシステムを作り上げる仕事です。当然のことながら、SEやPGに指示をする必要があるので、技術的に明るくなければ出来ません。ですので元SEや元サーバエンジニアがキャリアアップしてPLになるパターンが主になります。ただ、人間の立場(お客様)とコンピュータの立場(元SE)との折衝になるので生粋のエンジニアだとお客様との会話に問題を生じることが少なからずあるので、緩衝役として営業寄りのPLがいるプロジェクトもあります。
そしてPMはプロジェクトで一番の権力を持った人間になります。基本的に決裁権限を持った人がなる場合が多いです。PLと違い技術職の経験が無い人も多いです。はっきり言ってしまうと、営業職に近いかもしれません。
プロジェクトマネージャ・プロジェクトリーダの求人
PMの求人はたまにありますが、技術要件は重視されてないので、もはやエンジニアの枠とは別ですね。マネジメント能力と業務経験が重視されると思います。
IT営業
IT業界の営業職は他の業種の営業職よりも厳しいと思います。提案営業になるのですが、元エンジニアでもない限り提案なんて独力で出来るわけ無いので、PM/PLと共同で提案する形になります。そういった事情から元エンジニアの営業も比較的多いです。元エンジニアの営業さんを技術営業と呼んだりするのですが、さすがに「元」エンジニアなので、頭の中の技術の進歩はその人の現役エンジニア時代で凝り固まって止まってる人も多いです。ですので、提案前に、技術の要点等を確実にすり合わせておかないとあらぬことを口走ってとんでもない事が起きたりもするので注意が必要です。
IT営業への転職は技術的な要件は低いです。勿論あったほうが良いのですが、それよりもそれまでに携わった業界経験の方が重要です。あくまでもお客様との会話が主ですので、エンジニアとしてのスキルよりもお客様とスムーズに会話出来る能力の方が重要になります。
また、IT営業でも特定派遣の会社の場合は自社人員を外部に派遣する際の営業になりますので、また違った形の業務になります。特定派遣で外に出ている社員のサポート等を行うのが主業務になったりしますので、営業なのに客先に行くだけで営業とは言えない仕事の場合もあるので注意が必要です。
IT営業の求人
IT営業の求人はそれなりにありますが、先述の通り業務内容が全く違いますので、求人内容をよく見て把握してから応募したほうが良いと思います。
社内SE
お客様側にいるSEの事を社内SEと言います。主な仕事は自社システムやOA環境の管理業務全般と自社システムに関わる業者との折衝です。SIerとの折衝も中心となって対応することになります。会社と社内システムの規模にもよりますが、基本的に1社に1人、多くても数人ぐらいしかいません。その代わり、外部から保守要員を雇っている事が多いようです。サーバのみならず、社員が使っているクライアントPCや社内ネットワークの保守、コピー機やプリンタのトナー交換からエクセルの使い方の指導等々、社内のパソコンに関する何でも屋的な立場と言えばいいでしょうか。その為、幅広い知識があった方が仕事がスムーズに進みます。
昔はSIerの各職種からドロップアウト(と言うと語弊がありますが・・・)したエンジニアの再就職先(隠居先?)としての仕事というイメージが強かったですが、最近は仕事の楽さから若い人にもそれなりに人気があるようです。ですが、開発職と比較すると給料は安価になりますので注意が必要です。基本的にIT業界ではない普通の会社に入社することになりますので、SIerから転職すると周囲の人種が違って馴染めない場合もあるみたいなので、コミュニケーションスキルはある程度ないと厳しいかもしれません。
社内SEの求人
社内SEの求人はそこそこありますが、募集している絶対的な人数が少ないのでIT業界の他の職種に比べると競争率が上かもしれません。「ITに詳しい人=理屈っぽくてとっつきにくい人」というイメージが一般の人には強く根付いてますので、面接時はとっつきやすさを出していった方がいいのかもしれません。
Web系のエンジニア
SIerからはシステムのリプレース時には発注がかかりますし、Webアプリケーション以外のWebサイト構築の仕事もあるので、あまり暇では無さそうです。給料は全体的に高給では無いですが、特別安いという事も無いようです。
Webデザイナ
その名の通りWebのデザインをする仕事です。Webディレクタが作成したワイヤフレームを元に、必要なインタフェースを見栄え良く配置してWeb画面を作っていきます。作るのはphotoshopやillustrator等のデザインのソフトウェアを利用して、一枚の絵を作るが如くデザインしていきます。お客様が実際にシステムに触る時の画面になりますので、お客様のシステムの印象がこのデザイナによって左右されると言っても過言ではないです。仕事風景を見たことがある訳ではないので実際の現場はどうなのか判りませんが、SIerからの依頼を淡々とこなしていきますので個人的にはストイックな人が多い印象があります。
Webデザイナの求人
Webデザイナの人は自分の作ったデザインをインターネット上にポートフォリオとして公開している人が多いみたいです。転職時にはポートフォリオサイトを作っておいた方がいいのかもしれません。