見出し画像

ネットワークエンジニア辞めました。

2019年、大学卒業後、新卒で今の会社に入社。2年間、国際ネットワークエンジニアというニッチな仕事をしていました。海外に支店がある日系企業に対して、本部(日本)と支店(海外)をつなげるためのネットワーク(インターネット/専用線/FWとか)を設計・構築したりするお仕事です。

職場の雰囲気も良く、英語も使えてグローバル!な感じもあってかなり気に入っていたのですが、ちょうど半年前に社内で外部のSIer企業への出向募集が始まりました。そろそろ別のレイヤーも経験したいな~くらいの気持ちで応募したところ、何があったのか通過してしまい、ほぼ未経験の状態でアプリケーションエンジニアをやることになったしまったのです。

色々あって半年間終了し、来月から出向元へ戻ることになったので、備忘録的な感じでキャッチアップのための勉強方法やどういうことが求められるのか等書いておこうと思います。

①Let's キャッチアップ

新しい領域を経験するとき最も重要なのは、"今の自分のスキル"と"求められているスキル"のギャップをきちんと認識することです。自分の場合はこんな感じでした。

スクリーンショット 2021-08-24 17.34.43

全然被ってないですね笑。得意領域と求められることがほとんど被っていないのに要求レベルが高い場合、キャッチアップは中々きついです。泣き言を言ってもやらなきゃいけないことはやるしかないので、私の場合はほぼ100%ギャップがある前提で、もう少し細分化して具体的に何を勉強すればいいのかを考えていきます。

スクリーンショット 2021-08-24 17.49.15

配属部署ではSPA(Single Page Application)を主に扱っていました。それを実装するのにAngularとAWSを使っていたので、AngularとAWSを使ったSPA実装に必要な自分に足りていない要素(ほとんど全部)を勉強することにしました。

そしてさらに大変なことに、その部署では基本的に自分たちでプログラミングコードを書いて実装を行わず、アウトソースする方式でした。(SIerは大抵そうなんですかね。) 自分で実装するよりも第3者へ的確に指示出しをしていく方が本来はレベルが高い作業ですので、本当に求められることは下記になります。

スクリーンショット 2021-08-24 18.00.54

未経験からこれらを全て習得するには最低でも4~5年かかりそうな感じです汗。私はシステム開発を一気通貫で経験したことがなかったのでここにきて"システム開発 = やばいもの"の認識を初めて持ちました。とはいえ流石にPMをいきなりやらされたりはしないので、補佐的な形で業務を行なっていました。ただ、本質的に求められていることは上記の全部だと思います。

ギャップだらけの状況でどんな風にキャッチアップしていったのか具体的にまとめておきたいと思います。

②PM=実務、座学=Udemy、実践=アプリ作成

まず、PM的なスキルセットに関しては、自分で勉強するよりも経験して覚えた方が効率がいいと思ったので本当に基礎的なこと(システム開発フローの定義とか用語とか)以外はやっていません。当たって砕けろ方式で、クソ忙しい周りのチームメンバーに沢山聞きながら学びました。(本当に申し訳ない気持ちでいっぱいでしたm(__)m)

出向する前の部署でベンダコントロールや顧客折衝は沢山やっていたのである程度いけるんじゃないかみたいな気持ちがあったのですが、やはりフィールドが違う専門性が求められる分野だと全く歯が立たないですね。土台となる部分の"要件定義->基本設計"はほぼ100%自分たちでやることが前提なのでそもそも土台ができてない状態でアウトソースなんてできないわけで。。。

次に前提となる技術的知識(SPA周り)ですが、座学(インプット)はUdemyを使いました。AWSとAngularを使ってサーバレスなWebアプリケーションを作る講座はないかと探したところ以下の動画を見つけました。英語にはなりますが、ハンズオン形式でとてもわかりやすく解説してくれています。これはAngularは必要最低限、AWSの解説がメインです。

また、Angular及びTypeScriptを全く触ったことがなかったため、以下の講義を見ながら、もう少し知識のインプットを行いました。TypeScriptの書き方、RxJSの考え方や各種オペレータの解説、Angular CLIの使い方を学び、Angular単体で簡単なアプリケーションのハンズオンを行います。

講義自体は合計15〜20時間程度。ハンズオンや動画を見返したり分からないところを調べたりで計40時間くらいかかりました。(自分は1ヶ月半くらいかけてやりました。) 

最低限の基礎知識を入れたので次は実践(アウトプット)として自分でアプリ作成を行います。要件定義、基本設計、詳細設計も今までほぼやったことがなかったので、練習がてら超簡単な資料を作ったりしました。私はデザインのデの字も分からない人間なのでprottというサイトのテンプレートを使って、デザインモックを作成しました。

以下のような感じで簡単にデザインモックが作れてしまいます。どのボタンを押すとどこに遷移するかなども直感的に操作して設定することができるので非常に便利でした。

スクリーンショット 2021-08-25 9.01.31

デザインがある程度決まったらその画面を実装するための基本設計を行なっていきます。自分の場合は、下記のような形でパワポを使い、5ページほど作成し、超簡潔にまとめました。(本来はもっと細部まで仕様を定義していくべきだと思います。結局、そこが甘いと仕様検討に戻ってくることになるので...)

スクリーンショット 2021-08-25 9.05.51

続いて、インフラ側の設計です。これは上の方で紹介したUdemyの講座で使っていたアーキテクチャを丸パクリしています。SPAでよく使われるベストプラクティスの一つのようで、非常に使いやすいサービス群で構成されています。私はフロント以上にバックエンド知識が皆無だったのですが、ドキュメントを見ながらなんとか形は作れるくらいわかりやすいサービスで感動しました。

スクリーンショット 2021-08-25 9.14.02

アプリ作成にかかった時間は、トータルで140時間ほどです。月に30~40時間くらい勉強していました。実際にコードを書いたり、AWSの各サービスのパラメータ設定を行ったりしようとすると事前にインプットした知識では全く足りないわけです。ただ、最低限の前提知識がないと何を調べたらいいかも分からない状態から始まってしまうので、インプットはある程度事前に行った方が楽ができるなと感じました。あとは、分からない!-> 調べる -> 分かった! を繰り返していけば段々と知識がついてきます。

③これから自分が何を目指すか

ネットワークエンジニアからアプリケーションエンジニアに鞍替えして、じゃあこれから何がしたいのかという話なのです。コードを書いて実装するのはもちろん楽しいのですが、永遠にそれをやり続けられるかと言われると、自分のやりたいこととはちょっとずれてるなと感じます。じゃあSIerみたいなところでシステム開発のPMをずっとやりたいのかと言われるとそれもNoですね...

基本、飽き性なので色んなプロジェクトを沢山経験したいんです。ネットワーク、インフラ、アプリケーション全部含めて。そうなると全ての分野に精通するのは時間・才能的に不可能なので、技術的前提知識を各分野で最低限持っておいて、PM的な能力を伸ばしていくのがいいのかもしれません。なるべく若くて頭が柔らかいうちに技術知識を身につけていくのが先かも。

当面の目標は、新しく関わる分野で、”正しいスケジュールと進捗の管理ができるように、ある機能を実装・構築するのにどの程度のスキルセットの人がどのくらい工数をかけなければいけないのか”、を把握できるくらいの技術的前提知識を身につけていくことですね。

9月からまた新部署へ配属になるので、そこで何をやるか次第ですが、事前に聞いている情報ではデジタルマーケティングをメインに様々なIT商材(アプリケーション、IoT、AI、データ分析等)を取り扱っているところのようです。そしてそれらを内製できるリソースはないので、基本全てアウトソースして、実際やることはまたまたPMです。形としては似た感じになります。

実際に行って見ないとわからないですが、飽き性の自分には割と合っている気はします。また、同じようなキャッチアップをすることになると思うのでその時は記事にまとめたいと思います。

この記事が気に入ったらサポートをしてみませんか?