lunes, 30 de enero de 2012

ANOTACIÓN 2012 Serie 1 No 3: 4 de febrero, 2012


ANTECEDENTES HISTÓRICOS, primera parte: LOGDIAL:   

LOGDIAL – CNRC, OTTAWA, CANADÁ. 1982-1983
          En mi consciencia científica, la semilla paradigmática que engendró a VIPERS comienza en un laboratorio en el sótano del Consejo Nacional de Investigación del Canadá o “CNRC” en el verano del 1982, semanas antes de mi 19 cumpleaños. Bajo la tutela de mi padre yo llevaba casi un año trabajando en mi nueva profesión como programador-analista, Había programado varios diseños suyos, incluyendo un sistemas denominado “OBAL” (“Overton Basic Assembly Language”) que hacía simulacros de programas de ordenador escritos en una versión elemental del lenguaje elemental de computación conocido como un “assembly language” – un “lenguaje ensamblador”. Un “lenguaje ensamblador” (o “assembler”) es un lenguaje de programación de bajo nivel para los computadores, y OBAL era un programa que mostraba visualmente a los alumnos estudiando assembler cómo se ejecutan en la computadora los pasos de las instrucciones de sus programas escritas en ese lenguaje de programación básico a la vez que se ejecutaban las instrucciones del programa mismo. (En términos de computación lo que había programado con OBAL era un “interpretador” de programas, es decir, un programa que a su vez toma las instrucciones de otro y lo “interpreta”, va ejerciendo las instrucciones decodificando los mandos de las mismas. El interpretador más común es el sistema de programación llamado BASIC, universalmente conocido y en muchos casos muy, muy sofisticado y nada ‘básico’. Más sobre eso en adelante.)

          En el CNRC tuve un proyecto mucho más complicado del que jamás había tenido, un proyecto que no solamente lanzaría mi carrera como programador-analista y también como analista de sistemas, sino que cambiaria mi forma de pensar y de estar en el mundo. Comenzó como un proyecto de mi padre que él mismo llevaba concibiendo desde sus días como ingeniero de computación y sistemas en ITT, España un par de años antes. Se trataba de una metodología para hacer simulacros visuales de diseños de sistemas de información, de programas de computación en general, que comenzaba con una innovación ya en la representación diagramática.

          Los diagramas de la metodología de mi padre combinaban el flujo de la data, es decir, la transformación de la data (o ‘información’) a través del programa – junto con el flujo de la ejecución del programa mismo, o sea, del orden de la secuencia de los de las instrucciones. Tradicionalmente flujo de data y flujo de ejecución se representaban por separado y en representaciones diagramáticas diferentes y no integradas. De ahí que se tenía “Flow Charts” para representar el flujo de la lógica de las instrucciones por un lado, y “Data Flow Diagrams”, para captar las transformaciones de la data o información a través del sistema por su parte. El diseño completo de un sistema de información se podría lograr por primera vez en una sola representación que integraba tanto la información o data misma como las instrucciones que la transformaban.

          La segunda gran innovación, que surgía como resultado de la primera, era la idea de poder hacer un simulacro computarizado del diseño diagramático.  Es difícil explicar para alguien que no haya trabajado en el campo de la informática, sobre todo en sistemas con más de 50,000 líneas de código de programación – los denominados “proyectos grandes” –  la revolución metodológica y tecnológica que supondría esta innovación.  Pocos pueden comprender el estado horrendo del diseño, de la implementación, de la corroboración (comprobación), y del mantenimiento (ajustes a los sistemas de acuerdo a los cambios requeridos para el cliente o usuario) en el campo del software. Mientras que el desarrollo del software en general ha sido un éxito – eso es obvio, no precisa de mayor confirmación que la experiencia empírica, estamos rodeados de programas que funcionan o al menos nos sirven –  el costo de ese éxito es insólito. El estado de desarrollo de software – programas para los ordenadores o computadores – es tremendamente costoso debido a muchos, muchos factores. Gran parte del problema viene a ser en función de la dificultad de poder hacer buenas cotizaciones. Todo programador experimentado aprende que el tiempo verdadero de lo que tarda su proyecto es de DOS a TRES veces lo que originalmente cotizó.  Y aun así, muchos proyectos de centenares de millones de dólares USA acaban siendo eliminados por completo antes de poder llegar a su conclusión.  
          Más de dos décadas después de haber comenzado ese proyecto en el CNRC de Ottawa, Canadá,  la industria del software sigue estando repleta de casos representativos de fracasos multimillonarios. Creo que un artículo de una página web dedicado precisamente al estudio de problemas y fracasos de software lo capta perfectamente:

15 de mayo 2006
La larga, triste historia del fracaso de proyectos de software
Del artículo de la IEEE “Por qué el software falla”[1]:

El octubre pasado, por ejemplo, el gigante minorista de alimentos británico “J Sainsbury” tuvo que cancelar su inversión de $ 526.000.000  EE.UU. en un sistema automatizado de gestión de la cadena de suministro. La mercancía se estaba quedan atrapada en los depósitos y almacenes  de la compañía  y no llegaban a entregarse en  muchas de sus tiendas.  Sainsbury se vio obligado a contratar alrededor de 3.000 empleados adicionales para abastecer sus estanterías de forma manual.

Este es sólo la última de  una larga historia,  triste de proyectos  [de Software]  que salieron mal. La mayoría de los expertos en TI {Tecnología de la Información} están de acuerdo en que estos fallos se producen con mucha más frecuencia de lo que deberían. Es más, los fracasos son universalmente libres de prejuicios: se producen en todos los países, hasta en las grandes empresas y en las pequeñas, en las organizaciones comerciales, sin fines de lucro y las gubernamentales, y sin importar el estado o la reputación. Los costes empresariales y sociales de estos fracasos, en términos de dólares  de los contribuyentes y pérdidas de los accionistas, así como las inversiones que no se pueden hacer, son ya bien entrados los miles de millones de dólares al año.

El problema empeora a medida que se hace ubicuo. Este año, las organizaciones y los gobiernos se gastaron un estimado de $ 1 billón {un trillón americano} en hardware, software y servicios en todo el mundo. De los proyectos de TI que se inician de un 5 a un 15 por ciento será abandonado antes o poco después de la entrega como totalmente inadecuados. Muchos otros se entregarán  tarde y por encima del presupuesto o que requerirán una  remodelación masiva. Pocos proyectos de TI, en otras palabras, son verdaderamente exitosos.[2]

          Cualquier innovación que permita un desarrollo más detallado del diseño y una confirmación de su validez –  en términos tanto de cumplimiento de los requisitos del usuario – y de su eficacia –  y de si funciona o no, supondría una revolución en el campo. 

          Y así mismo comenzaron los problemas en nuestro propio proyecto: el diseño original de mi padre, una vez codificado en el lenguaje de programación NATAL II – creado en ese mismo laboratorio – no funcionó. Después de revisarme a mismo media docena de veces para asegurarme de que no había sido error mío, mi padre y yo ambos dimos un repaso al código de programación para ver si el error era mío en la programación o suyo en el diseño: efectivamente era un error de diseño. En retrospectiva era de prever puesto que el diseño mismo del programa estaba en la metodología de “Logic Data Diagrams” que por su parte no se había desarrollado lo suficiente para ser aplicado en un proyecto de esa complejidad. Es decir, la metodología de diseño diagramático no estaba a un nivel de usarse para diseñarse a sí misma. No se logró dar en por qué el diseño no funcionaba, así que dando muestras de quizás una capacidad o adquirida o innata o ambas para el análisis y desarrollo de sistemas, le dije a mi padre, “explícame en palabras lo que quieres que haga el programa, y yo lo programaré” – dicho y hecho. A partir de entonces se convirtió en mi proyecto heredado.

          El “tropiezo” inicial con el diseño fue una señal muy importante de las muchas innovaciones imprescindibles que se precisarían para que el proyecto tuviera éxito a largo plazo. Empecé a descubrir problemas con la metodología misma, o al menos con uno de los principios fundamentales: la idea de que un diseño efectivo pudiera hacerse a un nivel abstracto sin entrar en detalles. Ante lo errada de esa premisa hice un cambio fundamental en el concepto metodológico, decidiendo que en realidad lo que se precisaba no era una herramienta para hacer una SIMULACIÓN de diseños a un nivel abstracto para luego entregarle al programador y que codificara – tradujera en código de lenguaje de computación a mano – sino un lenguaje para una EJECUCIÓN  del diseño y después hacer la traducción automática al lenguaje, convirtiendo de esa forma el diseño en el programa –  es decir, el mapa se convierte en el terreno. Así fue como se pasó de la idea de un simulador para un diseño diagramático a alto nivel se pasó a lo que denominé “LOGDIAL” de LOGic-data DIAgram Language”. LOGDIAL no era simplemente un lenguaje de programación diagramático, sino un ambiente que regulaba la formación del diseño de acuerdo a reglas y principios para evitar ciertos errores típicos de programación que después se convierten en pesadillas a la hora de la verificación del sistema.

          Durante casi dos años continuó el desarrollo de sucesivas versiones de LOGDIAL dando demostraciones a altos funcionarios de empresas locales de software en la región de Ottawa, o lo que se llama el “valle del silicón del Canadá” por la concentración de empresas de computación similar al “valle del silicón” del norte de California.  La meta era lograr una versión de LOGDIAL capaz de poder representar un diseño tan elaborado de cualquier programa que luego se traduciría, automáticamente, en los lenguajes de programación de la época, y conseguir un inversionista que patrocinara el esfuerzo.  Cada presentación en el laboratorio a ejecutivos y expertos generaba una serie de comentarios y crítica que yo luego integraba para mejorar el producto y demostrar las mejorías en la siguiente versión.  

          El acceso a las instalaciones del CNRC en Ottawa no era para un tiempo indefinido y se logró lo que se prometió a cambio de su uso: un prototipo funcional que demostrara el poder del lenguaje de programación NATAL II, creación de ese laboratorio a gran costo del gobierno canadiense pero que nunca logró despegar en el mercado. Pero nuestras expectativas de lograr un inversionista que aportara el capital necesario para un desarrollo completo y comercial del producto nunca se lograrían.

          ¿Por qué? Por dos motivos. Una fue que, mi habilidad ‘natural’ para la programación aparte, me faltaba mucho conocimiento técnico necesario para crear una versión comercial, conocimiento relacionado, por ejemplo, a la implementación de programas como sistemas operativos y compiladores, conocimiento que no lograría obtener hasta pocos años más tarde en Queen’s University donde, aunque me licenciara en Estudios Ibero-Latinoamericanos, obtendría una concentración en ciencias de la informática (precisamente en pos del conocimiento necesario para desarrollar lo que para aquel entonces sería APEX). Por otra parte, la extrema novedad del producto y la naturaleza conservadora del canadiense (cuyo símbolo nacional es el castor) siempre ocasionaba la misma respuesta: “cuando tenga una versión comercial avísennos”. 

LOGDIAL – CADMICS AUTOMATION/MONTREAL, 1983 – 85
          Mi carrera de programador/analista me llevaría a un contrato con la gigante corporativa “Hydro-Quebec”, una de las empresas hidroeléctricas más grandes del planeta.  Como resultado del proyecto me trasladé a vivir en Montreal, donde residí durante un total de dos años aproximadamente. Terminado el proyecto con Hydro Quebec, CADMICS Automation, la empresa de mi padre y mía, consiguió algo de capital bajo un incentivo gubernamental de deducción de impuestos por inversión en proyectos de pequeña industria. Se implemento una nueva serie de prototipos en un sistema de Hewlett Packard usando su lenguaje de programación BASIC. Hubo avances en el prototipo, pero nunca se llegaría a la creación de una versión comercial antes de que los fondos se evaporaran.

          Pero hubo algo que me llevaba royendo desde una exhibición  que hice en un congreso de software en Ottawa, un comentario que me hizo un miembro del público del extranjero – alemán o suizo quizás – cuando describí las funciones que queríamos implementar en LOGDIAL para hacerlo compatible con los lenguajes de programación actuales: “¿Para qué limitarse a eso? ¿Ya que es algo nuevo, por qué no hacer algo completamente radical y totalmente nuevo?” Precisamente para ese tipo de retroalimentación era bueno exponerse a la crítica – práctica que continuo hasta la fecha con compartiendo mis libros en progreso con mis lectores, convirtiendo la autoría en un proceso dinámico. Mi respuesta en el momento fue algo así, “para encajar mejor con la tecnología actual,” pero su punto era valido – bien valido. ¿Por qué no? Una, porque no se nos había ocurrido, pero con la sugerencia ya sería más que suficiente. Dos, para ello habría que cambiar la idea de raíz, incluso modificando la estructura y el concepto de los diagramas mismos: ya no sería LOGDIAL. Y esa idea dio lugar a APEX – “Automated Programming EXpert system.”

Se continuará.

4 comentarios:

  1. Is a paradigm shift needed? Programming moved from functional to object oriented programming; is this a more natural programming paradigm? One more in tune with how humans think and behave; more aligned with how the brain works?

    ResponderEliminar
    Respuestas
    1. Not only is it more aligned with how the brain works it is much more aligned with how reality IS. Programs are typically sequential, fixed in structure, while reality is parallel processing, with structures and relationships that are ever-changing. We will be able to model that change with VIPERS.

      Eliminar
  2. Preliminary comments - from the link in Coding Horror (http://www.codinghorror.com/blog/2006/05/the-long-dismal-history-of-software-project-failure.html) which discusses software failures:

    "The 10th edition of the annual CHAOS report from The Standish Group, which researches the reasons for IT project failure in the United States, indicates that project success rates have increased to 34 percent of all projects. That's more than a 100-percent improvement from the success rate found in the first study in 1994.

    Asked for the chief reasons project success rates have improved, Standish Chairman Jim Johnson says, "The primary reason is the projects have gotten a lot smaller. Doing projects with iterative processing as opposed to the waterfall method, which called for all project requirements to be defined up front, is a major step forward.""

    Software development methodologies have really matured; "agile programming" - a paradigm that embraces change - has come to the forefront as the logical successor to the (now very dated) waterfall method in which requirements analysis was completed up front and set in stone, versus being more agile and re-shaping the requirements and design as more becomes known about the system and its limitations/capabilities during actual development.

    And so VIPERS seems very relevant if it can evolve the design with the (ever-changing) system.

    How does VIPERS fit in with or relate to common system design techniques, like ERD (Entity Relationship Diagram) or UML (Unified Modeling Language) ? What would the workflow or user experience be? Something like:

    a. I perform requirements analysis and systems analysis, and input them into VIPERS in some way
    b. I design the system - creating a system diagram, mapping out the system components/entities and their relationships
    c. VIPERS outputs:
    i. Stub/starter code, as a skeleton/framework upon which to program
    ii. A simulation of the running system

    ResponderEliminar
    Respuestas
    1. Well, as was the ideal in the original LOGDIAL, the "code" will be the design... no coding phase exist, the system remains in the design diagram networks.

      Eliminar