Durante décadas, el desarrollo de software se ha hecho manualmente.
Desde perforar tarjetas en FORTRAN hasta escribir sistemas distribuidos en Go, la disciplina se ha mantenido básicamente igual: pensar profundamente sobre un problema, idear un enfoque inteligente de solución (un algoritmo) y dar a la máquina un conjunto de instrucciones para ejecutar.
Este método, que podría denominarse “programación explícita”, ha sido fundamental para todo, desde el mainframe hasta el teléfono inteligente, desde el auge de Internet hasta la revolución móvil. Ha ayudado a crear nuevos mercados y ha hecho que empresas como Apple, Microsoft, Google y Facebook sean lo que son hoy en día.
Y sin embargo, algo falta.
Los sistemas inteligentes concebidos por los primeros escritores de la era de la computación, como el C-3PO de George Lucas en Star Wars, son todavía ciencia ficción. Las tareas aparentemente simples desafían obstinadamente la automatización, incluso por parte de los científicos informáticos más brillantes. Algunos acusan a Silicon Valley, ante estos desafíos, de desviarse de los avances fundamentales para enfocarse en negocios incrementales o impulsados por la moda o por el exceso de capital sobrante (otro día hablaremos de los VC).
Eso, por supuesto, está a punto de cambiar. Los autos autónomos de Waymo pasaron recientemente las ocho millones de millas recorridas. El motor de traducción de Microsoft, aunque no habla con fluidez en seis millones de formas de comunicación, puede igualar los niveles humanos de precisión en las tareas del chino al inglés. Y las nuevas empresas están abriendo nuevos caminos en áreas como asistentes inteligentes, automatización industrial, detección de fraudes y muchos otros.
Individualmente, estas nuevas tecnologías prometen impactar nuestra vida diaria. En conjunto, representan un cambio radical en la forma en que pensamos sobre el desarrollo de software, y una notable desviación del modelo de programación como lo conocemos hoy en día.
El avance fundamental detrás de cada uno de estos avances es el Deep Learning, una técnica de inteligencia artificial inspirada en la estructura del cerebro humano. Lo que comenzó como una herramienta de análisis de datos relativamente estrecha ahora sirve como algo parecido a una plataforma informática general. Supera al software tradicional en una amplia gama de tareas y, finalmente, puede ofrecer los sistemas inteligentes que durante mucho tiempo han eludido a los científicos informáticos.
Sin embargo,
En medio del entusiasmo por el Deep Learning, muchos observadores extrañan la razón principal para ser optimistas sobre su futuro: el Deep Learning requiere que los programadores escriban muy poco código real. En lugar de confiar en las reglas preestablecidas o en las declaraciones if-else, un sistema de Deep Learning escribe las reglas automáticamente basándose en ejemplos pasados. Un desarrollador de software solo tiene que crear un “esqueleto aproximado”, parafraseando a Andrej Karpathy de Tesla, y luego dejar que las computadoras hagan el resto.
En este nuevo mundo, los desarrolladores ya no necesitan diseñar un algoritmo único para cada problema. La mayoría del trabajo se enfoca, en cambio, en generar conjuntos de datos que reflejen el comportamiento deseado y administrar el proceso de entrenamiento. Pete Warden, del equipo TensorFlow de Google, señaló esto desde 2014: “Solía ser un programador”, escribió. “Ahora enseño computadoras a escribir sus propios programas”.
Nuevamente: el modelo de programación que impulsa los avances más importantes en software hoy en día no requiere una cantidad significativa de programación real.
¿Qué significa esto para el futuro del desarrollo de software?
La programación y la ciencia de datos convergerán cada vez más. La mayoría del software no incorporará sistemas de aprendizaje de “extremo a extremo” en el futuro próximo. Se basará en modelos de datos para proporcionar capacidades de cognición básicas y lógica explícita para interactuar con los usuarios e interpretar los resultados. La pregunta “¿Debo usar la inteligencia artificial o un enfoque tradicional para este problema?” Aparecerá cada vez más. El diseño de sistemas inteligentes requerirá el dominio de ambos.
Todos necesitamos sentirnos cómodos con un comportamiento impredecible.
La metáfora de una “instrucción” de computadora es familiar tanto para los desarrolladores como para los usuarios. Refuerza la creencia de que las computadoras hacen exactamente lo que decimos y que las entradas similares siempre producen salidas similares. Los modelos de IA, por el contrario, actúan como seres vivos. A medida que desarrollamos y utilizamos aplicaciones de inteligencia artificial, debemos comprender y aceptar resultados probabilísticos.
Citas: Mapping the AI Toolchain