¿Por qué no se puede automatizar el desarrollo de software para que esencialmente podamos ‘pedir’ a una computadora que nos cree una solución a nuestro problema / creación?

En pocas palabras: las computadoras actuales son demasiado “estúpidas” para hacer eso. Puede suceder que algún desarrollo futuro empuje sus habilidades más allá de esos límites, pero en la actualidad no existe tal cosa.

Para que algo como esto funcione, primero necesitará que la computadora “entienda” lo que quiere decir cuando le “pregunte” algo. Incluso eso ya es un gran problema. La mayoría de los lenguajes humanos (si no todos) están plagados de inconsistencias, matices, inflexiones, contexto, conceptos vagos / subjetivos, inferencias, etc. Incluso si la computadora puede traducir sus palabras en texto, aún no tiene idea de lo que realmente quiso decir: en el mejor de los casos, solo una idea rudimentaria al buscar en un diccionario.

Luego, necesitaría “diseñar” el problema que usted planteó. Y luego dividirlo en tareas. Gran parte de esto se forma realmente a través de la imaginación, especialmente si ese problema exacto no se ha resuelto previamente. Hasta ahora no hemos podido ver ninguna forma de imaginación desde las computadoras, lo más cerca que hemos llegado son algunas acciones aleatorias realizadas de manera similar al modelo de evolución (es decir, intente todo hasta que funcione mejor, luego continúe intentando más en orden para mejorar, enjuagar y repetir), que lleva varios años de simulación informática extrema para lograr incluso algo rudimentario. Quién sabe, quizás una nueva tecnología como la computación cuántica puede allanar el camino, pero eso es como una persona del siglo XIX que ve un motor de combustión interna y piensa: “Esto podría llevarme a la luna”. El punto es que no sabemos lo que realmente se necesita para lograr esto: todo lo que podemos hacer es adivinar hasta que aparezca algo que parezca proporcionar tales habilidades.

Finalmente, necesitaría traducir esas tareas en alguna especificación, por lo que no necesita pasar por todo este proceso cada vez que se ejecuta el “programa”. Esto lo hemos logrado en menor medida. La mayoría de los entornos RAD (desarrollo rápido de aplicaciones) convierten dichas tareas de una interfaz de apuntar y hacer clic en código fuente que la computadora “puede entender”. Pero todavía es una situación en la que la interfaz está diseñada para que no haya inconsistencias, y cualquier cosa específica indicada tiene un solo significado exacto, generalmente una tarea extremadamente simple para cualquier declaración en particular.

Aparte de eso, se inventaron varios lenguajes de programación (así como conceptos de programación) para hacer que tales tareas sean menos básicas. Por ejemplo, en lugar de que el programador establezca registros manualmente y emita saltos condicionales, se inventaron cosas como las declaraciones de bucle para convertir estas tareas extremas de bajo nivel en una tarea combinada. Como otro ejemplo, algunos lenguajes (como SQL) están diseñados para que el programador establezca cuál debería ser el resultado, no cómo llegar allí, pero aún así requieren un lenguaje muy simplificado (en comparación con los lenguajes naturales) con reglas muy consistentes y exactas. sintaxis, también son muy especializados y solo pueden realizar las tareas para las que han sido diseñados.

Lo más cercano que he visto a esa idea de “di lo que quieras” fue un lenguaje de consulta para un sistema de base de datos. Fue incorporado en un programa de db llamado Q&A. Efectivamente, escribirías algo como ” Dame todos los clientes que compraron algo en el último mes “. Luego, el programa buscaría esas palabras (después de dividirlas en espacios) en un diccionario de lo que cada una significa, simplemente desechando las que “no entiende”. Entonces obtendría ” Dar a los clientes que compraron el mes pasado “. Luego traduzca eso a una consulta SQL, algo así como:

SELECCIONE * #De la palabra “Dar”
DE Clientes ÚNETE a Compras #De la frase “Clientes que compraron”
DONDE Compras.Fecha> AHORA () – 30 #Desde “el mes pasado”

Pero ese mismo lenguaje estaría completamente desconcertado por una declaración como ” Asegúrese de que mi refrigerador esté abastecido para la fiesta de esta noche “. Solo puede hacer cosas para las que fue diseñado.

La respuesta es bastante similar a “¿por qué no se puede automatizar la construcción de puentes para que podamos pedirle a un robot que nos construya un puente sobre un río determinado?”.

Los problemas complejos requieren soluciones complejas. Incluso las tareas simples que realiza un niño son muy complejas de automatizar por entidades no humanas.

Por cierto, si podemos enseñarle a una computadora a desarrollar automáticamente un software, podríamos pedirle a tiempo que la computadora mejore el programa que ejecuta. Entonces, tendríamos una singularidad (algo así como skynet pero no malvado, tal vez :)). Lo digo en serio.

De wikipedia:

“La singularidad tecnológica es un evento hipotético relacionado con el advenimiento de la inteligencia general artificial genuina (también conocida como” IA fuerte “). Dicha computadora, red informática o robot sería teóricamente capaz de superación recursiva (rediseñándose a sí mismo), o de diseñar y construir computadoras o robots mejor que él mismo. Las repeticiones de este ciclo probablemente resulten en un efecto desbocado, una explosión de inteligencia, donde las máquinas inteligentes diseñan generaciones sucesivas de máquinas cada vez más potentes, creando inteligencia que excede la capacidad intelectual humana y control. Debido a que las capacidades de tal superinteligencia pueden ser imposibles de comprender para un humano, la singularidad tecnológica es el punto más allá del cual los eventos pueden volverse impredecibles o incluso insondables para la inteligencia humana “.

Es solo una cuestión de cuándo y no si los programas de software pueden escribir otros programas de software.

Afortunadamente para mí, esto eventualmente aún tenía que suceder. Cuando seleccioné una carrera, en 1980 se redujeron a dos opciones: ingeniería de software o ingeniería genética. La ingeniería de software estaba mucho más establecida en ese momento, pero tenía el verdadero inconveniente desconocido de los programas de software que escribían otros programas de software.

Las razones por las cuales esto aún no ha ocurrido son

  • El lento avance de los lenguajes de software que dificulta la implementación de conceptos de alto nivel, todavía tenemos idiomas que tienen 2 décadas de antigüedad.
  • La dificultad intrínseca para almacenar el conocimiento y la experiencia observada en el pasado en los mecanismos de almacenamiento existentes. Cualquier sistema inteligente probablemente aprendería y adaptaría horas extras en respuesta a eventos pasados ​​reales. Por ejemplo, los autos / camiones autónomos probablemente aprenderán y compartirán colectivamente experiencias pasadas. Por lo tanto, la estrategia para evitar que un ciervo cruce la carretera sería adaptativa y optimizada con el tiempo utilizando resultados anteriores.
  • La falta de un incentivo económico en el sentido de que esta tecnología requeriría una gran inversión de capital de cara al futuro que puede no ser patentable para recuperar la inversión.

El desarrollo de software nunca debe ser automatizado. Una computadora en sí misma no puede estudiar el comportamiento humano, no importa cuán avanzada sea la tecnología. Si los robots necesitan la ayuda de los seres humanos para funcionar, cuánto más para una computadora. El diseño de un software no se trata de números y procesamiento de datos, sino de estudiar el comportamiento del usuario para que se pueda desarrollar una mejor experiencia de usuario. El mejor software es el que ha pasado horas investigando UX.

Buena suerte.

Hemos recorrido un largo camino desde el binario, por lo que si está preguntando si será un lenguaje de programación en el futuro cercano al lenguaje natural, entonces la respuesta es definitivamente sí.

Estamos avanzando a pasos agigantados en el aprendizaje automático y el procesamiento del lenguaje natural y es solo cuestión de tiempo antes de que la programación sea tan fácil como hablar inglés y hacer que la IA ejecute el comando por usted. No veo ninguna razón para poner un límite a la tecnología. La programación es esencialmente hablar con una computadora en el lenguaje que entiende.

Los lenguajes de ensamblaje de código pesado como C no desaparecerán, pero sí veo que están más especializados en el futuro específicamente para los programadores que necesitan realizar una manipulación precisa de bits. Cuanto más cerca esté un lenguaje de ensamblar, más preciso será, pero requerirá más codificación y, por lo tanto, será más preciso. Cuanto más cerca esté un idioma del idioma natural como el inglés, menos codificación necesitará, pero la compensación es que tendrá menos precisión y control de lo que sería ideal, así que no sé. AppleScript puede ser un ejemplo de un lenguaje como este, ya sea que se trate de un buen lenguaje o uno malo.

Probablemente en los próximos años puede ser posible.
Además, le recomiendo que lea este artículo (especialmente la parte 2):
La revolución de la inteligencia artificial: Parte 1 – Espera pero por qué
La revolución de la inteligencia artificial: Parte 2 – Espera pero por qué

Básicamente, si un software / máquina / AI / ASI puede construir una solución a nuestro problema, podría construir una solución para cada problema que tenga el ser humano, pero esto tiene muchas implicaciones y se conoce como la singularidad tecnológica.

El desarrollo de software no es una línea de fabricación. No puede tomar paquetes de código de reconstrucción por la mañana y tener una aplicación completamente construida para el almuerzo. No funciona de esa manera. SD es similar a la relación cliente abogado. Entre el principio y el final, habrá muchos giros y vueltas. No sabrá el destino final hasta que realmente llegue allí, al igual que en el proceso legal no sabe el costo hasta que el juez golpea el martillo.

Porqué es tan dificil? Debido a las reglas y plataformas comerciales. Las reglas comerciales son las que hacen que un negocio sea un negocio. Sus reglas de negocio no son de otra persona. Las reglas de su negocio no se encuentran en un estante en algún lugar y no puede simplemente arrastrarlas y usarlas en cualquier plataforma. El segundo es el problema de la plataforma. Si escribe algún código para una plataforma, ese código se compilará en lenguaje máquina y se ejecutará en una CPU. Las CPU son diferentes en diferentes plataformas, los sistemas operativos son diferentes en diferentes plataformas, y así sucesivamente.

Ni su empresa ni la tecnología funcionan de la misma manera en todas las empresas o plataformas.

Actualmente, Peter no ha podido ser programado para tener tanta inteligencia, esa forma general de pensar sobre un problema, ni siquiera a una décima parte de la cantidad requerida. Incluso los programadores promedio suelen hacer un gran lío de una aplicación la primera vez. Para obtener una buena solución, se requiere mucha inteligencia, pensamiento holístico, equilibrio entre las compensaciones y gestión de personas. Una computadora no está intrínsecamente dispuesta a hacer ninguna de esas cosas.

Debido a que es demasiado difícil describir algunas soluciones de problemas de una manera, eso lo comprende directamente. Personalmente, incluso asumiría que escribir un software podría ser más fácil que explicar cómo podría funcionar una solución. El lenguaje oral, desde mi punto de vista, no es exactamente suficiente.

El Borg (espero que sepas Star Trek) diría que este es un lenguaje primitivo e inexacto lejos de la perfección.

El mayor problema es que nuestra solicitud de una solución está llena de supuestos implícitos (que pueden no ser correctos) y que las minucias rara vez se incluyen en nuestros supuestos o descripciones de la solución.

La codificación consiste en tomar el problema y dividirlo en las piezas lógicas más pequeñas posibles para que todo el conjunto haga una aproximación razonable de cuál es la solución deseada.

No podemos diseñar sistemas que creen nuestros sistemas todavía. Cuando eso será posible se desconoce actualmente.


More Interesting

¿Qué es 'portar' en el desarrollo de software?

Cómo comenzar mi carrera como probador de software sin experiencia

¿Cómo esperan las empresas que alguien obtenga 2 años de experiencia como desarrollador junior si casi todas las vacantes son para personas con 2 años de experiencia?

¿Cuáles son algunos buenos cursos de certificación para desarrolladores de software profesionales?

¿Por qué las personas (CSE e IT Freshers) prefieren el desarrollo S / W a la garantía de calidad? ¿Por qué dudan en convertirse en ingenieros de prueba?

¿Cuáles son los objetivos típicos que cada desarrollador de software se establecería?

¿Puedo tener su opinión y consejos sobre mi situación profesional como desarrollador de software?

Como ingeniero de software, ¿qué idioma / marco debo aprender a trabajar por cuenta propia (móvil, web, servidor, empresa, front-end, back-end, base de datos, etc.)?

¿Qué importancia tienen las matemáticas discretas para la ciencia de datos o el desarrollo de software?

Acabo de dejar mi trabajo de desarrollador de software para tratar de convertirme en cantante. Mis amigos y padres no me apoyan. ¿Qué tengo que hacer?

¿Qué beneficios obtienen los pasantes desarrolladores de software JUSPAY? ¿Proporcionan algún gadget? ¿Qué pasa con la comida gratis?

Estoy trabajando en una empresa de TI como desarrollador de software y necesito cambiar a roles de administración. ¿Hay alguna salida sin hacer MBA?

¿Cuál es la diferencia entre el desarrollador de Java y el desarrollador de software?

Actualmente estoy trabajando como desarrollador de software y mi edad es 24. Quiero ser parte de ISRO, ¿es posible? Si es así, ¿cómo puedo postular? ¿Qué tipo de publicación puede obtener un desarrollador de software en ISRO?

¿Por qué algunos desarrolladores dicen que no son TI?