Mamá, yo quiero ser programador web

Hace poco un colega programador me pidió un consejo. Él se especializa en aplicaciones y tenía la necesidad de incursionar en el web para un proyecto, pero no sabía dónde empezar. Para los desarrolladores web es muy natural conocer de muchos lenguajes (no dominar, pero sí conocer), frameworks, herramientas, etc. pero la pregunta en cuestión se me figuró sumamente complicada de contestar: ¿cuál es el bueno? ¿cuál aprendo?

alt

Básicos para programación web

Hay tres caminos para la programación web (aunque como todo, hay grados entre ellos, pero bueno, digamos que la división se reduce a):
- Frontend: se encarga de todo lo que corre del lado del cliente. Esto es, el maquetado, las animaciones, el código que controla las interacciones y la comunicación con el backend. Suena sencillo, pero tiene un buen grado de complejidad y puede llegar a tener aplicaciones no tan obvias, como desarrollo de juegos, aplicaciones móviles o webapps como Google Docs. - Backend: se encarga de procesar del lado del servidor, incluyendo la comunicación con bases de datos. El backend es el típico programador que analiza datos, optimiza y se encarga de que cuando un usuario se registra en un sitio, la información se quede almacenada en la nube y pueda ser consultada después. Suele verse como una actividad menos creativa que la del frontend, pero tiene varias aplicaciones como análisis de big data, generación de multimedia al vuelo, manipulación de servers que la hacen compleja e interesante. - Fullstack: el fullstack se encarga de los dos aspectos anteriores (ojo, todos los programadores web deberían saber de ambos mundos, pero el fullstack intenta especializarse en los dos a la vez). Puede parecer tentador y conveniente decidirse por este camino, pero honestamente en mis años de experiencia encuentro que los programadores siempre se inclinan hacia uno u otro lado y el tiempo invertido en el aspecto sobrante evita que se especialicen en serio en algo. El que mucho abarca, poco aprieta, dicen por ahí.

Lenguajes web

Antes de comenzar a hablar sobre los lenguajes, quisiera hacer una mención especial:

HTML / CSS

En sí mismos, éstos no son lenguajes de programación. HTML es un lenguaje de markup, lo que significa que sirve para estructurar y mostrar contenidos. Para trabajar en web, es indispensable conocerlo y manejarlo, ya que es la base de toda la información que vemos en un navegador. La realidad HTML es muy sencillo; hay que conocer los tags y su propósito para utilizarlo bien pero no tiene mayor exigencia a nivel lógico. Por otro lado, CSS es un lenguaje de estilos que sirve para definir la presentación de un markup language (en este caso, HTML). Con CSS definimos los colores, tipografías, tamaños, posiciones y elementos gráficos para que un sitio tenga diseño.

alt

Ahora sí, un vistazo por encima a los lenguajes de programación que podemos utilizar en desarrollo web. Obviamente no los mencionaré todos (sería un artículo inmensamente largo) y dado que en lo personal tengo más experiencia con lenguajes de tipado dinámico que con lenguajes de tipado estático, éstos serán los que incluiré en el artículo (considero también que son más sencillos para empezar, aunque la conveniencia de eso es muy debatible).

Javascript

Para un programador frontend, no hay de otra: Javascript es indispensable. Este lenguaje es interpretado directamente por los browsers y se utiliza para dar interactividad y todo tipo de funcionalidades complejas a los sitios. Hay algunas alternativas para programar frontend, pero son supersets de Javascript, que deben compilarse (y convertirse en Javascript plano) antes de poder ser utilizados en un ambiente real. Estas alternativas, como Coffeescript o Typescript, fueron desarrolladas con funcionalidades extendidas como clases (desde ES6 Javascript ya tiene clases, pero eso es ya otra historia), tipeado estático y otras cosas a las que programadores de lenguajes más estrictos están acostumbrados. El lenguaje no es difícil en sí, pero con cuidado, porque es muy fácil hacer algo rápido y mal hecho. Algo importante que mencionar es que desde hace unos años Javascript dejó de limitarse al frontend e incursionó como lenguaje de servidor gracias a NodeJS. Esta plataforma ha tomado mucha fuerza (especialmente en proyectos que requieren comunicación en tiempo real) y permite a los programadores Javascript convertirse en fullstack sin aprender un nuevo lenguaje. Sólo hay que tener presente que por su naturaleza asíncrona, NodeJS es muy diferente a otros lenguajes de server y puede llegar a ser confuso. Respecto a los frameworks de Javascript… me arriesgaría a decir que no existe “el bueno”. En los últimos años la cantidad de frameworks ha crecido enormemente y podemos encontrar un abanico de posibilidades que crece día con día, así que lo mejor es procurar no perderte entre los millones de frameworks que aparecen cada día; empieza con vainilla antes de casarte con ninguna herramienta.

Tip: Todos los programadores web deben saber algo de Javascript. Tarde o temprano será necesario para cualquier proyecto web, a menos que planeen escribir código para 1995.

¿Quiénes lo usan? En el front, todos. En el back, PayPal, Uber

alt

PHP

PHP es un lenguaje open source creado para funcionar en la web, hace más de 20 años. Hoy en día, podría decirse que la mayor parte de la web está creada en este lenguaje. Es un lenguaje sencillo de aprender y al igual que Javascript, permite tener resultados rápidos, pero con el riesgo de que estén mal hechos. Esta es una de las principales razones por las cuales el lenguaje está mal visto en la comunidad actual, ya que es muy fácil cometer terribles prácticas al utilizarlo y al ser tan fácil de abordar, hay un gran porcentaje de noobs con estas costumbres generando sitios llenos de problemas. La realidad es que existen otros lenguajes web que siguen más estándares, no permiten tantas malas prácticas y algunos consideramos que es más agradable codear en ellos por la sintaxis que tienen.

Tip: Es buena idea aprender PHP ya que hay una alta probabilidad de que tengas que meterle mano a algún sitio programado en este lenguaje o desarrollar algo para un cliente que tiene un server LAMP. Pero pon especial atención a las buenas prácticas y procura revisar los frameworks de renombre y ver cómo funcionan, para entender mejor cómo funciona el lenguaje.

¿Quiénes lo usan? Facebook (una parte), Wikipedia, Wordpress

alt

Python

Python es un lenguaje que no es exclusivamente para web, sino que también se utiliza para aplicaciones de escritorio, análisis de datos y otras cosas. Es un lenguaje que está enfocado en ser legible y transparente, lo que hace que la sintaxis sea muy entendible y está libre de detalles como los “;” (esos que causan infartos cuando faltan en PHP), con los tabs como parte de la sintaxis, lo que impide que el código se junte en un bloque visualmente abrumador. Python es muy utilizado en análisis de datos, especialmente en investigación, machine learning y big data.

Tip: Python en su sintaxis no utiliza corchetes ni otros símbolos comunes en varios lenguajes. Esto a la larga hace que sea rápido escribirlo y a su vez más legible.

¿Quiénes lo usan? Spotify, Netflix, Google, Dropbox alt

Ruby

La premisa de los programadores de Ruby para utilizar el lenguaje es que “es divertido”. Esto es porque Ruby abstrae muchos de los detalles complejos de otros lenguajes, de modo que se pueden generar resultados rápidos con menos líneas. El framework por excelencia para Ruby es Rails y en conjunto permiten el desarrollo de web apps o sitios administrables en cuestión de pocos días (o menos, si eres pro).

Tip: Antes de aprender Ruby, forma una amistad con el CLI (command line interface), o sea la consola o terminal. Y antes de aprender Rails, experimenta con Ruby, ya que no son la misma cosa aunque muchos programadores lo manejen así.

¿Quiénes lo usan? Github, Airbnb, Hulu

alt

Otros lenguajes (que son de tipado estático) que pueden utilizarse para desarrollar web son C, C++, C# (con .NET) o Java. Estos tienen una curva de aprendizaje más marcada y requieren una formación más estricta en programación, pero son muy robustos y utilizados ampliamente para desarrollos grandes.

Entonces... ¿cuál elegir?

A nivel popularidad en la comunidad, Javascript ha ganado mucho empuje recientemente, con un alza en los requerimientos de frontend. Dentro de las tecnologías más populares, se corona como la primera y NodeJS como la onceava.

alt (Stack Overflow es LA comunidad de programadores. Se hacen preguntas y se dan respuestas a todo tipo de dudas de programación y es muy popular entre los pro y los noobs).

A nivel de proyectos, herramientas y librerías, Github también se inclina por Javascript hasta el 2015.
alt

En cuanto a personas aprendiendo el lenguaje, las búsquedas en Google de tutoriales y cursos para cada uno:
alt

La elección del lenguaje parece crucial cuando vas a empezar. Pero la realidad es que no lo es tanto, con el tiempo y la experiencia van surgiendo nuevas necesidades de aprender y pasar de un lenguaje a otro no es tan difícil como parece. No hay que tener miedo a equivocarse y aprender “la tecnología equivocada” porque todo conocimiento es útil y genera experiencia y formación que de una u otra forma sirven. No existe “el bueno”. Existe “el adecuado” para cada proyecto. Como me dijo uno de mis maestros de programación: Para quien sólo tiene un martillo, todo le parece un clavo.

alt