Software que se escribe a sí mismo

Hands, by M. C. Escher - (c) Cordon Art-Baarn-HollandLeo en Business 2.0 este artículo, «Microsoft co-founder’s next great adventure«, sobre la última creación de Charles Simonyi, el húngaro que tras trabajar con genios como Alan Kay, Butler Lampson y Bob Metcalfe en Xerox PARC, fue contratado por Microsoft y se convirtió en el artífice de productos como Word y Excel.

La idea de Simonyi, creador ahora de la compañía Intentional Software, se recoge en Domain Workbench (pdf de su presentación en OOPSLA 2006), una herramienta capaz de alimentarse de instrucciones de texto, hojas de cálculo o diagramas de flujo y devolver líneas de código perfectamente bien generadas, estructuradas y documentadas que desarrollan las tareas solicitadas. La intención es provocar una revolución parecida a la que produjeron en su momento aplicaciones como Blogger o TypePad cuando permitieron que cualquiera publicase información en la web sin necesidad de saber nada de programación o de HTML, posibilitando que, por ejemplo, un directivo sin conocimientos técnicos pueda participar directamente en el desarrollo de un programa simplemente a partir de reglas de negocio expresadas en diagramas sencillos.

La idea viene a incidir en intentos anteriores de compañías como IBM, que no fueron demasiado bien recibidas por los programadores. Además, Simonyi sigue el camino del software propietario: pretende proteger todas sus creaciones mediante patentes y código compilado, imposibilitando la creación de comunidades de desarrollo y yendo precisamente en contra de un mercado en el que los clientes son cada día más renuentes a aceptar la idea de cajas negras. En cualquier caso, y considerando su reputación, parece una idea digna de ser tenida en cuenta. Hace no muchos años, para hacer lo que estoy haciendo ahora era preciso controlar complicadas herramientas y tirar líneas de código llenas de comandos intimidatorios para cualquier profano… ¿programaremos aplicaciones en el futuro con la misma facilidad que hoy escribimos en un blog?

33 comentarios

  • #001
    Sebastián - 28 agosto 2007 - 17:15

    Supongo que esto facilitaría muchísimo las cosas a la hora de crear aplicaciones, de echo ya hay programas que a partir de un diagrama UML generan el correspondiente código fuente, pero… ¿que gracia tendría? Desde mi punto de vista, prefiero continuar teniendo control de cómo se estructura el código.

    Saludos!

  • #002
    Tolmos - 28 agosto 2007 - 17:16

    Bueno, buena reflexión
    no yo hablaría tanto de futuro, ya «existe el lenguaje natural» …

  • #003
    kiki - 28 agosto 2007 - 17:34

    Lo del UML, partir de los requisitos, modelarlo y darle a la manivela y que te salga un programa sin programar parece fenomenal.
    Esto ya está inventado se llaman programas comerciales, como SAP y demás, los parametrizan gente con corbata que se llaman consultores de acuerdo a los requisitos del cliente y ya está.
    El desarrollo a medida es como la arquitectura, se pueden hacer chabolos o una catedral, depende de la pasta y las necesidades que haya.

  • #004
    jincho - 28 agosto 2007 - 17:36

    A veces, mirar lo bueno de fuera, nos hace olvidar las excelencias de aquí: http://www.integranova.com/infos/olivanova.htm

    En realidad, esto de la programación automática, en todas sus variantes, es algo que ya tiene tiempo….

    En la Universidad Politécnica de Valencia, en su ( nuestra, je, je!!), Facultad de Informática ( Dode creo que estuviste hace unos meses, Enrique), el catedrático Oscar Pastor y su grupo de investigación, hace tiempo que desarrollan productos de «software que crea software», han creado una spin-off, dentro del grupo Olivanova, han patentado sus productos en USA, y contrariamente a lo que kiki decía unos post más abajo, no hace falta dedicarse a poner azulejos, ó poner bombillas, en realidad, dichos desarrollos desplazan parte(sólo una parte) de la, a veces aburrida y pesada tarea de escribir-escupir lineas de código, a la más gratificante tarea de análisis, y en definitiva, es algo que no quita trabajo…

    Saludos.

  • #005
    Jose A. Suarez - 28 agosto 2007 - 17:58

    La idea de crear un software que escriba software a partir de unos parámetros es genial y un gran reto tecnológico. Máxime si se convierte en una herramienta para aumentar el rendimiento de los programadores en tareas aburridas y repetirivas.

    Pero de ahí a convertirse en una herramienta para directivos va un abismo. Hasta ahora todos los directivos de empresa que conozco no quieren cocerse nada ellos mismos, prefieren que les den las cosas hechas, los cálculos resueltos y los informes y diagramas en papel o metidos en pdf’s o presentaciones para sólo retocarlas.

    Recuerdo que hace tiempo el inventor del SQL pensaba que los directivos de empresas teclearían consultas en sus terminales para obtener datos y ningún directivo lo usó, aunque se convirtió en el referente para los lenguajes de bases de datos.

  • #006
    ismael - 28 agosto 2007 - 18:19

    Scratch ya hace verdaderas perrerías y está pensado para niños sin ningún tipo de conocimiento informático… ¿por qué no lo mismo para «directivos sin conocimientos técnicos»? ;)

    Flash y otros sistemas de programación con interfaces más que amigables (o cualquier sistema que acepte «macros») van por el mismo derrotero.

    Cuestión de tiempo.

  • #007
    pmarin - 28 agosto 2007 - 18:36

    una herramienta capaz de alimentarse de instrucciones de texto, hojas de cálculo o diagramas de flujo y devolver líneas de código perfectamente bien generadas, estructuradas y documentadas que desarrollan las tareas solicitadas.

    Anda que descubrir el software RAD a estas alturas… ;)

  • #008
    Artemio - 28 agosto 2007 - 19:31

    Me da la impresión que estamos hablando del lenguaje de programación de alto nivel, de verdad, en donde programar aplicaciones solo dependerás de conocimientos relacionados con el objeto de la aplicación porque instrucciones se aproximarán al lenguaje natural.
    Confio que pronto estará a disposición de todos y su desarrollo no me parece una idea descabellada, porque no hace tanto que nos impresionaban los correctores ortográficos y gramaticales, los traductores de idiomas, la confección de páginas web sin conocer html o flash, etc.

    Economía Excel

  • #009
    Ajo y agua - 28 agosto 2007 - 20:13

    No entendí mucho qué es lo que hará este nuevo fantabuloso soft. Pero otro Soft que se dedica a autoescribirse es GeneXus … y lo hace desde 1985 :)

  • #010
    Gorki - 28 agosto 2007 - 20:23

    Hace ya mas de 20 años gente que trabajaba para mí escribia programas en Cobol generado a partir de pseudocódigo que era muy descriptivo.y facil de inplementar.

    Los programas funcionaban según lo previsto, pero tenían dos problemas.

    Eran grandísimos pues producian unos programas llenos por todos los lados de módulos que no participaban directamente en ese programa y por donde nunca podía pasar la máquina en ese caso concreto, pero si en otro caso

    Y eran absolutamente imposibles corregirlos o cambiarlos o modificarlos, pues la eleccion de variables y otras cosas era automatica y no descriptiva,por lo que seguir su proceso de trabajo era penosísimo,cuando el nombre del cliente se ocultaba bajo una variable de nombre var107 y lo que había pagado en una valriable de nombre var118 y una fecha en var247

    Con ello se cargaban lo mejor del Cobol, que es ser un programa que cualquiera puede escribir y cualquier otro puede arreglar y modificar, o sea un lenguaje hecho para trabajar en equipo…

  • #011
    Pasaba por aqui - 28 agosto 2007 - 20:31

    Por un lado, lo que dice más de uno por aquí: los generadores automáticos de código tienen más años que la tata. Como no nos cuenten qué tiene de especial este, ni hay noticia ni hay ná.

    Y como bien dice Gorki: fantástico, todo se hace solo. Después «solo» hay que mantenerlo. Suerte!!

    Por otro lado, aquí no hay «software que se escribe a sí mismo», hay software que genera software, que no tiene nada que ver.

    El #9 riza el rizo equivocándose en ambas cosas. GeneXus no genera código a partir de especificaciones. GeneXus tiene un lenguaje propio que luego puedes traducir a Cobol, Java, VB, etc., pero lo programas igual que en cualquier lenguaje. Y por supuesto no «se escribe a sí mismo».

    Además, lo de «intentos anteriores de compañías como IBM, que no fueron demasiado bien recibidas por los programadores.» tendrás que explicarlo, porque Rational Rose tiene bastante éxito.

    La verdad es que no hay por donde coger nada. Se nota que no programas mucho, no.

  • #012
    Jorge - 28 agosto 2007 - 20:31

    La idea no es nueva.
    Si viene de Microsoft, vamos mal.
    Históricamente los productos Microsoft crean código vía asistente, o bien creando código en segundo plano. En lo personal los asistentes en Office para macros son más un estorbo que útiles, mejor tipear código directo (a menos que quieras salir del paso, pero eso no es código bueno). Y respecto de crear código en segundo plano, cito FrontPage. Los desarrolladores web saben muy bien el código basura que genera.

    Que MS garantice que el código que se haga esté bien depurado, que no tenga insertados comandos o dependencias de librerías propietarias que hagan que el código solo funcione con soft MS, que plantee una interface que sea útil, y ahí empezamos a hablar en serio. De no ser así, teóricamente muy lindo y en la práctica, basura.

    Ya que estamos ¿por qué MS no es capaz de crear algo como el Automator de Mac? No puede hacer algo como eso en Windows, que hablando mal y pronto es el viejo .BAT en modo gráfico (aunque entrando en características del Sistema, como entiendo que Automator sí hace), no le pidas algo más avanzado como citas aquí. No digo que no lo harán, pero conociéndolos ya me imagino los resultados :-)
    Un abrazo

  • #013
    Salvador Manuel - 28 agosto 2007 - 23:04

    Entiendo que lo que nos presenta Enrique es, comparando con la construcción, una herramienta para generar planos a partir de diversos tipos de documentos (con contenido diverso) para que de forma automática se genere el código fuente.

    También apunta que estará documentado (automáticamente), lo que significará que su mantenimiento no debería de ser muy complicado, pues siempre generará el código con la misma organización (patrones y estructuras prefijadas).

    A mí me parece muy interesante. Así llevaría a la profesión a niveles de verdadera ingeniería. Pero llegar al punto de que cualquiera pueda construir software… eso se me escapa. ¿Alguien tendrá que ser el responsable? ¿O le echamos la culpa a la herramienta que lo genera?

    Saludos

  • #014
    Antoni - 28 agosto 2007 - 23:07

    A riesgo de ser provocativo pero sin ánimo de ofender a nadie, después de leer los comentarios anteriores me pregunto si alguién se ha tomado la molestia de dar una ojeada a la presentación que Enrique menciona (y de la que pone un link). Por que a los que mencionan que la idea no es nueva y a los que prefieren ellos mismos escribir código en aras de un dudoso control, decirles que tienen razón. Los compiladores, programas que escriben programas, son algo más que simples traductores, están ahí desde el inicio, optimizan, analizan y detectan errores. Lo único que no me cuadra es por que ya casi nadie (excepto especialistas de alto nivel) escribe todavía en código máquina. Ahí si que se tiene control de verdad!!

    En 1920, Klein, uno de los matemáticos más brillantes del siglo XX, planteó en un congreso un problema fenomenal. Era posible resolver cualquier problema matemático (transcendente o no) mediante un algoritmo, es decir, especificando una lista FINITA de operaciones…? Y de lo que se trata aquí a mi me parece en cierta forma lo mismo. Podemos, paulatinamente, encontrar una forma de expresar el complejisimo sistema de referencias, relaciónes, inducciones, deducciones y jerarquías de lo que se denomina pensamiento humano y su forma de aprendeher la realidad, con maquinas binarias, que unicamente se distinguen por repetir operaciones aritmeticas a velocidad monstruosa? Y en relación con esto, según el teorema de Touring, en teoría, lo mismo me vale el MAC de Enrique que un ábaco romano, pero (supongo) a nadie se le ocurriría la tontería de criticar un Mac diciendo que el ábaco ya existía, o que en teoría puede hacer lo mismo (o tal vez no puede hacer lo mismo…)

    Enrique, gracias por el link a la presentación. Por el contenido y por la forma, una presentación realmente buena.

  • #015
    brian - 28 agosto 2007 - 23:13

    Lo que pretende Simonyi no es nada nuevo, Genexus lo viene haciendo desde hace bastantes años.

    Ahora, tal vez pretende mejorar justamente el punto flaco de Genexus (y la razón por la que no ha prendido): es un asco para la gran mayoría de los desarrolladores.

  • #016
    Javier - 28 agosto 2007 - 23:33

    Lo problemas de de genexus lo soluciona hace tiempo http://www.velneo.com , la verdad que yo la uso , no soy programador y hago aplicaciones con gran facilidad sin escribir líneas de código solo con el análisis de la aplicación.

  • #017
    jincho - 29 agosto 2007 - 00:32

    @14, antoni. Sin animus molestandi, revise sus fuentes: No era 1920, ni era Felix Klein. Como puede ver en: http://es.wikipedia.org/wiki/Entscheidungsproblem
    la solución de «Turing», era inspirada en los trabajos de Kurt GÃ?¶del, como respuesta de este al problema de David Hilbert (Congreso Int. Math, 1900), acerca de la formalización de la Aritmética fundamental, y la formulacion correcta, como consecuencia del problema de decision, por Hilbert, Church y Ackerman en 1928.
    Y no, no es lo mismo. Por cuestiones prácticas, y también por otras de tipo teórico ( Incluso muy teórico), no es «fácil»(Y habría que definir y usar el término «fácil» con sumo cuidado), pasar de las especificaciones en «lenguaje humano» a programas ejecutables, ni a mano, ni a máquina…. (¡¡¡Que se lo digan a los desarrolladores en activo!!!).

    Saludos.

  • #018
    fernando - 29 agosto 2007 - 00:34

    Yo poco puedo decir pero en una entrevista del 2005 a Yukihiro Matsumoto, el creador del lenguaje Ruby le preguntan:¿Qué piensas de las nuevas arquitecturas de programación que están emergiendo ahora como las «Model Driven Applications»? ¿Crees que en algún punto terminará la necesidad de escribir código, y sólo tendremos que modelar los datos y los procesos?

    y responde:
    Yo no termino de creermelas. Quizás no porque no tengan utilidad, sino porque escribir código es demasiado divertido como para no hacerlo más. Estoy convencido de que la gente que abandone la idea de crear código, no estará disfrutando tanto de su creación de software. En cualquier caso, creo que habrá que tener un ojo en estas tecnologías en el futuro próximo.

    http://fer-martin.blogspot.com/2005/11/entrevista-matz.html

  • #019
    Pedro - 29 agosto 2007 - 01:03

    [… pretende proteger todas sus creaciones mediante patentes y código compilado … ]

    No querras decir codigo propietario, en lugar de compilado. Compila se compila casi todo el codigo (excepto el de los lenguajes interpretados) , pero desde luego eso tiene poco que ver con hacer «comunidad».

    Por otra parte, Herramientas de mas alto nivel, si pero aun son una fantasia. Que no nos vendan la moto del MDA otra vez.

  • #020
    Pedro - 29 agosto 2007 - 01:11

    [.. La idea viene a incidir en intentos anteriores de compañías como IBM, que no fueron demasiado bien recibidas por los programadores …]. No fueron bien recibidas por que eran (y siguen siendo) una mierda con mucho marketing.

    Por cierto que un DSL dista mucho de ser programacion automatica. Ruby on Rails es un DSL, y si mas gente puede programar ahora en con Rails (o cakePHP o lo que sea) pero si no sabes ruby y no conoces el funcionamiento de lo que hay detras solo haran aplicaciones de jugete,

    PD Si, realmente quereis leer sobre DSLs mejor leer a Martin Fowler entre otros.

  • #021
    Pasaba por aqui - 29 agosto 2007 - 08:07

    #14, yo me he leído la presentación y sigo sin entender dónde está la gran novedad. Pero no dudo de que alguien como tú sabrá explicárnosla.

    Tu ejemplo de Turing no me convence lo más mínimo. Una máquina de Turing puede reproducir cualquier algoritmo, sí, pero ¿en cuánto tiempo? Porque ese es el problema. Aquí no se trata de hacerse pajas mentales con teorías abstractas, no, aquí se trata de tener un software concreto que haga cosas concretas, de manera sencilla y en un tiempo razonable. Y eso no lo veo por ningún lado, ni siquiera la idea.

    #15, te remito a #11.

  • #022
    mishima - 29 agosto 2007 - 09:16

    sólo diré una cosa: defmacro

    Creo que el «visual basic –» todavía no va a pasar. Para escribir software se necesita un lenguaje de programación turing completo, y por muy alto nivel de abstracción que tenga no va a convertir la construcción de software en algo trivial. Un lenguaje de dominio (diferente al dominio de la computadora se entiende), con capacidad universal es una contradicción.

    Por cierto, vaya horror de presentación, que manera de vender humo.

  • #023
    Fer - 29 agosto 2007 - 09:29

    Como dices ya hubo otros intentos de hacer esto antes, y…, la verdad al margen de que los programadores no lo recibiesen bien, el principal problema que tienen estas herramientas es que tienen muchas limitaciones.
    Además de la iniciativa de IBM, a día de hoy hay muchas otras herramientas de este tipo, e incluso hay empresas que se ganan la vida con ellas, y les va perfectamente.
    El principal problema es que si quieres hacer algo realmente complejo, al final te cuesta tanto o más aprender a manejar la herramienta como un lenguaje de programación.

  • #024
    Diego - 29 agosto 2007 - 09:53

    Seguro que hay herramientas que son capaces de generar código desde los requisitos en lenguage natural o en un lenguaje de modelado.
    Pero generar código no es construir una aplicación. A ver si nos enteramos ya, que esto de la generación automática de código es muy viejo.

  • #025
    Emilio - 29 agosto 2007 - 11:17

    «Por otra parte, Herramientas de mas alto nivel, si pero aun son una fantasia. Que no nos vendan la moto del MDA otra vez.»

    La moto de MDA esta empezando a arrancar,dentro de unos años sera algo habitual su uso, simplemente por un tema de productividad. Mas que MDA me inclinaría por el MDD. Proyectos como GMF ayudan a que poco a poco tengamos herramientas para poder implementar modelos a la medida de nuestras necesidades (no necesariamente con UML). Ademas no hay que olvidar que microsoft ya tiene un proyecto que sigue esta dirección, es la Software Factory.
    La herramienta esta parece mas enfocada para que un usuario pueda hacerse pequeñas aplicaciones, como actualmente se realizan sobre access o excel.

  • #026
    juan - 29 agosto 2007 - 12:08

    Como ha comentado alguien en un post anterior, el grupo care-t, los de olivanova ya hace mucho que se dedican a eso y además con headquarter en Denia

    http://www.care-t.com/company/index.asp

    que pena que estas cosas no salgan más en la tele,

    yo creo que un programa de tarde de hora y media, contando que hacen las empresas (cómo se hacen muebles, como se investigan vacunas, como se crea y prueba tecnología informática, cómo son las instalaciones) acabaría teniendo una buena audiencia y ayudaría a cambiar la mentalidad de la gente hacia un modelo más emprendedor y una cultura de valorar más el trabajo :-)

  • #027
    Jose - 29 agosto 2007 - 12:45

    Yo suelo programar usando Eclipse y la verdad es que tengo la sensación no de programar, sino de componer. ¿Dónde estará el límite? Supongo que crear código a partir de un texto que explique lo que quieras hacer o a partir de un esquema dibujado en papel es aún un interesante campo de investigación.

    Ahora me viene a la cabeza que en el campo de sketch-based interfaces allá por el 96 se hizo una muy conocida tesis sobre una aplicación que permite crear interfaces de usuario dibujándolas en un tablet PC, pero desconozco si ya está integrado en productos.

  • #028
    aabalo - 30 agosto 2007 - 09:53

    A los que quieran saber algo más, aquí hay una entrevista (del MIT Technology Review)… que cuenta cosas interesantes:

    http://www.technologyreview.com/Infotech/18047/

    Part I:
    http://www.technologyreview.com/Infotech/17969/

    Part II:
    http://www.technologyreview.com/Infotech/18021/

    Si alguien la quiere en español, está traducida en uno de los números de la revista Innovación de la Escuela de Organización Industrial.

    Aclaro que yo no soy programador profesional (de vez en cuándo programo algo pero por gusto y porque es divertido), y sabía que ya había software que hacía eso mismo… pero hay cosas que a mí me han parecido interesantes. Y me ha gustado.

  • #029
    Garito - 2 septiembre 2007 - 16:45

    Pues a mi me gusta mucho como se hacen las cosas con Scratch por ejemplo…

    Creo que no se puede evitar el momento en que todo el equipo se reune (ya se que eso sera fuera de españa, que aqui se pasa directamente a programar…) para planear como hacer una aplicacion

    Al humano le cuesta mucho imaginar como hace las cosas que hace intuitivamente

    De todos modos a mi mas que generacion de codigo automatica me interesa muchisimo mas imaginar como funciona el cerebro y sus procesos (http://blogs.sistes.net/Garito/382) porque, a partir de hay, puedo imaginar metodos de trabajo mucho mas cercanos a la realidad. Porque programar el ordenador para que trabaje con Python o Ruby si lo que me interesa es plasmar un proceso mental en un ordenador?

    Python, Ruby, PHP solo son lenguajes, me interesa mucho mas la organizacion de la informacion que la informacion en si (que sera interesante para mi cliente no para mi…)

    Al final, siempre me doy contra la misma piedra: capas, capas y mas capas de complejidad innecesaria

    A ver quien me da una opinion sobre esto: http://blogs.sistes.net/Garito/608 es un metodo que he creado que funciona y que tiende a eliminar el proceso puramente de programacion para centrarse en el proceso de diseño de arquitectura y funcional

    Creo que el futuro de la programacion pasa por hay mas que por la generacion de codigo automatica

    Saludos

  • #030
    Herman Dolder - 15 octubre 2007 - 01:26

    Desde hace un año existe una Tercera Via:
    La ejecución directa de especificaciones mediante un computador virtual de alta performance (ver RESUMEN EJECUTIVO en http://www.hdolder.com/PeBookRESEJEC.htm). M&P es el primer Model Driven System completamente operacional.

  • #031
    Dario Aguero - 15 octubre 2007 - 03:50

    M&P es un nuevo concepto. Yo personalmente lo use para desarrollar un sistema workflow que se implemento exitosamente en un centro regional de distribucion en latinoamerica.
    Actualmente me encuentro haciendo un MBA en EE.UU. pero si les interesa saber algo mas de este nuevo concepto me pueden contactar a dario_aguero@byu.net

  • #032
    Benito Camelas - 29 enero 2008 - 22:40

    «La maquina de programar» = el fin de los programadores

    Se dice que la «Maquina de programar» supondrá el fin de los programadores. Claro, les despiden en cuanto intentan ejercer sus derechos.

    http://www.nodo50.org/tortuga/article.php3?id_article=7418#forum18849
    http://meneame.net/story/posible-sindicalismo-empresas-relacionadas-desarrollo-software-consult
    http://jimmyjazz.wordpress.com/2008/01/29/trabajando-para-una-carnica/
    http://www.actividadonline.com.ar/index.php?option=com_mamblog&Itemid=26&task

  • #033
    Jhonass - 5 agosto 2011 - 11:26

    Ya estan los listos y los reticentes al cambio (que seguirán en pantallas de fosforo, supongo) bombardeando algo de lo que no tienen ni idea ni han llegado a entender.
    Se trata de separar de una vez los arquitectos de los paleta (sin animo de acritud para ellos), esto es, si solo te preocupas de ser el más friki del mundo desarrollando el SW por el SW, serás un paleta, si tu preocupación es tener vocación de negocio buscaras elevar el nivel de abstracción que te permiten los lenguajes universales y «crearas» un lenguaje orientado al negocio, lo que significa que la terminología, las reglas, los símbolos, etc. serán los mismos con los que se expresa el negocio (con el esfuerzo que supone aprender el negocio que estas implementando….. aaaamigo), lo cual nos lleva SW self-docummented, perfectamente legible=>más mantenible, más validable, etc, etc, etc.
    De todas formas los amantes de los bucles redondos de perfección fractálica, los defensores del poder en pro de la arquitectura perfecta (de su arquitectura «perfecta»), los que piensan que el usuario no sabe apreciar un buen SW porque solo quiere ver como de util es para él, o que piensan que el SW es en si mismo un fin y no una herramienta… Bien, todos ellos, podrán seguir en sus habitaciones aisladas despejando el camino a los que piensan que el SW es bueno si y solo si, no solo posibilita el negocio, sino que lo potencia.

    En fin, perdon por la chapa, pero creo que por el camino de intentional software van a ir los pasos en el futuro. Se trata de algo como cuando se paso del ensamblador a un lenguaje de alto nivel (seguro que los amantes del poder en su epoca se opusieron): elevar el nivel de abstracción.

Dejar un Comentario

Los comentarios están cerrados