UX / UI のデザインに強いWebシステムの開発と、BtoB Webマーケを支援するWeb制作を提供する
N's Creates (エヌズクリエイツ) 株式会社 フロントエンドエンジニアの齋藤 (@31mskz10) です。
『ハッカーと画家』という書籍で、こんな一文が出てきます。
良い文章が推敲を重ねて生まれるように、良いプログラムもまた何度も書き直されることで完成に近づく
最初のバージョンを書いた時点では、まだ問題の本質を完全には把握できていないため、より良い設計や解決策は、書き直しを通じて初めて見えてきます。
著者のポール・グレアムは、良いコードを書くためには8回書き直す必要があると言っています。
どのように改修するかは結局分からない

『ハッカーと画家』に出てくる重要な考え方の1つに「最初にコードを書いているとき、コーダーはは自分が何について書いているかをまだ完全には理解していない」があります。
一度動く形にしてみることで、初めて仕様の矛盾や考慮漏れ、技術的な課題など机上の検討だけでは見えなかった部分が浮き彫りになります。
そして、全体を書き終えてからでないと「あの処理とこの処理は共通化できる」「この設計は将来の変更に弱い」といった、大局的な視点での改善点も見えてきません。
なぜ「書き直し」が必要なのか?
例えばコーディングをするときに難しいと感じるのが、「どこを共通化するか?」です。
コンポーネント設計は特に難しいなと感じます。
「ここは共通化する」「ここは共通化しないで別物とする」と判断して作っていきます。
しかし、いざ改修するときに、もともと共通化して問題ないと思っていたものが実は仕様変更で特定機能だけ別物として分けておいた方がよくなる場合があります。
もしくは、全然別物だと思っていたものが、デザイン変更を重ねていくうちにいつの間にか似たような見た目になることもあります。
結果的に似たようなコンポーネントが複数出来上がってしまっていたり、分けた方がいいものが一緒になってしまう場合があります。
もちろん、都度考えてキレイに整備していけばいいのですが、案件によってはスピードが求められることがあります(どんどん仕様が変わっていく案件は特にスピードが求められます)。
じゃんけんの後に指摘されても意味が無い
「なんでここは最初から共通化していなかったの?」
「逆になんでここは共通化しているの?」
最初から未来が見えていて、すべての仕様変更が予想できていたのであれば、もちろん適切な設計ができるかもしれません。
しかし、それが見えない状態では現時点で分かっている範囲でなんとかしなければなりません。
後になっていろんな情報が確定してから「なんで最初からそうしなかったのか?」と考えても「そうなると分かっていなかったから」にしかなりません。
例えるなら、じゃんけんをして決着がついたあとに「なんでグーを出したの?チョキを出したら勝てたんじゃないのか?」と振り返りをしているのと違いがありません。
すべての状況が見えていたらそうしたけど、その時点ではどうなるか分からなかったのです。
すべてが分かった状態で「書き直す」
ポール・グレアムの言う「8回書き直す」は「必ず8回書き直さなければならない」という意味ではありませんが、それくらい書き直す姿勢でいるのが良いのかもしれません。
一度で完璧なものは作れないという姿勢で、何度も改善を繰り返すことが重要です。
文章も同様で、私は文章を書いてから不要な部分を削ったり、日を置いて書き直したりしています。
優れた設計も同様で、一度の試行で生まれることは稀です。
書き直しを通じて、「この部分は別に切り出すべきだ」とか「ここは既存のデザインパターンが使えるな」といった気づきが生まれます。
反復的な改善こそが、堅牢で柔軟な設計への道と言えるのではないでしょうか。
試行錯誤をおそれない
過去に紹介した『BIG THINGS どデカいことを成し遂げたヤツらはなにをしたのか?』でも似たような事例を紹介しました。

成功した大規模プロジェクトは、試行錯誤をして学習し、それを活かしてプロジェクトを進めていったそうです。
重要なことは試行錯誤を前提としながら前に進めていくことです。
「絶対に一発で完璧な設計にする」「失敗は許されない」という姿勢は逆に柔軟からほど遠い設計になってしまうように思います(前提条件をガチガチに固めて進めるようになってしまいそうです)。
まとめ
良いコードを書くためには書き直しが欠かせません。
最初のコードは完成品ではなく、あくまで思考を整理して問題への理解を深めるための第一歩と考えるのが良いかもしれません。
最初のバージョンをたたき台として、恐れずに何度も書き直すことこそが、本当に「良いコード」にたどり着くための確実な方法なのかもなと思いました。
UX / UI のデザインに強いWebシステムの開発と、BtoB Webマーケを支援するWeb制作を提供する
N's Creates 株式会社は、神戸三宮オフィスまで週1出社(それ以外はリモートワーク)できる「デザイナー」「エンジニア」を募集しています。
興味のある方は、カジュアル面談しますので気軽にお問い合わせください!









