LeetCode

一月前からLeetCodeの問題を毎日2問ずつ解いている。意地でもやらないつもりだったが、ジョブセキュリティを考えると無視し続けるのもどうかと思い観念した。あまり乗り気ではなかったので、ついでに他のことも学べたらと思いRustで何問かやってみたが、再帰的なデータ構造を扱うのが煩雑すぎて、結局Pythonに落ち着いた。適当に書いても動くし、タイプ数も少ないので、面接での実用性を考えると実質これ一択なのではないかと思ってしまう。

始める前と変わらず、この手の面接の結果と実務能力との関連性には懐疑的だが、メタレベルでは面白い発見もある。細部に対する注意を払う訓練になっている気がするのだ。例えば、二分探索と聞けば誰でも「各イテレーションで捜索対象を半分に絞ってO(logN)で対象を見つけるアルゴリズム」ということは知っている。だが、実際に実装してみると色々な境界値の落とし穴があって、意外と難しい。この「後はやるだけ」のところを実際にやってみるのはなかなか新鮮な体験だ。

自分はエンジニアとしての守備範囲を広げるために「やろうと思えばできる」範囲を増やすことに専念してきた。情報への適切なポインタとそのざっくりとした難易度が分かっていれば、だいたいのことは予見できる。だが、たまにこうやって頑張らないと動かない類のコードを書くと「後はやるだけ」を見くびっていたな、と思い知らされる。

文章を書くのも似たようなところがある。自分が既に知っていることを文字に起こすだけなんだから、造作もないことだと高を括るが、毎回思うようにはいかない。ああでもない、こうでもないとやっているうちに、解像度があがってきてやっとまとまった文章になる。自分の心象と知識を一緒のものだと考えるのはとても傲慢なことなのかもしれない。

僕は書きながらものを考える。考えたことを文章にするのではなく、文章を作りながらものを考える。 村上春樹『走ることについて語るときに僕の語ること』