¿La programación de computadoras será automatizada en un futuro cercano por Inteligencia Artificial?

NOTA: La pregunta original que respondí fue “¿Vale la pena entrar en la programación de computadoras a la luz de la creciente automatización”. Eso NO es lo mismo que este alterado.

—————–
Automatizado sí, en el buen sentido, probablemente.

¿Quién quiere tener que perder el tiempo escribiendo pequeños fragmentos de código sucio cuando usted podría ser el único que dirige las operaciones, escribir la especificación de lo que debe codificarse y luego entregarlo a un robot? Y el robot se preocupa por las pequeñas partes estúpidas, y maneja el grunge de preocuparse por los efectos secundarios y las fugas de memoria y todas las partes molestas y molestas de la programación. ¿No preferirías ser Tony Stark, operando en los niveles más altos dejando el trabajo de mierda a las IA? Acelerando su tiempo de desarrollo en 100x.

“Quiero un controlador de brazo robótico que maneje seis grados de libertad. Constrúyeme un brazo de la biblioteca de brazos, conviértelo en un modelo B12. Conéctalo a mi pantalla de visualización frontal, Jarvis. Tenlo listo para conectar en media hora “.

El futuro utilizará herramientas de alto nivel para aumentar la capacidad humana, sin continuar escribiendo manualmente y optimizando código tedioso para implementar muchas funciones. ¿Quién escribe mucho código de lenguaje ensamblador a nivel de bits en estos días? Pasamos a ensambladores y luego a compiladores y luego a compiladores de optimización y luego vamos a pasar a sistemas de programación asistidos por computadora. ¿Realmente quieres tener que escribir otro tipo de burbuja? U otro tipo de tipo? ¿O quieres dejar que algunos AI decidan cómo escribir un tipo óptimo para los tipos de datos que tienes que manejar? ¿O dejar que una IA decida cómo escribir las tablas de la base de datos y manejar las relaciones para los datos comerciales que necesita almacenar?

Ya no diseñamos chips de silicio a mano. Utilizamos potentes compiladores inteligentes de silicio.

La tendencia a medida que la tecnología evoluciona es obtener herramientas más inteligentes y potentes. Monta la ola.

Eso es un montón de cosas para una pregunta. Permítanme intentar abordar todo lo que pueda con mi conocimiento limitado.

1. “¿Qué tipo de obras haremos para vivir?”
Desde hace mucho tiempo, cada vez más trabajos se automatizan progresivamente. Mejores procesos, mejores máquinas y herramientas, han reducido ciertos trabajos. Diablos, incluso los programas de computadora han estado mejorando la eficiencia y automatizando tareas.

Entonces, ¿por qué la mayoría de nosotros todavía no tenemos trabajo? Hemos pasado a trabajos más altos y más complejos.
¿Cuánto tiempo y con qué eficacia durará esto? Esto sigue apareciendo todo el tiempo, y tal vez sigue siendo un tema de debate.

2. “¿Se automatizará la programación de computadoras”?
Dale Thomas me robó la mente 😉
De todos modos, solo para agregar más perspectiva:
La programación se ha automatizado desde hace mucho tiempo (sin embargo, los trabajos han aumentado). En alguna era, los circuitos digitales tenían que diseñarse e implementarse a partir de transistores. Luego vinieron las puertas lógicas, luego vino la ALU, luego vinieron los microprocesadores. Incluso con microprocesadores, inicialmente todos los programas fueron escritos en “lenguaje de máquina”.

Ahora, los microprocesadores modernos ejecutan Microcode debajo del capó. Si uno escribe un código en Java, digamos, primero se convierte en Código Intermedio que se ejecuta en la JVM. Luego, se convierte más a lenguaje de máquina, que finalmente se traduce a microcódigo. Ahora, a pesar de tanta automatización, los trabajos de programación en realidad están aumentando. Esto se debe a que la utilidad del software ha aumentado, creando demanda en una amplia variedad de áreas.

PD: Estos pueden no ser muy válidos si se resuelve el problema de “IA fuerte”. Pero, si eso es posible, se desconoce hasta hoy. (3 de septiembre de 2015)

La automatización de la creación de software ya está sucediendo, hay una serie de herramientas y marcos como sistemas de plantillas, etc. pero para cada nivel en el proceso de creación de software que se automatiza, siempre habrá un nivel más que requiere un nivel de inteligencia que no está disponible.
Además, es muy difícil automatizar la creación de software y hacer que el software funcione de manera óptima en todas las situaciones, generalmente existe la necesidad de un toque humano cuando existe la necesidad de optimizar el software.
Otra razón por la que puede ser difícil automatizar completamente el proceso de software es Bugs. El error ocurre cuando una pieza de software no se comporta de la manera que prometió, ahora ya que gran parte del software está escrito para hablar con otro software que a su vez depende de otra pieza de software, etc., si uno de los enlaces en el la cadena tiene un error, se requiere intervención humana para realizar un ajuste o dos para que las cosas vuelvan a funcionar sin problemas.
Supongo que todo esto significa que siempre se necesitarán programadores informáticos humanos. La pregunta, supongo, es cómo evolucionarán sus roles.

Creo que esas son dos preguntas diferentes, posiblemente tres. 🙂

La programación es el acto de automatización y simulación. Decidir qué automatizar y simular es una decisión humana, y también humano es el acto de crear ese sistema.

La respuesta a la primera pregunta en el contexto de una decisión profesional es que existe una necesidad insaciable de personas que puedan convertir las ideas en productos probados que funcionen. Ser capaz de hacer eso con una computadora y habilidades de desarrollo de software lo coloca en un excelente lugar para COMENZAR una carrera. La realidad es que existen muchos factores para crear excelentes productos. Las grandes habilidades de codificación son un aspecto importante, por lo que es construir lo correcto, para el cliente correcto, en el momento correcto. Este es el factor de “lotería” del desarrollo de productos. Consulte el libro Lean Startup para obtener más información sobre ese aspecto del desarrollo de productos.

Entrar en informática como un título tiene ventajas y desventajas. La realidad es que los programas de CS varían ampliamente según la escuela, el departamento e incluso el instructor. Me gradué en ingeniería eléctrica. Creo que la ingeniería es más rigurosa en la resolución de problemas con las matemáticas aplicadas, pésima en la enseñanza del pensamiento de programación (OOD, TDD, ATDD, Abstracción, etc.). Si comenzara de nuevo, encontraría un programa que me interesa debido a un campo específico de investigación y muchas recomendaciones de boca en boca de los estudiantes. Si se encuentra en los Estados Unidos, también encontraría la escuela menos costosa que satisfaga mis necesidades de pregrado y planee hacer una maestría de 2 años.

La realidad de un título universitario de CS es que es excelente para comenzar una carrera, pero no es el mejor título para promoción y avance en la mayoría de las empresas. Es por eso que los ingenieros y graduados de CS pueblan tantos programas MBA ejecutivos.

La ingeniería informática es probablemente la industria más preparada para el futuro.

A medida que los sistemas se vuelven más complejos, se requiere más esfuerzo para mantenerlos. ¿Pueden estos complejos sistemas actuales arreglarse solos? ¡Seguro! Excepto que esta autocorrección y autocuración necesita ser supervisada y mantenerse también.

Incluso el problema supuestamente simple, como la integridad del sistema (verifique que todos los archivos estén allí … ¿no?), Requiere intervención humana, porque en realidad, el sistema interactúa con otros sistemas complejos.

Debe tener una IA excepcionalmente fuerte para descubrir las complejidades, las conexiones, la intención del usuario y, finalmente, lo mejor para el usuario.

No solo esto no desaparecerá pronto, sino que se generarán más trabajos. Ya puede ver la tendencia hoy: ¿ha tenido un ejército de analistas de sistemas, formadores de sistemas, etc., por ejemplo, hace 30 años?

Este pequeño clásico no solo no se siente obsoleto, es más pertinente hoy que en el pasado:

Um, no va a suceder. Las computadoras no han conseguido más que un pequeño grano de arena mejor para programarlas.

Se han inventado alrededor de 6,000 lenguajes de computadora, el 90% de ellos son bien intencionados pero, básicamente, basura, y en general no están mejorando significativamente o son más fáciles de usar, y todavía son una gran forma de poder programar sí mismos. Muchos idiomas que fueron tan venerados en años pasados ​​ahora son vistos de manera más justa como fallas bastante grandes. cada idioma se promociona como más rápido, mejor, más poderoso, más general y más fácil de usar, pero esas promesas nunca se cumplen. Algunos ejemplos:

C ++: promocionado como nirvana, ahora visto como un lenguaje muy complejo, desordenado y difícil. Me midieron para tener un coeficiente intelectual en el 1% superior y me duele el cerebro leer el manual de C ++. Tantas características, muchas de ellas mal diseñadas, luego cubiertas con una capa de revisiones y más basura sobre ellas que rompe más cosas de las que arreglan. Horrible.

JavaScript: miles de millones de computadoras con navegadores web que pueden ejecutar JavaScript, y la opinión general es que es un pozo apestoso de un idioma, con algunas buenas galletas con trocitos de chocolate debajo de los 20 pies de basura. O tal vez como un auto Yugo abollado y oxidado, con algunos cromados para la izquierda y tornillos autorroscantes de gran tamaño del compartimiento de piezas de Mercedes en la guantera pero sin destornillador.

Ruby: un lenguaje que requiere que una aplicación tenga al menos 473 archivos fuente para comenzar. Cambia un carácter de un archivo y todo se rompe. Cualquier idiota supuestamente puede programar en Ruby, y aparentemente la mayoría de ellos lo hacen.

PHP: Atado en la parte inferior con JavaScript por ser el lenguaje más agresivo en uso amplio.

En el lado positivo: Python y “ir”. Tanto relativamente simple como poderoso. Pero aún necesita un programador muy inteligente para hacer un buen uso de ellos.

Como puede ver, no hay señal de que las computadoras se estén convirtiendo en autoprogramación. Todo lo contrario. Los últimos proyectos de programación muy grandes, que costaron miles de millones de dólares, fueron un fracaso total y tuvieron que ser descartados por completo, y esto sigue sucediendo varias veces al año. El software es básicamente un gran truco nervioso a menos que sea administrado MUY cuidadosamente por personas que han fallado muchas veces antes y han aprendido lo que no funciona, que es la mayoría de los instintos, tendencias y atajos naturales. La semana pasada tuve que tener una reunión muy incómoda con el presidente de nuestra compañía, y decirle que teníamos que gastar otros $ 60,000 de su dinero personal en reescrituras de software, para rehacer las cosas que hizo el último, lo que le ahorró tal vez una o dos horas. trabajo, hace tres años. La tendencia natural de ese tipo le costó a la compañía mucho dinero y dos meses.

La programación automatizada es una alta posibilidad. Al usar la inteligencia artificial para escribir programas de auto-modificación / mejora y superar los límites de la inteligencia artificial de auto-programación, el autor ofrece un ejemplo notable de cómo se podría lograr esto. El autor utiliza un algoritmo genético basado en IA, que después de varias generaciones, construye un programa “Hello World” por sí mismo.

En cuanto a los trabajos, las preocupaciones con respecto a ellos son casi intrascendentes, ya que los trabajos siempre aparecen y desaparecen. Pero existe una fuerte tendencia de trabajos que se vuelven menos intensivos en mano de obra y más “complejos”, lo que implica más creatividad, pensamiento, resolución de problemas y generación de valor. No obstante, la adaptación / flexibilidad individual debería ser la mayor preocupación. Las personas a menudo se adaptan y aprenden a explotar nuevas oportunidades, como para aquellos que no lo hacen, bueno …

En lo que respecta a Matrix, esto es principalmente independiente de la programación automatizada. La tecnología requerida para esto podría beneficiarse de la programación automatizada, pero no está garantizada por ella. Entonces, si el mundo se vuelve como Matrix depende de una gama completa de otros factores.

La programación, básicamente, es el arte de la automatización.

Por lo tanto, los programadores siempre están en el negocio de automatizar algunas de sus tareas (aburridas). Es por eso que tenemos compiladores para escribir código de máquina para nosotros y editores inteligentes para corregir nuestros errores de sintaxis.

Pero nunca automatizaremos la actividad de la automatización en sí. Porque los humanos seguirán siendo los decisores de lo que queremos que las computadoras hagan por nosotros. Y alguien aún necesita tomar decisiones difíciles que especifiquen exactamente qué hará cualquier sistema mecanizado en particular. Y esas personas serán programadores.

La programación no desaparecerá porque esa necesidad, que se traduce entre los deseos humanos informales y los requisitos formales ejecutables mecánicamente, no desaparecerá.

¿Se ha reemplazado la pintura por la impresión? Principalmente sí, la pintura para retratos de piezas. Lo que queda es pintar para el arte.

Entonces, la programación de computadora para tareas tontas o reutilizables será / será reemplazada por un software avanzado (¿quién escribe el encabezado del mismo por correo electrónico? ¿Por qué la compresión de imagen de código si el código ya existe?). Pero la parte creativa de la programación, donde decides qué quieres hacer, cómo debe verse, … seguirá siendo algo humano por ahora.

No creo que sea que las IA de repente comiencen a programar. Creo que simplemente serán las herramientas cada vez más sofisticadas y de alto nivel. Ya tenemos herramientas muy complejas que realizan muchísima generación de código detrás de escena. Eso es exactamente lo que hacen los compiladores, y se están volviendo extremadamente complejos y buenos para la optimización.

En el pasado, limpiar la pantalla a negro requeriría un breve ciclo de instrucciones de ensamblaje para escribir ceros en un área contigua de memoria.

Más tarde, con las API de gráficos, solo necesitábamos usar “glClearColor (0,0,0,1); glClear (GL_COLOR_BUFFER_BIT);”

Quizás en un futuro cercano, se pueda utilizar el procesamiento de lenguaje natural similar al Siri, por lo que solo tendremos que pronunciar la frase “borrar la pantalla con negro” .

Todavía necesitará un humano en el circuito para decidir qué se debe crear, pero las herramientas serán más útiles para que sea más rápido y fácil.

Deberíamos darle el premio Nobel de Física, Química, Paz y Medicina al tipo que se le ocurrió esta idea.

Lo mejor que hacemos los programadores es agregar una capa sobre una capa cuando las cosas se convierten en una rutina. Lo cual no es más que reutilización en su mejor forma. También somos más inteligentes al no agregar capas que nos harán obsoletos. Por lo tanto, algunos de los mejores paradigmas no se adoptan en el mundo corporativo. A menos que aparezca un tipo que busque ser ascendido a gerente y le diga al jefe que puede usar XYZ para hacer que 5 tipos trabajen en un día. Pero esos tipos pueden no ser tan buenos como otros programadores inteligentes apasionados y todo el ambiente se convertirá en un circo.

Deberías ver la película “Up in the Air”.

La única forma en que podría suceder sería si cedemos nuestra autonomía a las computadoras.

Tal vez las computadoras puedan (algún día) producir todos los detalles del código. Pero solo escribimos software en respuesta a una necesidad humana, y alguien necesita comunicar esa necesidad y lo que significa a una computadora.

¿Puede la persona con la necesidad explicarlo directamente? Posiblemente, pero entonces todos seremos programadores, porque ese es el programa.

Como dije, hay una posible excepción. Si estamos dispuestos a vivir en un mundo donde el software monitorea todo lo que hacemos y otro software se escribe y reescribe automáticamente para exprimirnos más productividad según alguna métrica predefinida, entonces es posible que sea el último programa que escriba una persona.

Sin embargo, no veo la utilidad de eliminar toda discreción y autodirección de los seres humanos. En general, a las sociedades históricas que han intentado hacerlo les ha ido mal.

La industria cambiará , y puede cambiar drásticamente, pero no desaparecerá a menos que todos decidamos trabajar para computadoras en lugar de hacer que trabajen para nosotros.

No, porque todo lo que hacemos es pasar a niveles más altos de abstracción. Una vez, dibujar una pantalla ordenada era una tarea de programación muy difícil. Ahora tenemos HTML que lo hace trivialmente fácil. Pero eso no ha significado que nadie diseñe pantallas. Por el contrario, ha creado un nuevo trabajo de diseñador web, del mismo modo, el software especializado de bases de datos ha creado un trabajo especializado de administrador y / o diseñador de bases de datos. Cada nivel de automatización crea una necesidad para los usuarios y controladores de esa automatización.

Ser un programador vale la pena, una parte de esto podría volverse obligatorio en el futuro.

Comunicarse en un idioma (como el inglés u otro) es tan necesario y útil para los humanos en esta sociedad. Del mismo modo, la programación será una parte necesaria para comprender los próximos agentes inteligentes (máquinas, IA o como se llame). Serían capaces de comprender nuestro lenguaje natural, pero para ver qué pasa en su cerebro, uno necesitaría aprender sus idiomas.

Sería programas y hardware que reemplazarían la mayoría de las habilidades como la de los médicos, maestros y muchos otros en los que se pueda pensar. Entonces, aunque una parte de la programación se automatizaría, nos estaríamos graduando a niveles superiores, hasta que alcancemos una interfaz efectiva cerebro-máquina y unifiquemos la inteligencia no biológica con la inteligencia biológica, de lo contrario podemos quedar obsoletos.

Como Phil Jones y otros han señalado, la programación es y siempre ha sido automatizada en gran medida.

Uno de los conceptos más importantes en programación y computación en general es la abstracción. Hay capas y capas de abstracción involucradas en cualquier tipo de programación. Por ejemplo, si armé una pequeña y bonita aplicación web ASP.NET o Ruby / Rails, el funcionamiento real del sitio web resultante implicará una cantidad casi inconcebible de automatización y abstracción que nunca me habré acercado. Todavía estaré programando mucho para tenerlo todo en funcionamiento. Sin esa abstracción y automatización, simplemente no podría hacerse.

La tecnología informática y de red es poderosa, pero muy, muy compleja: su PC tiene más “cosas” que suceder en un milisegundo de las que podría hacer un seguimiento o tener en cuenta. Envolvemos esa complejidad en abstracción y automatización; es la única forma en que podemos acceder útilmente al poder que permite. Cuando escribe código, simplemente está configurando y controlando la automatización.

El desarrollo de software, por otro lado, no se automatizará fuera de existencia. A los tipos de medios que agitan las manos ocasionalmente les gusta hablar sobre cómo algún día las computadoras lo entenderán describiendo lo que quiere en “inglés simple”, y producirán una solución. Incluso si suponemos que fuera factible, no estoy preocupado; la mayoría de las personas no pueden describir con precisión su problema, y ​​mucho menos su solución, en inglés simple.

Eso es lo que hago , fundamentalmente; Traduzco los problemas de las personas y una solución adecuada al tipo de mundo lógico, secuencial, modular y abstracto en el que existe la tecnología. Los lenguajes, las plataformas y las herramientas que utilizo para hacerlo son en gran medida incidentales para el panorama general; Soy traductor entre humanos y tecnología. No veo la necesidad de que eso desaparezca nunca; alguien va a tener que construirlo , y ese seré yo y el mío. Es difícil ver eso como un juego de suma cero; hay demasiada complejidad y variedad.

Editar: disculpas; para responder a la segunda mitad de su pregunta: sí, definitivamente vale la pena entrar en informática, siempre que esté interesado en ella. Estoy seguro de que es lo mismo para la mayoría de los campos, pero el desarrollo de software definitivamente no es algo en lo que quieras entrar por el simple hecho de hacerlo. Si no está muy interesado (tenga en cuenta que eso es distinto del conocimiento y la experiencia), lo pasará mal.

No se automatizará mucho en el corto plazo. Hacer una plantilla (que es lo que es toda la automatización) reduce la flexibilidad, por definición.

Pero no vale la pena recurrir a CS principalmente para la demanda de trabajo, que está cambiando rápidamente.

Para las perspectivas de carrera en los próximos 20 años, recomendaría a las personas que comienzan la universidad hoy o en los próximos años que se dediquen a la biotecnología o la robótica (incluida la impresión en 3D, dispositivos, etc.). Otros campos son los recursos (agua / energía). Son los campos calientes del futuro. Será como la contabilidad, siempre alrededor, pero no tan caliente …

La programación nunca puede desaparecer. Hay algunas cosas que simplemente no puede automatizar. El cerebro humano es algo que no puede ser reemplazado. En cuanto al valor de entrar en informática, CS no es SOLO programación, hay mucho más en CS que eso

Gracias por el A2A.

La programación automatizada ha sido el santo grial del desarrollo de software durante años. Lo más cercano que han llegado las empresas es CRUD (crear, leer, actualizar, eliminar), es decir, acciones simples de base de datos. Obviamente, esto está lejos de la automatización general.

Afortunadamente para nosotros, los desarrolladores, se necesita suficiente potencia cerebral y la OMI siempre lo será. Si desea tener una gran demanda, me enfocaría en UML, casos de uso e historias de usuarios, OOP, arquitecturas en capas y patrones de diseño. Hay relativamente pocas personas que pueden modelar objetos y cumplir la promesa de la tecnología de objetos.

La mejor de las suertes.

La programación básica ya está automatizada. pero la informática no es programación hermano. es vida ejecutar el algoritmo Ur eficiente de potencia, instucciones, complejidad espacial. Por lo tanto, no se preocupe por la automatización. Puede crear código automatizado para ordenar, configurar, pero esos no funcionan en todas las plataformas. Algunas plataformas son desafiantes donde se requieren cerebros humanos. ¿Crees que las máquinas / robots hacen operaciones, pero aún bajo la supervisión del médico?

En última instancia, la programación es el proceso de decirle a las computadoras qué hacer. Si automatizamos un nivel de programación, todavía necesitaremos a alguien que dirija las computadoras al siguiente nivel más alto de abstracción.

Además, la programación es solo una pequeña parte de la informática.