Estoy orgulloso de ofrecer este recurso gratis, pereo si quieres agradecerlo de alguna forma:
- Explora el lenguaje Go escribiendo tests.
- Familiarízate con el TDD. Go es un buen lenguaje para aprender TDD porque es sencillo e incorpora de serie las herraminentas necesarias para hacer testing.
- Confía en que podrás empezar a desarrollar sistemas robustos y bien probados con Go
- Instalar Go - Configura un entorno que garantice tu productividad
- Hola, mundo - Declarar variables, constantes, sentencias if/else, switch, escribe tu primer programa y tu primer test. Sub-tests y closures.
- Enteros - Explora en profundidad la sintaxis para declaración de funciones y aprende nuevas formas de mejorar la documentación de tu código.
- Iteración - Descubre la sentencia
for
y la cómo medir el rendimiento. - Arrays y slices - Aprende sobre arrays, slices,
len
, varargs,range
and cobertura de tests. - Structs, métodos e interfaces - Aprende sobre
struct
, métodos,interface
y tests a partir de tablas. - Punteros y errores - Aprende sobre punteros y errores.
- Maps - Aprende a almacenar valores en un Mapa.
- Inyección de Dependencias (DI) - Aprende sobre inyección de dependencias, cómo se relaciona con el uso de interfaces y sigue una introducción a E/S.
- Mocking - Partiendo de un código sin tests, usa DI y mocks para probarlo.
- Concurrencia - Aprende a escribir código concurrente para hacer más rápido tu software.
- Select - Aprende a sincronizar de forma elegante procesos asíncronos.
- Reflection - Aprende sobre la reflexión.
- Sync - Aprende sobre algunas funcionalidades del paquete sync, inclyendo
WaitGroup
yMutex
. - Context - Usa el paquete context para manejar y cancelar procesos que tarden mucho tiempo en ejecutarse.
- Introducción a los tests basados en propiedades - Practica TDD con la kata de Números Romanos y haz una pequeña introducción a los tests basados en propiedades.
- Matemáticas - Usa el paquete
math
para dibujar un reloj SVG - Leer ficheros - Leer y procesar ficheros
- Plantillas - Usa el paquete html/template para renderizar html a partir de datos, y descubre los tests de aceptación.
- Generics - Aprende a escribir funciones que aceptan argumentos genéricos y crea tus propias estructuras de datos genéricas.
- Revisitando arrays y slices con genéricos - Los tipos genéricos son muy útiles para trabajar con colecciones. Aprende a escribir tu propio
Recuce
y ordena algunos patrones comunes.
Ahora que ya has digerido la sección Fundamentos de Go tendrás (espero) una base sólida sobre la mayoría de las características de Go y cómo hacer TDD.
En la siguiente sección construiremos una aplicación.
Cada capítulo será una iteración del anterior, expandiendo la funcionalidad de la aplicación según los dictados de nuestro product owner.
Introduciremos nuevos conceptos para ayudar a escribir buen código, pero la mayor parte del material nuevo será sobre lo que se puede hacer usando la librería estándar de Go.
Al final de la sección deberías tener una comprensión sólida sobre cómo escribir una aplicación de forma iterativa en Go, respaldada por tests.
- Servidor HTTP - Crearemos una aplicación que escucha y responde peticiones HTTP.
- JSON, rutas e incrustaciones ("Embedding") - Haremos que nuestros endpoints devuelvan JSON y exploraremos cómo manejar las rutas.
- E/S y ordenación - Almacenaremos y leeremos datos de disco y veremos cómo ordenar la información.
- Línea de comandos y estructura del proyecto - Soportaremos múltiples aplicaciones con una base de código y leeremos entradas desde línea de comandos.
- Time - usaremos el paquete
time
para programar tareas. - WebSockets - aprenderemos a escribir y probar un servidor que use WebSockets.
A menudo me encuentro con preguntas en Internet, como
Cómo pruebo mi maravillosa función que hace x, y y z
Si tienes dudas, publica un issue en github y yo intentaré encontrar tiempo para escribir un capítulo sobre ello. Me parece valioso generar contenido que trate sobre dudas reales con el testing.
- OS exec - Un ejemplo de cómo enviar comandos al sistema y mantener nuestro código testable.
- Tipos de error - Ejemplo de cómo crear nuestros propios tipos de errores para mejorar los tests y hacer más sencillo trabajar con nuestro código.
- Reader con Context - Aprende TDD aumentando
io.Reader
con cancelación. Basado en Context-aware io.Reader for Go - Revisitando HTTP Handlers - Hacer tests para los handlers HTTP parece ser la ruina de muchos programadores. Este capítulo explora los retos de diseñar handlers correctamente.
- Why - Aquí tienes un vídeo y más información sobre la importancia de hacer testing y TDD.
- Anti-patrones - Un capítulo corto sobre TDD y anti-patrones en pruebas unitarias.
- Este proyecto está en progreso. Si te gustaría contribuir, por favor ponte en contacto conmigo
- Lee contributing.md para conocer las pautas.
- ¿Alguna idea? Crea un issue.
Tengo experiencia en enseñar Go a equipos de desarrollo, y he probado diferentes enfoques sobre cómo llevar un equipo desde "algunos miembros tienen curiosidad sobre Go" hasta "programadores de sistemas Go altamente efectivos".
Un enfoque que intenté fue coger the blue book y discutir un capítulo cada semana haciendo los ejercicios.
Me encanta este libro, pero require un nivel de compromiso muy alto. El libro explica los conceptos con mucho detalle, lo cual es obviamente genial, pero eso implica que el avance es lento y constante - esto no es para todo el mundo.
Descubrí que aunque un pequeño número de personas leían el capítulo de la semana y hacían los ejercicios, muchos no lo hacían.
Las Katas son divertidas, pero normalmente muy limitadas como para aprender un lenguaje. Probablemente no usarás goroutines para resolver una kata.
Otro problema es cuando tienes diferentes niveles de entusiasmo. Algunas personas aprenden mucho más que otras del lenguaje, y cuando intentan aplicar lo que han aprendido terminan confundiendo a los demás con características con las que aún no se han familiarizado.
Esto termina creando la sensación de que el aprendizaje es destructurado y ad hoc.
De lejos la forma más efectiva fue introducir los fundamentos lentamente leyendo go by example, explorándolos con ejemplos y discutiéndolos en grupo. Ésta técnica resultaba más interactiva que "leed el capítulo X para casa".
Con el tiempo el quipo consigue unos fundamentos sólidos de la gramática del lenguaje, y podemos comenzar a construir sistemas.
Para mí, es análogo a practicar escalas cuando estás aprendiendo a tocar la guitarra.
No importa cuánto talento tengas, es poco probable que escribas buena música sin comprender los fundamentos y practicar mecánicamente.
Cuando yo aprendo un nuevo lenguaje de programación normalmente empiezo trasteando con un REPL ("Read-Eval-Print-Loop, Bucle-Leer-Evaluar-Imprimir), pero a la larga necesito más estructura.
Lo que me gusta hacer es explorar los conceptos y después solidificar las ideas con tests. Los tests verifican que el código que escribo es correcto y documenta la característica que he aprendido.
A partir de mi experiencia aprendiendo en grupo, y mi método personal, voy a intentar crear algo que espero que sea útil para otros equipos. Aprender los fundamentos escribiendo pequeños tests para que puedas usar tus habilidades en diseño de software para escribir grandes sistemas.
- Gente interesada en comenzar con Go
- Gente que ya conoce Go, pero quiere explorar las herramientas para hacer TDD
- ¡Una computadora!
- Instalar Go
- Un editor de texto
- Alguna experiencia en programación. Comprender conceptos como
if
, variables, funciones, etc. - Comodidad en el uso de la terminal.
- Añade issues/envía PRs aquí o tuitéame @quii
- Sobre esta traducción: Añade issues/envía PRs aquí o tuitéame @nacho_brito
Logo por egonelbre ¡Vaya estrella!