Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

年末に読むオススメの技術書「Design It!」

こんにちは、オルターブースアドベントカレンダー11日目です。
本日は東京勤務の花岡が担当します。

adventar.org

みなさん、年末がだんだんと近づいてきました。ご予定はお決まりでしょうか?
私は、新サクラ大戦と積読本を5冊くらい減らそうと考えてます。(実行できるとは言っていない)

今回、まだ決まっていないITエンジニアの方にオススメな本「Design It!」を紹介しようと思います。

Design It! ―プログラマーのためのアーキテクティング入門

「Design It!」を手にとった理由

この本はソフトウェアアーキテクチャの設計方法について学べる本です。 400ページ以上はあり、そこそこ量はありますが、ここから得られるものは5年、10年と使える知識だと思いました。

私は普段の仕事はプログラマー的なことをやることが多いですが、一部の機能を実装するために設計をすることもあります。 良いソフトウェアを作る上で設計はとても大切な要素です。私はまだまだ未熟なところがあり、設計がうまくできているのか不安になるときがあります。 そのため、スキルアップにはもう少しソフトウェアアーキテクチャの設計について学ぶ必要があると考えていました。 そのときに、ちょうどこの本が出版され、読んで見るとソフトウェアアーキテクチャの基礎からソフトウェアアーキテクトとして優れたソフトウェアを作り上げるための方法などが書いてあり、まさに私が必要としていた本でした。

ソフトウェアアーキテクチャとは

そもそもソフトウェアアーキテクチャとは何でしょうか。この本によると

 システムのソフトウェアアーキテクチャとは、望まれる品質特性やその他の性質を促進するためにソフトウェアをどう構成するかということに対する、重要な設計判断が集まったものだ。

 設計判断の中には、さまざまな理由で重大な影響を与えるものもある。それは、後戻りできない判断かもしれないし、品質特性やスケジュール、コストへ影響を与える判断かもしれない。そのような重大な判断によって、多くの人が影響を受けたり、他のソフトウェアシステムが変更を強いられるかもしれない。いずれにしても、重要な設計判断を誤ると、後の変更コストが高くつくことになる。

 品質特性を促進するとは、それがソフトウェアシステムの中に現れるよう働きかけるということだ。アーキテクチャがうまく構成されている場合、ステークホルダーの求める品質特性は向上する。そして、求めていない品質特性は控えめに取り扱われるか、または、取り除かれる。アーキテクチャが促進する特性は他にもある。たとえば、仕事に対する特性に関していえば、納期に間に合い、予算内で、残業に頼りすぎないというのが正しいアーキテクチャだろう。

 品質特性とは、ステークホルダーがソフトウェアシステムの良さを判断するための、外部から見える特徴のことを指します。そして、ISO/IEC 9126にある機能性や信頼性、保守性などそのソフトウェアの品質に関わる特徴のことです。
 たとえば、あるステークホルダーから依頼された電卓アプリ作っていて、品質特性について尋ねず、結果表示に10分もかかるものを作ってしまったら、本来1秒以内に結果が表示されなければいけない電卓アプリを欲していたステークホルダーにとって完全に間違ったものを設計してしまったことになります。

私は良いソフトウェアアーキテクチャを作るにはこう言った重要な品質特性に着目し、良い設計判断を積み重ねなければならないと学びました。 ではどのようにしていけば良いのかはこの本を読んでいただければと思います。

最後に

この本にはデザイン思考の考え方や、適切なステークホルダーを特定してニーズを理解する方法など、素晴らしいソフトウェアを作る上で手助けとなる実践的な方法を学べます。充実した年末を過ごすことができると思います、 まだ理解できていないところもあり、何度も繰り返し読んで実践してTエンジニア人生の糧にしようと思います。