見出し画像

Essense of Software Design まとめ

本ドキュメントの利用は、https://github.com/kae-made/kae-made/blob/main/contents-license.md に記載のライセンスに従ってご利用ください。

Fairy-tale Ending

以上、ソフトウェア開発における、ArchitectureとDesignについて、各章で扱うトピックを理解するのに必要な基本知識が前の章で解説されるような章立てで、解説してみました。

- プログラミング
- モジュール分割
- フレームワーク
- モジュールのビルドと配置
- リファクタリング

そんな流れを念頭にしているので、この順番で読み解いていってください。

最後に、ソフトウェア開発者のスキルアップについて、筆者の考えを述べて本稿を閉じます

開発者のスペシャリティ

大規模なITシステムは、非常に多くのドメインを含みます。ドメインは意味的にも概念的にも独立した存在なので、ドメインを定義するモデルの構築には、アプリケーションに分類されるドメインであれば、対象となるビジネスに対する深い理解と造詣、GUIであれば人間工学に基づいた Human Interface、通信を扱うドメインであればネットワーク通信やセキュリティの各種標準といったようにサービスとして分類されるドメインは各ドメインが扱う問題領域に関する深い知識と実戦経験、などなど、それぞれのドメインに特化した、専門的な知識やスキルが必要です。また、ドメインに対して構築されたモデルをインフラストラクチャドメインに対応付ける設計では、様々な O Sや HW、プログラミング言語、オブジェクト指向やデザインパターンに関する知識、プログラム作成における実践プラクティスを身に着けていなければなりません。

ビジネス要件が複雑化し、IT テクノロジーが発達した現代における IT システム開発は、それらすべての知見やスキルが必要です。現代のソフトウェア開発者は、IT システムを構築するのに必要な全ての知識とスキルを網羅的に持っているのが理想ではありますが、その範囲と深さは海の様に広く深く、加えて、それぞれの技術専門領域も日進月歩で進化していくため、その理想を目指すのは現実的ではなく、プロフェッショナルの開発者としては、プログラムを書くための基本知識と実戦的なスキルを身に着けているのは最低ラインとして、一つ(欲を言えば二つ以上)のドメインの専門家としてのスキルを獲得していれば十分でしょう。
開発規模的にも一人のソフトウェア開発者が担当できる範囲は限られているので、開発チームは、それぞれの領域のスペシャリティを持った複数のソフトウェア開発者から構成されることになります。
それぞれの開発者がどのドメインのスペシャリティになるかは、開発者個人の選択に任されています。各人の嗜好やキャリアプランを元にドメインを選んで、腕を磨いていてください。開発者が所属する組織はスペシャリティの獲得に影響を及ぼします。所属している組織の事業と選択したドメインが一致しているほど、効率よく腕を磨けます。

筆者がソフトウェア技術者になりたての 1990 年代初頭は、有料の技術セミナーや技術書から知識を得て、UNIX Workstation や組込み機器でのプログラム開発を実践して、スキルを身に着けていましたが、現在は、技術情報はインターネット上に溢れていて、ググれば直ぐにある程度の技術情報の収集が可能です。また、様々なスペシャリティを持つ技術屋さん達との直接的なコミュニケーションや、有名なオープンソースプロジェクトへのコントリビューションも、やろうと思えばいくらでもできる時代になりました。IT ベンダー各社が提供するサービスや技術、製品に関する技術情報もインターネット上には沢山公開されています。それらを自身のスキルアップで活用しない手はありません。あるドメインのスペシャリティを獲得したら、別のドメインにトライする、これを継続することにより、スペシャリティの幅を広げるとよいでしょう。

概念モデリング教本」で解説した、概念モデリング、ドメイン分割は、新しいテクノロジーを理解する上で、概念の切り分けと体系化で威力を発揮するので、上っ面ではなく本質を理解するための非常に役立つプラクティスです。自身のスキルを磨くための武器として、習得をお勧めします。

この記事が気に入ったらサポートをしてみませんか?