2024振り返りと2025の目標

2024は春先に体調を崩したのが痛かった。それ以外はまあまあ落ち着いた一年だったと思う。

  • 健康維持

スポーツ(アイススケート)を続ける。毎日8時間以上の睡眠をとる。ちゃんと栄養を摂る。

去年は目標を「健康維持」に絞ったのだが、あまりよくない結果だった。2~3月にSAD(冬季うつ)を発症してしまい、仕事のパフォーマンスが激減して悪循環に陥ってしまったのが厳しい。5月ころから持ち直したが、それ以降ずっと仕事のリカバリに追われてしまい、何とか週1~2回の軽い運動(アイススケート)と6~7時間の睡眠が維持できた。改善すべきなのは

・大きなイベントがあったにも関わらず計画の修正をしなかった
・体調不良サインを無視して悪化させてしまった

の2点。また、漠然とした目標「健康維持」だとあまり意識せずに過ごしてしまうことも分かった。今年は目標と日々の具体策を設定し、さらに3か月ごとに見直すようにする。

2025の目標

健康:SADや生活習慣病にかからない

  1. 家庭医の助言に従い、30分/週5回以上の有酸素運動を行う。具体的には週2回のスケートと週3回程度のジム通い
  2. 家庭医の助言に従い、ONとOFFのメリハリをつける。 具体的には、①18:00で仕事を切り上げる②21:00-22:30のみExtraで仕事OKとする
  3. 7.5時間以上の睡眠をとる。具体的には、23:30までに床に入る

モチベーション維持のための目標も設定しておく。

  1. スケートで最大Levelを目指す(あと2つ)。夏の帰国前までにクラスを1つ上げる必要がある

仕事:評価を維持する

  1. 前期・後期ともにExceeding Expectations以上を取る。具体的には、早い時期にPlanのリードや発表等を積極的に行い、苦手部分(Direction/People)のポイントを稼いでしまう。また、Impactの大きい仕事をえり好みして選ぶようにする

趣味:Creativeなこと

  1. 何らかの創作的なOutputをする。具体的には、小説・ゲーム・漫画など自分が好きなものを、小さく何か完成させてみる。2024は家族の内輪RPGを3つ作って好評だったので、同じようにゲームが手軽かもしれない。負担にならないよう、楽しむ。

2023振り返りと2024の目標

2023は世況の割には落ち着いた年だった。勤務先の業績がV字回復してレイオフ等の心配がなかったのが大きいと思う。

  • 健康維持

スポーツ(アイススケート)を続ける。毎日8時間以上の睡眠をとる。加えて「ちゃんと栄養を摂る」。忙しくても連続でお粥だけとか止めよう。

アイススケートは週2ベースで続けられた。睡眠はあまり良くない。特に秋から冬は仕事・プライベートともに忙しく、就寝が1時を過ぎることも多かった。また「一日の睡眠時間」をメトリクスにしたのに、自動計測や振り返りの仕組みを作らなかったのも反省点。食事はトータルでは悪くないはずだが、こちらも正確な記録がないためうまく判断できない。

  • ReactとJestにめっちゃ詳しくなる

周辺技術含む。いずれも公式Docや標準的な本くらいは理解してベストプラクティスをサラサラと応用できるレベル。metaのWebエンジニアとして、これが最低限の期待値だと思う。いまは残念ながら、フレームワークと同僚の優秀さに完全に頼ってしまっている。

React/Jestではなく、H2のメインプロジェクトとなったOpenTelemetryを学ぶことにした。チーム内で最も詳しいやつ、くらいにはなれたと思う。しかし同僚がOpenTelemetry世界代表みたいな人なので、どうしても比べてしまう。

  • すべてに準備して臨む

@poyothonさんの「たくさん準備して、繰り返し練習する」を一部パクらせていただいた。もともと準備好きではあるが、これを「すべてに」に拡張する。具体的には「すべてのMeetingに10分以上の予習を行う」など

95%のケースではよく準備して臨めた。『すべてに』はあまり現実的な目標ではなかったかもしれない。

  • プロトタイプで意思決定をリード

とにかく手を軽く早く動かして、プロトタイプを見せまくる。コミュニケーションや議論でプロジェクトをリードするタイプではないし、EM等にもこれが期待されている。

これは達成できたと思う。素早くコードや文章を書いてステークホルダーに見せて合意を得る、は自分の型になっている。

  • Coding Machine

「とにかくコード書くやつ」のポジションをキープし続ける。目安は
Commit数: 3位(47人中) → 5位以内
コード行数: 8位 → 5位以内
Review数: 15位 → 10位以内

Commit数: 3位(約40人中)
コード行数: 11位 (あまりいい指標ではなかった)
Review数: 1位 ☆
Review数がダントツでトップだったのは自信を持てそう。

2024の目標

  • 健康維持

スポーツ(アイススケート)を続ける。毎日8時間以上の睡眠をとる。ちゃんと栄養を摂る。

今年は目標を一つに絞った。仕事をうまくやるとか、学習を頑張るとかは健康でさえあれば自然に達成できそうな気がする。

2022振り返り(2)

評価サイクルの関係上、仕事の振り返りは2月末となる。

  • 仕事

現職で使える人材になる。数値目標は、①インフレ率以上の昇給、②ボーナス満額以上、③昇格(Stretch Goal)。この目標は評価サイクルの関係上2023年2月末日までとする。

年次Performanceが好調だったので「現職で使える人材」と評価されてるはず。数値目標については

  • #1: 達成。CashのみだとCPIコアとほぼ同等(+6%)。RSUを含めれば大幅に上回った(+23%)
  • #2: 達成。ボーナス+15%(個人評価のみ)。ただし会社の業務不調により-15%が加味されるため実質変わりなし
  • #3: 未達。これは難しい

2023の目標(recap)
今のところ以下の目標に向かって頑張っている。

  • 健康維持
  • ReactとJestにめっちゃ詳しくなる
  • すべてに準備して臨む
  • プロトタイプで意思決定をリード
  • Coding Machine

2022振り返りと2023の目標

2022は世界的不景気+レイオフと大変な年だった。自社の13%レイオフに生き残っただけで100点満点だと思う。

  • 健康 [P0]

P0に昇格。特に運動不足を持続的な形で解消したい。1~2月にフィットネスのクラスを回り、Commitできるスポーツを見つけたいと考えてる。具体的な数値目標や計画は3月までに策定する。なお睡眠は8hに増やす。

アイススケートのクラスに入ったおかげで週2回の運動が担保されるようになった。数値目標や計画は立てなかったが、モチベーションを保ちながら続けられるスポーツを見つけることができた。睡眠8h以上は9割以上の達成率。

  • 仕事

現職で使える人材になる。数値目標は、①インフレ率以上の昇給、②ボーナス満額以上、③昇格(Stretch Goal)。この目標は評価サイクルの関係上2023年2月末日までとする。

レイオフされなかったので、使える人材と評価されてると信じたい。数値目標は2月末に再評価。もっとも記録的インフレ+自社株不調なので①②はほぼ絶望的。そして③はかなり難しい。

2023の目標

  • 健康維持

スポーツ(アイススケート)を続ける。毎日8時間以上の睡眠をとる。加えて「ちゃんと栄養を摂る」。忙しくても連続でお粥だけとか止めよう。

  • ReactとJestにめっちゃ詳しくなる

周辺技術含む。いずれも公式Docや標準的な本くらいは理解してベストプラクティスをサラサラと応用できるレベル。metaのWebエンジニアとして、これが最低限の期待値だと思う。いまは残念ながら、フレームワークと同僚の優秀さに完全に頼ってしまっている。

  • すべてに準備して臨む

@poyothonさんの「たくさん準備して、繰り返し練習する」を一部パクらせていただいた。もともと準備好きではあるが、これを「すべてに」に拡張する。具体的には「すべてのMeetingに10分以上の予習を行う」など。

  • プロトタイプで意思決定をリード

とにかく手を軽く早く動かして、プロトタイプを見せまくる。コミュニケーションや議論でプロジェクトをリードするタイプではないし、EM等にもこれが期待されている。

  • Coding Machine

「とにかくコード書くやつ」のポジションをキープし続ける。目安は
Commit数: 3位(47人中) → 5位以内
コード行数: 8位 → 5位以内
Review数: 15位 → 10位以内

2021振り返りと2022の目標

2021は転職+Web転向という大目標が達成できたので完全に勝利の年だった。

  • 転職

Webエンジニアになる、と決めると現職のままではツラい。副業で経験とスキルを稼ぎつつチャンスを狙おう。

BigTechへ転職し、Webエンジニアとしてキャリアを積み始めることに成功した。

  • Web転向

UIデザインもフロントもバックエンドも「ざっと出来る」くらいになる。

フロントエンド・バックエンドが「ざっと出来る」くらいにはなれたかな。UIデザインまでは無理ゲー…。

  • インプットの量・幅を増やす

2020はアウトプット(というか練習)偏重で、しかも範囲が狭すぎた。ほぼアルゴリズムしかやってない。Web技術に関する典型本をどんどん押さえていこう。

これは転職後、社内のトレーニング教材を利用していろいろやれた。特にソフトスキル面に手が回り始めたのは大きい。典型本は数冊しか読めなかった。

  • 健康第一

睡眠7.5h、毎日運動、バランスの取れた食事。普通だけどこれが一番大事です。体調くずすとすべてが水の泡。

睡眠はほぼ達成できた。運動はぜんぜんダメ。食事も今一歩。ただし体調は崩さなかったので及第点とは言える。


2022の目標

  • 健康 [P0]

P0に昇格。特に運動不足を持続的な形で解消したい。1~2月にフィットネスのクラスを回り、Commitできるスポーツを見つけたいと考えてる。具体的な数値目標や計画は3月までに策定する。なお睡眠は8hに増やす。

  • 仕事

現職で使える人材になる。数値目標は、①インフレ率以上の昇給、②ボーナス満額以上、③昇格(Stretch Goal)。この目標は評価サイクルの関係上2023年2月末日までとする。

2020振り返りと2021の目標

2020はGAFA転職+スキルアップ!が夢だったのだけどコロナで完全に吹っ飛んでしまった。数社受けて落ちたのはいい思い出。まあLeetCodeやシステムデザイン・アルゴリズムなどの勉強をコツコツ続けられたのは悪くなかったかな。

9月からWeb開発者へ舵を切った。副業でRoRコミュニティに所属してデイリーで手を動かせてる。RoRが死にそうというウワサもあるけど、一通り使えるようになるまでは気にせずやるつもり。質の高いコミュニティはモチベが上がっていいね。

本業は昇給できたし、ボーナスも少額ながら貰えたので世界情勢を鑑みれば100点満点ということにする。

というわけで2021の目標

  • Web転向

UIデザインもフロントもバックエンドも「ざっと出来る」くらいになる。

  • インプットの量・幅を増やす

2020はアウトプット(というか練習)偏重で、しかも範囲が狭すぎた。ほぼアルゴリズムしかやってない。Web技術に関する典型本をどんどん押さえていこう。

  • 転職

Webエンジニアになる、と決めると現職のままではツラい。副業で経験とスキルを稼ぎつつチャンスを狙おう。

  • 健康第一

睡眠7.5h、毎日運動、バランスの取れた食事。普通だけどこれが一番大事です。体調くずすとすべてが水の泡。

LeetCode 312. Burst Balloons - 解法メモ

苦戦したのでメモしておく。

n個の風船が1列に並んでいて、それぞれにスコアが設定されている。風船を割ると「左のスコア x この風船のスコア x 右のスコア」だけ得られる。割る順番を工夫して、最終的なトータルスコアを最大化せよ。
・「左のスコア」「右のスコア」はなかったら1
・割った風船は詰める
0 <= nums[i] (風船iのスコア) <= 100
1 <= n <= 500

https://leetcode.com/problems/burst-balloons/
トップダウンでやると計算量がO(N!)となり間に合わない。ボトムアップで考える。
dp[l][r]: nums[l...r]での最大スコア
とする。
この範囲で最後にx番目を割るとき、そこで得られるスコアは
nums[l-1] * nums[x] * nums[r+1]
となる。
さらに、左右のdp[l][x-1]とdp[x+1][r]は独立に考えてよいことがわかる。
なぜなら、xは最後に壊されるので、たとえば左ブロック[l, x-1]はx+1番目から右は関係ない。
よって、
dp[l][r] = Max(dp[l][r], dp[l][x-1] + dp[x+1][r] + nums[l-1] * nums[m] * nums[r+1])
となる。
あらかじめnums[]の先頭と末尾に1を挿入しておくと実装が楽。

public class Solution
{
    public int MaxCoins(int[] nums)
    {
        nums = new int[] { 1 }.Concat(nums).Concat(new int[] { 1 }).ToArray();
        var dp = new int[nums.Length, nums.Length];

        for (int gap = 0; gap < nums.Length; gap++)
        {
            for (int l = 1; l < nums.Length - 1; l++)
            {
                var r = l + gap;
                if (r >= nums.Length - 1) continue;

                var val = 0;
                for (int x = l; x <= r; x++)
                    val = Math.Max(val, nums[l - 1] * nums[x] * nums[r + 1] + dp[l, x - 1] + dp[x + 1, r]);
                dp[l, r] = val;
            }
        }

        return dp[1, nums.Length - 2];
    }
}