ベストアンサー
によって標準として広く採用されているこれらの役割の正式な定義はありません。組織であるため、さまざまなバリエーションとローカライズされたコンテキストがあります。
一般的なガイドとして、次の定義を使用します。
- テクニカルアーキテクト-連携する分野のスペシャリストインフラストラクチャ、ネットワーキング、セキュリティに。
- ソリューションアーキテクト-ソリューションのすべての側面(ビジネスへの影響、アプリケーションの変更、データと情報の考慮事項、テクノロジーなど)を考慮したプロジェクトベースのソリューションを担当するジェネラリストそのすべてを支えています)、そしてできれば顧客の考慮事項も同様です。
- プリンシパルアーキテクト-上記の役割よりも幅広い責任を持つ人。これは、ビジネスドメイン、より大規模な作業プログラム、または企業全体に焦点を当てている場合があります。また、コンサルタントは、チーム内の他のアーキテクトに対する(経験的な)優位性のレベルを提案するためにもよく使用されます。彼らは通常、インフラストラクチャなどの単一のアーキテクチャドメインに焦点を合わせるのではなく、ジェネラリストの懸念を抱きますが、常にそうであるとは限りません。
それが役立つことを願っています。あることを覚えておくことが重要です。受け入れられている標準がないため、用語自体はそれらが使用される環境に固有です。
回答
まず、ソフトウェアアーキテクチャを単なるベストプラクティスと区別することが重要です。優れたソフトウェアエンジニアは、コーディングに優れ、アプローチが優れていて詳細であり、問題について多くの洞察を持っているかもしれませんが、それでも優れたアーキテクトではない可能性があります。
少なくとも、優れたアーキテクトは次のスキルを持っている必要があります。
アーキテクトは問題の分解に優れています。問題分解とは、事実上すべてのレベルで問題を確認し、それを実装するために必要なステップと断片に分解するために必要なスキルです。優れたソフトウェアアーキテクトは、「私たちの航空交通管制システムは不十分であり、より良い設計が必要です」のような発言をすることができ、問題を達成可能なコンポーネントに分解し始め、それらのコンポーネントの目標を達成可能なサブプロジェクトに分解するために尋ねる質問を知っています。 、およびそれらのサブプロジェクトを達成可能なプログラミングタスクに分解します。優れたアーキテクトは、10億行のソフトウェアプロジェクトの構想から、信頼性の低いリンクに対処するアルゴリズムを実装するための最良の方法の理解まで、あらゆるレベルまたは規模でこれらのことを実行できます。プロセスは常に同じであるため、スケールは関係ありません。
アーキテクトはインターフェイスを理解しています。独立した請負業者や実装者がいる場合、プロトコル、関数ライブラリ、クラスインターフェイス、スキーマのいずれの形式であっても、インターフェイスはプロジェクトの複雑さを管理するために必要な主要なツールです。アーキテクトは、論理的に完全な鮮明で明確なインターフェースを定義するプロセスを知ることで、多くの人々が簡単に接続してより大きな目標を達成できるシステムを構築できるようになります。
アーキテクト複雑さが敵であることを理解している。すべてのコンポーネントの複雑さを軽減し、インターフェースの複雑さを軽減し、実装の冗長性を最小限に抑えるか、まったくないようにするために必要なプログラミングツールとパラダイムを熟知しています。機能の。彼らは、あまりにも具体的またはあまりにも一般的であるアルゴリズムと実装をすばやく認識し、適切な機能を実行するコンポーネントを作成するように開発者をガイドします。多くの場合、複雑さを管理するツールは、データの隠蔽、オブジェクト指向プログラミング、自己検証システム、標準インターフェイスの包括的なテスト計画などです。しかし、優れたアーキテクトは、ツールやテクノロジーについて独断的ではありません。なぜなら、データ隠蔽が機能する基盤と理由、および特定の言語が優れた設計原則をサポートしている理由とそうでない言語を包括的に学術的に理解しているからです。
アーキテクトは優れたコミュニケーターであり、優れた多作のライター兼ドキュメンターです。プログラミング言語と、利害関係者の共通言語を話すのが得意です。優れたアーキテクトは、システムの設計において、優れたコミュニケーションとともに、意見ではなくプログラミング手法の具体的な理由を示し、議論ではなくチームに洞察を提供します。彼らは、ユーザーの適合性に関する意見を強く支持し、求めます。
優れたアーキテクトは優れたリーダーであり、すべての技術者の尊敬を得るのに優れています。それらはで動作します。通常、これは、彼らが高度なスキルを持ち、複数の言語で作業し、以前にアーキテクトであったか、変化に直面しても柔軟性を維持したシステム設計を作成する能力を実証したことを意味します。
多くの定義には、データ駆動型設計、アジャイルプログラミング、特定の言語、プラットフォーム、ツールキットなどの方法論を強調する一連の流行語が含まれています。これらは、基礎を十分に理解する必要があるさまざまな手法の現在のラベルです。現在流行しています。したがって、多くの点で、アーキテクトの主なスキルは、経験、知性、一生懸命働き、実践的な役割を担う意欲、優れた直感、および業界の流行語が出入りするようにロジックを使用して問題を分解する能力です。それらの設計は引き続き有用で関連性があります。
上記の私の定義には、プロジェクト管理、スケジューリング、および管理スキルは意図的に含まれていません。アーキテクトの役割は、チームの問題や予算を解決することではなく、優れたシステムを作成することです。実際、予算やチームの問題を抱えている人が、アーキテクトが対処しなければならない制約の1つを定義するのに役立つ単なる利害関係者である場合に最適です。それが彼らの設計問題の一部だった場合。