エマージェントコーディングは、複製や再利用ができないタイプのソフトウェアコンポーネントを採用した分散型ソフトウェア開発パラダイムであり、実用的な開発者の専門化と実用的なソフトウェアコンポーネント市場の両方を実現することを目的としています。[ 1 ] [ 2 ]
エマージェントコーディングは、コピーや再利用ができない新しいタイプのソフトウェアコンポーネントを採用した分散型ソフトウェア開発パラダイムです。 [ 1 ]この手法により、開発者はリピートビジネスの見込みを損なうことなく、ソフトウェアコンポーネントを安全に公開販売することができます。[ 3 ]これは、開発者の専門化を実用化し、ダグラス・マッキルロイが1968年に提唱したソフトウェアコンポーネント市場のビジョンを実現するために不可欠な機能です。[ 2 ]
この変更は統合責任の逆転であり、従来の意味でコンポーネントを取得する代わりに、開発者はサプライヤーにプロジェクト構築サイトを提供し、サプライヤーが自社のコンポーネントをプロジェクトに統合することになります。この逆転により、コンポーネントの見方はルーチンのライブラリから設計サービスのカタログへと切り替わります。 [ 1 ]
この逆転により、この新しいコンポーネントタイプは適切に拡張可能となり、建設現場を容易に分割して下請け業者を関与させることができ、コンポーネントを同様の機能を持つより小さなコンポーネントの集合体として展開できます。スケールダウンにより、小さなコンポーネントが従来のコンパイラの役割を吸収し、ソフトウェア開発におけるコンパイラの中心性を排除できますが、スケールアップすると、プロジェクト要件を表現するためのドメイン固有のコンポーネントが生まれます。[ 1 ]
ダグラス・マキロイは1968年のNATO会議で、「ソフトウェア産業は工業化されていない」[ 2 ]と述べ、コンポーネントを「通信リンクによる流通」で販売するソフトウェアコンポーネント市場を提案し、「非常に小さなコンポーネントでも利益を上げて販売できる」としました。マキロイは、コンポーネントを購入する際に「自分専用の」シアーズ・ローバックのようなカタログを想像しました。マキロイの提案は、我々が「小作農」を「実業家」に変えようとする場合に、開発者の専門化がどのようにして実現可能になるかについては触れていませんでした。具体的には、開発者が専門化することは容易ですが、専門家として実現可能なビジネスを構築することは事実上不可能です。
1994 年後半、ノエル・ロヴィサは、サプライヤーの知的財産を保護し、それによってリピートビジネスの見込みを維持し、開発者の専門化のための実行可能な基盤を確立する手段として、統合責任を逆転させることを提案した。ロヴィサは、この原則に基づいて実用的なソフトウェア コンポーネント マーケットを創設し展開するために、2000 年 5 月に Code Valley Corp Pty Ltd [ 4 ]を設立し、2016 年にホワイト ペーパー[ 1 ]を発表し、同年、中央集権型ソフトウェア コンポーネント マーケットの試験を実施した。2018 年 6 月、ロヴィサは、スウェーデンのヨーテボリで開催されたICSE 2018 [ 5 ] [ 6 ]で基調講演を行った。この会議は、1968 年のNATO ソフトウェア エンジニアリング カンファレンス[ 7 ] [ 8 ] [ 2 ]の 50 周年記念であり、マッキルロイや他の業界リーダーが出席した。 2023年9月、マキロイはロヴィサにニューハンプシャー州ダートマス大学で「創発的コーディング」を発表するよう招待した。[ 9 ]
2023年後半、Code Valleyは、カスタム統合開発環境(IDE)、4つの抽象化レベル(動作、システム、データ、バイト)にわたる5000以上のソフトウェアコンポーネント、分散型障害追跡システム(DFT)、ピアツーピアの電子決済システム、コンポーネントの価格、データシート、契約仕様、リファレンスデザインのインタラクティブなカタログを特徴とする、分散型で完全に非管理型のソフトウェアコンポーネント市場の試験運用を開始しました。
この実装自体は、創発的コーディングを用いて構築されており、2026年後半に一般公開される予定である。
コンポーネントベースソフトウェア開発は、コンポーネントカタログに掲載されている契約仕様を参考に、希望するコンポーネントサプライヤーと契約するための契約条項を含む式を作成することから始まります。カタログに掲載されているすべてのコンポーネントには価格が記載されているため、構築に着手する前に、式からプロジェクトの総コストを確実に決定できます。式が適切でコストが許容範囲内であると判断された場合、プロジェクトを構築できます。構築プロセス中、IDEは式を解析し、各請負業者に契約と支払いを転送することで、請負業者と契約を締結します。これらの請負業者は、契約条件に基づいて要件の一部を直接受け取り、残りは契約条件で認められている請負業者間の協力によって決定されます。各コンポーネント請負業者は、連結して最終的なプロジェクトバイナリを形成するコードとデータの断片を返すことで契約を完了します。[ 1 ]
契約を締結した各請負業者は、支払いを確認し、契約に基づいて作業を割り当て、契約書に詳述されているように請負業者間の協力に関する通信承認をクライアントに転送できるように、必ず作業番号をクライアントに返します。これらの請負業者は、契約条件に基づいて要件の一部を直接受け取り、残りは契約条件で承認された同僚との協力によって決定されます。プロジェクト要件を入手したら、各請負業者は専門知識に基づいて指示されたより小さなコンポーネントを再委託し、再委託先も同様に行います。各コンポーネントの再委託業者は、連結すると単一のコードとデータの断片を形成し、契約を締結したクライアントに受け取るコードとデータの断片を返します。[ 1 ]
プロジェクト契約ツリーの末端契約業者も同様に支払いを確認し、契約に基づいてジョブを割り当て、ジョブ番号をクライアントに返送して、クライアントが専門知識に基づいて詳細に説明された契約業者間のコラボレーションの通信承認を転送できるようにします。以前と同様に、これらの契約業者は契約条件を通じて要件の一部を直接受け取り、残りは契約条件で許可された同僚とのコラボレーションを通じて決定しますが、設計時のコンテキストを十分に理解した結果、契約を締結したクライアントに受け取るためにコードとデータ断片を直接提供します。[ 1 ]