¿Puede un sistema ser 100% impulsado por datos?

44

Mi nuevo jefe ha estado trabajando en este proyecto durante muchos años. Solo he estado aquí unas pocas semanas, pero no estoy seguro de que sea posible. Le gustaría diseñar un sistema que sea "100% manejado por datos".

Entonces, si ponemos suficientes datos, podemos definir y generar cualquier aplicación. He logrado al menos lograr que él conceda algunas cosas, como usuarios, o las aplicaciones deberían tener valores predefinidos, pero le gusta el concepto de la estructura del sistema, la interfaz del usuario y la lógica, todo almacenado como datos.

Hay algunas demostraciones de cosas simples y, básicamente, ha redescubierto algunas ideas simples de programación orientada a objetos y sus sistemas de plantillas básicos, pero en general creo que este objetivo puede ser realmente imposible.

No sé cómo puede definir la lógica utilizando datos sin que el sistema se vuelva tan complejo que de todos modos está haciendo la programación real.

Creo que, en teoría, no lo es porque la cosa que interpreta los datos termina necesitando ser completada por completo para describir la aplicación, por lo que acaba de cambiar el problema un nivel más alto a ningún beneficio neto.

¿Es posible una aplicación basada en datos al 100%?

    
pregunta Great Turtle 07.03.2014 - 20:14

7 respuestas

46

Su jefe debe leer este artículo: Bad Carma: El proyecto "Visión", una advertencia cuento sobre el efecto de la plataforma interna o el segundo efecto del sistema.

Resumen

  

Todos los que trabajamos en tecnología de la información (TI) hemos estado en un proyecto donde algo importante simplemente no está bien. Lo sabemos, casi todos lo saben, pero nadie es capaz de señalar el problema de manera convincente.

     

Esta historia trata sobre un proyecto de TI de este tipo, el fracaso más espectacular I   he experimentado alguna vez Resultó en el despido completo de un   departamento de TI de tamaño mediano, y eventualmente llevó a la destrucción de un   Empresa en crecimiento en una industria en crecimiento. La compañía, que llamaremos "Upstart", fue una exitosa y rentable empresa de televisión por suscripción.

     

El proyecto se produjo a principios de la década de 1990 y fue un proyecto personalizado.   Aplicación de entrada de pedidos y servicio al cliente, que se parece mucho a lo que   ahora se conoce como Customer-Relationship Management o CRM. los   La funcionalidad principal del sistema incluía:

     
  • Entrada de orden e inventario
  •   
  • Servicio al cliente, mesa de ayuda
  •   
  • Libro mayor, cuentas por cobrar, facturación y cuentas por pagar
  •   

La aplicación era   Se llama "Visión" y el nombre era la promesa oficialmente declarada.   para Upstart, así como un auto-engrandecimiento de la cabeza a su arquitecto. los   La aplicación fue innovadora, ya que fue construida para ser lo suficientemente flexible   para acomodar cualquier cambio futuro en el negocio. No cualquier   Futuros cambios previsibles en el negocio, pero absolutamente cualquier cambio.   A la empresa, en cualquier forma. Fue una afirmación bastante notable, pero   La visión fue pensada para ser la última aplicación jamás construida. Se logró   esta flexibilidad absoluta al estar completamente basada en datos, proporciona   Abstracción ilimitada, y usando programación orientada a objetos.   Técnicas que fueron vanguardistas en su momento.

     

Al igual que muchos proyectos de este tipo que se proponen crear una misión crítica   aplicación, el esfuerzo de desarrollo abarcó dos años, alrededor de un año   Más largo de lo proyectado originalmente. Pero eso fue aceptable, porque   Esta fue la aplicación que duraría para siempre, adaptándose a cualquier   requisitos futuros, proporcionando un retorno de la inversión (ROI) ilimitado.   Cuando la aplicación finalmente fue "en vivo", casi todos en el   empresa había invertido tanto en ella que, literalmente, el destino de la   La empresa dependía de su éxito.

     

Sin embargo, en caso de mal funcionamiento total del proyecto, misión crítica   Aplicaciones que ejecutan el negocio principal de las corporaciones multinacionales.   No se permite el lujo del tipo de flama rápida demostrado.   por miles de compañías "punto-com" en la era de la burbuja de Internet. Dentro de un mes de Vision "en vivo", fue evidente para   todos, excepto los más fuertemente investidos en su construcción, que era una   fracaso.

Ver también

enlace

    
respondido por el Robert Harvey 07.03.2014 - 20:22
17

La respuesta es sí, es posible crear un sistema totalmente basado en datos y sí, generalmente es una muy mala idea.

Un programa totalmente controlado por datos es aquel en el que toda la lógica y la configuración se manejan mediante valores almacenados de tal manera que en otro contexto se considerarían datos. Hubo muchos productos 4GL producidos en la década de 1980 que brindaron la capacidad de generar informes, formularios, tablas y lógica utilizando elementos de datos ingresados en una multiplicidad de formularios, almacenados en tablas y accesibles a través de informes. Solía referirme a sistemas como "pintar por números", pero veo que ahora se conoce como el "sistema interno". Buen nombre.

Las personas que crean estos sistemas están tratando (ya sea que lo sepan o no) de crear un nuevo lenguaje de programación. Como no tienen las habilidades, lo hacen mal. Desde el punto de vista de la JVM / CLR, un programa compilado de Java / C # es simplemente datos. En este caso se ha hecho bien. En cualquier caso, se necesita que los programadores utilicen el lenguaje, sea cual sea.

Hay una manera específica de hacer que esto funcione, que yo sepa. Usted construye el esqueleto de cada uno de los componentes que necesita: formulario, informe, tabla, etc. Proporciona un mecanismo para configurar varias partes de estos componentes mediante el establecimiento de elementos de datos. Para un conjunto de características elegido, usted toma las decisiones y las congela en el sistema, y niega específicamente la posibilidad de configurar esas características.

También implementas un lenguaje que tiene la capacidad de codificar operaciones lógicas. Mi recomendación es usar un idioma existente como lua o tal vez Python. Usted incrusta partes de este código dondequiera que se necesiten operaciones lógicas.

Al hacer esto, reduce sustancialmente la cantidad de escritura necesaria para implementar cada formulario, informe, tabla, etc. El sistema parece estar basado en datos, pero solo hasta cierto punto.

En este punto, acaba de implementar un nuevo 4GL. Si es así, hazlo con éxito, por favor házmelo saber. La mayoría de las personas fracasan tristemente. Seré el primero en felicitarlo por su logro.

    
respondido por el david.pfx 08.03.2014 - 11:06
6

Creo que eres básicamente correcto. Un tiempo de ejecución de idioma es ya un sistema totalmente flexible basado en datos. Toma un dato (el programa) y lo utiliza para determinar cómo debe actuar sobre otros datos. Incluso podría tener un esquema multiusuario para almacenar el código para que otros programas lo reutilicen (desde una ruta de inclusión hasta una gestión de instalación adecuada).

Un "lenguaje de scripting", en términos generales, es un tiempo de ejecución de idioma en el que esta entrada de código es legible para el usuario. Un compilador coloca un paso adicional entre el usuario y el tiempo de ejecución. Los idiomas de "broma" como Malbolge y APL no tienen que ser legibles por humanos en ninguna forma. Pero todo es lo mismo en un nivel, y de todos modos, legible para los humanos no significa que todos los usuarios potenciales tengan las habilidades para leerlo o escribirlo, o se puede esperar que lo desarrollen.

Hay buenas razones por las que normalmente no se expone un tiempo de ejecución de idioma directamente a los usuarios finales. La principal es que eliminar la flexibilidad aumenta la comodidad.

Si quiero escribir una publicación SO, solo quiero escribirla. Soy perfectamente capaz de escribir un programa en C ++ para generar, pero no usaría un navegador web que expusiera un editor de programas en C ++ en lugar de un cuadro de texto normal. Las personas que no conocen C ++ no solo no usarían el navegador, sino que no podrían.

Si quiero configurar ciertos parámetros de negocios, entonces no necesariamente quiero hacerlo utilizando un lenguaje de especificación de Turing-complete, y incluso si lo hice , probablemente no se pueda distinguir de "hard- Codificación "esos mismos parámetros de negocio en cualquier otro lenguaje de programación. Aún debe considerar si lo que está escribiendo significa lo que quiere que signifique. Aún necesita probar que los cambios son correctos. Es decir, aún necesita habilidades de programación para cualquier tarea que no sea trivial y no anticipada por alguien que tiene tiene habilidades de programación que prepararon un subsistema especializado ("aplicación") para que lo configure ( "usar").

Entonces, si estás a punto de embarcarte en un sistema basado en datos al 100%, que puede hacer cualquier cosa con los datos correctos, tienes dos preguntas que hacerte:

  1. ¿Estamos en el negocio de inventar lenguajes de programación o deberíamos estarlo?
  2. ¿Nuestro nuevo lenguaje de programación será mejor (para nuestros propósitos) que los que ya tenemos y lo apoyaremos y desarrollaremos según sea necesario?

A veces las respuestas son sí, y usted escribe un lenguaje específico de dominio de algún tipo. O incluso un lenguaje de programación de propósito general si es Sun / Microsoft / Stroustrup / van Rossum / muchos otros. A veces las respuestas son no y tienes el efecto de "plataforma interna": después de mucho esfuerzo, prueba y error, terminas con algo. Si tiene suerte, es solo un poco inferior al lenguaje de programación en el que lo escribió, y no es más fácil de usar.

Algunos idiomas son más difíciles o más fáciles de usar que otros, en particular si están especializados para un propósito como R, entonces algunos usuarios los encontrarán mucho más fáciles. Lo que probablemente no harás, es hacer que la programación general de las aplicaciones sea más sencilla. En cualquier momento, es probable que haya varias personas / organizaciones en el mundo con el potencial para hacerlo, pero su jefe / empresa debe considerar honestamente si eso lo incluye a usted o no.

Hay un truco que se usa a menudo para los juegos, que es exponer los enlaces de Lua al motor del juego. Esto permite a los diseñadores programar en un lenguaje relativamente fácil, pero aún así contratar a un programador "real" donde sea necesario para el rendimiento o para acceder a una funcionalidad particular del motor o la plataforma. Los scripts de Lua resultantes son "datos" en lo que respecta al motor. No es necesario que todos incluyan gran parte de lo que se denomina "lógica" en lugar de datos de configuración, y con frecuencia definen prácticamente toda la trama y el entorno, pero no todo el juego. Esto no es 100% controlado por datos y ciertamente no es 100% libre de errores, pero es un compromiso práctico interesante.

    
respondido por el Steve Jessop 08.03.2014 - 11:50
4

Trabajé en una empresa donde este era el objetivo. Los fragmentos de SQL se almacenaron en tablas de bases de datos, se leyeron en tiempo de ejecución y se ejecutaron. El rendimiento fue terrible, como se puede imaginar, y los errores fueron frecuentes. También fue imposible depurar, sin rastros de pila o cualquier otra cosa que haga la vida más fácil.

"Programación basada en datos" se debe a una falta de comprensión fundamental de lo que estamos haciendo, como programadores; cualquier dato que sea capaz de hacer que un algoritmo suceda es en realidad "programación", incluso si de alguna manera ha logrado mezclar (¿destrozar?) las dos ideas en la interfaz del usuario. Ahora, esto no significa que no pueda combinar las dos ideas de la otra dirección, de modo que todo el código sea información; Esa es la premisa detrás de lisp, que está habilitada por su homoiconicidad y explotada por su sistema macro. Sí, estos conceptos parecen similares, pero sus implicaciones y aplicaciones son muy diferentes en la práctica.

También, esto puede ser editorialización, pero los lugares que he encontrado que quieren una programación "completamente basada en datos" realmente no valoran a sus programadores. Piensan que el código es un centro de costos, algo que se subcontrata o se ignora.

    
respondido por el syrion 08.03.2014 - 15:03
4

Quieres decir que tu jefe quiere que escribas esto:

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

Para generar esto:

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

El primero es JSON y el segundo es JavaScript .

Clearificación

  

Creo que, en teoría, no lo es porque la cosa que interpreta los datos termina necesitando ser completada por completo para describir la aplicación, por lo que acaba de cambiar el problema un nivel más alto a ningún beneficio neto.

     

¿Es posible una aplicación basada en datos al 100%?

Aquí es donde acabo de empezar. Con mi respuesta, estoy tratando de estar de acuerdo con la publicación original en que: Es posible, pero tienes razón, simplemente cambiará el problema un nivel más alto para que no haya beneficios [obvios] .

    
respondido por el Mahdi 14.03.2014 - 11:02
0

Podría argumentar convincentemente, creo, que cualquier aplicación de navegador web podría considerarse 100% controlada por datos 1 .

Por supuesto, eso no simplifica ni facilita la creación de aplicaciones en la web, de hecho, las hace mucho más difíciles.

Dígale a su jefe que está reinventando el navegador web, y que eventualmente tendrá que reinventar JavaScript para construir cualquier cosa que sea razonablemente compleja.

1 Bueno, si ignoras los complementos, JavaScript y HTML5 .

    
respondido por el Fred the Magic Wonder Dog 08.03.2014 - 02:25
-1

Sí. Que yo sepa, un sistema como Mathematica , que es el llamado lenguaje de programación poderoso pero esencialmente es un shell, se basa en la idea similar que su jefe esperaba. Wolfram Mathematica se está volviendo lo suficientemente complejo como para que muchas tareas de cómputo se puedan realizar fácilmente.

Los datos controlados son un concepto. Si los programadores vamos a manipular los datos de una manera sencilla, necesitamos un shell que sea fácil de jugar con los datos. Trate de comprender que una vez que comencemos a hablar sobre el aprendizaje de un lenguaje de programación basado en la sintaxis, en realidad estamos aprendiendo la interfaz de la aplicación o simplemente su shell. Si entendemos el shell, podemos conducir los programas.

En cuanto al 100% de datos controlados, si el compilador o el intérprete pueden entender el shell, los cálculos se controlan. Si los datos tienen la misma estructura subyacente que el shell o la interfaz que tiene, los datos también pueden ser controlados por el compilador o el intérprete. Creo que Mathematica es una buena explicación de por qué te respondo con un sí.

    
respondido por el Life 08.03.2014 - 05:11

Lea otras preguntas en las etiquetas