¿Crees que se puede construir un lenguaje de programación muy alto que elija para los desarrolladores las estructuras de datos más apropiadas para el código que han escrito?

Como resumen rápido:
Conceptualmente, es posible. Y, se ha hecho antes. Sin embargo, en la práctica, es engorroso el estado del arte en un “programa” que genera otro programa que todavía no es lo suficientemente bueno como para ser utilizado (por lo que sé).

Las empresas generalmente confían en contratar buenas personas con una amplia experiencia junto con buenos conocimientos fundamentales de informática para crear su programa de la mejor manera posible. Estas personas conocen una solución suficientemente buena frente a una mala solución. Los informáticos perfeccionistas verdaderamente inteligentes tienden a atascarse en un modo en el que ninguna solución es perfecta y, por lo tanto, hacen girar sus ruedas y nunca crean ningún producto entregable (o es tan complicado que es imposible implementarlo correctamente). Esto todavía parece ser el estado del arte.

Problemas clave:
1. especificando completamente y rigurosamente los requisitos de su programa
2. Vinculando diferentes marcos, quizás con diferentes lenguajes de desarrollo y API
3. Mantenimiento y depuración del software generado.

Cuenta anecdótica Longish / Descripción:
Un programa podría ayudar a un programador a elegir una buena manera de implementar un programa dados los requisitos. Sin embargo, no puedo pensar en un buen plan de negocios para tal programa:
1. Se crean constantemente nuevas arquitecturas y marcos. Algunos pueden no ser conocidos hasta que sean populares. Este programa para sugerir métodos de implementación quedará obsoleto o tendrá un uso limitado rápidamente. (Ejemplo: el lenguaje de programación Ruby no fue ampliamente conocido fuera de Japón durante mucho tiempo hasta que Ruby-on-rails despegó, creo)

2. Si el programa le sugiriera usar una tecnología con la que no está familiarizado, ¿la usaría? En una empresa, trabaja lo más posible con las mismas herramientas y conocimientos hasta que se espera una gran ganancia para volver a capacitar a todos en la nueva tecnología y adquirir las herramientas de desarrollo necesarias para ello. Es decir: si conozco Java pero no C, es improbable que use C para crear mi programa. Una pelea más común:
¿Cuál es el mejor servidor web para usar? ¿Cuál es el mejor editor para usar? Las guerras santas estallan sobre Apache e iis. Sobre vim y emacs. (O, mac vs pc). De hecho, si el programa sugirió alguna tecnología con la que no está familiarizado o no se siente cómodo, es probable que la rechace de todos modos.

3. Si conocía la tecnología que sugería el programa, probablemente no necesitaba el programa para comenzar.

Por lo tanto, una persona con un título en informática con buena comprensión fundamental sigue siendo el mejor “optimizador” en términos de creación de un programa.

Entonces, si un programa que sugiere la mejor manera de implementar, o un marco para usar, aún requiere que sepas cómo usarlo, cambiemos la discusión a algo un poco más útil. Un programa que puede generar la solución de programa que necesita dados los requisitos.

Como dijo Simon, fue un tema muy candente en los noventa. Se hizo un gran esfuerzo para generar un programa sin necesidad de conocer los detalles esenciales de la programación y / o detalles de hardware. Una gran ventaja sería que los expertos en el dominio (médicos, economistas, gerentes de negocios) podrían especificar sus requisitos y hacer que la computadora genere el programa apropiado para hacer el trabajo sin que necesiten saber cómo programar. ¡¡Eso habria sido genial!! No necesitaría que alguien desvíe su atención de su materia y aprenda a programar, por lo tanto, un grupo de dos oficios pero un maestro de ninguno.

Un gran problema: ¿cómo especifica rigurosamente sus requisitos para que una computadora pueda procesarlo y generar el programa? Una forma perseguida fue el UML. Pasas mucho tiempo especificando exhaustivamente los casos de uso y los requisitos utilizando el lenguaje de modelado unificado definido y tienes esencialmente un documento de requisitos que se puede analizar y potencialmente generar un programa. Las especificaciones UML más nuevas y las técnicas de modelado adicionales surgieron para hacer frente a requisitos que no estaban bien definidos. Como el lenguaje de restricción de objetos que cumple un rol que UML no tenía anteriormente. En concepto, parece factible y tal vez la gente todavía está trabajando en ello. En realidad, era engorroso y lento. A menudo pasaba mucho tiempo tratando de descubrir cómo enmarcar los requisitos en el lenguaje de modelado de manera concisa y correcta. En algunos casos recuerdo no saber cómo hacerlo. O no conocía los métodos de modelado tan bien como era necesario, o no había forma en el lenguaje de modelado para expresar lo que necesitaba.

Segundo gran problema: se necesitaba un programa para analizar UML y generar el programa. Uno de esos programas fue la rosa racional en tiempo real. Esencialmente se tomó la abstracción que era el modelo UML e intentó completar todo el código de la placa de la caldera. El “programador” rellenó un poco de código de lógica de negocios (por ejemplo, partes de los diagramas de transición de estado anteriores, principales y posteriores) y hay un “programa” que hace el trabajo que especificó. “Funcionó” y conceptualmente es posible. Cuando lo probé en los años 90, era muy restrictivo y no admitía todas las diferentes especificaciones de modelado. Y cuando no completó el código de lógica de negocios de la manera que esperaba el software, arrojaría montones de locos errores de compilación de C ++. Si fuera más inteligente, probablemente podría haber descubierto por qué se arrojaron esos errores. Me di por vencido y reescribí el código de lógica de negocios que causaba errores de diferentes maneras hasta que se detuvieron. Mi productividad se gastó en la lucha libre con la herramienta. Finalmente, el código de placa de caldera que el software estaba poniendo es probablemente ineficiente y demasiado general para soportar las construcciones soportadas por el UML. Era obvio que se estaba haciendo en C ++ y los errores arrojados parecían bastante complicados. Estaba creando una máquina de estados con menos de 10 estados. Podría haber hecho esto en unas pocas horas en C (siendo generoso con la estimación). Me tomó unos días hacerlo con Rational Rose Realtime. Probablemente, la actuación hubiera sido horrible. Cuando trabajaba en Nortel, recuerdo algo que dijo uno de los supervisores (el trabajo consistía en optimizar a mano el código generado por el compilador): los compiladores hacen un buen trabajo, pero nada nos supera. Hasta cierto punto, todavía estoy de acuerdo. (Con todas las nuevas superescaladoras, arquitecturas fuera de servicio, etc., está comenzando a ser una trampa para la optimización humana. Sin embargo, ese es un tema completamente diferente)

Tercer gran problema: supongamos que tiene un programa generado casi perfecto que satisface sus necesidades. Excepto que hay un error en él. A veces, la respuesta es 1, pero debería haber sido 0. Usted ha demostrado minuciosamente que, dadas las entradas, la respuesta debería ser 0. ¿Cómo depuraría este programa que se generó? ¿Es un error con la generación de código? ¿O los marcos que utilizó? ¿Qué pasa si solo bajo ciertas circunstancias, hay un problema de rendimiento? Devuelve la respuesta correcta, pero lentamente, más allá del tiempo en que la respuesta es útil (es decir, comercio de acciones). Si todo lo que sabía era el idioma de los requisitos que especificaba el idioma, no tiene ninguna esperanza de descubrirlo.

Desde que Rational fue vendido a IBM, no he escuchado muchas noticias sobre ellos. Tampoco he escuchado mucho sobre la “pandilla de 4”. No es que Rational haya sido descontinuado, pero no he oído que nadie lo use en realidad más que un lenguaje de especificación de requisitos. Y en la industria, no he oído que nadie lo use más allá de los proyectos de investigación.

Para ver esto de otra manera, desea especificar un programa en un método de lenguaje más natural que sea accesible para más personas con menos capacitación relacionada con la computadora. Está muy relacionado con los compiladores y la generación de código. No he escuchado mucho sobre esto, y si algo mejor desde la última vez que lo experimenté está disponible, no es convencional.
La promesa de tal cosa sigue siendo sorprendente. ¿Podría ser usted el que desarrolle y pruebe una solución viable y convencional?
¡¡¡Buena suerte!!! ¡Serás rico y bien recompensado! ¡Lo siguiente más importante desde la Web 1.0!

Este es el punto de las API creadas para un protocolo estandarizado, por ejemplo HTTP y más específicamente REST.
Lo que estás describiendo es un poco vago. ¿Cómo especificarías tus requisitos? El desarrollo impulsado por el dominio intenta responder a esto asegurando que el desarrollo se pueda realizar en términos que los usuarios comerciales también puedan comprender y, por lo tanto, ratificar en un lenguaje que tenga sentido en el dominio. Es responsabilidad principal de los desarrolladores mapear este lenguaje de dominio en un lenguaje que tenga sentido para una computadora, a menudo a través de un lenguaje moderno y flexible que admita este estilo de desarrollo. Hasta cierto punto, Behavior Driven Development también intenta llenar este vacío: más orientado a las pruebas de aceptación, es probable que converjan, e idealmente las API también comenzarán a especificarse de manera similar, lo que reducirá aún más la brecha entre desarrolladores y expertos empresariales.
Siempre será necesario cerrar estas divisiones cuando aún no se hayan especificado, y encontrar nuevas y mejores formas de implementar la lógica detrás de los requisitos comerciales, e históricamente, esto solo significa que podemos explorar la complejidad con más detalle y dejar más a las integraciones repetitivas.
Recuerdo que este era un tema a principios de los noventa: la programación estaría muerta para el nuevo milenio debido a los nuevos lenguajes basados ​​en especificaciones. No sucedió Internet sucedió y el problema se redefinió en otro paradigma.
Espere que eso suceda al menos una vez cada 20 años. Entonces necesitamos desarrolladores para redefinir todo una vez más.

Lo hicimos. Se llaman marcos. Rails cubre la arquitectura web más común y los casos de uso. Los lenguajes de programación de programa en sí mismos son marcos que te permiten hablar con los ordenadores. Los marcos más grandes de todos son los sistemas operativos.

¿Cuáles podrían ser las limitaciones de tal idea donde los desarrolladores solo tendrán que describir lo que hace la aplicación?

Si pudiéramos describir los programas perfectamente, ya no necesitaríamos programadores.

Permítanme volver la pregunta sobre sí misma. ¿Cómo podría describir un programa de tal manera (incluyendo todos los detalles y casos extremos) donde la descripción no sería, en sí misma, el programa?

En esencia, cuando escribe su programa, es la descripción más clara de lo que es su programa en su totalidad. Todo lo demás es solo una descripción parcial, filtrada según la brevedad, la legibilidad y una buena cantidad de margen de maniobra porque somos humanos, no computadoras.

La segunda preocupación principal es que los humanos son terribles para comunicar detalles. ¿Cómo sabes lo que debe hacer tu programa? No sé sobre ti, pero tuve que revisar los requisitos cuando descubrí que un par de ellos se enfrentaban entre sí.

Por un momento, imaginemos que tenemos una IA que puede tomar nuestra descripción y convertirla en un programa. *

¿Cómo sabrá cuándo algunos requisitos son malos, conflictivos o menos importantes? Cualquier error en su descripción se ampliará muchas veces en el programa resultante. Lo vemos todo el tiempo, por lo que tratamos de detectar errores lo antes posible. Pero, ¿qué pasa si no es un error, sino una regla comercial mal entendida? ¿Qué pasa si cambian los requisitos?

¿Qué pasa si hay un error en la IA?

* Técnicamente, no necesitamos la IA. Muchas organizaciones operan así, solo reemplazan AI con el Departamento de Ingeniería . Requisitos de entrada, programa de salida.

Aunque durante mucho tiempo ha habido personas que relegaron el problema a alguna IA distante, también ha habido personas que han trabajado duro para reutilizar las soluciones a problemas anteriores. La historia de los compiladores muestra un desarrollo desde cargadores simples que adjuntaron fragmentos de código entre sí hasta compiladores modernos que pueden aceptar un lenguaje de nivel bastante alto y producir código de lenguaje ensamblador que es tan bueno como el mejor escrito a mano. Creo que habrá idiomas cada vez más altos a medida que pase el tiempo. En este momento, uno puede importar una implementación específica de una cola prioritaria en un programa y personalizarla un poco con parámetros opcionales. Puedo ver un momento en el que solo necesitará especificar el uso de una cola prioritaria, sin elegir una implementación específica, dejando eso al compilador. Puedo imaginar un momento en el que solo se sugiere la funcionalidad básica al compilador, que luego lo reconocería como el de una cola prioritaria y la elección de una implementación adecuada. Tengo menos claro qué se puede desarrollar después de eso, pero nada de eso necesita una verdadera IA, solo extensiones de la tecnología actual de compilación.

He pensado en algo similar durante mucho tiempo,
cómo tener una superestructura que describa el conocimiento o el proceso con experiencia. para que pueda mezclar conocimientos y obtener un resultado de dos experiencias. demandar adivina que cosas similares podrían comportarse de manera similar solo necesita probarlo en la vida y repensarlo en términos de esa cosa.

Creo que la computadora puede aprender a hacer programación automática
para hacer esto tiene que saber cómo se ve algo bueno.
y compare el resultado con él y sepa qué hay que ajustar para saber la diferencia.

como cómo se ve una buena interfaz de usuario. cómo se ve algo usable.
cómo se ve una buena función. así que para poner entradas básicas y el ai lo modificaría para que se vea bien.

Todavía no sé cómo describir esto a ai, probablemente cada parte debe describirse por separado. que mezclado

Tus objetivos aquí parecen nebulosos. ¿Se puede eliminar todo juicio humano de escribir software de calidad? No me parece probable.

Los compiladores de optimización modernos ya aceleran mucho al tomar medidas tales como desenrollar pequeños bucles e incluir pequeñas funciones. Estos, sin embargo, manejan “cosas pequeñas”.

No creo que la ingeniería inteligente de programas vaya a ser realizada completamente por máquinas.

Los costos de los marcos son tiempo y material. Una aplicación con marco utiliza los recursos más que una aplicación sin ellos. (El buen ejemplo es jQuery y sus complementos. Es bueno y útil para los programadores novatos, pero los profesionales no lo usan, ni el script de café ni nada más).

La otra cosa es que los marcos están destinados a usarse para muchos propósitos, por lo que cuando los usa para un solo propósito, también consume los recursos para todos los demás propósitos.

Pero la IA que (o quién 🙂) puede decidir qué estructura de datos es la mejor debe tener la mente de un desarrollador (ya que la llamó AI, debe ser inteligente) y en ese caso la pregunta es si tendremos una IA para desarrollar aplicaciones ?

Es completamente plausible, actualmente estoy diseñando algo similar.

Creo que la IA nunca será tan buena como la inteligencia humana. AI ‘puede’ hacer este trabajo por usted, sin embargo, puede implementar un sistema más avanzado que optimice la memoria y muchos más trucos.

Ya existe un lenguaje de programación o al menos este es el comienzo.

More Interesting

¿Cómo se puede comenzar a desarrollar un bot de chat utilizando el aprendizaje automático y el procesamiento del lenguaje natural desde cero?

¿Podría una IA crear y / o tocar musicalmente tan bellamente como un humano?

Me apasionan tanto la seguridad de la red o la piratería como también la inteligencia artificial y el aprendizaje automático. ¿Por cuál debo ir?

¿Qué es la prueba de Turing?

¿Qué diferencia hay entre IOT, AI y ML?

¿Cuál es el futuro de la ingeniería robótica?

¿Tara Karimi (científica de células madre) realmente resolvió P versus NP como se sugiere en su charla TEDx?

¿Cuáles son los ejemplos más exitosos de música creada por computadora?

¿Las 'muñecas inteligentes' tienen personas que escuchan lo que dicen los niños para ajustar las respuestas de la muñeca?

¿Es realista escribir un programa de reconocimiento facial con aprendizaje profundo en 3 meses sin conocimiento previo sobre redes neuronales y demás?

¿Es probable que Trump pueda hacer que Apple invierta mucho en la fabricación en los Estados Unidos? ¿Por qué o por qué no?

¿Cómo mejorará la inteligencia artificial la educación?

Cómo entender 'las redes neuronales están capacitadas para aprender la distribución de datos'

¿Cómo es usar la nueva aplicación Quora 'escuchando' en los altavoces inteligentes Echo o Home?

¿Cuáles son las empresas que cotizan en bolsa que estudian y desarrollan inteligencia artificial, y qué tan rentables serán en 1-2 años?