Lo que aprendí sobre la programación en 10 AÑOS DE EXPERIENCIA

Esto es lo que aprendí durante mis primeros 10 años como programador hasta convertirme en un desarrollador de software profesional.

Categorías
Sector IT y empleo

Cómo me convertí en programador

10 años equivalen a 120 meses, 521,429 semanas o 3650 días. 3650 oportunidades de despertarte por la mañana y hacer aquello que debes para acercarte a la vida que quieres conseguir.

YouTube player

Estamos en 2024 y hace 10 años escribí mi primera línea de código de C++ en la universidad. Hoy, con 28 años, me dedico a la programación y he trabajado como programador en consultoras internacionales con cientos de empleados, en pequeñas startups con productos innovadores, como desarrollador de videojuegos y hasta he tenido mis cameos como profesor de cursos de programación para empresas.

Con esto, no quiero dármelas de couch, ni decir que no haya perdido el tiempo en estos 10 años. Porque en eso también soy un profesional. Pero creo que este aniversario es un buen momento para compartir lo que pensaba sobre la programación en cada una de las fases por las que he pasado durante estos años.

Soy Carlos Sala, desarrollador de software, y ésto es lo que aprendí sobre la programación después de 10 años de experiencia.

(2010) Prólogo: buscando dinero en Internet

Como integrante de una familia numerosa de cinco hermanos, durante mi infancia y adolescencia, la única forma de conseguir dinero era esperar a que llegara la Navidad o mi cumpleaños.

Buscando dinero en Internet.

No vivíamos en un nivel de pobreza extrema. Pero a partir de los 15 años, cuando empecé a salir con mi primera novia, cada vez con más frecuencia tenía que pedir subvenciones a mis padres para ir al cine, a cenar o a comprarme una bolsa de pipas.

Como esto me parecía egoísta, porque sabía que éramos muchos hermanos, decidí utilizar mi Acer Aspire One de 1GB de RAM para algo que no fuera jugar al World of Warcraft y busqué en Google: cómo ganar dinero en Internet.

Primer contacto con los negocios online

Después de visitar decenas de páginas con estafas para gente desesperada, llegué a Forobeta, que es uno de los mayores foros de negocios online de habla hispana.

Forobeta. Foro hispano de negocios online.

En Forobeta, además de muchas otras estafas, descubrí y seguí diferentes formas de ganar dinero como los sistemas de referidos PTC y PTR; los Auto surfers; uploading de películas, series y nopor a foros como Taringa; trabajos como redactor pagados por palabras; y, finalmente, descubrí cómo crear una página web en Blogger y WordPress para monetizarla más tarde con una red de anuncios como Adsense.

Durante 3 años, estuve experimentando con los negocios online, gané unos cuantos cientos de dólares por PayPal, y también, sin saber muy bien que era, hacía pequeñas modificaciones del código HTML, JavaScript y PHP de mis blogs siguiendo tutoriales que encontraba por Internet.

Eligiendo una carrera universitaria  

En este punto, yo ya tenía 18 años, tenía que elegir una carrera para ir a la universidad, pero aún no sabía que existía el trabajo de programador.

Como me gustaba trabajar desde el ordenador y quería entender más a fondo cómo funcionaban las páginas web y los videojuegos, me apunté al grado de ingeniería multimedia, que es una variante de ingeniería informática con algunas asignaturas de gráficos 3D, animación y desarrollo de videojuegos.

Eligiendo la carrera universitaria de ingeniería multimedia.

Por suerte, sin saberlo había elegido la que creo que es la profesión que más encaja con mi forma de ser; porque como ya he dicho otras veces, yo cuando intentaba encontrar trabajos de cara al público, no me contrataban ni en los supermercados.

Al acabar ese último verano de instituto, me mudé a otra ciudad, entré en la universidad y, después de este prólogo, es cuando de verdad empiezan mis primeros 10 años como programador.

(2014) La universidad: descubriendo la programación 

Aprender programación en ingeniería, en la universidad, puede ser apasionante o una pesadilla. Dependiendo de cuánto estés dispuesto a estudiar.

Aprender a programar es difícil.

Para quien no lo sepa, en muchas universidades los primeros algoritmos se escriben en papel, sin utilizar un ordenador. Así, sólo si de verdad entiendes lo que vas a escribir, puedes responder al ejercicio.

¿Es difícil programar?

Los primeros exámenes de programación fueron una masacre donde suspendía más del 90% de los alumnos. Incluido yo mismo, que al principio no entendía los conceptos de variable, función o las estructuras de control.

Aprender programación, que es algo muy diferente al resto de cosas que hayamos aprendido en nuestra vida, tiene un coste en tiempo y esfuerzo que tienes que pagar, cuanto antes mejor, para entender el código que escribes y disfrutar programando.

Libro Cómo programar en C++ de la editorial Deitel.

Así que decidí salir del pozo en el que estaba metido, conseguí el libro recomendado por la asignatura de programación (C++: How to Program, de la editorial Deitel) y lo terminé junto a los ejercicios prácticos en unas semanas.

Lo que parecía imposible ahora se me hacía muy sencillo y pasé de suspender los exámenes a ser uno de los mejores de la clase. Además, como todos los lenguajes de programación orientados a objetos comparten conceptos muy parecidos, pude reciclar lo que aprendí sobre objetos, clases, herencia, templates, estructuras de datos y polimorfismo de ese libro, cuando más tarde aprendimos Java, JavaScript, Python y PHP en la Universidad.

Como puedes imaginarte, en la universidad sólo había 2 tipos de estudiantes de programación: los que la amaban y los que la odiaban. Los que decidieron aprender a programar y los que no.

(2017) El síndrome de Steve Jobs

Para cuando estaba en tercero de carrera, ya había aprendido en la universidad y en mi tiempo libre, a desarrollar aplicaciones móviles en Java, scripts de terminal, páginas web con JavaScript y PHP y videojuegos en C# con el motor Unity.

Snake II: Classic Mobile Game

El desarrollo de videojuegos fue especialmente importante para mí, ya que para fijarme un objetivo mientras aprendía Unity, decidí desarrollar una copia del Snake II que venía en los teléfonos Nokia 3310, para smartphones. Me encantaba ese juego y tardé 3 meses en replicarlo píxel por píxel.

YouTube player

Casualmente, ese año se lanzó una reedición del Nokia 3310 e Internet se llenó de notas de prensa nostálgicas recordando el teléfono y el clásico Snake II. Así que en sólo unos meses, mi juego se viralizó y alcanzó los 2 millones de descargas, con reviews muy positivas por su fidelidad al original y picos de hasta 4000 descargas diarias.

Por desgracia, no supe cómo monetizarlo de forma adecuada. Además la mayoría de los jugadores eran de Brasil e India, que son 2 de los países donde menos dinero puedes ganar con anuncios. Estuve ganando entre 100 y 400 euros mensuales durante 2 años y a día de hoy sigue generando algo, pero es residual.

Dejo la universidad.

Haber tenido éxito con el primer juego que hice, ya sea porque escogí un proyecto con el tamaño lo suficientemente pequeño para terminarlo o porque por casualidad se hizo viral, me hizo tener una imagen irreal del desarrollo de software y por ese entonces pensaba que era un genio de la programación y que yo solo sería capaz de desarrollar cualquier proyecto. Esto es lo que yo llamo el síndrome de Steve Jobs.

Dejo la universidad.

A lo anterior, hay que sumarle que entre las fiestas universitarias y una ruptura sentimental con mi novia por ese entonces, arrastraba el mal hábito de fumar ?mari? a diario. Por lo que tenía la cabeza en las nubes todo el día y en lugar de cumplir con mis obligaciones, soñaba despierto.

Con la percepción de la realidad totalmente alterada, me embarqué en el desarrollo de varios juegos más, demasiado ambiciosos para un solo programador. Todos fueron un fracaso igual que mis resultados en la universidad, porque había dejado de ir a clase y cuando iba era o borracho o fumado.

Meme de desarrollar videojuegos fumao.

Estaba entre tercero y cuarto de carrera, sin dinero y desmotivado, así que decidí hacerme un currículum de programador para entrar en el mundo laboral.

(2018) El mundo laboral: perfeccionando el código

En menos de un mes, encontré mi primer trabajo como desarrollador fullstack con Vue y Node en una startup llamada Tripnastic, para conectar a viajeros con agentes de viaje sin las comisiones que añaden las agencias de viajes.

Para ese entonces, llevaba ya 4 años programando todos los días a todas horas, todo tipo de proyectos. Era capaz de resolver la mayoría de problemas que iban apareciendo conforme programaba, consultando la documentación de las librerías. Pero tenía un punto débil: me faltaban conocimientos sobre arquitectura de software.

Arquitectura de software, patrones de diseño y buenas prácticas

Aunque lo que programaba era funcional, la estructura de carpetas de los proyectos y los patrones de código que empleaba eran más creativos que eficientes.

Arquitectura de software y patrones de diseño.

Los patrones de diseño son soluciones a problemas comunes que se dan en proyectos de software que conviene aplicar cuando nos topamos con uno de estos conocidos problemas. Por nombrar algunos:

  • El singleton, que es un mecanismo para gestionar una única instancia global de un objeto.
  • El patrón factory, que es una función que genera instancias de un objeto sin tener que llamar al constructor de la clase.

Aplicar patrones de diseño populares, elegir una estructura de carpetas adecuada para el proyecto según su tamaño, y llevar a cabo buenas prácticas como el testing; te permite reducir los tiempos de mantenimiento y extensión del software para ti y para otros desarrolladores. Pues será más sencillo encontrar los errores al debuggear o añadir nuevas funcionalidades siguiendo los patrones elegidos.

6 años de maduración profesional

No voy a entrar en detalle en cada una de las experiencias profesionales que he tenido, para no hacer esto aburrido. Pero son unas cuantas:

  • (2018 – 2019) En Tripnastic, el marketplace de viajeros, estuve 1 año hasta que se decidió cerrar el proyecto.
  • (2019) Trabajé en una empresa de soluciones digitales llamada Estudio Cactus con React, React Native y Angular. Pero lo dejé porque no conocía a nadie en la ciudad en la que estaba la oficina.
  • (2019 – 2020) Volví a Valencia, la ciudad en la que había estudiado en la Universidad, y entré en Flamingueo, un conocido ecommerce en el ecosistema de startups de Valencia, que estaba desarrollando una aplicación en Vue y Node. Al llegar la pandemia, tuvieron que hacer recortes en la plantilla y cerraron el proyecto en el que yo trabajaba.
  • (2020) Gracias a un contacto, entré en Codigames, la desarrolladora de videojuegos para móviles más importante de España. Pero decidí dejarlo porque solo hacíamos reskins en Unity del mismo juego, cambiando la temática.
  • (2020 – 2021) Abrí mi canal de YouTube y estuve un año en GeeksHubs, combinando desarrollo de software en Angular con cursos de programación, hasta que recibí la oferta de una startup por casi el doble de mi salario.
  • (2021-2022) Internxt es una startup que ofrece un servicio de almacenamiento encriptado en la nube. Estuve desarrollando, junto a otros desarrolladores, la versión web y móvil en React y React Native. Aquí es cuando empecé a publicar código open source en GitHub. Después de algo más de un año, sentí que el proyecto no se dirigía a ninguna parte y volví a cambiar de trabajo.
  • (2022 – Actualidad) Actualmente, trabajo como programador frontend en React y Angular en una pequeña consultora de Madrid, llamada Milú, donde desarrollamos soluciones digitales de diferentes tamaños para otras empresas.

En estos 6 años, además de reforzar mis puntos débiles en arquitectura y especializarme en desarrollo frontend, entendí lo equivocado que estaba hace unos años cuando pensaba que era un superdotado de la programación.

Respositorio de GitHub React Native Clean Architecture.

La experiencia de trabajar en un proyecto detrás de otro me había hecho chocar contra la realidad del desarrollo de software. Y la realidad era más aburrida y decepcionante de lo que yo pensaba.  

Las ideas son ilimitadas, tu tiempo no

Cada día soy más fiable con las estimaciones del tiempo que va a llevarme realizar una tarea y conozco el ritmo al que avanza un programador medio en una jornada laboral. Por eso, me he dado cuenta de lo enfocado que hay que estar en la misma idea durante un tiempo determinado, para terminar cualquier proyecto de software.

Desarrollar un producto, por simple que sea, que cumpla los estándares de calidad que esperan los usuarios y publicarlo, ya es lo suficientemente difícil para hacerte fracasar. Así que imagínate qué pasa cuando intentas implementar ideas innovadoras. Si quieres te lo digo yo: que el tiempo de desarrollo se dispara de meses a años.

Tus ideas son ilimitadas, tu tiempo no.

Aunque no me guste, he aprendido que las ideas están sobrevaloradas, ya que por mucho que lo intentes no puedes programar al mismo ritmo que tu cabeza genera nuevas ideas. Podar estas nuevas ideas cuando ya estás trabajando en un proyecto, ser organizado con tus pensamientos, es fundamental para cualquier programador. Y por desgracia he tenido que dejar muchos proyectos sin terminar para darme cuenta de esto.

Tus ideas son ilimitadas, pero tu tiempo no.

Programación y motivación

Hoy, como desarrollador senior, siento que cuanto más realista soy, más difícil me parece volver a lanzar un proyecto exitoso como el juego del Snake con el que, sin ninguna pretensión, aprendí a programar videojuegos cuando volvía a casa de la universidad. ¿Acaso fue todo suerte? ¿O existe una fórmula para conseguir lo improbable mezclando ignorancia y motivación?

Al no saber que existían los límites, todo parecía posible. Tan fácil como decidirse a hacerlo. ¿Sabéis a lo que me refiero?

Estos han sido mis primeros 10 años como programador y me encantaría que hubiera algo más esperándome en los próximos 10 para volver a romperme los esquemas.

Soy Carlos Sala, desarrollador de software, y ¡nos vemos pronto!

Carlos Sala Samper

Handmade software.