この記事について
職業としてエンジニアを目指すことについて私の考えをなんとなく述べていこうと思います。
かつては、IT土方などネガティブな要素が強かったIT系のエンジニアですが、今では親が子供になってほしい職業、あるいは大人になってから副業でやりたい職業として、プログラマなどのエンジニアをあげる人が増えたイメージがあります。
エンジニア職につくハードルもかなり下がったと思います。かつては大学や専門学校で数年かけて体系的にしっかり学ばないといけないと思われていましたが、今では通勤しながら通えるエンジニア養成の学校、オンライン講座がたくさんできました。それらのカリキュラムを一通りやるだけでとりあえず最低限のことはできるようになるのではと思います。
一方、ニーズの高さのためか、IT領域のエンジニアだけでも様々な職域・業界が存在すると思っています。この記事では思いつく限りで並べてみた様々なエンジニア職について、私自身の業務経験も踏まえながら述べてみたいと思います。
なんとなく述べただけのものですが、ちょっとでもお役に立てれば幸いです。
業務領域での分類
まず、業務領域で分類してみました。
プログラマ・デベロッパー
システムやソフトウェアを開発する人です。プログラマという言葉が一般的ですが、実際はプログラミング以外もするのでデベロッパー、あるいは開発者というグルーピングをすることも多いです。
おそらくIT領域のエンジニアとして一番イメージするのがプログラマかと思います。個人的な考えですが、エンジニアになるならまずプログラマになることをベースに考えた方がいいかなとおもいます。大きなシステムの開発PJ故に設計などプログラムを書かない担当になったとしても、そもそもの仕様の理解に苦労したり、メンバー間の協業で苦しむことがあると思うからです。
プログラマ・デベロッパーという職業も、とても幅広いです。PCやスマートフォンのアプリケーションを作るアプリケーションエンジニア、インターネットを通じてデータ配信を行うシステムを作るサーバサイドエンジニアなど様々です。いくつかプログラマの例を紹介したいと思います。
マークアップエンジニア
マークアップ言語というデータ構造の骨組みをつくるプログラミング言語で、各種データファイルを作成するプログラマです。
マークアップエンジニアの仕事として最も典型的な仕事はWEBページ制作です。WEB制作とはどんなことをするかについては以下の記事を書いています。もし興味があれば閲覧ください。
プログラマ領域では最もハードルの低い職種ではないかと思います。私自身も学生時代、最初にエンジニアの仕事として受け持ったのがこのマークアップエンジニアでした。
一方で最も給与水準が低い職種でもあります。企業によっては、デザイナーやニュース記事のライターが担当することも多いです。アルバイトや副業ならともかく、エンジニア専門職として生きていくならば、マークアップエンジニアはあくまでキャリア上のファーストステップとして意識した方が良いと思います。
ゲームプログラマ
ゲームの開発をするプログラマです。子供たちにとっては、プログラマの中では花形だと思います。一方で現実レベルでは、ゲームの当たりハズレが激しいために満足な収入が得られなかったり、納期などが厳しく激務であることが多いです。
ゲームの種類にもよりますが、ゲームプログラマはどの領域を担当するにしろ、ある程度高いレベルの技術が必要です。
アクションゲームのキャラクターの動きなど、グラフィック部分を担当する場合、キャラクターの動きを作るために三角関数などの数学的な計算や衝突判定などの物理の知識が必要になってきます。オンラインゲームのバックエンド、ネットワーク通信を担当する場合、高負荷トラフィックの中でリアルタイム通信環境を実現する必要があり、ネットワークや処理速度について深い知識が必要です。CPU対戦などを想定している場合は、AIの知識も必要になってきます。
私自身、ゲーム開発のPJに何度か携わったことがあります。グラフィック領域を初めて担当した時は、キャラクターをスムーズに動かすために三角関数などの数学を再度勉強しながらの開発でした。サーバサイド領域担当時は、通信遅延を克服してどのようにリアルタイムな通信プレイを実現するかに毎回悪戦苦闘の日々でした。
ハードなスケジュールかつ高難易度な案件ばかりではありましたが、ゲーム故に開発メンバーも仕事に対してポジティブな方が多く、メンバーと知恵を絞ってゲームを作り上げていく仕事はとても楽しいものばかりでした。毎回毎回学ぶこともあり、またチャンスがあれば仕事としてゲーム開発に携わってみたいという気持ちはあります。
もしも、ある程度プログラミングができる方でゲームプログラマになってみたいという方は以下の本を一読することをお勧めします。どちらも古い本ですが、現場で働くためにどんな知識が必要で、どんなことに苦労するのかがわかると思います。
OSSのコミッター
今日全てのシステムを一つの会社、あるいは一人でゼロから開発する人ことはありません。どんなものを作るにしても、OSS(オープンソースソフトウェア)という外部が開発したソフトウェアを基盤に導入したり、ライブラリとして利用して開発します。
日々新しいOSSが生み出されたり、既存OSSのバージョンアップが行われておりますが、OSSのほとんどが誰でも参画できる有志のコミュニティによって開発されています。このコミュニティに参画してOSSの開発や修正を行う人のことをコミッターと言います。
誰でも参加できるコミュニティ故に、趣味やボランティアで開発に参加する人も多いですが、企業によっては自社採用技術の品質向上戦略の一環として、社内エンジニアに業務としてOSS開発の参画をさせているところもあります。
OSS開発に携わるようなエンジニアはいうまでもなく優秀な方が多いです。有名なOSSのコミッターであったりすると、タレントエンジニアとして市場価値が高く評価されることも多いです。
もしも職業プログラマを本気で目指すのならば、有名OSSのコミッターになることはエンジニアキャリアの一つの目標として持っても良いかもしれません。
アーキテクト
システムやソフトウェアの全体構成を考える仕事です。小さなシステムだと、新人や若手でも任せられますが、大きなシステムだと事実上の開発責任者やマネージャー職が担当することが多いです。大規模システムを開発する企業では、プロジェクトマネージャーと並んでエンジニアキャリアにおける一つの目標として目指す人が多いと思います。
システムオペレーター
プログラマが開発したソフトウェアが稼働するサーバインフラを用意したり、安定稼働するために監視や緊急対応を行うエンジニアです。エンジニア職としてはプログラマと対をなすようなイメージです。
ひたすらコードを書き続けるプログラマと違い、動くシステムを触ったり組み立てていくという点で機械いじりが好きな人には楽しい仕事と思います。
必ずしもプログラム書く必要がないため、プログラマよりハードル低いように見えますが、実際は覚えることはたくさんです。また、システム運用を担当した場合、システム不具合発生時の緊急対応や、非常時のためにシフト勤務をすることもあり、激務であることも多いです。
devopsという言葉があり、プログラマ(デベロッパー)とオペレーターは切っても切り離せない関係と思います。事実、会社によっては開発者とオペレーターを兼任するところも多いです。どちらをメインに志すにしても、双方の知識や経験がないと優秀なエンジニアにはなれないと私自身も思っています。
WEBサービスのオペレーターに関してはUNIXコマンドを駆使してLinuxサーバの構築などを行います。オペレーター業務の全てというわけではないですが、以下の記事を書いていますのでよろしければ読んでみてください。
システムエンジニア(SE)
プログラマと並んで、ITエンジニアとしてよく耳にするのがSEではないでしょうか。システムエンジニアという言葉は、プログラマ以上に多義的です。私個人としては、プログラマやオペレーターにも属さない技術職全般を指すイメージです。例えば以下のような業務もシステムエンジニアの仕事とされています。
- システム開発や、システムのオペレーションはしないが、顧客が求める業務課題解決のため、他社が販売する既存のソフトウェアやシステムの導入を支援するエンジニア
- IT企業ではない会社の情報システム部門として、自社システムや業務PCの運用・導入サポートを行うエンジニア
- 自社の製品技術の知識を元に、製品購入のための営業を行ったり、購入された顧客の技術サポートを行うエンジニア。
- アサインされた大規模開発プロジェクトの遂行のため、自身の持っている技術知識を生かして子プロジェクトの業務課題の解決サポートしたり、親プロジェクトの責任者に状況や課題の報告・相談を行うプロジェクトマネジメントを担当するエンジニア
私自身、過去の配属によりプログラマやオペレーターでもない文字通りSEと分類される仕事についたことがあります。経験上思うことは、プログラマやオペレーターとは違い、特定領域の深い知識はそれほど求められなかったものの、その分広いIT知識と、そもそものビジネススキルが求められるイメージです。
正直のところ、アサインされたものによっては、楽しい仕事じゃないことも多いです。世の中のニーズとして求められる職種であるとともに、エンジニアのキャリアステップとしてプロジェクトマネージャーなどの管理職を目指す方は避けて通れない道かと思いますが、積極的に志す仕事ではないかなと思います。
業界での分類
続いて、業界でも分類してみようと思います。IT企業を名乗る企業もさまざまになりましたので、業界によってもやることが様々だと思います。
サービスエンジニア
WEBサービスなど何らかのサービス運営に携わるエンジニアです。小規模なサービス運営をするベンチャー企業によくあるエンジニア職の分類かと思います。サービス企画も担当することが多いため、主体的に働ける人は楽しい一方、開発から運用までサービス運営のために必要な業務はなんでもやらないといけないところが多いです。
私自身の社会人として初めてのキャリアもサービスエンジニアでした。将来的にはサービス運営者としてのキャリアステップを考えている人、独り立ちできる一通りのエンジニアスキルセットを得たい人は職業選択としておすすめかとおもいます。実際の収入は運営サービスの営業成績によることが多いですが、AWSなどのエンジニア向けのクラウドサービスが増えており、需要はますます高まっていると思います。
セキュリティエンジニア
セキュリティ面を担当するエンジニアです。セキュリティエンジニアも広い概念で様々な職種があります。
- 企業法務と連携して、企業のセキュリティマネジメントを維持を目指し、業務ルールや業務フローの設計をするエンジニア。
- コンサルタントととして、システムの脆弱性チェックや暗号技術導入のサポートをするエンジニア
- 警察組織などと連携して、不正利用被害事件の解決や、不正利用被害の予防を検討するエンジニア
- 顧客、あるいは自社向けのセキュリティソフトウェアを開発するエンジニア
エンジニア業務としては花形の一つで、市場ニーズも高く、広く深い高度な技術知識を求められることも多くありますので、IT技術を学ぶことが本当に好きな方に是非志していただきたい職種と思います。
AIエンジニア・データサイエンティスト
おそらく2020年現在、IT領域最高の花形エンジニアではないかとおもいます。
データサイエンスの領域も業務領域は様々です。プログラマ、オペレーターとしてデータ解析システムのモジュール開発や運用を担当したり、すでに開発されたAIエンジンを運営しているサービスに導入したりするエンジニアもいますし、データサイエンスの最先端の学術知識を駆使してより精度の高いAIエンジンを設計する人もいます。
特に後者、システムに大量のデータを学習させ、AIとして活用するモデルを考える人たちは、エンジニアというのはもはや失礼で、データサイエンティストと呼んだ方が適切かと思っています。
データサイエンティストになれる方は、大学院で研究を続けた一握りの方だけかもしれませんが、データサイエンティストになれなくても、最先端のITテクノロジーを経験できる領域であると思います。
終わりに -エンジニアを名乗らずにエンジニア業務をする人もいる-
今回は、様々なITエンジニアの職域について述べてみました。ITエンジニアという職業の幅が増えている以上、その逆エンジニアを名乗らずエンジニア領域の業務をしている人もいます。
例えばバックオフィス職の方で、業務効率向上のためWindowsアプリを開発したり、RPAを導入し、RPAソフトに作業プログラムを入力して事務雑務をやらせていたりしている方もいます。マーケティング職の領域でも、市場分析のために複雑な集計プログラムを書いてデータ集計を行っている方もいます。
以下の記事によると、20年後には90%以上の職業がなくなると行っています。
今でこそ、エンジニア職と呼ばれる仕事は増え続けていますが、そのうちビジネス上の基本スキルと昇華され、エンジニア職と名乗れる仕事は限定的になるのではないかと思っています。今からエンジニアを志す方はこのトレンドも踏まえて検討した方が良いかもしれません。
他にも似た記事を書いている方は大勢いますが、副業でエンジニアになることを検討している方や、学生でエンジニアを志している方に少しでもこの記事が参考になれば幸いです。
Photo by Stacy Marie on Unsplash