Hacker News new | ask | show | jobs
by gratitoad 1351 days ago
Reading this comment had me cheering “yes, a thousand times yes” but then it occurred to me how often I turn to an O’Reilly book instead of a concrete project and I wondered why.

I think I subconsciously avoid new projects to learn something programming-related because of how often they end up unbounded in time due to one of the fundamental attributes of writing software: unknown unknowns. The kinds of sticking points in a project that could take you minutes to figure out, or days, or even weeks.

I have limited free time and I want only so much of it to be _more_ programming. (I’m a professional software engineer) If I can’t be certain I can timebox a new pet project with _some_ degree of successful outcome, I think I’m low key anxious enough to avoid starting it.

Does anyone else struggle with this? How do folks overcome it and work on new things without them taking over?

2 comments

I run into the same thing with projects of many kinds.

If I want to do something like move a light fixture in my house, it seems like it should be fairly straightforward. Choose where I want the new one to be. Create hole. Move wires. Connect fixture.

But it only seems that simple because I'm ignorant. I have to install a new junction box, which requires having a joist nearby, or adding a cross-support between two. Am I going to need to move any insulation? What insulation do I even have? Is the existing wiring long enough, or in the right place, or am I going to have to replace it? And I need to pin the wires down every so often? What? How? Where? Where do I even find that info? And never mind patching the hole I'm leaving behind. It's not just eyeballing a drywall patch. I can't match the old texture of the ceiling, even if I thought it was plain. My patch is really noticeable. And on and on.

Unknown unknowns take what I thought was going to be a little afternoon project and turn it into asking all my friends for recommendations of people who aren't booked 6 months out and are willing to handle a tiny little project cleaning up after my ignorance.

Taking on projects before I even know what I don't know has gotten me into more trouble than just about anything else.

I've never nearly burnt my house down taking notes from a book and hiring a professional to do the actual work!

Limit the degrees of freedom. If the goal is to learn a new programming language, pick an interesting problem that you’ve already solved (e.g. todo list manager, pomodoro timer, etc.). If you want to learn a new domain (e.g. networking), pick a familiar language. Choose boring tech for everything else—-things like deployment, monitoring, etc. If your goal is not learning k8s, just SCP stuff to a VPS. It can be crappy. Crappy is how you learn.
It’s like you’ve seen into my very soul. I often struggle to isolate individual problems within a new problem space because my brain prefers to see the interconnected web of what could be if I just did this thing right. Excellent advice.