システムを100%データ駆動できますか?


44

私の上司は長年このプロジェクトに取り組んでいます。私はここに数週間しかいませんが、それが可能かどうかはわかりません。彼は「100%データ駆動型」のシステムを設計したいと考えています。

したがって、十分なデータを入力すれば、任意のアプリケーションを定義および生成できます。私は少なくともユーザーなどのいくつかのことを認めさせることができました、またはアプリには事前定義された値が必要ですが、彼はシステムの構造、ユーザーインターフェイス、ロジックがすべてデータとして保存されるという概念が好きです。

単純なもののデモがいくつかあり、彼は基本的にオブジェクト指向プログラミングと基本的なテンプレートシステムのいくつかの単純なアイデアを再発見しましたが、この目標は実際には不可能であると思います。

システムを非常に複雑にせずに実際のプログラミングを行うことなく、データを使用してロジックを定義する方法がわかりません。

理論的には、データを解釈するものがアプリケーションを説明するために完全にチューリングする必要があるので、問題を1レベル上にシフトしてネットメリットがないからではないと思います。

このような100%データ駆動型アプリケーションは可能ですか?


4
独自のプログラミング言語を作成する場合のみ。似たようなアプリケーションを大量に作成する必要がある場合は、ライブラリ、アーキテクチャ、または極端な場合にはドメイン固有言語(DSL)が必要になる場合があります。
マイケルK 14年

6
「データ駆動型」という言葉の意味をより具体的に定義する必要があると思います。
GrandmasterB 14年

9
Lispのような一部の言語では、コードとデータの間に明確な境界線がありません。その結果、データベースのテーブルまたは列に、それと共存するデータに作用する命令が含まれることがありますが、それが不正行為かどうかはわかりません。
ロブ14年

20
もちろんできます!データはJavaソースファイルとしてファイルシステムに保存されます。コンパイルしてデプロイするだけです。100%の柔軟性、100%のデータ駆動。
ジェレミースタイン14年

6
@JeremySteinは私にそれを打ち負かした。私のデータはSubversionに保存され、「構成」への変更は継続的インテグレーションシステムおよび他の展開プロセスを通じて適用されると言っていました。
ミンドール氏14年

回答:


46

上司は次の記事を読む必要があります。Bad Carma:「Vision」プロジェクト、内部プラットフォーム効果または2番目のシステム効果に関する警告物語。

抽象

情報技術(IT)で働く私たちはすべて、重要な何かがちょうど正しくないプロジェクトに参加しています。私たちはそれを知っています。ほとんどの人はそれを知っていますが、誰も納得のいく方法で問題に指を当てることができません。

この物語は、私が今まで経験した中で最も壮大な失敗である、そのようなITプロジェクトについてです。その結果、中規模のIT部門が完全に解雇され、最終的に成長産業の成長企業が破壊されました。私たちが「Upstart」と呼ぶ会社は、成功した収益性の高いサブスクリプションテレビ事業でした。

このプロジェクトは1990年代初頭に行われ、カスタムオーダーエントリおよびカスタマーサービスアプリケーションであり、現在カスタマーリレーションシップマネジメントまたはCRMと呼ばれているものによく似ています。システムのコア機能は次のとおりです。

  • 注文入力と在庫
  • カスタマーサービス、ヘルプデスク
  • 総勘定元帳、売掛金、請求書、買掛金

このアプリケーションは「Vision」と呼ばれ、その名前はUpstartに対する公式の約束であると同時に、その建築家に対する自己強調的なうなずきでもありました。このアプリケーションは革新的であり、将来のビジネスの変化に対応できるように柔軟に構築されています。事業の予測可能な将来の変更だけでなく、あらゆる形の事業の絶対的な変更。これは非常に注目に値する主張でしたが、Visionはこれまでに構築された最後のアプリケーションになることを意図していました。完全にデータ駆動型であり、無制限の抽象化を提供し、当時最先端のオブジェクト指向プログラミング技術を使用することでこの完全な柔軟性を実現しました。

ミッションクリティカルなアプリケーションを作成するために着手したこのような多くのプロジェクトと同様に、開発作業は当初の予測よりも約1年長い2年に及びました。しかし、これは許容範囲内でした。これは、これが永遠に続き、将来の要件に適応し、無制限の投資収益率(ROI)を提供するアプリケーションだからです。アプリケーションが最終的に「ライブ」になったとき、会社のほぼ全員が非常に多くの投資をしていたため、文字通り会社の運命は成功にかかっていました。

ただし、プロジェクト全体に不具合が発生した場合、多国籍企業のコアビジネスを実行するミッションクリティカルなアプリケーションは、インターネットバブルの時代に数千の「ドットコム」企業によって実証された種類の高速フレームアウトを許可されません。Visionが「ライブ」になってから1か月以内に、その構築に最も重くのしかかっている人を除いて、それが失敗であることが明らかになりました。

こちらもご覧ください

http://en.wikipedia.org/wiki/Inner-platform_effect


3
+1プラットフォーム内効果。このTDWTFはうまくまとめていると思います:thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx

4
少しのコードを書くコストがプラットフォーム全体を構築するよりもはるかに少ないことに人々が気づかないのは面白いことです。
brianfeucht

9
@brianfeucht:無限に設定可能なプラットフォームのアイデアは魅力的です。
ロバートハーヴェイ14年

1
内側のプラットフォーム効果は、GuavaなどのGoogleライブラリを思い出させます。ifステートメントを使用する代わりに、コードに大量のPredicateインスタンスが埋め込まれています。それは恐ろしいことです。
luke1985年

3
@RobertHarveyと構築する楽しみ。エンドユーザーをサポートする必要がない限り;)
brianfeucht 14年

17

答えは「はい」です。完全にデータ駆動型のシステムを作成することは可能です。はい、通常は本当に悪い考えです。

完全にデータ駆動型のプログラムとは、すべてのロジックと構成が、別のコンテキストではデータと見なされるような方法で格納された値によって処理されるプログラムです。1980年代には、多数のフォームに入力され、テーブルに保存され、レポートからアクセス可能なデータ項目を使用して、レポート、フォーム、テーブル、ロジックを生成する機能を提供する4GL製品が多数ありました。私はそのようなシステムを「数字によるペイント」と呼んでいましたが、今では「内部システム」効果として知られるようになりました。いい名前。

これらのシステムを作成する人々は、(それを知っているかどうかにかかわらず)新しいプログラミング言語を作成しようとしています。彼らにはスキルがないので、彼らはひどくそれをします。JVM / CLRの観点から見ると、コンパイルされたJava / C#プログラムは単なるデータです。この場合、うまく実行されています。いずれの場合でも、プログラマーは、それが何であれ、言語を使用する必要があります。

私が知っているこの仕事をする1つの特定の方法があります。フォーム、レポート、表など、必要な各コンポーネントのスケルトンを構築します。データ項目を設定することにより、これらのコンポーネントのさまざまな部分を構成するメカニズムを提供します。選択した一連の機能について、決定を下してシステムに凍結し、それらの機能を構成する機能を明確に拒否します。

また、論理演算をコーディングする機能を持つ言語を実装します。私の推奨事項は、luaやPythonなどの既存の言語を使用することです。論理演算が必要な場所にこのコードの一部を埋め込みます。

これにより、各フォーム、レポート、表などの実装に必要な記述の量を大幅に削減できます。このシステムはデータ駆動型のように見えますが、ほんの一点に過ぎません。

この時点で、新しい4GLを実装しました。あなたがたまたまこれをうまくやるなら、私に知らせてください。ほとんどの人は悲惨に失敗します。私はあなたの功績を祝福します。


2
素晴らしい記事。SAP(ERPシステム)は、そのようなシステムの典型的な例です。あなたはそこにプログラムせず、あなたはそれを「設定」します。重要なことを成し遂げるには血まみれの複雑さであり、それを中心にコンサルタント業界全体を作り上げました。
トニー14年

@Tonny:ありがとう。私はSAPを直接使用した経験はありませんが、SAP / R3とABAPがこの説明に近づき、戦争ストーリーの主要な生成者であることを理解しています。まだ会社はお金の山を作っています。
david.pfx

SAPを
実際に

6

基本的に正しいと思います。言語ランタイムは、すでに完全に柔軟なデータ駆動型システムです。1つのデータ(プログラム)を受け取り、それを使用して他のデータにどのように作用するかを決定します。他のプログラム(インクルードパスから適切なインストール管理まで)で再利用するためのコードを保存するマルチユーザースキームもあります。

「スクリプト言語」は、大まかに言って、このコード入力が人間が読める言語ランタイムです。コンパイラーは、ユーザーとランタイムの間に追加のステップを配置します。Malbolge やAPLのような「ジョーク」言語は、いかなる形式でも人間が読めるものである必要はありません。しかし、それは1つのレベルですべて同じことであり、とにかく人間が読めるということは、すべての潜在的なユーザーがそれを読み書きするスキルを持っている、またはそれらを開発することが期待できることを意味しません。

通常、言語ランタイムをエンドユーザーに直接公開しないのには、十分な理由があります。主なものは、柔軟性をなくすことで利便性が高まることです。

SO投稿を入力する場合は、入力するだけです。代わりにC ++プログラムを作成して出力することはできますが、通常のテキストボックスの代わりにC ++プログラムエディターを公開するWebブラウザーは使用しません。C ++を知らない人は、ブラウザーを使用しないだけでなく、使用できません。

特定のビジネスパラメーターを構成する場合、チューリング完全仕様言語を使用して必ずしもそれを行う必要はありません。これを行ったとしても、おそらく他のプログラミングで同じビジネスパラメーターを「ハードコーディング」することと区別できません言語。あなたが書いているものがあなたがそれが意味することを意味するかどうかをまだ検討する必要があります。それでも変更が正しいことをテストする必要があります。つまり、あなたが設定(使用)するための特殊なサブシステム(「アプリケーション」)を準備するプログラミングスキルを持っている人予期しない、自明ではないタスクのプログラミングスキルが必要です。

そのため、適切なデータが与えられれば何でもできる100%データ駆動型のシステムに乗り出そうとしている場合、次の2つの質問があります。

  1. 私たちはプログラミング言語を発明するビジネスをしていますか、そうすべきですか?
  2. 私たちの新しいプログラミング言語は、(私たちの目的のために)すでに持っているものよりも優れているでしょうか?それを必要に応じてサポートおよび開発しますか?

時々、答えはイエスです。そして、あなたはある種のドメイン固有の言語を書きます。または、Sun / Microsoft / Stroustrup / van Rossum /その他の多くの人にとっては、実際の汎用プログラミング言語ですらあります。答えがノーである場合があり、「内部プラットフォーム」効果が得られます。多くの労力と試行錯誤の後、何かになります。運が良ければ、それを書いたプログラミング言語よりもわずかに劣り、使いやすいものではありません。

一部の言語は他の言語よりも使いにくいか、特にRのような目的に特化されている場合、一部のユーザーははるかに使いやすいと感じるでしょう。おそらくしないことは、一般的なアプリケーションのプログラミングを根本的に簡単にすることです。おそらく、それを行う可能性のある人/組織が世界中に複数いる可能性がありますが、上司/会社は、それが彼/あなたを含むかどうかを正直に考慮する必要があります。

ゲームでよく使用されるトリックがあります。これは、Luaバインディングをゲームエンジンに公開することです。これにより、設計者は比較的簡単な言語でプログラミングできますが、パフォーマンスやエンジンやプラットフォームの特定の機能へのアクセスが必要な場合は、「本物の」プログラマーを引き付けることができます。エンジンに関する限り、結果のLuaスクリプトは「データ」です。構成データとは対照的に、「ロジック」と呼ばれるものの多くを含める必要はなく、多くの場合、ゲームプレイ全体ではなく、すべてのプロットと環境を定義します。これは100%データ駆動型ではなく、間違いなく100%エラーがないわけではありませんが、興味深い実用的な妥協案です。


よく置きます。100%データ駆動型に最も近いものは、システムがプログラミング言語です。そして、私たちはすでにそれらを持っているので、私たちの仕事は、現在必要な実際の機能を提供するために、テキストステートメントの形で実際のデータを提供することです。
RBarryYoung

4

私はこれが目標だった会社で働いていました。SQLのスニペットはデータベーステーブルに格納され、実行時に読み取られて実行されました。想像できるように、パフォーマンスはひどく、バグは頻繁に発生していました。デバッグも不可能でした。スタックトレースなど、生活を楽にするものは何もありませんでした。

「データ駆動型プログラミング」は、プログラマーとして私たちがしていることを根本的に理解していないことに起因しています。何らかの方法でユーザーインターフェイスの2つのアイデアを混ぜ合わせた(マングルした)場合でも、アルゴリズムを実行できるデータは実際には「プログラミング」です。これは、2つのアイデアを他の方向から組み合わせることができないという意味ではないため、すべてのコードはデータです。それがLispの背後にある前提です。これは、その同質性によって有効にされ、マクロシステムによって悪用されます。はい、これらの概念は似ていますが、実際の意味と用途は非常に異なります。

また、これは編集的なことかもしれませんが、「完全にデータ駆動型」のプログラミングを望んでいる私が遭遇した場所は、実際にはプログラマを高く評価していません。彼らは、コードをコストセンター、外部委託、または無視されるものと考えています。


ドメイン固有言語システムでフォームやレポートなどを簡単に作成できるシステムを使用しました。これにより、一部のエキスパートユーザーは、これらのことを自分で行うことを学ぶことができました。また、ランタイムモジュールを修正することですべてのサイトのバグを修正でき、さまざまな顧客向けに特別に構成されたものをいじる必要がないことも意味していました。プログラミングをコストセンターにすることは、コーディングを外部委託する正しいビジネス上の理由であるか、会社を破壊する最良の方法であるという考えに同意します。

4

あなたはあなたの上司があなたにこれを書いて欲しいと言っていることを意味します:

[
  {
    "statement": "Assignment ",
    "variable": "App",
    "value": {
      "type": "Function",
      "arguments": [],
      "function-body": [
        {}
      ]
    }
  },
  {
    "statement": "Assignment",
    "variable": "App.prototype.action",
    "value": {
      "type": "Function",
      "arguments": [
        "data"
      ],
      "function-body": [
        {
          "statement": "Call",
          "function-name": "console.log",
          "arguments": [
            "data"
          ]
        }
      ]
    }
  }
]

これを生成するには:

var App = function () {};
App.prototype.action = function ( data ) {
    console.log( data );
}

1つ目はJSONで、2つ目はJavaScriptです。

明確化

理論的には、データを解釈するものがアプリケーションを説明するために完全にチューリングする必要があるので、問題を1レベル上にシフトしてネットメリットがないからではないと思います。

このような100%データ駆動型アプリケーションは可能ですか?

ここから始めました。私の答えでは、元の投稿に同意しようとしていますそれは可能ですが、あなたは正しいです、それは問題を1レベル上にシフトするだけで、[明らかな]利益はありません


プログラマーはツアーの概念的な質問であり、答えは物事説明すること期待されています。説明の代わりにコードダンプをスローすることは、コードをIDEからホワイトボードにコピーするようなものです。ホワイトボードには、コンパイラを持っていません
ブヨ

@gnatコメントありがとう。私は答えを更新し、より明確にすることを試みました。まだ十分に明確でないようであれば、教えてください。
マフディ

0

私は、Webブラウザーアプリケーションはすべて100%データドリブンと見なすことができると納得できると主張することができます1

もちろん、それはウェブ上でアプリケーションを構築することを簡単にも簡単にもしませんが、実際、それはそれらをはるかに難しくします。

上司にWebブラウザーを再発明していることを伝えてください。最終的には、合理的に複雑なものを作成するにはJavaScriptを再発明する必要があります。

1さて、プラグイン、JavaScript、HTML5を無視する場合。


-1

はい。私が知る限り、Mathematicaのようなシステムは、いわゆる強力なプログラミング言語ですが、本質的にはシェルであり、上司が期待していたのと同じような考えに基づいて構築されています。現在、Wolfram Mathematicaは十分に複雑になっているため、多くの計算タスクを簡単に実行できます。

データ駆動型は概念です。プログラマが単純な方法でデータを操作する場合、データを簡単に操作できるシェルが必要です。構文に基づいたプログラミング言語の学習について話し始めると、実際にはアプリケーションインターフェイスまたは単にそのシェルを学習していることを理解してください。シェルを理解すれば、プログラムを駆動できます。

100%のデータ駆動に関しては、コンパイラーまたはインタープリターがシェルを理解できる場合、計算が駆動されます。データが、シェルまたはインターフェースと同じ基礎構造を持っている場合、データはコンパイラーまたはインタープリターでも駆動できます。私が思うに、Mathematicaは、私はイエスをあなたに応じる理由のために良い説明です。


1
この投稿は読みにくい(テキストの壁)。ですが、あなたは気編集をより良い形にそれをINGの?
ブヨ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.