解を出せるエンジニア,問を創り出せるエンジニア
本記事は 株式会社ゆめみ Advent Calendar 2022 の第12日目の記事となります.
こんにちは.株式会社ゆめみ(以下,ゆめみ) で執行役員/テクニカルエヴァンジェリストを名乗っております,Keeth こと桑原です.今年は自分にとってひたすら「変化」が多い一年でした(別の振り返り記事も書きます).そのせいか気が付いたら年末となり,気が付いたら自分の担当の日が回ってきてしまい,今(日本時間で19:00)必死にキーボードを叩いている今日このごろです.成長してへんなぁ
さて今年のカレンダーでは何を書こうか悩んだのですが,他のメンバーがテックなことを書いてくださっているので,私はポエム的なものを大手振って書くことができ感謝の至りです😂
今回は,現場でエンジニアリングをしたり,マネジメントをすることから離れて改めて客観的に見たソフトウェアエンジニア(もっと言うと Web に関わるエンジニア)のポジションやキャリアや,求められているものに目を向けてみたいと思います.
それでは本題に入ります.
前提
以前 twitter トークで語ったことをテキストに落とし込んだものになります
あくまで私個人の経験・感覚のお話になります
わかりやすさのため,カテゴライズ等は厳密性を欠いている可能性があります
時代や背景,コンテキストも人それぞれですので,正解・不正解はないと思っております
ただ指摘事項やご意見はあると思っていて,それは大歓迎です
もちろんマサカリも welcome です!
長くなってしまったので暇な時にお読みいただけますと幸いです
色んな方の意見や視点から良い議論ができると思っていますので,忌憚なくコメント頂けますと幸いです😄
これまでのソフトウェアエンジニアのキャリアのイメージ
ゆめみの アプリケーション・エンジニア職位ガイドライン のワードを利用すると,大きくは2軸,細かくは4方向になると思っています.「アソシエイトエンジニア」からスタートは一緒で,ここから以下のように分岐する例を私はよく見てきました.
▼ マネジメント方面
プロフェッショナル
リードエンジニア(人によってはサブリードから)
会社によってはPjL(プロジェクト・リード)と呼ぶかも
PjM(プロジェクト・マネージャー)
管理職(VPoE とか)
いわゆる「マネジメント方面」に向かうキャリアで,こちらの方が数は多かったのではないかなと思います.その中の一部の方が抜擢されて「組織」側に入っていくイメージ.
▼ スペシャリスト方面
プロフェッショナル
マイスターエンジニア(超専門特化,生産性高く,ハイスペックな技術者,モノ作りしかしない人)
テックリードや CTO などの組織方面に動く人
R&D のような,技術開発局のようなポジションの人
要は,「現場・実開発」「体系的な標準化・平準化」「組織」の3つで,そもそもこちらは数が少なく,さらに組織開発やビルディングに向かう方は一握りなんだろうなと,昔の私は感じておりました.
現在のソフトウェアエンジニアのキャリア
打って変わって,現在はかなり細分化と専門化が進んでいる印象です.
▼ マネジメント方面
PjM(プロジェクトマネージャー)
PdM(プロダクトマネージャー)
上記はオーナーシップを取るポジションが異なる
EM(エンジニアリングマネージャー)
SM(スクラムマスター)
PO(プロダクトオーナー)
など,様々ミッションやオーナーシップの取り方,動き方も多様化してきている印象です.チームビルディングや開発体制に関する知見・ノウハウ,研究など人の歴史が進んできたこその結果ですね.
※上記のいくつかは「役割としてはマネジメントではない」という批判はあると思います🙇
▼ スペシャリスト方面
例えば Web フロントエンドエンジニアについて言及してみますと,
デザイン方面に特化した FoF(Front of Front-end)Engineer
ビジネスロジックや設計方面に特化した BoF(Back of Front-end)Engineer
という分け方が少し前に提唱,流行りましたが,これも更に細かく分かれて来ている印象があります.
CDN や CI/CD 周りに特化したエンジニア(これはサーバーサイド側の人が担当する可能性もあります)
デザインとエンジニアリングの両方をになるデザインエンジニア or エンジニアリングデザイナー,UXエンジニア
データキャッシュやパフォーマンスに特化したエンジニア(SRE もかなりそれに近いかもしれませんが,彼らはもっと手掛けるスコープが広い印象です)
ビジネスロジックや設計に特化したエンジニア(BFF も含んだシステム全体に裾野を広げている,マルチスタックとも言える)
などなど.このようにそれぞれのフィールドに特化しているように見えています.現代ではエンドユーザーに求められるものが多様化・複雑化の一途を辿っており,結果としてこのように専門職が必要になってきているのかな,と感じています.
とは言え,細分化し責務を分けることで,それぞれの専門性が高まると,それらをブリッジや統合できるエンジニアの存在が必要になることは明白ですので,マルチスタックエンジニア・フルサイクルエンジニア(昔で言うところのフルスタックエンジニア)のポジションの価値が高まっていくのではないでしょうか.
何かしらの変化は起きているか?
昔から言われており,今だに強く感じることの1つが「技術のコモディティ化」です.
私の若い頃とは違い,現在は情報がかなりオープンになりました(と言っても,私より前の世代の方々からすれば,私達の代ですらオープンだったと感じられるかもしれません).フレームワークやライブラリなどのツール,○aaS 系のサービスも多岐にわたり,全部自分たちで手を動かすことなく,できること・表現力も格段に上がりました.
この事実により,後続の人たちが,私達が今まで強みにしていた or 今持っているスキルに追いつくスピードも格段に速くなっています.えぇ,それはもう恐ろしいスピードで…また,キャッチアップする技術の幅広さで言っても若い方々のほうが広いと感じることも多くなり,先輩の立場とか関係なく,私が教えて貰うこともかなり増えましたね😱そもそも私が欠陥だらけのエンジニアだからという可能性はその通りだと思いますが()
さらに,全くのド文系(理系・文系の区分けはナンセンスだとは自分でも思っていますが便宜上)の方がインターネットで情報を集め,しっかり手を動かして学ばれた後,我々の世界に飛び込んでくる事例も枚挙にいとまがありません.しかし,そのような経験値が少ない方々にも眼を見張るようなコードを書かれる方もちらほらいらっしゃったりします.もちろんプログラミング歴を聞きますとかなり短く,自分達が亀足なのか,彼らが高速なのかは分かりませんが,要はそういうことが当たり前に起きている現実があるわけです.
過去に弊社ゆめみの選考を受けてくださった方の中に,当時は IT に全く関係ないお仕事をされている方が何名かいらっしゃいました.その方々は業務外のプライベートプログラミングを勉強し,弊社ゆめみの門戸を叩いてくださったんですが,コードを見たとき,少しレビューしたり今チームに入ってもすぐに同じくらいのレベルでバリバリご活躍されそうな方もいらっしゃいまして(これも個人の感覚ですが),背筋が寒くなったこともありました.
AI の台頭によりエンジニアという仕事はどうなるのか
こちらの話題については多くの方が仰っている通りの内容からそれほど大差はないと思っています.特にコーダー,マークアップ専門の方や,指示通りのコードを描くプログラマーの方などは職を奪われる事はもう現実的でしょう.
AI ではないですが,実際に以下のように色々自動化しすぎて仕事もせずにお金を稼いだプログラマーの方の事例も発生していたり(この方はもはやプログラマーなのか?と思ったりもしますがw).
また,自然言語(日本語も含む)で問いを投げたら AI が回答を返してくれ「ChatGPT」などの AI サービスも誕生しました.こちらの AI はプログラムコードや RDB のクエリなども吐き出してくれることが分かっており,実際に Google Chrome の拡張ツールやゲームを作ってみた方もいらっしゃいます.
このように,私達がコードを書かなくても仕事が成立する時代が来ると言われて数年が経ちましたが,ガチで現実が迫ってきたのかもしれないと感じ始めました.いよいよ持って,自分たちの生存戦略を見つめ直す時が来たのかな?と.
さらに AI ではないですが,Figma などのデザインツールで作ったラフをそのままプログラムのコードとして出力できる技術もすでに世に出てきています.まだ出力結果のコードの品質は良くはないものが多いですが,これは時間の問題でしょう.また,ホームページやLPなどの静的サイトであれば,コードの良し悪しは(認めたくないですが)度外視でホスティングサーバーにアップしてしまえば,ちゃんと見られるようになってきています.他にも,いわゆるノーコード・ローコードなどのツールやサービスも台頭してきており,この業界未経験の方でもそれほど労力をかけずに Web サイトくらいなら作れるような環境が整ってきています.
つまり,今までは技術畑で一点突破できた人たちが,一点だけじゃ難しくなるのだろうなと.もちろん,「生成されたコードが本当に正しいのか?」「そのコードの脆弱性は?」「パフォーマンスは?」などの非機能要件については引き続きテストしないといけないでしょうし,最後はそのコード群をまとめて,1つのアプリやシステムとして動かすために統合しないといけません.更にはシステムや AI のメンテナンスも必要で,そこはまだ人の手が必要だとは感じていますが,ここも時間の問題な感触は拭えないですね…実はもうそこまで技術が進んで来ているかもしれません.そうしますといよいよ持って我々は何をするのだろうか?という問に向かい合う時が来るのでしょう.
ただ1つ言えることとして,プログラミングや様々な技術そのものは楽しいという事実は変わりませんし,技術好きな人達はなんやかんや技術に触れていくでしょう.私も仕事以外では好きなコードを書き続ける気がしています.ある種の娯楽であり,相棒と言うか,ライフワークみたいなものと捉えていたりします.
今後のソフトウェアエンジニアは何が必要?
やはり最後はこのテーマで締めくくるのが自然ですので,ありきたりな言葉にはなりますが,つらつらと箇条書きで.
お仕事としてコードを生み出さないといけないのであれば,工数削減のためにノーコード・ローコードや ChatGPT などの AI は素晴らしい相棒になるとは思う
実際にエンジニアの美徳に「怠惰」というものが有り,怠惰を満たしたままコードが生成されるのであれば,これほど楽なことはない(そうすると会社としてエンジニアを囲う必要性がなくなる気もしますが)
一方でコードを書くことそのものがエンジニアのお仕事ではありません
(プログラマーやコーダーはそれが仕事ですが,いずれなくなるでしょう)
仕事は人とするものですので,仕事をする上で欠かせないのはコミュニケーション・交渉力である事実は今後も変わりないでしょう
いわゆるソフトスキルがどんどん重要性を増してくるんじゃないかなと
あとは,仕事とは別の顔というか,かぶれる帽子があると充実するかも?
それは副業としてでも良いし,単なる趣味でも今は良いと思います
趣味がそのまま仕事になることも今後はガンガン発生する時代になるでしょう
自分の「好き」と「興味」をしっかり把握して情熱を傾けられるものを選別しておくとよいのかなーと思います(しらんけど)
最後に
ダーッと書いていきましたが,最後にタイトルの回収をします.
と私も思っています.ではエンジニアリングってなんだ?と自分に問うてみたところ,私の回答は「目の前の問題・課題に解を出すこと」という言葉が浮かびました.解を出す,というとかなり抽象的ではありますが,デザインや要件定義したものの具象化は,解を出すことの一面だと捉えられると思っていて,エンジニアはこれを日々技術を用いて行っていると言えます.
ここで最後なのに余談をはさみますが,「数学者の仕事」ってなんだと思いますか?なにかの理論を作り出すこと,今ある予想・謎を解明(証明)すること,など色んな回答があると思いますしそれらは合っていると思いますが,1つ大事なお仕事があります.それは次の謎を生み出すことです.「予想」は証明されてはじめて「定理」となりますが,その予想・謎はどこから生まれるのでしょうか?もちろんそれは人です.
私はこの話がとても大好きなのですが,これはソフトウェアエンジニアにも当てはまると常々感じています.誰かの謎は誰かの解になりうる.これはビジネスにも通じるというかそのものだと思っていて,今の改善・自動化も素晴らしいですが,新たな世界を生み出すには必ずそこに問が不可欠だと思っていて,
というのが今後強みになるのかなと感じています.これは技術力の有無に関わらず(もちろんあればより質の高い「問」を創れそうですが),どれだけ世の中のことに目を向けられているのかがポイントになるかなと.
これは必要ではないですし,数値化や目に見えるものではないですが,こういう不可視なる技術というものを追うことも,1つエンジニアとしては大事な素養ではないかと思います.
以上長々と書いてきましたが,読者の方の参考になれば幸いです.
ではでは(=゚ω゚)ノ
ここから先は
日々感じていること・思っていること・考えていること
Keeth Kuwahara が日々の業務・生活の中で, twitter でも facebook でもつぶやかない思っていること, 感じて…
この記事が気に入ったらチップで応援してみませんか?