年々IT技術を扱うのは簡易化しており、これはインフラでもアプリでも同じです。その結果、アプリエンジニアがインフラも扱う、インフラエンジニアがアプリも扱う、といったことが増えています。
プロジェクトによってはインフラとアプリで完全に役割分担しているかと思いますが、そのままの状況に甘んじていると選択肢を狭めることになるでしょう。また選択肢が狭くなるだけでなく、幅広く技術を扱えるエンジニアに淘汰されてしまうことにもなります。
技術の幅が広ければいずれかの技術が陳腐化しても他のスキルは使えますし、普段から視野が広くなるので市場に必要なスキルアップも早いです。そして今一人で幅広く技術を担当できるフルスタックエンジニアが求められているため、アプリエンジニアもインフラエンジニアもフルスタックエンジニアを目指してスキルアップしていった方が良いでしょう。
その方が一人で開発できるため働き方の自由度が高く、市場に取り残されることも少ないはずです。
技術は狭く深くの罠
参考URL:https://pixabay.com/
職人気質の人ほど、技術は狭く深くと考えているかもしれません。理由としては、中途半端な技術を身に付けても仕方がない、他のエンジニアに勝てる技術でなければ意味がない、といったことでしょう。
実際中途半端な技術だと使えないこともあり、プロジェクト内によりスキルの高いエンジニアがいれば自分の中途半端な技術は採用されないことも多いかもしれません。しかし、これらはあくまでも自分自身をプロジェクト全体のパーツとして考えた場合に当てはまることです。
パーツなので、不要になれば切り捨てられる可能性もあります。IT技術は特に陳腐化しやすく、今後AI化される領域も多岐に渡ります。単一スキルに特化してしまうと、機械化される危険性がかなり高いことがわかります。
いくら単一の技術力が高くても、その技術が不要になれば自分自身の需要がなくなってしまうということです。たしかに幅広く中途半端な技術力があっても使えないことが多いですが、今後増えていくであろう少人数開発や個人開発なら中途半端な技術も役立つケースが多いです。
中途半端であってもある程度スキルがあれば、必要に応じてそこの技術を深堀していくことができるからです。また技術が今後簡易化すれば、中途半端な技術であっても使えることが多くなります。
技術変遷を考えると、職人気質の人ほど注意が必要かもしれません。一つの技術を極めるスタイルはエンジニアとして格好良いのですが、技術動向的にはリスクが高いかもしれないということでした。
インフラエンジニアがフルスタックエンジニアになるには
参考URL:https://pixabay.com/
どの種類のエンジニアも技術の幅を広げた方が今後働きやすいということでしたが、インフラエンジニアについては特にその傾向は強いでしょう。なぜなら、クラウド化によってアプリエンジニアが簡単にインフラを扱えるようになっているからです。
個人開発や少人数開発が進めばアプリエンジニアがインフラを扱うのは当たり前になり、結果的にインフラしか扱えないエンジニアの需要がなくなってしまいます。インフラはアプリの基盤となる重要な部分ですが、アプリエンジニアが扱えばアプリに合わせて自由にカスタマイズでき、インフラエンジニアとアプリエンジニアがいちいち連携するよりも効率的だからです。
アプリエンジニアがインフラの領域まで進出するなら、インフラエンジニアも逆にアプリの領域に進出した方が良いでしょう。そうすれば対等になります。具体的な方法として基礎からプログラミングを学習することが重要ですが、なかには時間を確保できないインフラエンジニアの方も多いかもしれません。
その場合、githubなどに置かれているOSSソースを見るのが良いでしょう。ソースを見て中身が理解できるようになれば、フルスタックエンジニアとしての道が開けます。C言語やPythonといった市場で需要の大きい言語をマスターすれば、インフラでもアプリでも需要のあるエンジニアに成長できます。
また両方できれば個人開発にも強くなるので、将来的にフリーランスで活躍できる可能性も高くなります。パソコン一台あれば仕事をできるのがエンジニアのメリットでもあるので、働き方は会社員だけではありません。
今後フリーランスエンジニアの人口はより増えていくはずなので、この波に乗って必要な技術を身に付けていくのがおすすめです。ちなみにソース解析の方法ですが、基本は処理のトレースになります。
さすがにインフラエンジニアがプロジェクトのソースコードを勝手に実行するのは難しいかと思いますが、見てトレースしているだけでも勉強になるでしょう。わからないコードはネットで調べつつ、その周辺知識も理解するようにしていればプログラミングスキルは格段に向上します。
プログラミングの基礎の基礎がわからない方は先に独学等で身に付けておく必要がありますが、ある程度基本的なことがわかっているのであればどんどん実践的なソースコードをトレースしてみるのはおすすめです。
手を動かして実装する時間も設けた方が良いですが、それがなくてもトレースしていればロジックの作りこみ方は身に付いてきます。またオブジェクト指向や変数等基本的なことが曖昧でも、そのままトレースしてみて問題ありません。
基本がわかっていないと当然読めないのですが、読めなくなったタイミングで調べれば良いだけです。変数、クラス、オブジェクト、インスタンス生成、カプセル化、といった基本的な概念ほど調べればすぐに出てきますし、わからないコードを調べていれば嫌でも目にするはずです。
つまり、あえて基礎学習の時間を設けなくても、ソース解析しながらわからない点を調べていけば必然的に基礎が身に付くということです。ただしわからない点はきちんと調べるようにした方が良いです。
基礎がわかっていない状態でソースコードを眺めていてもわかるようにはならないかと思うので、ソースコードを見て、わからない点は調べて、またソースコードを見て、という繰り返しになります。
せっかく開発現場のソースコードを見られるのであれば、ぜひ勉強に活用すると良いですね。ソースコードのトレースをしているうちにプログラミングの基礎とロジックの効率的な実装方法がわかってくるので、ある程度慣れてきたら暇を見つけて自宅でも個人開発してみると良いかと思います。
プログラミング初心者はまず環境構築やコンピューターとプログラムがどう連動しているのかわからない、といった点で躓くことが多いですが、インフラエンジニアの場合その点は大丈夫でしょう。
物理層からアプリケーション層にかけてのコンピューターの基本的なメカニズムがわかっているため、後は表面的なコードの書き方を理解していくだけです。プログラミング経験こそなくても、インフラエンジニアは完全なIT初心者に比べると大きなアドバンテージを持っています。
またOSコマンド等の経験があれば、基本的な流れはプログラミングと同じです。環境を活かしつつ、フルスタックエンジニアを目指しましょう。