No hay duda de que Machine Learning y la Inteligencia Artificial están afectando al mundo en desarrollo, aunque alguno los llama como temas sobrevalorados que no son más que declaraciones, o simplemente cosas de programación, por lo que acá los enfrentaremos cara a cara con todas las piezas de evidencia para comprobar esto.
Por un lado, la ingeniería de software es el arte de automatizar una tarea escribiendo reglas para que una computadora las siga. Por otra parte, Machine Learning va a un paso más allá: automatiza la tarea de escribir las reglas.
Comencemos con algo básico, definamos cada una de las áreas.
Programación Tradicional
La programación tradicional es un proceso manual, es decir, una persona o un programador crea el programa. Pero sin que nadie programe la lógica, uno tiene que formular manualmente o codificar reglas. Tenemos los datos de entrada, y el programador codificó un programa que utiliza esos datos y se ejecuta en un computador para producir la salida deseada.
Machine Learning
Por otro lado, en Machine Learning los datos de entrada y salida son alimentados a un algoritmo para crear un programa.
Esta es la diferencia básica entre la programación tradicional y Machine Learning. Sin que nadie programe la lógica, en la programación tradicional hay que formular y/o codificar manualmente las reglas, mientras que en Machine Learning los algoritmos formulan automáticamente las reglas a partir de los datos, lo que es muy potente.
Por lo tanto, estos términos no son intercambiables: el ingeniero de datos no puede reemplazar el trabajo de la programación tradicional y viceversa. Aunque cada ingeniero de datos está obligado a utilizar al menos un lenguaje de codificación, la programación tradicional es solo una parte de lo realiza. Por otro lado, no podemos decir que el desarrollo de software esté usando algoritmos de Machine Learning para lanzar un sitio web.
Machine Learning, al igual que la Inteligencia Artificial, no es una sustitución, sino un complemento de los enfoques de programación tradicionales. Por ejemplo, Machine Learning puede ser utilizado para construir algoritmos predictivos para una plataforma de operaciones en línea, mientras que la interfaz de usuario de la plataforma, la visualización de datos y otros elementos se realizarán en un lenguaje de programación convencional como Ruby o Java.
Por lo tanto, he aquí lo principal: Machine Learning se utiliza en el caso de que la estrategia de programación tradicional se quede rezagada y no sea suficiente para implementar plenamente una determinada tarea.
Veamos esta explicación de distintas perspectivas que son las que tradicionalmente se implementa tanto Machine Learning como la programación tradicional.
Perspectiva de los desarrolladores
Los puntos de partida para la ingeniería de software tradicional y Machine Learning son bastante similares. Ambos tienen como objetivo resolver problemas y ambos comienzan por familiarizarse con el dominio de los problemas: discutir con la gente, explorar el software y las bases de datos existentes. Las diferencias están en la ejecución.
Los ingenieros de software utilizan su ingenio humano para encontrar una solución y formularla como un programa preciso que una computadora puede ejecutar. Los científicos de datos, es decir, las personas que implementan los sistemas de Machine Learning, no intentan escribir un programa por sí mismos. En su lugar, recogen datos de entrada, por ejemplo, los sensores de los autos, y los valores deseados, el ángulo del volante. A continuación, instruyen a una computadora para que busque un programa que calcule una salida para cada valor de entrada, un programa que impulsa un automóvil con las entradas de los sensores.
Tradicionalmente, los programadores automatizan las tareas escribiendo programas. En Machine Learning, una computadora encuentra un programa que se ajusta a los datos.
Un ingeniero de software se preocupa por la exactitud en cada punto. Mientras tanto, un científico de datos tiene que estar mucho más cómodo con la incertidumbre y la variabilidad. Después de todo, Machine Learning se trata de extraer patrones estadísticos de los datos. Debido a la naturaleza inherentemente estadística de Machine Learning, es más flexible en problemas complejos, pero también más difícil de interpretar y depurar.
El desarrollo de una aplicación de Machine Learning es un proceso aún más iterativo y exploratorio que la ingeniería de software. Machine Learning se aplica a problemas que son demasiado complicados para que los humanos los descubran, por esa razón hacemos que una computadora encuentre una solución para nosotros. Por lo tanto, un científico de datos tiene que adoptar una actitud experimental y estar preparado para probar algunos enfoques antes de decidirse por uno satisfactorio.
Desde fuera, los modos de trabajo son muy similares: ambos profesionales pasan mucho tiempo con su computador. Los científicos de datos pasan gran parte de su tiempo escribiendo código en Python u otro lenguaje de programación de propósito general, igual que los programadores tradicionales. La mayor parte del tiempo en un proyecto de Machine Learning se consume en tareas que se llevan a cabo mejor con la programación tradicional: escribir scripts para fusionar, limpiar y visualizar datos, e integrar el subsistema de Machine Learning con el resto de la aplicación. Ciertamente, las herramientas también tienen sus diferencias. Los científicos de datos están familiarizados con la regresión lineal y otros algoritmos estadísticos mientras que los programadores tradicionales conocen las API y los marcos web al revés.
Perspectiva de producto
Unas preguntas que comúnmente se realiza son ¿cuándo se beneficia un producto de Machine Learning? ¿habrá algún uso para la ingeniería de software en el futuro o Machine Learning consumirá todo el desarrollo de software?
La respuesta es simple no, Machine Learning no desplazará a la ingeniería de software tradicional. La mayoría de los tipos de problemas que se resuelven hoy en día con la ingeniería de software, se llevarán a cabo mediante la programación tradicional también en el futuro. Machine Learning, por otro lado, proporciona una manera de abordar nuevos tipos de problemas, los que antes no era factibles de resolver. Tareas que los humanos realizan con relativa facilidad, pero no pueden formularse como reglas exactas, detectar objetos en imágenes, conducir un coche, entre muchas otras, son los principales candidatos para las soluciones de Machine Learning. Machine Learning puede ser la solución correcta también si un software tiene que adaptarse a cambios regulares en su entorno.
Sin embargo, existen algunas limitaciones. El aprendizaje de las reglas a partir de los datos requiere que se disponga de un gran conjunto de datos de casos típicos. Además, los datos debes estar marcados con el resultado deseado. A veces se generan datos adecuados como efecto secundario de algunos procesos empresariales existentes o se publican como datos abiertos. Si no es así, la recolección y el etiquetado de los datos puede requerir un esfuerzo considerable, que puede ser costoso.
A pesar de todo esto, se puede utilizar Machine Learning para optimizar el desarrollo de programas a nivel tradicional veamos algunos casos.
Optimización del código
Los compiladores son programas diseñados para procesar lenguaje de programación de alto nivel convirtiéndolo en instrucciones de máquina fácilmente comprensibles por las máquinas. También tiene la capacidad de arreglar códigos antiguos sin necesidad de la fuente original en un corto período de tiempo. Este proceso ayuda a hacer un sistema más rápido en la próxima generación. El uso de los algoritmos de Machine Learning para proporcionar servicios de desarrollo de software puede ser muy importante, ya que es necesario crear el código una sola vez y utilizarlo varias veces.
Prototipo más rápido
Definitivamente, se requiere un mes de planificación, si no un año, para transformar los requisitos del negocio en productos tecnológicos. Este procedimiento puede acortarse utilizando Machine Learning y pocos expertos técnicos para desarrollar lenguaje natural o interfaces visuales. Machine Learning ayuda a desarrollar prototipos rápidos según las necesidades del cliente, lo que facilita su actualización. Esto ayuda a los desarrolladores a concentrarse en proporcionar más servicios recibiendo retroalimentación continua.
Asistentes inteligentes
La mayor parte del tiempo de los desarrolladores se dedica a leer la documentación o a depurar códigos. Para evitar esto, los asistentes de programación inteligentes pueden ayudar a reducir este tiempo considerable ofreciendo simplemente soporte a tiempo y recomendando documentos y fragmentos de código relevantes.
Estimaciones exactas
Por lo general, el desarrollo de software requiere más presupuesto y tiempo del necesario. Pero, gracias a Machine Learning, realmente no tienes que esperar más tiempo, ya que Machine Learning ayuda a estimar el presupuesto preciso junto con la duración del tiempo. Las estimaciones más fiables requieren una gran experiencia, una comprensión completa del contexto y una familiaridad con el equipo de desarrollo. Al utilizar Machine Learning, resulta fácil obtener una estimación precisa del ciclo de vida del desarrollo de software.
Toma de decisiones en el futuro
En comparación con el proceso tradicional de desarrollo de software, se espera que la Inteligencia Artificial ofrezca una solución completa al priorizar los productos y las funciones y reducir los análisis no deseados. Después de completar este proceso, la Inteligencia Artificial llega con la toma de decisiones estratégicas para los beneficios del negocio. Una solución de la Inteligencia Artificial ayuda así a obtener resultados precisos que ayudan a las empresas a planificar sus decisiones estratégicas para el crecimiento futuro.
Podemos concluir que la Inteligencia Artificial y Machine Learning no reemplazará la programación tradicional, pero si puede a optimizar el ciclo de vida tradicional del desarrollo de software y subvertir la necesidad de que los seres humanos se involucren en el desarrollo tecnológico.
Con esto finalizamos la explicación. Ya conoces las diferencias principales entre Machine Learning y la programación tradicional, por lo tanto te dejo la siguiente pregunta, ¿Cuáles de las siguientes afirmaciones crees tú que sea cierta?
Opción 1: En la programación tradicional los datos de entrada y salida son alimentados a un algoritmo para crear un programa.
Respuesta Incorrecta. En Machine Learning los datos de entrada y salida son alimentados a un algoritmo para crear un programa.
Opción 2: Un ingeniero de software esta mucho más cómodo con la incertidumbre y la variabilidad de su programa.
Respuesta Incorrecta. Un ingeniero de software se preocupa por la exactitud en cada punto. Mientras tanto, un científico de datos tiene que estar mucho más cómodo con la incertidumbre y la variabilidad.
Opción 3: En un futuro, Machine Learning reemplazará por completo la programación tradicional.
Respuesta Incorrecta. La mayoría de los tipos de problemas que se resuelven hoy en día con la ingeniería de software, se llevarán a cabo mediante la programación tradicional también en el futuro.