見出し画像

長年悩んでたことがアホみたいな理由だった

今回のブログは正直書くか迷ったけど、自分みたいにしょーもないことで苦しんでいる人がいるかもしれないので書いてみることにする。

悩んでいた事

自分が悩んでいた事、それはプログラミングの遅さだ。このチームに入って2年目からずっと悩んでいる。最初の年はDevOpsや、コンテナ系のお仕事が多かったときはそうでもなかったのだが、その仕事がすべて他のチームに移って自分はプラットフォームのプログラミングをすることになった。

 先に挙げた仕事は自分の得意分野だったので出来ていたのかな?と思っていた。しかし自分はプログラマになりたいので、プログラミングできることはうれしいのだが、自分はほんまに遅くて、マネージャにも「自分が遅いのわかってるねんけど。どうしたらいいやろ、ほんまごめん」とかいうと、「ネガティブになってはいけない。昨日の自分から進歩していたらそれでいいよ」と言ってくれていたが、ブログにいろいろ書いてきた通りマジでずっと悩んでいて、なんでできないんだろうと思っていろいろ工夫していた。

工夫したこと

 具体的には、データ構造とアルゴリズムをやり直してみたり、理解することを覚えたり、「記憶」することにチャレンジしたり、アーキテクチャのドキュメントを毎日読むようにしたり、自分の時間をすべてプログラミングにぶち込んでみたり、逆にあまり思いつめないようにしたり、いろいろやってみた。
 「自分の時間をすべてぶち込む」以外のことはそれなりに有効だったのだが、自分はそれでも周りよりずっと遅かった。

フィードバックループの長さ

 しかし、昨日ついに原因が分かった。アホみたいな理由だった。それは「フィードバックループ」の遅さだった。
 それは何か?というと、GitHubで公開されているようなプロジェクトの時は、私は経験不足は感じていたが、「めっちゃ遅い」とは思っていなかった。なぜなら、そういうプロジェクトは、開発環境のセットアップが簡単でそれだけで、開発が完結するから。
 ところがプラットフォームの開発はそうもいかない。そもそもプラットフォームをビルドするのに15分かかる。(昔は30分以上だった)プラットフォームをデプロイするのは、2~4時間かかる。開発中のものなので、4時間たってデプロイ失敗がわかることもある。
 プラットーフォームは複数のマイクロサービスの複合体協調して動作する。だから、動作確認には、アプリでデプロイして、ログを見るのだが、ログを見れるようになるのは15分後だ。しかも、パフォーマンスにシビアなコンポーネントの場合、ログもそんなに入ってないので問題を見つけにくい。つまり、ちょっと変えて、ちゃんと動くか見るみたいなことをやるのに、とても時間がかかる。場合によっては1日以上ブロックされることもある。だから、自分はプラットフォームの開発がほんま苦手やと感じていた。

アホみたいな解決策


 昨日コードをリファクタリングして構造がよりテスト可能になるように変更した。昔同僚にどうやったら早くなる?と聞いた時に彼が答えたことはこんなことだった。「うーん。なれとログかなぁ」。
 それを聞いたのはずっと前の話なのだが、ふとその話を思い出した。「もしかして、ログすぐに見れないかな?」
 コードを追っていると、今のコンポーネントの起点のコードを読んでいると、

-v VERBOSE

というフラグが実装されてるやん。だから、そのマイクロサービスのDLLを入れ替えて、起動するときに -V をつけてみた。おお、あんまりログ出ない。だから、テスト用に古き良き方法で、デバッグログをぶち込んでみた。一瞬で問題解決した。こら早いわ。
 リモートデバッグもやろうと思えばできるのだが、

なぜそんな簡単なことに気づかなかったのか?

 私は巨大なプラットフォームのコードだから、開発が難しいと「思い込んで」いた。ログ入れても「15分待つ」ことを受け入れていた。自分の得意なのはテスト駆動開発なのに、レガシーコードの場合それが使えないジレンマもあった。
 巨大だから、複雑だから、そしてスーパー頭良い同僚たちにある意味幻惑されていたといっても良い。
 解決策は簡単だったのだ。フィードバックループを短くする。同じ人間なので、そんな大差はうまれないのだ。方法が同じなら。何かやって15分まつのと、即時に見れるのではスピードが違いすぎる。こだわるべきは自分の「優秀さ」ではなく、いかに楽に「フィードバックループを短くする」かだった。

自分は初めてこのシステムを「コントロール配下に置けた」と感じだ。いままでどんなことをやっても届かなかったのにこんな簡単なことだったのだ。

過去の努力とこれから

これで、「普通のプログラマ」になれる道筋がようやく、ようやく見えてきた。まだ残っている問題に、Pull Request のイテレーションが長い問題が残っているが、これに比べると大したことない問題だから、これからも工夫して解決していこう。

 今やっている努力である、「理解」「記憶」「反復」に関しては継続して実施しよう。それはきっと自分を「普通」から「イケてる」に押し上げてくれる武器になるだろうから。

よし、ようやく光がみえたぞ!もっとプログラミングが楽しめるようになるといいな。


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