I once helped someone create a monstrosity of an SVG - they exported a flowchart SVG from Visio that would show the current state of different steps of a project. The status of each step was stored in a SQL database. I helped write some JavaScript inside the SVG that would create an ActiveX object that would open up a ODBC connection and execute a SQL query to get the latest states, which would update the colors on the flowchart every time you loaded the SVG. It would obviously only work in IE11. Plaintext credentials stored right inside the SVG!
As part of the Stack Overflow April Fools' prank, we did some data analysis on copy behavior on the site [0]. The most copied answer during the collection period (~1 month) was "How to iterate over rows in a DataFrame in Pandas" [1], receiving 11k copies!
To me it's an means to an end. I don't care if my solution takes 100ms instead of 1ms, it's the superior choice for me if it takes me 1 minute to do it instead of 10 minutes to learn something new.
True, but sometimes these 10 minutes help you to discover something new that will improve your code.
I had a few of these cases in my life:
- discovering optimized patterns in Perl, which led to code I could not understand the next day
- discovering decorators in Python, which led to better code
- discovering comprehensions in Python (a magical thing) that led to better code, except when I wanted to be too clever and ended up with Perl-like code
Exactly, that's not a flaw, that's rational behaviour. Why design an intricate solution for a one-off. Using 15 times the amount of time it would have taken you manually to automate a pretty standard task is just stupid, though we all do it.
Do the first thing that works, don't overthink it.
I think the flaw is you misinterpreting the argument.
In my opinion, the bottom line with obvious caveats is this - Human-time is more valuable than CPU-time.
If you are shipping at scale then the calculus is different - Don't waste end-users' human-time and their cpu-time and/or server's cpu-time.
If you're writing code with a team the calculus is different - Use/Learn techniques and tools to reduce the teams' human-time wastage plus all the above.
If you're writing code just for yourself the calculus is different - Save your own human-time.
I iterate over rows in pandas fairly often for plotting purposes. Anytime I want to draw something more complicated than a single point for each row, I find it's simple and straight-forward to just iterrows() and call the appropriate matplotlib functions for each. It does mean some plots that are conceptually pretty simple end up taking ~5 seconds to draw, but I don't mind. Is there really a better alternative that isn't super complicated? Keep in mind that I frequently change my mind about what I'm plotting, so simple code is really good (it's usually easier to modify) even if it's a little slower.
I got bitten by that prank when copying code from a question, to see what it did (it was something obviously harmless). I was rather annoyed for about two seconds before I realized what date it was. :)