This is a card in Dave's Virtual Box of Cards.

Overdo It! (for learning)

Created: 2022-11-15

When I learned Object-Oriented Programming (OOP) via Java, I bought into "Everything is an Object". The whole world was OOP mad by that time, and as a neophyte programmer, I was swept along for the ride.

I pushed OOP for all it was worth. I made complicated inheritance heirarchies. I made abstractions up the wazoo. I ran into problems where classes and objects were cumbersome and wildly innappropriate…​but I shoved them in there anyway.

When Functional Programming (FP) became really hot in the Web development world, I was again swept along for the ride. I did everything in FP style. Everything immutable. I wrote higher-order functions that abstracted away entire concepts of flow control. I was often at the very limits of my ability to understand what I’d written even as I was writing it.

Since then, I’ve pushed hard on concatenative/stack programming (Forth), strings for everything (Tcl), and a number of smaller paradigms.

Each time, I overdo it.

But I that’s good! By overdoing it, I found out what worked well and what didn’t work well. I ran into problems. I backed myself into corners.

So each time was a substantial learning experience that stuck with me.

It doesn’t have to just be conceptual. Pushing something "all the way" is the only way to find out if that solution would have worked or not.

I really like this post by Tasos Stamadianos The only way to learn is to commit to your decisions (

"The only way it can get better is if you commit to it and learn from completing it. You won’t learn nearly as much by switching to something else halfway through."

I couldn’t agree more.