En el desarrollo de software, hay una regla que nunca pasa de moda y que puede marcar la diferencia entre un proyecto sostenible y uno lleno de problemas: la regla del Boy Scout.
Esta regla, sencilla pero poderosa, establece que "siempre debes dejar el código mejor de lo que lo encontraste". Ya sea que estés corrigiendo un bug, añadiendo una nueva funcionalidad o simplemente navegando por el código, es una oportunidad para mejorar.
¿Por qué es tan importante? Especialmente en las primeras etapas de un proyecto, cuando las bases aún se están construyendo, la calidad del código es la clave para evitar un crecimiento desordenado y caótico. En este punto, cada mejora tiene un impacto exponencial en el futuro del desarrollo.
🔑 Beneficios de aplicar la regla del Boy Scout:
Reducción de deuda técnica: Cada pequeño cambio mejora la calidad general, evitando que se acumulen problemas difíciles de resolver más adelante.
Facilidad de mantenimiento: Un código más limpio y organizado es más fácil de entender, depurar y ampliar.
Cultura de calidad: Fomenta un equipo que valora y prioriza la excelencia técnica.
🎯 Cómo aplicar la regla del Boy Scout:
Refactoriza pequeños detalles: nombres de variables más claros, simplificación de lógica, eliminación de código redundante.
Documenta mejor: añade comentarios útiles o actualiza la documentación técnica.
Mejora las pruebas: añade o corrige tests para asegurar la estabilidad del código.
Revisa dependencias o configuraciones que puedan optimizarse.
Ejemplo Práctico
Supongamos que estás trabajando en una función que calcula descuentos. Te encuentras con este fragmento de código:
func CalculateDiscount(price float64, discountRate float64) float64 {
return price - (price * discountRate / 100)
}
El código funciona, pero tiene algunas áreas de mejora:
- Falta de claridad en los nombres: price y discountRate son claros, pero podrían ser más descriptivos.
- Ausencia de validaciones: No maneja casos donde discountRate es negativo o mayor a 100.
- Código acoplado a cálculos específicos: Si más adelante se requiere un nuevo tipo de descuento, tendríamos que modificar esta función.
Aplicando la Regla del Boy Scout
Después de realizar mejoras pequeñas pero significativas, el código queda así:
func CalculateDiscount(originalPrice float64, discountPercentage float64) (float64, error) {
// Validar inputs
if originalPrice < 0 {
return 0, fmt.Errorf("original price cannot be negative")
}
if discountPercentage < 0 || discountPercentage > 100 {
return 0, fmt.Errorf("discount percentage must be between 0 and 100")
}
// Calcular el descuento
discount := originalPrice * discountPercentage / 100
finalPrice := originalPrice - discount
return finalPrice, nil
}
Además, añadimos pruebas unitarias para garantizar el correcto funcionamiento:
func TestCalculateDiscount(t *testing.T) {
tests := []struct {
name string
price float64
discount float64
expectedPrice float64
expectError bool
}{
{"Valid discount", 100, 10, 90, false},
{"No discount", 100, 0, 100, false},
{"Full discount", 100, 100, 0, false},
{"Negative price", -50, 10, 0, true},
{"Invalid discount > 100", 100, 110, 0, true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
price, err := CalculateDiscount(tt.price, tt.discount)
if (err != nil) != tt.expectError {
t.Errorf("expected error: %v, got: %v", tt.expectError, err)
}
if price != tt.expectedPrice {
t.Errorf("expected price: %.2f, got: %.2f", tt.expectedPrice, price)
}
})
}
}
¿Por qué se realizó este cambio?
Claridad y legibilidad: Los nuevos nombres (originalPrice, discountPercentage) son más descriptivos, lo que facilita entender la función.
Manejo de errores: Ahora validamos que los inputs sean válidos, evitando errores silenciosos que podrían causar problemas en producción.
Extensibilidad: Separar el cálculo del descuento y el precio final hace que esta función sea más fácil de adaptar si necesitamos manejar nuevos tipos de descuentos en el futuro.
Confiabilidad: Añadimos pruebas unitarias para cubrir los casos de uso normales y extremos, garantizando que la función se comporte correctamente.
En resumen, no importa si estás desarrollando el próximo unicornio tecnológico o un pequeño proyecto interno, cada línea que toques es una oportunidad para dejar un impacto positivo. Al final del día, un código mejor significa un producto más sólido, un equipo más eficiente y un cliente más satisfecho.
¿Qué opinan? ¿Han aplicado esta regla en sus proyectos? 🚀
Top comments (0)