-
-
スピーカー 2
作り始めたら変更が効かないっていう世界をマジで体験してないですもんね。変更って言ってるのはその要求とか要件とか仕様とか、そこらへんが。
スピーカー 1
そこが明確にやっぱなるのは無理でしょうみたいないう前提で動いているような気がするな、今の我々はみたいな。我々ソフトウェアエンジニアの人たちは。
ちょっと前にバツってたやつでもツイートとかでも結局設計ってなんか正解ってよりもその後の変更可能性をどれぐらい残せるかがいい設計だみたいなことが回ってきて。
それって結局なんでそんなこと考えないといけないかっていうと、本当に欲しいものって誰も何もわかってないし、こういうことができるんだったらこういうふうにしたいかもみたいなことって、ある種発見的なものだったりするんで。
最初から知るっていうのは無理なことだからこそ、そういう可能性を残しておく、変更可能性があるっていうことがいい設計になっていくんだっていうところっていうのはすごくわかるし、ソフトウェアのいいところってそういう柔軟さがあるソフトな部分だと思うんで。
そこをすごくみんな意識して作ってるんだろうなっていうのを思ったりしてますね。
スピーカー 2
そうすると、リファクターとかリライトとかって結局そこら辺慣れてたりとか、強い人って結構糸持たやすくやってくれるよねっていう感じになると別に設計って別にそんなに価値のあるものじゃなくて、やっぱり腕が強いやつが一番強いみたいな世界もあるなっていう気もしますよね。
だってね、ジュニアが中心のチームですっていう時に自分が設計とかのリード任された場合と、少なくとも自分より強い人しかいないよねっていう中で中規模な機能の実装とか設計任された場合って、時点やるべきこと違うじゃないですか。
なんかここは別にガードレールしかなくてもあの人たちなら道に落ちないか、最後落ちても戻ってくるかみたいな可能性はあるんで。
それがね、あまり経験がない人たちと一緒にやっていこうぜってなると、ある種冗談が通じないというか、そこはそんなに真面目に真似しなくていいですみたいなところをディスタリオさんしてくるみたいな。
ところもあると思うので、やっぱり設計のトレードオフ、何を重視するかみたいな話はやっぱり誰が使うか。
使うって言ってるのはそのコードを読んで書き換える人。
要するにユーザーが誰なのかみたいな話に結局なってくるなっていう。
スピーカー 1
そうですね。
スピーカー 2
それがさっき言ってたAIに読みやすいコード大事ではね、かもしれないし。
スピーカー 1
そうですね、そうですね。
スピーカー 2
そこら辺でいい感じに話繋がりそうなとこあったな。
398ページらしい。
スピーカー 1
20章。小さく構築し、構築を加速するっていう章ですね。
スピーカー 2
そうです。で、小さく構築し、構築を加速するってこれ直感的にアグリーみたいな。
そうだよね、大事そうみたいな感じのフレーズかなと思うんですけど。
その20の1が小さくとはどんな意味かっていうふうに書いてあって。
で、ここの定義がなるほど、それはちょっと気持ちいい表現だなって思ったんですけど、それが398ですね。
ここまで小さくという意味をいくらか曖昧なままにしてきたが、ここでもっとはっきりさせようと。
私の言う規模とはシステムの知的規模のことであり、効果的に取り込むのに必要な知的作業の総量なのだ。
この規模はコード量とおおよそ相関するが、乗数が同じコードLとコードBでも、この意味の規模で大いに異なる点がたくさんある。
例えば尺量と尺量のコードとか、クラスが10個あるプログラム2つとか比較した場合でも、そこに対してどのくらいのコストとか負荷で取り組めるかって考えた時に、
コードの読みやすさとかドキュメントがしっかり気持ちよく整備されてるかとかで全然変わってくるよねっていうところまで織り込んで、
知的規模がちっちゃくあるべきっていうふうなことが書いてあって、
なるほど、知の方がいいな、認知負荷が低いみたいな話になっちゃうのかもしれないですけど、
なんかこれはいいなーって思いましたね。
スピーカー 1
いいっすねー。
スピーカー 1
短い方がいいでしょって言って、ifじゃなくて参考絵の雑誌で書きますねみたいな話とか。
参考絵の雑誌ぐらいならいいんですけどね、参考絵の雑誌をネストするんじゃありませんっていうのは。
スピーカー 2
テストコードを短くしましたって言って、データプロバイダーでifばっかじゃんみたいな。
パラメタライズいるのかみたいな。
スピーカー 1
送料として短くなることと、実際にやっぱりわかりやすいかどうかっていうのはまた全然違うことだし、
長くなっても、例えばちゃんとコメントが書かれていて、ここってどういうことだろうっていうことに対してちゃんと補ってある、
一個のドキュメンテーションだと思いますけど、いうのでもまた変わってきますからね。
スピーカー 2
そうなんですよ、読みやすいコードを100行読むのと読みづらいコードを5行読むのだと絶対にかかる時間違うんで。
スピーカー 1
うん、絶対違う。
スピーカー 2
読みづらいコード5行とかね、本当に半日でも1日でも解かせるんで。
スピーカー 1
一回気分転換しないと無理みたいな気持ちになって、違うことやってもう一回戻ってくるんだけど、やっぱわかんねえなみたいな。
いやわかる。ちょっとまずシャワー浴びてからちょっと断定をするかって思ったら、戻る気が戻ってこないみたいな。
これの話を見て思ったけど、多分文章とかもそうですよね。
ドキュメントでも同じ文字数とか同じぐらいの小立てになっているドキュメントでも、やっぱレベル感がちゃんとあっているような見出しがついていると、
なるほどこういう流れねってなるし、なんか抽象度バラバラなレベル感だねってなると、見出しだけ見てもあれ?ここは格論の話してるし、こっちは全体話してるし、あれ?どういうこと?ってなると、
結局なんか読むのすげえ疲れた。なんか違和感だよなーみたいな。最初なんか違和感だよなーって言いながら読んでいって、結局なんだったんだっけ?みたいなことが起きたりするんで。
スピーカー 2
そうですね。これプログラムなら強盗で使ってるようなもんだよなーみたいな。レベルがバラバラっていうと。
スピーカー 1
そうそうそう。
スピーカー 2
NESTっていう概念が実はないんですみたいな。
スピーカー 1
いいですね。あとこの小さく構築し、構築を加速するっていうところ、自分も結構すごくコメント書いてたなーと思ったけど、やっぱりこの辺は結構現代においてゲームが変わったところでもあるよなーと思ってて。
出荷する回数が圧倒的に増えたので、小さくっていうものの単位をどんどんどんどん小さくできて、すぐにそれを市場に出すとかっていうことができるようになったから、
多分ここで言ってる小さく構築しっていうのが、加速する部分がもっともっと加速したんだろうなっていうのを勝手に思ったりもしてましたね。
うんうんうん。
スピーカー 2
なんか単体テスト運営みたいな話もこの章じゃないかもしれないんですけど、どっかにありましたよね。なんかそこら辺もCICD周りとかですごい、ちょっと見えてる景色違うんだろうなーっていう気がしたりとか。
スピーカー 1
そうですね。12章のプロセス原則の中で全ての段階でテストするみたいな安定性の原則のところで、なんか話があって、あ、これってなんかテスティングマニフェストってやつで、最後にテストよりもずっとテストし続けるみたいな話にちょっと近いのかなーみたいなこと思ったりとかしてて、
やっぱり、なんかこうやりたかったけどできなかったことがだんだん現代にお手できるようになってきたんじゃないかなーみたいなことを、やっぱそう思う部分はありましたね。
スピーカー 2
そうですね。なんかだから、今でも通用するようなことを表現言い回し文章がたくさん書かれてるっていう意味では、やっぱりめちゃくちゃいい本なんでしょうね、これ。
スピーカー 1
ただまあ、今の人が読むとちょっとピント来ないかもっていうところはあるんですけどね。そこを覗くと、はい。
スピーカー 2
あと、この間だけいきなり読むと、違うよって言われるんで。
スピーカー 1
読んだら、あともう40冊あるぞ、みたいなこと言われる。
スピーカー 2
第4章、第4章じゃない、さっきの20章の小さく構築し、構築を加速する理由と、要件をちっちゃくしましょうとかね、一緒に書いてあるなーとか。
スピーカー 1
めっちゃわかる。簡単だからってね、ちょっと要件を増やしたらすぐ複雑になるんですから。
スピーカー 2
いや、そうなんですよ。
スピーカー 1
これ多分今後起きると思うんですけど、それAIで書いたらすぐできるって言って、要件増やしてAIが書いてレビューしてリリースするってなって、手前で不具合見つかった、ちょっと直しますねって言って、
言うのを繰り返していったら、結局気づいたら、もっとすんなりリリースできたはずなのに、AIがあるにも関わらず遅くなってね、みたいなこととか、結構起きそうな気がするんだよな。
AIが上手に使えるかどうかってよりは、いかに小さく作ってパッと出してしまうかみたいなところの力量みたいなところは結構問われるんじゃないかなっていう気がしますね。
スピーカー 2
そこの原則は変わらない気はしますよね。
まあ、デビューが大変で人間がボトルネックになっていくみたいな話はまた別として必ずあるだろうなとは思うんですけど。
それこそ継続的デリバリー的な、1日1回デプロイしますじゃなくて、もう30分前に書いたコードは本番にやりますみたいな世界観だったりとか。
スピーカー 1
そうですね。いっぱい作れるようになることと、いっぱい上手に作ることはちょっと違う気がするんだよなっていうのは思ってますね。
なので小さくするってことが結構より大事になるんじゃないかなみたいな。
スピーカー 2
やっぱり人間も消費特訓数が来ると大変なんで。
スピーカー 1
そうですね。そして要件を満たしてなければ何でも作れますよっていう話がまさにAIじゃなくてみたいな気がするので。
スピーカー 2
確かに。そうするとテストを消したので全部取るようになります。
スピーカー 1
そうなんだよな。結構この小さく構築して構築を加速するは、その概念的なところのレベルはやっぱり変わってなくて、今後よりもっと効いてくる気はしてきたな。
スピーカー 2
この章の中で有用なヒントと提言の412ページ読んじゃいますけど、組織が小さい時、またコミュニケーションを育む信頼がある時、小さく早く構築することが容易になる。資金もまた高くなる。
っていうようなことが書いてあって。これはもう本当にどの本でも、デッドラインでも言ってたし、組織パターンでも言ってたし、みんな言ってるなみたいな。
スピーカー 1
結局コミュニケーションパスが増えるっていうことが、とても大変なことなんだなって気もするし。
スピーカー 2
やっぱり最長小さいチームいいんですよね。小回りが効く。構成メンバーにもよるみたいな話ももちろんあるかもしれないですけど、小さいチームに向いてる人が構成要員となっている小さいチームはとてもいいですね。
スピーカー 1
そうなんですよ。5人ぐらいのチームがちょうどいいんじゃないかなってずっと最近思ってますね。
スピーカー 2
その5人はどこまでですか。CEOとか。
スピーカー 1
機能開発チームで、プロダクトオーナー、デザイナー、エンジニア、エンジニア、QAみたいな。そんな箇所バランス感覚のチームいいなっていうのは最近思ってますね。
スピーカー 2
そうですね。そうなってくるとエンジニアフルサイクルよりの方がいいなみたいな。
スピーカー 1
そうそうそう。そうなんです。それを組織としてスケールするためにどうしたらいいかみたいなところとかを考えるとまた難しいなって。
別にそのチームがコピーしてもう1チーム、2チーム、3チームってそんな簡単にできるもちろんわけではないかったりするんで。
いやーむずいなって気持ちになったり。フルサイクル志向な人がたくさんいればいいけどそうじゃない場合においてじゃあどうしましょうかねとか。
スピーカー 2
そうですね。
スピーカー 1
AIの登場によって少ない人数で加速するぞっていう方向性にはいくんじゃないかなって一応予見はしてますね自分は。
スピーカー 2
まあ人員整理みたいな話も出てきてますもんね。
スピーカー 1
そうそう。
スピーカー 2
いやというかマルチタスクができるようになってるのが強いなっていう気はしていて。
同時に3つの実装を難しいとこだけ人間がやって、ディテールとか切り終わったらもうGitのワークツリーとかでバーってやって、ローカルのCPUを持つ限りはいくらでもスケールしますみたいなことができちゃうので。
それだけはどうしてもできなかったじゃないですか。キーボード1個だけだから入力は。
入力ソースはキーボードつなげればいいんですけど。
スピーカー 1
まあまあでも。
スピーカー 2
そういう話じゃないんで。
スピーカー 1
片手で1個ずつ打つっていうことが限界ですからね言うても。
スピーカー 2
そうですね目線で入力して指で入力して足で入力して音声で入力してみたいなことをさばけるマルチプロセッサーな脳みそを持ってる人だったらできるかもしれないんですけど。
スピーカー 1
でもそれよりは明らかにエージェントの方が安いですからね。エージェントさんが安いしスケールするし。
スピーカー 2
それは本当に1人からエンパワーメントしたというかスケールアップするなっていうスケールアウトに近いなっていうのは前なんかと思ったりしたんですけど。
スピーカー 1
そうですね。自分のコピーを並列化とさせてるって感じに近いし一方でアイディアを形にするという意味ではなんというかスケールアップでもあるっちゃあるんだろうなって気もしますよね。
なんかコード書けない人がこういうものを作りたいんだけどって言った時にAIの使い方がすごい上手になっていくとアイディアを形に今までできなかったことができるって考えるとスケールアップっぽさもあるんだよなっていう気がしますね。
スピーカー 2
そうですねなんか音楽理論学んだことないけどボカロのおかげでめっちゃ刺さるとこ作れますみたいなのとか。
スピーカー 1
そうそうそう。
スピーカー 2
近いことが起こるかもしれないです。
スピーカー 1
あとはちょっと関連して思ってるのはなんかそれでたぶん生産性が上がるっていう話に行くと思うんですけど。
なんかその時の生産性アップの秘訣っていうかなんか実はAIによってアップしたっていう話もあるんだけどコミュニケーションコストの方が実は結構効いてるんじゃないかっていうことは自分は仮説を立てていて。
だからAIを導入すればなんか生産性が上がるんやって言って蓋を開けてみたらなんかあんまり1.1倍ぐらいにはあったけどてんてんてんみたいなことはなんかいっぱいこれから起きるんじゃないかなってちょっと思っていて。
だからチームが小さくなってコミュニケーションコストが下がってそこのコストが下がった上で一人ができる範囲が広がってかける行動の量が増えていってみたいところで生産性が上がるんじゃないかなっていうなんとなくの仮説を持ってますね。
スピーカー 2
コミュニケーションで言うとまあわざわざ先輩に聞いたり同じことを質問するのはいかがなものだろうかっていう遠慮みたいなものが結構軽減されるというか遠慮気のおけない遠慮が必要ない相手がターミナルにはいるねみたいな話になってくるんで。
スピーカー 1
あとはなんかやっぱみんなで決めましょうみたいなこうチームの状態とかいうのが多分10人のチームと5人のチームじゃそのやりやすさ全然違うでしょみたいなことは多分あるはずでじゃあその1時間のミーティングを10人でやったらまあ10時間分かかっててその間にAIが動かせたらもっと早くできたのにみたいな。
スピーカー 1
確かにそう考えると、開発と保守の間に大きな状態区分を設ける理由も、両者に対して根本的に異なるプロセスを持つ必要も全くないっていうのは、すごくソフトウェアって全身的に成長していくもんだよねっていうような前提に立つと確かになりますね。
スピーカー 2
でもちょっと好きなんですよ。
こういう前提に立っているかどうかで結構ソフトウェアに対する価値観変わるなーって気がして、別にアップデートされなくていいんだよっていう人もいるし、コロコロ変わるのが嫌だよねとかいうのもあったりするし。
スピーカー 1
なんかね、それこそさっき言った設計って変えやすさのことだよねっていうのをここに繋がり出す。今変えて今日コミットしたコードはいつか書き換えられることが前提だとしたらどういうコードのほうがいいのかなみたいなのとか。
スピーカー 2
だからこそ振る舞いの差異を少なくするときに何が変わって何が変わらないのかみたいなところをすごく見極める必要があるんでしょうね。
スピーカー 1
そうですね。
だいたいそれはデータベースに状態として持たれるんで、データベースの設計頑張った方がいいぞみたいなことと繋がってたりするんだよな。
なんかこう見るとやっぱ結構現代のソフトウェア開発ってやっぱ変わってないっていうか、注意すべきところは変わってないぞみたいなところっていうのはいっぱいありますね。
スピーカー 2
そうですね。本質的な部分って言い方してもいいのかもしれないですけど。
もうちょいやりやすくなる可能性は全然あるなっていう気がする。それこそ出荷した後に2、3分で修正が早いできますとかはやりやすくしてくれた要因だろうし。
スピーカー 1
うん。
スピーカー 2
そんなもんですか。他に触れておきたいところあります?第4部。
スピーカー 1
そうですね。自分は割と結構喋ったなっていう気がするので大丈夫かな。
337ページのイラストだけちょっとちらっと見ておいても面白いかなと。
スピーカー 2
33ページ。これはあれですね。電話を4つ持ってますね。
4つ持ってると言えないのかな。
スピーカー 1
僕大使じゃないと4つ同時に聞くことはできない。答えられないからな。
スピーカー 2
というか肩、首のところで受話器挟んでっていうのを右と左に1つずつ計2つやってて、で右手左手で受話器持ってるように見えるんですけど、手に受話器持っても耳塞がってるじゃんみたいな気もするし、面白いですね。
スピーカー 1
そうですね。
スピーカー 2
本当にこのイラストが必要だったのだろうか。
スピーカー 1
これは1人で4つの仕事をしてると言えるイラストなんだろうかみたいな気持ちになってくるな。
スピーカー 2
何ですかねこの人。何かを訴えてるぐらいにしか。
スピーカー 1
なんかモノボケかなみたいな。
スピーカー 2
第5章はエピローグなんで2ページぐらいあるけど。
エピローグなんかテストなんですよね。
スピーカー 1
そう。突然テストを受けさせられるっていう。
スピーカー 2
この本を読んで本当にシステム変革法って書いてある本なんで、予知のパターンに向けて組織の中であなたはアクションしていきましょう。
そのセルチェックリストみたいな1問5点の問いがいくつかある。
スピーカー 1
あ、違うか。問い1が。
合計3になってて、問い2が正直に答えられる25点、答えられない場合は無得点とするっていう話があったりとか。
スピーカー 2
あとは20点ずつ問いがあって、それに過去1ヶ月間どうだったかみたいなことを答えてみましょうってなってますね。
あと追加のおまけ問題もありますね。はいと答えるごとに10得点とする。
A、憎しみを小さくしたか。B、愛を大きくしたか。
スピーカー 1
前回の本でもね、愛と憎しみの話もありましたし。
スピーカー 2
ありましたね。不適合のやつで。
スピーカー 1
セルチェック確かにするには面白そう。面白そうではあるけど。
セルチェックして誰かとそれを喋れるといいんだろうな。
スピーカー 2
そうですね。
まあでもそんなところかな。どうでした?この間もそうだしシリーズ全体読んでみて。
スピーカー 1
そうですね。シリーズ全体読んでみてソフトウェア文化を作るっていうことがやっぱ難しいことなんだなっていうことをすごく思いながらも、
やってることは実際その中でいろいろ提言されていることとか、
キーとなるコンセプトみたいなものは知らなかったものはいっぱいあったけども、
実際蓋を開けて意識してやってることとかもいっぱいあるんだなっていうのはやっぱり全体通しては思いましたね。
スピーカー 2
そうですね。わかるっていうと、なるほどっていう部分と、ちょっと疑問風が頭に浮かぶような部分と、
なんかそれぞれかなりあったかなっていう気は出ますけど、まあ咀嚼に結構エネルギーがいりますねこのシリーズは。
あんまり一周で満足するっていうか多分繰り返し繰り返し読んでいくのかなみたいな。
で、まあそうですね、どうしても古びちゃってるなみたいなところもあるにはありますけど、
まあでもそれは別に2週目3週目読むときはそんなに力入れないで、ページパラパラめくる程度で付き合えばいいかなっていう気もするので。
でもそうですね、げんさんの今の感想を聞いてて思ったのが、文化を作るとか文化を変革していくっていうのはそもそもが難しい話だし、
どういう風な姿でありたいんだっけって描くところからして難しいんだよなっていうのを思ったのと合わせて、
そもそも品質みたいなイメージをしっかり複数人に共有していくところから、なかなか難しいんじゃないっけっていうのはちょっと思ったので、
まあでももちろんちゃんとしたというか、一般的で専門的な定義もあると思うんですけど品質に関しては。
このシリーズの第1巻でちゃんと触れられてもいたんで、それを読んだら文字として理解することは全然絶やすいんですけど、
スピーカー 1
なんだ、心で品質を理解する、結構それだけでも大変そうみたいな。
スピーカー 2
要するに自分たちが作ってるものをちゃんと理解しないと品質が高い低いってそもそも言えないじゃん。
さっきの情報障害の話でもありましたけど、今我々が作ってるものって、実装してるもの、今手を動かして手を書いてるコードが何を意味するか分かるんですけど、
じゃあそのコードがあることによって我々の作ろうとしてプロダクトだったり、そのサービスのユーザーの世界がどう変わるのか変わってほしいのかっていうところを真に理解するのは、
やっぱり一筋の技いかないしってなった時に品質が高いってなんだみたいな、分かるわけない気もするので、
品質っていう難しさと文化っていうものを扱う難しさと、あとはもちろん組織とか他人っていうのも出てきますし、
そういういろいろ難しいところにワインバーグすごい足突っ込んでてすごいなーって、ワインバーグすごいなーっていう感想です。
スピーカー 1
一人で一人で書いてるのはね、これを。もちろんレビュアーがいたりとか協力者がいるってのはもちろんあるけども、