まいくろ🍣きりみん

きりみんのマイクロブログです。ブログとTwitterの中間くらいの文章を書きます。

より美しいコードを書くことに対する感情を失ってしまったのは衰えか成長か

昔:感情があった

元々ぼくはきれいなコードを書くことへのモチベーションが高かった。

プログラマーになったばかりの頃にリーダブルコードを読んで感動したというのもあるし、ちょうどその頃DDD原理主義みたいなものが流行ってて、はてブのITタブにはきれいなコードを書くためのコーディング規約やテクニックに関するブログエントリやLT資料がたくさん流れていた。

最初にAndroidの大規模プロジェクトに関わった時は、元々のコードがかなりひどかった(初めてJavaを書く人達だけで書いたとしか思えない、現代ではおおよそあり得ないようなレベル)ため、リファクタリングをすることに非常に意義もやりがいも感じたし、どうせきれいにするのならばと張り切って出来るだけリーダブルなコードを書こうとした。

その後チームにgit化の波が訪れ(自分が推進したんだが)PRによるコードレビューなるものもやるようになった。
意識が高かった自分は張り切ってたくさんコードの改善に関するレビューを書いたし、特にAndroidに慣れていない人や新卒が研修で書いたコードをレビューする時などはめちゃくちゃ細かく変数名やif文の書き方、メソッドの粒度などなどについてツッコミを入れまくっていた。

その頃から5年ほど経ち、いろいろなプロジェクトや組織で仕事をし、興味は次第に行単位のコードの良し悪しよりもプロジェクト全体でのクラス設計やテスタビリティ、プロダクティビティのようなものに興味が移っていった。

最近ではそのクラス設計に関するAndroid界隈の風潮も正直オーバーエンジニアリングで本質的ではないのではという感情があるのだが、それはまた別の機会に書きたい。

今:感情がない

今回話したいのは、ぼくが今では行レベルや関数内レベルでのコードの細かい良し悪しに対して感情がなくなってしまったということだ。
というのも、Android黎明期と違い、今ではJava素人がはちゃめちゃなコードを書いてるようなこともほとんどなくなったし、開発言語はKotlinになりあまり意識しなくても十分可読性も安全性も高いコードが書けるようになった。
しかし、人々のより優れたコードを書きたいという情熱は収まることはなく、Kotlinのスコープ関数はどれを使うのが一番最適だとか、この関数を使うと条件判定がより自然言語に近くなり読みやすいだとか、その愚直に書いたループはRxのこの関数でよりスマートに書けるだとか、そういう事を日々議論しながら開発をしている。
(そして時には指摘された方法では上手くコンパイルが通らなかったり予想外の挙動をしてバグを生んだりする)

とにかく似たようなコードを共通化させたがる人というのもいる。
また、絶対にnullable型や再代入は悪だと主張してどうにか回避しようとあの手この手を尽くす人もいる。

しかし、正直今の自分はこういうことに対してどうでもいいと感じてしまう。
明らかに可読性が最悪だったりバグの原因になりそうな書き方だったり、全く使っていない変数を定義してあったりしたらさすがに指摘するべきだと思うが、「こうしたらもっときれいなコードになるよ!」というGitHub上でのやり取りに最悪のパターンでは往復に1日以上掛かっていたり、どうにか指摘通りに修正しようと悩んで試行錯誤した結果むずかしいことを説明したりするコストに対して、得られるメリットはどのくらいなのだろうか。
そんなことに時間を費やすよりもひっ迫したスケジュールと無限のタスクの中で少しでも実装を進めるべきなのではないだろうか。
もしくはもっと全体のパッケージ構成を議論して無秩序にクラスが置かれるのを整理したり、Docsが書かれていない意図も用途もぱっと理解できないオリジナルクラスにコメントを書くべきなのではないだろうか。
そんなふうに思ってしまう自分がいる。

しかし世の中ではコードに関する議論が積極的に行われるチームは一般的に素晴らしいと考えられている。
実際自分も以前はそのような職場にあこがれていた。 今の自分の考えとしては、新人研修や初学者に対するレビュー、もしくは社内勉強会のような場であればそのような指摘や啓発をしてより優れたコードを考えることは有意義かもしれないけど、業務で実装する時間をすり減らしてやる大義はあるのだろうかという感じだ。

これは果たしてエンジニアとして学び成長した結果の思考なのだろうか、それとも単に自分の中でプログラマーとしての情熱が衰え老兵への一途をたどっているのだろうか。

もう自分はだめなのかもしれないという気持ちが時々あって不安になる。

追記:元のタイトルは「より洗練された」だったけど伝えたいニュアンスと異なると感じたので「より美しい」に変更しました。

追記2:なんかめっちゃ伸びてしまったので。この記事で書きたかったこととして「品質よりもスピード」というような話がしたいわけではなくて、自分は過剰にコードを美しくすることが品質にほとんど影響がなかったり低下させたりするし好みの次元を他人にも求めなくていいのではという感じです。決してぐちゃぐちゃなコードでも良いという意図でないです。