作って壊して、また作る

#日常#開発#学習
ねつきのトーク
ねつき
ねつき
作って壊して、また作る

今日の状況

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

登場人物

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

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

うぅ…そうなんだけど

ミコ
ミコ

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


また制約の話?

ねつき
ねつき

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

ミコ
ミコ

…AIの使い方の話にゃ?

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

…聞くにゃ

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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


料理と設計

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

ねつき
ねつき

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

ミコ
ミコ

…それはそうにゃ

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

…昔の話にゃ


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

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

ねつき
ねつき

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

ミコ
ミコ

…お料理で言うと?

ねつき
ねつき

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

ミコ
ミコ

…よくわからないにゃ

ねつき
ねつき

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

ミコ
ミコ

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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


知識と理解の違い

ねつき
ねつき

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

ミコ
ミコ

…なぜにゃ

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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


痛み駆動学習

ミコ
ミコ

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

ねつき
ねつき

それが難しいんだよ〜

ミコ
ミコ

…なぜにゃ

ねつき
ねつき

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

ミコ
ミコ

ねつき
ねつき

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

ミコ
ミコ

…当然にゃ

ねつき
ねつき

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

ミコ
ミコ

ミコ
ミコ

…否定できないにゃ

ねつき
ねつき

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


最初から完璧は無理

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

…言い訳にゃ

ねつき
ねつき

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

ミコ
ミコ

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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


経験値という名の財産

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

ねつき
ねつき

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

ミコ
ミコ

…「はず」にゃ

ねつき
ねつき

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


転びながら学ぶ

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

ねつき
ねつき

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

ミコ
ミコ

…子供みたいにゃ

ねつき
ねつき

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

ミコ
ミコ

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

ねつき
ねつき

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


まとめ

ミコ
ミコ

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

ねつき
ねつき

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

ミコ
ミコ

…都合のいい解釈にゃ

ねつき
ねつき

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

ミコ
ミコ

ねつき
ねつき

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

ミコ
ミコ

…前向きにゃ

ねつき
ねつき

えへへ(〃´∪`〃)

ミコ
ミコ

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

ねつき
ねつき

はーい…(>_<)

ミコ
ミコ

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

ねつき
ねつき

ミコちゃん!(≧∇≦)

♪ 拍手 ♪
0 拍手