Self Performance Improvement Plan のススメ
はじめに
自己紹介
こんにちは、私は39歳のSenior Software Engineerです。東北生まれ、東京育ち、現在は関西に住んでいます。家族は専業主婦の妻と、年長と年少の2人の子供たちです。今日は、私のキャリアの転換点について、そしてそれがどのように私の人生を変えたかについてお話しします。
私はキャリアを見据えて動くのが非常に遅かったため手遅れかもしれませんが、若い方には反面教師にしてなるべく早く動いてほしいと思う次第です。
元々の私
私はソフトウェア開発を生業にしていますが、そこまで得意ではなく、またマネジメントにもリーダーシップにも興味がない所謂、キャリアとしては万年平社員だとか、残念な人に近い人間でした。
スキル的にもある程度のコーディングであればできるのですが、設計をするだとか難易度の高い業務や参考がない業務を行うことができませんでした。さらに追い討ちをかけるように、論理学など抽象的な思考があまりできないため、適切な質問をすることができず、業務が非常に遅く、当時の上司にはいまだに申し訳なく思っております。
ただし、将来に関して何も考えていなかったので、このままで良いやとたかを括っていきていました。なお、悪いことに二人の子どもたちがそれぞれ朝方と夜型で寝るのが25時、起きるのが5時半という生活になっていたので、自分の時間を確保できず学習はできないまま子どもが大きくなるまでの数年間を過ごしました。
しかしながら、子どもができ、大きくなるにつれて、このまま突き進んだ場合の現実を嫌というほど見えてしまいます。
キャリアの転換点
今後の養育費の急激な増加
現在、住んでいる箇所の学区では中学校になると山の中腹で、毎日距離にして3km、高さにして200mを 40分かけて登らないければなりません。そのため中学受験をする選択をすると思います。そのためには、進学塾に通うことになり、色々調べてみると、授業料だけで最大年間130万円は余裕でかかります。なお、うちの場合は2人いるので、年間最大200万円は授業料だけで消えていくとの結果が出ました。この結果は、なんとなく予期していたものの、ある意味衝撃的でした。ここから逆算して必要年収を計算しましたが、その当時の私の年収を2倍にしないといけなくなる金額でした。これを計算していたときに新型コロナウイルスに罹り、高熱にうなされておりましたが、そのまま肺炎で亡くなった方が楽になれるんじゃないかと思うくらい厳しいと感じました。
身近に FAANG に行った方が出た
そのときに Twitter でフォローしている著名人に Goole London に行くことになったとか、さらに身近な方でも Apple に行く人が出てきました。もしかしたら、自分でもこのような企業に行くチャンスはあるのではと思うようになり、希望という名の勘違いをするようになりました。特にこれらの方々は非常に優秀な方でしたので。
自分自身を変えよう
後ろ向きになったところで何も変わらないのだから、現実的に可能性がある方向に行くしかないと思い、2年半後に Top-tier な企業に行くと目標を定め、自分自身のパフォーマンス向上を画策するようになりました。今まで様々な分野に興味があり、多々ある分野の本を多読していましたがそれを全て辞め、本当に必要な分野のみに絞ることにしました。もちろん、哲学や芸術が影響することもあるでしょう。例えばマインドの部分です。ただし、今後は影響するかもしれませんが態勢には影響はないでしょう。
そして、嫁が試験を受けたり作品を作っていたりするので、大半の家事を請け負っておりました。具体的には毎日4時半に起き、家事を行なっている合間の1時間だけは自分の時間を確保できるようになっていたので、学習効率を向上させ、1日1時間の自由時間を全て学習の時間に費やすことにしました。そして、修行僧のように集中して一つのことを時間をかけてでも淡々と行なっていこうというマインドで実行してきました。
Self Performance Improvement Plan
プラン作成
パフォーマンス改善プランを考えるまでにいくつか FAANG に入社した人の blog を読み、自分との差分を確認していました。それで分かったのはエンジニアは起きることを一つ一つ頭の中で順序立ててシミュレーションできるということです。そして、エンジニアは仕組みを作り、仕組み上の問題点を発見するため、システムデザインやパフォーマンスチューニングが課題として上がりました。そして、よく言われるコーディングインタビューのためのデータ構造とアルゴリズムも課題とした上がりました。最後に、実際に FAANG に行くような方は論理的に鋭いがわかりやすい文章を書く人が多く、ここも大きな課題です。
これらのうち、向上プランを Logic and Rhetoric, Implementing “Engineer” Brain, Data Structure and Algorithm, System Design, Performance Tuning と分けて、それぞれの項目からつぶしていくことにしました。
Logic and Rhetoric
パフォーマンス改善プランを考えたときに真っ先にやらなければならないのは、国語力の向上とロジックの強化でした。なぜなら、国語力を向上させなければ、技術書や論文などに対してなるべく早く理解することができないためです。つまり、国語力、具体的にはロジックとレトリックを向上させることは学習効率を上げることに著しく寄与すると考えたためです。他にも今後のキャリアを考えると、技術一辺倒で戦うのは非常に難しいので、自身が怠けていた経験から改善できた経験から初学者を育成しておきたいと思うようになりました。そのときには一番必要になるスキルです。
この学習で用いた本は下記の通りです
- 大人のための国語ゼミ
- 論理トレーニング101題
- 【新版】日本語の作文技術
特に上二つの本は戦略系コンサルティング会社に入社した人が伝わる日本語をマスターするために学習する本だったりします。私はいまだにこれらの本を見返して、なるべくマスターできるように適切な日本語とそのロジックになっているかを確認しています。
なお、私はメンバーと 1on1 をすることがありますが、その際に真っ先に日本語力を改善するようにしています。ここを改善しない限り業務を任せることが難しい上に、中長期的に効率よく業務を進める、相談するといった社会人として重要なことができなくなるからです。
Implementing “Engineer” Brain
エンジニアはなるべく解像度を高く、発生したことを最初から最後まで順序立ってシミュレーションできることが求められます。そのような発想はデバッグ時にしか使っておりませんでした。しかしながら、このような視点で物事を見れない限り、部分と全体を同時に把握することができません。建築設計においても全体からのコンセプトが詳細にまで一貫していることが重要ですが、それと同じようなものだと感じました。
ここでは普段から自分のサービスがどのような仕組みで動いているのかを意識的に言葉にすることで学習の時間に充てました。
Data Structure and Algorithm
次に行ったのはデータ構造とアルゴリズムです。なぜならこれはコンピューターサイエンスの様々な分野の基礎となっているとともに、コーディング面接でもよく出題されるからです。今までの面接ではなんとなく自分の地頭だけで解いていましたが体系的に学習したことはありません。そのため、基礎から学び直すことにしました。
この学習で用いたのは NeetCode です。これは非常によく、データ構造やアルゴリズムをどのように考えるのかを解説してくれます。もちろん書籍も買いましたが、データ構造とアルゴリズムといった難易度の高い項目では、動画で図表で解説されていると理解が進みます。この結果、LeetCode の Easy と Medium はおおむね解け、Hard は時折解けるくらいのレベルまでスキルを向上させることができました。
System Design
今まで設計する際に今までなんとなく行ってきましたが、具体的に学習を進めることにしました。もちろんこれも面接に出るからですが、なんとなく行っていた箇所を体系的に学ぶ必要があると思いました。
この学習に用いた本やサービスは下記の通りです。
- Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
- System Design Interview – An insider's guide
- Technical Interviewer (by interviewing.io)
特に Designing Data-Intensive Applications は非常に良い本で、ソフトウェアエンジニアとして用いる技術を体系的に網羅している本です。それらを見てから System Design Interview の書籍に進みました。最後の Technical Interviewer は ChatGPT の GPTs ですが、実際に FAANG で出題された問題を出題している模様です。色々ディスカッションもしたり、デザインに対する批評をしてくれたりもするので、比較的リアルなインタビューに近いと感じました。ただし、僕はやってみると満点でてこないので評価が非常に甘いと思っています。
Performance Tuning
コンピュータの動作原理を理解した上で、それをパフォーマンスチューニングを行うことが重要です。今までそのような根本まで理解せずになんとなくでパフォーマンスチューニング(笑)と思われてもおかしくないことをおこなってきましたが、これも基礎から知ろうと思いました。
学習教材は下記のとおりです。
- コンピュータアーキテクチャのエッセンス
- 詳解 システム・パフォーマンス
これらにより、コンピューターが物理レイヤーでどのような動きをしているのかといった基礎を知り、パフォーマンスチューニングにおいてもマシンのリソースのうちどこに制約があるために速度が遅くなっているのかを察しながらそれを検証することができるようになりました。これらの本は非常に良かったです。特にシステム・パフォーマンスは基礎から書かれているので、良著でした。
English Speaking
かつて留学しようと思っていた頃があったため、ある程度は話せていたものの Survival Level でした。それをなるべく家事の合間に触ることなく学習しようとしました。
学習教材としては
- Elsa Speak
- Speak
この二つです。Elsa Speak は発音の改善に特化したアプリでしたが、確かにこれを用いると発音は著しく向上はします。例えば当初 IELTS 6.5 程度の英語とみなされていた発音が3ヶ月くらいで 8.0 くらいになるまで向上しました。ただし、問題は英語は定められた文章を読むだけではなく、自分で考えた文章を正しい文法で表現する必要があります。そこで Speak というアプリを活用しております。この特徴としては、端末に触れなくても音声を自動認識して進めてくれるので、家事をしながら学習をするという並行処理が可能になりました。
結果
この PIP を通じて僕は著しく成長したと思います。
特に、以前とは異なりちゃんと質問や相談できるようになりましたし、業務においても正の影響が出てきています。例えば、実装前の設計において相談を受けている場合でも、いくつか設計のパターンを用意し、その人に応じてどのような実装プランにするかを決めるようになりました。パフォーマンスチューニングにおいても適切にどのリソースが枯渇しているのか、何がボトルネックになっているのかを意識することができましたし、時間複雑度を意識したコーディングなどが活きております。そのため、あるアプリケーションが使えるというテクニックではない本質的な技術力が向上したと感じています。
また、一社のみレファレンスで外資系 IT を受けましたが相当良いところまで行きました。ただし、レファレンスをしてくれた方曰く「普通だったら受かっていたんだろうけど、業績が急に悪化しているので、採用を絞っている影響だと思う」とのことで hiring freeze の一環で、落ちてしまったようです。とはいえ、自身の改善点はいくつもあるので、前向きに捉えております。
結論
FAANG に入社するレベルの人と自身の差分から Performance Improvement Plan を作成しました。その結果はまだ見えていないものの、著しくスキルを向上させることができました。
学習は続く
ここまでやり、自分の道がようやくみえてきました。今後やりたいことは二つで、システムデザインを極める点と初学者をサポートし成長を助ける。そのようなテックリードにならなければならないと感じるようになりました。
人間、本気でやらないと自分の強みややりたいことということは見えてこないものです。
Discussion