¿De qué se trata realmente la programación?

Tu próximo trabajo: ¿De qué se trata realmente la programación?

 Una iniciativa de Dircoms + RED/ACCION

Conversamos con el programador Augusto Figueroa sobre las habilidades claves detrás de esta profesión: razonamiento lógico, capacidad de abstracción, trabajo en equipo y adaptación constante. Explorando estos aspectos, comprendemos por qué la habilidad de programar se valora tanto socialmente, cuáles son sus aspectos creativos y sus aspectos más divertidos.

programación

Foto de cottonbro studio: https://www.pexels.com/es-es/foto/persona-manos-escritorio-ordenador-portatil-4065617/

Parece que la programación es el futuro. En un mundo donde proliferan las inteligencias artificiales, las criptomonedas y los objetos smart en todos los hogares, esta carrera parece uno de los caminos más confiables a seguir. Todos queremos trabajo remoto, flexibilidad horaria y un buen sueldo, por lo que muchos se lanzan a esta carrera sin dudarlo. Pero ¿basta con un curso para subirse a la nave virtual? ¿se trata realmente de aprender Python, Javascript o SQL? ¿Qué hay más allá de los lenguajes de programación? ¿Por qué está tan valorado este conocimiento?  

Para aventurar algunas respuestas, hablamos con el programador Augusto Figueroa —conocido como Quil por sus amigos, gracias sus orígenes del barrio de Quilmes—. Augusto trabaja para una aplicación que permite cargar autos eléctricos en Berlín en cualquier distribuidora, además de diseñar sus propias estaciones de carga, administradas a través de Internet of Things (IOT).

—¿Cómo definirías vos la programación?
—La programación es una herramienta. Sirve para que un aparato tecnológico haga algo que vos querés. En algún punto, es darle instrucciones a las máquinas. La complejidad de las instrucciones y la complejidad de las tareas que pueda realizar dependen mucho de la máquina. Entonces, en el fondo y antes que todo, estamos haciendo resolución de problemas. Por eso es importante la lógica; el dominio donde se opera es en la matemática.
Pensando en todos los niveles que hay y desde el principio, la computadora hace operaciones matemáticas. Sobre esa capa de matemáticas, hay toda otra capa de lógica formal. Lo que nosotros hacemos como programadores es ver problemas del mundo y tratar de pasarlos a un lenguaje formal (lógico), para después implementar eso en código. Esas serían sus tres partes componentes:  identificar un problema, romperlo en sus partes componentes, y formalizar la definición de esos componentes para implementarlos en código. Es de lo que se trata idealmente. Después, en el día a día, puede que se trate de que hay que cambiar un botón que está azul al color rojo. 

—¿Qué es importante tener en cuenta a la hora de interiorizarse en ese mundo?
—A mí el disclaimer que me gusta hacer es que, cuando estás aprendiendo tu primer lenguaje de programación no solo estás aprendiendo ese lenguaje, sino que también estás aprendiendo a programar: a formalizar problemas, estructurar tu pensamiento, y después traducir esa estructura al lenguaje. Está bueno hacer esa distinción y no es trivial: por un lado se aprende qué estructuras tiene, por ejemplo, el lenguaje de Python, cómo van las instrucciones dentro de ese programa y cómo se piensa de ese lenguaje, y además, estás aprendiendo cómo pensar vos mismo como programador.

—¿Qué implica esto?
—Te hace ejercitar la habilidad de cortar los problemas en pedacitos, y es muy importante saber en qué pedacitos los cortas. Por ejemplo: acá hay una parte de chequear algo, otra de iterar (modificar), otra de ir a buscar los datos a otro lado, otra parte de leer un archivo. Una vez que sabés hacer esa preguntas, y que resolverlo conlleva esos pasos, podes hacerle la pregunta a Google o a Stack Overflow y es mucho más sencillo. En el fondo de todo, es saber enunciar los problemas, pero en el proceso también es necesario aprender a usar la herramienta que te deja implementar su solución.
Otro detalle a tener en cuenta, en especial para muchos que al terminar el secundario se anotan en un curso o bootcamp para aprender a programar, es que ese tipo de enseñanza no te prepara al 100 % para el mundo del trabajo, y quizás no es tan útil como lo fue en otro momento para las empresas. Ahora no alcanza con un bootcamp, necesitás experiencia. La forma de romper esa vara es hacer un proyecto, sacarlo al mundo y que quede demostrado lo que sabes hacer.

Se buscan personas con más proactividad. Eso es a lo que se le está prestando atención. Se trata de que no te enseñen a realizar tareas mecánicas, sino el tipo de pensamiento que conlleva trabajar en tecnología. Además, esos cursos suelen ser individuales, y el trabajo siempre es en equipo. Prácticamente no existe resolver un problema solo en el ámbito de la tecnología.

—¿En dónde yace la creatividad a la hora de programar?
—Hay muchas capas en donde se puede operar, cada una requiere de un tipo de creatividad distinta. Primero, están las personas que se ponen la diez por el resto del humanidad y arman las herramientas que hacen el heavy lifting (trabajo pesado): los que van, le susurran en el oído a la computadora y gracias a eso tenemos un compilador, o los que arman Python, Go, C++, herramientas que corren rápido, no tienen problemas con el manejo de memoria, y detectan fácil los errores de programación. Son todos problemas muy interesantes, muy difíciles de resolver, que requieren de mucho conocimiento de matemáticas y saberlas aplicar de manera creativa en el código. Es gente que está optimizando el motor. Esos son los programadores que le resuelven problemas a programadores.
Después, existe otra parte del trabajo creativo. Cuando ya tenemos esas herramientas, consiste en preguntarse: ¿cuál es el problema que tiene un ser humano real? En cada capa se requieren distintos niveles de creatividad. Cuanto más cerca de la máquina estás, más matemática hace falta. Cuanto más distante estás, se transforma en un asunto de hilar distintas tecnologías para dar una solución barata, rápida, segura y eficiente para los usuarios. Si hay algo horizontal a todos los niveles, es que es central la capacidad de abstracción.

— ¿Cuál sería un ejemplo concreto de este tipo de abstracción?
— Supongamos que quiero crear un parlante. Primero voy a hacer de cuenta que es una cajita que se puede conectar a cosas, porque quiero que tenga una conexión bluetooth, entonces voy a programar eso. Después me ocupo de la parte del sonido. Otro ejemplo: si vos quisieras armar Facebook, no podrías hacerlo todo de golpe: primero harías algo que te deje crear un usuario, después algo que te deje hacer posteos, después algo que te deje poner “me gusta”, después algo que te deje agregar amigos. 

—¿Por qué crees que está tan valorado social y monetariamente la carrera del programador?
—Saliendo de un secundario técnico, me quedó una mirada del mundo que implica que es algo para ser operado:  todo lo material se puede trabajar. Un carpintero ve la madera como que se puede transformar en cosas útiles, y un herrero ve lo mismo en el metal. En el caso de la programación, te hace ver la posibilidad de transformar la información en cosas útiles. Esa información puede ser lo que sale de  una cámara, puede ser una transacción bancaria, puede ser cualquier GPS.
Lo que diferencia al mundo de la programación del mundo tangible es que, por lo general, lo armás una vez y lo replicás todas las veces que quieras. Si vos armás un mueble, lo vas a armar una vez, y después tenés que armar el próximo, y después tenés que armar el próximo, aunque sean los cinco iguales. En el mundo de la información, una vez que resolviste el problema, lo resolviste definitivamente. Lo único que cuesta plata es mantener esa computadora que hace la transformación que queremos de la información. Por ejemplo: armas el algoritmo que recibe una foto, procesa la información y te devuelve la foto con un filtro para Instagram. Todas las personas que quieren verse así lo pueden hacer al instante e indefinidamente. Ese es el salto del impacto que se tiene.
Armando herramientas tecnológicas o informáticas, el impacto puede tener escala global. La gente que programa Instagram tiene un impacto global. Un cambio pequeño en su interfaz puede transformar cómo interactúa la gente en todo el mundo. Con diez carpinteros, podés hacer varios muebles. Con diez programadores, podes fundar una startup que levante millones de dólares. Es ahí donde entra todo el valor agregado: las velocidades y la cantidad de volumen que se pueden procesar son muy distintos. 

—¿Qué es lo que más te gusta a vos de la profesión?
—Lo más lindo es que es desafiante. A mí me divierte encontrarme con problemas de los que no sé la solución de inmediato. Me gusta aprender nuevos lenguajes, nuevas formas de acomodar la cabeza, nuevas perspectivas (porque también distintos lenguajes implican distintas perspectivas sobre qué es la información y cómo se interpreta).
El mundo tecnológico se transforma muy rápido, y cada iteración te obliga a aprender una nueva forma de pensar. Foucault decía que leía para dejar de pensar lo que él pensaba. Para mí se trata de eso: estar desafiando todo el tiempo lo que uno asume que la tecnología es y lo que puede hacer,  y ver más allá. El impacto que se puede tener sobre el mundo es enorme, porque nuestro mundo está atravesado por la información. Cada dos o tres años tenés que aprender a hacer todo de nuevo; la velocidad es impresionante. Aburrirse es muy difícil. Y es muy satisfactorio: hay un contraste muy grande entre el momento en el que las cosas no andan y las cosas andan, y está lleno de memes para representarlo.