プログラミング
ソフトウェアにおけるリンディ効果
The Lindy Effect in Software (clemsau.com)
要約
リンディ効果とは、あるものが長く存在すればするほど、将来も長く存在し続ける可能性が高いという考え方です。ソフトウェア開発においては、長年使われてきた技術は、新しい流行りの技術よりも安定性、信頼性、成熟したエコシステムを備えているため、より堅牢であると見なされます。この記事では、新しい技術の採用と、実績のある基盤への依存とのバランスを取ることの重要性を説いています。
全文翻訳
目次目次衣服がトレンドに長くあればあるほど、それが続き、トレンドであり続ける可能性が高いと言えます。同じように、本が過去数十年または数世紀にわたって読まれてきたのであれば、特に最近の本と比較して、それがすぐに時代遅れになる可能性は低いです。これらは私が魅力的だと感じる理論、リンディ効果によって説明されます。これは、あるものが長く存在または存続していればいるほど、将来も長く存在または存続し続けると予想されるという概念です。ソフトウェアにおけるリンディ効果とは何を意味するのでしょうか?ソフトウェアにこれを当てはめると、テクノロジーが長く存在するほど、より堅牢であり、したがって最近のトレンド技術と比較してそれに賭けるのが良いということになるかもしれません。はい、わかります、ソフトウェアは人類の時間の中ではそれほど古くはありません、少なくとも時計や本ほど古くはありません。ハードウェアとソフトウェアの両方が進化しているのは素晴らしいことであり、私たちは明らかに変化を受け入れなければなりません(これらの新しいApple Siliconプロセッサは確かに非常に優れています)。画期的なベンチマークを伴う新しいテクノロジーが、すべてのアプリケーションを移行すべき唯一のものだということではありません、明らかにそうではありません。より具体的に言うと、退屈な技術を選択した場合、得られるメリットは以下のとおりです。安定性と信頼性:長年耐えてきた古いテクノロジーやプログラミング言語は、しばしばより高い安定性と信頼性を提供します。バグや脆弱性は長年にわたって発見・修正されており、重要なアプリケーションにとってより堅牢な選択肢となっています。成熟したエコシステム:確立されたテクノロジーは通常、広範なドキュメント、ライブラリ、コミュニティサポートを備えた十分に開発されたエコシステムを誇ります。この豊富なリソースはソフトウェアプロジェクトにとって非常に価値があり、開発およびトラブルシューティングプロセスを効率化できます。予測可能なパフォーマンス:古いテクノロジーは数多くの実世界のシナリオで実証されており、そのパフォーマンス特性はより予測可能になっています。この予測可能性は、厳格なパフォーマンス要件を持つシステムを構築する際に不可欠です。業界での受け入れ:長年存続してきたテクノロジーは、しばしば業界で広く受け入れられています。これは、これらのテクノロジーに精通した専門家を見つけやすいことを意味し、これらの確立されたツールを使用してソフトウェアを構築および保守することが容易になります。リスクの軽減:テクノロジーの新規性には、未発見のバグ、スケーラビリティの課題、または不確かな長期サポートなど、固有のリスクが伴います。古いテクノロジーは実績があり、最新の流行を採用することに伴う潜在的なリスクを軽減します。ソフトウェアにおけるリンディ効果:テクノロジーが長く存在するほど、最近のものと比較してより堅牢であると見なされます。私たちはしばしばテクノロジーの成熟度について話します。C言語SQLはしばらく前から存在しており、https://antonz.org/fancy-ql/JSライブラリは次々と現れるようです。個人的には、エンタープライズグレードのバックエンドのためにJavaではなくGoを選択することに賛成ですが、大企業が後者を選択する際に最も安全な賭けをする理由を理解しています。彼らは何十年もそれを使用しています。SQLは1989年から存在しており、すぐに私たちのもとを去ることはないでしょう(少なくとも、あなたがこれを読んでいるときにはそうではないことを願っています)。C自体は1972年に作成され、2023年でも人々がそれを使用していることは、他の低レベルプログラミング言語が台頭するかどうかに関わらず、その将来の関連性に対する私の自信を深めます。リンディ効果をソフトウェアエンジニアリングに適用するこの概念は、ソフトウェアエンジニアが新しい技術を採用することと、時間をかけて証明された技術を受け入れることとのバランスを見つけるのに役立つ可能性があります。この原則を開発プロセスに組み込むための実用的なステップをいくつか示します。慎重な採用:プロジェクトに組み込む前に、新しいテクノロジーを慎重に評価してください。テクノロジーの潜在的なメリット、リスク、および長期的な実行可能性を考慮してください。実績のある基盤に固執する:ソフトウェアのコアコンポーネントには、確立されたテクノロジーとベストプラクティスに依存してください。これらの基盤は安定性を提供し、アプリケーションの信頼性の高いバックボーンを形成します。長寿命を計画する:ソフトウェアアーキテクチャを設計する際は、テクノロジーの選択がプロジェクトの長期的な実行可能性に与える影響を考慮してください。保守性、互換性、および持続可能性を優先してください。革命ではなく進化を受け入れる:常にソフトウェアを書き直したりオーバーホールしたりするのではなく、時間とともに段階的に改善および更新することを目指してください。進化的な変更は、多くの場合、より管理しやすく、重大な問題を引き起こす可能性が低くなります。