ITエンジニアの『仕事の種類』を経験者が紹介
ITエンジニアと一言でいっても仕事はいろいろありますが、大きく分けると2つになります。
- アプリケーションエンジニア
- インフラエンジニア
それぞれの特徴と周辺知識について紹介します。
Contents
アプリケーションエンジニアってこんな仕事
アプリケーションエンジニアはその名のとおり、アプリケーションを開発するエンジニアです。
おそらくITエンジニアと聞いてイメージするのはこちらです。プログラムを作る仕事ってイメージがありますよね。
プログラマーもアプリケーションエンジニアに含まれます。
インフラエンジニアってこんな仕事
インフラエンジニアは、ソフトウェアが動作するための基盤・環境を構築する職業です。
例えば、Webサービスを作ろうと思ったら、Webサービスのプログラムを書くわけですが、そのプログラムが動く環境(サーバー)が必要です。
そのサーバーに必要なOSやミドルウェアをインストールしてセットアップするのがインフラエンジニアの仕事です。
Webサイトが動くためにはWebサーバーと呼ばれるApacheやnginxなどのソフトウェアが必要です。
たとえば、ブラウザでhttp://www.yahoo.co.jp/にアクセスしたら、そのリクエストを待ち受けているソフトウェア(例えばApache)がサーバー上で動いているので、ページが表示されるんです。
Apacheがリクエストを受け取って、このソフトウェアがアプリケーションエンジニアが作ったプログラムに制御を渡してくれます。そうして、プログラムが動いて、画面のHTMLをレスポンスすることによって、画面が表示されるんです。
Apacheがあるおかげで私たちはリクエストを待ち受ける機能を実装しないで済んでいるんです。
Apacheやnginxには様々な設定項目があります。例えば、人気のWebサイトで同時アクセス数が多い場合には、リクエストを受け付けるスレッド数(同時並行にプログラムが動く数)を増やしておきます。すると、同時にいくつものアクセスを受け取れるようになります。この設定をしておかないと、アクセスが集中した時にレスポンスを返すのに時間がかかってしまい、いわゆる重いサイトになってしまうんです。
かといって、スレッド数を増やしすぎると、今度はメモリーを使いすぎてしまってメモリーリーク(メモリーが足りない状態)に陥る可能性が高まります。
ですから、サーバーが持っているメモリー量やCPU性能とアクセス数のバランスを考えた上で、ちょうどいい設定をするのがインフラエンジニアなんです。
最近のインフラ技術事情
インフラ技術も最近はクラウドが伸びています。AmazonやGoogleのようなサーバーマシンをすごい数持っている企業が、その一部を貸し出すことによって、安く柔軟性の富んだサーバー環境の構築ができるようになりました。
これまでは、各企業がサーバーマシンを買って、一台一台セットアップしていたのですが、クラウドの登場によって、既にある程度セットアップされているクラウド環境の一部を必要に応じて借りて使うという時代になりました。
よって、一からサーバーをセットアップする知識だけじゃなく、クラウドをうまく使ってかんたんに環境構築するスキルが求められています。
もちろん、企業によってはクラウドじゃなく、自前でサーバーを構築している会社もたくさんあります。自前でサーバーを構築することをオンプレミスと言います。オンプレミスの方が細かいカスタマイズができたり、データの機密性を高めることができます。
クラウド環境ももちろんセキュリティ基盤はそろっていますが、クラウドを提供する企業(例えばAmazon)の社員がデータを見ることができてしまいます。もちろんそんなことはしないでしょうけれど、万が一を考えてオンプレミスを選択している企業はたくさんあります。
そんなわけで現代のインフラエンジニアにはオンプレミスとクラウド両方の技術が求められているんです。
技術の変遷についていく重要性
アプリケーションエンジニアも、利用技術は変遷しています。
1990年代はPCにインストールして使うソフトウェアの開発が主流でしたが、2000年位からWeb技術が発達してWebアプリケーション開発が主流になりました。
Javaサーブレット・JSP、PHP、Ruby On Railsなどの技術を持ったエンジニアが重宝されました。
その後はスマホアプリの時代となり、AndroidやiOSエンジニアが求められています。
今後はVRやウェアラブルデバイスが普及していくかもしれません。
このように技術トレンドは変化していきます。トレンドの変化に対応していく必要があるのはアプリケーションエンジニアもインフラエンジニアも同じです。
SEという不思議な職業
SIerなどの受託開発をしている企業の場合、
- システムを設計する人
- システムを実装(プログラミング)する人
が分けられている場合が多くあります。
- 設計する人 = SE(システムエンジニア)
- 実装する人 = プログラマー
とわざわざ分けています。理由は、お金の問題です。
「設計をする人のほうが実装する人よりも、高度なスキルを必要とする」ということにしたほうが、エンジニア派遣をした際に、顧客に対して高い報酬を請求することができるんです。
「プログラマー一人派遣する場合はひと月70万円ですが、SEの場合は80万円です。SEの方が高度なスキルと経験を必要としますからね」といった具合にです。
実際は設計が実装よりも難しいとは限らないんですけどね。
設計はできるけど、実装(プログラミング)はできないという人もいます。
本来プログラミングの知識がなかったら設計ができるわけがないんですが、そういう人もSEの仕事をしていて、それで成り立っています。
なぜ成り立つかというと、プログラミング知識のないSEが設計したでたらめな設計をプログラマーが検証し、「ここがこう間違ってるので、こうします。」と対応しているからなんです。
なぜか、報酬の少ない職種(プログラマー)が高い職種(SE)を補助しているという状況なんです。
ITエンジニアと関連する職業
受託開発の職場にはエンジニアの他に
- プロジェクトマネージャー
- ITコンサルタント
がいます。
ITコンサルタントというのはシステム開発の上流工程(企画の提案)を担当する職業です。ITコンサルタントが提案したシステムをSEが設計し、プログラマーが実装するといった流れです。
プロジェクトによってはITコンサルタントの役割をSEやプログラマーが兼ねることもあります。
プロジェクトマネージャーはプロジェクトに必要な人員の調達、作業分担、予算・スケジュール・人員の管理を行う職業です。
一方、自社サービス開発の職場では、エンジニアの他に、プランナー(ディレクター、プロデューサー)、デザイナーというメンバーでチームが構成されます。
- プランナーはサービスの企画・プランを作る
- デザイナーはデザインを作る
- エンジニアはシステムを設計・実装する
という、職種名通りの仕事内容になっています。ですから、受託開発よりも自社サービス開発のほうが個人的には役割分担がしっくりきます。
キャリア設計の基本パターン
受託開発の企業に就職する場合は、
プログラマー → SE → サブリーダー → チームリーダー → プロジェクトマネージャー or ITコンサルタント
自社サービス開発の場合は、
プログラマー → チームリーダー or 特定技術のスペシャリスト
というのが代表的なキャリアパスです。
私の場合、受託開発の会社に就職して、
プログラマー → SE → サブリーダー → チームリーダー
を経験した後、フリーランスエンジニアになって自社サービス企業のプロジェクトに参加しています。案外こういうキャリアパスのエンジニアは多いんじゃないかと思います。
というのも、自社サービス企業よりも受託開発企業の方が入社難易度が低い傾向にあります。ですから、受託開発企業に就職して経験を積み、自社サービス企業に転職するというのが、一つのおすすめパターンなんです。
受託開発も悪くはありませんが、プログラミングが好きな人には自社サービスの仕事のほうが気分よく仕事が出来るんじゃないかなと個人的には思っています。
そんなわけで、ITエンジニアの仕事紹介でした!