Para a programação Python e ser Pythonic, por que "nunca é melhor do que * agora *"? [fechadas]

8

No Zen do Python, eu posso entender a maioria das partes, exceto:

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

Então, acho que fazê-lo agora ou obter resultados agora é melhor do que nunca. Mas por que "nunca é melhor do que * agora" agora? Ou o que isso significa?

Para ver as 2 linhas acima no contexto, este é o Zen inteiro do 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!
falta de polaridade
fonte
2
Dupe Cross-rede: stackoverflow.com/q/20531943/3001761
jonrsharpe

Respostas:

12

A primeira parte, "agora é melhor do que nunca", é um mantra contra a procrastinação. Expressa a ideia de que, se você não continuar com isso, nunca conseguirá contornar isso.

A segunda parte, "nunca é melhor do que agora , é uma expressão do princípio YAGNI . A idéia é que você deve" sempre implementar as coisas quando você realmente precisa delas, nunca quando você apenas prevê que precisa delas ", porque muitas vezes descubra que não precisa deles, afinal, e descubra que acaba de desperdiçar esforços.

... bem, esse é o meu entendimento. Mas você teria que pedir ao autor para ter certeza.

Kramii
fonte
2
Há uma citação de Chuck Moore que, em minha opinião, expressa bem esse sentimento: “Não coloque código no seu programa que possa ser usado. Não deixe ganchos nos quais você pode pendurar extensões. As coisas que você pode querer fazer são infinitas; isso significa que cada um tem 0 de probabilidade de realização. Se você precisar de uma extensão mais tarde, poderá codificá-la mais tarde - e provavelmente fará um trabalho melhor do que se tivesse feito agora. E se alguém adicionar a extensão, ele notará os ganchos que você deixou? Você documentará esse aspecto do seu programa? ”
21416 Jon Purdy
2

Pode ser uma avaliação preguiçosa.

Exemplos:

xrange(1000000)

vs

range(1000000) 

Onde o primeiro não faz muito até que os valores sejam necessários, mas o último aloca uma grande matriz.

Ou log

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

vs

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

Onde o primeiro não cria a sequência, a menos que o log esteja realmente ativado.

Esben Skov Pedersen
fonte
1

Eu acho que isso se aplica ao processo de design da linguagem, não apenas aos aplicativos. "Agora é melhor do que nunca." e "Embora nunca tenha sido muitas vezes é melhor do que direito agora." trata-se de encontrar o equilíbrio certo para o tempo e a qualidade da implementação. É o mesmo com o resto do zen. E, é claro, o Zen não tem um único significado, por design.

Roman Susi
fonte
1
sim, eu vi e descobri que é como um Yin e Yang: Yin é melhor que Yang e Yang é melhor que Yin? Pode ser apenas o equilíbrio certo.
Nonopolarity
1

Agora é melhor do que nunca.
Embora nunca tenha sido muitas vezes é melhor do que direito agora

Eu acho que a primeira linha se refere a uma mistura de perfeccionismo e procrastinação. É melhor fornecer algo agora que funcione, mesmo que a funcionalidade seja básica ou o código "ainda não seja perfeito", do que trabalhar para sempre até você ficar sem vapor e o código acabar morto.

Quanto à segunda linha, acho que tem como alvo implementações apressadas. Geralmente, as coisas que você codifica têm um impacto duradouro, uma vez liberadas. Às vezes, alguém pode ser tentado a enviar rapidamente algo, especialmente por pressão, que se tornará um fardo para os anos seguintes. É chamado de "dívida técnica": decisões ruins de design, interfaces ruins ou apenas construções ruins levam a muitos problemas no caminho. O código raramente está sozinho, muitos outros códigos rapidamente se baseiam nele e, se você tomou más decisões, fica preso nele. Portanto, não apresse os lançamentos, garanta que tudo esteja bem.

dagnelies
fonte