チューリング泥沼

すべてが可能であるチューリング泥沼を恐れるが、具体的には何も簡単にできない

アラン・ペルリス



チューリング泥沼とは何ですか? これは、プログラムが非常に強力になるため、特定の問題を解決するための努力が、この問題のみを解決するプログラムをゼロから作成するコスト以上に一般化される状態です。



私はしばしばこの泥沼に泳ぎに行きたいという欲求に苦しんでいます。 すべては、特定の問題を解決する必要から始まります。 私は既存のツールを見て、それぞれのツールの欠点を見つけます。 そして今、最初のタスクを忘れてしまったので、類似のタスクの一般的なクラスを解決するユニバーサルツールのアーキテクチャの概要を説明します。 言語を(理論的には)問題を解決できる非常にエレガントで一般的な機能に減らす誘惑があります。



プログラミング言語はほとんど自己定義型である必要があると思います。 言語仕様は、2つの部分に分割する必要があります。演算子の小さなカーネル(公理の役割を果たす)と、定理のように公理の観点から定義される残りの言語です。

ポール・グラハム



泥沼の危険性は、問題を解決する代わりに、問題の解決策を作成するツールを開発し始めることです。 そして、彼が有用になろうとするタスクの範囲が広いほど、彼はそれぞれの特定のタスクにおいてあまり有用ではなくなります。 私の場合、問題は、特定の問題を解決するときに、現在のタスクを簡単かつ簡単に記述できる理想的なプログラミング言語を常に発明しようとすることです。 現在のタスクに取り組むのではなく、突然新しいプログラミング言語の仕様に取り組むことに気付いたとき、私は泥沼にいることに気付きます。 立ち止まって休む時間です。



チューリング泥沼の魅力は、すべての問題の潜在的な解決策であると思われることです。 一般的な方法を使用して問題を解決するツール-何が良いでしょうか?



プログラミングでは、私たちが行うことはすべて、より一般的な問題の特別な場合にすぎません。 そして時折気づきすぎます。

アラン・ペルリス



特定の問題と同様の問題の一般的なクラスとの関係を理解し​​ようとすると、以前は隠されていた詳細を確認するのに役立ちます。 「ユーレカ!」と叫ぶ理由がいくつか見つかることもあります。これらは素晴らしい瞬間です。 したがって、理想的なケースでは、チューリング沼地の端に沿って歩く準備が常に整っているべきであると同時に、それに落ちないように鉄の意志力があると信じています。 個人的には、私にはそのような意志はなく、さらに悪いことに、私は大きな好奇心を持っています。 少なくともこれらすべてとのいくつかの闘争のために、私は泥沼の端を決定するための一連の発見的手法を思いつきました:





これらのホイッスルとトリック、「強力なプログラミング言語」を構成するこれらの楽しいツールはすべて、実際には問題自体の一部ではなく、問題の解決策の一部であると確信していますか?

エドガー・ダイクストラ



翻訳者コメント



チューリング泥沼は、実際には見かけよりも一般的です。 そして、普遍的な規模の問題を解決する偉大な学問的精神だけをそこに引き込んでもいいでしょう。 しかし、いいえ-ユニバーサルツールはすべてを作成しようとします! 何らかの理由で、各DVD書き込みプログラムには独自のオーディオ/ビデオ/写真エディター、カバーアートツール、プレーヤー、コンバーターがあります。 各メッセンジャーは、電子メール、ソーシャルネットワーク、SMS、紙の手紙、地球外文明へのメッセージ送信など、可能なすべての通信プロトコルのサポートに取り組んでいます。 すべてのOSはすべての種類のデバイスに登ります。各コーデックパックには大量のジャンクが含まれ、一部のコンソールプログラムのドキュメントには150のA4ページと数千のコマンドラインキーがあります。 インターネット上の2番目のサイトはすべて、天気\ホロスコープ\デート\仕事\チャット\フォーラムのコケに囲まれています。 新しい機能の追加ユーザーを引き付けようとして、プログラムやサイトは、このプログラムやサイトがかつてゴミの山から選ばれた合理的なカーネルを探すのをためらっていた他の十数人を失いました。



特効薬はありません。 個人的には、ターゲットを絞った有用なツールから低機能のがらくたの異なるセットにスライドできない唯一の方法は、プラグインシステムのようです。 良い例は、最新のブラウザー、一部のオンラインゲーム、IDE、およびその他のモジュラープログラムです(リストを完成させることができると確信しています)。

プログラムに新しい機能を追加する前に、少なくとも4分の1のユーザーがそれを必要としているかどうかを考えてください。 そうでない場合-APIを引き出して、プラグインの作成と接続を希望するユーザーに提供するだけの価値があるかもしれません。



All Articles