Para responder a esta pregunta debemos olvidarnos por un momento de cualquier lenguaje de programación, lo que realmente importa más allá de la tecnología a usar es desarrollar la habilidad de resolver problemas, sobre todo si son problemas divergentes, en programación es común encontrar muchas formas de resolver una situación específica, si usted ha desarrollado proyectos de mejora continua sabrá que esta es una gran verdad, se define un problema a resolver, se hacen mediciones, se analizan los datos obtenidos para crear información, se implementa una solución y se controla en el tiempo dicha mejora, siempre tomando en cuenta los procesos en que se prueba esta solución para corregir errores, dicho lo anterior podemos decir que el desarrollo del software no es muy diferente al DMAIC.
Entonces, uno se da cuenta de que programar es tener la capacidad de encontrar un camino para lograr un objetivo propuesto por medio de una serie de tecnologías como código, bases de datos, infraestructura de red y buenas prácticas que nos ayudarán a ser eficientes en todo este proceso, y no importa si usted es ingeniero industrial, publicista, abogado… no estaría mal llevar un curso de introducción a la programación y les daré una “alerta de spoiler“, en estos cursos normalmente no se ve código. En mi experiencia como profesor universitario empezamos con la enseñanza de algoritmos usando diagramas de flujo, para desarrollar una forma de pensamiento que pueda encontrar soluciones a problemas convergentes y luego aumentamos la complejidad a problemas divergentes.
Les contaré mi anécdota de cómo llegué a ser programador, el primer curso que tuve de computación fue en 2007 cuando estaba en octavo año en el colegio CEDES Don Bosco, no entendía casi nada y aprobé la materia con un 70 cerrado, el último examen consistía en crear un diagrama de flujo para saber si 3 variables introducidas correspondían a un triángulo escaleno, isósceles o equilátero, el resultado final de ese examen fue el siguiente:
Esa primera experiencia me dejó entre traumado y con una “espinita” que con los años no se quitó, todos dependemos de la tecnología y hoy hasta un coffee maker tiene conexión wifi, en 2011-2012 estudié publicidad y entre varias situaciones y experiencias que tuve con la calidad de los cursos decidí cambiar de universidad y de carrera, ¿pero cuál carrera podía elegir un técnico en diseño gráfico? conocía de Illustrator, Photoshop y matemática; Después de pensarlo por varios meses matriculé Ingeniería en Sistemas y recuerdo que apenas ingresé a la clase vi en la pizarra un diagrama de flujo, era como reencontrarme a mi némesis, pero había que intentarlo de nuevo, en ese curso aprendí que antes de reconocer cuál figura debía usar en mi diagrama tenía que pensar como resolver el problema en la vida real, paso a paso y luego agregando los detalles como validaciones o cálculos más complejos, po eso me obligué a hacer un ejercicio que consistía en ver lo que ocurría a mi alrededor y tratar de dividirlo en varios procesos pequeños, por ejemplo, pagar el pasaje del autobús:
- Capturar monto del pasaje
- Capturar monto con el que pagaré
- Definir si hay vuelto o si es exacto
- Proceder a sentarme en un espacio donde no haya otro pasajero.
- El bus no se desplaza hasta haber atendido a todos los nuevos pasajeros o bien si ya no hay espacio.
Y así fui implementando este ejercicio a mi vida cotidiana, luego de todo eso pasé al aprendizaje de un lenguaje de programación, en este caso fue Python, ahora tenía otro reto y era conocer la sintaxis que son las reglas para escribir un lenguaje en particular, entonces conocí sobre temas que nunca había visto como SQL, C#, Java, Oracle, Servidores… Yo aún conservo en mi Google Drive mi primer bloque de programación:
Los profesionales de diferentes tipos de industrias pueden mejorar su capacidad cognitiva si desarrollan esta forma de pensamiento algorítmico. Cuando hago una consultoría en algún tema como bases de datos o un desarrollo de sistemas para una empresa, debo conocer sus procesos, cuáles son sus entradas de datos y las salidas de información, requerimientos, qué cálculos deben existir y qué tareas se pueden automatizar, no es solo llegar y decir: haremos un software con Java y la base de datos será en Oracle, hay que ir más atrás, y por eso lo que busco en este blog es que usted tenga una visión general de lo que significa aprender a programar y cómo le puede beneficiar en su puesto de trabajo, talvez no vaya a crear un sistema muy complejo pero sí podrá ver desde otra perspectiva sus procesos, existen muchos lenguajes a escoger, si a usted le gusta la estadística puede empezar con R o Python, si desea aprender cómo se hace una página web puede hacerlo con JavaScript o PHP (aclaración: HTML y CSS no son lenguajes de programación, sirven para crear la estructura y el diseño solamente), si le interesan las aplicaciones móviles puede usar Kotlin para Android o irse por un camino lleno de espinas con iOS (Apple da muchos lineamientos que pueden resultar engorrosos y llevar a peleas legales como la que está ocurriendo en este momento con el creador del juego Fornite, Epic Games: enlace de la noticia), y la lista sigue en cuanto a los enfoques que uno puede darle a la programación:
- Realidad virtual
- Ciencia de datos
- Ciberseguridad
- Redes
- Domótica
- Automatización
- Sistemas embebidos
- Inteligencia artificial
Existen muchas plataformas donde usted puede experimentar la programación desde cero, a continuación le comparto algunas:
App Inventor
Aquí podemos crear aplicaciones para Android de usando un asistente visual y con los conceptos básicos de programación como ciclos, condicionales, variables…
W3 Schools
Uno de los lugares donde se puede aprender los principales lenguajes de programación, tiene la parte teórica y práctica facilitando la comprensión.
Codepen IO
Aquí podemos experimentar la parte de HTML, CSS y JavaScript para las páginas web, es muy útil para probar funciones o el diseño.
La edad no es una barrera para empezar, he tenido alumnos con un rango de entre los 18 hasta los 52 años y han presentado proyectos muy bien elaborados, en un curso había una madre soltera que salía a las 9 pm de clases para ir a trabajar y que luego llegar a hacer la tarea, al final se trata de dedicar tiempo y esfuerzo, los resultados se ven reflejados en proporción al interés que uno le ponga.
Nuestra vida cotidiana tiene una especie de comensalismo donde nosotros somos los que nos beneficiamos de todas las ventajas que da el usar la tecnología, desde los recordatorios en el celular hasta el descubrimiento semanal de Spotify, desde los drones para monitorear volcanes hasta robots que se introducen en el cuerpo humano para curarlo, todo usa código para funcionar y ahora es su turno de tomar una decisión, el futuro necesita personas con capacidad de resolver problemas usando programación, talvez no personas dedicadas 100% en esta área pero sí que sepan mejorar sus procesos por medio de esta herramienta tal y como lo hacen algunas personas que programan macros en Excel para automatizar tareas repetitivas, unas cuantas líneas de código pueden ahorrar horas de trabajo.
SpaceX tuvo que recurrir a una programación muy avanzada para lograr crear los tableros que usan los astronautas y para hacer que sus cohetes aterricen con una precisión increíble, además de crear sistemas de triple redundancia, esto se debe a que en el espacio la radiación solar puede cambiar los estados de un bit de 1 a 0 y viceversa, lo cual provocaría fallos que pondrían en peligro la misión y las vidas de la tripulación, como podemos apreciar es todo un reto lograr líneas de código eficientes y seguras.
Otro ejemplo es Pokémon GO, para los que han usado este videojuego, la cantidad de algoritmos y ciencia de datos que hay detrás es enorme, no solo se trata de animar a los Pokémon y que aparezcan usando en geo localizador, sino también recolectan datos como el clima, la vegetación, el tipo de suelo y el entorno del jugador con su posición, de esta forma, es más probable que uno de tipo agua aparezca cerca de un río, la playa o incluso una alcantarilla, por eso la persona que quiera programar recomiendo que sea buena en matemática, le ayudará mucho a crear algoritmos cada vez más complejos:
Y hablando de matemática, el Face ID de un iPhone tiene una peculiar forma de reconocer al usuario dueño del dispositivo, realmente el celular no guarda una foto de la persona sino que emite 30 000 puntos infrarrojos invisibles que ayudan a reconstruir un modelo matemático de la cara que se ha capturado (es decir que su cara tiene una fórmula única), ¿por qué tantos puntos? para reconocer a la persona aun si usa gafas de sol, sino se maquilló, si se dejó la barba o el bigote, todo a pura matemática y con un procesador que realiza hasta 600 millones de operaciones por segundo, lo que quiero es que vea las posibilidades que existen en este interesante mundo de la programación.
Por último, durante este camino aparecerán muchas dudas pero nunca tenga miedo de preguntar, como nadie nació aprendido en esto encontrará muchas comunidades de desarrolladores en las redes sociales, canales de YouTube (invitados a suscribirse al mío: Codingraph) o un compañero de trabajo que sepa del tema, entonces queda cordialmente invitado a entrar a este mundo que siempre está en constante actualización y cada vez más presente en nuestro día a día. Antes de irme les dejo un video que me pareció divertido sobre como son los tutoriales de programación: