多くの組込みソフトウェアは、ソフトウェアが増大傾向にあり、ソースコードに近い設計図だけでは、全体を俯瞰できなくなりつつあります。全体を俯瞰し設計意図を明確にすることをアーキテクチャ設計と呼んでいます。すなわち、ソースコードに直結するコンポーネント設計と、それより上位の設計意図を伝達するためのアーキテクチャ設計とを連携させることで、大規模ソフトウェアを上手に開発することにつながります。

・コンポーネント設計は、ソースコードを作りだすための設計
・アーキテクチャ設計は、設計意図を明確にするための設計

コンポーネント設計の達人になるためには、様々な設計技法を使いこなすスキルが必要です。代表的なものとしては、機能構造を識別する構造化設計、状態遷移を識別する状態遷移設計、データ構造を識別するデータ中心設計、そして、責務構造を識別するオブジェクト指向設計、などがコンポーネント設計の技法に相当します。これらの技法を、設計対象の特徴に応じて使い分けるスキルが求められます。

アーキテクチャ設計では、設計技法よりも、他の人に分かりやすく設計を伝える技術と、技術の本質を捉えて設計の際どいところを押さえる技術、が大切です。

他の人に分かりやすく伝える技術は、全体の構造を箱と線で表現することになり、箱の粒度を決める「抽象化」と、箱の名前を決める「概念化」のスキルが求められます。これらは、右脳的な思考スキルといえます。

それに対して、設計の際どい箇所を押さえる技術は、いわゆるリアルタイム設計の知識と経験が役に立ちます。こちらは、左脳的な思考スキルといえます。アーキテクチャ設計を行うためには、右脳的思考と左脳的な思考の、バランスがとれていることが大切です。

多くのエンジニアが、どちらかが得意で、もう一方は苦手なのかもしれませんが、両方の視点で試行できるよう、日々、思考訓練することが、よいアーキテクトになる近道といえます。
全体を見る視点と際どいところを押さえる視点を使い分けて、設計リーダとなるアーキテクトを目指しましょう。