会社をやめて約1年プログラミングの勉強に費やしたことに対する満足と後悔

thumbnail

働いていないことへの言い訳記事です。 この夢のような生活がもうすぐ終わるので書きたくなりました...

ちなみにサムネイルは「仕事」でぱくたそで検索したら出てきました。 「エレベーターも給料も下降中の写真素材」というタイトルです。

https://www.pakutaso.com/20140914273post-4629.html

何をしていたのか

会社を辞めて約 1 年ほどプログラミングの勉強をしていました。 前職では「みんなのレベルが高くて着いていけないな〜」って感じることが多く、その原因のほとんどが知識や経験不足に依るところだったので、そういうのを先に補ってから働いた方が良さそうと思って辞めました。

いわゆる異業種からのキャリアチェンジでプログラマとしてのキャリアを始めたので、知識や経験は同世代の人たちに比べるとかなりのハンデがあり、そのハンデを埋めるための勉強をしました。 プログラミングの勉強のためにプログラミングの仕事をやめるというのは何か遠回りしてる気もして乗り気ではなかったのですが、今のうちにハンデを埋めないと年を重ねてからの挽回の方が難しいと思ったので、そこは勢いで辞めました。

満足だった点

幅広く学べた

仕事を辞めているということはやらないといけない仕事がないということなので、好きなことを好きなだけ勉強できました。 気になった技術はとりあえず手元で試してみたり、前職では採用されていないプログラミング言語を学んでみたり、とりあえずは耳にした技術は一通り自分の手元で試していました。 これまで自分が関わることのなかった技術を知れて単純に視野が広がって良い時間を過ごしたと思います。 そして技術トレンドから外れつつある技術を扱わなくていい、書いたコードに責任を負わなくていいというのは、精神衛生上良かったです。

How 以上のことを学べた

仕事をしていたときは納期に追われることもあってとりあえずライブラリの使い方だけ覚えて開発するということが多かったのですが、納期から解放されることでライブラリの使い方以外にも細かい挙動を精査する時間が取れました。 ライブラリそのものを読む時間も取れたので、内部 API にロガーしかけて覗いてみたりして完全に理解することに努めました。 ブログで preact, styled-components, babel, eslint などの記事を書けるのはこの活動に依るところが大きいです。

ライブラリを読むことで、曖昧な理解のまま使い方だけ覚えるという学び方をしていた当時に比べて、自分の技術選定やコードに自信を持てるようになり開発効率やデバッグの効率は大きく伸びたと思います。 完全な理解をするように務めることは、素地を持たない自分にとっては納期への間に合わせをしながらだと難しかったので、退職してよかったことの一つに挙げられます。

コンピュータサイエンスを学べた

「コンピュータサイエンスって何」というと難しいですが、いわゆる大学の情報科のカリキュラムを学んでいました。 教科書を読んだり、インターネットに落ちてる講義資料を眺めていました。 特に言語処理系と型システムと関数型プログラミングについて、学部レベルの内容をキャッチアップしていました。

よく「コンピュータサイエンスが実務で使えるか」といった話題は出ますが、自分で学んでみて実務に直結すると分かりました。 たとえばコンパイラ・インタプリタの仕組みを学ぶことでとトランスパイラを拡張する時に自分が何をしているのかという理解に繋がり開発生産性そのものに影響がありました。 また型検査関数を自分で作った経験は、開発者が渡す型注釈や型指定がどのように挙動を変えられるかと言うイメージの獲得にも繋がりました。 そしてなによりも今動かしてるプログラムが背後でどういう仕組みに支えられているかを知ることは単純に自分のプログラムに自信を持て、原因の切り分けを容易にし開発とデバッグの効率を上げました。

これは腰を据えて本を読んだり演習問題を解いたりした成果で、とても在職しながらだと難しかったと思うので退職しなければできなかったと思います。

あとそれはそうと同僚たちは入社時点でこの辺りの知識を持っていたのかと気づいたときは軽く絶望しました。 チートじゃん...

後悔がある点

会社を辞めるということで自分の能力開発に時間を全部振れる一方で、会社で得られる成長機会は失っており、それは意外と大きなものだったかもしれないという後悔もあります。

勉強はキャリアには繋がっていない気がする

僕はアラサーで、この年齢だと転職市場でみられるものは実績や専門性のようです。 「勉強しました」ということをアピールしてもその成果を示せるものがなければ、就職には繋がりにくいのではないかという指摘を受けました。 識者曰く、実績として示せない勉強よりは技術的にどんなにつまらなくてトレンド外であっても実務経験の方が評価に繋がるとのことでした。

なのでどうせ勉強するのならばもっとキャリアに響きそうな内容を選ぶべきだったと思います。 このブログもそういった実績を意識して作られたものではあるのですが、実績としては弱く OSS 活動をやった方が良かったのではないかとのことでした。 そういった勉強と情報発信以外にも実績作りに時間を割くべきだったかもしれないという後悔があります。

教えてくれる人がいない

前職ではよく同僚に手ほどきしてもらったりしてもらっていましたが(あまりにも僕の生産性が悪いから...)、そういうのが一切無くなるとつまづきは全て自力解決しなければいけませんでした。 誰かと肩を並べて開発する機会を得ることは退職後には難しく、このような他者から学ぶ成長機会の喪失については退職前にもう少し考慮すべきだったかも知れないと思いました。

これに関してはコミュニティに入ることで補えるとは思っていたのですが、コロナの影響で勉強会などが無くなって対面での情報交換機を失ったのは痛手でした。 代わりに Twitter やコミュニティの Slack や Discord でよくお世話になっていて、トラブルシューティングの点でよく助けられてはいますが(いつもありがとうございます 🙇‍♀️)、手ほどきをもらうといったような機会の喪失は完全には埋められておらず、これは退職によるデメリットだと思います。

設計経験は積みづらい

この一年でスケーラビリティや可用性を意識した設計をする経験は積めませんでした。 いわゆるアーキテクトと呼ばれる職能の能力は伸びなかったです。 この辺りの知識や経験を得るためには、自分の設計したシステムを評価したり、メトリクスを読んだり、同僚からの口伝といった実務経験が大きく寄与しそうな気がします。

ぼくはフロントエンドエンジニアとしてのキャリアを考えているので避けて通れると思っていたのですが、最近のトレンドはより一層 SSR や CDN 周りを絡めた設計能力が注視され始めているのを感じており、それらの知識も経験も持たないことに対しての危機感が少しありました。 そしてちょうど先日Frontend Study#1 の基調講演を聞いて、ORM + Next/Nuxt がトレンドに乗った時に自分が追いていけるかという危機感は強まりました。 アプリケーションサーバーやウェブサーバーに責任を持つ経験を積みたいというのが最近考えていることです。

まとめ

仕事をするとどうしても納期への間に合わせが原因となって自分の実力を伸ばせなかった、学びたいことと仕事内容を一致させられないという問題に悩まされていたのですが、それが退職するだけで解放されてよかったです。 「知識や経験がないから、単純作業な仕事の機会しか巡ってこず、いつまで経っても知識や経験は不足したままである」 といったループからも抜け出せそうで、最近はなんとか同世代のエンジニア達の会話にも着いていけるようになりました。 なので、実務経験が 1 年間積めなかったという点では退職したことは後悔しているのですが、ずるずる在職していたら同世代の成長曲線に着いて行けず本当に取り返しのつかないことになっていた気もするので、最善の選択だったなと今では思います。 ただこの選択が正解だったかどうかはこれからのキャリアパスにかかっているので、正解だったと言えるようにしたいです。

そして最近は挫折することもかなり減って勉強する危機感も薄まってきたり、実務による成長機会が欲しいということもあるので来月から働きます。 しばらくは業務委託で勉強と両立させながら働くのですが、税制度の都合で来年には就職活動をしているので就職活動中の僕に出会ったらよろしくお願いします。