ITエンジニアを目指すなら先に決めておきたいのが職種です。
何といっても職種によって学習内容が違うので職種を決めないことには効率的な学習ができないからです。
エンジニアといっても職種によってやるこことが違います。
こんなはずじゃなかった、とならないようにね。
もちろん難易度や収入も違うので自分に合いそうな職種を1つに絞っておきましょう。
途中から他の職種に変えることもできます。
できれば、その次に狙う職種やトータルのキャリアプランも考えておくといいです。
実際には迷って決められないとは思うけど、人が決められない原因は知識・経験不足だと分かってるの。
とはいえ、調べてばかりで職種に詳しくなっても仕方ないからある程度まで調べたら思い切ってひとつに決めてしまったほうがいいわね。
エンジニアにとって最初の決断と言ってもいいかもね。
どの職種にもメリデメがあるし、後から転向するチャンスもあるから今いいと感じるのにしておけば大丈夫。
エンジニアの職種は細かい定義があるわけでないので解釈の違いはあるでしょうがおおむねこの記事のように分類できます。
職種
プログラマー(PG)/コーダー
プログラミング(コーディング)を担当するエンジニア全般のことです。プロダクトによってひとつのプログラミング言語だけで開発したり、複数言語を併用して開発することがあります。
ITエンジニアは複数の言語とデータベースや通信のスキルを併用することが多いです。
従来のシステム開発の分類で要件定義や設計、管理などの上流工程を行うエンジニアをシステムエンジニア(SE)と呼び、プログラミングなどの実装部分を開発するエンジニアをプログラマーと呼びます。
コーダーは単にソースコードレベルで実装するコーディング作業を担当するエンジニア全般の呼び名です。
コーダーはやや単純なイメージがありプログラマーのほうが複雑なことまで担当している印象があります。
テストエンジニア
新人エンジニアがとりあえず担当することが多いのがテスト工程です。開発担当のプログラマーがそのままテストを担当することもあります。
テストする内容はSEやプログラマーが決めることが多いので単純作業になりがちです。
海外ではテストエンジニアも専門化され一定の地位を築いているのですが、日本では最下流工程を担当する新人、または低スキルエンジニアという印象があります。
早くスキルアップできるような開発工程へ努力していく段階にあるのがテストエンジニアの現実です。
テストは今のところはプログラムで自動化するか、プロジェクトメンバーが担当するか SES や派遣会社から人員を調達して行うことが多いです。
自動化したほうが何度も素早くテストが行えるので大規模プロジェクトでは自動化します。
そのためエンジニアがテストするのは自動化できないものや新規プロジェクト、小規模プロジェクトなどになってきます。
やはり将来性は低いのでテストエンジニアは早めに卒業してステップアップしていったほうがいいです。
とはいえ、テストエンジニアにも固有のスキルがありテストスキルはアップしていけるでしょうから、副業エンジニアでとりあえず仕事があればいいというくらいのニーズの人ならちょうどいいかもしれません。
フロントエンドエンジニア/Web系プログラマ
ECサイトやWebサービス、社内システムなどで一般ユーザーがブラウザで見る画面を作るプログラマーのことです。
Web画面として仕様を満たすデザインと機能を実装します。
どちらも広い意味ではWebエンジニアに含まれます。
フロントエンドは技術の変化が激しく需要の多い職種のひとつです。
変化の激しいエンジニア業界の中でも特に新技術に注目しておかないといけないのがフロントエンジニアです。
JavaScriptやRailsなどのフレームワークで動きのある画面にするスキルが求められる傾向があります。
参入するハードルが低いので30歳くらいまでの比較的若いエンジニアが多いのが特徴です。
スキル的にはWebエンジニアよりコーディング能力が重視されデザイン能力はあまり求められないイメージです。
〇:デザインをよくすることが好き
〇:操作できる機能をよくすることが好き
〇:好奇心旺盛(新しいものや変化が好き)
×:デザインや操作は気にならず仕様通りに実装するのが好き
×:同じスキルを極めたい(変化が嫌い)
サーバーサイド/バックエンドエンジニア
一般ユーザーからは見えない管理画面やサーバー内での処理、DB構築/管理などを担当するエンジニアのことです。
大量のデータを深夜に一括処理したり、定期処理したりするバッチ処理なども担当します。
コンピューターの処理はクライアント(ブラウザやアプリ)とサーバー(サーバーマシンやDB)に分かれていますが、そのサーバー関連処理の実装/DB構築/運用などを担当します。
ブラウザやアプリにデータを送信する処理で、それに必要なデータをDB(データベース)に入れて管理しています。
専門性が高く必要なアルゴリズムを自分で考えて実装するロジカルなエンジニアです。
専門性が高い分、需要(求人)も多くエンジニア寿命も長くシニアエンジニアも多いです。
フロントエンドやインフラエンジニアの仕事を頼まれたときもスキルが生かされ相乗効果でエンジニアとしての価値も上げやすくなります。
特にDB構築やチューニングはシステム全体のパフォーマンスに大きく影響する重要な部分です。
特定言語さえ学べばいいというものではないので学習環境の構築の難易度がやや高く個人でのスキルアップがしにくいのが特徴です。
会社やプロジェクトの現場で学びスキルアップしたほうがやりやすいです。
ちなみにバックエンドとサーバーサイドエンジニアはほぼ同じ意味です。
どちらを使うかは担当者/会社などの文化に依存します。
フロントに対してはバックのほうがわかりやすいですが、サーバー関連のことほぼすべてを担当する可能性があるのでサーバーサイドと呼んだほうが実質に近いです。
〇:アルゴリズムを自作したい
〇:画面のデザインや操作できる機能に興味が薄い
〇:フルスタックや汎用的なエンジニアを目指している
×:自分でアルゴリズムやDB設計するのは興味がない
×:責任が重いのはイヤ
×:人に見てもらえる部分を作りたい
Web開発エンジニア
ウェブサイトやウェブアプリケーションの開発を行うエンジニアです。
フロントエンド(クライアントサイド)やバックエンド(サーバーサイド)の開発を担当するエンジニアをまとめてWeb開発エンジニアと呼びます。
インフラエンジニア
サーバーやネット上で動くOSやアプリ/ツールなどをインストールしたり設定/運用するエンジニアです。
開発環境・テスト環境・本番環境などの構築/運用を担当します。
特定言語には依存せずOSやサーバーアプリなどの幅広い知識が求められます。
具体的にはサーバーをオンプレで実装したり、AWSなどのクラウドを使うスキルが必要になります。
インフラは基盤という意味でコンピューターや通信の実行環境のことを指します。
インフラエンジニアもサーバー関連の仕事ですが、インフラエンジニアはサーバー上で動くものを作るエンジニア、インフラエンジニアは動く状態にして調整するエンジニアです。
サーバーOS/アプリやDBシステムのインストールや管理、ネットワークの設定や管理、アクセスが集中したときの負荷分散処理などを担当します。
サーバーサイドエンジニアよりもさらに専門性が高いので未経験者の採用は少なく狭き門になっています。
ネットワークエンジニアをインフラエンジニアに育てる会社もあるのでそちらからのルートもあります。
スキルアップにも時間がかかるので目指すなら長期計画で挑み、なるべく社員で長く働ける会社を選んだほうがいいです。
〇:縁の下の力持ちになれる(地道な作業が得意)
〇:機械が好き(設置や組み立ても行う)
〇:体力には自信がある
〇:プログラミングはあまり好きじゃない
×:早くフリーランスになりたい(フリーでインフラ案件を取るには高いスキルが必要)
オンプレ VS クラウドサーバー どちらがいい?
安く手軽に始められるのでAWSなどのクラウドサーバーが流行りました。
便利で高性能だったから使い始めたプロジェクトは多かったな。
流行ってみるとAmazon側のせいで障害が起きても対応が遅かったり、従量課金でアクセスが増えると莫大な利用料がかかるなどの問題が出てきました。
そこでまたオンプレミスでの自社サーバー構築/管理スタイルが見直されてきています。
Amazonのようなビックテックは頭がいいのでその動きに反応して対応速度を速めたり、値段設定を調整してきます。
そうなるとどちらがいいかは一概に言えなくなります。
ベストな構成を目指すのがエンジニアというものさ。
ビジネス的にはクラウドだと他社のサービスに依存することになり首根っこを掴まれたり、首輪をつけられた状態になるので自由度が下がります。
ある日、急に値上げされたり、契約違反で利用停止にされては困りものです。
今後も変わっていくでしょうが、たぶんAmazonのほうが賢いのでAmazonが儲かるバランスが維持されるはずです。
ビジネス的には出来るならオンプレで自由度を残しておいた利益や事業を拡大しやすくなるはずです。
AmazonとMicrosoftがケンカして両社の製品を同時に使うと性能が落ちるみたいな嫌がらせをコッソリされても分からないだろ?
そんなバレるようなことはしないだろ。
でも、アメリカ企業だから情報漏洩とかもあんまり責任とってくれないんじゃないか?
そういうのがあるからサーバーでも自由や主権を持つことは大事なことなんだ。
Amazonの通販サイトも撤退する大手企業が続出してるのよ。
大手ブランドの商品はAmazonで買えないのが増えてるの。
ランキングとかAmazonの評価に依存するんじゃなくて自分の価値は自分の会社でアピールしたほうが得だって気づいたのね。
逆に考えるとAmazonがやっている以上はAWSのようなクラウドサーバーがすぐに消えてしまうようなことはないでしょう。
ビジネスで大コケして倒産するような可能性は低いです。Web系企業だけあってユーザーの声に敏感だからです。
これがGoogleあたりだといきなりサービスを終了したりするので少し怖いです。
Googleは何年もかけてかなり投資してたのにいきなりやめたりするよな。
そこそこ黒字になるくらいのとこで続ければいいのに。
ビッグテックはいさぎいいな。
とはいえ、Amazon は一般客相手の BtoC ビジネスがメインで顧客の意見に敏感なので、ほどよいお得感を演出していくはずです。
トータルのマーケティング力が高いので Amazon の AWS や同じくユーザーの反応に敏感な Google の GCP が普及していきそうです。
マイクロソフトも Windows のシェア率の高さや開発ツール制作/一部無料提供、Git の買収、ChatGPT などのAIとの親和性などのアドバンテージがあります。
マイクロソフトの Azure も生き残りクラウド3強体制が続きそうです。
クラウドはWeb系なので失敗してもリカバリーしやすいのですが、オンプレでサーバーを何千万円分も買ってしまうと後戻りできないので、早さが求められるITビジネスではクラウドが有利な印象です。
オンプレは金融系など安全性や信頼性が求められるシステムでは有利なので生き残っていくでしょう。一般的にニーズに合った高性能なものが生き残っていきます。
スマホ(モバイル)アプリエンジニア
iPhoneやAndroidスマホで動くアプリを作るエンジニアのことです。
それぞれのOS用のプログラミング言語やクロスプラットフォームの言語を使います。
最小なら実装部分はプログラマーひとりで開発できるため比較的自由に開発しやすいです。チーム開発が好きじゃない人にも向いています。
組み込み系(エンベデッド)エンジニア
いろいろな機械や装置の内部に組み込まれるコンピューター処理部分を作るエンジニアです。
仕様変更が比較的少ないため中高年でもプログラミングを担当しやすいです。プログラミングだけが好きなエンジニアにも向いています。
言語はC/C++、Javaの他にアセンブラが使われることがあるのが特徴的です。
IoT の普及にともない需要は増加傾向にあります。
システムエンジニア(SE)
ある程度の人数で開発するときに上流工程(要件定義/設計/ドキュメント作成)を担当するのがシステムエンジニア(SE)です。
業務システム開発などで昔からある分業スタイルで、プログラマが実装(プログラミング/コーディング)を担当し、設計をSEが担当するという分け方の片方です。
ウォーターフロー開発では設計が終わったあとにプログラミングによる実装を行うので実装やテストは下流工程に分類されます。
近頃はフロント・バックエンド・インフラなどエンジニアの分類がはっきりしてきましたが、それ以前にざっくりとプログラマとSEというように分けていたころからある古い分類です。
今の分類された各エンジニア業務でもそれぞれ設計やドキュメント管理業務があるのでそれぞれにSEに当たる業務があります。
少人数のプロジェクトやスタートアップのような実験的なプロジェクトでは設計の他にプログラミングやサーバーサイドの業務を掛け持ちで担当する兼任的なSE業務もあります。
仕事はクライアントからの要件定義、システム設計、仕様書作成、スケジュール管理、テストなどのフェーズで主にドキュメント(文書)管理されるものを担当します。
ドキュメント管理はスタートアップなどをプロダクトファーストでとにかく実装してアジャイルで品質向上していく場合はあまり重視されません。
仕様がすぐに変わってしまうのでドキュメントにあまり価値がないからです。
コスト削減のためソースに説明を書くくらいでなるべくドキュメントを作らないように開発する手法も広まりつつあります。
ドキュメントは仕様変更に合わせて常に更新していかないと役に立たないので管理コストもかかり効率が悪い面があるからです。
ですが、安定したビジネスを展開していたり、変化の少ない社内システムなどではシステムの把握や管理が重要になってくるのでドキュメントが重要になります。
完全自社開発で仕様や設計を把握したエンジニアが社内にいるなら何とかならなくもありません。
ですが、外部に委託する場合は把握した人がいなくなってしまうのでドキュメント管理が必須になります。
大プロジェクトの改修でクライアントが「あまりドキュメント管理されてない」と言ってくるようなのはデスマリスクが高いな。
担当者が誰一人仕様を把握してないこともあったな。
そんなんで仕事になるの?
なる訳ない(w
みんなで仕様を解析しながら開発するしかない。
だからその時間の分だけデスマ化していくのさ。
大きなプロジェクトや大企業になるほどドキュメントの価値が上がりSEの需要も高まります。
またプログラミングを行わないことから技術変化の影響が少ないのもメリットです。
使うJavaScriptフレームワークが変わってもドキュメントレベルではあまり変化がないので技術をあまり知らなくても仕事が務まります。
仕事としてはプログラマが経験を積んでSEになるケースが多いです。
未経験からSEになることもできますが、プログラミングやサーバー、インフラなどの実務経験がないとそれらのエンジニアに軽く見られがちなので少しは技術を習得しておいたほうが仕事がやりやすくなります。
シニアになっても仕事が取りやすいエンジニアでもあります。
技術が分からない人に技術を説明するのは大変なんだ。
少しでも技術を知っていてくれたほうが無茶なことを言われにくいから助かる(笑
SEなんて減らした方が人件費が浮くと思って実際に減らすと誰もドキュメント管理してなくてデスマ突入みたいなことになる。
それで長年やってる会社はちゃんとSEを増やしてプロジェクトを安定させようとするんだ。
小さいプロジェクトではリーダーが兼任しがちなんだけど、ドキュメント管理が手に負えなくなってきたらSEの増員を上に頼んだ方が無難。
ドキュメントを作るのは面倒ですが結局必要になります。
今はネットで開発手法もどんどん共有されて進歩しているので、この先、今よりもSEの価値が高まっていく可能性も考えられます。
ある意味、論理的思考力が一番必要なエンジニアともいえるな。
本質を見抜けるようにしておけ。
ソフトウェアエンジニア
ソフトウェアの開発・設計・テスト・メンテナンス、プログラミング言語やフレームワークを使用してソフトウェアを作成するエンジニアです。
プログラマーやコーダーに近いイメージですが、設計から参画しソフトウェア全体の開発に関わる傾向があります。
AIエンジニア
機械学習や人工知能技術を活用してシステムを開発するエンジニアです。データ解析や予測モデルの構築、深層学習の実装などを行います。
データベースエンジニア
データベースの設計・開発・管理、SQLを使用してデータの操作やクエリの最適化などを行うエンジニアです。
データベースを得意とするサーバーサイドエンジニアというイメージです。
クラウドエンジニア
クラウドプラットフォームの設計・構築・管理を行うエンジニアです。
AWSやAzure、Google Cloudなどのクラウドサービスを活用したシステム展開を担当します。
セキュリティエンジニア
システムやネットワークのセキュリティを確保するエンジニアです。
脆弱性の診断や対策、セキュリティポリシーの策定などを行います。最新情報のチェックも重要な仕事のひとつになります。
フルスタックエンジニア
フロントエンドとバックエンドの両方の開発を担当するし、ウェブアプリケーションの全体的な開発や設計を行うエンジニアです。
ウェブアプリやシステムを1から自分で作れる幅広いスキルが必要になります。
ネットワークエンジニア
インフラ(システムの開発や動作する環境)のネット部分を担当するエンジニアです。
ネット環境を守る重要な仕事ではあるものの一般の運用担当などは深夜業務などもありエンジニア界ではやや地位が低いイメージがあります。
スキルアップして極めていけば需要も単価も上げられるのでネットワークエンジニア全部がイマイチということはありません。
ただ、採用されやすい運用業務でエンジニアとなってそのまま仕事をしているだけだとあまりスキルアップできません。
自分で勉強してスキルアップしていきましょう。
〇:深夜業務や深夜の呼び出しも我慢できる
〇:とにかく早くエンジニアになりたい
×:働きながらスキルアップしたい
×:高給が欲しい
×:ネット関連資格の試験勉強をしたくない
ゲームエンジニア
ゲームの開発においてプログラミングやグラフィックス、物理エンジンなどの開発を行うエンジニアです。
ゲームシステムやエンジンやツールの使用や改善を担当します。3Dゲームではベクトルなどの物理系知識も必要になります。
MQLエンジニア
MQL(MetaQuotes Language)は、MetaTrader プラットフォームで使用されるプログラミング言語です。
MQL エンジニアは、主に金融市場や外国為替取引(Forex)に関連するアルゴリズムやトレーディング戦略を開発するために MQL を使用するエンジニアです。
トレーディングとMQLプログラミングの知識が必要になります。
データサイエンティスト
データ解析や予測モデルの構築を行う職種です。機械学習や統計手法を活用してデータを分析します。
SQL や Python などの言語でプログラミングしながら研究します。
SREエンジニア
システムの信頼性や利便性などの性能向上のため開発と運用を統合する DevOps の原則に従いシステムの最適化や機能拡張するエンジニアのことです。
システムの自動化や効率化、クラウドサーバーへの移転など大きなシステム変更などを担当することもあり広い知識が必要になります。
インフラエンジニアと担当範囲が近いですが、インフラエンジニアが主に設計・構築を担当するのに対してSREエンジニアは構築後のシステムを開発・運用の両面から信頼性を高める役割を担当します。
UI/UXデザイナー
デザイナーといってもグラフィカルなデザインではなく構造の設計や最適化を担当します。
インターフェースの設計やユーザーエクスペリエンスの改善を行う職種です。
ユーザーのニーズや要件を考慮して使いやすいデザインを作成します。
ITコンサルタント
エンジニアより一段高い目線でITを他社のビジネスに活かす戦略をアドバイスする仕事です。ITコンサルと略します。
コンサル企業やSIer企業に入社するか、経験を積んだエンジニアが転職することでコンサルになれます。
プログラミングなどのエンジニア業務は担当しないので個々のエンジニアスキルがなくても職に就ける可能性があります。
主に上流工程を担当しプロジェクトの提案や設計、最適化のためのアドバイスを行いますが、企業によっては製造・テストなどの下流工程まで担当することもあります。
上流から下流までプロジェクト全体を担当する企業を SIer(SI) といい、大手企業はこの業態をとっています。
コンサル自体は企業や組織の情報技術戦略の策定やシステム開発、運用・保守などの支援を行うコンサルティングサービスを提供する専門家です。
情報システムの分野に特化したコンサルタントであり、顧客企業のビジネス目標や業務プロセスを理解し、最適なIT戦略やシステムの提案、導入、運用、改善を行います。
具体的には、ITインフラストラクチャの構築やアプリケーション開発、データ分析、情報セキュリティ対策、クラウドソリューションの導入などの業務を担当することもあります。
ITコンサルの役割は、ビジネスとITの融合を図り、経営戦略の実現を支援することにあります。
ゲームエンジニア
ゲームはいろいろな種類があるので種類ごとに作るものや必要なスキルが違います。
ブラウザゲームなど比較的一般的な技術で作れるものなら一般的なプログラミングスクールからでも就職できるチャンスがあります。
ネットワークやサーバーサイドエンジニアであればゲーム開発でも就職しやすいです。
せっかくゲームを作るんだから、サーバーとかより動きとか独自のロジック部分を作りたい人が多いだろう。
ところが、ゲーム開発は特殊なスキルが必要でいわゆるプログラミングスクールではそれを教えていないんだ。
Switchなどの専用ゲーム機やオンラインMMOなどの開発には高度な技術が必要になります。
新卒採用でも即戦力に近い高い技術が求められ募集人数も少ない狭き門になっています。
ゲームとか面白そうな仕事は人気があるから競争が激しくなるのさ。
ポートフォリオもじゃんけんゲームとかのミニゲームじゃなくてガチなゲームを作らないと通用しないぞ。
こちらを狙うなら一般的なプログラミングスクールではなくゲーム専門のスクールで2年くらいみっちり学んだほうがいいです。
新卒はポテンシャル採用なのでゲーム会社へ就職するなら理系大学が有利と言われています。
一般的なプログラミングスクールからゲーム開発を目指すなら、ブラウザゲームなどの他にスマホアプリのゲーム開発を目指す手もあります。
そこから本格的なゲーム会社へ移ればもっと大きなゲーム開発にも参加できるチャンスがあります。
〇:プログラミングの勉強が好き
〇:プログラミングで独自のロジックを組むのが得意
〇:細かい仕様書がなくても自力でロジックを組める
〇:ミニゲームを作るのが好き(スマホゲー向き)
〇:ネット/サーバーサイトの仕事メインでもゲーム開発に関わりたい
×:高い自己解決力が必要(自分で組んだロジックは自分でしか直せない)
×:徹夜/デスマはイヤ(会社によってはブラック労働になりがち)
×:長く働きたい(募集人数が基本的に少ない)
×:ゲームアイディアに自信がある(それならゲームプランナーを目指すべき)
社員やフリーランスなどの契約形態
主な働き方は、正社員、SES社員、契約社員、フリーランスやその他の業務委託契約などがあります。
もっと細かく分類すると契約の仕方によっていろいろありますが大枠ではこの4パターンです。
社員系を目指すなら基礎スキルを高め就職率を上げていきましょう。
フリーランスならクラウドソーシングなどから始めて実際に稼げるスキルを身につけていきましょう。
エンジニアの作るプロダクトは利益を上げることが目的なのでビジネス意識も持っておきましょう。
分類などの基礎知識
Web業界
ネットを使ったサービスやアプリ開発・運用を行う業界です。多くのプログラミングスクールがこの業界を主なターゲットにしています。
SIer業界
社内外の業務システムの開発・運用を行う業界です。比較的歴史が古くSE/PGの分類やウォーターフロー開発などが特徴です。
ソフト業界
PCやスマホ上で動くソフトウェア、いわゆるアプリ(アプリケーション)を開発する業界です。
ハード業界
PC・スマホや周辺機器、IT家電などのハードウェアを開発する業界です。
組み込み系
業界とはあまり言いませんが家電その他の機器の内部システムを開発する分野です。ソフトとハードをまとめて開発するのが特徴です。
ゲーム業界
ゲーム機・スマホ・ブラウザなどで遊べるゲーム開発全般を行う業界です。
コメント