Kann ein System zu 100% datengetrieben sein?


44

Mein neuer Chef arbeitet seit vielen Jahren an diesem Projekt. Ich bin erst seit ein paar Wochen hier, aber ich bin nicht sicher, ob das möglich ist. Er möchte ein System entwerfen, das "100% datengesteuert" ist.

Wenn wir also genügend Daten eingeben, können wir jede Anwendung definieren und generieren. Ich habe es zumindest geschafft, ihn dazu zu bringen, einige Dinge wie Benutzer zuzugeben, oder Apps sollten vordefinierte Werte haben, aber er mag das Konzept der Struktur des Systems, der Benutzeroberfläche und der Logik, die alle als Daten gespeichert werden.

Es gibt einige Demos von einfachen Dingen und er hat im Grunde genommen einige einfache Ideen der objektorientierten Programmierung und Ihrer grundlegenden Vorlagensysteme wiederentdeckt, aber ich denke insgesamt, dass dieses Ziel tatsächlich unmöglich sein könnte.

Ich weiß nicht, wie Sie Logik mithilfe von Daten definieren können, ohne dass das System so komplex wird, dass Sie tatsächlich programmieren.

Ich denke, theoretisch liegt es nicht daran, dass das, was die Daten interpretiert, vollständig werden muss, um die Anwendung zu beschreiben. Sie haben das Problem also nur um eine Stufe nach oben verschoben, um keinen Nettonutzen zu erzielen.

Ist eine solche 100% datengetriebene Anwendung möglich?


4
Nur wenn Sie Ihre eigene Programmiersprache schreiben. Wenn Sie wirklich viele ähnliche Anwendungen schreiben müssen, benötigen Sie möglicherweise bessere Bibliotheken, eine bessere Architektur oder im Extremfall eine domänenspezifische Sprache (Domain Specific Language, DSL).
Michael K

6
Ich denke, Sie müssen genauer definieren, was Sie unter "datengesteuert" verstehen.
GroßmeisterB

9
In einigen Sprachen wie Lisp gibt es keine klare Grenze zwischen Code und Daten. Dies kann zu Datenbanktabellen oder -spalten führen, die Anweisungen zum Verarbeiten der Daten enthalten, die sich daneben befinden. Ich bin mir jedoch nicht sicher, ob dies Betrug ist.
Rob

20
Natürlich kannst du es schaffen! Die Daten werden als Java-Quelldateien im Dateisystem gespeichert. Wir kompilieren und implementieren und los geht's. 100% Flexibilität, 100% datengesteuert.
Jeremy Stein

6
@ JeremyStein hat mich geschlagen. Ich wollte sagen, dass meine Daten in Subversion gespeichert wurden und Änderungen an meiner "Konfiguration" durch das Continuous Integration System und andere Bereitstellungsprozesse übernommen wurden.
Mr.Mindor

Antworten:


46

Ihr Chef sollte dieses Stück lesen: Bad Carma: Das "Vision" -Projekt, eine warnende Geschichte über den inneren Plattformeffekt oder den zweiten Systemeffekt.

Abstrakt

Diejenigen von uns, die in der Informationstechnologie (IT) arbeiten, waren alle an einem Projekt beteiligt, bei dem etwas Wichtiges einfach nicht stimmt. Wir wissen es, fast jeder weiß es, aber niemand ist in der Lage, überzeugend auf das Problem einzugehen.

Diese Geschichte handelt von einem solchen IT-Projekt, dem spektakulärsten Misserfolg, den ich je erlebt habe. Dies führte zur vollständigen Entlassung einer mittelständischen IT-Abteilung und schließlich zur Zerstörung eines wachsenden Unternehmens in einer wachsenden Branche. Das Unternehmen, das wir "Upstart" nennen, war ein erfolgreiches und profitables Abonnementfernsehunternehmen.

Das Projekt fand Anfang der neunziger Jahre statt und war eine maßgeschneiderte Anwendung für die Auftragserfassung und den Kundenservice, die dem, was heute als Customer Relationship Management oder CRM bezeichnet wird, sehr ähnlich ist. Die Kernfunktionalität des Systems umfasste:

  • Auftragserfassung und Inventar
  • Kundendienst, Helpdesk
  • Hauptbuch, Debitorenbuchhaltung, Fakturierung und Kreditorenbuchhaltung

Die Anwendung hieß "Vision" und der Name war sowohl das offizielle Versprechen für Upstart als auch eine selbstverherrlichende Anspielung auf seinen Architekten. Die Anwendung war insofern innovativ, als sie flexibel genug war, um künftigen Änderungen des Geschäfts Rechnung zu tragen. Nicht nur irgendwelche absehbaren zukünftigen Änderungen des Geschäfts, sondern absolut irgendwelche Änderungen des Geschäfts in irgendeiner Form. Es war eine bemerkenswerte Behauptung, aber Vision sollte die letzte Anwendung sein, die jemals erstellt wurde. Diese absolute Flexibilität wurde erreicht, indem es vollständig datengesteuert war , grenzenlose Abstraktion bot und objektorientierte Programmiertechniken verwendete, die zu dieser Zeit auf dem neuesten Stand waren.

Wie bei vielen derartigen Projekten, bei denen eine unternehmenskritische Anwendung erstellt werden sollte, erstreckte sich der Entwicklungsaufwand über zwei Jahre, also etwa ein Jahr länger als ursprünglich geplant. Dies war jedoch akzeptabel, da dies die Anwendung war, die für immer Bestand hatte, sich an zukünftige Anforderungen anpasste und einen unbegrenzten Return On Investment (ROI) bot. Als die Anwendung schließlich "live" ging, hatte fast jeder in der Firma so viel in sie investiert, dass das Schicksal der Firma buchstäblich von ihrem Erfolg abhing.

Im Falle einer vollständigen Projektstörung ist es jedoch für geschäftskritische Anwendungen, die das Kerngeschäft multinationaler Unternehmen abwickeln, nicht erlaubt, den Luxus des schnellen Flammenausbruchs zu genießen, den Tausende von "dot-com" -Unternehmen in Zeiten der Internetblase bewiesen haben. Innerhalb eines Monats, nachdem Vision "live" ging, war es für alle außer den am stärksten an seiner Konstruktion Beteiligten offensichtlich, dass es ein Misserfolg war.

Siehe auch

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


3
+1 innerer Plattformeffekt. Ich denke, dieser TDWTF fasst es gut zusammen: thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx

4
Es ist lustig, wenn die Leute nicht erkennen, dass die Kosten für das Schreiben eines kleinen Teils des Codes weitaus geringer sind als für das Erstellen einer gesamten Plattform.
brianfeucht

9
@brianfeucht: Die Idee der unendlich konfigurierbaren Plattform ist verführerisch.
Robert Harvey

1
Der innere Plattformeffekt erinnert mich an Google-Bibliotheken wie Guava, in denen der Code statt if-Anweisungen mit Tonnen von Predicate-Instanzen gefüllt ist. Das ist einfach schrecklich.
Luke1985

3
@ Robert Harvey und Spaß zu bauen. Nur solange ich die Endanwender nicht unterstützen muss;)
brianfeucht

17

Die Antwort lautet: Ja, es ist möglich, ein vollständig datengesteuertes System zu erstellen, und ja, es ist normalerweise eine wirklich schlechte Idee.

Ein vollständig datengesteuertes Programm ist ein Programm, bei dem die gesamte Logik und Konfiguration von Werten verarbeitet wird, die so gespeichert sind, dass sie in einem anderen Kontext als Daten betrachtet werden. In den 1980er Jahren wurden viele 4GL-Produkte hergestellt, mit denen Berichte, Formulare, Tabellen und Logik mithilfe von Datenelementen erstellt werden konnten, die in eine Vielzahl von Formularen eingegeben, in Tabellen gespeichert und über Berichte zugänglich waren. Früher habe ich solche Systeme als "Malen nach Zahlen" bezeichnet, aber ich sehe, dass sie jetzt als "inneres System" bezeichnet werden. Guter Name.

Leute, die diese Systeme erstellen, versuchen (ob sie es wissen oder nicht), eine neue Programmiersprache zu erstellen. Da sie nicht die Fähigkeiten haben, tun sie es schlecht. Aus Sicht der JVM / CLR besteht ein kompiliertes Java / C # -Programm lediglich aus Daten. In diesem Fall ist es gut gemacht worden. In beiden Fällen werden Programmierer benötigt, um die Sprache zu verwenden, unabhängig davon, um welche Sprache es sich handelt.

Es gibt einen bestimmten Weg, um diese Arbeit zu machen, den ich kenne. Sie erstellen das Grundgerüst für jede der Komponenten, die Sie benötigen: Formular, Bericht, Tabelle usw. Sie stellen einen Mechanismus zum Konfigurieren verschiedener Teile dieser Komponenten bereit, indem Sie Datenelemente festlegen. Für einen ausgewählten Satz von Funktionen treffen Sie die Entscheidungen und sperren sie in das System ein. Insbesondere verweigern Sie die Möglichkeit, diese Funktionen zu konfigurieren.

Sie implementieren auch eine Sprache, mit der logische Operationen codiert werden können. Meine Empfehlung ist, eine vorhandene Sprache wie lua oder vielleicht Python zu verwenden. Sie binden Teile dieses Codes überall dort ein, wo logische Operationen erforderlich sind.

Auf diese Weise reduzieren Sie den Schreibaufwand für die Implementierung der einzelnen Formulare, Berichte, Tabellen usw. erheblich. Das System scheint datengetrieben zu sein, aber nur bis zu einem gewissen Punkt.

Zu diesem Zeitpunkt haben Sie gerade eine neue 4GL implementiert. Wenn Sie dies erfolgreich machen, lassen Sie es mich bitte wissen. Die meisten Menschen scheitern miserabel. Ich werde Ihnen als Erster zu Ihrer Leistung gratulieren.


2
Nizza schreiben. SAP (das ERP-System) ist das klassische Beispiel für ein solches System. Sie programmieren nicht darin, sondern "konfigurieren" es. Was so verdammt komplex ist, um irgendetwas Wesentliches zu erledigen, dass es eine ganze Beratungsbranche um sich herum geschaffen hat.
Tonny

@Tonny: Danke. Ich habe keine Erfahrung aus erster Hand mit SAP, aber ich verstehe, dass SAP / R3 und ABAP dieser Beschreibung sehr nahe kommen und eine wichtige Quelle für Kriegsgeschichten sind: Was ist falsch und wie oft ist das Budget aufgeblasen? Trotzdem verdient die Firma jede Menge Geld.
david.pfx

Als jemand, der Erfahrung mit SAP aus erster Hand hat, möchte ich nur einen Kommentar
abgeben

6

Ich denke, dass Sie im Grunde richtig sind. Eine Sprachlaufzeit ist bereits ein vollständig flexibles datengesteuertes System. Es nimmt ein Datenelement (das Programm) und verwendet es, um zu bestimmen, wie es auf andere Daten reagieren soll. Es kann sogar ein Mehrbenutzerschema zum Speichern von Code für die Wiederverwendung durch andere Programme geben (von einem Include-Pfad bis zur ordnungsgemäßen Installationsverwaltung).

Eine "Skriptsprache" ist grob gesagt eine Sprachlaufzeit, in der diese Codeeingabe für Menschen lesbar ist. Ein Compiler platziert einen zusätzlichen Schritt zwischen dem Benutzer und der Laufzeit. "Scherz" -Sprachen wie Malbolge und APL müssen in keiner Form für Menschen lesbar sein. Auf einer Ebene ist es jedoch alles dasselbe, und für Menschen lesbar bedeutet dies nicht, dass alle potenziellen Benutzer über die Fähigkeiten verfügen, es zu lesen oder zu schreiben, oder dass von ihnen erwartet wird, dass sie es entwickeln.

Es gibt gute Gründe, warum Sie eine Sprachlaufzeit normalerweise nicht direkt Endbenutzern zur Verfügung stellen. Das Wichtigste ist, dass das Entfernen der Flexibilität den Komfort erhöht.

Wenn ich einen SO-Beitrag eingeben möchte, möchte ich ihn nur eingeben. Ich bin durchaus in der Lage, ein C ++ - Programm für die Ausgabe zu schreiben, aber ich würde keinen Webbrowser verwenden, der einen C ++ - Programmeditor anstelle eines normalen Textfelds verfügbar macht. Leute, die C ++ nicht kennen, würden den Browser nicht nur nicht benutzen, sondern auch nicht.

Wenn ich bestimmte Geschäftsparameter konfigurieren möchte, möchte ich dies nicht unbedingt mit einer Turing-vollständigen Spezifikationssprache tun, und selbst wenn ich dies getan habe, ist dies wahrscheinlich nicht von der "Hardcodierung" derselben Geschäftsparameter in irgendeiner anderen Programmierung zu unterscheiden Sprache. Sie müssen sich noch überlegen, ob das, was Sie schreiben, das bedeutet, was Sie möchten. Sie müssen noch testen, ob die Änderungen korrekt sind. Das heißt, Sie müssen noch Fähigkeiten für alle Aufgaben der Programmierung , die nicht trivial sind und nicht von jemandem erwartet , die nicht Programmierkenntnisse haben , die ein spezielles Untersystem vorbereitet ( „Anwendung“) für Sie zu konfigurieren ( „use“).

Wenn Sie sich also auf ein zu 100% datengesteuertes System einlassen möchten, das mit den richtigen Daten alles kann, müssen Sie sich zwei Fragen stellen:

  1. Sind wir im Geschäft, Programmiersprachen zu erfinden, oder sollten wir es sein?
  2. Wird unsere neue Programmiersprache (für unsere Zwecke) besser sein als die, die wir bereits haben, und werden wir sie nach Bedarf unterstützen und entwickeln?

Manchmal lautet die Antwort ja und Sie schreiben eine domänenspezifische Sprache. Oder sogar eine echte Allzweck-Programmiersprache, wenn Sie Sun / Microsoft / Stroustrup / van Rossum / viele andere sind. Manchmal sind die Antworten nein und Sie haben den "inneren Plattform" -Effekt - nach viel Mühe und Versuch und Irrtum haben Sie etwas. Wenn Sie Glück haben, ist es der Programmiersprache, in der Sie es geschrieben haben, nur wenig unterlegen und nicht einfacher zu bedienen.

Einige Sprachen sind schwieriger oder einfacher zu verwenden als andere, insbesondere wenn sie auf einen Zweck wie R spezialisiert sind, werden sie einige Benutzer viel einfacher finden. Was Sie wahrscheinlich nicht tun werden, ist die grundlegende Erleichterung der Programmierung allgemeiner Anwendungen. Zu jeder Zeit gibt es wahrscheinlich mehrere Personen / Organisationen auf der Welt, die das Potenzial dazu haben, aber Ihr Chef / Ihre Firma muss ehrlich überlegen, ob dies ihn / Sie einschließt oder nicht.

Es gibt einen Trick, der oft für Spiele verwendet wird, nämlich Lua-Bindungen für die Spiel-Engine freizulegen. Dies ermöglicht Entwicklern, in einer relativ einfachen Sprache zu programmieren, bei Bedarf jedoch einen "echten" Programmierer für die Leistung zu engagieren oder auf bestimmte Funktionen der Engine oder der Plattform zuzugreifen. Die resultierenden Lua-Skripte sind "Daten" für die Engine. Sie alle müssen nicht viel von dem beinhalten, was Sie als "Logik" bezeichnen, im Gegensatz zu Konfigurationsdaten, und oft definieren sie so ziemlich den gesamten Plot und die Umgebung, aber nicht das gesamte Gameplay. Dies ist nicht zu 100% datengetrieben und sicherlich nicht zu 100% fehlerfrei, aber es ist ein interessanter praktischer Kompromiss.


Gut gesagt. Das, was einem zu 100% datengetriebenen System am nächsten kommt, ist eine Programmiersprache. Und wir haben diese bereits, und jetzt ist es unsere Aufgabe, einem von ihnen die tatsächlichen Daten in Form von Textaussagen zur Verfügung zu stellen, damit er die tatsächlichen Funktionen liefert, die wir derzeit benötigen.
RBarryYoung

4

Ich habe in einer Firma gearbeitet, in der dies das Ziel war. SQL-Snippets wurden in Datenbanktabellen gespeichert, zur Laufzeit gelesen und ausgeführt. Die Leistung war schrecklich, wie Sie sich vorstellen können, und Fehler waren häufig. Es war auch unmöglich zu debuggen, ohne Stack-Traces oder irgendetwas anderes, was das Leben leichter macht.

"Datengesteuertes Programmieren" resultiert aus einem grundlegenden Unverständnis darüber, was wir als Programmierer tun. Alle Daten, die in der Lage sind , einen Algorithmus zu realisieren, sind eigentlich "Programmierung", auch wenn Sie es irgendwie geschafft haben, die beiden Ideen in der Benutzeroberfläche zu vermischen (zu entstellen?). Das bedeutet nicht, dass Sie die beiden Ideen nicht aus der anderen Richtung kombinieren können, sodass der gesamte Code aus Daten besteht. Das ist die Prämisse hinter lisp, die durch ihre Homoikonizität ermöglicht und von ihrem Makrosystem ausgenutzt wird. Ja, diese Konzepte klingen ähnlich, aber ihre Auswirkungen und Anwendungen sind in der Praxis sehr unterschiedlich.

Auch das mag redaktionell sein, aber die Orte, auf die ich gestoßen bin, die "vollständig datengetriebene" Programmierung wollen, schätzen ihre Programmierer wirklich nicht. Sie betrachten den Code als eine Kostenstelle, die ausgelagert oder ignoriert werden muss.


Ich habe mit einem System gearbeitet, das das Erstellen von Formularen, Berichten usw. mit einem domänenspezifischen Sprachsystem erheblich vereinfacht hat. Dies ermöglichte es einigen erfahrenen Benutzern, diese Dinge selbst zu lernen. Es bedeutete auch, dass ich Fehler an allen Standorten beheben konnte, indem ich eine Korrektur an einem Laufzeitmodul durchführte und mich nicht mit etwas herumschlagen musste, das speziell für verschiedene Kunden konfiguriert war. Ich stimme der Idee zu, dass die Programmierung einer Kostenstelle entweder der richtige Geschäftsgrund für das Auslagern von Codierung ist oder der beste Weg, um das Unternehmen zu zerstören.

4

Sie meinen, Ihr Chef möchte, dass Sie Folgendes schreiben:

[
  {
    "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"
          ]
        }
      ]
    }
  }
]

So generieren Sie dies:

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

Das erste ist JSON und das zweite ist JavaScript .

Klärung

Ich denke, theoretisch liegt es nicht daran, dass das, was die Daten interpretiert, vollständig werden muss, um die Anwendung zu beschreiben. Sie haben das Problem also nur um eine Stufe nach oben verschoben, um keinen Nettonutzen zu erzielen.

Ist eine solche 100% datengetriebene Anwendung möglich?

Hier habe ich gerade angefangen. Mit meiner Antwort versuche ich, dem ursprünglichen Beitrag zuzustimmen, dass: Es ist möglich, aber Sie haben Recht, es wird das Problem nur um eine Ebene höher verschieben, ohne dass dies [offensichtlich] von Vorteil ist .


Programmierer ist Tour konzeptionelle Fragen und Antworten werden erwartet, um Dinge zu erklären . Das Werfen von Code-Dumps anstelle von Erklärungen ist wie das Kopieren von Code von IDE auf Whiteboard: Es mag vertraut und manchmal sogar verständlich erscheinen, aber es fühlt sich seltsam an ... einfach seltsam. Whiteboard hat keinen Compiler
Mücke

@gnat Danke für den Kommentar; Ich habe meine Antwort aktualisiert, um sie klarer zu machen. Bitte lassen Sie mich wissen, wenn es immer noch nicht klar genug zu sein scheint.
Mahdi

0

Sie können überzeugend argumentieren, dass jede Webbrowser-Anwendung als 100% datengetrieben angesehen werden kann 1 .

Das macht es natürlich nicht einfacher oder einfacher, Anwendungen im Web zu erstellen, sondern macht sie sogar viel schwieriger.

Sagen Sie Ihrem Chef, dass er den Webbrowser neu erfindet und dass er irgendwann JavaScript neu erfinden muss, um etwas ziemlich Komplexes zu erstellen.

1 Nun, wenn Sie Plugins, JavaScript und HTML5 ignorieren .


-1

Ja. Soweit ich weiß, basiert ein System wie Mathematica , das eine so genannte leistungsfähige Programmiersprache ist, im Wesentlichen aber eine Shell, auf der ähnlichen Idee, die Ihr Chef erwartet hat. Wolfram Mathematica wird jetzt so komplex, dass viele Rechenaufgaben damit problemlos erledigt werden können.

Datengetrieben ist ein Konzept. Wenn wir Programmierer Daten auf einfache Weise manipulieren wollen, brauchen wir eine Shell, die es uns leicht macht, mit Daten zu spielen. Versuchen Sie zu verstehen, dass wir, sobald wir anfangen, über das Erlernen einer Programmiersprache auf der Grundlage der Syntax zu sprechen, tatsächlich die Anwendungsschnittstelle oder einfach ihre Shell lernen. Wenn wir die Shell verstehen, können wir die Programme steuern.

100% datengesteuert: Wenn der Compiler oder der Interpreter die Shell verstehen kann, wird die Berechnung gesteuert. Wenn die Daten dieselbe zugrunde liegende Struktur wie die Shell oder Schnittstelle haben, können die Daten auch vom Compiler oder Interpreter gesteuert werden. Ich denke, Mathematica ist eine gute Erklärung dafür, warum ich Ihnen mit einem Ja antworte.


1
Dieser Beitrag ist ziemlich schwer zu lesen (Textwand). Hätten Sie etwas dagegen bearbeiten sie in eine bessere Form ing?
Mücke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.