Suffering-oriented programming (2012)
nathanmarz.com
nathanmarz.com
On the other hand, this requires a considerable amount of discipline. It is easy to procrastinate. You think, "Oh we are suffering here, but it's only one small thing, so it's not too bad. Plus we're super busy adding these other 100 features". Then there are 2 small problems. Then there are 10. Then 100. Pretty soon, the amount of time necessary to fix the problems you need fixed exceeds the amount of time that you can spend without losing business. So you prioritise the worst issues and work around the others... The workarounds cause more issues and because it's a network effect, the software starts to degrade in a non-linear way. After a while, you are spending entire days reading code just to make sure that a few line change won't break something.
It's not a panacea. You still need a lot of experience... and for want of a better term, good taste.
That strikes a good chord, thanks for the concise response to excessive abstraction evangelists.
It's difficult to tell them that they're not suffering though. I've sat many down to explain that we don't need containerized components and rearchitecting into an SOA with a blue-green deploy model. They protest nonetheless. But what do I know after 15 years of engineering? I surely know that our customers' suffering caused by their relief of suffering will make us all suffer more.
From time to time I encounter a situation where one of them slugs through some hideously boring task by hand, wasting hours, for something I could wip out a shell script in a couple of minutes for. Usually, that's because they haven't been given any useful tooling, and more often than not, a programmer knew about that and didn't care. Turns out, some of us are really good at ignoring our colleagues' suffering for that matter.
Also, turns out people are generally really grateful if you can tell them 'just pull the data out into an Excel sheet' and give them the data they need after a couple of minutes of "wizardry".
If abstractions help you think, abstracting wrong makes you think wrong - and harder to think right than without them.
So it's helpful to use abstractions others have already schlepped out e.g. in mathematics... but there's no guarantee that it's the right one for your particular situation.
I would like to balance the difficulty of wading through abstractions with the difficulty of repetitive code, not to act like one difficulty is superior to the other.
It was high in repetition and whenever you changed something, you had to not forget five places. It was also hard to get the big picture of what was supposed to happen.
There is such a thing as too little abstraction as much as there is too much abstraction.
Interesting language, but some peculiar fanboys.
I certainly stopped wasting a lot of time on pointless half-baked automated tools after I read that.
- Make it
- Make it correct (i.e. test/prove it works always)
- Make it fast
There is always some mixing going on but I think it is a nice way of building software.