私はジャンル的にインフラエンジニアなんですが
ある程度、実務経験を積んでいくと頭打ち感が出てきます
ここで言う頭打ちというのは「スキルの伸びしろ」や「給与面」に関してです
もちろん、今の業務をより深く追求してスキルを積んでいくのもありだと思いますが
その分野以外も学んでいくという選択肢も十分利にかなっています
その場合、現場で学べることに限界があるので
主に机上の勉強になってきますが、この業界で切磋琢磨していくには必要不可欠との認識です
今回はインフラエンジニアとプログラマーのスキルの横展開を例にあげてお話しします
「スキルの横展開」というのは転職はもちろんですが
インフラエンジニアだけど、プログラミングのスキルがある
プログラマーだけど、インフラにも明るいということですかね
以下を順序だてて説明します
・スキルの横展開のメリット
・横展開のための勉強方法
将来に向けて自分の仕事の幅を増やすために是非一読ください
インフラエンジニア、プログラマーってどういう仕事?
両者とも同じIT業界になりますが、レイヤー的に担当範囲が異なります
<用語の説明>
H/W
ハードウェア。サーバ機器やネットワーク機器を表します。H/W障害と言われたら物理的にサーバやネットワークが壊れたことをいいます
M/W
ミドルウェア。OSとアプリケーションソフトの中間に位置します。カテゴリー的にはソフトウェアに分類されます。データベースソフトのOracleとかSQLがこちらにあたります
S/W
ソフトウェア。エンドユーザが直に触るソフトとの認識が近いです。会計ソフトやメールソフトが該当します
業務のすみわけは基幹システムや業務システムで分かれていたりします
またシステムを作るときプロジェクト的に上位レイヤー~下位レイヤーで担当が分かれたりします
上位レイヤー⇔下位レイヤーへの担当者間の直接的な意見交換はあまりないように思います
そもそもプロジェクトマネージャが間に入ってまとめています
経験上、両者が直接絡むことはそのプロジェクトの性質によるところが大きいです
仕様についての問い合わせは普通にありますが、それ以外は多くはない認識です
プロジェクトによっては、担当者のすみわけがちゃんとされているケースが多く、これがそのまま責任分界点となってきます
なので、自分が担当している範囲はきちっと説明できるようにしておきましょう
インフラエンジニアとは
H/W部分とM/W部分を担当します
インフラエンジニアは以下のエンジニアのことを総称して言います
・サーバエンジニア ・ネットワークエンジニア ・データベースエンジニア |
他にもAWSやAZUREなどの使うクラウドエンジニアなどがあります
ただ、こちらはサーバエンジニアに含まれるような気がします
各担当の責任分界点をいいますと
仮想化などは大抵サーバエンジニア寄りになると思われます
ネットワーク機器の仮想化もあるのですが、仮想の対象の大半がサーバだからという考えですね
SANスイッチ(サーバエリアネットワークスイッチ)もサーバ寄りですね・・・
サーバをはじめストレージと仮想化はサーバーエンジニア担当と思った方がよいかもしれません(泣)
対してネットワークエンジニアはネットワーク機器担当ということはブレないのですが、ロードバランサーすらサーバ担当寄りの可能性があります
さすがにBig-IPはネットワーク担当だと思いますが、ロードバランシングする機器はサーバ機でも存在するので
(Big-IPのOSはLinuxベースなのでサーバ担当では?という方向から話があがったことあります)
データベースエンジニアはM/W寄りになりOracleやSQLなどが範囲に入ります
いろいろ書きましたが、これらの定義は結構あいまい部分がありまして
その職場によって担当範囲や責任分界点が変わってくる場合が多いです
インフラエンジニアの深堀り記事はこちらにあります
プログラマーとは
コーディングをするという意味ではS/W以上のレイヤーになります
仕様が決まっている製品前提で構築運用するインフラエンジニアと比べ
1から創作する要素が強いので、独創性やアイデアが重視されるときもあり
コードの書き方はそのプロジェクトで方針が決まっていたりしますが、作り手のセンスが問われます
下流工程で要件が満たせなかった場合、後ほどの上流工程で巻き取りが発生したりするケースもあります
また、プロジェクト途中で仕様が変わると大きなで戻りが発生するのも特徴となります
プログラマーも種類が細かく分けられますが、インフラエンジニアからの関連性を考えると
以下が近しいかと思います
・Webプログラマー ・組み込み系プログラマー ・汎用系システムプログラマー ・オープン系プログラマー |
どれもサーバ、ネットワークありきの環境上にシステム開発することが多いです
使用する言語も仕事の種類によって変わってきます
インフラエンジニアとプログラマーの対比
両者を比較してみますとこんな感じになります
プログラマーとインフラエンジニアの比較表
プログラマー | インフラエンジニア | |
年収 | 400~800 | 450~650 |
勉強の頻度 | 常に | 一定まで勉強すれば頭打ち |
勤怠 | 残業多い | 残業少ない(運用監視など夜勤もある) |
年収
インフラエンジニアの場合
ポジションによって変わってきます
■設計構築
プロジェクトによって、要件定義やパラメータ設計の有無が変わってきますが
基本設定・詳細設計~構築までを担当します
構築したシステムは最終的には運用チームに渡します
運用監視より高いスキルを求められるので給与は高めとなります
■運用監視
サービス稼働中の機器の運用をしたりステータス監視をします
障がいなどが発生したら即対応します
職場によって運用の作業量が変わってきます
障がいが発生しなければ極端にタスクが少ないところもあります
基本24時間365日なので、シフト制のところが多かったりします
プログラマーの場合
使用言語やポジションによって年収が著しく変わります
プログラマーも要件定義から基本設定・詳細設計~コーディング
テストまであります。工程自体はインフラ構築と同じような感じですが
プログラミングの方が実作業のボリュームが多いです
こちらは共通項ですが上流工程の方が給与が高く、下流工程の方が低くなります
これは、上流工程の方が難易度が高く、下流工程も対応できるからとなります
下流工程ができるエンジニアはいますが、上流工程しかできないエンジニアはほとんどいないからです
使用言語は完全にプロジェクトに依存します
下図は一連のプロジェクトの流れとなります
基本はこの形でですが、プロジェクトによって変わったりします
※インフラ構築(インフラエンジニア)もシステム開発(プログラマー)も基本はこの形だが
随所微妙に工程の名称が変わる
勉強の頻度
エンジニアという職業は基本的に常に勉強をしていくものだと思っていますが
インフラエンジニアよりプログラマーの方が技術の移り変わりが早いので
新しい情報を受け入れれるようアンテナを高く持つ必要があります
言語ごとに共通した機能や共通する仕様などがあるので
すべて新しい知識になるというわけではありませんが、特有の概念があるので、実際に学習してみない得られなかったりします
プログラマーは自宅でも環境をそろえやすいので勉強しやすいですが
インフラエンジニアは実機を用意するのは難しかったりします
勤怠
完全に職場によりますが、プログラマーは比較的残業が多くなると思っています
インフラエンジニアも構築担当だとプロジェクトにより残業過多となります
運用監視だと24時間365日対応となり、シフト制で夜勤とかはありますが、残業は少ない傾向です
プログラマーによくあることですが、そもそもの要件定義自体がまとまらなって収集つけるのに時間がかかったり
要件が変更になりスケジュール調整を余儀なくされるということは「あるある」となります
スキルの横展開のメリットはもりだくさん!!
スキルの横展開というのはここでは以下を想定しています
インフラエンジニア → +プログラミング知識を身につける
プログラマー → +インフラ知識を身につける
横展開しすぎると職種が変わってきますので
あくまでも、プラスαの知識を身につけることをここではメインに考えます
プログラミング知識を身につける
インフラエンジニアがプログラミング知識を身につけます
構築・運用に限らずシェルスクリプトを作ったり、それをメンテナンスできる知識があるのは大きいです
こういった細かいタスクはかなり多いので、プログラミング知識はとても役に立ちます
最近はクラウド系が多いですが、サーバ量産などはスクリプトを組んだりします
膨大なログなどもエクセル関数(マクロ)などで変換できればいいですが、お手製のデバッガーなども作れたら
こちらの方が利便性が高いです
作業の高速化を実現することができます
勉強方法としては
WindowsだったらPowerShellを深堀すればいいし(コマンドプロンプトはPowerShellに大体置き換えられます)
Linuxだったらbashやcshを深堀して、シェルスクリプトを作成すればいいと思います
これらを学習することでプログラミングの基礎知識を身に付けやすくなります
例えば、以下のプログラミングスクールだと無料相談があったりします
イメージが付かない場合は、まずは相談してみるのもいい機会になったりします
今後の良いヒントになるかもしれませんよ
【DMM WEBCAMP 学習コース】
はじめてのプログラミングコース
とりあえず「さわってみる!」ことがエンジニアとしてのレベルアップの近道になります
インフラ知識を身につける
プログラマーがインフラの知識を身につけます
実はプログラマーがインフラを学ぶのは、相乗効果はもとよりプログラマーのスキルにプラスにはなりにくいと考えております
それは業務的に関連性が少ないからです
Linuxサーバ上やWebサーバ上にシステムを構築することは多々あると思いますが
基盤部分、つまりサーバはインフラエンジニアが用意してくれるのでプログラマーにはその知識は不要と考えています
しかし、プログラマーからインフラエンジニアにスキルチェンジを意識するのであれば学習するのはアリです
将来のキャリアプランを考えた次第となります
プログラマーは年収が高いように言われていますが、年収幅が広いのも事実です
順調にスキルアップやステップアップしていければいいのですが、年収が低い状態のまま年を取った場合
もちろん個人差はありますが、プログラミングは年を取っていくともろ作業スピードに影響してきます
それを見越してインフラエンジニアに転職を考えるというのがインフラの技術を学ぶメリットとなります。
プログラマー視点でインフラを見るという意味であれば
プロジェクト全体のPMやコンサルタントなどもできるようになります
インフラの要件仕様が事前に分かればそれに合わせて仕様を合わせてコードを書くことも可能です
いかがでしょうか
あまり交わらない二つの職種ですが
日頃に「こんなスキルがほしい」「スキルがあったらこういうことができる」と感じることは
実はお互いの技術かもしれません
私は運用監視やっていたころからプログラミングの知識があれば業務改善できるしなどと思っていました
皆さんもこういった経験は少なくないと思っています
【まとめ】具体的にどう学んでいくか
インフラエンジニアがプログラミングを学ぶことは今の時勢的にも求められてきています
インフラ構築、システム構築、運用・保守などのすべての工程ができるエンジニアをフルスタックエンジニアと呼びます
フルスタックエンジニアまで行かなくても、プログラミングスキルがあれば業務を自動化出来たりします
また、サーバに仕掛けられたスクリプトなどが不具合起こした場合はそれを読み取る知識は必要です
Windowsだったら、PowerShellやコマンドプロンプト(bat)
Linuxだったらシェルスクリプト など、これらはプログラミングの知識が必要となってきたりします
一例を出しましたが、プログラミングスキルはインフラエンジニアに必要不可欠になってきてるのは間違いないでしょう
私も大手を何社か経験していますが、プログラミングスキルがあるインフラエンジニアはどこも重宝されます
ただ、こちらは独学で学ぶのは効率が良くないと考えます
在宅でもできるプログラミングスクールで質良く学ぶのが近道と考えていますのでこちらの記事が参考になると思います
今度は逆に「プログラマーがインフラを学ぶ方法」についてですが
ネットワーク系とサーバ系の基本的な知識は習得するべきと考えています
インフラ部分の基礎的な仕組みは知っておいた方が何かと役に立ちます
資格取得についても余力やモチベーションが高いのであれば是非取得に向けて頑張ってほしいです
以下の記事は資格取得やインフラエンジニアの勉強法として、参考になると思います
まずは自分にとって足りない知識&必要とされているスキルを意識して学習すればいいと思っています
スキルを身に付けたら転職を狙ってみては?
フリーランスだっておすすめ!エンジニアとフリーランスの相性は良い