IT業界にいると、よく聞く「フルスタックエンジニア」
簡単にいうと手広く作業できるスキルを持っているのが、フルスタックエンジニアです
皆さんがフルスタックエンジニアになりたいと思ってるかはどうかは知りませんが
いろいろできるスキルを持ってた方がいいに決まってます
高単価な案件を選ぶことが可能になってきますし、エンジニアとして誉(ほまれ)になります
では、どうしたらそうなれるでしょうか
今回はそのキャリアパスやロードマップなどの狙い目はどこなのかを探っていきます
フルスタックエンジニアとは
WebサイトやWebアプリケーションのユーザーインターフェース部分の開発を担当するフロントエンドエンジニアやサーバー側の構築やデータベースなどの管理を担当するのをバックエンドエンジニアといって
フロントエンドとバックエンドの両方の技術に精通し、システム全体を構築できるエンジニアをフルスタックエンジニアといいます
また、開発や運用に対しての幅広いスキルを持つエンジニアもフルスタックエンジニアと呼びます
例えば、プログラミングもできて、サーバの設定もでき、それぞれの上流工程もできるようなエンジニアとなります
もちろん、マネジメントも同様です
簡単に言うと、他の担当もできるということですね
一担当だけに留まらず、何でもできる人ということになります
ただ、フルスタックエンジニアという明確な定義があるわけじゃないので、その環境で意味合いが変わってきたりします
ちなみに現場ではフルスタックエンジニアという言葉は使いませんね
採用側としてはよく使われるとおもいます
トレンド的な意味合いでも使われている言葉なので、さらっと知っておけばいいレベルです
呼称があったほうが説明しやすいですしね
エンジニアで長くやっている人は、大抵の人は自然とフルスタックエンジニア”気味”になっていきます
その理由としては、年齢が高くなるにつてマネジメントをやらされがちだし
普通に仕事をしていけば、じわじわとできる範囲が広がるし、その際知識もついていくからです
範囲が広がるというか、ある程度他担当の仕事も知らないと、仕事を回せなくなってきます
例えば、資料作るとしても、自分の担当範囲(責任分界点)をきちっとしてないと曖昧なものになります
だから、担当範囲が明確だと「ここは〇〇担当の××さんに聞くところ」と事前にわかっていれば、それを仕掛かる必要はありません
そして、曖昧なタスクが合っても、知識があるなら「これは△△担当の□□さんに聞けばわかりそうだな」ということを推測できます
別担当に確認することを繰り返していくと、その担当の仕事を少しずつ理解していくと思います
それが高じてフルスタックの道へようこそって感じになります
今回はインフラエンジニアから具体的にどのようにフルスタックエンジニアになっていくか説明します
マネジメント系の仕事をしながら、意識していればフルスタック”気味”にはなりやすいと思います
あと”気味気味”言ってますけど、その理由も後程説明します
なりたいフルスタックエンジニア像を想像しよう
まずは自分がどうなりたいかを考えて、自分なりに目標を決める必要があります
前項でも伝えた通り、定義は曖昧です
例えば以下のような形がフルスタックの第一歩と考えます
・上流行程やマネジメント観点からしつつ他担当の仕事も把握
・業務提案するために自分が何ができるか何が必要か考える
なりたい像は人それぞれですし
そのときの時勢にあったフルスタックエンジニア像があるとおもいます
インフラエンジニアとプログラマーの知識を持っていれば、フルスタックと名乗っても間違ってはいません
両者のすみわけはこんな感じです
下の図はOSI参照モデルといって、通信プロトコルを7つの階層に分けて定義しているものです
ISO(国際標準化機構)とITU(国際電気通信連合)により標準規格となっています
要は通信が発生して、通信が到着するまでをわかりやすく階層化したものです
言うなれば、通信の階層図です
それを利用して各担当の役割を表すのもちょっと違うような気もしますが、あくまでも参考ということで
プログラマーは基本的にアプリケーション層レベルになってきますが、L1~L6に関係するプロダクト(製品)に携われるぐらいの技術者であれば、他の層も担うことになってきます
つまり、アプリケーション開発と製品開発ではレベルが違ってくることになります
上図は「システム構築・開発」のすみわけ図ですが「システム保守・運用」になってくると意味が変わってきます
その場合、現場によってはインフラエンジニアが全ての層を担当することになってきます
こちらの図はシステムの階層図になります
アプリケーション・・・
Officeで言えば、エクセルやワードだったり、Webブラウザなどもアプリケーションに含まれます
ユーザが直接触るソフトウェアになってきます
ミドルウェア・・・
アプリケーションとOSの中間に存在するソフトウェアとなり、以下のものが挙げられます
Apache、MySQL、Oracle Database、Tomcatなど
OS・・・
オペレーションシステムで、WindowsやLinuxのことになります
基盤・・・
H/Wになってきたり、仮想化だとハイパーバイザー(仮想化プラットフォーム)になってきます
インフラエンジニアに関しては基盤、OS、ミドルウェアはどの現場に行っても大抵ブレないと思います
インフラエンジニアといっても、データエンジニア、サーバエンジニア、クラウドエンジニアなどに細かく分類されるので、その中で担当が変わってくるイメージです
プログラマーも携わるプロジェクトによって、範囲が変わってきますが
アプリケーション開発だけでなく、ミドルウェアだけでなくOSや基盤にもかかわってきます
この領域まで行くと上級プログラマーの域となってきます
通常はアプリケーション開発=プログラマーと思えばいいでしょう
インフラ?プログラマー?どちらからフルスクタックエンジニアが簡単?
結論を言えば、プログラマーからのインフラエンジニアです
次点で、プログラミングをかじったインフラエンジニアですかね
プログラミンは基礎的なことからじっくり覚えなきゃ使いこなせませんし
初心者には敷居が高いことが理由となります
対してインフラエンジニアは実務経験だけでなく机上の知識でもある程度は習得しやすいです
インフラエンジニアになると会社が資格取得を進めてくるのはそのためです
反対にプログラマーはプログラミングの基礎的なことはもちろん実務レベルでの中級者であれば
その後インフラエンジニアになったとしても、再度プログラミングの勉強をすれば勘を取り戻すことは可能でしょう
若ければ若いほど、技術習得はたやすくなりますし、情熱だってあります
ヤル気が上手くブーストしてくれれば学ぶ力になってくれます
じゃあ、逆にインフラエンジニアから未経験のプログラミングは難しいのでしょうか?
インフラエンジニアとして、業務で自動化や作業効率を上げるために
WindowsのバッチやPowershell、Linuxのシェルなどを頻繁に作ってるならあるいは・・・ですかね
プログラミング未経験やプログラミング知識が全くないところから始めるのは大変です
無理ではありませんが、インフラエンジニアとしての仕事内容と直接結びつかないこともあります
結局のところ、実務でどのぐらい経験しているかというところと個人での気持ちの持ち方(熱意)でしょうか
「将来フルスタックになりたい」であれば、目標が明確になっている分、なりやすいと思われます
そしてその熱量があれば・・・
結局、個人のがんばりになってきます
プログラマーの危機!?将来はAIに仕事を奪われる
これは結構いろんなところで言われていることですが、実際にどうでしょうか
答えはNOです
でも、現時点と状況は大きく変わるでしょう
AIの質があがっていけば、人がプログラミングする機会は減るかもしれません
完全自動化と言わなくても、簡略化され、コードを書くことが少なくなるでしょうね
補足ですが、簡略化というのはノーコードで自動的にコーティングするようなツールをここでは指します
AI台頭や簡略化されれば、プログラマー一人一人の敷居が高くなります
まっさらな状態からコーディングできる市場こそは減ると思いますが、競争率の観点から、生き残ったトッププログラマーたちと評価が上がるでしょう
理由は、AIや簡略化ツールによって、完全にプログラマーの地位を取って代われないからです
手作業でのコーディングのシェアこそ、ごっそり奪われるでしょうがプログラマーが滅びることにはならないでしょうね
言語自体はたくさんあるので、それ全てをAIで網羅するのは時間がかかるし
AIや簡略化の質が生粋のプログラマーを超えるのはあと15年は無理だと思っています
ちょっと想像してみましょう
プログラミングするには、そこにニーズがあるからです
そのニーズはなんで発生するか?
お客さんがいるからじゃないですか
そのお客さんから聞き取って、どのように作るか話し合いを進めるのは正直AIじゃ難しいでしょうね
お客さんの要望を落とし込んでAI向けにまとめるということはできますが
そこにプログラミングの知識は絶対に必要となります
つまり、手作業はAIにやってもらうとして、まとめるのは常に人になるわけです
簡略化ツールも同様でしょうね
・より良い方法を提案できる
・相手を説得、納得させる
上記は人じゃなきゃできないでしょうね
あと、AIは万能感こそ感じますが、メンテするのは人間ですし、方針や趣向を決めるのは人間です
時代にそぐわない場合はそれに合わせる必要も出てきますし、課題はまだまだたくさんあります
SF映画でありますが、AIが人間にとって代わる話・・・
まだ半世紀以上は先でしょうね
AIには、まずは世界征服より、プログラマーの代わりになれるかをはじめてもらいましょう
ただ、上記でも話した通り、完全には難しいでしょうね
限りなく寄せることはできても、シェアを奪い取ることもできないですし、人間だって進化していきます
AIに真似できなくプログラミングの知識を活かせるまだ見ぬスキルが生まれていることでしょう
なんちゃってフルスタック
話がかなり脱線しましたが、遠い先の未来を考えても仕方がないので
プログラミングの知識が無駄になることはないと考え差し支えないです
そして、この記事は「フルスタックエンジニアを目指そう」です
冒頭でも書いた通り、フルスタックエンジニアの定義は曖昧なので、自分がどうするかが重要になってきます
だからこそ、まずは「なんちゃって」でいいので、他分野の仕事も意識しましょう
もちろん、自分の担当範囲をできてることが前提です
フルスタックがゴールではなく、それを目指すことでスキルが大幅に上がっていることも狙いだったりします
今の職場では広げられないというのなら、転職だってありですね
エンジニアがスキルアップのために転職することは珍しくもないですし、真新しいことを学ぶのであれば、職場を変えることは効率がいいです
派遣やフリーランスであれば比較的現場を変えやすいとおもいますが、正社員だったら転職という選択肢以外難しいかもしれませんね
そして、意識したいことは以下となります
・嫌がられない程度に首を突っ込む
・いろいろな人と会話する
・若いうちからマネジメントを経験する
「他担当と直接話す」「嫌がられない程度に首を突っ込む」「いろいろな人と会話する」は
ご自宅でスキルアップできますけど、やはり経験者と会話するのが一番効率が良いです
最終的に仕事というのは人と人の繋がりですので積極的にコミュニケーションはとっておきたいです
「若いうちからマネジメントを経験する」というのは実作業はプレイヤー(作業者)メインでやってもらうことにはなりますが、その管理をすることになってきます
理解度こそは実作業者より低くなりますが、俯瞰するので勉強する機会は多いです
そしてマネジメントは複数人の管理をするので、広くスキルを理解・勉強しやすい環境に身を置けるのです
ポイントは見聞きだけでなく実際にやること
この業界は手を動かした方が習得への近道となります
まとめ
なんちゃってでも「フルスタック気味」のエンジニアになるには
他担当に興味を持つこと、後は自分の向上心次第なところになってきます
仕事の幅を広げるということは自分のニーズが格段に増えるということです
フルスタックを意識するよりかはなんでも疑問を持って解決することまで考えることが
実はエンジニアで一番大切なことかもしれませんね
自然にスキルアップするためには楽しく取り組んでいきましょう