Why You Should Try the Hard Things

Created on July 01, 2025

Last updated on July 01, 2025


I just wanted to take some time out and post about an ethos I've lived by during my journey through the world of software development: it's ok to try the hard things. Don't let people tell you not to do them, or to discourage you because you may not be skilled enough or educated enough, or anything else that detracts from your enjoyment of programming. Now, I'm not suggesting you start with the hardest things first, but it's ok to challenge yourself, even if you don't do things correctly or in the idiomatic way industry programmers think they should be done.

Why? Well, first, if you only pick off the low hanging fruit and do the easy things, you won't learn. Experience is a hell of a teacher. If you do something and do it wrong, you'll know why it was wrong. You'll see the results, sad as they may be. Second, you will be forced to learn things you may not have originally considered or even thought about. Doing research and testing is also a hell of a teacher, and it doesn't feel like studying when you are trying to further your own goals. Third, sometimes you can prove people wrong. You see, there's a lot of cargo-culting in software development. Lots of lemmings following influencers, and it's infuriating. Don't do it for them though, do it for you.

Now, let me qualify this by saying: don't do it on someone else's dime or on someone else's systems. Do these hard things on your own, safely away from critical systems. You need to walk before you can run, and you need to run before you can fly.

What's hard? Well, for me I always wanted to build a lexer, and I've written probably 20 of them now. Is a lexer hard? Not really, but think about all the approaches you can take, think of the tradeoffs. Do you roll with a fast state machine? If so, how do you represent the states and the transitions? How do you make it fast like real software? How do you make it extensible? There's a lot of ways to skin a cat, this was just one example. I always did hobbyist OS development when I was younger because it was challenging. Bare metal code in whatever language I could find to hack on. I never did write much of an OS kernel, and yes it was a dream of mine before Linux (I'm dating myself now here, heh).

Anyway, doing things that are challenging is rewarding, and by doing them you build confidence and you get better. Think about it, who knows the ins and outs of a given problem better than someone who has been in the trenches trying to get something working, or getting to a v3 where you know what you're doing and now it's gravy?

You don't have to be a "leetcoder" to write good code. Some people are clever and love that code golf shit. I would rather bust open Sedgewick or another textbook when I need a specific recipe than try to win the IOCC. 

Anyway, no matter your skill level, try to do the hard things. Don't bite off more than you can chew, lest you'll get frustrated and won't learn anything, but be persistent and do your research. Not everything can be written in an evening, and not everything is even worth writing, but only you can figure that out.

Happy coding- and do the hard shit from time to time. You won't regret it.

     -Padawan 2025