Quantcast
Channel: Genbeta dev - Genbeta
Viewing all 564 articles
Browse latest View live

Terraformando tu infraestructura en el Cloud

$
0
0

Terraform

Terraform nos permite describir, evaluar y aplicar cambios en nuestra infraestructura mantenida como código (infrastructure as code).

Creado por Hashicorp y liberado como open source, Terraform se une a productazos de esta misma compañía como Vagrant, Vault, Nomad o Consul, los cuales destacan historicamente por su calidad y flexibilidad.

Introducción

Para iniciarte en Terraform, un buen punto de partida puede ser la charla "Terraform: Managing your Infrastructure as code" que los chicos de @FlyWireEng impartieron en la Software Craftsmanship de Barcelona:

En ella podemos ver en detalle el flujo básico de trabajo con Terraform utilizando uno de sus providers de Cloud como es el de AWS. En cualquier caso, la lista de los providers soportados es simplemente impresionante, ya que uno de sus objetivos principales es el de ser capaz de conectar y coordinar cualquier entorno ya sea Cloud como on-premises. En esta lista de providers, entre otros, podemos encontrar: Azure, Bitbucket, Cloudflare, DigitalOcean, DNSimple, Docker, Google Cloud, Kubernetes, OpenStack, OVH, PostgreSQL y muchos más.

Terraform y su provider de AWS

Para que te sea más sencillo iniciarte en Terraform, vamos a crear un proyecto nuevo basado en el provider de AWS. Crearemos así un directorio hello-terraform-aws y dentro, generaremos la descripción inicial de la infraestructura en el fichero main.tf con el siguiente contenido:

resource "aws_s3_bucket" "mycompany-database-dumps" {
    bucket = "mycompany-database-dumps"
    acl = "private"
}

Como podéis ver, estas lineas describen un bucket en el servicio de S3 de AWS. Ahora que ya tenemos alguna descripción que hace uso de uno de los providers de Terraform, es buen momento para inicializar nuestro proyecto y que Terraform descargue los providers necesarios ejecutando el comando terraform init:

$ terraform init

Initializing provider plugins...
- Checking for available provider plugins on https://releases.hashicorp.com...
- Downloading plugin for provider "aws" (1.6.0)...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.aws: version = "~> 1.6"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

Como podemos ver por el output del comando terraform init, el siguiente paso es ver el impacto de nuestra configuración con el comando terraform plan. El comando plan permite que Terraform evalue la infraestructura descrita en main.tf y la compare con el estado actual de nuestra cuenta en AWS, mostrando un resumen de aquellas acciones que se aplicarían si finalmente ejecutamos la definición.

Si lo ejecutamos en nuestro caso, al no existir todavía ningún bucket con el nombre mycompany-database-dumps, Terraform nos mostrará el siguiente resultado:

$ terraform plan
provider.aws.region
  The region where AWS operations will take place. Examples
  are us-east-1, us-west-2, etc.

  Default: us-east-1
  Enter a value: eu-west-1

Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + aws_s3_bucket.mycompany-database-dumps
      id:                  
      acceleration_status: 
      acl:                 "private"
      arn:                 
      bucket:              "mycompany-database-dumps"
      bucket_domain_name:  
      force_destroy:       "false"
      hosted_zone_id:      
      region:              
      request_payer:       
      versioning.#:        
      website_domain:      
      website_endpoint:    

Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

Como podemos ver al principio del comando, Terraform nos va a preguntar todo aquello que desconoce al no haber sido especificado en el main.tf. Es el caso por ejemplo de la región de AWS. Si no queremos estar poniendola todo el rato, lo mejor es añadir esta definición al principio del main.tf:

provider "aws" {
  access_key = "XXX"
  secret_key = "XXX"
  region = "eu-central-1"
}

Lo siguiente es fijarnos en el resumen del final del comando, el cual nos indica que al ser un bucket nuevo, el plan será crear un recurso, cambiar 0 y destruir 0. Vamos pues a ello!!

Para aplicar los cambios descritos, utilizaremos el comando terraform apply:

$ terraform apply
provider.aws.region
  The region where AWS operations will take place. Examples
  are us-east-1, us-west-2, etc.

  Default: us-east-1
  Enter a value: eu-west-1

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + aws_s3_bucket.mycompany-database-dumps
      id:                  
      acceleration_status: 
      acl:                 "private"
      arn:                 
      bucket:              "mycompany-database-dumps"
      bucket_domain_name:  
      force_destroy:       "false"
      hosted_zone_id:      
      region:              
      request_payer:       
      versioning.#:        
      website_domain:      
      website_endpoint:    

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

aws_s3_bucket.mycompany-database-dumps: Creating...
  acceleration_status: "" => ""
  acl:                 "" => "private"
  arn:                 "" => ""
  bucket:              "" => "mycompany-database-dumps"
  bucket_domain_name:  "" => ""
  force_destroy:       "" => "false"
  hosted_zone_id:      "" => ""
  region:              "" => ""
  request_payer:       "" => ""
  versioning.#:        "" => ""
  website_domain:      "" => ""
  website_endpoint:    "" => ""
aws_s3_bucket.mycompany-database-dumps: Creation complete after 5s (ID: mycompany-database-dumps)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Y listo!! Ya tenemos nuestros recursos definidos y sincronizados con nuestra infraestructura. Si nos queda alguna duda, sólo tenemos que volver a ejectuar terraform plan para ver que no hay cambios a realizar y que todo está sincronizado:

$ terraform plan
provider.aws.region
  The region where AWS operations will take place. Examples
  are us-east-1, us-west-2, etc.

  Default: us-east-1
  Enter a value: eu-west-1

Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

aws_s3_bucket.mycompany-database-dumps: Refreshing state... (ID: mycompany-database-dumps)

------------------------------------------------------------------------

No changes. Infrastructure is up-to-date.

This means that Terraform did not detect any differences between your
configuration and real physical resources that exist. As a result, no
actions need to be performed.

Ingeniería inversa de nuestra infraestructura

Para completar esta introducción y si ya tienes una infraestructura existente, como es nuestro caso, una buena opción para aprender con ejemplos es terraformar tu infraestructura y ver el resultado. Con esto quiero decir generar el fichero de descripción de Terraform a partir de la infraestructura ya existe, de forma que al intentar ejectuar terraform plan, nos diga que no hay cambios a aplicar.

Para ello, en la parte de Terraform debemos contar tanto con el script de definición main.tf como con el estado actual o descripción completa de todos los elementos de la infraestructura que ya se han consolidado. Esta definición detallada la guarda Terraform en el fichero terraform.tfstate y se conoce como state (estado actual de sincronización).

Así pues y para conseguir este objetivo, el primer impulso es examinar el comando terraform import, pero como podemos ver, todavía no está listo para ser utilizado según la documentación oficial, ya que aunque permite importar configuración al state, no nos genera su descripción de recursos:

The current implementation of Terraform import can only import resources into the state. It does not generate configuration. A future version of Terraform will fully generate configuration, significantly simplifying this process.

Una alternativa pues para generar ambos ficheros es utilizar Terraforming, el cual se encuentra disponible como contenedor Docker.

Suponiendo que ya tenemos una cuenta en AWS con varias instancias corriendo en EC2, una forma de recuperar el estado actual y "terraformar" así nuestra infraestructura como código sería producir antes de nada el fichero de definición de recursos (en esta caso lo generaremos automáticamente examinando la infraestructura existente en AWS):

docker run --rm  --name terraforming \
    -e AWS_ACCESS_KEY_ID=XXX \
    -e AWS_SECRET_ACCESS_KEY=XXX \
    -e AWS_DEFAULT_REGION=eu-west-1 \
    quay.io/dtan4/terraforming:latest terraforming ec2 > main.tf

Como podemos ver, pasar las credenciales de acceso a AWS en este caso es necesario, ya que estas no se encuentran definidas en el contenedor Docker. Por otra parte, lo único que queda pues es ejecutar el comando "terraforming" pasándole el servicio sobre el que lo aplicaremos de entre todos los soportados en AWS (asg, dbpg, dbsg, dbsn, ec2, ecc, ecsn, elb, iamg, iamgm, iamgp, iamip, iamp iamr, iamrp, iamu, iamup, nacl, r53r, r53z, rds, rt, rta, s3, sg, sn y vpc).

Finalmente, para dejar a Terraform con el state correcto, debemos generar también el terraform.tfstate. En caso contrario, nos estaría pidiendo aplicar cambios que ya tenemos consolidados en nuestra infraestura al desconocer que ya se aplicaron en su momento. Para ello podemos volver a invocar a terraforming, esta vez con la opción --tfstate:

docker run --rm  --name terraforming 
    -e AWS_ACCESS_KEY_ID=XXX \
    -e AWS_SECRET_ACCESS_KEY=XXX \
    -e AWS_DEFAULT_REGION=eu-west-1 \
    quay.io/dtan4/terraforming:latest terraforming ec2 --tfstate > terraform.tfstate

Si ahora ejecutamos terraform plan, nos debería decir que todo está aplicado y correcto como en el caso del ejemplo del bucket :)

Conclusión

Terraform nos permite de una forma declarativa construir y mantener la definición de nuestra infraestructura como si de código se tratase. Su potencia y capacidad de adaptación a múltiples entornos y necesidades hace que se especialmente interesante en entornos muy dinámicos, cambiantes y con distintos entornos de ejecución (on-premises, cloud o híbrido).

También te recomendamos

Amazon Simple Notification Service (SNS): notificaciones push móviles para Android e iOS

Google anuncia que Cloud SQL ya permite conexiones nativas MySQL

Cómo explotar las posibilidades de la doble cámara trasera y el lector de huellas del móvil

-
La noticia Terraformando tu infraestructura en el Cloud fue publicada originalmente en Genbeta Dev por Ricardo Borillo .


Entrevista a Javier Cantón, el padre de Wave Engine

$
0
0

Javier Cano Ferrero

Javier Cantón es una de esas personas a las que, en los Estados Unidos o en Europa, sería difícil o muy difícil hacerle una entrevista por lo elevado que estaría en el organigrama de cualquier empresa puntera.

Detrás de una persona agradable, llena de energía y con el don de palabra, me he encontrado a una fuente inagotable de conocimiento, de profundidad abrumadora, líder de un equipo de talento superlativo que representa una punta de la lanza en la industria nacional e internacional.

Y que, con poco más de la treintena cumplida, ya tiene un historial que cualquier profesional del desarrollo de software envidiaría.

¿Cuándo te diste cuenta q lo tuyo era el desarrollo?

Cuando era chico mis padres me apuntaron a Karate, a guitarra (tengo 7 años de conservatorio), hacia futbol y baloncesto, hasta que a los 14 años conocí la informática y todo lo demás desapareció.

Mi primer ordenador fue un Pentium 133, que me compro mi padre porque le dijeron que era una cosa buena. Y desde ese momento ya empecé a decir que quería ser programador de ordenadores; que es lo que al final siempre me ha apasionado.

Pero en la universidad también hiciste tus pinitos con hardware

Si, para un trabajo de la universidad me hice mi propia mesa – de cartón – multitáctica, como la Microsoft Surface (no confundir con las actuales tabletas homónimas). Cogí una webcam normal que ve en luz visible e infrarroja -que está filtrada-, le partí el cristal para que pudiera ver en luz infrarroja, y utilice un negativo de fotografía para eliminar la luz visible, convirtiendo la webcam en un sensor de infrarrojos. Así, se podía reconocer la mano y detectar múltiples toques a la vez.

¿Qué es el producto vectorial y qué es el producto escalar?, esta es una pregunta que hacemos a todos los candidatos

El siguiente paso, con mi hermano y mi padre, fue montar una mesa multitáctil como la Surface, pero funcionando mejor. Desarrollando un framework para este tipo de dispositivos, que iba todo por XNA. Lo malo es que entonces todo funcionaba sobre la CPU (ahora es por GPU) y no iba todo lo rápido que podría.

Y, como si fuera poco, también competiste en tres ediciones de la Imagine Cup de Microsoft, ganando dos veces la edición nacional, y llegando a la final mundial en la India.

Si, una fue con un tema de UI, otra un sistema de parking, y a la india fuimos con un sistema parecido a lo que después sería Kinect. Estuvimos 15 días en la India y nos pasaron un montón de cosas.

¿De la universidad directamente a tu única empresa? ¿Porqué?

Cuando salí de la carrera me llamaron dos empresas. Pero en la que estoy, además de conocer a la gente y que le dieron valor a que era MVP de XNA, me ofrecieron entrar en un equipo nuevo dedicado a hacer videojuegos. Aterrizando en la optimización del rendimiento de un juego llamado Bye Bye Brain (N.R. Un auténtico bombazo internacional en Windows y Windows Phone).

Gran parte del equipo nos conocemos desde la universidad, o aún más atrás, y la rotación es muy baja.

Aquí siempre confiaron mucho en mí, siempre me han dado esa libertad para poder crear y poder aportar. Me dieron al equipo y me dejaron crear el nuevo proyecto Wave Engine.

Se montó la oficina de Sevilla, se empezó a contratar gente (muchos antiguos compañeros de universidad), y desde entonces han pasado 7 años.

¿De qué se trata tu trabajo actual?

Wave Engine ahora mismo es un motor gráfico industrial de “no games”, que no quiere competir con motores generalistas como Unreal o Unity3D. Porque uno habla con las empresas y muchas están utilizando motores gráficos para cosas que no son juegos, mientras nosotros llevamos 7 años orientando Wave hacia industria.

También trabajamos en realidad virtual, pero sobre todo el foco está en realidad aumentada, que tiene previsión de crecimiento de 120 mil millones de dólares de aquí al 2020.

Como ejemplo, uno de los éxitos que ahora mismo tenemos en el departamento, es el soporte remoto con HoloLens. Yo soy un técnico, hay una avería de electricidad en Gran Canaria, me cojo un avión, me pongo las HoloLens, me pongo a reparar, hago una videoconferencia contigo aquí, tu ves lo que yo estoy viendo, me pintas en la propia pantalla, me muestras un checkin, etc.

La realidad virtual es un subconjunto de la realidad aumentada, porque si podemos hacer opacos los cristales de una gafa de RA, ya tenemos un dispositivo de RV. La realidad virtual ha estallado en estos últimos años, pero muy orientada hacia el usuario final y los videojuegos; la realidad aumentada aún está por estallar.

¿Cuánto tiempo le dedicas a programar?

Mi empresa busca gente que le encante lo que hace. Normalmente no hay un horario establecido, siempre el horario es flexible y yo voy por objetivos, por tareas que tengo que cumplir. Por ejemplo, el tiempo dedicado a esta entrevista es parte del trabajo, el asistir a eventos, etc.

¿Se trabaja? Si, a mí me gusta mucho lo que hago y, por ejemplo, un sábado estoy en casa aburrido y le empiezo a meter líneas de código a Wave Engine, ¡porque me encanta!

¿Y en tu tiempo libre?

Hago temas de domótica, también tengo las tres guitarras (eléctrica, flamenca y clásica) aunque las toco poco. Cuando estaba en el conservatorio sí que hacía conciertos, pero ahora no tengo tiempo. También tengo un grupo de Counter Strike, que quedamos todos los viernes y domingos a las cinco de la tarde para echar unas partidas.

Y luego, con mi novia, nos gusta mucho hacer senderismo y el campo. Ella es española y norteamericana, y nos vamos mucho de viaje por los USA y ya nos hemos recorrido muchos estados porque no somos de vacaciones en la playa.

¿Qué le aconsejarías a las personas que están iniciando la carrera universitaria?

Yo recuerdo, cuando estaba haciendo informática, una de las cosas que me decían: “deja eso de los videojuegos y de las cosas 3D, y dedícate a hacer bases de datos que es lo que da dinero”.

Javier Cano Ferrero Portatil

Y yo sin embargo realmente dije: no, yo quiero hacer lo que realmente me gusta. Y no tiene que nada que ver cuando le das al Visual Studio a compilar y sale algo en tres dimensiones girando o te pones un casco, que cuando le das y sale una página web. No tiene nada que ver, es muchísimo más divertido.

Si te gusta, lo más importante son las matemáticas. Saber responder a preguntas como “¿qué es el producto vectorial y qué es el producto escalar?”, que fue la pregunta que me hicieron a mí cuando hice una entrevista para NVidia.

Dentro de las matemáticas hay varias partes: el algebra lineal, las matemáticas discretas, el cálculo infinitesimal – que no me mola mucho. Aunque bueno, muchas veces tampoco nos lo explicaron bien. Por ejemplo, en código informático una Integral es un “FOR”, y si nos los hubieran contado de esa manera pues hubiese sido mejor.

La matemática que me gusta es el algebra lineal que es todo lo de vectores, matrices y transformaciones de espacios. Y alguien que quiera entrar en el equipo debe controlarlas, porque se usan a diario.

Veo que hay varias compañeras en la sala de trabajo que tenemos al lado, lo cual está muy bien. Pero ¿qué piensas sobre la escasez de mujeres en nuestro sector?

Debatimos internamente en nuestra empresa el conseguir que haya más mujeres porque, tenemos alguna delegación sin mujeres. Y el propio equipo admite y reclama que entren mujeres porque aporta un punto de vista diferente.

No podemos meter más chicas en la empresa porque, directamente, no hay.

Por ejemplo, nosotros hemos abierto dos plazas a las cuales se han presentado 35 personas de las cuales solamente una es una chica que, además, es de Iowa. El problema es que tenemos que contratar a la mejor persona, y la probabilidad de que esa chica sea la mejor es una entre treinta y cinco.

Osea, el problema viene más atrás. ¿Porqué no hay más mujeres en el mercado? Nosotros hemos hablado con Universidades y en mi empresa tenemos una ratio bastante normal para el que hay en las aulas de la universidad. No esperes que luego los puestos de trabajo en las empresas el ratio sea diferente.

En el caso de chicas en informática hay chicas muy buenas. Es más, yo diría que las que hay están por encima de la media de los chicos. ¿Porqué? Porque han tenido que sufrir mucho y han tenido que decir “no, no, a mí me gusta la informática y voy a seguir aquí, aunque estoy rodeada de tíos, pero voy a seguir aquí”. Eso es difícil. Te tiene que gustar mucho para llegar a decir “voy a seguir los cinco años de carrera, aunque no haya otra chica en la carrera”.

En informática hay chicas muy buenas. Es más, yo diría que las que hay están por encima de la media de los chicos.

Una de las cosas que se tendría que mirar es cuál es el paro en chicas informáticas, porque a lo mejor es nulo. Si me dicen que hay montón de chicas en paro, y que en chicos no hay paro, eso sería que se entra contratando chicos por encima de chicas. Pero si no hay ninguna chica que esté en paro, significa que todas están trabajando. De manera que no podemos meter más chicas en la empresa porque, directamente, no hay.

Yo entiendo la discriminación positiva. Si tienes dos perfiles iguales, que te quedes con la de la chica porque necesitamos más mujeres y eso va a enriquecer al equipo. Y entiendo un poco del problema de las chicas porque mi novia es ingeniera informática, y ella dice que entró en informática, que tenía tres amigas en clase, y en segundo de carrera se fueron dos de ellas, y quedó sola rodeada de chicos. Y para eso hay que tener mucho coraje y te tiene que gustar mucho.

Desde GenbetaDev, queremos agradecer a Javier Cantón por estas dos horas y media de entrevista, en donde ha compartido su experiencia personal en una faceta poco conocida del desarrollo, y que estamos acostumbrados que nos venga desde el exterior.

Sin duda un valor en alza, junto con todo el equipo de trabajo que está construyendo aplicaciones de alta tecnología para Realidad Aumentada, y cuyos nombres podremos encontrar codificados dentro del manifiesto de recursos del motor gráfico Wave Engine.

Más información | Javier Cantón, Canal de youtube de Wave engine, HoloLens, un futuro de realidad aumentada por descubrir - Javier Cantón en T3chFest 2017, Andalucia Investiga (pag. 12)

También te recomendamos

Lo que se esconde detrás de "salario competitivo, a convenir y según valía"

Detrás de los convertibles hay mucho más que una simple bisagra

¿Se puede desarrollar sin conexión a Internet?

-
La noticia Entrevista a Javier Cantón, el padre de Wave Engine fue publicada originalmente en Genbeta Dev por Juan Quijano .

Construye tu primer ChatBot en 30 minutos

$
0
0

Images

La inteligencia artificial está cada día más alejada de HAL 9000, acercándose más al concepto de una innumerable miríada de servicios que componen la temible distopía de Skynet.

En estos momentos, se sucede una incruenta carrera tecnológica entre las “grandes” de la industria para desarrollar los servicios cognitivos más adelantados y con más “inteligencia”. Y en este artículo haré una primera y sencilla aproximación a un futuro tan impredecible como imparable.

Lee, escucha, mira, piensa

Flat 800x800 075 F

En 1950, Alan Turing se hizo una pregunta sencilla, con una extremadamente compleja respuesta, que le convirtió en el padre de la Inteligencia Artificial:

¿Puede pensar una máquina?

A partir de entonces, se inició un lento desarrollo basado en la lógica matemática, la filosofía, la neurociencia y la lingüística, hasta que la computación llegó - sobre los años 80 - a ofrecer suficiente potencia como para soportar los primeros sistemas expertos.

Pasadas más de tres décadas, en la actualidad, la IA se aplica en múltiples campos entre los que destacan el reconocimiento visual (tanto de imágenes estáticas como de vídeos), el uso de lenguaje natural, el reconocimiento de voz, los sistemas de explotación de datos, y la gestión del conocimiento, entre otros.

Uno de los segmentos en donde se está investigando de forma continuada desde aquel lejano ELIZA, son los BotChats. Es decir, software que es capaz de mantener conversaciones en lenguaje natural, de forma similar a las personas, que sea capaz – en algún momento de un futuro cercano – superar el test de Turing.

Abriendo, como en toda nueva aplicación tecnológica revolucionaria, novedosas aplicaciones, y produciendo problemas complejos. Relacionados, por ejemplo, con la sustitución de puestos de trabajo poco especializados, por sistemas informáticos automáticos.

Haciendo un BotChat sin código

Google, Amazon o Microsoft son plataformas sobre las que puedo construir mi ChatBot, además de irlo enlazando con otros servicios de Inteligencia Artificial; ganando en profundidad, complejidad y potencia; y asegurando la escalabilidad, rendimiento y disponibilidad, al estar implantados en Cloud.

En este artículo, voy a construir un ChatBot diseñado para responder las preguntas frecuentes, en lenguaje natural, que hacen los usuarios de un blog; y para lo cual, y buscando la mayor sencillez, voy a utilizar un servicio gratuito de Microsoft que está publicado en la página web de QnAmaker.

Qnamaker01

La verdad es que el sistema difícilmente puede ser más sencillo. Me identifico en la página, escojo un nombre para mi nuevo Bot, y lo creo.

Qnamaker02

Luego introduzco las preguntas que me pueden hacer los usuarios, y cuál es la respuesta adecuada. Siendo esta la parte más complicada de todo el proceso, porque es necesario probarlo una y otra vez, añadiendo, seleccionando y modificando tanto los términos de búsqueda como las respuestas.

Qnamaker03

Para ello, la propia plataforma incluye un sistema de pruebas que hace bastante más sencilla la depuración y optimización de la base de conocimiento.

Qnamaker04

En la realidad, no sería suficiente con esto y, más adelante, debería integrar servicios de búsqueda y aprendizaje autónomo. Pero, por ahora, me quedo satisfecho y pulso el botón de publicar para hacer visible el API Rest de mi ChatBot en Internet. Eso sí, para consumirla, voy a necesitar construir un mensaje http POST, como veremos un poco más adelante, que incluya las credenciales necesarias y un cuerpo del mensaje.

Qnamaker05

Programando un cliente básico

Ahora vuelvo a mi área de confort, y voy a construir un cliente muy básico que funcione sobre una Web App de Azure y con ASP.NET MVC Core 2.0 en C#. Así, desde Visual Studio 2017, creo un nuevo proyecto Web en Core del tipo Web Application MVC.

Visualstudio2017 01

Y lo primero que hago es añadir dos nuevas claves en el appseting.json, en donde almacenaré de forma segura la clave de suscripción y el identificador de la base de conocimiento, que son las credenciales de seguridad para acceder a la API.

Visualstudio2017 02

Como estoy en Core, estás credenciales las doy de alta en el método ConfigureServices de la clase Startup, para poder inyectarlas en toda mi aplicación.

Visualstudio2017 03

Después me creo mi clase de modelo, con la que transportaré la información hasta la vista.

Visualstudio2017 04

En el controlador añado la clase que construye el mensaje http necesario para solicitar la respuesta, enviando la pregunta dentro de una estructura json.

Visualstudio2017 05

Construyo la vista del formulario, en donde podre escribir las preguntas, llegándome la respuesta desde el ChatBot que he dado de alta en QnAMaker.

Visualstudio2017 06

Por último, publico mi código en una WebApp en Azure, por ejemplo, y ya tengo funcionando mi ChatBot, en su primera versión.

Visualstudio2017 07

Ahora toca alimentarlo, darle más contenido y conectarlo con otros servicios cognitivos y de inteligencia artificial.

Visualstudio2017 08

Conclusiones

Aún cuando este es un ejemplo muy sencillo, aquí ya se puede intuir la potencia del motor de lenguaje natural, que soporta las conversaciones. En tres o cuatro rondas de optimización de la base de conocimiento, ya le puedo realizar preguntas de una forma relativamente compleja para la rigidez normal de un sistema. Por ejemplo, me va a entender si le pregunto "¿Tienes alguna noticia nueva?" o si lo escribo como "Dime las novedades en Azure".

Pero es en la integración con sistemas de machine learning, de modelos de aprendizaje, junto con las capacidades de reconocimiento sensorial, y la omnipresencia del IoT, cuando podemos construir aplicaciones que, hace nada, eran terreno de la Ciencia Ficción.

Así, por ejemplo, la Wikipedia no sería ni una parte de lo que es ahora si no fuera por los innumerables bots que realizar diariamente labores de corrección, escritura y actualización de entradas; empresas por todo el mundo están sustituyendo los "centros de soporte" de primer nivel por ChatBots; y, el uso más conocido y extendido, la interacción con personas reales en las redes sociales.

Estamos en un momento histórico, y puede ser que en el futuro se mire hacia atrás y, como nos sucede en la actualidad con la telefonía móvil o los antibióticos, sea difícil imaginarse como pudimos vivir sin ellos (si antes no nos han destruido en un holocausto nuclear).

Más información | Bots en GenbetaDev, Bots en Xataka, Tutorial recomendado,

También te recomendamos

Google AI Challenge: Ants, esas tiernas hormiguitas

"Programar bots de Starcraft puede llegar a ser más complejo que hacerlo para el ajedrez", entrevista a Alberto Uriarte

Así es como puedes hipervitaminar tu monitor para verlo to-do

-
La noticia Construye tu primer ChatBot en 30 minutos fue publicada originalmente en Genbeta Dev por Juan Quijano .

Por qué elegir VueJS: 5 razones para considerarlo nuestro próximo framework de referencia

$
0
0

Vue

A lo largo de estos años, he tenido la suerte de poder trabajar con diferentes frameworks JavaScript. Cada uno de ellos ha tenido, para mi, sus puntos fuertes y sus puntos débiles. Nunca he tenido un apego incondicional con ninguno de ellos y eso me ha hecho ver a los frameworks como lo que son: herramientas que pueden ayudarnos tanto como hacernos pasar un buen dolor de cabeza. Esto ha hecho que pueda valorar mucho qué funcionalidades son necesarias y qué argumentos tener en cuenta a la hora de decantarme por uno o por otro dependiendo del contexto en el que me he encontrado.

Viéndolo con perspectiva, en muy poco tiempo, hemos visto como estos frameworks han ido pasando por diferentes generaciones y como han ido madurando. Se podría decir que ha día de hoy, en lo que yo suelo considerar la 3ª Generación, nos encontramos con frameworks bastante maduros que nos ayudan a realizar un gran número de tareas que pueden ser ejecutados en diferentes navegadores a la vez.

ReactJS, Angular y EmberJS son los frameworks que representan un mayor uso en el mercado y que han demostrado ser una garantía de robustez y escalabilidad. A esta terna, se ha unido hace una temporada VueJS. Un framework con el que llevo trabajando durante un buen tiempo y del que he intentado estudiar cada funcionalidad.

En este post, me gustaría exponer cinco razones que han hecho que VueJS se haya convertido en mi framework JavaScript favorito. Espero que estas razones os convenzan para que en vuestra próxima prueba de concepto o proyecto personal, le deis una oportunidad.

1. Un framework para aprender y usar de manera progresiva

VueJS se autodenomina como un framework progresivo. Cuando encaramos un desarrollo con VueJS, podemos indicar qué partes del framework queremos incluir. VueJS está modularizado en diferentes librerías separadas que permiten ir añadiendo funcionalidad en el momento que las vayamos necesitando.

La modularización en librerías de un framework no es algo nuevo en el desarrollo front. Tanto ReactJS como Angular cuentan con una organización parecida de su código base. Lo que diferencia a VueJS de otras alternativas es lo bien desacopladas que se encuentran estas partes, lo fácil que es extender la funcionalidad core y lo bien que trabajan todas sus partes una vez que se decide incluir más módulos.

El core principal de VueJS está formado por una librería encargada de renderizar vistas en el navegador. Su forma de organizar el código es por medio de pequeños componentes que contienen todo el HTML, CSS y JavaScript necesario para funcionar como pieza independiente. Estas piezas se van componiendo en un árbol jerárquico de componentes hasta formar nuestra aplicación. Usar esta librería es tan fácil como importar el script en nuestra página HTML.

Si lo único que necesitamos como desarrolladores es una mejor forma de organizar y renderizar nuestros pequeños componentes visuales, nos quedamos ahí y no incluiríamos nada más. En el momento que nuestra aplicación empezase a crecer, contamos con librerías para gestionar las rutas de nuestra aplicación como vue-router o con librerías para gestionar el estado global de la aplicacion como pueda ser vuex. Si nuestra aplicación tuviese que tener una gran optimización o tener buen SEO, podemos incluir y trabajar con vue-server-rendering.

Plataforma Vue 1

Y así nos pasaría con muchas más funcionalidades. La cantidad de librerías con las que se cuentan (ya sean creadas por los desarrolladores oficiales o por la comunidad) es tan grande y cubre tal espectro de funcionalidades, que será difícil que nos encontremos desamparados y sin esa utilidad que nos es indispensable.

2. Funcionalidades intuitivas, modernas y fáciles de usar

VueJS no ha reinventado la rueda. Nuestro amigo verde fue creado como proyecto personal por Evan You, antiguo desarrollador de Google, en un intento de simplificar el funcionamiento de AngularJS. El framework empezó a ser tan fácil y simple de usar que, una vez que su creador decidió subirlo a los repositorios de Github, la comunidad fue usándolo en cada vez más proyectos.

Empresas como Xiaomi, Alibaba o Gitlab son algunos de sus grandes exponentes. Si miramos las estadísticas de las expectativas de uso en el año 2018 encontramos que muchas personas y empresas están interesadas en conocerlo y usarlo.

Vue Vs React

Pero ¿Por qué este hype? ¿Por qué la comunidad tiene tan buenas palabras de este framework?

Bajo mi punto de vista, se debe a lo bien que Evan You ha sabido trasladar todo lo bueno que tienen otros frameworks como Angular, ReactJS y EmberJS y desechar aquello que al desarrollador no le aportaba o le era complejo de usar.

Si tuviésemos que definir a VueJS por cuatro de sus aspectos conceptuales serían estos:

  1. El dato como centro de todo: En VueJS, los componentes gestionan un modelo de datos interno. Estos componentes están diseñado bajo el patrón MVVM. Esto quiere decir que el desarrollador no tiene que preocuparse tanto por cómo o cuando renderiza un modelo en pantalla y sí más en cómo tiene que ser la lógica que gestiona ese modelo. El renderizado de HTML es delegado a la librería. Nosotros simplemente jugamos con datos, métodos y plantillas HTML donde indicamos cuando se tiene que pintar cada parte del modelo.

  2. El sistema de componenteses reactivo: VueJS sabe comunicarse muy bien por medio de eventos asíncronos. Un componente hijo se puede comunicar con su componente padre por medio de eventos. Dos partes del sistema pueden comunicarse por medio de eventos. Los propios modelos de un componente son capaces de enviar eventos para indicar cuándo renderizarse. El sistema de componentes se convierte en un organismo vivo que reacciona muy bien al cambio y realiza acciones programadas por el desarrollador. Esto se debe a que el módelo de datos del componente es envuelto por getters y setters especiales encargados de gestionar estas reacciones.

  3. Sin fricción con otras librerías o recursos: Cuando me enfrenté a ReactJS sufrí un poco con el concepto de que todo era JS. Tener JSX no me ayudó para su aprendizaje. Angular me medio obligó a incluir TypeScript para escribir componentes. Me gusta TypeScript, lo que no me gusta es que me impongan herramientas. VueJS es el más concienciado con esto: Usa lo que quieras, usa la herramienta con la que te encuentres cómodo, céntrate en escribir HTML, CSS y JavaScript. Si quieres añadir JSX o TypeScript hazlo. Si no lo quieres incluir ahora, hazlo más tarde. Esto hace que desarrollar en VueJS sea más intuitivo. Es casi como trabajar con JavaScript nativo. Particularmente, me parece un paso muy natural si vienes de trabajar con jQuery.

  4. Todo está en el sitio que tiene que estar. Cuando empecé con VueJS, me di cuenta que miraba la documentación menos que en la de otras herramientas. Asimilaba la sintaxis antes. Incluso la propia intuición me permitía usar la librería sin tener que mirar la documentación previamente. Esto se debía a que el naming de la API de VueJS es bastante intuitiva. Con saber lo que significa props, data y methods y qué puedo incluir en estas partes, podía empezar a hacer mucho, con muy pocos conocimientos. De hecho, si no os explico de qué trata cada una de estas partes de la API, lo más seguro es que supieseis de qué estoy hablando. Es una de las virtudes de VueJS. Ser fácil, intuitivo y poco recargado. Cada parte está en el lugar que debería estar. Esto es algo dificil de entender hasta que no se está desarrollando algo en VueJS, pero creedme, que si le dáis una oportunidad, esto lo notareis.

3. Un ecosistema muy variado que cubre todo lo necesario

Cuando me decanto por una herramienta de trabajo u otra, busco que la experiencia de desarrollo sea lo más cómoda posible. VueJS tiene a su alrededor una serie de herramientas que ayudan a conseguir que el desarrollador sepa en todo momento qué está haciendo y cómo lo está haciendo. Hay tres herramientas que me ayudan mucho a la hora de trabajar con VueJS.

Una de ellas es la línea de comandos (CLI) especial que han creado sobre NodeJS. Esta herramienta permite empezar un proyecto con un boilerplate (o plantilla base) configurado a nuestro gusto de una manera fácil y sencilla. Simplemente descargando desde npm la herramienta vue-cli, podremos crear una estructura inicial con la que trabajar que cumple con la guía de estilo pactada por la comunidad. Bajo mi punto de vista, es la mejor manera de empezar a conocer la plataforma.

Además, una vez que estamos desarrollando, lo que más me ayuda a saber qué estoy haciendo y si lo estoy haciendo bien son los procesos de depuración. Es cierto que Firefox y Google Chrome ya cuentan con excepcionales herramientas para depurar código. Pero hay una serie de conceptos internos que VueJS gestiona como el estado, las propiedades o los eventos que las herramientas estándar no suelen conocer.

El equipo de desarrollo de VueJS mantiene una extensión de Chrome que nos permite ver cómo se renderiza nuestro árbol de componentes, cómo se están lanzando y registrando eventos, cómo se guarda el estado interno de cada componente o cómo se está comportando el estado global de la aplicación. Esta es una buena herramienta que nos ayudará mucho en nuestro día a día. Simplemente hay que ir al store de Chrome y descargarla.

Chrome Vejs Extension

Pero esto no queda aquí, y es que además de encontrar facilidades a la hora de empezar y de depurar un proyecto con VueJS, contamos con plugins para los IDEs más usados en la actualidad. Yo en mi caso, uso Visual Studio Code (VSC) para desarrollar aplicaciones front y me gusta mucho tener instalado un plugin para realizar diferentes acciones de VueJS llamado Vetur.

Este plugin, me permite tenerintellisensede la sintaxis de Vue en VSC. Me permite escribir componentes más rápido gracias a los snippets por defecto que tiene, me permite tener pintado y estilizado mí codigo para que en todo momento sepa cuales son las palabras reservadas del framework. Por último, me permite usar herramientas como Prettier con solo usar un atajo de teclado. Cómo véis es una herramienta muy útil.

Lo bueno de estas herramientas es que se encuentran en constante evolución. Siempre que sale una nueva versión del framework, la comunidad y el equipo core se encarga de mantenerlas al día y siempre están añadiendo funcionalidad extra para hacer el trabajo a los desarrolladores un poco más fácil.

4. Una comunidad muy activa

Todo lo anterior puede estar muy bien, pero si no hay un buen grupo de personas que esté detrás de un proyecto tan importante como este, poco puede importar ¿Cuántas veces nos ha pasado, que hemos usado una librería y con el paso del tiempo, hemos tenido que ser nosotros quien la hemos tenido que mantener porque su creador no le ha dado soporte? En la época de esplendor de jQuery, me pasó más de lo que me hubiera gustado.

En ese sentido, simplemente tenemos que mirar este repositorio oficial de VueJS llamado ‘Awesome VueJS’. En este repositorio se incluyen todos aquellos recursos relevantes que la comunidad está creando sobre esta herramienta: Libros, charlas, librerías, posts, manuales… todo lo que se nos ocurra está aquí.

VueJS es un proyecto Open Source que cuenta con una comunidad muy viva. Además, es un proyecto Open Source ‘real’. ¿Qué quiero decir con ‘real’? Quiero decir que es un proyecto gestionado, desarrollado, evolucionado y planteado por y para la comunidad. Si miramos a sus competidores más directos, tanto Angular (creado por Google) como ReactJS (creado por Facebook) tienen un sistema Open Source más rígido y menos abierto de lo que nos gustaría.

El roadmap, el versionado, las decisiones, siempre o casi siempre, son tomadas desde los equipos formados por estas dos grandes empresas. En este caso, el modelo de VueJS se asemeja más con el de EmberJS. Proyectos financiados por la comunidad, creados por la comunidad, sin ningún gigante que se preocupe por ellos.

Esto, como en todo, puede ser un arma de doble filo. La esencia del software libre, el espíritu de compartir con la comunidad, está presente en VueJS. No existen intereses de terceros. No existen cambios repentinos por decisiones de negocio. Simplemente se intenta seguir un roadmap que pueda satisfacer a todo el mundo partiendo de unas bases conceptuales. Esto es bueno porque te da independencia y te da sensación de cercanía.

La comunidad en VueJS se siente escuchada. Muchas partes del framework se han quitado o mejorado por las issues que se han abierto en los repositorios del proyecto.

Planes como que VueJS renderice en Web Components nativos han sido gracias a la presión de la comunidad.

Sin embargo, VueJS sufre de un mal que si con el tiempo no se tiene en cuenta, puede ser el final del proyecto: VueJS todavía depende demasiado de su creador. Si se revisan los commits y estadísticas del proyecto, se puede observar que Evan You copa todavía muchos de los rankings de actividad. Empieza a haber gente importante en el proyecto (como Sarah Drasner o Guillaume Chau), pero parece que todavía todo gira alrededor del desarrollador oriental.

Esto, por muy mal que nos parezca su sistema de software libre, no va a pasar en otros frameworks más corporativos. Google, ReactJS van a seguir mantenidos porque se encuentran dentro de la estrategia de desarrollo de sus empresas. ¿Qué esto puede cambiar? Pues sí, tal vez, pero que sepamos que contamos con esto. VueJS tiene pinta de ser un proyecto que a medio-largo plazo va a seguir funcionando muy bien, pero es normal que se vigilen los movimientos de la comunidad.

5. Todo el código de un componente se encuentra en un único fichero

Vale, quizá tampoco sea nada novedoso. Habíamos comentado que en ReactJS todo se transformaba en JavaScript, por tanto, todo el código de un componente, ya sea HTML (JSX en este caso), CSS y JavaScript se va a encontrar en un único fichero con extensión .jsx. Y quizá estos sistemas no lo veas ni como una ventaja ¿Qué pasa con la separación de conceptos? ¿Ya no debemos separar el contenido, de su estilo y su lógica de negocio?

Bueno, pues sí, en VueJS, los componentes también guardan todo lo necesario en ficheros con extensión.vue. Estos ficheros contienen todo el HTML, el CSS y el JavaScript de un componente. Entonces ¿en qué se diferencia de ReactJS? Se diferencia en que en VueJS, los conceptos están juntos en un fichero, pero no revueltos.

Para verlo más claro, veamos el ejemplo de un componente en VueJS:

<template><form class="search-box" @submit.prevent="search"><input type="text" placeholder="Ej. Cinema Paradiso" v-model="query" /><button>Buscar</button><span>{{ queryLength }}</span></form></template><script>
export default {
    name: 'search-box',
    props: {
        value: { type: String, default: '' }
    },
    data() {
        return {
            query: this.value
        }
    },
    computed: {
        queryLength: function () {
            return this.query.length;
        }
    },
    methods: {
        search() {
            this.$emit('search', this.query);
        }
    }
}</script><style lang="scss" scoped>
@import '../assets/scss/_colors';

$color-light-darken: darken($color-light, 15%);

.search-box {
    display: flex;
    height: 3rem;
    

    button,
    input {
        &:focus {
            outline: none;
        }
    }

    input {
        width: 100%;
        padding: 0 0.5rem;
        border: 1px solid $color-basic-2;
        border-right: 1px solid $color-light;
    }

    button {
        padding: 0 2rem;
        background: $color-light-darken;
        color: $color-basic;
        font-weight: bold;
        border: 1px solid $color-light-darken;

        &:hover {
            cursor: pointer;
            background: $color-light;
            border: 1px solid $color-light;
        }
    }

    span {
        display: block;
        font-size: 1.5rem;
        padding: 0.5rem 1rem;
    }
}
</style>

En esta ocasión, observamos un componente que representa un típico buscador. Es el componente SearchBox.vue. Este componente se encarga de renderizar un formulario con un elemento <input /> y un elemento <button />. Lo que hace es guardar lo que el usuario inserta en la variable query y emitir un evento al componente padre con esta información cuando el usuario pulsa en el botón.

¿Véis lo que os digo? Todo el HTML, CSS y JS está junto, pero no revuelto. Gracias a las etiquetas template, script y style, tengo los conceptos separados, pero juntos, de esta forma es más fácil reutilizar ficheros en más de un proyecto. Todo el contenido queda más claro. Si el desarrollador está trabajando en un componente en particular, tiene todo a la vista.

Lo bueno de esto, es que cuando construya mi aplicación, vue-loader, una pieza creada por el equipo de VueJS para hacer que mis ficheros .vue funcionen con Webpack, todo mi código JavaScript será empaquetado en un fichero app.min.js y todo el CSS que se encuentre en los componentes, será empaquetado en un fichero app.min.css. Auténtica magia que nos hace la vida más fácil a todos y todas.

Lo bueno de nuevo de VueJS, es que si esto de los Single File Components no te convence, puede seguir guardando los conceptos de cada fichero por separado.

Conclusión

Creo que es bastante importante saber la razón por la cuál se elige una herramienta. Dependiendo del contexto, desarrollar con uno u otro framework puede ayudarnos a trabajar mejor en equipo.

No es lo mismo trabajar solo en un proyecto personal que trabajar con un equipo de veinte desarrolladores. No es lo mismo trabajar en un proyecto grande y complejo que en uno pequeño y con un ámbito bien acotado. No es lo mismo trabajar con compañeras y compañeros que tienen un bagaje en front que con un equipo con perfiles más multidisciplinares.

Estos puntos que yo aquí he expuesto son mis razones. Son las razones por las cuales VueJS me ha convencido para mi contexto y mi marco de trabajo. Puede que a ti, un framework con una comunidad abundante no sea importante. Puede que las funcionalidades que te he dicho y que más valor me aportan a mi, a ti no te aporten nada o que no te aporten lo suficiente como para hacer un cambio drástico a VueJS.

Por tanto, no te dejes llevar por mis palabras y, como se debería hacer, ten cuidado, no te fíes de nadie. Prueba por ti mismo las cosas en un desarrollo lo más acotado posible, o por el contrario, lleva el framework a sus límites si necesitas un contexto muy exigente.

Puede que, como me pasó a mi, cuando hagas esas pruebas, su API te convezca más, su workflow te enganche, que te sientas cómodo en su filosofía, en sus conceptos, que te encuentres tan bien desarrollando con VueJS que quizá ya no solo encuentres válidas (o erróneas) mis razones, si no que encuentres tus propias razones para usar VueJS.

Más información | Vue.js

También te recomendamos

Este San Valentín enamórate del amor, de quien tú quieras y como te dé la gana

SFML 2: Sonidos y música

SFML 2: Fuentes y textos

-
La noticia Por qué elegir VueJS: 5 razones para considerarlo nuestro próximo framework de referencia fue publicada originalmente en Genbeta Dev por José Antonio Dongil Sánchez .

"Nuestro objetivo es ofrecer el mejor curso de programación web front-end a mujeres", entrevista a Adalab

$
0
0

Adalab

Mediodía de una mañana tan brillante como fría en Madrid. Estoy aterrizando en el espacio de coworking en donde tiene situadas sus oficinas y aulas Adalab. Y me reciben sonrientes los tres socios: Inés, Rosario e Israel.

Se nota que no les va nada mal. La oficina es espaciosa, conformada como un dúplex. Y el aula que se vislumbra al final del pasillo en el piso superior, es amplia como para impartir clases a más de 30 personas a la vez.

Durante la entrevista, lo que más ha habido son sonrisas, y un derroche de inteligencia y sentido común. Aunque aparentan juventud, sin duda estas tres personas saben lo que hacen y transmiten muy bien sus pensamientos.

Y así, en unos chillones sillones naranja, empezamos un intenso diálogo que superaría la hora y media de duración.

Veo que en la web que vuestra formación está dirigida a féminas ¿Cómo surgió la idea de una formación solo para mujeres?

La idea de Adalab viene de que trabajamos en cooperación internacional, en proyectos de formación e inserción laboral principalmente en América latina y Asia. Y volvimos a España a finales del 2015.

Nosotras siempre habíamos hablado de la posibilidad de montar una empresa social, y nos pusimos a buscar ideas que pudiesen funcionar; que se centrasen en facilitar posibilidades de inserción a personas que no tienen una inserción laboral de calidad pero de una forma sostenible.

Empezamos a ver cosas que funcionan en otros países, como los bootcamps de programación e intentamos ver si en España funcionarían. Y efectivamente, la realidad era que hay muchísimo desempleo, y al mismo tiempo a las empresas les cuesta cubrir ciertos perfiles digitales y tecnológicos.

Tener una comunidad cada vez más grande de mujeres líderes del sector tecnológico.

Entonces dijimos que tiene todo el sentido del mundo hacer este tipo de proyecto en España. Ya que estábamos buscando una formación de la que hubiese una demanda creciente de puestos de trabajo y que, en relativamente poco tiempo, las estudiantes pudiesen empezar a trabajar y generar ingresos mientras se siguen formando.

Nuestra motivación inicial fue buscar un proyecto que ayudase a reducir el desempleo. Cuando nos enteramos y vimos que en este sector existe un porcentaje muy pequeño de representación de mujeres - aparte que de aquí al futuro van a crecer muchísimo todos estos puestos - y las mujeres se están quedando fuera, nos pareció mucho mejor incorporar que solo fuesen mujeres para conseguir una representación mejor.

¿Cuáles serían los objetivos que perseguís con este programa de formación?

Tenemos un triple objetivo: Reducir el desempleo apostando por una formación intensiva de calidad, que permite una inserción laboral de calidad en un sector con futuro. A la vez, contribuir a reducir la brecha de género en este sector. Y por último conseguir que nuestro programa sea accesible para cualquier mujer, independientemente de su poder adquisitivo.

Por eso nos centramos en formación en front end porque hay mucha demanda, y nos centramos en mujeres para atraer a más mujeres a una profesión con buenas oportunidades de crecimiento. Y encima orientado a mujeres desempleadas o con trabajos precarios, porque queremos reducir el desempleo.

¿Por qué escoger el sector informático para vuestros cursos, y por qué el desarrollo “front end” específicamente?

Hemos utilizado una metodología Lean Startup para poner en marcha la iniciativa, y lo primero que hicimos fue hablar con empresas, preguntarles que perfiles estaban demandando, y entre ellos estaba el de programador front end; que, además veíamos que era más fácil de asimilar para perfiles no técnicos.

Vimos un nicho que está creciendo mucho, que es un perfil especializado y que podía tener demanda. Adalab

Para alguien que ya peina canas, es un poco frustrante el ver que tenéis una limitación de acceso, hasta los 39 años.

En el primer piloto no teníamos edad y en el segundo tampoco. Lo hicieron mujeres mayores de 39 y no hicimos distinción. Pero hemos detectado que, a partir de 35 años, está el mayor porcentaje de mujeres que no acaban el curso con éxito. Y las que terminaban tenían más dificultades para insertarse laboralmente en el modelo de inserción que nosotras barajamos, que es un perfil junior con un contrato laboral en prácticas.

Si que nos hemos planteado, porque existe esa necesidad, llegar a mujeres desempleadas de más edad, ya que suele ser más difícil para ellas encontrar un empleo de calidad. Tenemos en mente diseñar un programa adaptado a sus necesidades

Partiendo de la base que para vosotros lo importante es conocer JavaScript. ¿Cuáles son las razones que os han llevado a impartir React y no Angular?

En el primer curso de “front end” no veíamos ningún framework, o librería. En el segundo lo metimos justo después de la formación como un complemento. Y decidimos que fuese React porque, al final, creemos que no es tan importante el uno o el otro, sino que se enfrenten a esa manera de estructurar las cosas.

De hecho, en las alumnas de la segunda promoción que están ya trabajando, hay algunas que están haciendo React, otras Angular y otras están haciendo otra cosa diferente. Entonces creemos que es un poco lo de menos.

Inés, Rosario e Israel son los socios, pero con Álex y Carlos, conforman el "core" de Adalab

El caso de React, pues también detectamos, sobre todo viendo ofertas de trabajo de empresas, que hay una demanda creciente en ese framework. En cuanto a Angular, vimos que cambia el lenguaje, cambian muchas cosas y, ya que estábamos enseñando JavaScript, tendríamos que enseñar otro lenguaje distinto para el framework. Entonces Angular no era el mejor encaje para un curso tan corto como el que tenemos.

Nosotros siempre nos enfocamos a las necesidades que tiene el mercado laboral, para garantizar la inserción laboral de las alumnas. Que salgan con un perfil que sean empleables, y en puestos de calidad.

Por eso nuestro temario es abierto y va evolucionando con el mercado. Cuando las alumnas empiezan a trabajar, se hace seguimiento de las empresas y les preguntamos que saben, que necesitan reformar, que les gustaría que supiesen, y en base a todas las contestaciones vamos adaptando el temario.

Sin duda el proyecto está teniendo muy buena acogida porque estáis multiplicando el número de mujeres en cada promoción. ¿Hay tantas candidatas como para tener que escoger a la gente? ¿Cómo lo hacéis?

Adalaber

Si, escogemos. Por ejemplo, en la última promoción se apuntaron 150 candidatas y aceptamos a 32. Y de hecho queremos que crezca este ratio. Necesitamos que se apunten más gente para poder elegir mejor.

Lo más importante para nosotras no es nada técnico, sino la motivación de las personas. El proceso de selección es largo, requiere invertir horas y eso, ya de por sí, significa que las personas que lo completan están muy interesadas en hacer este curso.

Primero, hacen unos tutoriales como si fuesen las primeras lecciones de programación. Que les permite, por un lado, saber si les interesa la programación -porque muchas no han tenido contacto con la programación- y, por otro lado, hacemos unas preguntas al final de los tutoriales para ver si están entendiendo lo que se supone que deben entender.

También se les hace una prueba de inglés medio, para ver que pueden leer y entender un texto técnico, y que pueden contestar preguntas sobre ese texto. Y después, en esta promoción, hemos incorporado unos psicotécnicos sobre razonamiento lógico, matemático, lingüístico y concentración.

Finalmente hay una entrevista personal de una hora, en la que lo que interesa básicamente, es su nivel de compromiso, de responsabilidad, qué cosas han hecho en el pasado que demuestre corresponsabilidad, iniciativa y demás, y entender porqué quieren hacer este curso.

Porque el curso es super demandante, y queremos garantizar que las personas que entran están dispuestas a hacer el esfuerzo que requiere conseguir un trabajo como programadora en tan solo 4 meses.

¿La formación la habéis diseñado entre los tres?

Si, a ver, la formación ahora son seis horas presenciales, de las cuales cuatro horas son formación técnica y en las otras dos horas están las otras actividades, en las cuales está el desarrollo profesional. Que damos desde comunicación en público, trabajo en equipo, herramientas para la empleabilidad o inglés.

Sin las mentores y voluntarios, no haríamos ni el 50% de las actividades.

Y luego, también cuidamos mucho en Adalab la metodología docente. No queríamos hacer un programa de: me siento cuatro horas con un señor soltándome una chapa de clase magistral, porque así no se consigue, en cuatro meses, la capacidad para trabajar. Nuestra metodología está orientada 100% a la realidad laboral.

Ahora mismo son cuatro meses, que están divididos en cinco sprint de tres semanas, trabajando en objetivos de aprendizaje individuales y proyectos grupales distintos en cada uno. Utilizamos algunos artefactos de Scrum, pero no con un fin de desarrollar un proyecto en esa metodología, sino con el de aprender.

Son cuatro bloques en el que en el primero vemos temas de maquetación en general, html, css, less, y todo lo que tiene que ver con la parte de maquetación. En el segundo empezamos con JavaScript. Las bases de un lenguaje de programación, el DOM y cómo utilizarlo en una Web. En el tercero, aspectos avanzados de maquetación como SASS, automatización de tareas con Gulp, Css Grid, y temas más avanzados de JavaScript. Y en el último vemos React.

Luego queda un quinto en el que ellas desarrollan un proyecto en colaboración con una empresa.

¿Cuántas mujeres de vuestras formaciones consigue incorporarse, finalmente, al mercado laboral?

Ahora mismo, de todas las personas que terminan el curso de AdaLab, el 81% está trabajando.

Adalaber High

¿Hay alguien más haciendo algo similar?

En España, que nosotros conozcamos, no. Si que hay muchos meetup, grupos de mujeres, asociaciones que fomentan el reducir la brecha de género o hay algunas asociaciones que hacen charlas en colegios.

Pero centradas en formación e inserción laboral en programación para mujeres, no; que nosotros conozcamos. Fuera de España sí. En los Estado Unidos, por ejemplo, sí que hay bastantes organizaciones similares, y también en Latinoamérica.

Está claro que vuestro proyecto proviene y está empapado en una perspectiva solidaría, pero ¿cuál es vuestro modelo de viabilidad?

Legalmente, somos una asociación sin ánimo de lucro. Pero nosotros, cuando creamos Adalab, teníamos vocación de emprendimiento social. Lo que pasa es que en España las empresas sociales no existen como tal y tuvimos que buscar la forma jurídica que más se adaptaba a lo que queríamos hacer.

No tenemos ánimo de lucro, pero tampoco ánimo de pérdida.

Nosotros damos formación, y queremos que esta sea accesible a todo el mundo. Son cuatro meses intensivos, durante los cuales las alumnas pagan una cuota de compromiso de 50 euros al mes. Y solo las que consiguen trabajo, cuando lo consiguen, pagan cuotas retroactivas durante seis meses.

Por otra parte, las empresas que contratan a la alumna también pagan una cuota. Y el porcentaje más alto, a día de hoy, viene de donaciones de fundaciones que quieran apoyar nuestra misión.

¿Habéis recibido alguna ayuda estatal para la creación o sostén de Adalab?

Si, la difusión la hemos hecho a través del Instituto de la Juventud y del Instituto de la Mujer. Pero ahora tenemos dificultades para seguir haciéndola porque solo quieren hacer difusión de cursos que son gratuitos. Entonces, al tener un modelo que es al 50% subvencionado y las alumnas solo pagan otra parte cuando empiezan a generar ingresos, pues claro, estos modelos más innovadores y que buscan cierta sostenibilidad, a la administración le cuesta más entenderlo. Adalaber

No hemos solicitado ayuda estatal. Empezamos con premios de emprendimiento, luego con fundaciones, y hemos ido encontrando los caminos para seguir creciendo. Nos gustaría encontrar financiadores que se adapten un poco a nuestra visión y enteindan nuestro modelo de sostenibilidad.

El problema de los fondos públicos es que vienen con requisitos. Y tienes que adaptar tus proyectos a los requisitos de los financiadores. Y no necesariamente es lo que más le conviene al proyecto. Por eso nosotros queremos ser independientes y decidir en cada momento lo que creemos que es mejor para nuestras alumnas. No estar pendiente de, si no hago esto no me van a dar esta financiación.

¿Tenéis pensado hacer actuaciones mixtas para hacer visible a los hombres los problemas de las mujeres en entornos laborales y educativos tecnológicos, que han hecho que abandonen la industria desde los años 80 del siglo pasado?

Ahora mismo Adalab está muy centrado en formación. Nosotros, a día de hoy, no nos consideramos expertos en esta materia, o sea no tenemos desarrollado unos conocimientos para ilustrar a otros sobre cómo atraer a más mujeres, o como hacerlo mejor. Nosotros, creo que estamos aprendiendo muchas cosas en nuestro desarrollo pero, a día de hoy, en lo que estamos centrados en formación e inserción, de manera inclusiva, para que todas las mujeres se puedan apuntar, involucrando a toda la comunidad de programación. Y eso sí que lo sabemos hacer.

Nuestros voluntarios son tanto hombres como mujeres y, sin el apoyo de ellos, la mitad de las cosas que hacemos

Impulsamos a mujeres jóvenes con dificultades de empleabilidad, para que se conviertan en profesionales líderes del mundo digital.

en Adalab no serían posibles. Estos voluntarios se acercan a nosotros porque quieren aportar a construir un proyecto que apuesta por la diversidad. Entonces allí es dónde creemos que estamos haciendo ese mix a la hora de involucrar a toda la comunidad.

Pero sí, nos gustaría, en la medida que podamos crecer en equipo, invertir más en esto; sacar más partido de nuestra comunidad de voluntarios; y divulgar la misión de que haya más mujeres.

A día de hoy, no lo podemos hacer porque no lo podemos abarcar todo. Pero si es algo que tenemos en mente el crear, a lo mejor, un evento anual nuestro sobre esta temática para hombres y para mujeres.

Miremos hacia adelante, buscando con la vista un horizonte. ¿Cuál son vuestros planes de futuro?

Siempre que hablamos del crecimiento de AdaLab lo vemos de dos formas. Uno, es llegar a más mujeres. O sea, poder hacer más programas; y que más mujeres se apunten y puedan acceder a nuestra formación; y que se puedan insertar y ofrecer más talento a las empresas. Y por otro lado ofrecer perfiles diferentes, no solamente centrarnos en Front, sino evaluar otros perfiles.

Nosotros queremos un crecimiento que nos permita tener la calidad suficiente en cada una de las cosas que hacemos.

No es una cosa de: quiero estar en el mundo de entero. Si logramos conseguir la calidad en la formación que se necesita, en cada uno de los cursos, pues a seguir creciendo. Pero si crecer significa hacer las cosas con menor calidad o llegar menos a las personas, entonces no vamos a pasar por allí. Por ejemplo, nos ofrecieron irnos a otra ciudad el año pasado, y dijimos que todavía no estábamos listos.

Y también tenemos visión de mejorar nuestra comunidad. Empezar a hacer más eventos para promover que haya más mujeres en programación, y divulgar más nuestra misión.

Tenemos un programa de mentoring, que es solo para mujeres. Cada alumna tiene una mentora programadora con años de experiencia que le ayuda en su desarrollo profesional. Lo que queremos es que después nuestras alumnas sean mentoras de las siguientes y sean un referente para ellas.

Queremos que nuestras alumnas sean como “role models” para otras generaciones, intentando crear esos referentes.

Más información | Adalab

Adalaber 05

También te recomendamos

Así consiguió la Universidad de Carnegie Mellon aumentar el 35% al número de mujeres matriculadas en informática

Estas son las apps (y 3 wearables) más populares para hacer deporte

Nace Adetik, un foro para denunciar la precariedad del sector informático

-
La noticia "Nuestro objetivo es ofrecer el mejor curso de programación web front-end a mujeres", entrevista a Adalab fue publicada originalmente en Genbeta Dev por Juan Quijano .

El perfil del desarrollador en España desde la visión de RRHH

$
0
0

Two People Learning To Code 925x

Si alguna vez os habéis preguntado: ¿Soy demasiado mayor para aprender otro lenguaje de programación?, ¿necesito tener una titulación superior para tener mejores condiciones profesionales?, ¿desaparecerá el curriculum tradicional?, ¿qué competencia profesional es la que mejor define a un buen desarrollador?, ¿se valora más tener una buena base en un lenguaje o saber el último framework?, ¿dedicar tiempo a proyectos personales y compartirlos en GitHub, me ayudará a conseguir el trabajo que quiero?, ¿hasta qué punto, la empresa decide sobre mis condiciones profesionales?, ¿puedo conseguir flexibilidad laboral?, ¿es el teletrabajo habitual en España?, ¿qué lenguaje de programación es el más amado?, ¿el lenguaje que quiero aprender es el más demandado?, ¿existe interés en el paradigma funcional?, etc. Tal vez, este artículo, os facilite las respuestas.

Quería compartir con vosotros el artículo de “2018 Developer Skills Report” y adaptarlo a nuestra situación laboral en España desde una perspectiva de RRHH-Técnica. Es decir, no es una visión purista, es la combinación de ambas perspectivas las que guiarán todas y cada una de las claves que se van a comentar.

Nunca es ni demasiado pronto ni demasiado tarde para comenzar a programar

El informe comenta que la mayoría de los encuestados que comenzaron a programar entre las edades de 5-10 años son de UK y Australia. A día de hoy, esos desarrolladores tendrán unos 30-40 años. En España, conocer a desarrolladores que hayan empezado a programar a edades tan tempranas, no es nada habitual.

Cada vez se están llevando acabo iniciativas que tienen la finalidad de solventar este desequilibrio laboral

Además, vivimos en una alarma social permanente, donde hay más puestos de trabajo que especialistas digitales. Siendo más concretos (y seguramente gracias a la influencia de UK), se están llevando a cabo iniciativas que tienen la finalidad de solventar este desequilibrio laboral. Desde tener asignaturas de programación en los colegios y fomentar la motivación de los más pequeños al mundo de la informática; hasta promover la reorientación profesional hacia el mundo de la programación, a través de formaciones intensivas y Coding Bootcamps para los más mayores. En paralelo y no menos importante, estas iniciativas y otras enfocadas a mujeres, tienen la finalidad de conseguir no solo que trabajen en el mundo del desarrollo de software sino también fomentar la visibilidad de su trabajo.

Como no podía ser de otra manera, cualquier iniciativa que conlleva una transformación social, implica conflicto y conseguir que todo el mundo estemos de acuerdo ¡es imposible!. Pero siempre hay que ser respetuosos y no debemos olvidar que todo el mundo tiene derecho a una oportunidad. El éxito depende de saber aprovecharla y por eso, nunca será ni demasiado pronto ni demasiado tarde para comenzar a programar.

El autoaprendizaje es una parte esencial para mejorar como desarrollador

Una de las claves para aprovechar al máximo las oportunidades, está en el autoaprendizaje. En cualquier profesión (e incluso en cualquier ámbito de nuestra vida), hay que estar constantemente aprendiendo. Sin duda, es esencial ya no solo tener la actitud para querer aprender, sino también demostrar lo aprendido.

Actualmente con la tecnología e internet, existe la posibilidad de aprender lo que se desee en el momento que se quiera, no hay barreras para llegar al conocimiento deseado. Según este informe, Stack Overflow es el medio más utilizado por los desarrolladores. Además, los jóvenes tienen preferencia por YouTube, mientras que las generaciones anteriores prefieren los libros.

En España, los buenos desarrolladores son autodidactas y dedican su tiempo libre a mejorar. No viven a la espera de recibir esa formación por parte de su empresa. No ponen excusas y disfrutan dedicando tiempo a leer, asistir a eventos, programar, etc.

Lo que haces es más valorado que lo que pone en tu currículum

Los profesionales que nos dedicamos a la selección de talento software, todavía seguimos utilizando el curriculum y el perfil de LinkedIn para hacer un primer filtro, pero esa tendencia está cambiando y poco a poco, vamos aprendiendo a ver más allá y buscar otros indicadores como GitHub y proyectos personales para evaluar mejor las habilidades.

La formación académica se valora, pero no es suficiente. Se tienen en cuenta otros aspectos como la experiencia demostrada (calidad, no cantidad de años), la resolución de problemas y ¡cada vez más! los proyectos personales y GitHub.

El equilibrio trabajo-vida personal es la motivación principal del desarrollador

Los desarrolladores están aprendiendo a controlar su vida profesional y no dejarla en manos de la empresa

La mayoría de los desarrolladores tienen como prioridad, conseguir un equilibrio trabajo-vida; pero también una sed insaciable por aprender. Puede parecer contradictorio, pero la diferencia está en quién tiene el poder para decidirlo. Los desarrolladores están aprendiendo a controlar su vida profesional y no dejarla en manos de la empresa. Por eso, cada vez más, quieren flexibilidad en sus trabajos para dedicar parte de su tiempo libre a seguir aprendiendo.

Cuando hablamos de equilibrio trabajo-vida personal, hablamos de flexibilidad. Por eso, las condiciones profesionales más demandadas por los desarrolladores son:

  • Trabajar para empresas que se enfocan en ser productivos; no en el tiempo que pasan en la silla de la oficina.
  • Tener horarios flexibles para poder gestionar su tiempo en el trabajo y por supuesto, su vida personal. En España es muy frecuente que los desarrolladores tengan preferencias por entrar a trabajar antes de las 09:00 am, por tres motivos fundamentalmente:

    • Evitar atascos de tráfico
    • Son más productivos a primeras horas de la mañana
    • Pueden disponer de más tiempo por la tarde para su vida personal.
  • Por esos mismos motivos y porque además, creen que su trabajo se puede hacer sin tener que estar presencialmente en una oficina; el trabajo remoto es cada vez más solicitado (sobre todo por los mayores de 30 años, padres-madres y si su familia reside en otro lugar).

A día de hoy, las empresas que ofrecen estas condiciones, tienen el privilegio de poder contratar a quien quiera y donde quiera (en cualquier lugar del planeta). Es posible que veáis complicado poder disfrutar de estas condiciones profesionales en España, por eso lo valoráis como un requisito deseado. Pero a muy corto plazo, será un requisito imprescindible y la mayoría de las empresas de nuestro país, no tendrán más remedio que adaptarse.

La popularidad de JavaScript sigue creciendo

Si echáis un vistazo a los bootcamps, formaciones, repositorios en Github, blogs, ofertas de trabajo, etc. Javascript es uno de los lenguajes de programación más demandadas y por eso, el que más inquietud genera querer aprender (sobre todo entre los más jóvenes).

“Node.js is the newest jam”. Es considerada la tecnología favorita para todas las edades. En cuanto a los frameworks frontend, todos sabemos que AngularJS y React son lo más populares (sobre todo por la generaciones más jóvenes).

Según el informe, la mayor brecha del conocimiento está en los frameworks de JavaScript. Además aprender correctamente su correcto funcionamiento es más valorado por las startups porque necesitan lanzar su código rápidamente.

En España, muchos desarrolladores habláis de la “fatiga JavaScript” e incluso sois descartados de muchos procesos de selección por no haber trabajado con el último framework “de moda”. Por eso, solo las empresas que saben ver más allá del framework, contratan a buenos desarrollares de Javascript.

Python se gana el corazón de los desarrolladores de todas las edades

Si hay un lenguaje de programación que ha tenido un crecimiento brutal durante los últimos 5 años y además, es el más amado por los todos los desarrolladores, es Python.

En España, Java sigue siendo uno de los lenguajes más demandados en las empresas y además (o por eso), es el que siempre se aprende en la universidad. Pero Python, se está convirtiendo en el lenguaje favorito para enseñar a programar y también, el más valorado por su carácter multidisplinar, ya que puede ser usado en campos diferentes como en el análisis de datos.

Tal vez, JavaScript sea el lenguaje más demandado por las empresas, pero Python se gana el corazón de los desarrolladores de todas las edades.

Los desarrolladores quieren aprender de los gigantes tecnológicos de Silicon Valley

Hay que estar atentos al mercado profesional en España, pero hay tener la vista puesta en otros países, sobre todo en aquellos lugares donde se crean y están las mejores empresas del mundo como Silicon Valley. Además, nos guste o no, tienen el poder de decidir lo que la humanidad tiene qué consumir y cómo vivir. Su influencia (aunque unos años más tarde) siempre llega a nuestro país.

Según el informe, los lenguajes que más aprenden los desarrolladores (sobre todo porque saben que son los más demandados) son: JavaScript, Java, Python, C ++ y C. En cambio, los desarrolladores que quieren aprender de los gigantes tecnológicos de Silicon Valley tienen interés por: Go, Kotlin, Rust, Scala y Swift.

Es curioso, pero a medida que los desarrolladores sois más mayores tenéis más preferencia por aprender de los gigantes tecnológicos de Silicon Valley, en cambio los más jóvenes preferís JavaScript.

Aprender a desaprender con el paradigma funcional

En España, hay cada vez más interés por el paradigma funcional y por aprender de los lenguajes maestros como Haskell y Erlang. Pero sobre todo, conocer más sobre sus discípulos: Scala, Rust, Clojure, Elixir o Elm.

Alguna de las tendencias en nuestro país sobre la programación funcional:

  1. Los desarrolladores que llevan “pegándose” muchos años con JavaScript y sus múltiples frameworks, están empezando a usar alternativas como Elm.
  2. Elixir es el lenguaje preferido por los desarrolladores RoR. Tal vez que su creador José Valim sea miembro del equipo Rails Core, tiene bastante influencia.
  3. Scala es el lenguaje preferido por los desarrolladores Java. Esta tendencia es normal, ya que Scala se ejecuta sobre una máquina virtual Java.

Al fin y cabo, lo más importante es aprender nuevos conocimientos e incluso aprender a desaprender para aprender ;) Como bien, comentan en este artículo sobre “El resurgir de la programación funcional”: Nos abre la mente a ideas nuevas, y eso nos hace mejores programadores. Y es que a veces, enriquece mucho más aprender un lenguaje nuevo, que aprender más cosas del lenguaje que usamos todos los días.

Una recomendación clave

Si queréis trabajar con una determinada tecnología y en vuestra empresa no os dan la oportunidad, hacedlo por vuestra cuenta y subirlo a Github; compartir vuestro aprendizaje. El saber, sí ocupa lugar y tal vez en vuestro trabajo no podáis llevar a la práctica lo aprendido, pero es bastante probable que otras empresas, os den la oportunidad.

Más información | 2018 Developer Skils Report

También te recomendamos

Entrevistas de trabajo (V): La carta de presentación

Entrevistas de trabajo (IV): Cómo crear un curriculum ganador

Energía solar a los pies del sarcófago de Chernóbil

-
La noticia El perfil del desarrollador en España desde la visión de RRHH fue publicada originalmente en Genbeta Dev por Emma Salamanca .

Los 15 eventos para desarrolladores en España que no te puedes perder en 2018

$
0
0

Google Io 2017

Ya no pones 2017 en los formularios y las señoras mayores de tu edificio no te felicitan el año nuevo. Es definitivo, ya estamos en 2018 pero de verdad. Pues ya va siendo hora de organizar la agenda e ir anotando los eventos a los que asistir en este apasionante año, ¿no? Dicho y hecho, aquí te traemos los 15 eventos para desarrolladores en España que no te puedes perder en 2018. ¡Al turrón!

Disclaimer #1: sólo hemos tenido en cuenta eventos anuales a nivel autonómico o nacional, no los locales ni los que tengan una periodicidad inferior.

Disclaimer #2: el orden del listado es meramente cronológico.

T3chFest

1-2 de Marzo. Leganés (Madrid)

Ya queda nada para la sexta edición del multitudinario evento organizado por estudiantes y egresados de la Universidad Carlos III de Madrid. Más de 60 charlas y talleres de todo tipo y pelaje con ponentes de prestigio y varios tracks... y todo ello de gratis. Se ha convertido en un must y con razón.

Más info | Web

WeCodeFest

Wecode

2-3 de Marzo. Valladolid

Evento organizado por la gente de Cylicon Valley en la Escuela de Ingeniería Informática de Pucela que mezcla talleres, katas y charlas de temáticas variadas y una selección de ponentes muy interesante y con paridad entre hombres y mujeres. ¿La pega? Parece que ya no quedan entradas.

Más info | Web

Greach

16-17 de Marzo. Madrid

Y después de dos eventos más generalistas a uno mucho más específico, la gran fiesta de la comunidad de Groovy española. Impactantes ponentes internacionales y una ubicación muy céntrica, los Teatros Luchana, en pleno Chamberí, en la capital de España.

Más info | Web

WordCamp

Wordcamp

Madrid. 21-22 de Abril. Barcelona. 5-6 de Octubre

WordCamp es el evento por excelencia del mundo WordPress. Se celebra en muchas ciudades del mundo. En España, entre otras, en Madrid y Barcelona a lo largo del año. Para el de Barna todavía quedan unos cuantos meses y poco se sabe pero el de Madrid está a la vuelta de la esquina y la organización quiere que elijas tu las ponencias entre todas las que se han postulado.

Más info | Web Madrid y Web Barcelona

LechazoConf

Lechazoconf

19 de Mayo. Valladolid

Un evento chiquito pero que no podíamos dejar pasar: un día de charlas de desarrollo y emprendimiento... y de comer lechazo en la ilustre ciudad de Valladolid. Este año el tema de las charlas es "Un fracaso y un éxito". Yo ya tengo la servilleta colgada del cuello de la camiseta.

Más info | Web

J on the Beach

Jonthebeach

23-25 de Mayo. Málaga

¿Big data y espetitos? Trato hecho, claro. J on the Beach es un evento internacional de Big Data para desarrolladores y devops con un lineup de ponentes muy potente (gente de Google, Microsoft, Red Hat o Stripe) y especial foco en la diversidad y los grupos minoritarios. Y todo ello en mayo en Málaga. Combo ganador, sin duda.

Más info | Web

DrupalCamp

Drupalcamp

26-27 de Mayo. Alicante

La siempre animosa comunidad drupalera española se reúne este año en Alicante para la habitual DrupalCamp. Todavía se sabe poco del cartel de este año pero siendo un evento con la larga trayectoria que tiene y con la gente de la AED detrás, seguro que no defrauda.

Más info | Web

Call of Data

2-3 de Junio. Madrid

Segunda edición de este hackaton entorno al Big Data organizado por R-Ladies Madrid y que tiene la particularidad, más allá del sabor a exploitation de su naming, de que los equipos tienen que estar formados por hombres y mujeres al 50%.

Más info | Web

Agile Open Space

Aos 2018

12-13 de Julio. Caldes de Montbui (Barcelona)

Ya en pleno verano un poco de agilismo desde la localidad barcelonesa de Caldes de Montbui con la AOS2018, un evento de tipo open space sobre metodologías ágiles y XP. Del otro gran evento anual de la comunidad agilista española, la CAS, poco se sabe todavía.

Más info | Web

AngularCamp

Angularcamp

18-20 de Julio. Barcelona

El eventazo del año de la comunidad de AngularJS, que este 2018 se abre a toda la comunidad Javascript y de las tecnologías web (nodeJS, React, Polymer, VueJS...), se celebra en julio en Barcelona, la AngularCamp 2018. Todavía queda mucho y están con el Call for Papers, digo Speakers pero vista la edición del año pasado, la cosa promete, es así.

Más info | Web

TarugoConf

¿21 de Septiembre?. Madrid

La tercera edición del evento surgido de la Bonilista, el newsletter del incansable e inefable David Bonilla, se dice, se comenta, que se celebrará a finales de septiembre (e imaginamos que en Madrid). Mejor nos vamos guardando la fecha porque amenazan con seguir mejorando y creciendo. Se admiten apuestas sobre los ponentes, que seguro serán de postín.

Más info | Twitter

PyConEs

Pycones

5-7 de Octubre. Málaga

En su sexta edición, el mayor evento pythonero de la piel de toro se traslada hasta Málaga durante tres días a principios de octubre. Poco más se sabe de momento pero seguro que no defrauda y vuelven a contar con un buen lineup de carácter internacional.

Más info | Web

Lambda World

Lambda

25-26 de Octubre. Cádiz

No todo va a ser programación imperativa, la programación funcional también tiene su sitio en este listado con Lambda World, el evento que ha convertido en los últimos años a Cádiz en el centro nacional de estas disciplinas, de Scala a Kotlin pasando por Clojure o Haskell. Todavía están en fase de Call for Papers (normal quedando tanto tiempo, la verdad) pero las expectativas son altas.

Más info | Web

Big Data Spain

13-15 de Noviembre. Madrid

Ya hay fechas para uno de los eventos más tochos en toda Europa sobre Big Data, cloud, inteligencia artificial e innovación digital. Todo en inglés, speakers internacionales de primer nivel y, en un principio, las amplias instalaciones del Kinépolis de la Ciudad de la Imagen. Un must.

Más info | Web

Codemotion

Codemotion

¿23-24 de Noviembre?. Madrid

En los mentideros de Internet se habla de estas fechas de finales de noviembre para la nueva edición del evento de desarrollo más multitudinario que se celebra en suelo español de forma anual, Codemotion Madrid. Imaginamos que el sitio elegido sería de nuevo el Campus de Montepríncipe de la Universidad CEU San Pablo. Sea como fuere, cita ineludible.

Más info | Twitter

Y hasta aquí hemos llegado, que no es poco. Los comentarios, como siempre, quedan abiertos y ahí podréis añadir todos aquellos eventos que creáis que nos hemos dejado en el tintero.

También te recomendamos

Adaptador Wifi y PLC, ¿en qué se diferencian?

GDG Spain: entre las comunidades de desarrolladores más activas

Todo lo que debes saber sobre base de datos en el SQL Saturday

-
La noticia Los 15 eventos para desarrolladores en España que no te puedes perder en 2018 fue publicada originalmente en Genbeta Dev por Fernando Siles .

¿Qué pruebas debemos hacerle a nuestro software y para qué?

$
0
0

Testing

“Los test no son opcionales”. Esto que parece a muchos una verdad de perogrullo, sigue siendo uno de los temas pendientes en el mundo del desarrollo de aplicaciones de software actual.

Sí, increíblemente aún hay muchos compañeros “del metal” que no son conscientes que programar sin pruebas no solo es como hacer acrobacias en el trapecio sin red de seguridad, sino además una fuente de errores, malas prácticas y ansiedad.

Y por ello quiero repasar los fundamentos básicos de las pruebas que debiéramos aplicar, cada uno en su necesidad, a nuestros desarrollos.

¿Por qué hacer pruebas?

Para que lo entienda hasta el más novel de los lectores, hacer pruebas es la forma de asegurarse que lo que queremos que haga nuestro programa, lo haga, y lo haga sin errores.

La construcción de software implica conocimiento, experiencia, talento, capacidad intelectual y un punto de arte. Es decir, es una labor muy difícil, y falta aún mucho para que eso cambie a mejor. De hecho, la complejidad está tendiendo al crecimiento de una forma, como en todo lo relacionado con el Front-End en Javascript, al absurdo.

Habiendo superado, hace ya décadas, la capacidad humana de aprensión y memorización; lo que implica necesariamente que los fallos y errores son inevitables si los intentamos evitar con solo nuestras capacidades humanas.

Las pruebas no son opcionales. Un software sin pruebas es una bomba a punto de estallar

¿A quien no le ha pasado que ha dejado su código medio año en un cajón, y a la vuelta de ponerse a toquetearlo tener la sensación de que lo ha escrito otra persona? No reconocemos a nuestra propia criatura.Y no hablemos cuando estamos integrados en un equipo, o recibimos el “regalito” de soportar o evolucionar un código heredado.

Por ello las pruebas son imprescindibles, ya que nos permiten garantizar que las aplicaciones cumplen las funcionalidades que se esperan de ellas y las expectativas de calidad (no solo de código); ayudando a encontrar esos errores o defectos que aún no se han descubierto; reduciendo el costo del desarrollo, el de propiedad para los usuarios; y desarrollar confianza en los clientes al evitar los molestos errores de regresión.

Eso sin hablar de la sensación de seguridad incremental que se obtiene cuanto más cerca estamos de un despliegue, ya que a más código que tenemos, más pruebas nos aseguran (en forma de una tupida malla) que todo funciona correctamente.

DevOps y la herencia de la automatización

Devops

La llegada de las metodologías Agiles, desde los años 90 del siglo pasado, fue un revulsivo en la organización y ejecución de pruebas dentro de procesos Waterfall.

En estos últimos, se podría generalizar, las pruebas principalmente eran manuales; definidas meticulosamente en voluminosos documentos de planes de pruebas; y que se realizaban solamente una vez acabada la codificación del software.

Xtreme Programming, en cambio, hizo mucho hincapié en la automatización y en el concepto de pruebas orientadas a la prevención de los finales de los años 80; marcando de esta forma, la futura filosofía Agile. Por ello, actualmente utilizamos frameworks de pruebas que permiten realizar automáticamente la mayoría de los test en todos los ámbitos de la aplicación.

Las pruebas manuales y automatizadas son complementarias

Y más cuando se pretende adoptar el concepto de Integración Continua, como parte imprescindible de DevOps, donde la propia construcción y validación de la Build por medio de todo tipo de pruebas automáticas es parte inherente del proceso.

Siendo esto aún más crítico en niveles altos de madurez en donde llegaríamos a aplicar despliegue automatizado o, incluso, continuo.

La importancia que han ido ganando las pruebas ha sido tal que la propia forma de codificar el software también ha sufrido cambios profundos. El nacimiento de TDD (desarrollo orientado a las pruebas) y su forma de supeditar el código a los test, implica que hacer software testeable es un requisito imprescindible en el código de calidad.

Y, aunque no lleguemos a utilizar esta avanzada técnica de desarrollo (que no es nada fácil), el objetivo de poder probar de forma automática nuestro código, ha reforzado prácticas tan importantes en la programación orientada a objetos como es SOLID.

Pruebas automatizadas vs manuales

Tortoise And Hare

Tenemos una primera gran división en el mundo de las pruebas entre las automatizadas y las manuales.

Como indica su nombre, las primeras dependen de una herramienta de pruebas que implica, en casi todos los casos, un lenguaje o subconjunto del lenguaje propio. Es decir, si las hago en nUnit va a ser muy complicado pasarlas a MS Test.

Las pruebas manuales requieren de interacción humana. El probador se pone en la piel del rol de usuario que se tenga que validar, y realiza todas aquellas operaciones que tenga definidas en un plan de pruebas, o le busca “las cosquillas” al sistema para llegar allí donde ningún “luser” ha llegado anteriormente...

Como ves, ambos tipos de ejecución de pruebas son complementarios e importantes para garantizar un software de calidad.

La automatización es rápida y puede probar muchas variaciones sutiles en los datos; también puede repetir fácilmente las pruebas a medida que el software evoluciona; y debido a que es ejecutado por el sistema, se evita la fatiga y los errores que a veces acompañan a las tareas repetitivas.

En cambio, aunque las pruebas manuales generalmente tardan más en ejecutarse (ya que las realiza una persona), a menudo requieren mucho menos tiempo de configuración. Es una buena opción para las pruebas que solo deben ejecutarse ocasionalmente, o en los casos en que el costo/tiempo de la configuración de automatización supere los beneficios.

Un universo de tipos de pruebas

Siguiendo los pasos de la complejidad inherente de nuestra industria, las pruebas también sufren de una miríada inacabable de tipos, versiones, evoluciones y clases. Pero centrémonos en las más importantes e imprescindibles, según cada caso y contexto.

Prueba unitaria: las pruebas unitarias son pruebas automatizadas que verifican la funcionalidad en el componente, clase, método o nivel de propiedad.

Tddmantra

El objetivo principal de las pruebas unitarias es tomar la pieza más pequeña de software comprobable en la aplicación, aislarla del resto del código y determinar si se comporta exactamente como esperamos. Cada unidad se prueba por separado antes de integrarlas en los componentes para probar las interfaces entre las unidades.

Las pruebas unitarias deben escribirse antes (o muy poco después) de escribir un método; siendo los desarrolladores que crean la clase o el método, quienes diseñan la prueba.

Así, conseguimos mantener el foco en lo que debe hacer el código, y se convierte en una poderosa herramienta para aplicar KISS, JIT, y mantener el foco en lo que tiene que hacer en vez de en el cómo, evitando introducir complejidad sin valor.

Pruebas de integración: desde una perspectiva de prueba, las unidades individuales se integran juntas para formar componentes más grandes. En su forma más simple, dos unidades que ya han sido probadas se combinan en un componente integrado y se prueba la interfaz entre ellas.

Las pruebas de integración – o de componentes - identifican problemas que ocurren cuando las unidades se combinan. Los nuevos errores que surgen probablemente estén relacionados con la interfaz entre las unidades en lugar de dentro de las propias unidades; simplificando la tarea de encontrar y corregir los defectos.

Pruebas de regresión: cada vez que se realizan cambios en un proyecto, es posible que el código existente ya no funcione correctamente o que se presenten errores no descubiertos previamente. Este tipo de error se llama regresión.

Para detectar estos defectos, todo el proyecto debe someterse a una regresión: una nueva prueba completa de un programa modificado, en lugar de una prueba de solo las unidades modificadas, para garantizar que no se hayan introducido errores con las modificaciones.

Como se puede deducir, este tipo de pruebas debe ser automatizado porque puede estar compuesto por decenas o miles de pruebas unitarias, de integración o más.

Una versión menos costosa, podría ser construir pruebas que repliquen las acciones que provocaron la regresión, y comprueben que han sido corregidos al no volver a sucederse los errores; además de añadir los test unitarios que aseguren que el código que ha corregido la regresión funciona correctamente.

Pruebas de funcionalidad: pruebas automatizadas o manuales que prueban las funcionalidades de la aplicación o módulo construidos desde el punto de vista del usuario final, con sus diferentes roles, para validar que el software hace lo que debe y, sobre todo, lo que se ha especificado.

En su versión automática son pruebas que se automatizan para "ahorrar tiempo de pruebas". A partir de los casos de prueba de las pruebas manuales, se automatizan los casos de prueba para que se repitan en las ejecuciones. Esos casos suelen ser los más importantes (happy flow) de los módulos o procesos de negocio "vitales" de la aplicación. Es decir, los procesos que siempre tienen que funcionar y que bajo ningún concepto pueden fallar. El objetivo de las pruebas funcionales automáticas es comprobar que no haya regresiones.

Las pruebas obligan a hacer un código desacoplado y promueven la calidad

En el caso de las manuales, las ejecuta un tester como si fuese un usuario, pero siguiendo una serie de pasos establecidos en el plan de pruebas, diseñado en el análisis de los requisitos para garantizar que hace lo que debe (casos positivos), que no falla (casos negativos) y que es lo que se ha solicitado.

El tester realizará las acciones indicadas en cada paso del caso de prueba comprobando que se cumple el resultado esperado. Si el resultado es distinto, se reportará un defecto con todo detalle: descripción, datos utilizados, capturas de pantalla, etc., para facilitar la solución.

El mayor problema con el que se enfrentan las pruebas funcionales para ser automatizadas es su fragilidad. Cada prueba testea miles de líneas de código, centenares de integraciones en todos los tiers, y una interfaz de usuario cambiante. Llegando a no ser sostenible el conjunto de pruebas en relación con su definición, coste y mantenimiento.

Llevando las aplicaciones a su límite

Test De Carga

Ya tenemos probada y desplegada nuestra aplicación. Ahora viene la parte de operaciones y también se debe probar de forma automática las capacidades y debilidades del software y de la plataforma sobre la que corre (infraestructura y dependencias), llevándola al límite, para comprobar su disponibilidad, estabilidad y resiliencia.

Pruebas de estrés: las pruebas a pequeña escala, como un usuario único que ejecuta una aplicación web o una base de datos con solo un puñado de registros, pueden no revelar problemas que suceden cuando la aplicación se usa en condiciones "reales".

La prueba de estrés empuja los límites funcionales de un sistema. Se realiza sometiendo el sistema a condiciones extremas, como volúmenes de datos máximos o una gran cantidad de usuarios simultáneos.

También se utilizan para, llevado el sistema al colapso o degradación, comprobar su funcionamiento continuado por encima de su límite y, una vez liberado de la carga, evaluar su capacidad de resiliencia volviendo a su estado óptimo de funcionamiento.

Lleva la aplicación al límite, busca que rompa, y luego observa como se reconstruye

Y en la actualidad cada vez más se utilizan las capacidades de la Cloud tanto para crear un gran número de usuarios, distribuir las peticiones en todo el mundo, como para obtener los recursos de procesamiento, memoria y almacenamiento necesarios en operaciones de este calibre.

Prueba de rendimiento: determinan la capacidad de respuesta, el rendimiento, la confiabilidad y/o la escalabilidad de un sistema bajo una carga de trabajo determinada.

En aplicaciones web, las pruebas de rendimiento a menudo están estrechamente relacionadas con las pruebas de estrés, la medición del retraso y la capacidad de respuesta bajo una carga pesada.

En otras aplicaciones (escritorio y aplicaciones móviles, por ejemplo), las pruebas de rendimiento miden la velocidad y la utilización de recursos, como el espacio en disco y la memoria.

Si almacenamos todos los resultados de las pruebas de rendimiento durante un plazo de tiempo, podemos conocer el estado de salud de la aplicación, pudiendo obtener tendencias y previsiones de funcionamiento; y optimizando cada despliegue según el rendimiento necesario en cada caso.

Pruebas de seguridad: validan los servicios de seguridad de una aplicación e identifican posibles fallos y debilidades.

Muchos proyectos utilizan un enfoque de caja negra para las pruebas de seguridad, lo que permite a los expertos, sin conocimiento del software, probar la aplicación en busca de agujeros, fallos, exploit y debilidades.

Y esto es solo el principio

Funcionales, Usabilidad, Exploratorios, Aceptación, Infraestructura, etc. El universo de las pruebas es inmenso, siendo una de las ramas de la mal llamada informática, que requiere de una especialización especifica.

Y más cuando la llegada de la Infraestructura como Código, automatiza y mejora procesos conocidos como el Estado de Configuración Deseada, añadiendo capacidades de lógica de negocio en la construcción, mantenimiento y pruebas a nivel de plataforma.

No lo olvides nunca: las pruebas no son opcionales.

También te recomendamos

Cómo ver nuestras historias archivadas en Instagram

DevOps. ¿Moda, mito o evolución?

12 herramientas imprescindibles para asegurar la calidad del software (y sus alternativas)

-
La noticia¿Qué pruebas debemos hacerle a nuestro software y para qué? fue publicada originalmente en Genbeta Dev por Juan Quijano .


El ciclo de DevOps, una guía para iniciarse en las fases que lo componen

$
0
0

Devops Loop Illustrations

Hay términos que están de moda, tienen mucha capacidad de empoderamiento, y producen movimientos innovadores en las empresas. Sobre todo, las dedicadas a negocios relacionados con la economía digital.

Uno de ellos es, junto con microservicios, Agile, o transformación digital, el término DevOps.

Este es un concepto, cuasi una filosofía, del cual en este artículo voy a centrarme en la descripción de las fases del ciclo iterativo que lo componen; con el objetivo de aclarar conceptos básicos que debo tener interiorizados antes de emprender su adopción.

Fases en DevOps

Traffic Lights 2147790 960 720

En la actualidad, DevOps se puede definir como un símbolo de infinito o un circulo que define las diferentes áreas y fases que lo componen:

  • Plan
  • Desarrollo
  • Integración continua
  • Despliegue
  • Operación
  • Monitorización

Es importante comprender que es una de las múltiples representaciones, no el canon definitivo. Habiendo simplificaciones totalmente válidas en forma de cuatro fases principales, o descomposiciones detalladas de cada una de ellas.

Otra idea imprescindible de interiorizar es que se trata de la definición de un flujo iterativo, por lo cual diferentes procesos pueden estar comprendidos en diferentes fases de forma orgánica y superpuesta, siempre ajustándose a los conceptos fundamentales de valor y mejora continua.

Debo evitar caer en la tentación de considerarlo como un ciclo en cascada, en donde las fases están delimitadas rígidamente por una frontera que las separa, o que solamente se puede iniciar una fase cuando la anterior ha finalizado del todo.

Ahora, voy a mirar con más detalle cada fase, permitiéndome una licencia muy habitual en los procesos DevOps, que es utilizar el framework Scrum (y sus arquetipos) como metodología de trabajo para hacer más sencillas las explicaciones.

Gestión y planificación

Stratgia Proceso De Planificacion Estrategica

Todo proyecto necesita una visión que indique a los participantes -sean directos o indirectos- el motivo y fin último del trabajo a realizar; definiendo un conjunto mínimo de funcionalidades que permitan aportar Valor en cada iteración, los criterios de aceptación a cumplir y la definición de acabado; para cada una de las fases y en el conjunto del proyecto.

Esto se constituye como una Pila de Producto viva, que está soportando continuadamente un proceso de “jardinería”, desde un punto de vista de negocio, la cual alimenta a las diferentes fases de desarrollo y operaciones; y que aborda los cambios y evoluciones según un proceso de mejora continua basado en un feedback temprano y continuado.

Para ello utilizare las “liturgias” de Scrum, como son las reuniones de Planificación de la iteración y la Revisión de la iteración; pero sin, por ello, dejar de tener una comunicación e implicación constante entre negocio y el equipo técnico. Siendo imprescindible que Negocio y Gestión se formen en las herramientas y métricas diseñadas para que tengan una visibilidad veraz y suficiente del desarrollo del proyecto.

Desarrollo, construyendo código

Mr Burns Monkeys Typewriters1

Esta fase es en donde se construye. Sea picando código, diseñando infraestructura, automatizando procesos, definiendo las pruebas o implantando la seguridad.

Es en donde, en la actualidad, se está realizando el esfuerzo más importante en la automatización de las acciones repetitivas o complejas; y que debiera ser uno de los primeros peldaños que escalar para implantar DevOps en una organización.

Si tuviera que resumir en una sola palabra el concepto más importante de esta fase, esta sería “pruebas.

Ya sea en una aplicación de gestión, operaciones con datos o el despliegue de infraestructura virtual; siempre voy a trabajar en código – ya sea con un lenguaje de programación o de scripting; el cual debe ser almacenado en un gestor de código que me permita operaciones básicas como históricos, ramas, versionado, etc.

Pero con esto no es suficiente y cada pieza construida debe incluir (obligatoriamente) sus propias pruebas automatizadas. Es decir, los mecanismos con los que el propio sistema pueda asegurarse de que lo que hemos realizado es correcto, no falla, no hace fallar a otras partes, cumple los criterios de aceptación, y señala de forma temprana los errores que surgen en todo desarrollo.

De hecho, este es un camino imperativo para adoptar Devops, desde sus más incipientes estadios.

Primero almaceno el código/script en un gestor para poder tener versionado y poder hacer rollback; luego empezar a incluir las pruebas automatizadas, lo cual va a producir una transformación profunda en las técnicas de codificación (desacoplamiento, segregación, modularización, etc); por último, se llega a la orientación de lo construido hacía las fases siguientes, incluyendo la transformación del propio flujo de trabajo.

Integración continua, o cómo dormir tranquilo

Sleeping Baby 1

Aunque en esta fase y la anterior la mayoría de los autores nos centramos en un punto de vista de desarrollo, realmente la llegada de DevOps y los conceptos de Infraestructura como código, hacen que IT también sea pleno participante de esta fase.

La integración continua es automatizar el mecanismo de revisión, validación, prueba y alertas del valor construido en las iteraciones, desde un punto de vista global.

Es decir, mi singular funcionalidad o característica, que he construido en mi entorno de desarrollo, junto con las pruebas automáticas que aseguran su correcto funcionamiento, son publicadas en un servicio que la integra con el resto de la aplicación.

Así, lanzando todas las pruebas que incluye cada funcionalidad, más las pruebas de integración de toda la aplicación, más las pruebas funcionales, más las pruebas de aceptación, más los análisis de calidad del código, más las pruebas de regresión, podré estar seguro de que mi aplicación sigue funcionando correctamente.

Y si algo falla, saltará la alerta temprana indicando en qué pieza y en qué línea está rompiendo mi sistema.

Así que, cuanto más me acerque al momento de iniciar el camino crítico del despliegue, más tranquilo estaré porque más pruebas incluyen mi trabajo.

Despliegue automatizado

Gns60gr

Desplegar, en las organizaciones clásicas, siempre ha sido un dolor. Dos roles (Dev e IT) con objetivos e intereses divergentes se encuentran en una batalla de incomunicación y recelo mutuo para publicar la aplicación en los diferentes entornos de trabajo: desarrollo, integración, calidad/test, preproducción, producción, etc.

Como en toda cadena, es fácil romper por el eslabón más débil, y cuantos más pasos existan en los procesos de despliegue, más posibilidades de fallo humano se suman.

Así, DevOps promueve la automatización de los despliegues por medio de herramientas y scripts, con el objetivo último de que todo el proceso se resuelva con un botón de aprobación o, idealmente, la activación de una característica.

Entre cada entorno de despliegue, hay que tener muy en cuenta la administración del contexto (crear, configurar y destruir entornos); realizar y superar las pruebas específicas de cada uno (como pueden ser pruebas de rendimiento, resiliencia, funcionales, de seguridad o de UX); y administrar la gestión de la configuración (CMDB) de acuerdo con las complejas necesidades de los diferentes contextos de despliegue.

Lo más crítico y dificultoso en esta fase, más que conocida y adoptada en el entorno IT, es la llegada del concepto Cloud con sus capacidades de Infraestructura como código, que fuerza un cambio en el paradigma de la gestión de la infraestructura. Que pasa de una gestión de recursos finitos a una gestión basada en una optimización permanente de costes.

Operaciones, velando por el buen funcionamiento

Istock 000026445143small 0

Es una minoría las aplicaciones que son puestas en producción y no requieren de un trabajo constante en su optimización, evolución, o soporte. Pero, además, debo tener en cuenta todas las operaciones relacionadas con su funcionamiento que deben realizarse de forma continuada durante toda la vida del software.

Así tendré, el ajuste de los recursos de acuerdo con la demanda o las características de crecimiento de las aplicaciones; la modificación dinámica de la infraestructura por causas de seguridad, rendimiento, disponibilidad, etc.; o la optimización de procesos y procedimientos que requieren cambios en el contexto de ejecución y explotación.

En esta fase, aplicará como anillo al dedo la adopción del concepto de Nube – sea pública, privada o hibrida- en dónde las operaciones puedan explotar las capacidades de escalabilidad, persistencia, disponibilidad, transformación, resiliencia y seguridad que ofrecen este tipo de plataformas.

Debiendo trabajar en la automatización de la optimización de los escenarios de operaciones, de forma que vuelvo a mitigar los fallos a causa de error humano.

Monitorización, o el arte de medir

Measurement

Esta última fase de un proceso DevOps, es una fase permanente y que se aplica a todo el ciclo completo.

Es dónde voy a definir las medidas que estaré monitorizando para controlar el estado de salud de las aplicaciones y su infraestructura, siendo esto el histórico de las mediciones durante un periodo de tiempo, que me muestran la evolución del sistema.

Tiene una vertiente reactiva, en donde de acuerdo con los resultados iré ajustando o modificando la plataforma; y otra proactiva en la cual un proceso de aprendizaje continuo me va a permitir adelantarme a las necesidades y riesgos.

Lo que no se define no se puede medir. Lo que no se mide, no se puede mejorar. Lo que no se mejora, se degrada siempre. William Thomson.

Pero no todo es tecnología, y en esta fase se va a consolidar el feedback continuo de todos los ámbitos y niveles del ciclo Devops para poder incluirlos en la siguiente iteración durante la fase de Plan, o de forma inmediata con correcciones puntuales.

Monitorizaré, analizaré y mediré todo aquello que me pueda aportar una visión general del estado actual del proyecto (en su definición más amplia), incluyendo todas las dependencias que tuviera; pero con capacidades de bajar hasta la singularidad para observar con detenimiento el funcionamiento de una pieza en particular.

Y por medio de la realización de retrospectivas, completaré el proceso de Kaizen (mejora continua) del proyecto, incluyendo todos los orígenes relacionados con el desarrollo positivo de los trabajos.

Sobre las fases del ciclo DevOps

Continuous Delivery Infographic 1x

He mostrado una visión generalizada e idílica de un ciclo DevOps completo, siguiendo una estructura lógica basada en la experiencia y en la profusa literatura que hay publicada.

La realidad es bastante más compleja tanto en la implantación como en la ejecución; pero sin duda el mayor escollo son los problemas de comunicación entre los equipos con objetivos e intereses diferentes, y la desconfianza de salir de mi zona de confort siguiendo una “moda”.

Sin embargo, los beneficios son muy importantes. Y no solo en el ámbito de la productividad, del Time to Market, o de la flexibilidad de la empresa frente a las demandas del negocio y los clientes; si no también en los factores humanos, de mejora de la calidad de vida, que hay que valorar en su justa y positiva medida.

También te recomendamos

Trabajar con microservicios: evitando la frustración de las (enormes) aplicaciones monolíticas

Dime cuál es la organización de tu equipo de desarrollo y te diré cómo es la arquitectura de tu software

Un viaje por los progresos de la luz en televisión

-
La noticia El ciclo de DevOps, una guía para iniciarse en las fases que lo componen fue publicada originalmente en Genbeta Dev por Juan Quijano .

Análisis de la encuesta Stackoverflow 2018

$
0
0

Stackoverflowsurvey2018

Stack Overflow es, sin duda, la mejor y más potente herramientas de difusión de información de desarrollo en todo el mundo. Junto con Google se ha convertido en un favorito imprescindible para encontrar la solución a, prácticamente, cualquier duda relacionada con código.

Y cada año hacen una mega encuesta entre sus millones de usuarios sobre múltiples aspectos de la industria del desarrollo, en la cual se pueden desprender interesantes y sorprendentes análisis.

El análisis de Stack Overflow

Stackoverflow

Como dice en la portada de los resultados, este 2018 se han ampliado los temas que se preguntan en la encuesta de 30 minutos que han realizado miles y miles de desarrolladores. Y sus conclusiones más importantes son:

  • DevOps y el aprendizaje automático son tendencias importantes en la industria del software actual. Los lenguajes y frameworks asociados con este tipo de trabajos van en aumento, y los desarrolladores que trabajan en estas áreas obtienen los salarios más altos.
  • Solo un pequeño porcentaje de desarrolladores declaran que escribirían código poco ético; o que no tienen la obligación de considerar las implicaciones éticas del código. Pero más allá de eso, los encuestados ven un montón de ética dudosa. Los desarrolladores no están seguros de cómo denuncia los problemas éticos, y tienen diferentes ideas sobre quién es el responsable final de este código.
  • Los desarrolladores son en general optimistas sobre las posibilidades que ofrece la inteligencia artificial, pero no están de acuerdo sobre cuáles son sus peligros.
  • Python ha aumentado en los rangos de lenguajes de programación en nuestra encuesta, superando C # en popularidad este año, al igual que superó a PHP el año pasado.
  • Al evaluar una oferta de trabajo, los diferentes tipos de desarrolladores aplican diferentes conjuntos de prioridades. Las mujeres declaran que sus mayores prioridades son: la cultura de la compañía y las oportunidades para el desarrollo profesional; mientras que los hombres dicen que sus mayores prioridades son la compensación económica y el trabajo con tecnologías específicas.

Poniendo las cosas en contexto

Idea Context

Primero, como en toda opinión o conclusiones de un análisis, dudemos de todo.

Hay cosas que llaman poderosamente la atención, como que el 93.1% de los participantes sean hombres, dejando la presencia de las mujeres en un raquítico 6.7%. Como menos malo podría señalar que las cifras mejoran un poquito (0,5%) en los estudiantes. Pero sin duda hay que empezar a tomarse muy en serio el hacer estudios de las causas de esta inmensa disparidad para tomar, si fuera necesario, las medidas más adecuadas.

Es decir, Stack overflow es un enorme campo de nabos, con casi siete excepciones por cada 100 desarrolladores. Lo que marca un sesgo importante a las conclusiones que se puedan obtener del análisis de los datos.

Luego hay una contradicción bastante llamativa. Los dos países con más profesionales son USA y la India. Si sumamos la norteamericana anglosajona más Europa, no llegamos ni al 50% de los encuestados; de hecho, solo la suma de todos los participantes en Asia supera el 30%. Sin embargo, el 75% de los desarrolladores se declaran blancos o descendientes de europeos, lo cual pudiera ser contradictorio o señalar un sesgo racista en cómo nos vemos a nosotros mismos.

Otra cosa que me ha “escamado”, supongo que será por el perfil de quien contesta a esta encuesta, es que un poco menos de la mitad de los Developers declaran contribuir a proyectos de Código Abierto, lo cual está a años luz de mi contexto en España.

Perfil del desarrollador medio

Developer

Los desarrolladores son jóvenes (de menos de 35 años), que conforman una semblanza de capa media alta; hijos de universitarios, y que a su vez también lo son; tan apasionados de su trabajo que lo consideran también como su hobbie principal; que curran entre 8 y 12 horas; y que no hacen ejercicio físico así les vaya la salud en ello.

Aun siendo universitarios, la autoformación es el modo más normal y generalizado de aprender una vez integrados al mundo laboral. Lo cual sucede de forma inmediata o casi inmediata en cuanto se ponen en el mercado.

Sin duda es un sector con pleno empleo, lo cual atrae a un 40% de intrusismo profesional. Es decir, tener una formación que no tiene nada que ver con programar.

Viendo la experiencia en programación de acuerdo con el tipo de puesto en la empresa, las cifras indican que la mayoría de los encuestados no superan el lustro programando. Pudiéndose inferir que, lo de ir escalando posiciones hacia puestos de gestión o coordinación, es un camino que sigue aplicando en todo el mundo.

Sobre lenguajes y tecnologías

Html5

Imbatible, el front end en general y el javascript en particular, han batido a todos sus competidores (por sexto año consecutivo). Python es quien más crece, desbancando a C# (que parece que está perdiendo fuelle), pero aún lejos de Java – quien lo ha visto y quien lo ve -o de SQL.

Mi sorpresa ha llegado al ver tan retrasado a TypeScript (tenía la sensación de que estaba usándose cada vez más) y más teniendo en cuenta que el 67% de los encuestados lo “amán”.

En la parte de librerías, Node.js sigue siendo el rey, seguido de la lucha entre Angular y React, que está ganando el primero, aunque con el aliento del segundo pegado al cogote. Y otro resultado inesperado llega con la entrada fuerte de .NET Core, ya que tenía la sensación de que se estaba adoptando poco en producción.

Sobre bases de datos cuatro apuntes. La excelente salud de MySQL luego de las dudas que se generaron sobre su futuro, la caída a los abismos de Oracle, el buen hacer de Microsoft con SQL Server que, siendo una BD relacional completa y compleja es la segunda preferida, y el crecimiento imparable de las BD en Cloud.

El gráfico de tecnologías conectadas muestra algo que tenemos que tener muy en cuenta al escoger la plataforma sobre la cual desarrollamos. Solamente la propuesta de Microsoft comprende Front-Back y Cloud bajo un mismo conjunto. Sin duda siguen siendo los listos de la clase que, a la chita callando, se han arrimado a las sombras de todas las tecnologías más utilizadas en la actualidad y las han adoptado en su stack tecnológico.

Como muestra, el surgimiento y reinado de Visual Studio Code, que ha desplazado a Sublime como entorno de desarrollo, de sistemas o DevOps. Vim, todavía aguanta en cabeza en estos dos últimos ámbitos, pero a duras penas. Amazon sigue siendo el rey de la Nube, pero Azure ya le ha comido la mitad del mercado, seguido del siempre presente Google.

Por último, sigue la contradicción entre el sistema operativo de la máquina de desarrollo, en donde se desarrolla y del objetivo de despliegue.

La mitad utilizan Windows, mientras que el 50% restante se lo reparten entre MacOS y Linux (en ese orden). Sin embargo, Linux se pone a la cabeza como plataforma de desarrollo preferida, seguida por un 35% de Windows y un mínimo de 18% sobre Mac OS.

Luego, en producción, statcounter marca que Android es el más utilizado para consumir aplicaciones informáticas, seguido muy de cerca por Windows, dejando a lo lejos a iOS, y Linux que tiene una presencia residual centrada, sobre todo, en servidores.

Tendencias de futuro

Developer Image C

Me ha gustado mucho el enfoque de Stack Overflow para detectar tendencias en el sector, que divide las respuestas en “Amado”, “Temido” y “Deseado”, haciendo una distinción “fuzzy” que muestra inclinaciones y sensaciones personales.

Rust y Kotlin son los lenguajes que más satisfacción dan a sus programadores. Mientras que Python se muestra como el lenguaje con las mejores perspectivas de futuro al ser el tercero en ser más “amado” y el primero en ser “deseado”.

Por el otro lado, el vetusto Visual Basic 6.0, es el más temido/odiado, junto a Cobol y a CoffeScript. Ante los tres me asombra el número de personas que aún desarrollan con ellos, y sin visos de cambiar a corto o medio plazo.

Parece que React puede ganar la competencia frente a Angular en el transcurso del año, ya que le supera tanto en satisfacción como en ganas de ser aprendido.

La Inteligencia Artificial aparece en la lista por medio de TensorFlow, construido en Python (otra vez), que se utiliza para Deep Learning y consigue el mayor nivel de “amor” de sus programadores.

Mercado laboral

Computer Man Code Web Development 650 062317060629

Las cifras nos cuentan que seguimos siendo una industria privilegiada, con pleno empleo y sueldos altos (aunque con grandes variaciones entre los USA y el resto del mundo); contratos indefinidos, pero teniendo la certeza de que no nos jubilaremos en la empresa donde estamos; satisfechos con nuestro trabajo, que es nuestra actividad de ocio principal; y con una alta tasa de emprendimiento, que está llenando el mercado de consultores profesionales liberales.

Y esto no tiene visos de cambiar durante lo que queda de esta década, viendo las enormes dificultades que se tiene en todo el mundo para encontrar y contratar programadores/desarrolladores, tengan talento o no.

Por otro lado, el crecimiento constante del número de lenguajes, librerías, herramientas, frameworks, tecnologías, etc., muestra una pendiente ascendente en el volumen de conocimiento e información necesario para ser un desarrollador productivo; que, además, no está siendo seguido con suficiente rapidez por los sistemas educativos; y que abocan a la autoformación y a la información colaborativa como los medios más validos para mantenerse en la cresta de la ola tecnológica que, cada vez, es más alta y empinada.

¿Tal vez estemos ante una burbuja y algún día explote?

Más información | Stack OverFlow Developer Survey Results 2018

En GenbetaDev | El perfil del desarrollador en España desde la visión de RRHH, De cómo las tripas de Stack Overflow aguantan el éxito, Encuesta Stack Overflow 2016 I, II y III

También te recomendamos

El desarrollo no es país para chicas... según la encuesta anual de Stack Overflow, por lo menos

Gracias a la tecnología tienes 125 horas al año más para ti

De cómo las tripas de Stack Overflow aguantan el éxito

-
La noticia Análisis de la encuesta Stackoverflow 2018 fue publicada originalmente en Genbeta Dev por Juan Quijano .

La compra de GitHub por Microsoft desde la perspectiva de un desarrollador

$
0
0

Buy

Como casi todas las noticias bomba, el rumor de que Microsoft estaba interesada en la adquisición del principal repositorio de código libre del mundo, GitHub, me llego a través de las redes sociales cargado de incertidumbre y desconfianza.

Lo que no ha sido sorprendente ha sido la sobre reacción de la comunidad de desarrolladores, en donde se encendieron las viejas antorchas de la inagotable guerra entre los fanboys (pro) y los talibanes (anti) Microsoft.

Y por ello, quiero aportar al extenso debate y a los cientos de artículos que recorren las redes sociales, el punto de vista de diversos desarrolladores con los que he conversado sobre la polémica compra.

¿Qué es GitHub?

Github 840x473

En abril del 2005 Linus Torvalds, el padre del sistema operativo Linux, diseñó un motor de control de código llamado Git con el propósito de tener un sistema descentralizado que le permitiera trabajar de la forma que las herramientas del momento no le permitían.

Su éxito fue inmediato y rápidamente creció su adopción por la comunidad de desarrolladores hasta convertirse en el gestor de código más utilizado en todo el mundo.

Usando este repositorio como piedra angular, en 2008 Chris Wanstrath, PJ Hyett, y Tom Preston-Werner, fundan GitHub con el propósito último de construir herramientas para la comunidad de desarrollo, sentando las bases de la plataforma que acoge más de 28 millones de usuarios y supera los 85 millones de repositorios.

Aun cuando ofrece un servicio de repositorios privados y empresariales, el éxito de GitHub viene por su adopción como estándar de facto para la publicación de proyectos open source, y un funcionamiento principalmente basado en Pull Request; técnica de construcción colaborativa ampliamente aplicada en el desarrollo de código abierto.

Es tal su éxito, que es casi de obligado cumplimiento el tener un repositorio en GitHub para poder ponerse el título de “desarrollador”; incluso llegando a ser parte fundamental del currículum profesional, como pueden ser también el perfil de Linkedin o la presencia en las redes sociales y eventos de comunidad.

Y, aún más allá del almacenamiento del código fuente, se utiliza para distribuir documentación, blogs, información, páginas web estáticas, etc.

¿Por qué su destino era la Bolsa o la compra?

Stock

Como un buen ejemplo de start-up, GitHub no rinde beneficios en comparación con el volumen de inversión que ha ido recibiendo. Al principio, cuando el dinero provenía de sus tres fundadores, el resultado anual era positivo en relación con la importante tasa de crecimiento que consiguieron.

Pero las alarmas empezaron a saltar cuando el reputado medio Bloomberg publicó un informe en dónde se mostraba que el ritmo de gasto de GitHub, para seguir creciendo y protegerse de sus competidores, había llegado a los 66 millones de dólares en 9 meses.

7.500.000.000 de razones, son muchas para decir que no.

La cosa se tuvo que empezar a poner de color hormiga (no hay acceso a las cifras) cuando en agosto del 2017 Chris Wanstrath, fundador y CEO de la compañía, ponía pies en polvorosa (o le obligaban) y no había forma de encontrar una nueva cabeza que dirigiera los pasos de la empresa.

Todos los analistas veían únicamente tres soluciones, la cual una de ellas (el cierre) hubiera significado un desastre tanto económico para los inversores, como un problema de enormes repercusiones para la comunidad del desarrollo de software.

Otra opción era preparar una salida a Bolsa basada en la confianza de una plataforma robusta, que ha vencido a competidores del calibre de Google Code, Sourceforge y CodePlex, y que tiene millones y millones de clientes que respaldan el servicio. Pero con el inconveniente de ser un poco “pequeña” aún para entrar en el juego de la especulación financiera; habiendo un riesgo cierto de que saliera mal, y perdiera lo poco que le podía quedar de crédito.

La última opción, y que es la que ha resultado ganadora, es conseguir vender la plataforma a una de las grandes del sector como podría ser Google, Microsoft, Oracle, IBM, o similar. Eliminando de un plumazo todos los problemas financieros y obteniendo unos más que suculentos beneficios.

Y les ha salido muy bien. En el momento de la venta, GitHub estaba sobre estimada en unos dos mil millones de dólares, y Microsoft ha puesto encima de la mesa más del triple de dinero: 7.500 millones.

¿Por qué la ha comprado Microsoft?

Gitmicrosoft

CodePlex fue el repositorio de código público creado y sostenido por Microsoft desde el 2006 hasta finales del 2017, en donde cerraron ante el auge imparable y la adopción de GitHub como plataforma principal para publicar el código fuente de los proyectos Open Source de la compañía.

Una compra estratégica para protegerse del competidor

Esta adopción también se mostró en las herramientas de desarrollo, desde las cuales puedo conectar mis proyectos con el motor Team Foundation Version Control, Git o GitHub, indistintamente.

Además, cada vez se publica más y más información, documentos y material de formación en GitHub. Siendo la plataforma elegida por Azure para sus repositorios de plantillas de despliegue de Infraestructura como Código.

Es decir, Microsoft reconoció y se rindió ante la realidad de que la combinación de Git + GitHub era imbatible y había sido la elegida por la comunidad para gestionar el código.

Y ahora, aprovechando las vicisitudes financieras por las que pasaba GitHub, tiene sentido que se propusiera una adquisición preventiva estratégica de una plataforma que se ha vuelto crítica y troncal en el negocio del desarrollo, para evitar que pudiera ser adquirida por competidores de la talla de Google u Oracle, lo cual podría traerle serios inconvenientes funcionales. Recordemos la reciente política anti Microsoft de Google, que tantas molestias ha causado a los usuarios.

Lo positivo de la compra

Smiley One Thumb Up

La primera ventaja de esta adquisición es que se han evaporado los negros nubarrones financieros sobre el futuro de GitHub. No se puede negar que Microsoft tiene más que suficientes recursos como para sostener los costes de operación a largo plazo sin pestañear.

Para los desarrolladores que utilizan el stack de Microsoft, estamos de enhorabuena porque se espera una integración en todo el ciclo de desarrollo mucho más cercano, y el resultado de la integración de GitHub con Visual Studio Team Services puede ser muy interesante.

De hecho, uno de los puntos que más ilusión me hacen de la nota de prensa de Satya Natedella, es cuando habla como se va a potenciar el desarrollo en cada etapa del ciclo de vida, manteniendo la absoluta libertad de elección del lenguaje, herramientas, sistemas operativos y nube que se tiene ahora.

Para la mayoría que no utilizan herramientas de Microsoft más allá de VS Code, los cambios deberían ser menos evidentes, ya que se supone que se va a aplicar un modelo de funcionamiento similar al de Linkedin. Es decir, GitHub seguirá funcionando igual que ahora, con su marca, sus cifras y su modelo de negocio; pero bajo las órdenes de gente tan buena como Nat Friedman y Scott Gurnie.

Malas cosas malas

Sauron

Las causas del rechazo a esta compra parecen ser más bien emocionales. Basadas en la desconfianza a una compañía que durante muchos años ha sido un enemigo declarado del Open Source, y que ha sido condenada por prácticas monopolísticas y por manipulación del mercado.

Aun habiendo pasado más de 20 años, aún muchos recuerdan las palabras de Ballmer demonizando el software libre. Pero más recientemente los grandes fiascos de Windows Phone o Windows RT, con cientos o miles de proyectos tirados a la basura por un cambio de rumbo empresarial, producen reticencia en muchos desarrolladores.

Un Anillo para gobernarlos a todos. Un Anillo para encontrarlos, un Anillo para atraerlos a todos y atarlos en las tinieblas...

También el ejemplo de Oracle, y cómo despiezó Sun, hace temer por el futuro y continuidad de GitHub.

Por otra parte, este movimiento de Microsoft produce una concentración excesiva de poder y control en una sola compañía. Y pone en sus manos los datos y proyectos de millones de programadores en todo el mundo, a los que se pide que confíen en la buena fe de una compañía que aún muchos comparan con Saurón.

Conclusión

Sabiendo quienes van a ser los responsables de dirigir GitHub, y que se va a aplicar la política de funcionamiento que se ha permitido a Linkedin, tengo la sensación de que todo se va a quedar igual.

Como mucho, veremos cómo Visual Studio Team Services va a integrar las capacidades de GitHub, aunque muchas ya las tiene, y cómo los repositorios públicos van a recibir mejoras desde la plataforma DevOps de Microsoft.

Si tuviera alguna duda, es si Atom va a aguantar el bocado que ya le ha dado Visual Studio Code, o va a dejar de ser apoyado por la comunidad y languidecer.

No habrá cambios, ni desbandada. GitHub seguirá siendo el rey

Hay que tener en cuenta que, como todo lo gratis, significa que (las personas) somos el producto. Pero eso ya pasaba con los anteriores dueños de la plataforma, y me alegro de que no sea una empresa pura de datos (como Google o Facebook) quien haya dado la tranquilidad financiera a GitHub.

Mientras, las estadísticas de GitLab sobre migraciones de proyectos desde GitHub muestra un pico muy pequeño de desarrolladores cambiando de plataforma (apenas unos pocos miles de proyectos en comparación con los más de 80 millones que se han quedado), lo cual puede mostrar que la tendencia es que sigamos utilizando GitHub como repositorio público preferido.

Más información | Comunicado de GitHub, Comunicado de Microsoft, GitHub Is Building a Coder’s Paradise. It’s Not Coming Cheap

En WSL | Ya es oficial: Microsoft compra GitHub por 7.500 millones de dólares, Ante la paranoia, Microsoft promete que GitHub se mantendrá independiente y abierto

También te recomendamos

.NET se pasa a Open Source

CoreCLR, el núcleo de ejecución de .NET Core se publica Open Source

Los cambios nos cuestan, y mucho: ¿sabemos realmente cuándo toca renovar el portátil?

-
La noticia La compra de GitHub por Microsoft desde la perspectiva de un desarrollador fue publicada originalmente en Genbeta Dev por Juan Quijano .

Tu marca personal como desarrollador de software

$
0
0

Marca Personal

La mayoría de nuestra carrera profesional es desconocida. A día de hoy, darse visibilidad más allá de la empresa en la que trabajamos es necesario. Por eso, se habla tanto de la Marca Personal (en inglés Personal Branding). Es un concepto de desarrollo personal que consiste en considerarse uno mismo como una marca, que al igual que las marcas comerciales, debe ser elaborada, transmitida y protegida, con ánimo de diferenciarse y conseguir mayor éxito en las relaciones sociales y profesionales. El concepto surgió como una técnica para encontrar nuevas oportunidades profesionales, no sólo para la búsqueda de trabajo sino también para conseguir reinventarse mediante un cambio de carrera o profesión.

Desde que llevo dedicada al recruitment, he notado que cada vez más los desarrolladores quieren darse visibilidad y sobresalir como profesionales. Pero la mayoría no se sienten identificados con la idea de la autopromoción y el marketing. Eso de intentar venderse no nos gusta a nadie porque lo tenemos asociado a ser un vendehumos o incluso ser un tanto soberbio. Pero como en cualquier profesión, este tipo de profesional existe y miremos hacia donde miremos, siempre aparecen.

Con este artículo aportaré mi visión desde el punto de vista de la contratación de talento y ayudar a conseguir un equilibrio en la gestión de tu marca personal como desarrollador: Ni pasar desapercibido, ni estar en todas partes.

El objetivo de darte visibilidad

Cada vez más los desarrolladores quieren darse visibilidad y sobresalir como profesionales

Lo primero que tienes que saber es si quieres o no darte visibilidad. Si decides que sí, tienes que reflexionar qué quieres conseguir y analizar tanto los pros y los contras de hacerte visible.

Cuando te das a conocer, te pones en el punto de mira. Recibirás halagos, críticas o tal vez no importes tanto, pero son consecuencias que pueden ocurrir y hay que aprender a gestionarlas. Si eres de lo que te sientes cómodo en la discreción, ya puedes olvidarte de pasar desapercibido. Si realmente quieres sobresalir como programador, necesitas construir una sólida reputación y eso significa que tendrás que venderte y construir una marca personal-que te ayudará a tener mejores oportunidades profesionales.

Define el profesional que quieres ser

Lo segundo que tienes que tener claro es qué profesional quieres ser y actuar en consecuencia.

Leí en el blog de simpleprogrammer que su autor John Sonmez -por cierto, también autor del conocido y vendido libro “Soft Skills: The Software Developers Life Manual”, entre otros- tiene en su pared este póster enmarcado. Como ves, deja muy claro qué tipo de reputación es la más aconsejable si queremos ser (re)conocidos. Las dimensiones son dos: hablar y trabajar.

  1. Si hablas más que trabajas = Charlatán
  2. Si trabajas más que hablas = Mártir
  3. Si trabajas tanto como hablas = Buscavidas

Hustler Poster Joey Roth 1140

Si decides ser un Hustler, has elegido que quieres mejorar tu habilidad para salir adelante en la vida y como profesional. Decides invertir en ti como marca y ser conocido.

Crea un mensaje diferenciador

Lo tercero y nada fácil de conseguir: Tienes que pensar en qué quieres que se te conozca. No vale divagar ni hacer una lista de todas las tecnologías en las que programas. Tu respuesta tiene que ser concisa. Tiene que contestar quién eres y qué representas de manera sencilla, específica y clarísima.

Desde mi punto de vista, la especialización es clave porque es lo que te permitirá posicionarte como desarrollador. La mejor forma de aportar valor y que la gente te recuerde es por algo específico. Por ejemplo, imagina que cuando hablan de ti, dicen “Ese desarrollador es el que realizó un tutorial sobre cómo aprender Elixir”. Y si además, tu proyecto le ayudó a aprender. Tu marca personal, está funcionando.

Selecciona los canales adecuados para darte visibilidad

Una vez que tienes claro quién eres y qué representas, tienes que elegir los canales más adecuados para darte visibilidad.

No podemos olvidar que no solo existen los redes sociales, también hay otros canales online y offline que te ayudarán a construir tu marca personal. Por ejemplo, unas ideas:

  • Tu propio blog
  • Crea y colabora en proyectos Opensource
  • Conecta, comparte, opina, genera contenido de calidad en Twitter
  • Asiste a eventos tecnologicos
  • Da charlas técnicas
  • Crea tu propio canal de Youtube
  • Escribe un libro
  • Colabora en blogs

Hay tantos canales donde puedes darte visibilidad que seguramente estás pensando que es imposible estar en todos. No te preocupes, ni es necesario ni tampoco es recomendable estar omnipresente. Querer estar en todos los lados es muy estresante y sí, la exposición repetida es imprescindible para darte a conocer, pero recuerda las dimensiones de las que te hablaba antes. No pierdas de vista el profesional qué quieres ser y por tanto, por el que quieres que se te conozca.

Tienes que ser genuino, consistente y generoso

Entonces, ya tienes claro el mensaje, el canal donde compartir, incluso te has creado un logo con un leitmotiv que te define bastante bien. Eso significa que ¿ya has construido tu marca personal? Pues siento decirte que NO. De nada sirve que intentes construir una marca perfecta e inviertas en autopromocionarte si no hay nada de valor detrás. Falta lo más importante y lo que seguramente marcará el resto de tu carrera profesional: tu personalidad.

En otras palabras:

  • Sé tu mismo: Si en algo somos diferentes unos de otros es en la personalidad y nuestra manera de ser. Eso no se puede copiar, es tu sello.
  • No hagas postureo: No prediques lo que no practicas. Sé un profesional consistente.
  • Aporta y crea valor a los demás: Practica la generosidad y no esperes nada a cambio. Hazlo porque sí. La recompensa a tu altruismo, llegará multiplicado por mil.

Sigue trabajando y ten paciencia

Como ves, construir una marca personal requiere trabajo, esfuerzo, foco y tiempo. No es algo que se logre de la noche a la mañana. Por eso, te aconsejo que empieces ya. No pienses no estás listo o que no tienes nada que contar, no es cierto. Todos tenemos historias que contar y muchos de nosotros queremos conocerlas. Piensa que siempre hay gente que como yo, buscamos talento. Hazte visible para poder encontrarte.

Y nada más, tan solo deja que tu trabajo y los demás hablen de ti.

Conclusión

Si no te das visibilidad no pueden conocerte, pero si te pasas con la sobreexposición puede ser contraproducente. En el término medio, está la virtud. Confío en que si construyes bien su marca personal como desarrollador, conseguirás las mejores oportunidades profesionales.

Recuerda que tienes que ser de verdad. No finjas lo que no eres. Sé ese tipo de profesional que a los demás les gusta que se les asocie contigo.

Y para cuando seas “famoso": Pueden copiarse de tu idea, pero nunca de tu personalidad, estilo y talento ;)

Imagen (cc)

También te recomendamos

Evaluación del rendimiento de los desarrolladores: Hablemos de quién y cuándo

La tecnología que ha convertido al neumático en un producto de alta ingeniería

Cómo tener éxito en tu próxima entrevista de trabajo para desarrolladores

-
La noticia Tu marca personal como desarrollador de software fue publicada originalmente en Genbeta Dev por Emma Salamanca .

La receta para organizar un buen evento de desarrollo y los errores que lo harían fracasar

$
0
0

Events 01

El nivel de los eventos para desarrolladores en España es bastante alto. Un muestreo de lo más selecto lo hicimos aquí mismo hace un par de meses con el artículo titulado 'Los 15 eventos para desarrolladores en España que no te puedes perder en 2018'. Pero, ¿qué tiene que tener un buen evento de desarrollo? Y ya que estamos, ¿qué no debe tener?

En este artículo vamos a intentar responder a estas preguntas y no sólo desde el punto de vista del asistente si no también desde el del ponente. Asociaciones y empresas que estáis pensando en lanzaros a organizar vuestro evento, estad ojo avizor.

Una web verdaderamente útil

Events 02

Los interesados en tu evento van a buscar información del mismo principalmente a través de sus redes sociales (ya hablaremos de ellas y como utilizarlas más adelante) y de la web. Por lo tanto se tiene que tratar de una web clara, sencilla, informativa y en permanente actualización. Sobre tu evento debe quedar meridianamente claro cuándo es, a quién se dirige, cómo conseguir las entradas (y a que te dan derecho), cómo llegar, cómo enviar una charla (y tus ventajas y remuneración como ponente), quiénes son los patrocinadores...

Puedes dejar la venta de entradas (e incluso el Call for Papers) en manos de webs especializadas, sobre todo si se trata de un evento pequeño, pero si la mantienes bajo "tu ala" puedes conseguir una mejor experiencia. Por ejemplo puedes preguntarle al comprador la talla de camiseta que usa o si tiene alguna alergia o intolerancia alimentaria (o si no come algo por temas de religión o conciencia) y así conseguir un evento más inclusivo... aunque de inclusión hablaremos también más tarde.

Si externalizas esta venta de entradas siempre puedes hacer estas comprobaciones a posteriori enviando emails o formularios a los asistentes aunque se corre el riesgo de tener un retorno mucho menor.

Un precio ajustado y asumible

Comparados con los eventos y conferencias en el resto de Europa o Estados Unidos, en España los precios de las entradas a los mismos no son nada caras. Iván López (@ilopmar), desarrollador Groovy y colaborador también de esta casa, nos cuenta lo siguiente al requerimiento de qué le atrae de una conferencia o evento para ser ponente: "Principalmente lo que más me atrae son el resto de ponentes que pueda haber y la posibilidad de ver las charlas de la conferencia de manera gratuita. Hay conferencias que tienen precios asequibles, al menos en España, pero en Europa lo normal suelen ser 400-600€ que, al ser ponente, no hay que pagar. Además, en la mayoría de las conferencias, el día anterior siempre hay una cena de speakers en la que conoces a otros ponentes como tú, hablas con ellos de tecnología, de tu charla, de la suya,... y de muchos temas que van surgiendo.".

De las actividades paralelas en los eventos hablaremos luego pero ahora sigamos hablando de los precios, que si bien no son tan caros como allende los Pirineos, pueden suponer una barrera de entrada: hay gente que no se puede permitir pagar cientos de euros y/o los gastos de desplazarse a otra ciudad durante varios días ni tiene una empresa detrás que se haga cargo. Por eso se puede llegar a alcanzar cierto grado de endogamia o lo que es lo mismo: que en todos los eventos de similares temáticas o características se vean siempre las mismas caras.

Hay que intentar ajustar los precios y proponer ofertas: para los early birds, para grupos, para los colectivos menos representados, para aquellos que sólo quieran asistir online (a través de streaming) o acceder al material a posteriori...

Eso si, si apuestas por un evento gratuito (o incluso de precio simbólico), te puedes encontrar con situaciones desagradables como que la gente luego no acuda, como comentaban recientemente en este hilo de Twitter.

Ayuda a los "extranjeros"

Si tienes la "aspiración" de que desarrolladores de fuera de tu ciudad acudan a tu evento no sería una mala idea intentar llegar a acuerdos con agencias de viaje para conseguir descuentos en trenes (o aviones, aunque esto suele ser más complicado) y hoteles. Venga, sabemos que es un engorro pero si tu primo lo pudo hacer para su boda, vosotros también podéis.

Volvemos a recurrir a Iván López y lo invitamos a recordar el mejor evento en el que jamás ha estado: "SpringOne 2GX 2015, en Washington DC. SpringOne 2GX era LA conferencia de referencia de Spring, Groovy y Grails a nivel mundial y me aceptaron nada menos que tres charlas. Me sorprendieron muchísimas cosas: más de 1000 asistentes en uno de los hoteles más grandes de DC, las keynotes fueron por la noche después de la cena, cuando lo habitual en las charlas en Europa es que las keynotes son por la mañana a primera hora, muchísimos sponsors y mucho swag a repartir. Fue mi primera conferencia en USA por lo que tengo un muy buen recuerdo de ella. Por si eso no fuera poco me pagaron el vuelo desde Madrid, 5 noches de hotel, pude ver muchas charlas muy interesantes y conocer mucha gente nueva. Finalmente también tuve tiempo para ver un poco de la ciudad: La Casa Blanca, el monumento a Washington, el World War II memorial, el Air and Space Museum,...".

Tampoco es que te vayamos a decir que tienes que pagar vuelos transoceánicos y hotelazos pero si que hay que tener en cuenta que los temas de transporte y alojamiento siempre quedan en el recuerdo y ayudan a conformar la opinión sobre un evento.

Un starter pack que haga ilusión

Después de pagar, desplazarte al lugar y seguramente tragarte una buena cola para acreditarte que menos que un starter pack (o un kit de bievenida si estás en contra de los anglicismos innecesarios) que mole, siempre dentro de las posibilidades del evento: una bolsa chula, una camiseta que te quede como un guante, botellitas de agua, barritas energéticas, bolis, un pen drive, algún cachivache curioso o representativo, un plano, el horario... y sí, claro, también se puede meter los panfletos publicitarios de los patrocinadores.

Y ya que hemos hablado del proceso de acreditación, no estaría mal una acreditación cómoda, con información útil (usuario de Twitter, empresa...), identificación por colores... vamos, que no estés deseando quitártela y no te des cuenta de que la sigues llevando puesta hasta que llegues a casa o al hotel.

Ayuda (antes) al speaker

Aunque hay gente que son auténticos profesionales de las charlas y unos animales escénicos, convertir un paper en una charla no siempre es una tarea sencilla y cierta guía y asesoramiento en la preparación del "show" nunca viene mal: tiempo del que dispone, materiales a su disposición, audiencia estimada, trucos que nunca fallan, incluso dresscode (no lleves amarillo que se ve raro en el streaming...) o temas a evitar (política, religión, tortilla de patatas con cebolla sí o no...)

Ayuda (durante) al speaker

Events 03 Cáspita, esto no tira, tenía que haberme traído el Mac

Puede suceder, sobre todo en eventos muy grandes, que el speaker, el ponente se encuentre durante la charla o ponencia en una situación de indefensión, sólo ante los elementos. No se puede permitir, siempre tiene que haber alguien de la organización para ocuparse de la "intendencia": encargarse del micrófono o el proyector, proporcionar agua, marcar los tiempos de la charla, organizar el turno de preguntas...

Ignacio Sánchez (@isholgueras), desarrollador Drupal, lleva años asistiendo tanto de público como de ponente a eventos y lo tiene claro y ante la pregunta de las características y facilidades que deben tener los eventos para con los ponentes (y no siempre tienen en España): "Sé que mucha gente dirá que gastos pagados para los ponentes, pero yo con la entrada me conformo, y a veces hasta ni eso. Me conformo con que la organización indique a los asistentes unas normas básicas de asistencia a las sesiones, una calidad decente en el sonido y proyección y un sistema de grabación de charlas. No faltan en todos los eventos, pero en alguno sí que falla alguna de las tres.".

Eventos nacionales como el futuro Commit Conf ya empiezan a incluir códigos de conducta, imprescindibles para que reine la concordia y el evento no termine convertido en una selva. Que no somos animales, por favor, señores (y señoras).

No me hagas correr

Esto es algo referido sólo a los eventos de cierto tamaño, a aquellos que tienen más de un track simultáneo: un poco de tiempo entre las charlas para poder ir de uno a otro con tranquilidad y que el recinto no se convierta en la San Silvestre vallecana de gente corriendo por todos lados. Diez, quince minutos de margen, aunque sea a costa de reducir un poco la duración de las charlas... y ser estricto con el cumplimiento de estas duraciones.

Actividades paralelas (de trabajo)

A colación de las mejores conferencias a las que ha asistido, Ignacio Sánchez nos cuenta: "Diría dos: Drupalcamp Spain 2013 y DrupalCon Dublin 2016. La primera fue donde di mi primera charla “profesional” y donde encontré realmente la calidad humana de la comunidad de Drupal, a la que he acabado enganchado, incluso he acabado siendo parte de la junta de la Asociación Española de Drupal. La segunda fue donde impartí mi primera charla en inglés a público internacional. Público muy crítico, profesional, preguntas muy rigurosas. Disfruté muchísimo de la charla.".

¿Qué tenían en común? "En los dos eventos hay una característica común, y son las salas de sprint. La organización pone a disposición una sala con enchufes y conexión wifi para contribuir (o lo que quieras). En Cáceres (2013) descubrí en esta sala cómo funcionaba Varnish, y en Dublín, junto con uno de los mejores contribuidores, ayudé a mejorar unas funcionalidades del módulo que estaba creando. Esas salas te dan la posibilidad de hablar con los mejores profesionales de ese área en cuestión. A esto me refiero con conferencia de pasillos. Sé que si no me hubiese sentado con esa persona en 2013 no pertenecería a la AED, ni trabajaría donde trabajo, ni hubiese dado más charlas.".

Es obvio, las actividades paralelas "de curro" a las charlas son siempre un plus de los que da lustre y convierten en referencia a un evento: talleres, katas, demostraciones, stands...

Actividades paralelas (de ocio)

El networking. Los eventos de desarrollo sin el networking no serían nada, eso es así. La anteriormente mencionada cena de speakers, una fiesta fin de evento o alguna actividad para conocer mejor la ciudad ya sea cultural o gastronómicamente (en el vallisoletano LechazoConf agasajan a los asistentes con el típico lechazo (el propio nombre de la conferencia es un spoiler en este caso), por ejemplo).

Es más, puedes apelar al nerd que todo desarrollador tiene dentro y apostar por actividades algo más frikis como en la próxima TarugoConf, donde verán la mítica 'Juegos de Guerra' en pantalla grande en un cine de la Gran Vía madrileña.

Buen uso de las redes sociales

Las redes sociales, en especial Twitter pero también Instagram o Facebook (¿alguien sabe si Google+ sigue vivo?), son una herramienta imprescindible para cualquier evento y los de desarrollo no son una excepción. Antes, durante y después.

Antes: anunciando todas las novedades, formando comunidad, generando hype. Durante: sirviendo casi de "atención al cliente", buscando la tan ansiada viralidad (que los que no están hablen, que se mueran de las ganas). Después: agradeciendo a los presentes, ofreciendo los highlights, no dejando que muera en la memoria (y el corazón) de los presentes.

No lo dejes en manos de novatos, se trata de artefactos primordiales para conseguir una buena imagen de marca de tu evento. Si tienes que escatimar en algo, que no sea en esto. No en 2018.

Cuida la comida y los coffee breaks

Tampoco es que haya que contratar a Ferran Adriá o Jamie Oliver para el catering pero la pausa para la comida es un detalle a cuidar con mimo: calidad y variedad (recuerda lo hablado en el primer epígrafe: ten en cuenta alergias, intolerancias y objeciones de los asistentes).

Aquí tiro de experiencia propia: nunca se me olvidarán los pantagruélicos buffets de la BlackBerry Jam Europe y de los stands con refrescos y chocolatinas (y fruta) que había por todos lados. Han pasado cinco años y sigue en mi recuerdo, ¿será que a un geek se le conquista por el estómago?

También hay que cuidar los coffee breaks, que son indispensables para poder sobrellevar las maratonianas jornadas "eventeras" (perdón por el palabro) a base de cafeína... y buena charla.

Apuesta por la igualdad y la representación

Events 04

Muchos eventos, pido perdón de antemano por la expresión que voy a utilizar, parecen "campos de nabos". Hay que acabar con esto. Las mujeres son minoría en el mundo del desarrollo, de acuerdo, pero no son tan invisibles como parece en muchos eventos. Se retraen de asistir a estos saraos más que los hombres y sin esa parte (sea más grande o más pequeña) del espectro no estamos de verdad representados los developers en nuestro conjunto.

¿Cómo luchamos contra esto? Habrá distintas teorías, claro, pero en el fondo es de cajón: mujeres en la organización que consigan atraer a mujeres encima del estrado que, a su vez, conseguirán atraer a más asistentes femeninas. Hay que conseguir que los eventos de desarrollo sean tan inclusivos y representativos como lo puedan ser los de medicina o cualquier otra disciplina.

Y, ojo, no por lo de moda que pueda estar o dejar de estar el movimiento feminista en los tiempos que corren si no porque es de justicia. Ganamos todos y todas.

Coda: estado del arte

Terminamos hablando con Ivan e Ignacio sobre el estado del arte de los eventos y conferencias de desarrollo en España. Para Iván: "No me muevo demasiado por los eventos en España pero desde mi experiencia creo que están bastante bien y, en general se trata muy bien a los ponentes. Hay que tener en cuenta la inmensa mayoría de ellos están organizados por gente que no se dedica a ello de manera profesional sino que lo hacen en su tiempo porque les gusta y quieren aportar algo a la comunidad. Además, en ocasiones es complicado encontrar suficientes sponsors para cubrir los gastos mínimos por lo que muchos eventos no pueden ayudar mucho a los ponentes. Aún así, cuando hay alguna conferencia de desarrollo en España intento seguirla por twitter y las sensaciones que tengo "desde fuera" es que la gente termina muy contenta.",

Intentamos tirarles de la lengua y que nos hablen de aquellos eventos nacionales que les han defraudado, que alguna habrá. Ignacio nos cuenta que: "Ya sólo por el esfuerzo que cuesta organizar un evento, que lo sé, no voy a decir que sea malo o me haya arrepentido, sobre todo si el que lo organiza lo hace por amor al arte. Si acaso, diría el Codemotion de 2014 o 2015. Abraham, Nacho y compañeros tienen un mérito increíble al conseguir lo que consiguen organizando el Codemotion año tras año con tanta afluencia y les deseo lo mejor con la commit-conf. Sí diría que este fue del evento con el que me fui con un sabor de boca agridulce. Hubo asistentes, sesiones y demos brutales, pero bastantes asistentes hablaban en las charlas, entraban y salían de las salas a cualquier hora, incluso haciendo ruido, hablaban de lo mal organizado que estaba, de que si la comida era una basura (oído en la cafetería). Por otra parte hubo alguna charla que eran ‘poco rigurosas’ o ‘poco contrastadas’ con el tema del que trataban.".

También te recomendamos

La evolución de las interfaces de comunicación hombre-máquina: escribir, tocar, hablar… pensar

Women Techmakers 2016 y el papel de las mujeres en la tecnología

Go para Pythonistas: Francesc Campoy participará en varios de los GDGs de toda España explicando más sobre GO

-
La noticia La receta para organizar un buen evento de desarrollo y los errores que lo harían fracasar fue publicada originalmente en Genbeta Dev por Fernando Siles .

Desarrollando microservicios reactivos con Micronaut

$
0
0

Micronaut

Micronaut es un nuevo framework para la JVM que soporta Java, Groovy y Kotlin y que está diseñado para construir microservicios cloud native.

La versión actual de Micronaut permite construir un JAR con un Hello World que ocupa 10MB y que se puede ejecutar con un heap de tan sólo 8MB siendo el tiempo de arranque de menos de un segundo cuando programamos con Java. Además el tiempo de arranque de Micronaut y el consumo de memoria no crece linealmente con el número de líneas de código porque toda la inyección de dependencias, AOP y generación de proxies ocurre en tiempo de compilación.

El proyecto ha sido creado por OCI y el mismo equipo que desarrolla el framework Grails. Fue oficialmente presentado por Graeme Rocher en Greach 2018 el pasado Marzo en Madrid, liberado con licencia Apache 2.0 el 23 de Mayo y publicada la primera version milestone el 30 de Mayo.

Entre los objetivos con los que se ha diseñado Micronaut se encuentran:

  • Arranque prácticamente instantáneo
  • Muy bajo consumo de memoria
  • Fácilmente testeable
  • Inyección de dependencias y AOP
  • JAR generados de muy poco tamaño
  • Prácticamente sin dependencies externas
  • 12 factor

Micronaut proporciona un servidor y cliente HTTP además de soportar microservicios reactive y non-blocking al estar basado en Netty. En la parte del cliente HTTP, es posible construir uno declarativamente con una simple interfaz Java y anotaciones. Este cliente es implementado, a diferencia de la mayoría de herramientas y bibliotecas existentes, en tiempo de compilatión, lo que hace que se reduzca el consumo de memoria.

Como no podía ser de otra forma, Micronaut también soporta GORM - el ORM de Grails - que proporciona un conjunto de APIs para acceder de una manera sencilla y potente a todo tipo de bases de datos SQL, así como Neo4J, Redis, MongoDB, GraphQL y Cassandra.

Micronaut está desarrollado por los creadores del framework Grails y se inspira en las lecciones aprendidas después de crear muchas aplicaciones, tanto monolitos como microservicios, durante los años utilizando Spring, Spring Boot y Grails.

Empecemos

Micronaut proporciona un CLI para poder crear aplicaciones de manera sencilla. Para instalarlo usaremos SDKMan!, del que ya hablamos hace tiempo.

$ sdk install micronaut 1.0.0.M1

Una vez instalado el cliente podemos crear una aplicación ejecutando:

$ mn create-app my-app

Por defecto Micronaut crea una aplicación Java y utiliza Gradle como sistema de build pero es muy sencillo, por ejemplo crear una aplicación Kotlin y usar Maven:

mn create-app -build maven -features kotlin my-app

Además, si ejecutamos únicamente mn entraremos en el modo interactivo en el que tenemos autocompletado usando el tabulador y podremos ver todas las opciones y comando existentes:

 mn
| Starting interactive mode...
| Enter a command name to run. Use TAB for completion:
mn>

create-app   create-federation   create-function   create-profile   help   list-profiles   profile-info

mn> create-app -

-inplace     -build       -lang        -profile     -features    

mn> list-profiles 
| Available Profiles
--------------------
* base - The base profile
* federation - The federation profile
* function - The function profile
* function-aws - The function profile for AWS Lambda
* service - The service profile


mn> profile-info base
Profile: base
--------------------
The base profile

Provided Commands:
--------------------
* create-bean - Creates a singleton bean
* create-job - Creates a job with scheduled method
* help - Prints help information for a specific command

Provided Features:
--------------------
* annotation-api - Adds Java annotation API
* config-consul - Adds support for Distributed Configuration with Consul (https://www.consul.io)
* discovery-consul - Adds support for Service Discovery with Consul (https://www.consul.io)
* discovery-eureka - Adds support for Service Discovery with Eureka
* groovy - Creates a Groovy application
* hibernate-gorm - Adds support for GORM persistence framework
* hibernate-jpa - Adds support for Hibernate/JPA
* http-client - Adds support for creating HTTP clients
* http-server - Adds support for running a Netty server
* java - Creates a Java application
* jdbc-dbcp - Configures SQL DataSource instances using Commons DBCP
* jdbc-hikari - Configures SQL DataSource instances using Hikari Connection Pool
* jdbc-tomcat - Configures SQL DataSource instances using Tomcat Connection Pool
* junit - Adds support for the JUnit testing framework
* kotlin - Creates a Kotlin application
* mongo-gorm - Configures GORM for MongoDB for Groovy applications
* mongo-reactive - Adds support for the Mongo Reactive Streams Driver
* neo4j-bolt - Adds support for the Neo4j Bolt Driver
* neo4j-gorm - Configures GORM for Neo4j for Groovy applications
* redis-lettuce - Configures the Lettuce driver for Redis
* security-jwt - Adds support for JWT (JSON Web Token) based Authentication
* security-session - Adds support for Session based Authentication
* spek - Adds support for the Spek testing framewokr
* spock - Adds support for the Spock testing framework
* tracing-jaeger - Adds support for distributed tracing with Jaeger (https://www.jaegertracing.io)
* tracing-zipkin - Adds support for distributed tracing with Zipkin (https://zipkin.io)

Nuestro primer servicio

El siguiente código muestra cómo crear un endpoint HTTP en Micronaut:

@Controller("/hello")
public class HelloController {
    @Get("/{name}")
    public String hello(String name) {
        return "Hello " + name;
    }
}

Como se puede ver el modelo de programación es muy similar a Spring Boot o Grails. Los desarrolladores que estén acostumbrados a ambos frameworks van a tener una curva de aprendizaje muy baja. Esto permitirá, por ejemplo una transición rápida y sencilla a Micronaut.

Si arrancamos la aplicación y nos conectamos con un navegador (por defecto el servidor HTTP se ejecuta en un puerto aleatorio pero es posible definir uno por configuración) veremos algo como esto:

$ ./gradlew run> Task :run 
23:59:44.420 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 502ms. Server Running: http://localhost:43134

Servidor Http

¿Y esto cómo lo testeamos?

Para ello vamos a utilizar Spock aunque es posible utilizar JUnit o Spek si así lo queremos.

En primer lugar vamos a crear un interfaz que nos permitirá comunicarnos con el servidor. Micronaut será el encargado de, en tiempo de compilación, implementar el interfaz con el cliente HTTP por nosotros.

@Client('/hello')
interface HelloClient {
    @Get("/{name}")
    String hello(String name)
}

Ahora ya podemos crear el test:

class HelloControllerSpec extends Specification {

    @Shared @AutoCleanup
    EmbeddedServer embeddedServer = ApplicationContext.run(EmbeddedServer) // 1

    void "test hello world"() {
        given:
            HelloClient client = embeddedServer.applicationContext.getBean(HelloClient) // 2

        expect:
            client.hello("Iván") == "Hello Iván" // 3
    }
}
  1. Creamos una instancia única y compartida por todos los tests de un servidor embebido que ejecuta nuestra aplicación.
  2. Obtenemos el bean del interfaz HelloClient que hemos definido anteriormente y que utilizaremos como cliente HTTP para conectarnos al servidor. Recordemos que Micronaut ha implementado el cliente HTTP.
  3. Ejecutamos la llamada HTTP y comprobamos el resultado.

Una de las premisas con las que se ha construido Micronaut es que sea muy rápido y sencillo de testear. Cuando utilizamos frameworks como Spring y Grails, escribimos principalmente test unitarios en lugar de tests funcionales o de integración no porque prefiramos hacerlo ni porque sea deseable, sino porque los tests funcionales son muy lentos. Tendemos a mockear nuestra infraestructura, dependencias,... simplemente porque arrancar el servidor es lento y pesado. En Micronaut todo ocurre en tiempo de compilación así que la velocidad de ejecución de los tests es muy rápida.

Ejecucion Test

Como podemos ver la ejecución del test es de sólo 185 ms. Esto no es ningún truco. Es la aplicación real comunicandose utilizando HTTP con el servidor. Para comprobarlo podemos incrementar el nivel del log del cliente HTTP añadiendo al archivo logback.xml:

<logger name="io.micronaut.http.client" level="TRACE">

Si ejecutamos el test de nuevo podemos comprobar que se hacen peticiones HTTP reales entre el cliente y el servidor.

Ejecucion Test Trace

Programación reactiva

Micronaut también soporta programación reactiva out-of-the-box al implementar Reactive Streams por lo que es posible utilizar cualquier biblioteca que lo soporte como RxJava2, Reactor o Akka.

Vamos a añadir soporte RxJava2 al ejemplo anterior:

@Get("/{name}")
public Single<String> hello(String name) { // 1
    return Single.just("Hello " + name);  // 2
}
  1. En lugar de devolver un String devolvemos un Single<String>. La clase Single de RxJava2 implementa el Patrón Reactivo para un único valor de respuesta.
  2. Creamos un Single a partir del mensaje con la respuesta.

El cliente quedaría:

@Client('/hello')
interface HelloClient {
    @Get("/{name}")
    Single<String> hello(String name)
}

Y finalmente el test:

void "test hello world"() {
    given:
        HelloClient client = embeddedServer.applicationContext.getBean(HelloClient)

    expect:
        client.hello("Iván").blockingGet() == "Hello Iván" // 1
}
  1. En el test convertimos la llamada en bloqueante

Con un pequeño cambio tenemos una implementación reactive y non-blocking en el servidor y un cliente reactive para testear todo.

Micronaut es más que esto

Hemos visto un ejemplo muy sencillo pero Micronaut ofrece gran cantidad de opciones y características pensadas en Microservicios:

  • Service discovery: Con soporte de Consul y Eureka
  • Circuit Breaker con soporte de Retry
  • Configuración compartida
  • Cliente HTTP con Load-Balancing
  • Tracing con soporte para Zipkin y Jaeger
  • Seguridad
  • Soporte de serverless en AWS Lambda
  • Soporte para Hystrix y Ribbon
  • Micrometer
  • Y muchas más integraciones

Otra característica a destacar es que estas integraciones están construidas sin añadir práctiacemente dependencias adicionales al framework lo que evita que los JARs finales tenga excesivo tamaño.

Más información

Esto es sólo el comienzo. Podeis encontrar el código completo de la apliación hello-world en Github.

Para conocer más sobre el framework recomiendo la de presentación de Graeme: Launching the Micro Future: Groovy, Grails and Project Particle disponible en el canal de Youtube de Greach.

También está disponible la documentación oficial, la documentación del API y guías con distintos ejemplos en dónde se irán añadiendo nuevas en los próximos meses.

Finalmente la versión Milestone 2 estará disponible a final de Junio y se espera la versión final 1.0 antes de fin de año.

También te recomendamos

La evolución de las interfaces de comunicación hombre-máquina: escribir, tocar, hablar… pensar

Dime cuál es la organización de tu equipo de desarrollo y te diré cómo es la arquitectura de tu software

Trabajar con microservicios: evitando la frustración de las (enormes) aplicaciones monolíticas

-
La noticia Desarrollando microservicios reactivos con Micronaut fue publicada originalmente en Genbeta Dev por Iván López .

Da potencia y flexibilidad a tus tests con Jest

$
0
0

Jest

El testing es uno de los conceptos más core de eXtremme Programming (XP). Ya lo decía el gran Kent Beck:

Any program feature without an automated test simply doesn’t exist

Curiosamente, JavaScript ha sido históricamente uno de los lenguajes con más frameworks de test y menos cultura de testing en su comunidad. Los frameworks han ido apareciendo y desapareciendo a la velocidad del rayo y, por fin hoy, podemos decir que tenemos un magnífico ecosistema para realizar pruebas automáticas que ha venido para quedarse.

En este post vamos a hablar sobre Jest, con él que podemos construir tests unitarios trabajando con matchers personalizados, crear mocks o comprobar snapshots de componentes visuales como algo sencillo y accesible.

Instalación y puesta en marcha

Para completar un ciclo de feedback rápido y con la máxima información en cada momento, debemos de elegir un framework de testing flexible, rápido y con un output sencillo y comprensible. Este es el caso de Jest que, basado en Jasmine, destaca por sus funcionalidades potentes e innovadoras.

Jest ha sido desarrollado por el equipo de Facebook y, aunque nace en el contexto de React, es un framework de testing generalista que podemos utilizar en cualquier situación. Una vez que empecemos con Jest, ya no querréis cambiar :)

Comenzado por el principio, es importante conocer la página principal de Jest , la cual es una de las mejoras guías que encontraréis. En ella podremos encontrar todo tipo de ejemplos y documentación que nos ayudará mucho a profundizar en el framework. En cualquier caso, lo primero es lo primero y para comenzar debemos instalarlo.

Como sucede con cualquier otro paquete JavaScript, podemos añadirlo mediante NPM o Yarn a nuestro proyecto:

npm install --save-dev jest
yarn add --dev jest

Si vamos a utilizar Jest con ES6+, entonces necesitamos algunas dependencias extra (partimos de la suposición de que vamos a usar Babel 6 para este ejemplo):

npm install --save-dev jest babel-jest babel-core regenerator-runtime babel-preset-env
yarn add --dev jest babel-jest babel-core regenerator-runtime babel-preset-env

En el caso de que queramos trabajador con React y procesar JSX, entonces añadiremos también el preset correspondiente (recordad la nueva gestión de presets que babel incorpora en sus últimas versiones):

npm install --save-dev jest babel-jest babel-core regenerator-runtime babel-preset-env babel-preset-react
yarn add --dev jest babel-jest babel-core regenerator-runtime babel-preset-env babel-preset-react

Por último, definiremos en el .babelrc los presets necesarios:

{
  "presets": ["env", "react"]
}

NOTA: En este caso, el preset de React se añade únicamente por si queréis a futuro examinar algunas características avanzadas de Jest como el *snapshot testing, pero no sería realmente obligatorio para el propósito de este artículo.*

Con todo el tooling preparado, que no es poco, si queremos ejecutar los tests desde NPM añadiremos una nueva entrada en la sección de scripts del fichero package.json de nuestro proyecto:

{
  "name": "jest-testing",
  "version": "1.0.0",
  "scripts": {
    "test": "jest"
  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-jest": "^22.4.3",
    "babel-preset-env": "^1.6.1",
    "babel-preset-react": "^6.24.1",
    "jest": "^22.4.3",
    "regenerator-runtime": "^0.11.1"
  }
}

De esta manera, al ejecutar npm test (o npm t si te van los shortcuts), se invocará Jest y se ejecutarán nuestros tests:

Ejecución de Jest sin tests definidos

Por supuesto, la ejecución falla al no encontrar ningún test todavía en el proyecto, pero esto va a cambiar muy pronto :)

Para ir calentando, vamos a crear un ejemplo un poco chorra que nos permita comprobar que todo funciona correctamente a nivel de configuración del proyecto.

Para ello, crearemos un carpeta test donde almacenar nuestras pruebas automáticas y dentro crearemos un fichero sum.test.js con el siguiente contenido:

test('should sum two numbers', () => {
    let result = 3 + 2;        
    expect(result).toBe(5);
});

No hay demasiado que explicar aquí, verdad??? :)

Vamos pues a ejecutar los tests de nuevo y así nos vamos familiarizando con la salida:

Resultado de la ejecución de nuestros tests

Nuestro primer verde!! Ahora ya no podremos parar.

En los siguientes apartados analizaremos como getionar las distintas fases de definición de un test: Arrange, Act y Assert. En el Arrange estableceremos el estado inicial del que partimos (setup/tearDown), luego ejecutaremos en el Act el código que altera ese estado incial y, por último, realizaremos las comprobaciones necesarias en el Assert utilizando los matchers que Jest nos provee o, incluso, definiendo los nuestro propios.

Definición de contextos

Como estructurar nuestros tests es un aspecto fundamental que condiciona su mantenibilidad a medida que crece el proyecto y el número de tests que tenemos. Generalmente, decimos que los tests se agrupan en suites, que no son más que agrupaciones de tests que están relacionados. Personalmente, prefiero que la causa de agrupación de las pruebas sea un contexto común, un arrange compartido en el contexto de la funcionalidad que abordamos. Es en este tipo de situaciones donde realmente veremos cómo interactuan las funcionalidades que se relacionan cohesivamente.

Para la definición de este tipo de contextos, Jest nos da los siguientes niveles de agrupación:

  • Nivel de fichero. Cada suite puede ir en un fichero distinto siempre y cuando sea detectado por Jest. Esto sucede bajo ciertas condiciones como que se llame *.test.js o que esté dentro de un directorio __test__, por ejemplo.
  • Definición de contextos Podemos agrupar tests mediante la construcción describe bajo un concepto compartido. Ejemplo:
describe('User registration', () => {
   test('....', () => {});
});

Los contextos o describe son anidables, aunque normalmente no se recomienda más de dos niveles de anidamiento ya que complican mucho la legibilidad del conjunto.

Gestión del estado inicial del que partimos: Setup y TearDown

Para la ejecución de una prueba automática es necesario establecer antes de nada un escenario específico que reproduca el estado del que queremos partir. Para ello, podemos tener ya código especializado que inicializa ciertas tablas en una base de datos, crea unos ficheros en el sistema o inicializa ciertas estructuras de datos. Sea como sea, es necesario que nuestro "framework" nos proveea de ciertos métodos que se ejecutarán siempre antes y después de cada test. Es el caso de Jest, estos son beforeEach y afterEach:

beforeEach(() => {
  db.init();
});

afterEach(() => {
  db.clear();
});

test('Car should be present in the catalog', () => {
  expect(db.findCar('BMW')).toBeDefined();
});

Es posible que tanto en beforeEach como en afterEach tengamos que realizar llamadas a código asíncrono (conexión a BD, llamada a servicio o similar). Por este motivo, estas funciones son capaces de recibir promesas como resultado de su invocación, de forma que Jest esperará a que la promesa se complete antes de ejecutar el test. El único punto a tener en cuenta es que la promesa se debe devolver siempre como resultado utilizando return:

beforeEach(() => {
  return db.initAsync();
});

Por último, si la inicialización o limpieza que debemos realizar únicamente se produce al principio de lanzar toda la suite y al final, podremos utilizar las expresiones beforeAll y afterAll:

beforeAll(() => {
  return db.initAsync();
});

afterAll(() => {
  return db.clearAsync();
});

test('Car should be present in the catalog', () => {
  expect(db.findCar('BMW')).toBeDefined();
});

test('Motorbike should be present in the catalog', () => {
  expect(db.findMotorbike('BMW')).toBeDefined();
});

Por otra parte, beforeEach y afterEach se pueden utilizar dentro de un contexo definido con describe y, en ese caso, únicamente se aplicarían a los tests que están definidos en ese contexto:

Con el fin de podamos comprender la secuencia concreta de métodos disponibles y como se van ejecutando en Jest, podemos ver el output de la siguiente secuencia de definiciones:

beforeAll(() => console.log('1 - beforeAll'));
afterAll(() => console.log('1 - afterAll'));
beforeEach(() => console.log('1 - beforeEach'));
afterEach(() => console.log('1 - afterEach'));
test('', () => console.log('1 - test'));
describe('Scoped / Nested block', () => {
  beforeAll(() => console.log('2 - beforeAll'));
  afterAll(() => console.log('2 - afterAll'));
  beforeEach(() => console.log('2 - beforeEach'));
  afterEach(() => console.log('2 - afterEach'));
  test('', () => console.log('2 - test'));
});

// 1 - beforeAll
// 1 - beforeEach
// 1 - test
// 1 - afterEach
// 2 - beforeAll
// 1 - beforeEach
// 2 - beforeEach
// 2 - test
// 2 - afterEach
// 1 - afterEach
// 2 - afterAll
// 1 - afterAll

Matchers

Los matchers son las funciones utilizadas por el framework de test para comprobar si el valor esperado por la prueba automática coincide realmente con el obtenido. Evidentemente, si el valor no coincide el test fallará (FAIL) y nos mostrará, marcando la salida en rojo, cual ha sido la discrepancia de valores. Por otra parte, si valor esperado coincide con el obtenido, tendremos ese adictivo verde (PASS) que nos llevará a escribir el siguiente test.

Es por esto que, cuando comparamos dos valores al final de un test, es importante conseguir que no se pierda la intención que queremos expresar con esta prueba automática. Recordemos que los tests son la documentación ejecutable de nuestro proyecto y, si esta no es entendible y sencilla, discernir lo que realmente el software será mucho más complicado y, por consiguiente, tendremos que invertir mucho más tiempo en su mantenimiento y seguramente acabaremos cometiendo muchos más errores.

Cuando comparamos dos valores al final de un test, es importante conseguir que no se pierda la intención que queremos expresar con esta prueba automática

Si partimos de la base, nuestro test en su estructura básica de Arrange, Act y Assert deberá ser rápido de leer y sencillo de entender. No hay nada peor que encontrarse con un test en rojo, leerlo y toparse con una definición compleja que no somos capaces de asimilar en pocos segundos.

Para evitar esta situación y conseguir que nuestros tests sean realmente "semánticos", el naming es fundamental. Utilizar buenos nombres de definición de nuestros tests, buenos nombres de variables, aserciones de negocio (ya veremos más adelante que son) y cualquier otra técnica que mejore la expresividad, nos salvará la vida cuando más lo necesitemos.

Pero bueno, todo esto llegará poco a poco y, si realmente interiorizamos estos principios, podremos ir mejorando nuestra base de test ganando así velocidad de cambio en el futuro.

Para ir avanzado, podemos partir de lo básico que nos ofrece Jest por defecto para comparar tipos primitivos como son cadenas, valores numéricos o colecciones, dejando para la siguiente sección la definición de comparaciones o "matchers" personalizados. Comparaciones disponibles:

Igualdad

Ya sabemos que la igualdad en JavaScript es un tema delicado, así que en este comparador lo mejor es aclarar que se aplicará tal y como se define en el estándar para Object.is (si no conocéis esta función, os recomiendo explorar este y otros métodos de Object que muchas veces obviamos a la hora de escribir código):

expect(3 + 2).toBe(5);

Si en lugar de comprobar igualdad queremos verificar lo contrario, podemos seguir utilizando el comparador toBe precedido de not. Personalmente me encanta esta aproximación desde el punto de vista de la semántica extra que añade, ya que creo que se asemeja mucho más al lenguaje natural y facilita su lectura cuando se compara con otras aproximaciones de otros frameworks.

expect(3 + 3).not.toBe(5);

Para finalizar con las comparaciones de igualdad, no podíamos dejarnos fuera de la ecuación los valores que en JavaScript pueden ser truthy o falsy. Es por esto que en Jest tenemos soporte para cualquier comparación del estilo:

expect(null).toBeNull();
expect(null).toBeDefined();
expect(null).not.toBeUndefined();
expect(null).not.toBeTruthy();
expect(null).toBeFalsy();

Objetos y listas

Para el caso de estructuras complejas como son los objetos y las listas, incluidas aquellas que pueden presentar distintos niveles de profundidad, el operador adecuado no es tanto toBe sino toEqual, al permitir una comparación profunda o deep equality que evalua correctamente la estructura completa:

let data = {one: 1};
data['two'] = 2;

expect(data).toEqual({one: 1, two: 2});
expect(data).toEqual({two: 2, one: 1});

En el caso concreto de las listas, algo bastante habitual es el poder comprobar si el resultado de una operación que devuelve algún tipo de colección contiene el valor buscado. Para ello, haremos uso del matcher toContain, que nos permite explorar esta colección sin tener que iterar sobre ella y sin tener que utilizar funciones como indexOf o includes en la colección:

expect(['cat', 'beer', 'dog']).toContain('beer');

Valores numéricos

Ya fuera de los comparadores más básicos de igualdad, en el caso de valores numéricos disponemos de muchas comparaciones que aportan un valor semántico extra a la comprobación que intentamos expresar. Algunos de ellos son:

expect(2+2).toBe(4);
expect(2+2).toEqual(4);
expect(2+2).toBeGreaterThan(3);
expect(2+2).toBeGreaterThanOrEqual(3.5);
expect(2+2).toBeLessThan(5);
expect(2+2).toBeLessThanOrEqual(4.5);

expect(0.1 + 0.2).not.toBe(0.3);
expect(0.1 + 0.2).toBeCloseTo(0.3);

No hay nada más poco expresivo que encontrarse suites de test que únicamente hacen uso de los matchers más básicos, conformándose con su limitado valor expresivo. En este sentido, preferimos expresiones de este tipo:

expect(2+2).toBeGreaterThan(3);

Sobre otras menos específicas como la siguiente, en la que únicamente nos valemos del matcher más básico como es toBe:

expect(2+2 > 3).toBe(true);

Expresiones regulares

Cuando construimos nuestro conjunto de aserciones en los tests que diseñamos, una buena práctica es no acoplarse en exceso a las fixtures utilizadas o a la implementación de los métodos. En este sentido, lo que buscamos es validar más la estructura de la información procesada que los datos en si. Es por ello que es bastante habitual en las aserciones de nuestras tests encontrar expresiones regulares que validen un patrón en los datos, más que un resultado concreto.

Una buena práctica es no acoplarse en exceso a las fixtures utilizadas o a la implementación de los métodos

Para poder expresar este tipo de comparaciones podemos hacer uso del matcher toMatch y pasarle una expresión regular estándar:

expect('Christoph').toMatch(/stop/);

Excepciones

Partir de lo que conocemos como Happy Path en nuestros tests puede ser una buena manera de empezar a razonar sobre la funcionalidad y explorar así cual sería un diseño adecuado para la misma. Es una práctica habitual si estamos haciendo TDD. Siguiendo este proceso y a medida que avanzamos, es posible que surjan situaciones a tener en cuenta y que, por no ser tan habituales o tratarse de situaciones excepcionales, no habíamos tenido en cuenta en un incio. Para este caso, lo más recomendable es anotarlas y abordarlas en próximas iteraciones, de forma que no nos corten el flujo de trabajo que estemos siguiendo en ese momento.

Por consiguiente, si más tarde volvemos a revisitar estas situaciones excepcionales que habíamos anotado, debemos de saber que Jest nos va a poder ayudar de nuevo a evaluarlas, permitiendo recoger excepciones y otros errores "esperados" ante una Arrange concreto.

const computeValue = () => {
    throw new Error('should fail');
};

expect(computeValue).toThrow();
expect(computeValue).toThrow(Error);
expect(computeValue).toThrow('should fail');
expect(computeValue).toThrow(/fail/);

Matchers personalizados

Como hemos podido comprobar en el apartado anterior, Jest cuenta con un conjunto de matchers muy rico y que aportan mucha semántica a las comprobaciones que necesitamos realizar a la hora de escribir tests. En cualquier caso, estos matchers siguen siendo demasiado generalistas en muchos contextos y, si lo queremos es que nuestro código hable de "negocio", necesitamos poder definir nuestros propios "matchers de negocio".

Tal y como comentaba, un "matcher de negocio" es una matcher que usa expresiones de nuestro dominio a la hora de verificar una comprobación. Si trabajamos con una factura, la idea sería tener un matcher que compruebe toBePaid, en lugar de acceder al importe de la misma y comprobar que el importe es superior a 0 con toBeGreaterThan. Nada que ver!!

// Correcto pero poco semántico
expect(invoice.getPaymentDate()).toBeDefined(); 

// Muchísimos más semántico y próximo al lenguaje del dominio!!! ;)
expect(invoice).toBePaid();

Ahora que tenemos un poco más claro el valor de poder definir matchers personalizados y próximos al dominio, vamos a ver como realmente poder utilizarlos en Jest. Para ello, y si queremos que los matchers que definamos estén disponibles en todas mis suites de test, tendremos que declararlos de forma global.

Simplemente editaremos el fichero package.json y añadiremos la propiedad setupTestFrameworkScriptFile dentro de la clave jest apuntando al fichero que contendrá la definición de los matchers (en este caso setup.js):

{
  "name": "basic-sum",
  "version": "1.0.0",
  "scripts": {
    "test": "jest",
    "test:watch": "jest --watch"
  },
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-jest": "^21.2.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-stage-0": "^6.24.1",
    "jest": "^21.2.1",
    "regenerator-runtime": "^0.11.0"
  },
  "jest": {
    "setupTestFrameworkScriptFile": "/test/setup.js"
  }
}

Si ahora creamos el fichero setup.js dentro del directorio test de nuestro proyecto, podremos definir haciendo uso de la función extend los matchers que necesitemos (en este ejemplo la posibilidad de comprobar si un valor numérico concreto está dentro de un rango):

import expect from 'expect';

expect.extend({
  toBeInRange(received, lower, upper) {
    if (received >= lower && received <= upper) {
      return { pass: true };
    }

    return {
      message: () => `expected ${received} to be in range`,
      pass: false,
    };
  }
});

Finalmente, ya puedo hacer uso de los nuevos matchers personalizados que he definido en cualquier de los tests que implemente:

test('should sum', () => {
  expect(100).toBeInRange(90, 120);
});

Watch mode

Una de las funcionalidades que resultan más prácticas es lanzar Jest en watch mode para que así pueda ir ejecutando los tests cada vez que se cambie un fichero. Esto que puede parecer mucho en bases de código con suites muy grandes, es especialmente interesante en Jest ya que ante un cambio buscará los tests a los que afecta este cambio y los relanzará, evitando el procesamiento de toda la suite completa cada vez. De hecho, en el caso en el que se encuentre con un error que detenga la ejecución, lanzará el test fallido el primero cuando se vuelvan a tirar los tests, evitando procesar antes los que ya estaban en verde.

Para ejecutar el modo watch, podemos añadir un nuevo script a nuestro package.json, de forma que lo podamos lanzar de una manera simple ejecutando npm run test:watch:

{
  "name": "jest-testing",
  "version": "1.0.0",
  "scripts": {
    "test": "jest",
    "test:watch": "jest --watch"
  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-jest": "^22.4.3",
    "babel-preset-env": "^1.6.1",
    "babel-preset-react": "^6.24.1",
    "jest": "^22.4.3",
    "regenerator-runtime": "^0.11.1"
  }
}

Una vez lanzado, nos encontraremos con una salida como la siguiente:

Captura De Pantalla 2018 06 19 A Las 17 23 25

Como podemos ver en la parte de usage, tenemos también la opción de filtrar qué tests se van a ejecutar con el fin de centrarnos únicamente en un subconjunto de los tests y no estar lidiando con el set completo que puede ser muy numeroso. Maravilloso!! :)

Cobertura

La cobertura de nuestra suite de test es el tanto por cien del código de producción por el que pasa alguna de nuestras pruebas automáticas.

La cobertura es una de esas métricas que las carga el diablo. Si nos sirve para ir detectando partes del código o hot spots en los que hemos incidido menos y que son importantes porque absorben mucho cambio, entonces la cobertura es nuestra amiga. Si la usamos como un indicador de calidad de cara a negocio o que el propio negocio nos exige para cumplir con ciertos requisitos, entonces puede ser peligroso, ya que podemos subirla rápidamente sin realmente estar prestando atención a la efectividad de las pruebas que incorporamos. En general, huid de buscar un valor concreto o de intentar superar un umbral prefijado. Si la tomamos como una métrica orientativa que, apoyada en las historias de usuario que nos entran, nos permite dirigir el cambio y nuestro empeño cuando hacemos testing, entonces nos aportará mucho valor.

La buena noticia es que obtener un análisis de cobertura en Jest es extremadamente sencillo, ya que puede ser obtenida mediante la opción --coverage, de forma que de nuevo podemos ampliar la sección de scripts de nuestro package.json para lanzar Jest con esta opción añadida a la que únicamente querremos recurrir cuando sea necesario:

{
  "name": "jest-testing",
  "version": "1.0.0",
  "scripts": {
    "test": "jest",
    "test:watch": "jest --watch",
    "test:coverage": "jest --coverage"
  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-jest": "^22.4.3",
    "babel-preset-env": "^1.6.1",
    "babel-preset-react": "^6.24.1",
    "jest": "^22.4.3",
    "regenerator-runtime": "^0.11.1"
  }
}

Cuando ejecutamos Jest con cobertura, se mostrará una tabla resumen extra al final de la ejecución de nuestros tests que tendrá más o menos este aspecto:

Captura De Pantalla 2018 06 19 A Las 17 42 47

Conclusiones

Como te puedes imaginar, esto es sólo la punta del iceberg y Jest esconde muchas otras sorpresas interesantes. Entre otras muchas, cabe destacar el mocking automático a distintos niveles, el soporte para snapshot testing y la integración por defecto de JSDOM para hacer tests sobre código que necesite tener disponible el DOM del navegador (React, Vue, Angular, etc) sin necesidad de levantar un navegador.

Muchas posibilidades para iniciarse en una de las prácticas de XP que más valor aporta al diseño y a la estabilidad de nuestro software.

También te recomendamos

La evolución de las interfaces de comunicación hombre-máquina: escribir, tocar, hablar… pensar

Karma.js, el concepto de Test Runner

JavaScript BenchMark con Benchmark.js

-
La noticia Da potencia y flexibilidad a tus tests con Jest fue publicada originalmente en Genbeta Dev por Ricardo Borillo .


Asegura la disponibilidad de tus aplicaciones Cloud con el patrón Service Messaging

$
0
0

Queue

La Web ha cambiado mucho desde los tiempos en donde los usuarios soportaban largas esperas mientras navegaban de página a página.

En la actualidad, es inaceptable que una operación lanzada por el usuario se alargue en él tiempo o produzca un error general a causa de una degradación del servicio, o una interrupción de la conexión. Y para ello utilizamos frameworks como VueJs o similares.

Con la llegada de la computación en la nube, los problemas de fallos transitorios relacionados con las comunicaciones o la sobrecarga de los servicios de backend, ganan en criticidad y requieren de patrones de aplicaciones especialmente diseñados para Cloud.

Este artículo describe el patrón que ofrece un incremento de la disponibilidad, confiabilidad y resiliencia de nuestras aplicaciones Cloud.

Service Messaging

El patrón de mensajería es aquel que se enfrenta a los problemas que producen las conexiones permanentes entre servicios remotos como son la dependencia, el acoplamiento y la limitación de la reutilización y escalabilidad de estos.

Para ello propone realizar la comunicación por medio de un bus de mensajes que realizan una conexión asíncrona entre ambos servicios (en este caso el cliente y los servicios de facturación y almacén), tal y como se ve en la figura.

Cola De Múltiples clientes comunicándose por un bus de mensajes con el pool de servicios

Los mensajes son unidades de información alfanumérica de pequeño tamaño (en un rango de Kilobytes) que son introducidos en la cola de mensajería por los clientes, para ser consumidos por los servicios de acuerdo con el flujo de trabajo que mejor resultados ofrezca.

Figura 2. Ejemplo de mensaje

Así, de mano, obtengo varios beneficios muy importantes:

  • Disponibilidad. Puedo añadir tantos clientes como quiera, porque los servicios de bus de mensajes en Cloud son “infinitos “y con un rendimiento que escala según el tamaño de la cola.
    • Cliente. El número de peticiones puede situarse muy por encima del volumen medio o el máximo esperado. El cliente no tendrá ninguna percepción de que la ejecución de la compra vaya más lenta.
    • Servicios. Los servicios pueden hacer una previsión de la carga de trabajo dependiendo del número de mensajes que puedan procesar. Evitando el riesgo de tener una degradación del servicio al recibir más peticiones de las que pueda admitir; o de un escalado automático sin límites que desemboquen en un coste que desborde al previsto y aprobado.
Compensacion De La cola de mensajes estabiliza los picos de peticiones, permitiendo un escalado de los servicios estable y previsible.
  • Escalabilidad. Podremos escalar de forma indistinta cualquiera de los servicios implicados de acuerdo con las necesidades de negocio. Por ejemplo, ante la avalancha de ventas, incrementar las instancias del servicio de facturación, dejando sin modificar el de almacén ya que la gestión del stock es mucho menos compleja. Y utilizando el tamaño de la propia cola de mensajes como indicador en las reglas automáticas de crecimiento y decrecimiento del número de instancias.
  • Resiliencia. Si una vez realizada la operación de venta en la caja y enviado el mensaje, hubiese un corte o degradación de las comunicaciones, el cliente no sufriría ninguna desconexión o fallo, siguiendo trabajando en modo local hasta que volviese la conexión y se envíen los mensajes producidos. En el caso de que una instancia del servicio de facturación se cayera o tuviera algún problema, se podría continuar realizando su trabajo con cualquier otra instancia, sin perder información de estado o mensajes.

Bregando con estados

Desde el nacimiento de la web basada en http, me tengo que “pegar” con un sistema sin estado; y aún más si quiero desplegar en el Cloud en donde el crecimiento horizontal basado en instancias es el modelo de escalado por defecto.

Es cierto que puedo utilizar mecanismos más o menos eficientes como registros en base de datos o memorias caché compartidas, pero solo cuando me veo obligado a ello.

De acuerdo con esta arquitectura, sería más correcto implementar un patrón de mensajes con metadatos, incluyendo un valor de estado en el propio mensaje que se modificaría según el servicio que lo haya procesado.

Otra forma de gestionar estados sería utilizar un patrón de colas prioritarias. En donde el propio cliente decide la urgencia de la operación simplemente ingresando el mensaje en una de las colas disponibles, y que son consumidas por los servicios en un orden temporal establecido. Creándose de forma sencilla múltiples “pipelines” o flujos de procesamiento sin necesidad de persistir ningún estado.

Cola La cola superior es prioritaria a la inferior, descargando al servicio de decidir la urgencia de cada operación

Finalmente podríamos enviar la respuesta al cliente que dio de alta la operación de compra, añadiendo la identificación única de a quien hay que remitirle el resultado del proceso de compra en el propio mensaje.

Latencia y complejidad, los efectos secundarios

Pero todo tiene su lado oscuro, y este patrón de aplicaciones en cloud no iba a ser diferente.

Así, los inconvenientes vienen primero por el aumento de la complejidad de la arquitectura de mis aplicaciones. No solamente por tener que añadir más código para que el cliente interactúe con la cola de mensajes, si no también por construir servicios que sean idempotentes, que soporten múltiples lecturas del mismo mensaje, que sepan cómo gestionar los metadatos, o que breguen con el TTL de los mensajes.

Por otro lado, estoy metiendo latencia a mi sistema y un punto de incertidumbre; ya que la arquitectura no está diseñada a las prestaciones puras, si no a la escalabilidad, disponibilidad y resiliencia.

De forma que, dos operaciones realizadas en el mismo momento serian procesadas en un intervalo de tiempo diferente, con una duración indefinida dentro de un rango temporal aproximado.

En resumen, aún siendo un patrón que se puede aplicar en múltiples escenarios, no es una “bala de plata. Y hay que descartarlo en aquellos en donde las operaciones en tiempo real sean requisito.

Show me the Code

Quiero compartir dos excelentes tutoriales paso a paso publicados por Microsoft, en donde muestran lo sencillo que es implantar este patrón con C#:

Partiendo de ambos tutoriales, lo siguiente a implantar sería el reemplazo del uso de la clave de acceso por un patrón Valet Key, para tener cubiertos mis requisitos de seguridad.

En GenbetaDev | 3 patrones de diseño imprescindibles que deberías conocer para tu sistema en cloud: Retry, Valet Key y Sharding

Imágenes: Azure Interactives

También te recomendamos

Google lanza PerfKit ¿Cómo evaluar el rendimiento real de las plataformas en la nube?

¿Qué perfiles técnicos buscan las empresas ágiles? Un caso real: ING España abre un gran proceso de contratación

Cloud9 Un IDE en la nube

-
La noticia Asegura la disponibilidad de tus aplicaciones Cloud con el patrón Service Messaging fue publicada originalmente en Genbeta Dev por Juan Quijano .

¿Qué pruebas debemos hacerle a nuestro software y para qué?

$
0
0

Testing

“Los test no son opcionales”. Esto que parece a muchos una verdad de perogrullo, sigue siendo uno de los temas pendientes en el mundo del desarrollo de aplicaciones de software actual.

Sí, increíblemente aún hay muchos compañeros “del metal” que no son conscientes que programar sin pruebas no solo es como hacer acrobacias en el trapecio sin red de seguridad, sino además una fuente de errores, malas prácticas y ansiedad.

Y por ello quiero repasar los fundamentos básicos de las pruebas que debiéramos aplicar, cada uno en su necesidad, a nuestros desarrollos.

¿Por qué hacer pruebas?

Para que lo entienda hasta el más novel de los lectores, hacer pruebas es la forma de asegurarse que lo que queremos que haga nuestro programa, lo haga, y lo haga sin errores.

La construcción de software implica conocimiento, experiencia, talento, capacidad intelectual y un punto de arte. Es decir, es una labor muy difícil, y falta aún mucho para que eso cambie a mejor. De hecho, la complejidad está tendiendo al crecimiento de una forma, como en todo lo relacionado con el Front-End en Javascript, al absurdo.

Habiendo superado, hace ya décadas, la capacidad humana de aprensión y memorización; lo que implica necesariamente que los fallos y errores son inevitables si los intentamos evitar con solo nuestras capacidades humanas.

Las pruebas no son opcionales. Un software sin pruebas es una bomba a punto de estallar

¿A quien no le ha pasado que ha dejado su código medio año en un cajón, y a la vuelta de ponerse a toquetearlo tener la sensación de que lo ha escrito otra persona? No reconocemos a nuestra propia criatura.Y no hablemos cuando estamos integrados en un equipo, o recibimos el “regalito” de soportar o evolucionar un código heredado.

Por ello las pruebas son imprescindibles, ya que nos permiten garantizar que las aplicaciones cumplen las funcionalidades que se esperan de ellas y las expectativas de calidad (no solo de código); ayudando a encontrar esos errores o defectos que aún no se han descubierto; reduciendo el costo del desarrollo, el de propiedad para los usuarios; y desarrollar confianza en los clientes al evitar los molestos errores de regresión.

Eso sin hablar de la sensación de seguridad incremental que se obtiene cuanto más cerca estamos de un despliegue, ya que a más código que tenemos, más pruebas nos aseguran (en forma de una tupida malla) que todo funciona correctamente.

DevOps y la herencia de la automatización

Devops

La llegada de las metodologías Agiles, desde los años 90 del siglo pasado, fue un revulsivo en la organización y ejecución de pruebas dentro de procesos Waterfall.

En estos últimos, se podría generalizar, las pruebas principalmente eran manuales; definidas meticulosamente en voluminosos documentos de planes de pruebas; y que se realizaban solamente una vez acabada la codificación del software.

Xtreme Programming, en cambio, hizo mucho hincapié en la automatización y en el concepto de pruebas orientadas a la prevención de los finales de los años 80; marcando de esta forma, la futura filosofía Agile. Por ello, actualmente utilizamos frameworks de pruebas que permiten realizar automáticamente la mayoría de los test en todos los ámbitos de la aplicación.

Las pruebas manuales y automatizadas son complementarias

Y más cuando se pretende adoptar el concepto de Integración Continua, como parte imprescindible de DevOps, donde la propia construcción y validación de la Build por medio de todo tipo de pruebas automáticas es parte inherente del proceso.

Siendo esto aún más crítico en niveles altos de madurez en donde llegaríamos a aplicar despliegue automatizado o, incluso, continuo.

La importancia que han ido ganando las pruebas ha sido tal que la propia forma de codificar el software también ha sufrido cambios profundos. El nacimiento de TDD (desarrollo orientado a las pruebas) y su forma de supeditar el código a los test, implica que hacer software testeable es un requisito imprescindible en el código de calidad.

Y, aunque no lleguemos a utilizar esta avanzada técnica de desarrollo (que no es nada fácil), el objetivo de poder probar de forma automática nuestro código, ha reforzado prácticas tan importantes en la programación orientada a objetos como es SOLID.

Pruebas automatizadas vs manuales

Tortoise And Hare

Tenemos una primera gran división en el mundo de las pruebas entre las automatizadas y las manuales.

Como indica su nombre, las primeras dependen de una herramienta de pruebas que implica, en casi todos los casos, un lenguaje o subconjunto del lenguaje propio. Es decir, si las hago en nUnit va a ser muy complicado pasarlas a MS Test.

Las pruebas manuales requieren de interacción humana. El probador se pone en la piel del rol de usuario que se tenga que validar, y realiza todas aquellas operaciones que tenga definidas en un plan de pruebas, o le busca “las cosquillas” al sistema para llegar allí donde ningún “luser” ha llegado anteriormente...

Como ves, ambos tipos de ejecución de pruebas son complementarios e importantes para garantizar un software de calidad.

La automatización es rápida y puede probar muchas variaciones sutiles en los datos; también puede repetir fácilmente las pruebas a medida que el software evoluciona; y debido a que es ejecutado por el sistema, se evita la fatiga y los errores que a veces acompañan a las tareas repetitivas.

En cambio, aunque las pruebas manuales generalmente tardan más en ejecutarse (ya que las realiza una persona), a menudo requieren mucho menos tiempo de configuración. Es una buena opción para las pruebas que solo deben ejecutarse ocasionalmente, o en los casos en que el costo/tiempo de la configuración de automatización supere los beneficios.

Un universo de tipos de pruebas

Siguiendo los pasos de la complejidad inherente de nuestra industria, las pruebas también sufren de una miríada inacabable de tipos, versiones, evoluciones y clases. Pero centrémonos en las más importantes e imprescindibles, según cada caso y contexto.

Prueba unitaria: las pruebas unitarias son pruebas automatizadas que verifican la funcionalidad en el componente, clase, método o nivel de propiedad.

Tddmantra

El objetivo principal de las pruebas unitarias es tomar la pieza más pequeña de software comprobable en la aplicación, aislarla del resto del código y determinar si se comporta exactamente como esperamos. Cada unidad se prueba por separado antes de integrarlas en los componentes para probar las interfaces entre las unidades.

Las pruebas unitarias deben escribirse antes (o muy poco después) de escribir un método; siendo los desarrolladores que crean la clase o el método, quienes diseñan la prueba.

Así, conseguimos mantener el foco en lo que debe hacer el código, y se convierte en una poderosa herramienta para aplicar KISS, JIT, y mantener el foco en lo que tiene que hacer en vez de en el cómo, evitando introducir complejidad sin valor.

Pruebas de integración: desde una perspectiva de prueba, las unidades individuales se integran juntas para formar componentes más grandes. En su forma más simple, dos unidades que ya han sido probadas se combinan en un componente integrado y se prueba la interfaz entre ellas.

Las pruebas de integración – o de componentes - identifican problemas que ocurren cuando las unidades se combinan. Los nuevos errores que surgen probablemente estén relacionados con la interfaz entre las unidades en lugar de dentro de las propias unidades; simplificando la tarea de encontrar y corregir los defectos.

Pruebas de regresión: cada vez que se realizan cambios en un proyecto, es posible que el código existente ya no funcione correctamente o que se presenten errores no descubiertos previamente. Este tipo de error se llama regresión.

Para detectar estos defectos, todo el proyecto debe someterse a una regresión: una nueva prueba completa de un programa modificado, en lugar de una prueba de solo las unidades modificadas, para garantizar que no se hayan introducido errores con las modificaciones.

Como se puede deducir, este tipo de pruebas debe ser automatizado porque puede estar compuesto por decenas o miles de pruebas unitarias, de integración o más.

Una versión menos costosa, podría ser construir pruebas que repliquen las acciones que provocaron la regresión, y comprueben que han sido corregidos al no volver a sucederse los errores; además de añadir los test unitarios que aseguren que el código que ha corregido la regresión funciona correctamente.

Pruebas de funcionalidad: pruebas automatizadas o manuales que prueban las funcionalidades de la aplicación o módulo construidos desde el punto de vista del usuario final, con sus diferentes roles, para validar que el software hace lo que debe y, sobre todo, lo que se ha especificado.

En su versión automática son pruebas que se automatizan para "ahorrar tiempo de pruebas". A partir de los casos de prueba de las pruebas manuales, se automatizan los casos de prueba para que se repitan en las ejecuciones. Esos casos suelen ser los más importantes (happy flow) de los módulos o procesos de negocio "vitales" de la aplicación. Es decir, los procesos que siempre tienen que funcionar y que bajo ningún concepto pueden fallar. El objetivo de las pruebas funcionales automáticas es comprobar que no haya regresiones.

Las pruebas obligan a hacer un código desacoplado y promueven la calidad

En el caso de las manuales, las ejecuta un tester como si fuese un usuario, pero siguiendo una serie de pasos establecidos en el plan de pruebas, diseñado en el análisis de los requisitos para garantizar que hace lo que debe (casos positivos), que no falla (casos negativos) y que es lo que se ha solicitado.

El tester realizará las acciones indicadas en cada paso del caso de prueba comprobando que se cumple el resultado esperado. Si el resultado es distinto, se reportará un defecto con todo detalle: descripción, datos utilizados, capturas de pantalla, etc., para facilitar la solución.

El mayor problema con el que se enfrentan las pruebas funcionales para ser automatizadas es su fragilidad. Cada prueba testea miles de líneas de código, centenares de integraciones en todos los tiers, y una interfaz de usuario cambiante. Llegando a no ser sostenible el conjunto de pruebas en relación con su definición, coste y mantenimiento.

Llevando las aplicaciones a su límite

Test De Carga

Ya tenemos probada y desplegada nuestra aplicación. Ahora viene la parte de operaciones y también se debe probar de forma automática las capacidades y debilidades del software y de la plataforma sobre la que corre (infraestructura y dependencias), llevándola al límite, para comprobar su disponibilidad, estabilidad y resiliencia.

Pruebas de estrés: las pruebas a pequeña escala, como un usuario único que ejecuta una aplicación web o una base de datos con solo un puñado de registros, pueden no revelar problemas que suceden cuando la aplicación se usa en condiciones "reales".

La prueba de estrés empuja los límites funcionales de un sistema. Se realiza sometiendo el sistema a condiciones extremas, como volúmenes de datos máximos o una gran cantidad de usuarios simultáneos.

También se utilizan para, llevado el sistema al colapso o degradación, comprobar su funcionamiento continuado por encima de su límite y, una vez liberado de la carga, evaluar su capacidad de resiliencia volviendo a su estado óptimo de funcionamiento.

Lleva la aplicación al límite, busca que rompa, y luego observa como se reconstruye

Y en la actualidad cada vez más se utilizan las capacidades de la Cloud tanto para crear un gran número de usuarios, distribuir las peticiones en todo el mundo, como para obtener los recursos de procesamiento, memoria y almacenamiento necesarios en operaciones de este calibre.

Prueba de rendimiento: determinan la capacidad de respuesta, el rendimiento, la confiabilidad y/o la escalabilidad de un sistema bajo una carga de trabajo determinada.

En aplicaciones web, las pruebas de rendimiento a menudo están estrechamente relacionadas con las pruebas de estrés, la medición del retraso y la capacidad de respuesta bajo una carga pesada.

En otras aplicaciones (escritorio y aplicaciones móviles, por ejemplo), las pruebas de rendimiento miden la velocidad y la utilización de recursos, como el espacio en disco y la memoria.

Si almacenamos todos los resultados de las pruebas de rendimiento durante un plazo de tiempo, podemos conocer el estado de salud de la aplicación, pudiendo obtener tendencias y previsiones de funcionamiento; y optimizando cada despliegue según el rendimiento necesario en cada caso.

Pruebas de seguridad: validan los servicios de seguridad de una aplicación e identifican posibles fallos y debilidades.

Muchos proyectos utilizan un enfoque de caja negra para las pruebas de seguridad, lo que permite a los expertos, sin conocimiento del software, probar la aplicación en busca de agujeros, fallos, exploit y debilidades.

Y esto es solo el principio

Funcionales, Usabilidad, Exploratorios, Aceptación, Infraestructura, etc. El universo de las pruebas es inmenso, siendo una de las ramas de la mal llamada informática, que requiere de una especialización especifica.

Y más cuando la llegada de la Infraestructura como Código, automatiza y mejora procesos conocidos como el Estado de Configuración Deseada, añadiendo capacidades de lógica de negocio en la construcción, mantenimiento y pruebas a nivel de plataforma.

No lo olvides nunca: las pruebas no son opcionales.

El ciclo de DevOps, una guía para iniciarse en las fases que lo componen

$
0
0

Devops Loop Illustrations

Hay términos que están de moda, tienen mucha capacidad de empoderamiento, y producen movimientos innovadores en las empresas. Sobre todo, las dedicadas a negocios relacionados con la economía digital.

Uno de ellos es, junto con microservicios, Agile, o transformación digital, el término DevOps.

Este es un concepto, cuasi una filosofía, del cual en este artículo voy a centrarme en la descripción de las fases del ciclo iterativo que lo componen; con el objetivo de aclarar conceptos básicos que debo tener interiorizados antes de emprender su adopción.

Fases en DevOps

Traffic Lights 2147790 960 720

En la actualidad, DevOps se puede definir como un símbolo de infinito o un circulo que define las diferentes áreas y fases que lo componen:

  • Plan
  • Desarrollo
  • Integración continua
  • Despliegue
  • Operación
  • Monitorización

Es importante comprender que es una de las múltiples representaciones, no el canon definitivo. Habiendo simplificaciones totalmente válidas en forma de cuatro fases principales, o descomposiciones detalladas de cada una de ellas.

Otra idea imprescindible de interiorizar es que se trata de la definición de un flujo iterativo, por lo cual diferentes procesos pueden estar comprendidos en diferentes fases de forma orgánica y superpuesta, siempre ajustándose a los conceptos fundamentales de valor y mejora continua.

Debo evitar caer en la tentación de considerarlo como un ciclo en cascada, en donde las fases están delimitadas rígidamente por una frontera que las separa, o que solamente se puede iniciar una fase cuando la anterior ha finalizado del todo.

Ahora, voy a mirar con más detalle cada fase, permitiéndome una licencia muy habitual en los procesos DevOps, que es utilizar el framework Scrum (y sus arquetipos) como metodología de trabajo para hacer más sencillas las explicaciones.

Gestión y planificación

Stratgia Proceso De Planificacion Estrategica

Todo proyecto necesita una visión que indique a los participantes -sean directos o indirectos- el motivo y fin último del trabajo a realizar; definiendo un conjunto mínimo de funcionalidades que permitan aportar Valor en cada iteración, los criterios de aceptación a cumplir y la definición de acabado; para cada una de las fases y en el conjunto del proyecto.

Esto se constituye como una Pila de Producto viva, que está soportando continuadamente un proceso de “jardinería”, desde un punto de vista de negocio, la cual alimenta a las diferentes fases de desarrollo y operaciones; y que aborda los cambios y evoluciones según un proceso de mejora continua basado en un feedback temprano y continuado.

Para ello utilizare las “liturgias” de Scrum, como son las reuniones de Planificación de la iteración y la Revisión de la iteración; pero sin, por ello, dejar de tener una comunicación e implicación constante entre negocio y el equipo técnico. Siendo imprescindible que Negocio y Gestión se formen en las herramientas y métricas diseñadas para que tengan una visibilidad veraz y suficiente del desarrollo del proyecto.

Desarrollo, construyendo código

Mr Burns Monkeys Typewriters1

Esta fase es en donde se construye. Sea picando código, diseñando infraestructura, automatizando procesos, definiendo las pruebas o implantando la seguridad.

Es en donde, en la actualidad, se está realizando el esfuerzo más importante en la automatización de las acciones repetitivas o complejas; y que debiera ser uno de los primeros peldaños que escalar para implantar DevOps en una organización.

Si tuviera que resumir en una sola palabra el concepto más importante de esta fase, esta sería “pruebas.

Ya sea en una aplicación de gestión, operaciones con datos o el despliegue de infraestructura virtual; siempre voy a trabajar en código – ya sea con un lenguaje de programación o de scripting; el cual debe ser almacenado en un gestor de código que me permita operaciones básicas como históricos, ramas, versionado, etc.

Pero con esto no es suficiente y cada pieza construida debe incluir (obligatoriamente) sus propias pruebas automatizadas. Es decir, los mecanismos con los que el propio sistema pueda asegurarse de que lo que hemos realizado es correcto, no falla, no hace fallar a otras partes, cumple los criterios de aceptación, y señala de forma temprana los errores que surgen en todo desarrollo.

De hecho, este es un camino imperativo para adoptar Devops, desde sus más incipientes estadios.

Primero almaceno el código/script en un gestor para poder tener versionado y poder hacer rollback; luego empezar a incluir las pruebas automatizadas, lo cual va a producir una transformación profunda en las técnicas de codificación (desacoplamiento, segregación, modularización, etc); por último, se llega a la orientación de lo construido hacía las fases siguientes, incluyendo la transformación del propio flujo de trabajo.

Integración continua, o cómo dormir tranquilo

Sleeping Baby 1

Aunque en esta fase y la anterior la mayoría de los autores nos centramos en un punto de vista de desarrollo, realmente la llegada de DevOps y los conceptos de Infraestructura como código, hacen que IT también sea pleno participante de esta fase.

La integración continua es automatizar el mecanismo de revisión, validación, prueba y alertas del valor construido en las iteraciones, desde un punto de vista global.

Es decir, mi singular funcionalidad o característica, que he construido en mi entorno de desarrollo, junto con las pruebas automáticas que aseguran su correcto funcionamiento, son publicadas en un servicio que la integra con el resto de la aplicación.

Así, lanzando todas las pruebas que incluye cada funcionalidad, más las pruebas de integración de toda la aplicación, más las pruebas funcionales, más las pruebas de aceptación, más los análisis de calidad del código, más las pruebas de regresión, podré estar seguro de que mi aplicación sigue funcionando correctamente.

Y si algo falla, saltará la alerta temprana indicando en qué pieza y en qué línea está rompiendo mi sistema.

Así que, cuanto más me acerque al momento de iniciar el camino crítico del despliegue, más tranquilo estaré porque más pruebas incluyen mi trabajo.

Despliegue automatizado

Gns60gr

Desplegar, en las organizaciones clásicas, siempre ha sido un dolor. Dos roles (Dev e IT) con objetivos e intereses divergentes se encuentran en una batalla de incomunicación y recelo mutuo para publicar la aplicación en los diferentes entornos de trabajo: desarrollo, integración, calidad/test, preproducción, producción, etc.

Como en toda cadena, es fácil romper por el eslabón más débil, y cuantos más pasos existan en los procesos de despliegue, más posibilidades de fallo humano se suman.

Así, DevOps promueve la automatización de los despliegues por medio de herramientas y scripts, con el objetivo último de que todo el proceso se resuelva con un botón de aprobación o, idealmente, la activación de una característica.

Entre cada entorno de despliegue, hay que tener muy en cuenta la administración del contexto (crear, configurar y destruir entornos); realizar y superar las pruebas específicas de cada uno (como pueden ser pruebas de rendimiento, resiliencia, funcionales, de seguridad o de UX); y administrar la gestión de la configuración (CMDB) de acuerdo con las complejas necesidades de los diferentes contextos de despliegue.

Lo más crítico y dificultoso en esta fase, más que conocida y adoptada en el entorno IT, es la llegada del concepto Cloud con sus capacidades de Infraestructura como código, que fuerza un cambio en el paradigma de la gestión de la infraestructura. Que pasa de una gestión de recursos finitos a una gestión basada en una optimización permanente de costes.

Operaciones, velando por el buen funcionamiento

Istock 000026445143small 0

Es una minoría las aplicaciones que son puestas en producción y no requieren de un trabajo constante en su optimización, evolución, o soporte. Pero, además, debo tener en cuenta todas las operaciones relacionadas con su funcionamiento que deben realizarse de forma continuada durante toda la vida del software.

Así tendré, el ajuste de los recursos de acuerdo con la demanda o las características de crecimiento de las aplicaciones; la modificación dinámica de la infraestructura por causas de seguridad, rendimiento, disponibilidad, etc.; o la optimización de procesos y procedimientos que requieren cambios en el contexto de ejecución y explotación.

En esta fase, aplicará como anillo al dedo la adopción del concepto de Nube – sea pública, privada o hibrida- en dónde las operaciones puedan explotar las capacidades de escalabilidad, persistencia, disponibilidad, transformación, resiliencia y seguridad que ofrecen este tipo de plataformas.

Debiendo trabajar en la automatización de la optimización de los escenarios de operaciones, de forma que vuelvo a mitigar los fallos a causa de error humano.

Monitorización, o el arte de medir

Measurement

Esta última fase de un proceso DevOps, es una fase permanente y que se aplica a todo el ciclo completo.

Es dónde voy a definir las medidas que estaré monitorizando para controlar el estado de salud de las aplicaciones y su infraestructura, siendo esto el histórico de las mediciones durante un periodo de tiempo, que me muestran la evolución del sistema.

Tiene una vertiente reactiva, en donde de acuerdo con los resultados iré ajustando o modificando la plataforma; y otra proactiva en la cual un proceso de aprendizaje continuo me va a permitir adelantarme a las necesidades y riesgos.

Lo que no se define no se puede medir. Lo que no se mide, no se puede mejorar. Lo que no se mejora, se degrada siempre. William Thomson.

Pero no todo es tecnología, y en esta fase se va a consolidar el feedback continuo de todos los ámbitos y niveles del ciclo Devops para poder incluirlos en la siguiente iteración durante la fase de Plan, o de forma inmediata con correcciones puntuales.

Monitorizaré, analizaré y mediré todo aquello que me pueda aportar una visión general del estado actual del proyecto (en su definición más amplia), incluyendo todas las dependencias que tuviera; pero con capacidades de bajar hasta la singularidad para observar con detenimiento el funcionamiento de una pieza en particular.

Y por medio de la realización de retrospectivas, completaré el proceso de Kaizen (mejora continua) del proyecto, incluyendo todos los orígenes relacionados con el desarrollo positivo de los trabajos.

Sobre las fases del ciclo DevOps

Continuous Delivery Infographic 1x

He mostrado una visión generalizada e idílica de un ciclo DevOps completo, siguiendo una estructura lógica basada en la experiencia y en la profusa literatura que hay publicada.

La realidad es bastante más compleja tanto en la implantación como en la ejecución; pero sin duda el mayor escollo son los problemas de comunicación entre los equipos con objetivos e intereses diferentes, y la desconfianza de salir de mi zona de confort siguiendo una “moda”.

Sin embargo, los beneficios son muy importantes. Y no solo en el ámbito de la productividad, del Time to Market, o de la flexibilidad de la empresa frente a las demandas del negocio y los clientes; si no también en los factores humanos, de mejora de la calidad de vida, que hay que valorar en su justa y positiva medida.

Análisis de la encuesta Stackoverflow 2018

$
0
0

Stackoverflowsurvey2018

Stack Overflow es, sin duda, la mejor y más potente herramientas de difusión de información de desarrollo en todo el mundo. Junto con Google se ha convertido en un favorito imprescindible para encontrar la solución a, prácticamente, cualquier duda relacionada con código.

Y cada año hacen una mega encuesta entre sus millones de usuarios sobre múltiples aspectos de la industria del desarrollo, en la cual se pueden desprender interesantes y sorprendentes análisis.

El análisis de Stack Overflow

Stackoverflow

Como dice en la portada de los resultados, este 2018 se han ampliado los temas que se preguntan en la encuesta de 30 minutos que han realizado miles y miles de desarrolladores. Y sus conclusiones más importantes son:

  • DevOps y el aprendizaje automático son tendencias importantes en la industria del software actual. Los lenguajes y frameworks asociados con este tipo de trabajos van en aumento, y los desarrolladores que trabajan en estas áreas obtienen los salarios más altos.
  • Solo un pequeño porcentaje de desarrolladores declaran que escribirían código poco ético; o que no tienen la obligación de considerar las implicaciones éticas del código. Pero más allá de eso, los encuestados ven un montón de ética dudosa. Los desarrolladores no están seguros de cómo denuncia los problemas éticos, y tienen diferentes ideas sobre quién es el responsable final de este código.
  • Los desarrolladores son en general optimistas sobre las posibilidades que ofrece la inteligencia artificial, pero no están de acuerdo sobre cuáles son sus peligros.
  • Python ha aumentado en los rangos de lenguajes de programación en nuestra encuesta, superando C # en popularidad este año, al igual que superó a PHP el año pasado.
  • Al evaluar una oferta de trabajo, los diferentes tipos de desarrolladores aplican diferentes conjuntos de prioridades. Las mujeres declaran que sus mayores prioridades son: la cultura de la compañía y las oportunidades para el desarrollo profesional; mientras que los hombres dicen que sus mayores prioridades son la compensación económica y el trabajo con tecnologías específicas.

Poniendo las cosas en contexto

Idea Context

Primero, como en toda opinión o conclusiones de un análisis, dudemos de todo.

Hay cosas que llaman poderosamente la atención, como que el 93.1% de los participantes sean hombres, dejando la presencia de las mujeres en un raquítico 6.7%. Como menos malo podría señalar que las cifras mejoran un poquito (0,5%) en los estudiantes. Pero sin duda hay que empezar a tomarse muy en serio el hacer estudios de las causas de esta inmensa disparidad para tomar, si fuera necesario, las medidas más adecuadas.

Es decir, Stack overflow es un enorme campo de nabos, con casi siete excepciones por cada 100 desarrolladores. Lo que marca un sesgo importante a las conclusiones que se puedan obtener del análisis de los datos.

Luego hay una contradicción bastante llamativa. Los dos países con más profesionales son USA y la India. Si sumamos la norteamericana anglosajona más Europa, no llegamos ni al 50% de los encuestados; de hecho, solo la suma de todos los participantes en Asia supera el 30%. Sin embargo, el 75% de los desarrolladores se declaran blancos o descendientes de europeos, lo cual pudiera ser contradictorio o señalar un sesgo racista en cómo nos vemos a nosotros mismos.

Otra cosa que me ha “escamado”, supongo que será por el perfil de quien contesta a esta encuesta, es que un poco menos de la mitad de los Developers declaran contribuir a proyectos de Código Abierto, lo cual está a años luz de mi contexto en España.

Perfil del desarrollador medio

Developer

Los desarrolladores son jóvenes (de menos de 35 años), que conforman una semblanza de capa media alta; hijos de universitarios, y que a su vez también lo son; tan apasionados de su trabajo que lo consideran también como su hobbie principal; que curran entre 8 y 12 horas; y que no hacen ejercicio físico así les vaya la salud en ello.

Aun siendo universitarios, la autoformación es el modo más normal y generalizado de aprender una vez integrados al mundo laboral. Lo cual sucede de forma inmediata o casi inmediata en cuanto se ponen en el mercado.

Sin duda es un sector con pleno empleo, lo cual atrae a un 40% de intrusismo profesional. Es decir, tener una formación que no tiene nada que ver con programar.

Viendo la experiencia en programación de acuerdo con el tipo de puesto en la empresa, las cifras indican que la mayoría de los encuestados no superan el lustro programando. Pudiéndose inferir que, lo de ir escalando posiciones hacia puestos de gestión o coordinación, es un camino que sigue aplicando en todo el mundo.

Sobre lenguajes y tecnologías

Html5

Imbatible, el front end en general y el javascript en particular, han batido a todos sus competidores (por sexto año consecutivo). Python es quien más crece, desbancando a C# (que parece que está perdiendo fuelle), pero aún lejos de Java – quien lo ha visto y quien lo ve -o de SQL.

Mi sorpresa ha llegado al ver tan retrasado a TypeScript (tenía la sensación de que estaba usándose cada vez más) y más teniendo en cuenta que el 67% de los encuestados lo “amán”.

En la parte de librerías, Node.js sigue siendo el rey, seguido de la lucha entre Angular y React, que está ganando el primero, aunque con el aliento del segundo pegado al cogote. Y otro resultado inesperado llega con la entrada fuerte de .NET Core, ya que tenía la sensación de que se estaba adoptando poco en producción.

Sobre bases de datos cuatro apuntes. La excelente salud de MySQL luego de las dudas que se generaron sobre su futuro, la caída a los abismos de Oracle, el buen hacer de Microsoft con SQL Server que, siendo una BD relacional completa y compleja es la segunda preferida, y el crecimiento imparable de las BD en Cloud.

El gráfico de tecnologías conectadas muestra algo que tenemos que tener muy en cuenta al escoger la plataforma sobre la cual desarrollamos. Solamente la propuesta de Microsoft comprende Front-Back y Cloud bajo un mismo conjunto. Sin duda siguen siendo los listos de la clase que, a la chita callando, se han arrimado a las sombras de todas las tecnologías más utilizadas en la actualidad y las han adoptado en su stack tecnológico.

Como muestra, el surgimiento y reinado de Visual Studio Code, que ha desplazado a Sublime como entorno de desarrollo, de sistemas o DevOps. Vim, todavía aguanta en cabeza en estos dos últimos ámbitos, pero a duras penas. Amazon sigue siendo el rey de la Nube, pero Azure ya le ha comido la mitad del mercado, seguido del siempre presente Google.

Por último, sigue la contradicción entre el sistema operativo de la máquina de desarrollo, en donde se desarrolla y del objetivo de despliegue.

La mitad utilizan Windows, mientras que el 50% restante se lo reparten entre MacOS y Linux (en ese orden). Sin embargo, Linux se pone a la cabeza como plataforma de desarrollo preferida, seguida por un 35% de Windows y un mínimo de 18% sobre Mac OS.

Luego, en producción, statcounter marca que Android es el más utilizado para consumir aplicaciones informáticas, seguido muy de cerca por Windows, dejando a lo lejos a iOS, y Linux que tiene una presencia residual centrada, sobre todo, en servidores.

Tendencias de futuro

Developer Image C

Me ha gustado mucho el enfoque de Stack Overflow para detectar tendencias en el sector, que divide las respuestas en “Amado”, “Temido” y “Deseado”, haciendo una distinción “fuzzy” que muestra inclinaciones y sensaciones personales.

Rust y Kotlin son los lenguajes que más satisfacción dan a sus programadores. Mientras que Python se muestra como el lenguaje con las mejores perspectivas de futuro al ser el tercero en ser más “amado” y el primero en ser “deseado”.

Por el otro lado, el vetusto Visual Basic 6.0, es el más temido/odiado, junto a Cobol y a CoffeScript. Ante los tres me asombra el número de personas que aún desarrollan con ellos, y sin visos de cambiar a corto o medio plazo.

Parece que React puede ganar la competencia frente a Angular en el transcurso del año, ya que le supera tanto en satisfacción como en ganas de ser aprendido.

La Inteligencia Artificial aparece en la lista por medio de TensorFlow, construido en Python (otra vez), que se utiliza para Deep Learning y consigue el mayor nivel de “amor” de sus programadores.

Mercado laboral

Computer Man Code Web Development 650 062317060629

Las cifras nos cuentan que seguimos siendo una industria privilegiada, con pleno empleo y sueldos altos (aunque con grandes variaciones entre los USA y el resto del mundo); contratos indefinidos, pero teniendo la certeza de que no nos jubilaremos en la empresa donde estamos; satisfechos con nuestro trabajo, que es nuestra actividad de ocio principal; y con una alta tasa de emprendimiento, que está llenando el mercado de consultores profesionales liberales.

Y esto no tiene visos de cambiar durante lo que queda de esta década, viendo las enormes dificultades que se tiene en todo el mundo para encontrar y contratar programadores/desarrolladores, tengan talento o no.

Por otro lado, el crecimiento constante del número de lenguajes, librerías, herramientas, frameworks, tecnologías, etc., muestra una pendiente ascendente en el volumen de conocimiento e información necesario para ser un desarrollador productivo; que, además, no está siendo seguido con suficiente rapidez por los sistemas educativos; y que abocan a la autoformación y a la información colaborativa como los medios más validos para mantenerse en la cresta de la ola tecnológica que, cada vez, es más alta y empinada.

¿Tal vez estemos ante una burbuja y algún día explote?

Más información | Stack OverFlow Developer Survey Results 2018

En GenbetaDev | El perfil del desarrollador en España desde la visión de RRHH, De cómo las tripas de Stack Overflow aguantan el éxito, Encuesta Stack Overflow 2016 I, II y III

La compra de GitHub por Microsoft desde la perspectiva de un desarrollador

$
0
0

Buy

Como casi todas las noticias bomba, el rumor de que Microsoft estaba interesada en la adquisición del principal repositorio de código libre del mundo, GitHub, me llego a través de las redes sociales cargado de incertidumbre y desconfianza.

Lo que no ha sido sorprendente ha sido la sobre reacción de la comunidad de desarrolladores, en donde se encendieron las viejas antorchas de la inagotable guerra entre los fanboys (pro) y los talibanes (anti) Microsoft.

Y por ello, quiero aportar al extenso debate y a los cientos de artículos que recorren las redes sociales, el punto de vista de diversos desarrolladores con los que he conversado sobre la polémica compra.

¿Qué es GitHub?

Github 840x473

En abril del 2005 Linus Torvalds, el padre del sistema operativo Linux, diseñó un motor de control de código llamado Git con el propósito de tener un sistema descentralizado que le permitiera trabajar de la forma que las herramientas del momento no le permitían.

Su éxito fue inmediato y rápidamente creció su adopción por la comunidad de desarrolladores hasta convertirse en el gestor de código más utilizado en todo el mundo.

Usando este repositorio como piedra angular, en 2008 Chris Wanstrath, PJ Hyett, y Tom Preston-Werner, fundan GitHub con el propósito último de construir herramientas para la comunidad de desarrollo, sentando las bases de la plataforma que acoge más de 28 millones de usuarios y supera los 85 millones de repositorios.

Aun cuando ofrece un servicio de repositorios privados y empresariales, el éxito de GitHub viene por su adopción como estándar de facto para la publicación de proyectos open source, y un funcionamiento principalmente basado en Pull Request; técnica de construcción colaborativa ampliamente aplicada en el desarrollo de código abierto.

Es tal su éxito, que es casi de obligado cumplimiento el tener un repositorio en GitHub para poder ponerse el título de “desarrollador”; incluso llegando a ser parte fundamental del currículum profesional, como pueden ser también el perfil de Linkedin o la presencia en las redes sociales y eventos de comunidad.

Y, aún más allá del almacenamiento del código fuente, se utiliza para distribuir documentación, blogs, información, páginas web estáticas, etc.

¿Por qué su destino era la Bolsa o la compra?

Stock

Como un buen ejemplo de start-up, GitHub no rinde beneficios en comparación con el volumen de inversión que ha ido recibiendo. Al principio, cuando el dinero provenía de sus tres fundadores, el resultado anual era positivo en relación con la importante tasa de crecimiento que consiguieron.

Pero las alarmas empezaron a saltar cuando el reputado medio Bloomberg publicó un informe en dónde se mostraba que el ritmo de gasto de GitHub, para seguir creciendo y protegerse de sus competidores, había llegado a los 66 millones de dólares en 9 meses.

7.500.000.000 de razones, son muchas para decir que no.

La cosa se tuvo que empezar a poner de color hormiga (no hay acceso a las cifras) cuando en agosto del 2017 Chris Wanstrath, fundador y CEO de la compañía, ponía pies en polvorosa (o le obligaban) y no había forma de encontrar una nueva cabeza que dirigiera los pasos de la empresa.

Todos los analistas veían únicamente tres soluciones, la cual una de ellas (el cierre) hubiera significado un desastre tanto económico para los inversores, como un problema de enormes repercusiones para la comunidad del desarrollo de software.

Otra opción era preparar una salida a Bolsa basada en la confianza de una plataforma robusta, que ha vencido a competidores del calibre de Google Code, Sourceforge y CodePlex, y que tiene millones y millones de clientes que respaldan el servicio. Pero con el inconveniente de ser un poco “pequeña” aún para entrar en el juego de la especulación financiera; habiendo un riesgo cierto de que saliera mal, y perdiera lo poco que le podía quedar de crédito.

La última opción, y que es la que ha resultado ganadora, es conseguir vender la plataforma a una de las grandes del sector como podría ser Google, Microsoft, Oracle, IBM, o similar. Eliminando de un plumazo todos los problemas financieros y obteniendo unos más que suculentos beneficios.

Y les ha salido muy bien. En el momento de la venta, GitHub estaba sobre estimada en unos dos mil millones de dólares, y Microsoft ha puesto encima de la mesa más del triple de dinero: 7.500 millones.

¿Por qué la ha comprado Microsoft?

Gitmicrosoft

CodePlex fue el repositorio de código público creado y sostenido por Microsoft desde el 2006 hasta finales del 2017, en donde cerraron ante el auge imparable y la adopción de GitHub como plataforma principal para publicar el código fuente de los proyectos Open Source de la compañía.

Una compra estratégica para protegerse del competidor

Esta adopción también se mostró en las herramientas de desarrollo, desde las cuales puedo conectar mis proyectos con el motor Team Foundation Version Control, Git o GitHub, indistintamente.

Además, cada vez se publica más y más información, documentos y material de formación en GitHub. Siendo la plataforma elegida por Azure para sus repositorios de plantillas de despliegue de Infraestructura como Código.

Es decir, Microsoft reconoció y se rindió ante la realidad de que la combinación de Git + GitHub era imbatible y había sido la elegida por la comunidad para gestionar el código.

Y ahora, aprovechando las vicisitudes financieras por las que pasaba GitHub, tiene sentido que se propusiera una adquisición preventiva estratégica de una plataforma que se ha vuelto crítica y troncal en el negocio del desarrollo, para evitar que pudiera ser adquirida por competidores de la talla de Google u Oracle, lo cual podría traerle serios inconvenientes funcionales. Recordemos la reciente política anti Microsoft de Google, que tantas molestias ha causado a los usuarios.

Lo positivo de la compra

Smiley One Thumb Up

La primera ventaja de esta adquisición es que se han evaporado los negros nubarrones financieros sobre el futuro de GitHub. No se puede negar que Microsoft tiene más que suficientes recursos como para sostener los costes de operación a largo plazo sin pestañear.

Para los desarrolladores que utilizan el stack de Microsoft, estamos de enhorabuena porque se espera una integración en todo el ciclo de desarrollo mucho más cercano, y el resultado de la integración de GitHub con Visual Studio Team Services puede ser muy interesante.

De hecho, uno de los puntos que más ilusión me hacen de la nota de prensa de Satya Nadella, es cuando habla como se va a potenciar el desarrollo en cada etapa del ciclo de vida, manteniendo la absoluta libertad de elección del lenguaje, herramientas, sistemas operativos y nube que se tiene ahora.

Para la mayoría que no utilizan herramientas de Microsoft más allá de VS Code, los cambios deberían ser menos evidentes, ya que se supone que se va a aplicar un modelo de funcionamiento similar al de Linkedin. Es decir, GitHub seguirá funcionando igual que ahora, con su marca, sus cifras y su modelo de negocio; pero bajo las órdenes de gente tan buena como Nat Friedman y Scott Gurnie.

Malas cosas malas

Sauron

Las causas del rechazo a esta compra parecen ser más bien emocionales. Basadas en la desconfianza a una compañía que durante muchos años ha sido un enemigo declarado del Open Source, y que ha sido condenada por prácticas monopolísticas y por manipulación del mercado.

Aun habiendo pasado más de 20 años, aún muchos recuerdan las palabras de Ballmer demonizando el software libre. Pero más recientemente los grandes fiascos de Windows Phone o Windows RT, con cientos o miles de proyectos tirados a la basura por un cambio de rumbo empresarial, producen reticencia en muchos desarrolladores.

Un Anillo para gobernarlos a todos. Un Anillo para encontrarlos, un Anillo para atraerlos a todos y atarlos en las tinieblas...

También el ejemplo de Oracle, y cómo despiezó Sun, hace temer por el futuro y continuidad de GitHub.

Por otra parte, este movimiento de Microsoft produce una concentración excesiva de poder y control en una sola compañía. Y pone en sus manos los datos y proyectos de millones de programadores en todo el mundo, a los que se pide que confíen en la buena fe de una compañía que aún muchos comparan con Saurón.

Conclusión

Sabiendo quienes van a ser los responsables de dirigir GitHub, y que se va a aplicar la política de funcionamiento que se ha permitido a Linkedin, tengo la sensación de que todo se va a quedar igual.

Como mucho, veremos cómo Visual Studio Team Services va a integrar las capacidades de GitHub, aunque muchas ya las tiene, y cómo los repositorios públicos van a recibir mejoras desde la plataforma DevOps de Microsoft.

Si tuviera alguna duda, es si Atom va a aguantar el bocado que ya le ha dado Visual Studio Code, o va a dejar de ser apoyado por la comunidad y languidecer.

No habrá cambios, ni desbandada. GitHub seguirá siendo el rey

Hay que tener en cuenta que, como todo lo gratis, significa que (las personas) somos el producto. Pero eso ya pasaba con los anteriores dueños de la plataforma, y me alegro de que no sea una empresa pura de datos (como Google o Facebook) quien haya dado la tranquilidad financiera a GitHub.

Mientras, las estadísticas de GitLab sobre migraciones de proyectos desde GitHub muestra un pico muy pequeño de desarrolladores cambiando de plataforma (apenas unos pocos miles de proyectos en comparación con los más de 80 millones que se han quedado), lo cual puede mostrar que la tendencia es que sigamos utilizando GitHub como repositorio público preferido.

Más información | Comunicado de GitHub, Comunicado de Microsoft, GitHub Is Building a Coder’s Paradise. It’s Not Coming Cheap

En WSL | Ya es oficial: Microsoft compra GitHub por 7.500 millones de dólares, Ante la paranoia, Microsoft promete que GitHub se mantendrá independiente y abierto

Viewing all 564 articles
Browse latest View live