Para la programación de Python y ser Pythonic, ¿por qué "nunca es mejor que * ahora * ahora"? [cerrado]

8

En el Zen de Python, puedo entender la mayoría de las partes, excepto:

Now is better than never.  
Although never is often better than *right* now

Así que creo que hacerlo ahora u obtener resultados ahora es mejor que nunca. Pero, ¿por qué "nunca es mejor que * ahora * ahora"? O que significa?

Para ver las 2 líneas anteriores en contexto, este es todo el Zen de Python:

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
nonopolaridad
fuente
2
Duplicado

Respuestas:

12

La primera parte, "ahora es mejor que nunca", es un mantra contra la procrastinación. Expresa la idea de que, si no sigues adelante, nunca lo lograrás.

La segunda parte, "nunca es mejor que ahora , es una expresión del principio de YAGNI . La idea es que" siempre implemente las cosas cuando realmente las necesite, nunca cuando prevea que las necesita ", porque a menudo descubra que no los necesita después de todo, y luego descubra que acaba de malgastar el esfuerzo.

... bueno, ese es mi entendimiento. Pero tendrías que pedirle al autor que esté seguro.

Kramii
fuente
2
Hay una cita de Chuck Moore que creo que expresa muy bien este sentimiento: “No pongas código en tu programa que pueda usarse. No deje ganchos en los que pueda colgar extensiones. Las cosas que quizás quieras hacer son infinitas; eso significa que cada uno tiene 0 probabilidad de realización. Si necesita una extensión más tarde, puede codificarla más tarde, y probablemente haga un mejor trabajo que si lo hiciera ahora. Y si alguien más agrega la extensión, ¿notará los ganchos que dejó? ¿Documentará este aspecto de su programa?
Jon Purdy
2

Podría tratarse de una evaluación perezosa.

Ejemplos:

xrange(1000000)

vs

range(1000000) 

Donde el primero no hace mucho hasta que se necesitan los valores, pero el último asigna una gran matriz.

O iniciar sesión

log("Stuff happened for %s ",  something)

vs

log("Stuff happened for %s " % something)

Donde el primero no crea la cadena a menos que el registro esté realmente habilitado.

Esben Skov Pedersen
fuente
1

Creo que esto se aplica al proceso de diseño del lenguaje en sí, no solo a las aplicaciones. "Ahora es mejor que nunca." y "A pesar de que no es a menudo mejor que la derecha ahora." se trata de encontrar el equilibrio adecuado para el tiempo y la calidad de la implementación. Es lo mismo con el resto del Zen. Y, por supuesto, el Zen no tiene un solo significado, por diseño.

Roman Susi
fuente
1
Sí, lo vi y descubrí que es como un Yin y Yang: ¿Yin es mejor que Yang y Yang es mejor que Yin? Podría ser el equilibrio correcto.
nonopolaridad
1

Ahora es mejor que nunca.
Aunque no es a menudo mejor que la derecha ahora

Creo que la primera línea se refiere a una mezcla de perfeccionismo y procrastinación. Es mejor proporcionar algo que funcione ahora, incluso si la funcionalidad es básica o el código "aún no es perfecto", que trabajar en él para siempre hasta que se acabe el vapor y el código termine muerto.

En cuanto a la segunda línea, creo que apunta a implementaciones apresuradas. Por lo general, las cosas que codifica tienen un impacto muy duradero una vez publicado. A veces, uno puede verse tentado a enviar rápidamente algo, especialmente por presión, lo que se convertirá en una carga para los años posteriores. Se llama "deuda técnica": malas decisiones de diseño, malas interfaces o simplemente construcciones deficientes conducen a muchos problemas en el futuro. El código rara vez está solo, muchos otros códigos se basan rápidamente en él, y si tomas malas decisiones, estás atrapado en él. Por lo tanto, no apresure los lanzamientos, asegúrese de que estén bien.

dagnelies
fuente