ソフトウェアアーキテクトはなぜ本を書いたり、講演をするのか?
それは単なる目立ちたがり屋という訳ではなく、
単純に新しいアイデアを見つけてそれを広く知ってほしいからである。
例えば、ソフトウェア開発者であれば現在の問題に対してグーグル検索に頼るだけでたいていのケースで解決していしまう。
しかし、ソフトウェアアーキテクトが携わる問題領域には、グーグルで検索するだけでは解決しない類のものがほとんどである。
なぜなら、アーキテクトの仕事は世界に一つだけの問題であり、そのほかの会社や個人の経験だけをあてにして答えを導くのは不可能だ。
アーキテクトの仕事を定義する
アーキテクトの仕事を定義すると次のようになる。
ソフトウェアアーキテクチャとは、後から変更することが難しいものである
この定義の通り、具体的なアーキテクチャの例はない。その理由は次のとおりである
アーキテクトの仕事が定義しずらい理由
アーキテクトの仕事の定義ができない理由の一つが、アーキテクトの仕事は時代とともに変化するからだ。
例えば、以前はOSサーバーを商用で利用するとすると、Windows Serverのライセンスとハードウェアが必要になった。
この状態で10以上のサービスを使用するマイクロサービスアーキテクチャスタイルを使用することは不可能だ。
ところが、時代とともにLinuxがフリーのOSとして有効になり、ハードウェアが安く手に入るようになるにつれ、複数台のサーバーを動かすことが現実的になり、マイクロサービスアーキテクチャも有効なものであると認識されるようになった。
マイクロサービスアーキテクチャに時代が追いついたということだ。
その上さらにAWSやAzureを中心としたクラウドサービスが広がり、サーバーの保守運用作業はクラウドサービスに依存するようになった。
この状態であればアーキテクチャはさらに高速に進化するだろう。
このような時代背景では、特定のアーキテクチャに関する資料を作成したとしても、すぐに廃れてしまう。(それゆえ、アーキテクトは「すぐに古びない本を書くにはどうすればいいか」を悩んでいた)
これが、アーキテクトの仕事が定義しずらい理由である。
アーキテクトの勉強方法
アーキテクトの仕事の定義の難しさについて触れた後に、アーキテクトがどのように勉強すればいいのかについて触れる。
まず、アーキテクトは特定の技術や実装方法については深くは触れない。広く浅く技術に触れたほうがよい。
次に、アーキテクトは「結果」よりも「過程」を重要視したほうがいい。つまり、どうやって意思決定を行い、どのようにトレードオフを見極めるのが正解かを勉強する。
最後に、アーキテクトとして最善の選択を選ぶのではなく、「最悪でない選択肢を選ぶ」ことが大切である。ベストという言葉は設計の中で可能な限り最大化するという意味だからである。
これは、アーキテクトの仕事は世界で一つだけであるため、その時々の微妙なニュアンスの違いで最大値をとるための戦略が異なるからである。「最悪でない選択肢を選ぶ方法」という意味でアーキテクトの知識を蓄えるのが正解である。
追記、データはシステムより寿命が長い。(後述)
成果物はADR
アーキテクチャでもデータが重要である。
データは企業にとって最も貴重な財産であると言われている。
企業は手持ちのデータを有効活用したいtと考えている。
意思決定にデータを活用する方法を常に模索している。
既存顧客へのサービス提供、新規顧客の獲得、顧客維持率の向上、売上予測
データへのこのような依存は、すべてのソフトウェアがデータのために存在しているとすらいえる。
パイプラインアーキテクチャもイベント駆動アーキテクチャもスペースベースアーキテクチャもすべてデータが中心となっている。
そのため、アーキテクトは企業内のデータがつねに使用可能なものかどうかを確かめなければならない。
アーキテクトがデータについて意識する前に、企業内部のデータは次の2種類あることを念頭に置いておくこと。
- 業務用データ
業務に使用されるデータのこと。売上、取引データ、在庫などなど。
これらのデータは「必要に迫られて」「必然的に」発生することが多い。
つまり、これらのデータが使用可能でなくなるならば、企業の事業そのものが破綻することを意味しています。
通常はMySQL,PostgreSQL,SQLServer,Oracle DatabaseなどRDMSを用いて管理されます。
- 分析用データ
データサイエンティストや機械学習エンジニアが使用するデータで、予測や傾向分析などに使用します。
この種のデータは日々の業務に不可欠なものではなく、長期的な意思決定に使用されます。
RDMSでの管理も可能ですが、Bigqueryなど専用のデータベースも出てきています。
備考
title:【ソフトウェアアーキテクト入門】どのように勉強すればいいか?
description:アーキテクトは特定の技術や実装方法については深くは触れない。広く浅く技術に触れたほうがよい。 次に、アーキテクトは「結果」よりも「過程」を重要視したほうがいい。つまり、どうやって意思決定を行い、どのようにトレードオフを見極めるのが正解かを勉強する。
img:https://tshop.r10s.jp/rakutenkobo-ebooks/cabinet/8849/2000008128849.jpg?fitin=560:400&composite-to=,|560:400
category_script:page_name.startswith("2")
page:https://minegishirei.hatenablog.com/entry/2024/04/27/212542