gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

明日になったら「明日」になるから、多分、綺麗にならない

なんかつい最近も似たような事を書いたような記憶が、なくもないのですが(
ソレはきっと、ビューティフル・ドリーマー - gallu’s blog )。

今回は(も)、端的には「技術負債を作らないために」的な話でございます。
んと……定期的に耳にするのが
・今は時間がないから、仕方がないから汚くてもまず実装して仕上げる
的なお話。

まぁ「汚い」のレベルにもよるのですが、一旦「そのままにすると負債になるレベル」と仮定します。
「時間が無いから締め切りがあるからやむを得ず一端」というのはわかりますしきっとその気持ちに嘘はないのだろうと思うのですが*1、端的には
・いつまでも負債は支払われず、それは重くのしかかってそのうち自重崩壊する可能性が上がっていく
事が多いかなぁ、と思われます……ってのを、もう少し噛み砕いて。

どこかで何か所かで拝見している、意味合いとしてはこんな内容の文章がありまして。
「綺麗に書ける人は時間をかけなくても大抵綺麗なコードを書くし、汚く書く人は時間を与えても大抵汚いコードを書く」
これを見た時に「あぁ、たしかにある程度そんなもんだろうなぁ」とか思ったりすることが、少なからず。

或いは「一旦忙しいから(ダメかもしれないけど)今までの慣習通りで書いて、しっかりした考察は後回し」ってケースが、時々、見受けられます。
まぁ「締め切り直前」とか、気持ちが「全く完全に1mmも理解できない」とは言いませんが。が。が。

ちぃと違う切り口としましては、曰く
「ベテランは"後で直せる"事を理解しているから、簡単に書く。非ベテランは"後で直せる"事を理解していないから、後で直さなくてすむように複雑に時間をかける(けど、後で直さなくてすむなんてことはあり得ない)」
けだし名言だなぁ、と思うところでございます。

汚く書く人の一番困るのは「後で直しにくいような設計で書く」のが一番の困り者でして……プログラムにしてもデータ設計にしてもテーブル設計にしても。
「綺麗にクラスが切れていて綺麗にメソッドが切れているんだけどメソッドの実装がちぃと泥臭い」であれば「そのメソッドを書き直す」とかで片付くことが多く、ちゃんとテストがかかれていれば「書き直した、テストした、OK」で終わるので、そんなに高い負担にはならないものでございます。
データ設計やテーブル設計だと「後での追加が比較的容易になるように丁寧に設計して、その詳細項目は一旦、欠けのある雑な設計」だと、「足りなくなったら追加しよう」で事足りるので、やはり、そんなに高い負担にはならないものでございます(まぁ「プログラム側が、カラムの追加に対してDRYであること」ってのが追加で入ってきますが)。

つまり、「汚い実装」は、割と多くの場合において「そもそも設計レイヤーでコケている」ケースが多い、というのがまず1点目としてあります。

で、その1点に追加をすると。
「綺麗な実装」ってのは、知っている限りでは「それなりに脳みそで汗をかいてもんどりうった先にある」事が多いように思われるのでございます。
つまり、ある程度の「熟考して立ち止まって3歩すすんで2歩さがってスクラップアンドビルドを繰り返して無理な要求とリファクタで悲鳴を上げながら」スキルが上がってくる側面が、どうも、あるように思われます。
その辺をやらずに「とりあえず汚いコード/テーブル設計を書き散らかす」を繰り返すと。「綺麗な実装」に対する経験値が積めないまま時間が過ぎ去ってしまう、ってのが、どうもちらほらとあちこちで、ごくまれに、例外的に*2見かけられるように思われるのですが、如何でしょうか?

次に「急いでるから一旦汚く書く」ケースで「じゃぁ、いつ、リファクタするの? そのスケジュールは具体的に抑えてるの?」って質問がありまして。
……書いたの最近だなぁ ソレはきっと、ビューティフル・ドリーマー( https://gallu.hatenadiary.jp/entry/2019/02/05/012839 )にある通りなんですが「そのうち」ってのは「いつまでもやってこない」時間軸なんですよねぇ大概。
だって未来は暇じゃなくて「次の作業」が鮨詰めに詰められているんですもの。

で、ってことは「あとで」は来ないので「綺麗に書く経験も苦労も悲鳴も怒号もないまま」に進んでしまうので。
そうすると結果的に「いつまでもコードが綺麗にならない」し「綺麗に設計するための修練を積むことができない」から結果として「汚いままで綺麗にする術がない」んですよね。

勿論「運用で苦労するもの」ではあるんですが、……その辺、認識できないと「他人に運用を押しつけて回避」とか「運用なんてこんなもんだ」くらいで、意識が出来ないまま無駄なコストを食らいまくっていくものでございます。
「極寒の地で全裸で凍えながらなぜ つらいのかわかっていないようなもの これ以上 心身に負担をかけると死にかねないよ」とは、けだし名言だなぁ、と。
「寒いのは当然、凍えるのは当然」とか言っていると、そのうち凍傷になって、場合によっては絶命するんですよねぇ。サービスにしてもエンジニアにしても会社にしても。

勿論案件なので「締め切りがある」ってのは重々承知しているのですが。
とはいえ、どこかで巻き返さないと、なんとなし「ジリ貧にならん?」とか思ったりするんですよ。
「巻き返してそれなりに修練を積むことの重要性」って、なんとなく、割と軽視されているように見えるんですが。

その辺、ど~なんですかねぇ??

*1:「お気持ち」だけなら、ねぇ……

*2:≒大量に、頻繁に