Explicando la programación a personas que no son técnicas

Estos días me he dado cuenta de que con los años mis charlas, conferencias o conversaciones se van enfocando cada vez a audiencias más técnicas. Pero hay un tema que por mucho tiempo que pase parece recurrente, explicar a una audiencia no técnica (un público común) qué es esto de la programación.

Por qué no nos engañemos, las definiciones ‘de diccionario’ que podemos encontrar o las explicaciones en clase por personas de otros ámbitos no es que dejen una idea muy clara, lo cual es normal, yo no me veo explicando con mucha profundidad cosas sobre química, arquitectura o bitcoins más allá de alguna conversación de bar.

Es por eso qué, una vez más voy escribir lo que pienso sobre ello, sobre cómo me gusta explicar este concepto a día de hoy. Algo que ha ido evolucionando igual que yo, pero no voy a buscar información ni a poner referencias a otros blogs, va a ser una carta, una carta improvisada, desenfadada, un monólogo más en cualquier bar, meetup o afterwork que nos gustan tanto.

Hola, como es muy probable que no me conozcas, que hayas llegado a este artículo a través de otra persona, permíteme presentarme.

Me llamo Quique y hace unos 12 años (cuando tenía 13) decidí empezar a estudiar sobre algunos temas muy simples de programación, unos años y después de trabajar por mi cuenta, ser becario en una startup de redes sociales, ser becario en Microsoft Madrid, y haber vivido el crecimiento de Plain Concepts Barcelona (donde sigo ahora), he podido entender los diferentes ámbitos de la programación.

Siendo aún muy joven, pero teniendo la enorme suerte de llevar muchos años en el sector y habiendo viviendo geniales y otras no tan buenas experiencias.

Todo esto ha hecho que año tras año vaya redefiniendo el concepto que tengo de programación y que cada vez que lo explico vaya evolucionando a la vez que la misma programación evoluciona (porqué sí, evoluciona).

Normalmente empiezo a explicar la programación hablando de que hay diferentes lenguajes, pero esta vez permíteme añadir una capa más de abstracción encima de esta. Quiero entrar en los tecnicismos de la manera más amena posible, así que imagina. Imagínate la programación como si este concepto en vez de ser todo lo que piensas que es simplemente fuera lo mismo que el deporte.

Definamos un poco el deporte pues.
Hay muchos tipos de deportes, pero todos forman parte de un súper conjunto, el concepto de deporte. Algunos de ellos se hacen con pelotas de diferentes tamaños y materiales, algunos son en equipo y otros funcionan mejor solos o por parejas. Los deportes van evolucionando con los años, algunos desaparecen y se crean otros nuevos. Su popularidad depende de muchos factores como los sociológicos o los geográficos.

Alguien puede ser bueno haciendo algunos deportes, o un gran deportista especializado en unos en concreto, incluso formar parte de la élite, pero a su vez es muy probable que no tenga ni la más remota idea de otros de ellos. Aunque al final son deportes y si te gusta el deporte, es posible que puedas aprender con facilidad cómo poder manejarte con un deporte totalmente desconocido para ti aunque descubras que no te gusta o no eres demasiado bueno en ello.

Los deportes son variados, son emocionantes, a algunas personas les fascinan y a otras no les generan ni el más mínimo interés y, por supuesto, en el deporte hay machismo desde hace muchos años, aunque las cosas van cambiando poco a poco.

Léelo, léelo otra vez ¿Lo entiendes verdad? No se te hace un concepto muy lejano, vale todo el mundo sabe algo de deporte, probablemente coincidas con muchos de los puntos que he comentado y alguno otro lo explicarías diferente, pero es al fin deporte y podemos hablar de ello con facilidad.

Y si te dijera que la programación, para mí, se parece mucho a lo que acabo de mencionar, ¿Qué te parece? En serio, mira.
Hay muchos ámbitos muy distintos en los que puedes programar, no tiene nada que ver programar un videojuego, programar una aplicación o programar en robótica, IoT, etc. Pero a la vez forman parte de un mismo conjunto con muchas cosas en común, la programación.

Utilizamos una infinidad de herramientas diferentes, dependiendo de muchos factores, así como podrías utilizar un motor gráfico como Wave Engine para hacer videojuegos o utilizarías, por ejemplo, un lenguaje como Swift para crear apps para iOS.

Para programar muchas de estas cosas se trabaja muy bien en equipo, separando responsabilidades por expertise (Backend, Frontend, data, etc) o por features (login, página principal, editar usuarios, etc). Pero también hay otros proyectos (aunque creo que sobretodo otras personas) que funcionan muy bien también sin equipos, por parejas o individualmente (todo esto depende de muchos factores).

La evolución de la programación es clara, ya nadie programa juegos para la Game Boy Color y yo hace 5 años no me imaginaba poder tener acceso a programar realidad mixta en unas Hololens.

Por supuesto la popularidad de las diferentes cosas que se programan depende de un montón de factores, no se utilizan las mismas apps en Estados Unidos que en Europa, ni los mismos dispositivos en España que en la Índia, también se utilizan diferentes juegos o programas según la edad, los gustos y en algunas ocasiones los géneros.

A los programadores en general se nos clasifica, lo hace más sencillo. Pero es cierto que a un programador se le puede dar bien crear apps y webs, o ser un experto en crear videojuegos y no tener ningún interés en trabajar con datos. También he tenido la oportunidad de conocer a algunos genios que son capaces de programar cualquier cosa en cualquier ámbito y estar al nivel de cualquiera que lleve años haciéndolo.
Por mi parte siempre digo que me he intentado especializar más en la parte creativa de la programación, clasificado en el área de Frontend, pero siendo siempre programador y ayudando a mi equipo programando bots o cualquier cosa en la que pueda aportar en apps o en el servidor, siendo claramente donde mi expertise es mucho menor a la parte en la que me he especializado (Deberías tener esto en cuenta siempre que hables con un programador).

Algunas personas programan porqué es su trabajo y no les desagrada, otras buscan dejar de programar y ser managers, para otros es su hobbie, para algunos es una casualidad estar aquí y para otros es algo que nos apasiona. De hecho, tengo la suerte de ver que hay un montón de gente a la que todo esto les apasiona y es quizá por eso que cuando contactas a alguien que lleva 5 años haciendo aplicaciones con PHP y le ofreces una posición de maquetador con CSS y HTML puede llegar a alucinar y no tomárselo muy bien.

Y sí, hay machismo, pero las chicas del sector están trabajando mucho en ello y dejándose ver otra vez (sí, otra vez ya que varias de las figuras relevantes en los inicios de todo esto eran mujeres). En mi opinión intento no entrar mucho en esa parte, apoyo a mis amigas y a las comunidades que veo sobre este tema, pero realmente creo que no necesitan que nadie les salve, están tomando su propio camino.

Llevo un buen rato escribiendo y ni siquiera he hablado de los lenguajes de programación. Espero que a estas alturas tengas una idea general de lo grande que es el mundo de la programación y lo mucho que puede abarcar sin que haya entrado en ningún detalle técnico, no es lo que busco, no quiero que aprendas que es IoT, ya tienes muchos artículos geniales sobre ello.

Un descanso, tómate un café, o escríbeme para invitarme a uno y te contesto algunas preguntas que tengas sobre el tema, pero prepárate que ahora pasamos a los lenguajes de programación.

Por suerte, los lenguajes de programación me parecen un concepto mucho más sencillo de entender.
Vamos a dejar los deportes un rato, transformemos en los lenguajes de programación en lenguas, Castellano, Inglés, Francés, Chichewa…

Las lenguas nos sirven para comunicarnos, para transmitir un mensaje a uno o varios receptores, muchas de ellas pertenecen a las mismas familias y surgen a partir de unas lenguas padres después de algunos factores evolutivos, sociológicos, geográficos y demás.

Dos personas que hablan dos lenguas distintas pueden entenderse un poco, entenderse bastante o no tener nada que ver, pero al convivir un poco con estas lenguas y gracias a otros factores como la vista o la comunicación no verbal (a parte del estudio, la experiencia, etc) puedes acabar aprendiendo esas lenguas.

Hay personas que solo hablan una lengua, hay otras que tienen un nivel muy alto en algunas de ellas y son capaces de chapurrear alguna otra, también puede ser que la entiendas pero no te veas capaz de mantener una conversación.

Y por supuesto, la pluralidad de estas las hace a todas ellas más ricas, les permite coger algunas características de otras para mejorar a las suyas y por último, cada una tiene su ámbito de acción. No iremos a comprar el pan a la esquina hablando Chichewa, pero podemos irnos a Italia hablando Inglés y sabiendo nada o muy poco Italiano.

No he dicho nada que no supieras ya ¿Verdad?
Pues esto se repite de una manera muy muy parecida en los lenguajes de programación.

Gracias a los diferentes lenguajes de programación podemos crear cosas maravillosas, desde programar un juego hasta enviar un cohete a Marte. Muchos de ellos vienen de otros más antiguos* (C -> C++ -> C++++ es decir C#) que han ido evolucionando y cambiando, otros simplemente han evolucionado ellos mismos y han mejorado sin dar lugar a otros *(JavaScript, diferentes EcmaScript, que es el estándar en el que se basa este que está en constante evolución) y luego tenemos otros que se usan como capas por encima de estos lenguajes pero que acaban generando un código en ese otro lenguaje (TypeScript, del equipo de C# coge cosas nuevas de EcmaScript y otras que no están para poder programar JavaScript con otras sensaciones, ayudando a la escalabilidad)

Alguien que conoce Java, podrá aprender C# sin que sea un proceso muy complejo, aunque probablemente tendrá que ponerle muchas ganas para disfrutar con JavaScript.

Aunque luego se complica todo un poco, ya que, si consideramos JavaScript como un lenguaje de Frontend y Java o C# como lenguajes de Backend, no se nos ocurriría utilizar JavaScript en Backend. Bueno pues sí, de hecho, con JavaScript a día de hoy puedes programar en casi cualquier ámbito, lo cual lo ha convertido en uno de los lenguajes populares aunque por otro lado es de los más criticados por cómo está hecho, su historia y demás.

Por último, encontramos los diferentes ámbitos de la programación, es un trabajo muy motivacional y es muy probable que alguien que sepa mucho JavaScript no tenga interés en Backend o que sea una persona que es capaz de hacer Frontend, Backend incluso apps móviles o videojuegos.

También puede ser que alguien de C# disfrute mucho haciendo algo más de Backend o quizá creando aplicaciones para móviles o de escritorio o incluso apps de realidad virtual o mixta.

Es por eso que podemos encontrar personas que hablen las mismas lenguas o que trabajen con los mismos lenguajes y desempeñen trabajos totalmente distintos.

Por último, están también los lenguajes relacionados con la programación pero que no son programación, así como CSS para estilos o HTML para marcado, no existen programadores de HTML.

Terminando esta carta, si tuvieras que plantear una oferta laboral después de leerla quizá ya no te plantearías simplemente si buscas a un programador Backend o un programador PHP. Espero que también tengas en cuenta muchos otros factores como si es para videojuegos, su debería utilizar varios lenguajes, si ha de saber solo Backend o Frontend y Backend, si quieres que sea una persona más creativa y tenga un criterio a cuanto el aspecto que acaban tomando las cosas, si necesitas que sepa mucho más sobre datos que sobre Frontend, etc.

Sí, la programación implica un montón de factores, un montón de cosas a tener en cuenta y es, para mí, lo que lo hace que sea un mundo tan apasionante, con tanta diversidad y del que se puede aprender cada día.

I use JavaScript, TypeScript, .NET, Node, Cordova and SASS for Web and App development, working at Plain Concepts and HelpDev founder.

Related Posts