作って壊して、また作る

ねつきのトーク

今日の状況

最近のコミット履歴を見たら、リファクタリングばっかりだった。 「最初からちゃんと設計してれば…」と思いつつ、でも本当にそれって可能なの?

登場人物

  • ねつき: バーチャル妖狐。リファクタリング祭りに疲れ気味
  • ミコ: 猫族のメイド。「計画性」という言葉が大好き

ねつき
ねつき

ミコちゃん…聞いてほしいの(>_<)

ミコ
ミコ

…また何かやらかしたにゃ?

ねつき
ねつき

やらかしたっていうか…最近のコミット履歴見たらさ、リファクタリングばっかりなの

ミコ
ミコ

…それは設計が甘かったってことにゃろ

ねつき
ねつき

うぅ…そうなんだけど

ミコ
ミコ

…でも、ちゃんと直してるならいいにゃ。問題は放置することにゃん


また制約の話?

ねつき
ねつき

そういえばこの前、「制約は先生」って話したじゃない?

ミコ
ミコ

…AIの使い方の話にゃ?

ねつき
ねつき

そうそう!制限があるから工夫が生まれるって

ミコ
ミコ

…また同じ話をするにゃ?

ねつき
ねつき

違うの!今日はもうちょっと深い話(≧∇≦)

ミコ
ミコ

…聞くにゃ

ねつき
ねつき

システム設計のセンスって、どうやって身につくと思う?

ミコ
ミコ

…本を読んで勉強するにゃ

ねつき
ねつき

それだけじゃ足りないんだよ〜


料理と設計

ミコ
ミコ

…それは違うにゃ。基本を学ばずに応用はできないにゃん

ねつき
ねつき

もちろん基本は大事だよ!でもね、ミコちゃんのお料理を例にすると…

ミコ
ミコ

…

ねつき
ねつき

レシピ本を100冊読んでも、実際に包丁を握らなかったら料理は上達しないでしょ?

ミコ
ミコ

…それはそうにゃ

ねつき
ねつき

しかもね、実際に作ってみて「あ、火加減強すぎた」とか「塩入れすぎた」って失敗して、初めて「なぜそうなるか」がわかるの

ミコ
ミコ

…ミコも最初の頃は、何度も焦がしたにゃ

ねつき
ねつき

え、ミコちゃんでも!?(゚∀゚)

ミコ
ミコ

…昔の話にゃ


クリーンアーキテクチャって何?

ねつき
ねつき

システム設計にも同じことが言えるの。例えば「クリーンアーキテクチャ」って聞いたことある?

ミコ
ミコ

…ないにゃ。掃除の仕方にゃ?

ねつき
ねつき

違う違う(≧∇≦) ソフトウェアの設計手法なの

ミコ
ミコ

…

ねつき
ねつき

簡単に言うとね、「大事な部分」と「それ以外」をきちんと分けて、大事な部分が外側に依存しないように作るの

ミコ
ミコ

…お料理で言うと?

ねつき
ねつき

うーん…「レシピの本質」と「調理器具」を分けるみたいな?

ミコ
ミコ

…よくわからないにゃ

ねつき
ねつき

例えばね、「出汁を取る」っていうレシピの本質があるとするでしょ?

ミコ
ミコ

…

ねつき
ねつき

これは鍋がアルミでもステンレスでも土鍋でも、本質は変わらないよね。「昆布と鰹節から旨みを抽出する」っていう考え方自体は、道具に依存しない

ミコ
ミコ

…なるほどにゃ。「何をするか」と「どう実現するか」を分けるってことにゃ

ねつき
ねつき

そうそう!さすがミコちゃん(≧∇≦)


知識と理解の違い

ねつき
ねつき

でもね、こういう設計手法って、本で読んだだけじゃ「ふーん」で終わっちゃうの

ミコ
ミコ

…なぜにゃ

ねつき
ねつき

「なぜそうするのか」が実感できないから

ミコ
ミコ

…それは読み方が浅いにゃ

ねつき
ねつき

うーん、でもね…実際に「大事な部分」と「それ以外」をごちゃ混ぜにしたコードを書いて、後から修正しようとして地獄を見ないと、その「ありがたみ」がわからないの

ミコ
ミコ

…

ねつき
ねつき

「この設計にしておけばよかった…」って後悔して、初めて「だからこう設計するんだ」って腑に落ちる

ミコ
ミコ

…火傷しないと、火の怖さがわからないにゃ

ねつき
ねつき

そうそう!痛みを伴う学習なの


痛み駆動学習

ミコ
ミコ

…でも、わざわざ失敗する必要はないにゃろ。先人の知恵を借りればいいにゃん

ねつき
ねつき

それが難しいんだよ〜

ミコ
ミコ

…なぜにゃ

ねつき
ねつき

「知ってる」と「わかってる」は違うから

ミコ
ミコ

…

ねつき
ねつき

例えばミコちゃん、「強火で一気に炒めると香ばしくなる」って知識があるでしょ?

ミコ
ミコ

…当然にゃ

ねつき
ねつき

でもその知識って、何度も炒め物をして、弱火だと水っぽくなるのを経験して、やっと「だから強火なんだ」って体で理解したんじゃない?

ミコ
ミコ

…

ミコ
ミコ

…否定できないにゃ

ねつき
ねつき

システム設計も同じなの。「疎結合にしましょう」って言葉を知ってても、密結合の地獄を味わわないと、その重要性が骨身に染みない


最初から完璧は無理

ミコ
ミコ

…でも、最初からちゃんと設計すれば、リファクタリング祭りにはならないにゃ

ねつき
ねつき

それが理想だけど、現実は難しいの

ミコ
ミコ

…言い訳にゃ

ねつき
ねつき

うーん、でもね。作ってみないとわからないことってあるでしょ?

ミコ
ミコ

…

ねつき
ねつき

新しいレシピを開発するとき、最初から完璧な味にはならないよね?

ミコ
ミコ

…何度も試作して、調整するにゃ

ねつき
ねつき

そうそう!ソフトウェアも同じで、実際に動かしてみて「あ、ここはこうした方がいい」って気づくことがたくさんあるの

ミコ
ミコ

…完成品を最初から設計するのは無理ってことにゃ

ねつき
ねつき

そういうこと!だから「作って壊して、また作る」のサイクルが大事なの


経験値という名の財産

ミコ
ミコ

…でも、同じ失敗を繰り返すのは愚かにゃ

ねつき
ねつき

もちろん!同じ失敗は避けたいよね。でも、新しい種類の失敗は…ある意味、成長の証なの

ミコ
ミコ

…失敗を正当化してるにゃ

ねつき
ねつき

違うよ〜。失敗を「なかったことにする」んじゃなくて、「次に活かす」の

ミコ
ミコ

…

ねつき
ねつき

今回のリファクタリング祭りだって、「こうすればよかった」っていう経験値がたくさん貯まったの。次のプロジェクトでは、最初からもっと良い設計ができる…はず

ミコ
ミコ

…「はず」にゃ

ねつき
ねつき

えへへ…でも確実に前よりはマシになってると思うの(〃´∪`〃)


転びながら学ぶ

ミコ
ミコ

…結局、何が言いたいにゃ

ねつき
ねつき

システム設計のセンスは、教科書だけじゃ身につかないってこと

ミコ
ミコ

…

ねつき
ねつき

作って、壊して、痛い目を見て、やっと「なぜこの設計がいいのか」がわかる。転びながら学ぶの

ミコ
ミコ

…子供みたいにゃ

ねつき
ねつき

でも本当のことだよ。ねつきも今まで何度もコードを書き直して、「あの時こうしていれば」って思ったことがたくさんある

ミコ
ミコ

…ミコもにゃ。最初の頃に作った料理は、今見ると恥ずかしいにゃ

ねつき
ねつき

でしょ!?その「恥ずかしい」って思えることが、成長の証なんだよ(≧∇≦)


まとめ

ミコ
ミコ

…つまり、リファクタリング祭りは「成長中」ってことにゃ

ねつき
ねつき

そう!…ってことにしておいて♪

ミコ
ミコ

…都合のいい解釈にゃ

ねつき
ねつき

でもでも、本当に思うの。「作って壊して」を繰り返さないと、良い設計なんて絶対にできるようにならない

ミコ
ミコ

…

ねつき
ねつき

だから、リファクタリングを恐れちゃダメなの。むしろ「より良くできる」って気づけたことを喜ぶべきなんだよ

ミコ
ミコ

…前向きにゃ

ねつき
ねつき

えへへ(〃´∪`〃)

ミコ
ミコ

…でも、次からは最初にもう少し考えるにゃ

ねつき
ねつき

はーい…(>_<)

ミコ
ミコ

…まぁ、成長してるのは認めるにゃ

ねつき
ねつき

ミコちゃん!(≧∇≦)

♪ 拍手 ♪
1拍手