BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 複雑さはコードの外にある

複雑さはコードの外にある

ブックマーク

原文(投稿日:2015/04/23)へのリンク

ブタペストで開催されたCraft Conference 2015で、Dan North氏Jessica Kerr氏基調講演で、開発者に対して、複雑さは普通、コードの外にあると、注意を促した。UX、セキュリティ、配置、並列性のような複雑さの領域を特定し、管理すること、学習することを最大限重視すること、ビジネスに対するインパクトへのリードタイムを最小化すること、協力的なチームを育てること、ソフトウェアコミュニティに広く貢献することなどを話した。

Kerr氏は、1940年代にコンピュータプログラミング産業が勃興し始めたとき、複雑さはソフトウェア開発の方法論の性質そのものだった、という。コンピュータ科学者であり、米海軍少将であったGrace Hopperは、この複雑さを克服する最初のコンパイラを作成した。しかし、現在のソフトウェア開発では、複数の領域の複雑さと戦っている、と2人は指摘する。UX、セキュリティ、配置、並列性という領域だ。

Kerr氏は、現在の多くのソフトウェアが層状の‘箱-矢印-箱-矢印-シリンダ’という設計になっている、と指摘する。そして、色別でレゴブロックを組み立てるように、機能の配列がアンチパターンに陥っているという。

層状のアーキテクチャにソフトウェアの機能を割り当てるのは、レゴブロックを色別に組み立てるのに似ています。見栄えは良いかもしれませんが、何かを組み立てるのには不向きです。

層状のアーキテクチャに伴う一般的なアンチパターンのひとつは単一のデータベースを共有することだ。Kerr氏は、サービス指向アーキテクチャ(SOA)でひとつのデータベースを他のサービスと共有すのは、本当のサービスとは言えない、という。North氏は、同じ観点から、エンタープライズサービスバス(ESB)を使うことで、メッセージングミドルウエアに複雑性を押し込んでしまう傾向がある、と注意を促す。その結果、複雑さは共通のデータベースから共有の通信媒体へと広がってしまう。

マイクロサービスがある種の複雑さに対処するための有用なパターンかもしれない。しかし、通信やフォールトトレランス、監視といった関連するサービスを‘つなげる’機能に複雑性が流れ込まないようにしなければならない。Erlangのような言語から学ぶことができるだろう。Erlangは銀行や通信事業でスケーラブルで巨大なリアルタイムシステムを構築するのに使われている。

Erlangは文字通り25年間、[サービス間の通信]を提供してきました。

より洗練されたマイクロサービスの実装を得ていますが、それらはErlangのバージョンの劣化版へと育っていきます。

Kerr氏とNorth氏はソフトウェア開発で学習することは最も大事なことのひとつだという。‘探索し、評価し、親しみ、理解し、検証する’というプロセスを必要に応じて繰り返さなければならない。North氏は、リーンスタートアップの方法論と'ビルド-計測-学習'のサイクルの利点を簡単に紹介し、‘何かを理由なしに作ってはならない’と言う。顧客への影響が最も重要であり、アイディアから生まれるコストと利益の不確実性について早い段階で考慮する必要がある。

利益を最大化する方法を探すために調査が行われるべきだ。そして、ソフトウェア実装の複雑さを見極めるために実験が行われる必要がある。North氏は利益やコストを単純な数値で表現するよりは、幅(できれば確率分布信頼区間)を持たせて提示するほうが良い、という。幅で表現したほうが現実のシナリオを忠実に反映するからだ。

Kerr氏とNorth氏は、ソフトウェア開発の目的は、ビジネスへの影響を生み出すまでのリードタイムを最小限にすること、そして、それを継続的に実現することだ、という。‘リードタイム’は専門用語であり、リーンの方法論から取り出している。この言葉はビジネスの要件が定義されてから、ビジネスに良い影響を与えるソリューションが生まれるまでの実際の経過時間を表している(ソフトウェアの開発が必要であれ、不要であれ)。

ソフトウェア開発の目的はビジネスへの影響までにかかる時間を最小限にすることです。

Kerr氏とNorth氏はソフトウェア開発では協力的なチームを育てるのが重要だ、という。悪い考えを指摘したり、解決策がないことを問題視してはならない。生来、‘カナリア’である人もいるし、解決策を生み出すのが得意な人もいる。多様性があるチームは有益だ。多様性はUXやセキュティ、配置や並列性などの複雑さがある領域の専門性を手に入れるのにも役に立つ。

強いチームを育てるのに加えて、支援してくれるコミュニティを作ることも有益だ。これは、コミュニティに貢献することで達成できるかもしれない。例えば、チームで使っているオープンソースプロジェクトにバグ修正やパッチを送る。2人は開発者は不確実性を受け入れ、協力して最高の結果を出す必要がある、といい、講演を終わりにした。

この記事に星をつける

おすすめ度
スタイル

BT