<commit_before>---
layout: post
title:  Los hypes y la especialización
subtitle: ¿Qué aprendo ahora?
---

Ser desarrollador no es nada fácil. Y no lo digo por la complejidad que pueda tener la profesión, si no porque es muy difícil saber en qué especializarse. El desarrollo de software tiene muchas variantes, y aunque hay gente muy buena, es imposible saber de todo (los siento DevOps del mundo). Así que al final hay que especializarse en algo. Por ejemplo uno puede hacerse **desarrollador backend**, **desarrollador frontend**, o incluso **administrador de bases de datos**. 

Pero ahí no acaba la especialización. Dentro de cada ramo, puedes especializarte aun más. Si eres desarrollador *backend* puedes especializarte en *C#*, *Java*, o *PHP* (hay gustos para todo). Si eres desarrollador *frontend*, probablemente morirás antes de especializarte en algo, pero mientras tanto podrás aprender *React*, *Angular* o incluso *ELM*. El mundo de las bases de datos parecía más tranquilo, pero no contentos con tener *SQL Server*, *MySQL* u *ORACLE* (léelo al revés, verás que risa), ahora están de modas las bases de datos no relacionales. Así que puedes ser especialista en *MongoDB*, *Redis* o *Neo4j*. Nadie dijo que la vida fuera fácil ¿verdad?

![Meme del hype](http://www.charlascylon.com/img/posts/2016/hype-meme.jpg)

El caso es que el tiempo de cualquier persona es finito, así que al final te quedan dos opciones principales: utilizar algún lenguaje/tecnología/plataforma *mainstream* o intentar adivinar cual será el lenguaje/tecnología/plataforma que partirá la pana en el futuro. Y eso queridos amigos, no es nada fácil. Porque los desarrolladores somos tan volubles como los tertulianos de los programas balompédicos. Lo que hoy es *lo más*, mañana es *lo menos*. Y con esos *hypes* continuos, tenemos que vivir.

## El hype

En Internet un *hype* es cuando las expectativas sobre algo se elevan tanto, que todo el mundo habla de ello. Ese algo, que puede ser una película, un libro, o un lenguaje de programación, está en boca de todo el mundo. No se oyen críticas. **Todo es bueno, divertido, y si hablamos de TI, seguramente estaremos ante la tecnología que va a acabar con el resto de tecnologías del mismo tipo**. Ahí tú piensas que has encontrado algo en lo que puedes centrarte. Si aprendes esa tecnología o lenguaje, vas a ser un profesional demandado y vas a ganar mucho dinero.  ¡Pero cuidado! Igual estás siguiendo una moda, y esa moda no tiene porque perdurar en el tiempo.


## El ciclo de sobreexpectación


![Imagen del gráfico de Gartner](http://www.charlascylon.com/img/posts/2016/gartner.png)

Este fenómeno es bastante común, y ha sido explicado en numerosas ocasiones. Gartner, una empresa de consultoría especializada en TI, acuñó el término *ciclo de sobreexpectación* normalmente se aplica a tecnologías o conceptos como *Big Data*, *Internet de las cosas* etc. Yo creo que el fenómeno es más social, y puede aplicarse a muchas cosas. Por ejemplo al desarrollo de software.

Este ciclo se compone de cinco fases bien diferenciadas.  La primera es el lanzamiento. Una tecnología llama la atención cuando es lanzada. La prensa especializada, que en desarrollo serían los blogs, y las redes sociales empiezan a propagar sus bondades. Las personas que usan esa tecnología empiezan a entusiasmarse. Cada vez es más fácil encontrar fuentes en Internet hablando sobre lo bien que funciona la tecnología, de lo fácil que es usarla, y de como les ha cambiado la vida. La bola va creciendo hasta llegar a la fase dos: *el pico de expectativas sobredimensionadas*. 

Ahí mucha gente empieza a darse cuenta de que no es oro todo lo que reluce. La tecnología no es tan fácil de usar como se prometía. Además tiene fallos (seguramente propios de una versión temprana), o resulta que otra tecnología más antigua ya hacía lo mismo, y además mejor. O que simplemente no tiene ninguna utilidad práctica. Recibe muchas críticas, algunas muy fuertes. Al final acaba llegándose a la siguiente fase: *el abismo de desilusión*. La moda ha pasado, y ya no es *cool*, utilizar esa tecnología. ¿Quién iba a usar algo tan malo? 

Pero algunas tecnologías, son capaces de salir de este pozo y empiezan la siguiente fase. Esta fase es la *rampa de consolidación*. Y es que tras una nueva versión que corrige algunos de los problemas existentes, se puede ver que la tecnología es capaz de aportar valor. Es cierto que no va a solucionar la vida de nadie, ni tampoco va a cambiar el mundo tal y como lo conocemos, pero para según qué cosas, es una tecnología útil. Poco a poco la adopción de esa tecnología va creciendo hasta que se llega a la fase de *meseta de productividad*. Ahora estamos ante una tecnología madura, con actualizaciones constantes y que aporta beneficio a clientes, partners y desarrolladores.

[En este enlace](http://www.gartner.com/smarterwithgartner/whats-new-in-gartners-hype-cycle-for-emerging-technologies-2015/), se pueden ver algunas de las tecnologías más novedosas, y el estado en el que se encuentran actualmente, según Gartner y en el año 2016. Por ejemplo conceptos tan de moda como *Internet of Things* o *Machine learning* están en la fase de sobreexpectación y tirando hacia el abismo de desilusión. 


## El ciclo del hype aplicado a la programación

Este curioso ciclo, puede aplicarse a cualquier tecnología de desarrollo, ya sean lenguajes de programación, plataformas de desarrollo o frameworks. Por ejemplo hace unos años empezó a hablarse de *Node.js*. *Javascript* en el servidor iba a ser el nuevo paradigma. Es rápido y fácil de utilizar. Se es mucho más productivo y puedes hacer aplicaciones como churros. Pero pronto se empezaron a escuchar críticas. Es difícil de usar en proyectos grandes. No siempre es tan rápido. *Javascript* es un mal lenguaje. *Node* dejó de ser *lo más*, para pasar a ser *lo menos*. Lo mismo pasó con Angular, ya que uhbo un momento en el que parecía que todo el mundo iba a acabar desarrollando *SPA*. Últimamente he escuchado cosas similares de los microservicios y *Docker*. Es agotador, porque si estás pensando aprender alguna de esas tecnologías, es probable que acabes dejándolo para otro momento.

## Siempre aprendiendo. ¿Pero qué aprendo?

Una de las cosas que más me agobian, es que tengo la sensación de que siempre voy varios pasos por detrás. Por mucho que quiera, no puedo estar al día de todo. Hay días en los que eso es una losa que me pesa bastante, porque me quedo con el *run run* de no ser lo ser lo bastante bueno. Pero por suerte para los que nos dedicamos a esto, es fácil acceder a los recursos necesarios para poder formarse. No se puede aprender todo, pero puedes aprender muchas cosas, así que yo para elegir que aprender sigo las siguientes pautas:

 - **Aprender cosas atemporales y aplicables a diferentes tecnologías**. Por ejemplo patrones de diseño, buenas prácticas de programación, técnicas de *refactoring*, *testing* etc.
 - **Salir de la zona de confort**. Yo por ejemplo me dedico principalmente a programar en *C#*. Podría seguir con el stack .NET, pero eso sería demasiado aburrido. Así que intento aprender cosas que abran mi mente, como Elixir usando Spacemacs. O aprender cosas dónde sé que a día de hoy estoy más flojo, como es la parte de *frontend*.
 - **Más hacer y menos pensar**. Reconozco que esta parte es más reciente, ya que aunque suelo tener ideas, nunca las llevo a cabo. Las ideas dejan de parecerme interesantes con el tiempo y las abandono antes de empezar a hacer algo. Estoy cambiando en chip en ese sentido, para **aprender haciendo**. Probablemente lo que haga no será bueno, tendrá muchos, y será un churro, pero habré conseguido el objetivo que es el de aprender.

No sé si será la mejor manera, pero al menos puedo centrarme en algo. Así la sensación de no estar aprendiendo lo suficiente se marcha, y puedo concentrarme en aprender ¿Qué esas cosas no tienen utilidad práctica? Bueno, pero al menos me lo habré pasado bien.<commit_msg>Post changes<commit_after>---
layout: post
title:  Los hypes y la especialización
subtitle: ¿Qué aprendo ahora?
---

Ser desarrollador no es nada fácil. Y no lo digo por la complejidad que pueda tener la profesión, si no porque es muy difícil saber en qué especializarse. El desarrollo de software tiene muchas variantes, y aunque hay gente muy buena, es imposible saber de todo (los siento DevOps del mundo). Así que al final hay que especializarse en algo. Por ejemplo uno puede hacerse **desarrollador backend**, **desarrollador frontend**, o incluso **administrador de bases de datos**. 

Pero ahí no acaba la especialización. Dentro de cada ramo, puedes especializarte aun más. Si eres desarrollador *backend* puedes especializarte en *C#*, *Java*, o *PHP* (hay gustos para todo). Si eres desarrollador *frontend*, probablemente morirás antes de especializarte en algo, pero mientras tanto podrás aprender *React*, *Angular* o incluso *ELM*. El mundo de las bases de datos parecía más tranquilo, pero no contentos con tener *SQL Server*, *MySQL* u *ORACLE* (léelo al revés, verás que risa), ahora están de moda las bases de datos no relacionales. Así que puedes ser especialista en *MongoDB*, *Redis* o *Neo4j*. Nadie dijo que la vida fuera fácil ¿verdad?

![Meme del hype](http://www.charlascylon.com/img/posts/2016/hype-meme.jpg)

El caso es que el tiempo de cualquier persona es finito, así que al final te quedan dos opciones principales: utilizar algún lenguaje/tecnología/plataforma *mainstream* o intentar adivinar cual será el lenguaje/tecnología/plataforma que partirá la pana en el futuro. Y eso queridos amigos, no es nada fácil. Porque los desarrolladores somos tan volubles como los tertulianos de los programas balompédicos. Lo que hoy es *lo más*, mañana es *lo menos*. Y con esos *hypes* continuos, tenemos que vivir.

## El hype

En Internet un *hype* es cuando las expectativas sobre algo se elevan tanto, que todo el mundo habla de ello. Ese algo, que puede ser una película, un libro, o un lenguaje de programación, está en boca de todo el mundo. No se oyen críticas. **Todo es bueno, divertido, y si hablamos de TI, seguramente estaremos ante la tecnología que va a acabar con el resto de tecnologías del mismo tipo**. Ahí tú piensas que has encontrado algo en lo que puedes centrarte. Si aprendes esa tecnología o lenguaje, vas a ser un profesional demandado y vas a ganar mucho dinero.  ¡Pero cuidado! Igual estás siguiendo una moda, y esa moda no tiene porque perdurar en el tiempo.


## El ciclo de sobreexpectación


![Imagen del gráfico de Gartner](http://www.charlascylon.com/img/posts/2016/gartner.png)

Este fenómeno es bastante común, y ha sido explicado en numerosas ocasiones. Gartner, una empresa de consultoría especializada en TI, acuñó el término *ciclo de sobreexpectación* normalmente se aplica a tecnologías o conceptos como *Big Data*, *Internet de las cosas* etc. Yo creo que el fenómeno es más social, y puede aplicarse a muchas cosas. Por ejemplo al desarrollo de software.

Este ciclo se compone de cinco fases bien diferenciadas.  La primera es el lanzamiento. Una tecnología llama la atención cuando es lanzada. La prensa especializada, que en desarrollo serían los blogs, y las redes sociales empiezan a propagar sus bondades. Las personas que usan esa tecnología empiezan a entusiasmarse. Cada vez es más fácil encontrar fuentes en Internet hablando sobre lo bien que funciona la tecnología, de lo fácil que es usarla, y de como les ha cambiado la vida. La bola va creciendo hasta llegar a la fase dos: *el pico de expectativas sobredimensionadas*. 

Ahí mucha gente empieza a darse cuenta de que no es oro todo lo que reluce. La tecnología no es tan fácil de usar como se prometía. Además tiene fallos (seguramente propios de una versión temprana), o resulta que otra tecnología más antigua ya hacía lo mismo, y además mejor. O que simplemente no tiene ninguna utilidad práctica. Recibe muchas críticas, algunas muy fuertes. Al final acaba llegándose a la siguiente fase: *el abismo de desilusión*. La moda ha pasado, y ya no es *cool*, utilizar esa tecnología. ¿Quién iba a usar algo tan malo? 

Pero algunas tecnologías, son capaces de salir de este pozo y empiezan la siguiente fase. Esta fase es la *rampa de consolidación*. Y es que tras una nueva versión que corrige algunos de los problemas existentes, se puede ver que la tecnología es capaz de aportar valor. Es cierto que no va a solucionar la vida de nadie, ni tampoco va a cambiar el mundo tal y como lo conocemos, pero para según qué cosas, es una tecnología útil. Poco a poco la adopción de esa tecnología va creciendo hasta que se llega a la fase de *meseta de productividad*. Ahora estamos ante una tecnología madura, con actualizaciones constantes y que aporta beneficio a clientes, partners y desarrolladores.

[En este enlace](http://www.gartner.com/smarterwithgartner/whats-new-in-gartners-hype-cycle-for-emerging-technologies-2015/), se pueden ver algunas de las tecnologías más novedosas, y el estado en el que se encuentran actualmente, según Gartner y en el año 2016. Por ejemplo conceptos tan de moda como *Internet of Things* o *Machine learning* están en la fase de sobreexpectación y tirando hacia el abismo de desilusión. 


## El ciclo del hype aplicado a la programación

Este curioso ciclo, puede aplicarse a cualquier tecnología de desarrollo, ya sean lenguajes de programación, plataformas de desarrollo o frameworks. Por ejemplo hace unos años empezó a hablarse de *Node.js*. *Javascript* en el servidor iba a ser el nuevo paradigma. Es rápido y fácil de utilizar. Se es mucho más productivo y puedes hacer aplicaciones como churros. Pero pronto se empezaron a escuchar críticas. Es difícil de usar en proyectos grandes. No siempre es tan rápido. *Javascript* es un mal lenguaje. *Node* dejó de ser *lo más*, para pasar a ser *lo menos*. Lo mismo pasó con Angular, ya que hubo un momento en el que parecía que todo el mundo iba a acabar desarrollando *SPA*. Últimamente he escuchado cosas similares de los microservicios y *Docker*. Es agotador, porque si estás pensando aprender alguna de esas tecnologías, es probable que acabes dejándolo para otro momento.

## Siempre aprendiendo. ¿Pero qué aprendo?

Una de las cosas que más me agobian, es que tengo la sensación de que siempre voy varios pasos por detrás. Por mucho que quiera, no puedo estar al día de todo. Hay días en los que eso es una losa que me pesa bastante, porque me quedo con el *run run* de no ser lo ser lo bastante bueno. Pero por suerte para los que nos dedicamos a esto, es fácil acceder a los recursos necesarios para poder formarse. No se puede aprender todo, pero puedes aprender muchas cosas, así que yo para elegir que aprender sigo las siguientes pautas:

 - **Aprender cosas atemporales y aplicables a diferentes tecnologías**. Por ejemplo patrones de diseño, buenas prácticas de programación, técnicas de *refactoring*, *testing* etc.
 - **Salir de la zona de confort**. Yo por ejemplo me dedico principalmente a programar en *C#*. Podría seguir con el stack .NET, pero eso sería demasiado aburrido. Así que intento aprender cosas que abran mi mente, como Elixir usando Spacemacs. O aprender cosas dónde sé que a día de hoy estoy más flojo, como es la parte de *frontend*.
 - **Más hacer y menos pensar**. Reconozco que esta parte es más reciente, ya que aunque suelo tener ideas, nunca las llevo a cabo. Las ideas dejan de parecerme interesantes con el tiempo y las abandono antes de empezar a hacer algo. Estoy cambiando en chip en ese sentido: **Learn by doing**. Probablemente lo que haga no será bueno, tendrá muchos fallos, y será un churro, pero habré conseguido el objetivo principal: aprender algo.

No sé si será la mejor manera, pero al menos puedo centrarme. Así la sensación de no estar aprendiendo lo suficiente se marcha, y puedo concentrarme en seguir creciendo como desarrollador de sofware ¿Qué esas cosas no tienen utilidad práctica? Bueno, pero al menos me lo habré pasado bien.
{'fraction_non_alphanumeric': 0.048294389603898535, 'fraction_numerical': 0.0021242034237161063, 'mean_word_length': 4.493136582017845, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 6, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2144577', 'n_tokens_mistral': 5064, 'n_tokens_neox': 4982, 'n_words': 2572}