ソフトウェア開発は若い職業であり、私たちはまだ効果的に行うための技術を学び、ツールを構築している段階です。私はこの活動に30年以上携わっており、過去20年間はこのウェブサイトで、有用なソフトウェアの構築を容易にするパターンとプラクティスについて執筆してきました。このサイトは、私自身の著作を掲載する場所として始まりましたが、同僚の記事を掲載するためにも使用しています。

2000年に、私はThoughtworksに入社しました。そこでの私の役割は、クライアント向けにソフトウェアを提供するために習得した技術について学び、これらの技術をより幅広いソフトウェア業界に伝えることです。このサイトがソフトウェア開発に関する尊敬されるプラットフォームへと発展するにつれて、私はThoughtWorksの社員やその他の同僚の記事を編集および公開し、有用な記事がより多くの読者に届くように支援してきました。

photo of Martin Fowler

写真:Christopher Ferguson

マーチン・ファウラー

ソフトウェアを効果的に構築するためのウェブサイト

私の仕事とこのサイトでの執筆活動に共通するテーマがあるとすれば、それはアジャイル思考への移行と、アジャイルソフトウェア開発を実用化する技術的なパターンとプラクティスの相互作用です。私たちの職業では技術の詳細は急速に変化しますが、基本的なプラクティスとパターンはより安定しています。そのため、これらについて書くことで、このサイトには数年前に書かれた記事が掲載されていますが、書かれた当時と変わらず関連性があります。

ソフトウェアが現代のビジネスにとってより重要になるにつれて、ソフトウェアは変化に迅速に対応し、新しい機能を迅速に考案、開発、そして本番環境に導入できる必要があります。アジャイルソフトウェア開発の技術は1990年代に始まり、過去10年間で着実に普及してきました。アジャイル開発は柔軟な計画アプローチに焦点を当てており、ユーザーのニーズの変化や、製品マネージャーがユーザーの効率を高める方法についてより多くのことを学ぶにつれて、ソフトウェア製品の方向転換を可能にします。現在では広く受け入れられていますが、アジャイルアプローチは容易ではなく、チームには高度なスキルが必要ですが、さらに重要なのは、チーム内およびチームのパートナーとのオープンなコラボレーションの文化です。

変化に柔軟に対応する必要があることは、ソフトウェアシステムのアーキテクチャに重要な影響を与えます。ソフトウェアは、機能の予期せぬ変更に適応できるように構築する必要があります。これを行うための最も重要な方法の1つは、明確なコードを記述し、プログラムが何をすることになっているのかを理解しやすくすることです。このコードは、開発者が変更を加える必要があるシステムの部分のみを理解できるように、モジュールに分割する必要があります。この本番コードは、変更を加える際に発生したエラーを検出し、内部構造の使用方法の例を提供できる自動テストによってサポートされる必要があります。大規模で複雑なソフトウェア開発では、マイクロサービスアーキテクチャスタイルが、チームが依存関係の少ないソフトウェアをデプロイするのに役立つ場合があります。

優れたアーキテクチャを持つソフトウェアを作成することは、一度でできることではありません。優れた散文のように、プログラマーが製品の目的と、その目標を達成するための最良の設計方法についてより多くのことを学ぶにつれて、定期的な改訂が必要です。リファクタリングは、プログラムを安全に変更できるようにするための不可欠な技術です。これは、ソフトウェアの観察可能な動作を変更しない小さな変更を加えることから成ります。多くの小さな変更を組み合わせることで、開発者はシステムが最初に考案されたときには計画されていなかった大幅な変更をサポートするために、ソフトウェアの構造を改訂できます。

開発者のマシン上でのみ実行されるソフトウェアは、ソフトウェアの顧客に価値を提供していません。従来、ソフトウェアのリリースは長く複雑なプロセスであり、ソフトウェアを迅速に進化させる必要があることを妨げてきました。継続的デリバリーは、自動化と共同ワークフローを使用してこのボトルネックを取り除き、チームが顧客の要求に応じてソフトウェアをリリースできるようにします。継続的デリバリーを可能にするには、変更によってバグが導入されていないという確信を与えてくれる、さまざまな自動テストを備えたテストの強固な基盤を構築する必要があります。これは、アーキテクチャの改善に役立つテストをプログラミングに統合することにつながります。

フォトストリーム

ビッグサー、カリフォルニア州

データ管理

世の中にはさまざまな種類のソフトウェアがありますが、私が主に携わっているのはエンタープライズアプリケーションです。この世界で私たちが取り組む必要がある永続的な問題の1つは、データ管理です。ここで私が焦点を当てているデータ管理の側面は、アプリケーションが変化するニーズに対応する際にデータストアを移行する方法、大企業全体で異なるコンテキストに対処する方法、NoSQLデータベースの役割、そしてビッグデータとメッシデータの両方に対応するというより広範な問題です。

ドメイン特化言語

複雑なソフトウェアシステムにおける一般的な問題は、プログラマーが容易に操作でき、ドメインエキスパートにも容易に伝えることができる方法で、複雑なドメインロジックをどのように捉えるかということです。ドメイン特化言語(DSL)は、カスタムパーサーを使用するか、ホスト言語内の規則によって、特定の問題のためのカスタム言語を作成します。

書籍

私は、「リファクタリング」、「エンタープライズアプリケーションアーキテクチャパターン」、「UML Distilled」など、ソフトウェア開発に関する7冊の書籍を執筆しています。また、Addison-Wesleyのシグネチャーシリーズの編集者でもあり、このシリーズにはJolt Award受賞作品が5冊含まれています。

私の書籍ページ...

カンファレンストーク

私はよくカンファレンスで講演を依頼されます。そこから、私はかなり優れた講演者であると推測しています。これは、私が講演をするのが本当に嫌いなので皮肉なことです。私のカンファレンストークのビデオを見ることで、私の講演についてご自身の意見を形成することができます。

私のビデオページ...

ボードゲーム

私は長い間ボードゲームのファンであり、真剣な考えを少しの間すべて消し去り、親しい友人たちとの時間を楽しむことができる、心を完全に満たしてくれるゲームを楽しんでいます。現代のボードゲームは、1990年代にユーロゲームの台頭とともに劇的に進化しました。多くの人は、この新世代のゲームを試したことがないことに驚くでしょう。また、私はHeavy Cardboardに定期的に出演しています。

私のボードゲームページ...

タグ

API設計 · アジャイル · アジャイル導入 · 分析パターン · アプリケーションアーキテクチャ · アプリケーション統合 · 悪いこと · ボードゲーム · ビルドスクリプティング · 資格 · コラボレーション · コンピュータの歴史 · カンファレンスパネル · カンファレンス · 継続的デリバリー · covid-19 · データ分析 · データベース · 設計 · 辞書 · 分散コンピューティングマガジン · 気晴らし · 多様性 · ドキュメンテーション · ドメイン駆動設計 · ドメイン特化言語 · 家庭 · カプセル化 · エンタープライズアーキテクチャ · 見積もり · イベントアーキテクチャ · 進化型設計 · エクスペリエンスレポート · エクスポジショナルアーキテクチャ · エクストリームプログラミング · フロントエンド · ガジェット · 生成AI · ieeeSoftware · インフォデッキ · インターネット文化 · インタビュー · 言語機能 · 言語ワークベンチ · リーン · レガシーシステム改修 · 法律 · メトリクス · マイクロサービス · モバイル · noSQL · オブジェクトコラボレーション設計 · パーサジェネレータ · 写真 · プラットフォーム · ポッドキャスト · 人気 · プレゼンテーション技術 · プライバシー · プロセステ理論 · 生産性 · プログラミング環境 · プログラミングスタイル · プロジェクト計画 · 採用 · リファクタリング · リファクタリング境界 · 要件分析 · Ruby · セキュリティ · 講演ビデオ · チーム環境 · チーム編成 · 技術的負債 · 技術リーダーシップ · テストカテゴリ · テスト · thoughtworks · ツール · 旅行 · UML · バージョン管理 · Web開発 · Webサービス · ウェブサイト · ライティング

2024 · 2023 · 2022 · 2021 · 2020 · 2019 · 2018 · 2017 · 2016 · 2015 · 2014 · 2013 · 2012 · 2011 · 2010 · 2009 · 2008 · 2007 · 2006 · 2005 · 2004 · 2003 · 2002 · 2001 · 2000 · 1999 · 1998 · 1997 · 1996

すべてのコンテンツ

最近の変更

新しい記事の投稿時に通知を受け取りたい場合は、RSSTwitter、またはMastodon フィードを購読してください。また、最近の変更専用のページもあります。


LinkedInへの参加

2024年3月28日(木)12:26 EDT

Twitterのイーロン・マスク氏による買収後の変化が続く中、LinkedInを使って新しい専門的な情報を入手する人が増えているという話をよく耳にするようになりました。そこで、数週間前にLinkedInアカウントを開設し、このプラットフォームで私をフォローできるようにしました。

続きを読む...


段階的なモダナイゼーションのためのメインフレームにおけるシームの発見

2024年3月26日(火)09:32 EDT

メインフレームシステムは、依然として世界のコンピューティングワークロードの大部分を担っていますが、増大するビジネスニーズに対応するために新しい機能を追加することは困難な場合があります。さらに、機能拡張を遅らせるアーキテクチャ上の課題は、システムの置き換えも困難にしています。リスクを軽減するために、レガシーシステムの置き換えには段階的なアプローチを採用し、レガシー機能を最新のテクノロジーによる実装に徐々に置き換えていきます。この戦略では、メインフレームシステムにシーム(新しいサービスにロジックフローを迂回させることができるポイント)を導入する必要があります。最近のプロジェクトで、アレッシオ・フェリ氏とトム・コグレイブ氏は、長期にわたって運用されているメインフレームシステムにこれらのシームを導入するためのいくつかのアプローチを調査しました。

続きを読む…


リファクタリングの最初の章のコードサンプル

2024年3月15日(金)11:04 EDT

リファクタリングの最初の章で使用したコードのコピーを、自分で追跡できるようにしてほしいという要望が時々寄せられます。私はこのコードを提供しない理由がありましたが、具体的には怠惰でした。幸いなことに、エミリー・バチェはより献身的で、GitHubリポジトリであるTheatrical Players Refactoring Kataにコードと、リファクタリングを行うのに十分なテストを用意してくれました。

しかし、このリポジトリはさらに進んでおり、C、Java、Rust、Pythonなど、12の言語で同様のサンプルコードが含まれています。

彼女は最近、YouTubeチャンネルに動画を投稿し、その章を読んでいる間にこのコードを使用することを勧める理由を説明しています。彼女のチャンネルには、優れたコードテクニックに関する多くの動画があり、読者が彼女の活動を支援するためのPatreonもあります。


人間による開発者生産性の測定

2024年3月12日(火)09:36 EDT

開発者の生産性を測定することは難しい課題です。開発サイクルタイムとスループットに焦点を当てた従来の指標には限界があり、他にどこを参照すべきかについての明確な答えはありません。定性的な指標は、開発者自身から得られたデータを使用して、開発者の生産性を測定し、理解するための強力な方法を提供します。アビ・ノダ氏とティム・コクラン氏は、定性的な指標とは何か、そして主観的または信頼できないという理由でそれらを拒否すべきではない理由を説明することから議論を始めます。

続きを読む…


ペアを毎日ローテーションさせたらどうなるか?

2024年3月6日(水)10:33 EST

ペアプログラミングを行う場合、ペアを頻繁にローテーションさせることが重要ですが、ペアプログラミングを行う多くの組織は、そうすることに消極的です。ガブリエル・ロバイナ氏とキーラン・マーフィー氏は、「ペアを毎日ローテーションさせたらどうなるか?」という問いを投げかけ、3つのチームと協力して毎日のペアローテーションの演習を行いました。彼らは、チームがペアリングの利点と課題、そしてそれらを解決する方法を振り返るための軽量な方法論を開発しました。当初の懸念は克服され、チームはペアを頻繁にローテーションさせることの利点 discovered benefits of frequently rotating pairs. ペアを頻繁に入れ替えることで、ペアリングの利点が大幅に向上することを学びました。彼らの記事では、彼らが開発した方法論、彼らの観察、そして参加チームメンバーによって共有された一般的な懸念と洞察を共有しています。

続きを読む…