Llegamos a ustedes gracias a:



Reportajes y análisis

¿Debería optar por Go de Google? 7 pros y contras

[17/01/2017] 2016 estuvo lleno de sorpresas, pero en el mundo de la programación, entre las mayores fue el avance de Go. La alguna vez pequeña herramienta de nicho, Go se ha unido oficialmente a las filas de los lenguajes de programación reales, lo que se evidencia por su meteórico ascenso hasta el índice Tiobe, una compleja amalgama de clasificaciones de búsqueda y preferencias del programador. Todavía una manera detrás de los incondicionales como Java, C, y Python, hasta 49 puntos un año antes. Ese es un gran cambio que atrajo la atención de programadores y gerentes de proyectos por igual.

El salto de Go probablemente se debe en gran parte a Docker, un sistema de administración de paquetes para desplegar código que está tomando stacks por todas partes. El hecho de que una de las tecnologías de desarrollo más populares en años esté escrita en Go, es un signo positivo para la viabilidad del lenguaje. Una mejor puede ser el hecho de que Docker es bastante sólido y muy exitoso. Eso está destinado a ganar a los conversos demostrando que el lenguaje puede soportar una infraestructura real.

La subida de Go coincide con un rápido colapso del interés en C. Sí, C permanece en segundo lugar en la lista de Tiobe, pero ha perdido alrededor del 40% de la inversión programática calculada por la métrica compleja de Tiobe. Construido para ser un lenguaje simplificado para escribir código de bajo nivel, Go comparte muchas funciones con C, incluyendo gran parte de la sintaxis. Es difícil no concluir que una buena parte del apoyo recién descubierto de Go se compone probablemente de ex programadores de C que emigran a una nueva casa.

La lista Tiobe no se trata de líneas de código o anuncios de empleo; en cambio, intenta capturar el pulso del mundo de la programación contando búsquedas en la web y otras métricas conductuales. Está claro -por el gran salto de Go- que la gente está empezando a hablar de Go para proyectos del mundo real, no solo franjas únicas de emprendimientos. Puede que no los estén construyendo todavía, pero están considerando el lenguaje. Aquí vamos a echar un vistazo a los pros y los contras de Go, un idioma que finalmente puede mencionar a su jefe y al jefe de su jefe sin preocuparse por parecer excéntrico.

Pro de Go: Simplicidad

La razón más simple para aprender Go es que Go es simple, relativamente hablando. Sus diseñadores limitaron deliberadamente el alcance del lenguaje y construyeron algo que un programador experimentado puede aprender en una noche. Los libros para algunos nuevos idiomas, como el Swift de Apple, pueden tener varios cientos de páginas de grosor, pero los de Go son mucho, mucho más delgados.

La simplicidad tiene efectos secundarios. Es más fácil leer el código escrito por otros programadores de Go, porque es casi imposible que utilicen una función que haya olvidado o nunca haya aprendido. Los equipos pueden trabajar sin problemas en Go porque nadie puede sacar una característica extraña y lanzar a todos una curva.

Contra de Go: Simplicidad

Claro, es genial aprender un idioma en una noche. Pero Go logró su cacareada simplicidad al dejar de lado docenas de inteligentes y modernas abstracciones que los programadores ya están utilizando con éxito. Faltan la mayoría de las ideas que impulsan la emoción detrás de lenguajes como Haskell o Swift. Si bien es más fácil no tener que aprender todas esas características, también significa que no se puede confiar en muchas de las facultades de lucha contra los errores que vienen con un lenguaje más complejo. Para los amantes de la complejidad y la abstracción, Go es un paso atrás hacia un momento en que los lenguajes de la computadora eran medallas finas en la parte superior del ensamblador, un momento en que la idea más grande era agregar la cláusula 'en caso de'.

Todo el mundo tiene su característica favorita que no hizo el corte de Go. Algunos quieren genéricos; algunos quieren excepciones; algunos quieren más extensibilidad; algunos quieren algo completamente diferente. Para estas personas, la programación en Go es como la codificación con un brazo atado a la espalda.

Pro de Go: La automatización ahorra tiempo

Go tiene una serie de invenciones modernas, como la declaración automática de variables. Parece una cosa pequeña, pero nadie quiere escribir letras como int para siempre. Y la recolección de basura es una gran victoria para todos los que odian seguir la pista de malloc and free.

Contra de Go: La automatización puede ser peligrosa

Todo el que ha utilizado las características de automatización en los lenguajes de programación sabe que vienen con desventajas. La recolección de basura se puede activar en el momento incorrecto, poniendo en peligro el código del servidor que se supone que debe responder inmediatamente. La declaración automática puede obtener detalles erróneos cuando se utiliza el mismo nombre de variable en ámbitos anidados. Hay una razón por la cual la gente desarrolló enfoques de correas y tirantes para la gestión de datos, y no todas las nuevas características de automatización son un paso adelante.

Pro de Go: No hay máquina virtual

Durante las últimas décadas, los lenguajes basados en máquinas virtuales o MVs estaban en auge. El llamado código binario podía moverse fácilmente entre diferentes arquitecturas de chips, y la máquina virtual podía hacer cumplir algunas reglas de seguridad mientras hacía un poco de optimización en tiempo de ejecución. Hoy en día muchas ideas inteligentes se hornean en las mejores MVs en estos días.

Por desgracia, el arranque de una máquina virtual toma un poco de tiempo, y los usuarios de Go no tiene que preocuparse por eso. Los binarios de Go se compilan en un archivo agradable que está listo para irse. Escriba el nombre del ejecutable en la línea de comandos y se ejecutará cuando pulse Return.

Esto no ayuda solo al servidor; también hace que sea mucho más rápido para probar el código durante el desarrollo. El ciclo de depuración en Go es un poco más rápido.

Los binarios integrados de Go también reducen la complejidad del despliegue. ¿Su código Java fue compilado para la versión 1.7? Buena suerte tratando de ejecutarlo en una máquina con una JVM construida para Java 1.4. Muchos servidores terminan malabareando varias JVMs diferentes para los distintos archivos JAR que supuestamente "funcionan en cualquier lugar".

Contra de Go: Ninguna máquina virtual

Claro, Go tiene binarios independientes, pero son enormes. Si escribe un ejemplo de "hola mundo", estará cerca de 2MB. El binario es tan grande en parte porque necesita rodar gran parte del poder de la máquina virtual. El código para manejar la recolección de basura necesita estar en alguna parte. Claro, no hay MV, porque está integrada en el binario.

El año pasado, los creadores de Go implementaron una característica inteligente en la versión 1.7 para empequeñecer un poco los binarios retirando métodos no exigidos. Este es un cambio bien recibido, pero todavía obstruyen la RAM cuando un servidor dispara cientos de versiones de su código.

Pro de Go: Go es como C

Todo el mundo que migra desde C ve a Go como una actualización. Tiene todo el bajo nivel y cercanía a la sensación de metal de C sin ninguna de las molestias que han hecho de C un verdadero dolor de cabeza. La recolección de basura es un gran paso adelante que ahorra mucho tiempo para los programadores y es la estructura de archivos más sencilla. Todo lo demás es prácticamente lo mismo. C fue un gran éxito. ¿Por qué romper el molde?

Contra de Go: Go es como C

Lo mismo ocurre con todo lo demás. Java, Rust y Swift son como C, sin mencionar C#, C ++ y Objective-C. También tienen ideas más interesantes bajo el capó. Hay más en un lenguaje de programación que usar corchetes para definir los bloques básicos de código, pero si eso es lo que quiere, muchas otras soluciones son más ricas en funciones.

Pro de Go: Sintaxis de devolución de llamada

Muchos programadores que experimentan con Go migran de Node.js, la otra pila rápida del servidor. Cuando llegan, a menudo están encantados de escapar de la confusión anidada de las rutinas de devolución de llamada que llevan a otras rutinas que llaman a otras rutinas ad nauseum. (O realmente ad buggium).

La estructura de devolución de llamada tiene sentido para JavaScript en páginas web, y ayuda a ofrecer velocidad al desarrollo del servidor con Node. Sin embargo, es difícil mantenerse recto, especialmente cuando hay tres o cuatro niveles de anidamiento.

Contra de Go: Sintaxis de devolución de llamada

No es necesario anidar las rutinas del método, pero todavía tiene que pensar en codificar la interacción de la misma manera. Go tiene canales, pero gran parte del enfoque subyacente es el mismo. Simplemente está cambiando la forma en que se expresa. El anidamiento de algo como Node.js puede ser un poco molesto, pero si no puede manejar eso, probablemente no debería estar tratando de conocer la arquitectura en primer lugar.

Pro de Go: Bibliotecas

Google ya ha contribuido con algunas de las bibliotecas más importantes que pueda necesitar para crear aplicaciones de servidor. Son frescas y lista para usar. Esto debería hacer que incluso las tiendas de desarrollo más conservadoras vean una pequeña promesa extra en Go.

Contra de Go: Las bibliotecas son escasas

Sí, Go tiene algunas bibliotecas, pero la mayoría de los otros lenguajes de programación tienen años luz por delante. Java es el rey del código instalado, con un código abierto de bazillion JARs en busca de amor en Internet. Esto no es solo Java. Cualquier lenguaje que compila para ejecutar en la JVM también puede vincularse a JARs. Clojure, Scala, JRuby, Kotlin, y docenas de otros nuevos idiomas serios, están diseñados para ser compilados a código byte para la JVM, para que puedan trabajar también con todas las bibliotecas de Java.

Es bueno trabajar con algo nuevo, pero cuando algo viejo está tan establecido y poderoso, es difícil no elegir lo probado y verdadero.

Contra de Go: Falsa promesa más allá de su nicho

El auge de Go ha sido impresionante, pero podría no aumentar mucho más. Muchos engreídos de las corporaciones, como Objective-C, nunca salen de su campus corporativo. Otras empresas no quieren confiar en sus proyectos futuros a un idioma que es esencialmente propiedad de otro. Google podría cambiar fácilmente su mente o pasar a otra versión mejor, tal vez Go++, que no es compatible.

Mientras que Go hizo un gran salto, no significa que vaya a hacer otro. Java sigue siendo el lenguaje de la ciencia informática AP. C sigue siendo el lenguaje de Unix. Python es aún más fácil de analizar para los científicos sociales. PHP no sólo no está muriendo, sino que está mejorando ahora que alguien descubrió cómo mover los compiladores Just-In-Time. Heck hacia él, incluso Cobol sigue rodando a lo largo de su pequeño nicho. Ninguno de estos va a ir a ninguna parte, lo que significa que Go probablemente no será capaz de colonizar sus dominios. Hasta que Go pueda encontrar un terreno nuevo, probablemente se mantendrá prácticamente igual.

Pro de Go: Su futuro brillante

Las características y la sintaxis están bien, pero para muchas organizaciones, todo se reduce a si el idioma tiene piernas. No hay ningún caso en comprometer los recursos solo para descubrir que su proyecto está condenado a la basura en algunos años.

Si bien nadie puede predecir el futuro, Go tiene muchas razones para creer que seguirá prosperando, y la mayor de ellas puede ser el apoyo de Google. Es una empresa dominante con un gran futuro, y en oposición a Google Reader, parece estar comprometido a seguir. Google está construyendo vehículos autónomos y otras cosas - el futuro mismo, algunos podrían pensar. Por supuesto el código Go será grande y será apoyado, y las habilidades Go permanecerán en la demanda.

¿Su vaso de Go está medio lleno o medio vacío? ¿Su nicho es cómodo o fácil de olvidar? ¿Es el lenguaje una actualización irresistible o un corte? Solo usted puede decidir.