Untuk pemrograman Python dan menjadi Pythonic, mengapa "tidak pernah lebih baik daripada * sekarang *"? [Tutup]

8

Dalam Zen Python, saya dapat memahami sebagian besar dari itu, kecuali:

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

Jadi saya pikir melakukannya sekarang atau mendapatkan hasil sekarang lebih baik daripada tidak sama sekali. Tetapi mengapa "tidak pernah lebih baik daripada * sekarang *"? Atau apa artinya?

Untuk melihat 2 baris di atas dalam konteks, ini adalah seluruh Zen 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!
nonopolaritas
sumber
2
Penipuan lintas jaringan: stackoverflow.com/q/20531943/3001761
jonrsharpe

Jawaban:

12

Bagian pertama, "sekarang lebih baik daripada tidak pernah sama sekali", adalah mantra menentang penundaan. Ini mengungkapkan gagasan bahwa, jika Anda tidak melanjutkannya, Anda tidak akan pernah bisa melakukannya.

Bagian kedua, "tidak pernah sering lebih baik daripada saat ini , adalah ekspresi dari prinsip YAGNI . Idenya adalah bahwa Anda harus" Selalu menerapkan hal-hal ketika Anda benar-benar membutuhkannya, tidak pernah ketika Anda hanya meramalkan bahwa Anda membutuhkannya ", karena Anda sering temukan bahwa Anda sebenarnya tidak membutuhkannya, dan kemudian temukan bahwa Anda baru saja membuang-buang usaha.

... yah, itu pemahaman saya. Tetapi Anda harus meminta penulis untuk memastikan.

Kramii
sumber
2
Ada kutipan dari Chuck Moore yang saya rasa mengekspresikan sentimen ini dengan baik: “Jangan menaruh kode di program Anda yang mungkin digunakan. Jangan tinggalkan kait di mana Anda dapat menggantung ekstensi. Hal-hal yang mungkin ingin Anda lakukan tidak terbatas; itu berarti bahwa masing-masing memiliki 0 probabilitas realisasi. Jika Anda membutuhkan ekstensi nanti, Anda bisa mengkodekannya nanti — dan mungkin melakukan pekerjaan yang lebih baik daripada jika Anda melakukannya sekarang. Dan jika orang lain menambahkan ekstensi, apakah dia akan melihat kait yang Anda tinggalkan? Apakah Anda akan mendokumentasikan aspek program ini? "
Jon Purdy
2

Bisa jadi soal evaluasi malas.

Contoh:

xrange(1000000)

vs.

range(1000000) 

Di mana yang pertama tidak melakukan banyak hal sampai nilai dibutuhkan tetapi yang terakhir mengalokasikan array yang besar.

Atau logging

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

vs.

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

Di mana yang pertama tidak membuat string kecuali logging benar-benar diaktifkan.

Esben Skov Pedersen
sumber
1

Saya pikir, ini berlaku untuk proses desain bahasa itu sendiri, bukan hanya aplikasi. "Sekarang lebih baik daripada tidak sama sekali." dan "Meskipun tidak pernah sering lebih baik daripada yang tepat sekarang." adalah tentang menemukan keseimbangan yang tepat untuk waktu dan kualitas implementasi. Itu sama dengan sisa Zen. Dan, tentu saja, Zen tidak memiliki makna tunggal, berdasarkan desain.

Roman Susi
sumber
1
ya, saya melihatnya dan menemukan bahwa itu seperti Yin dan Yang: Yin lebih baik dari Yang dan Yang lebih baik daripada Yin? Mungkin saja keseimbangan yang tepat.
nonopolaritas
1

Sekarang lebih baik daripada tidak sama sekali.
Meskipun tidak pernah sering lebih baik daripada yang tepat sekarang

Saya pikir baris pertama mengacu pada campuran perfeksionisme dan prokrastinasi. Lebih baik menyediakan sesuatu sekarang yang berfungsi, bahkan jika fungsionalitasnya dasar atau kode "belum sempurna", daripada mengerjakannya selamanya sampai Anda kehabisan tenaga dan kode itu akhirnya mati.

Adapun baris kedua, saya pikir target implementasi terburu-buru. Biasanya, hal-hal yang Anda kode memiliki dampak yang sangat tahan lama setelah dirilis. Terkadang, seseorang mungkin tergoda untuk dengan cepat mengirimkan sesuatu, terutama karena tekanan, yang akan berubah menjadi beban untuk tahun-tahun berikutnya. Ini disebut "utang teknis": keputusan desain yang buruk, antarmuka yang buruk, atau konstruksi yang buruk menyebabkan banyak masalah. Kode jarang sendirian, banyak kode lain dengan cepat dibangun di atasnya, dan jika Anda membuat keputusan yang buruk, Anda terjebak dengannya. Karena itu, jangan buru-buru merilis, pastikan itu hal yang baik.

dagnelies
sumber