¿Cómo empezar a programar?

team nov. 09, 2020

El 8 de octubre me invitaron a participar de una conversación con la gente de Digicampus sobre lo que significa ser un programador y como fueron mis inicios. El objetivo era acercar con un poco de experiencia de primera mano a gente que está interesada en dar los primeros pasos en la programación. Charlar un poco de qué significa, lo bueno, lo malo y lo feo.

Preparé una pequeña presentación, (¡gracias a Santi Cruz por el diseño!) y me pareció que podía sumar dejar una breve idea de esa conversación por acá.

Mis inicios en la programación

En mi caso, descubrí que me gustaban las computadoras desde muy chico. Y la verdad que no me divertía mucho jugar. Así que me pasaba el tiempo investigando como funcionaban los programas. Descubrí el mundo de la programación como a los 14 o 15 años. Empezamos con Fede a hacer scripts para mIRC (me acabo de desayunar que todavía existe 🤯). Después hice algunos cursitos de programación y como a los 17 descubrí Linux y el mundo open source.

Sin embargo, siempre tomé a la programación como una herramienta, y me pareció que me iba a sumar más estudiar otra carrera, sobre la que conocía menos. Me decidí por ingeniería en telecomunicaciones. La carrera fue muy interesante y aprendí muchísimo. Pero cuando comencé a trabajar en serio, lo que vi no me gustó mucho.

Empecé a trabajar para una empresa multinacional de telefonía IP. Pero mi trabajo consistía en hacer lo mismo todo el tiempo:

  1. descargar datos de una web
  2. buscar valores dentro de esos datos según ciertas palabras clave
  3. cargarlos en un programa de la empresa

Tenía que hacer eso todo el tiempo. Todo el día. No me malinterpreten, el trabajo fue genial. Aprendí muchísimo sobre como trabajar, como relacionarme mis compañeros de trabajo, trabajábamos off-shore para cuentas en EEUU, así que aprendí muchísimo inglés. Pero pasados unos cuantos meses, se volvió muy repetitivo.

Automatizar

La informática se trata de automatizar. Entonces, armado con mi herramienta de programación me puse a intentar automatizar mi trabajo

Excel

Excel es quizás la "droga de entrada" a la programación. Datos estructurados, funciones, transformaciones, macros, VBA... ¡Está todo dado para empezar! (el único problema: abandonarlo antes de que sea demasiado tarde).

Me puse manos a la obra, tratando de simplificar mi trabajo. Mi planilla fue evolucionando en mas o menos las siguientes etapas:

  1. Acomodar la información: Dispuse un sector de la planilla, donde pegaba la información que bajaba de la web. La planilla, usando solo fórmulas de excel, acomodaba esa información, y me la mostraba de una forma que me hacía mucho mas rápido el proceso de cargar los datos en el programa. Hacía varias sumas, y me ordenaba la información igual que estaba en el software de la empresa. Ahora no tenía que hacer el paso (2) y el paso (3) era mucho más fácil.
  2. Descargar los datos automáticamente: Encontré algunas funciones en VBA que me permitían hacer que la planilla se conectara automáticamente a la web desde donde descargábamos la información. Ahora no tenía que hacer el paso (1).
  3. Cargar los datos automáticamente en el soft de la empresa: Encontré una funcionalidad medio escondida en el software, con la cual se podía cargar un archivo (importar). Y existía la contraparte para exportar la información que ya se había cargado. Usando estas funcionalidades, me fui dando cuenta de como era el formato que recibía el programa (si mal no recuero era algún tipo de XML). Y empecé a programar en la planilla un VBA que generaba ese archivo. Fueron varias iteraciones hasta que logré dar con el formato adecuado. Pero ahora no tenía que hacer el paso (3).

¡Ahora mi "trabajo" era hacer dos clicks! Eso me daba mucho mas tiempo para hacer mejor la parte del trabajo donde yo creía agregar mas valor agregado: pensar con mis equipos de venta las mejores soluciones para nuestros clientes, y seguir evolucionando la herramienta que había creado.

Generar impacto

Una vez que la herramienta más o menos me servía, la compartí con mis compañeros de trabajo para que ellos también pudieran sumar mas valor agregado a la empresa. El feedback que tuve fue increíble. Me dio mucha satisfacción. Incluso años después, mis ex-compañeros de trabajo me contaban que todavía usaban mi planilla. Ahí comencé a pensar que me gustaría hacer un giro en mi carrera hacia el software.

¿Programar es muy difícil?

Muchas veces me cruzo con esta pregunta. O la otra versión en modo no-pregunta: "Para programar hay que ser un nerd o medio genio o algo por el estilo".

No voy a negar que en el ambiente de la programación abunda(¿mos?) los nerds, ñoños, etc. Pero sinceramente creo que es una disciplina que puede aprender cualquier persona con un poco de constancia. Quizás lo que caracteriza al nerd más que su inteligencia, es su carácter algo obsesivo. Y como cualquier cosa que quieras hacer mas o menos bien, es importante tener constancia, practicar y practicar y practicar. No dejarse vencer por frustraciones propias.

La mejor definición que escuché la hizo Roberto Alsina, uno de los referentes de la comunidad python Argentina:

"Programar es tan fácil como jugar al fútbol"

¿Qué tan difícil es jugar al fútbol? Hay que patear una pelota y meterla entre dos palos. Si querés jugar el fulbito de los jueves con los amigos, cualquiera puede. Ahora... Si querés jugar en el Barcelona y llegar a la selección, ¿que tan difícil es jugar al fútbol?

Messi-PNG-Transparent-HD-Photo

Hace falta entrenar muchísimo. Dormirse pensando en patear la pelota. Levantarse pensando en patear tiros libres. Comer bien. Dormir mucho. Y muchos etc... Si querés hacer cualquier cosa a nivel profesional, tenés que dedicarle mucho, mucho tiempo y energía. Pero todo ese esfuerzo es necesario si querés hacer tu trabajo realmente bien. Y tiene sus beneficios.

"Que la inspiración siempre me encuentre trabajando"
Pablo Picasso

La buena noticia, es que a las primeras divisiones de un equipo de fútbol llega solo un puñado de personas. En cambio, hay miles y miles de puestos laborales abiertos para programadores.

Mi humilde sugerencia

Empezar a programar parece una tarea sobrecogedora. ¿Comienzo con un curso? ¿Cuál de los miles de cursos que hay dando vuelta elijo? ¿Con cuál lenguaje de programación de los cientos que hay debería comenzar?

Quizás en parte, el hecho de que la programación sea bastante abstracta lo hace todavía más difícil.

Voy a dar mi humilde opinión sobre como comenzar a aprender y a pensar en una carrera de programación.

Lenguaje de programación

En realidad no importa demasiado. Cualquier lenguaje de programación de alto nivel está bien para comenzar. ¿Mi sugerencia? Python. Python cumple todas las condiciones para ser un buen lenguaje de programación inical. Su sintaxis es simple y elegante, hay toneladas de recursos para principiantes, y la documentación del lenguaje es excelente. La biblioteca base de python viene, como se dice, con "pilas incluidas", o sea que tiene todo lo básico para comenzar con programas elaborados, pero además la cantidad de bibliotecas, herramientas, tooling para desarrolladores disponibles es enorme. Particularmente en Argentina (y seguro que no es exclusivo a este país), la comunidad de python es muy activa, inclusiva y siempre dispuesta a ayudar. Finalmente, Python te puede acompañar desde el comienzo de tu carrera hasta el infinito y mas allá. Programadores de todos los niveles de seniority usan python como su principal lenguaje de programación.

Javascript puede ser otra buena alternativa. Javascript es el lenguaje de programación por defecto en todos los navegadores de internet. Cada vez que ves un comportamiento dinámico en una página web, javascript está involucrado. Pero va mucho mas allá. Con nodejs también se pueden programar todo tipo de poderosos programas en javascript. Inclusive se pueden crear aplicaciones móviles usando solo javascript, con ionic. Otra ventaja es que ya lo tenés instalado con tu navegador. Ya sea chrome, firefox o cualquier otro, todos tienen un poderoso motor de javascript instalado. ¿No me crees? Desde esta misma página, apretá F12, click en "Consola" y ahora escribí alert("Hola mundo!"); Dale enter. Ya ejecutaste tu primer programa. Genial, ¿no?
chrome-console

¿Como empezar?

La programación es incremental. Se comienza por la solución mas simple posible, y se van agregando capas de complejidad a medida que comprendemos lo hecho anteriormente y que sabemos que eso funciona.

Yo empezaría con algo simple. Los cientos de tutoriales que hay en internet pueden ser un buen comienzo. Personalmente, si te interesan las tecnologías web (desarrollar páginas web con mucho contenido dinámico), considero que el tutorial de Django girls es simplemente genial.

Empezá con algo familiar, con un problema conocido. No empieces a hacer "el uber de xxxx". Especialmente, si no tenés ninguna experiencia previa en la vida real con xxxx. O por lo menos, empezá trabajando de forma muy cercana con alguien que si tenga mucha experiencia real trabajando en xxxx. Sino te vas a encontrar de golpe con dos problemas: aprender a programar, y aprender el mundo de xxxx.

Si tenés algo que hacés repetitivamente en la compu y te molesta hacerlo, puede ser un buen lugar para comenzar. Como aquella tarea que tenía que hacer yo en mi primer trabajo.

No pares de aprender. Es otro de los consejos que se aplican a cualquier cosa que uno quiera hacer realmente bien. Pero en programación es especialmente valioso, porque todo se mueve a una velocidad de vértigo. A diario salen frameworks nuevos, nuevas buenas prácticas, conceptos teóricos, patrones de diseño, herramientas, herramientas para usar las herramientas... La cosa se puede tornar un poco sobrecogedora. ¡Pero a no dejarse frustrar! A la larga, la constancia es lo importante. Como la fábula de la liebre y la tortuga, la constancia le termina ganando al talento en el largo plazo.

Aprovechá la enorme cantidad de código que hay disponible en internet. El código open source es tu aliado. No solo porque podés usarlo libremente. Sino también porque ¡podés leer cómo está hecho! Por lo general, los proyectos open source importantes, tienen una base de código bien armada, legible y mantenible. Eso hace que sea "fácil" leerlo. Son una fuente infinita de inspiración. Además, una vez que entiendas el código, podés contribuir a esos proyectos, lo que te va a dar mucha experiencia, que podés usar en futuras búsquedas laborales.

Compartí lo que hacés. Mostrá tu producto, por más tonto que parezca. Mejor si es a gente que te va a dar una buena crítica constructiva. Mostrá tu código. Así como uno acomoda su casa cuando va a recibir visitas, también tiende a escribir mejor código cuando sabe que otra persona lo va a leer.

¿Qué hacemos los programadores?

Hay un montón de cosas que podés hacer en el "rubro de la programación", y no todas incluyen programar. Si tenés más habilidad para las personas que para escribir código, pero te gusta el mundo de la tecnología, también hay lugar para vos. Esta es una pequeña lista de algunas de todas las cosas que hacemos en el rubro.

Programar

Bastante obvio... Pero, ¿qué es programar? Programar es decirle a la computadora lo que tiene que hacer. La computadora es una máquina de seguir órdenes. Es todo lo que sabe hacer. Las sigue al pie de la letra, y es incapaz de hacer nada más ni nada menos que exactamente lo que le pedimos que haga.

Esto tiene algunas consecuencias que me parece, vale la pena notar.

Primero, lo mas evidente: tenemos que decirle exactamente lo que queremos que haga, con mucho detalle. Cada acción y cada consecuencia de esas acciones tiene que estar contemplada. La ubicación de cada botón, los gestos del jugador de fútbol de nuestro jueguito preferido... Lo bueno es que podemos ir armando capas de abstracción, que van facilitando nuestro trabajo. Volviendo al ejemplo del jugador del juego, podemos definir a grandes rasgos como se comportan todos los jugadores; luego definimos algunos movimientos, una gambeta o una patada que solo tienen algunos; un gesto al hacer gol, que solo tiene uno específicamente, y así sucesivamente, vamos construyendo nuestros programas en capas.

Segundo, si algo falla, buscá el problema en el espejo. Las computadoras no se equivocan. Es así de simple. Puede haber alguna falla en un componente subyacente de hardware o de software, pero son ínfimas. Si tu programa falla, apostá todo lo que tenés a que el error es tuyo. Los seres humanos tenemos una tendencia a sacar culpas para afuera. La programación nos enseña otra cosa.

spiderman_blame

Lo que si les puedo asegurar, es que la satisfacción de enfrentarnos a un problema difícil, desafiante y resolverlo es enorme. Solo esos momentos que con suerte son un par a la semana, hacen que todo valga la pena.

Probar (testear en la jerga)

Los programas informáticos tienden a volverse muy complejos, muy rápido. Tenemos que probar cada nueva funcionalidad que queremos agregar a nuestros programas. Pero no solo las nuevas funcionalidades. Muchas veces, al agregar algo, tenemos que modificar parte del funcionamiento del código existente. Entonces, ¡también tenemos que probar las funcionalidades anteriores!

Probar nuestro código es una parte fundamental para entregar programas que funcionan bien. También nos sirve para estar confiados de que el código que vamos a enviar a nuestros usuarios funciona como esperábamos. Pero la verdad, es un trabajo muy repetitivo y a veces tedioso. Y... ¿qué dijimos sobre los trabajos repetitivos y tediosos? ¡Que los haga la máquina!

Por eso escribimos código que prueba el código que escribimos :) y hay programadoras y programadores que se dedican a eso. Todo el mundo tiene que probar su propio código, pero siempre viene bien un par más de ojos y mejor si se dedica a eso, porque ya conoce muchos de los "secretos" y donde se suelen esconder los "bichos" en el software.

Mantener el software funcionando

En estos tiempos, todo está en la nube. Eso significa que el software no corre totalmente en la computadora del usuario, sino en una computadora conectada a internet. Los desarrolladores escriben el código, pero luego hay otra parte muy importante que es hacer funcionar esos programas en la nube, y mantenerlos funcionando rápido y sin errores. También, es importante detectar cuando algo no está funcionando como se espera.

Estas tareas, en general las cubre un rol que llamamos actualmente DevOps. Sería como una mezcla entre un desarrollador y un administrador de sistemas.

Gestionar el proyecto y el equipo

A medida que los equipos de programadores crecen, es muy importante coordinar el trabajo. La programación es un trabajo altamente creativo, y por lo tanto es importante que todos digamos nuestra opinión sobre lo que vamos a hacer y nos escuchemos. Además, los proyectos de software incluyen a muchas personas, algunas técnicas (conocen sobre los programas y cómo hacerlos) y otras no (conocen sobre el problema que el programa intenta resolver).

Tanta gente y tantas opiniones, necesitan de mucha coordinación. Acá entran los "gerentes de proyecto" (PM por sus siglas en inglés), los "líderes de equipo" (TL), "product owner" (nunca lo vi traducido al español :) algo asó como responsable por el producto), etc.. Son roles más blandos en el sentido que no necesitan habilidades muy técnicas pero si mucha habilidad para la comunicación con las personas.

¿Por qué usamos Python?

Hay muchísimos lenguajes de programación diferentes. Cada uno tiene sus características, ventajas y desventajas. Python no es mejor ni peor que los otros, pero tiene algunas características que encontramos muy convenientes.

Bueno para princpiantes y profesionales

Python tiene una sintaxis clara. Muchos principiantes la encuentran mas natural que otros lenguajes de programación. Pero eso no lo hace limitado para nada. Actualmente es uno de los lenguajes más utilizados en entornos profesionales
tiobe_ranking
pypl_ranking
Fuente

En aprendizaje computacional (machine learning) o más popularmente concido como inteligencia artificial (artificial intelligence, AI), python ocupa el primer puesto con diferencia.

Buena documentación

No es para nada un detalle menor. Para todas las librerías, frameworks y componentes de python, existe por lo general una excelente documentación que las acompaña.

Comunidades muy activas

En todo el mundo, las comunidades de desarrolladores de Python son muy activas. En Argentina, eso es particularmente cierto. La comunidad de Python Argentina organiza eventos de clase mundial gratuitos. Si, leyeron bien. La PyCon Argentina es gratuita. Y no es el único evento. PyDays, PyCamp, meetups... Es una comunidad vibrante de gente amable y dispuesta a ayudar. Cuenta con varios canales de comunicación, donde podrás encontrar a toda hora, todos los días del año gente dispuesta a ayudarte con tus dudas. Muy importante: ¡hacé buenas preguntas!

Herramientas para todos los gustos

¿Un framework web que tiene todo incluido para hacer desarrollos web profesionales? ✔️
¿Herramientas que cubren todo el ciclo de vida de desarrollo de inteligencia artificial? ✔️
¿Una biblioteca de funcionalidades para trabajar con datos a la velocidad del rayo? ✔️
¿Una aplicación web para investigar el lenguaje, sus componentes e incluso producir documentos de nivel académico? ✔️

Pero desde ya, Python no es el único lenguaje, y existen lenguajes que pueden ser más apropiados para el problema que intentas resolver. ¡Lo divertido está en la búsqueda!

¡Genial! Te has suscrito con éxito.
¡Genial! Ahora, completa el checkout para tener acceso completo.
¡Bienvenido de nuevo! Has iniciado sesión con éxito.
Éxito! Su cuenta está totalmente activada, ahora tienes acceso a todo el contenido.