Skip to content

NachoBrito/aprende-go-mediante-tests

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Aprende Go mediante Tests

Disñeo de Denise

Go Report Card

Formatos

Traducciones

Support me

Estoy orgulloso de ofrecer este recurso gratis, pereo si quieres agradecerlo de alguna forma:

Por qué

  • 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

Índice

Fundamentos

  1. Instalar Go - Configura un entorno que garantice tu productividad
  2. Hola, mundo - Declarar variables, constantes, sentencias if/else, switch, escribe tu primer programa y tu primer test. Sub-tests y closures.
  3. Enteros - Explora en profundidad la sintaxis para declaración de funciones y aprende nuevas formas de mejorar la documentación de tu código.
  4. Iteración - Descubre la sentencia for y la cómo medir el rendimiento.
  5. Arrays y slices - Aprende sobre arrays, slices, len, varargs, range and cobertura de tests.
  6. Structs, métodos e interfaces - Aprende sobre struct, métodos, interface y tests a partir de tablas.
  7. Punteros y errores - Aprende sobre punteros y errores.
  8. Maps - Aprende a almacenar valores en un Mapa.
  9. 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.
  10. Mocking - Partiendo de un código sin tests, usa DI y mocks para probarlo.
  11. Concurrencia - Aprende a escribir código concurrente para hacer más rápido tu software.
  12. Select - Aprende a sincronizar de forma elegante procesos asíncronos.
  13. Reflection - Aprende sobre la reflexión.
  14. Sync - Aprende sobre algunas funcionalidades del paquete sync, inclyendo WaitGroup y Mutex.
  15. Context - Usa el paquete context para manejar y cancelar procesos que tarden mucho tiempo en ejecutarse.
  16. 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.
  17. Matemáticas - Usa el paquete math para dibujar un reloj SVG
  18. Leer ficheros - Leer y procesar ficheros
  19. Plantillas - Usa el paquete html/template para renderizar html a partir de datos, y descubre los tests de aceptación.
  20. Generics - Aprende a escribir funciones que aceptan argumentos genéricos y crea tus propias estructuras de datos genéricas.
  21. 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.

Escribe una aplicación

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.

Preguntas y respuestas

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.

Meta / Discusión

  • 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.

Contribuciones

  • 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.

Mi experiencia

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".

Lo que no funcionó

Leer el libro

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.

Resolver algunos problemas

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.

Lo que sí funcionó

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.

Lo que funciona para mí

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.

Para quién es este libro

  • Gente interesada en comenzar con Go
  • Gente que ya conoce Go, pero quiere explorar las herramientas para hacer TDD

Qué necesitarás

  • ¡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.

Feedback

Licencia MIT

Logo por egonelbre ¡Vaya estrella!

About

Learn Go with test-driven development, traducción a español

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages

  • Go 98.8%
  • Other 1.2%