Clean Coderに挙げられている「ソフトウェアのプロが備えるべき最低限のこと」
ボブおじさんのClean三部作
ボブおじさんのクリーンアーキテクチャを読んでアプリケーションのアーキテクチャについての見方が一変したので、続けて別の著作Clean Coderを読みました。
Clean Coderはボブおじさんの「Clean三部作」のうちの一冊です。
有名な「クリーンアーキテクチャ」の他に、「Clean Code」という、クリーンなコードを書くためのコード例を集めた本があります。
Clean Coderという本について
Clean Coderではプロのプログラマになるためには、動くコードを書けるだけではなく、規律や倫理観を身につけることが重要であると書かれています。
また、継続的学習や練習を怠ってはならないと説いています。
語り口は全く説教くさくなく、架空の職場を舞台にしています(多分ボブおじさんが経験してきたことが題材)。
ビジネスの人とプログラマの会話や、プログラマ同士のやりとりを通して、プロとしてのプログラマのあるべき姿勢を示している本です。
プロとしてのプログラマのロールモデルが本の中に描かれており、その振る舞い、姿勢、マインドセットは早速自分で実践してみたくなるようなものばかりです。
ソフトウェアのプロが備えるべき最低限のこと
第1章に「ソフトウェアのプロが備えるべき最低限のこと」として、以下のことが掲げられています。
- デザインパターン
- GOFの24のパターンについて説明できる。
- POSAのパターンを実際に使える知識がある。
- 設計原則
- SOLID原則を知っている。
- コンポーネントの原則を熟知している。
- 方法論
- XP・スクラム・リーン・カンバン・ウォーターフォール・構造化分析・構造化設計を理解している。
- 規律
- TDD・オブジェクト指向設計・構造化プログラミング・継続的インテグレーション・ペアプログラミングを実践している。
- 成果物
- UML・DFD・構造チャート・ペトリネット・状態遷移図・状態遷移表・フローチャート・ディシジョンテーブルの使い方を知っている。
それぞれの項目について自分を振り返って
デザインパターン
Clean Coderのこの箇所を読んで、デザインパターンについて知らないのはマズいと思い、会社にあった書籍を手に取りました。
デザインパターンは、設計の段階で使えるパターンを選ぶというものではありません。
実験的にコードを書いた後に、何かしら知っているパターンが見えてくると、そのパターンで実装し直す(リファクタリング)をすると見通しが良くなるものなのです。
そして、GoF本のパターンを学ぶ意義は、自分あるいは他人のコードに適用できるパターンの引き出しを自分の中で持っておくことです。
「初心者は何にでもパターンを当てはめたがる。それは往々にして丸いネジ穴に角材を突っ込むようなことになりかねない。パターンを使わなくて済むところは、わざわざ使う必要はない」と本にも書かれていました。
また、「中級者はパターンを頭の中にロードしておいて必要な時に読み出すのだ」とも書かれており、たまたまパターンが見えたら使うくらいのものと認識しました。
一方、デザインパターンを通してSOLID原則やデルメルの法則(友達だけ知っている)、ハリウッド原則(こちらからだけ呼び出す)を知れました。
このように、オブジェクト指向設計のベストプラクティスが実現されたコードを多く読むことができ、デザインパターン以上の武器を手に入れることができました。
続けてGoF本も読んでいきます。
SOLID原則や規律、成果物
SOLID原則、コンポーネントの原則はクリーンアーキテクチャ本で繰り返し解説されていた原則です。
特にSOLID原則はオブジェクト指向言語でのクラス設計・実装のベストプラクティス集であるため、OOPをしているプログラマは必ず知っていて欲しいものです。
今の自分の開発スタイルはUMLでクラス図を書いてクラス設計を可視化し、インターフェースを定義してクラスの使い方を定め、TDDでバグが出ないように実装していくのが好みです。
設計や実装を人に相談したかったり、業務知識を予め共有しておきたいところは、職場のオープンな場所でペアプログラミング(時にはモブプロ)を取り入れたりしています。
これからプログラマとして一人前になるため謙虚に、継続的に学習を続けていきます。
他にもアルゴリズムの知識も必要
上記、ボブおじさんの掲げる項目以外にも、プロになるためにはさらにアルゴリズムの知識も必要になると思い、同僚とAtCoderを始めました。
「AtCoder Beginner Contest」を続けて受けて、まずは緑色コーダーを目指すことを目標にしました。
A,B,C問題をコンスタントに解けると緑色にはなれます。
現時点で、自分と同僚は過去問のA,B,C問題は解けているので、あとはコンテストを受けるだけだと思っています。
なので、本当は水色コーダーになっておきたいので、D問題も解けるように同僚とアルゴリズムの勉強を毎週火曜日の昼休みに行なっています。
自分は最初のチャレンジでD問題まで解くことができたので、順調な滑り出しでした。
Happy Coding 🎉