設計、蔑ろにされがち
新規開発の場面以外で設計が蔑ろにされる場面をよく目にする。既存の実装に変更を加えるだけなので、既存の設計に則って変更を加えれば良いという考えなのだろうか。なんなら既存の機能を拡張するような新規開発であっても設計は蔑ろにされがちである。
軽微な修正を除き、新規開発はもちろん、コードの変更においても大なり小なり仕様に変更が入るものは再設計をすべきであるというのが筆者の現時点での考えである。再設計をするということは、つまりリファクタリングを行うということでもある。
設計をしないとどうなるか
仕様変更に耐えられない、プロダクトとしての限界を迎える。プロダクトが限界を迎える時、それはある日突然限界を迎えたことを自覚するわけだが、プログラムがある日突然どうにもならない状態になってしまっているわけではない。設計を怠り、継ぎ接ぎのように実装を続けることによって、どこを変更してもあらゆる場所に影響を及ぼすようなプログラムに少しづつ侵食されていく。
「仕様変更を行いたい、しかしそのためには抜本的な大規模な改修が必要となる」このようなやりたいことに対する工数がどう考えても見合わない状態を迎えると、プロダクトが死んでいく。よほどクリティカルな問題でない限り問題の解決を先送りにし、その間も同じように継ぎ接ぎ実装を繰り返すと、クリティカルな問題にさえ対応できず終焉を迎える。
AI時代に設計のできないエンジニアは必要なのか
これまでは設計を蔑ろにしていても、手の早いエンジニアであれば重宝されてきた。しかし、今のAI時代において、ただ要件を満たすだけのプログラムを高速に書く人間に大した価値があるとは思えない。要件を満たすだけのコードを書かせるならAIに書かせた方が圧倒的に速いだろう。
この先、エンジニアとして生き残るためには、むしろじっくりやるべきところでじっくりとやれるエンジニアであることが重要なんじゃないかと考えている。
AIは今後プロダクトに起こりうる仕様変更について、それをある程度想定した設計を行うことが得意ではない。なんなら設計自体があまり得意ではない。将来的に得意になるのかもしれないが、現時点はそう感じている。
そこを補える人間は今後重宝されるはずなので、しっかりと変更耐性を持つような設計を考えられるエンジニアになるべきである。
なので設計をちゃんとしよう
設計がちゃんとできる人はまだまだ少ない印象だ。そもそも設計自体が正解のない問題を解くようなもので難しいのだ。設計に対して真剣に考え、取り組むのことはどんなに早く始めても早すぎるなんてことはないし、どれだけやってもやり過ぎたなんてことはないのだ。
自分がコードを書く前に設計についてちゃんと考えるようになると、自然とそのタイミングでリファクタリングの必要性に気づく。よく機能を実装した後にリファクタリングの必要性について語る輩がいるが、順序が逆である。機能を実装するためにリファクタリングが必要なのだ。
技術的"負債"という表現をやめないか?先に負債が来て後から返済するという考え方をする者が多いのはこの表現が理由の一つである気がする。
そしてAI時代を生き残ろう
AI時代を生き残るためには「上手にAIを使える人間」か「AIにできないことができる人間」のどちらかに成る必要があると思う。筆者は手段を目的にするようなコードを書くことが好きな人間なので、「上手にAIを使う」部分にはさほど興味がない。雑用を代わりにAIにやらせることはあれど、それが利益に結びつくことはあまりないので、経営者目線「上手にAIを使える人間」には映らないだろう。そうなると消去法的には「AIにできないことができる人間」である必要がある。圧倒的に後者の方が大変だと思うが、替えの効きにくい人材にはなれるはずなので、自分の強みとして胸を張ってアピールできるようこれからも精進していきたい。皆も頑張ってくれ。