はじめに
- 達人プログラマーを読んだので気になった箇所の感想を述べながら自分なりの具体例を交えて解説していきます。
- 参考程度に自分のエンジニア歴は1年で Rails, React をメインに web アプリケーション を開発しています。
割れた窓は放置しない
- 一回の妥協が後に破綻を生むという話
- Typescript でいえばこう
hoge.ts
hogeMethod(a: any) {
// 何かの処置
}
- 一回でも any で妥協すると無秩序が生まれてしまうかもしれないから気をつける
知識ポートフォリオをつくる
- 毎年新しい言語一つ学ぶ
- 自分は去年 Ruby, Javascript を学習した。
- 今年は静的型付け言語(goとか)使ってみようかな。
- 月一冊の技術書
- これは最近できでいる気がする。
二重化
- これは有名な DRY 原則についての話。
- 繰り返し記述しているコードに気をつけるべきである。
hoge.method1.method2
hoge.method1.method3
- 雑な例だがたとえばこのようなコードがあった時、どちらも
hoge.method1
までは動作が同等である。 - つまり繰り返している処理となるので DRY原則に違反している。
new_hoge = hoge.method1
new_hoge.method2
new_hoge.method3
- この例だと対して DRY原則の旨味は感じられずむしろコード量が増えているとも捉えられるが、実際の開発ではこういった共通化が可読性に大きく関わってくる。
- ただこちらにも記載されている通り単純な二重化を防ぐという考え方は少しずれているということを意識した方が良い。
- 要約すればあくまで情報の共通化をするのであって見かけ上同じコードを全て共通化するべきでないという話。
- 繰り返しを避けるという理解に自分は止まっていたのでこれは知ってよかった。
直行性
- これは言葉の意味を捉えるのが難しいが、独立性を指すという認識。
- 一つのコードの変更が他の箇所に影響を与えない状態がベストということ。
- 依存性や密結合を避ける意味合いが強い。
- React のコンポーネント指向に通じる考え方のように思いました。
const Movie = ({movie: MovieModel}) => {
return (
<>
<img src={movie.image} />
<div>{movie.name}</div>
<>
)
}
- 例えば、このような映画の情報を返すコンポーネントがあった時。
- こちらは依存している対象はなく、直行性があると言えます。
const Movie = ({movie: MovieModel, type: string}) => {
if (type === 'card') return null
return (
<>
<img src={movie.image} />
<div>{movie.name}</div>
<>
)
}
- ここにもし新たな条件、引数の文字列によって表示するか否かの場合分けが増えたらどうでしょうか。
- このコンポーネントは引数の
type
の中身に依存するようになりました。 - つまり直行性が下がったと言うことになります。
- このような状態は避けるべきであり、上記の場合は場合分けが必要となってしまった構造に問題があると言えます。
可逆性
- ここではすぐに手戻りできる柔軟さが大切だと述べています。
- 最終決定などは存在しないということです。
- いつ仕様が変化するかわからないから、決め打ちするのは危険であるという解釈をしました。
- この考え方はアジャイルやスクラム開発が解決すべきテーマかも。
- 私自身開発するときは、一旦実装してみて仕様と異なっていたら変更しても良いというマインドで日々開発しているので大いに共感しました。
まとめ
- 技術が日々進化していく中根幹の考え方は普遍であり、この本の内容は色褪せないものであったので読んでよかったと思っている。
- この書籍に記載されている考え方は各フレームワークや言語に少なからず影響を受けている or 影響を受けた ようにも感じるので、自身が関わっている技術にどんな関わりがあるか調べると理解に繋がるかもしれないですね。