Para citar a Donald Knuth: “Los programadores pierden enormes cantidades de tiempo pensando o preocupándose por la velocidad de las partes no críticas de sus programas, y estos intentos de eficiencia en realidad tienen un fuerte impacto negativo cuando se consideran la depuración y el mantenimiento. Deberíamos olvidarnos de eficiencias pequeñas, digamos alrededor del 97% del tiempo: la optimización prematura es la raíz de todo mal. Sin embargo, no debemos dejar pasar nuestras oportunidades en ese crítico 3% “.
Google tiene un riguroso proceso de revisión de código, tiene estrictas guías de estilo y hace mucho énfasis en la legibilidad. También pone mucho énfasis en la eficiencia y la velocidad, porque incluso las optimizaciones modestas pueden valer millones cuando se implementan a escala. Y la mayoría de las veces se puede escribir una solución altamente optimizada en código legible, por lo que este tipo de compensación no es necesaria.
En casos extremos, cuando una solución optimizada no se puede escribir en un código legible, esperaría que se extraiga en una función o módulo separado, y tenga una buena explicación en los comentarios sobre cómo funciona. Durante mi tiempo en Google, he visto fragmentos de código ilegibles en las bibliotecas más críticas para el rendimiento, pero estas son excepciones y no la regla.
- ¿Qué es el recorrido NAT y por qué debería usarlo?
- ¿Cuáles son las aplicaciones prácticas / de la vida real / industriales de Dijkstra, Kruskal y Algortithm de Prim?
- En una pregunta de algoritmos tradicionales, ¿desea que el candidato escriba pseudocódigo antes de codificar?
- ¿Cuáles son los algoritmos actuales de aprendizaje profundo para la restauración de imágenes?
- ¿En cuánto tiempo puedo ser un profesional en la resolución de problemas en algoritmos y estructuras de datos si empiezo hoy sin ningún conocimiento previo?
Con respecto a su ejemplo, no estoy seguro de por qué la recursividad superaría a la iteración en la legibilidad: la recursividad es un concepto más complejo y generalmente requiere más esfuerzo para comprender su flujo de control.