5 ms·
Things taking longer to read and understand is perhaps the central crime of unmaintainable code, no matter how concise otherwise.
by ehsanu1 12y ago
Things taking longer to read and understand is perhaps the central crime of unmaintainable code, no matter how concise otherwise.
- robertfw 12y agoTo quote Brian Kernighan, "Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?"
- MichaelDickens 12y agoI think this code is easier to read than the more verbose 12-line version given in the article. It takes longer to read per line, but less time total.
- Shish2k 12y agoIt's not just more complexity per line, it's also a higher level of complexity, using language-specific features that people who aren't fluent in python wouldn't be familiar with (multiplying a string by a boolean)
- groovy2shoes 12y agoBy that logic, no one should write anything in idiomatic French because anyone who isn't fluent in French wouldn't be able to read it.
- icambron 12y agoI was curious about that. Is multiplying a string by a boolean idiomatic Python? I don't write nearly enough Python to know, but it strikes me that this might be more like writing French using lots of obscure words.
- softbuilder 12y agoThis starts to get into "what is idiomatic python?" which changes as the language evolves. For example, before Python had an official ternary form, this was a common idiom: account.status = ["paid", "unpaid"][amount_due > 0] This does the same thing as the FizzBuzz example, coercing a bool to int. Here the int is used as an index into the list of the two strings. Personally, I found this handy and liked it a lot. Others didn't and now there is this, which isn't bad: account.status = "unpaid" if amount_due > 0 else "paid" Maybe it's less like using obscure French and more like speaking in a slightly different dialect, or in a different region with different cultural references.
- yen223 12y agoMultiplying a string by an integer is fine. Treating a boolean as an integer is iffy Multiplying a string by a boolean frankly should be a no-no.
- jfoster 12y agoWell, that example is a bit different. You're ignoring who the audience is. When writing code, the audience is usually at least people on the same team, if not the person writing in the first place. If writing in French for people who are not fluent, I think it would be a good idea to avoid idiomatic language.
- groovy2shoes 12y agoIt's not different. The audience in this case is people who are fluent in Python. Saying that code sample is bad is like saying Baudelaire is bad because only people fluent in French can read it.
- arethuza 12y agoI'm fairly new to Python, though not to software development, and one of the nice things I find about Python is that when I see something I haven't seen before (in this case multiplying a string by a boolean) I can usually guess correctly what it will do and spend a few seconds with the REPL to confirm. Of course, this is true to a certain extent of all programming languages, but I do find Python particularly easy in this respect.