lunes, 18 de julio de 2016

¿Por qué empezar con Go? (Golang)


En este articulo vamos a empezar a ver el panorama actual de los lenguajes y los principales porqués a la hora de elegir uno en específico. 

¿Por qué un nuevo lenguaje?

Cuando leí acerca de Go por primera vez, me tope con la noticia que era un lenguaje compilado y de tipos estáticos - es decir cuyo tipo de datos no cambian en tiempo de ejecución -. Me surgieron muchas preguntas. ¿Por que si los lenguajes interpretados son la moda? (JavaScript, Python, Ruby, ..) leyendo más llegué a a punto en la historia en el que los lenguajes compilados habían dejado de ser viables para un desarrollo grande en el que no ibas que manejar a bajo nivel el procesador. Debido a varias razones :

  • Complejidad: Los lenguajes compilados como C y C++ son lenguajes complicados de aprender, son muy potentes, y sobre ellos descansan gran parte de la infraestructura computacional del mundo, pero si quieres hacer una app móvil o una pagina web administrable, no las puedes hacer con estos lenguajes, es matar moscas a cañonazos. 
  • Despliegue: Los lenguajes compilados son lentos para compilar, un despliegue con Python o Java es incomparable a compilar un programa en C de similar envergadura. 
  • Portabilidad: Es mucho mejor trabajar un lenguaje interpretado -como Python o Java- que se ejecuta tal cual donde su intérprete o máquina virtual este disponible, sin pensar programar para un determinada arquitectura al momento de programar.

¿Que es Go?

Vamos a ver que nos dice la definición oficial: 
El lenguaje de programación Go es un proyecto de código abierto para que los programadores sean más productivo. Go es expresivo, conciso, limpio y eficiente. Sus mecanismos de concurrencia hacen que sea fácil de escribir programas que obtienen el máximo rendimiento de múltiples núcleos y máquinas en red, mientras que su novedoso sistema de tipos permite hacer un programa flexible y modular. Go compila rápidamente a código de máquina sin embargo, posee un recolector de basura y el poder de reflexión en tiempo de ejecución. Es un lenguaje rápido, con tipos estáticos, un lenguaje compilado que se siente como un lenguaje de tipos dinámicos e interpretado. (Tomado de la documentación oficial https://golang.org/doc/)
Como vemos Go esta directamente enfocado a satisfacer las necesidades arriba expuestas. Los lenguajes interpretados tomaron mucho vuelo debido a que los lenguajes compilados tenian muchos complejidades que un programadores a alto nivel no usa.  

Características del lenguaje

Dentro de los lenguajes declarativos modernos si hay uno muy peculiar es Go, a medida que se lee de el nos enteramos que tiene "su forma" de hacer las cosas. Por eso es que se recomienda a los principiantes es empezar de cero sin suponer que sabemos algo.  Aca algunas caracteristicas del lenguaje:

Goroutines

Concurrencia
Las goroutines son una estructura que nos permite ejecutar una función en segundo plano, son una implementación de hilos ligeros para Go. Ya venían de la propia definición y son una de las cosas más interesantes de Go, Francesc Campoy  (*) en una charla aclaró con los hilos (treads) en multitud de
lenguajes pesan alrededor de 100 kb y son manipulados por el propio sistema operativo, mientras que las goroutines -una alternativa de Go a los hilos- pesaban alrededor de 4kb y son muy seguras porque estaban provistas de un modelo CSP  considerado como el más seguro por su comucación por canales.


Compilación cruzada

Go tiene una velocidad de compilación muy superior a cualquier otro lenguaje compilado a la fecha, pero no contentos con ello le incorporaron la capacidad de crear ejecutables desde cualquier plataforma soportada, por ejemplo en windows puedo crear ejecutable para linux tanto 64 como 32 bits, una cosa impensable hasta ahora.
Existen más características que reservaré para la próxima entrada. Nos vemos. 
Notas: 
(*) El video se titula  Go para Pythonistas.



domingo, 17 de julio de 2016

Para empezar . .

Acabo de dar el paso. Desde hace bastante rato llevo con la idea de escribir un blog sobre algo interesante y que pueda aportar algo a la comunidad web. Espero tener el suficiente tiempo y disciplina para conseguir un buen número de artículos y cubrir algo bastante considerable. Vamos allá.



En este blog voy a ir basando mis primeras experiencias en Go. No soy un experto en ese lenguaje ni mucho menos, sin embargo creo estar en la capacidad de compartir mis experiencias hasta el momento. Mi principal motivación es la poca documentación que existe para los hispanoparlantes que nos impide conocerlo a profundidad. Voy a intentar cambiar eso desde esta humilde morada.

Vengo de un mundo de Java , JavaScript y Ruby en menor medida y con Go hay que sencillamente cambiar la manera de pensar (declaracion de variables, concurrencia, funciones lambda,  ...). Tiene sus diferencias considerable que vamos a comprender a lo largo de este blog.

Nos vemos en la prox. entrada.