In the early 2000s, my first job was with a small business, and a (small) part of my job involved writing (small) parts of software our clients used to upload data to us. I remember buying the academic version of .NET 2003 (I was in school), and the excitement I felt opening that large honking package (like the one below), with a thick booklet and 6 CDs. I was on my way to becoming a programmer!
A few years later, on the help desk at Progressive Insurance, I was adjusting to life as a first-time dad and earning my CompSci degree. I dabbled in web design, and wrote a small internal tool for work that I thought might impress my manager - it didn't. For a year, I applied internally to beginner level programming positions, but it didn't pan out and I began looking elsewhere. I was frustrated, as if "programming" were the X on a map I hadn't found yet. Guess I hadn't arrived.
Eventually I found a position to break into the field, and I was there 6 months before it hit me one afternoon - I'd arrived! It said "developer" on my cubical sign, and I was writing all the codez and compiling all the thingz. I was finally a programmer.
In reality, I was on a team of 3 devs (it grew), writing code for a legacy app, with little direction, little clue how to do my job well, and little idea of where I was headed. Seven years later, I was frustrated with what programming had turned out to be, or maybe just what my place in it seemed to be, and I was wondering if I were really a decent programmer at all.
I've gone back and forth over the years, following the fine programming tradition of alternating between self-doubt and self-congratulation, in equal measure. Every 5 minutes or so.
You'll learn new things, you'll learn from your mistakes, you'll learn from others. You'll get better, and a year from now you'll be a better programmer than you were a year ago. Maybe you'll get lucky and save the day! Maybe you'll get a PR in right before the weekend that gets approved with no corrections, and it'll feel good.
To be a programmer is to improve, better today than you were yesterday.
In reality, telling a computer what to do (aka programming) is too general to perfect in a lifetime. Technologies evolve, techniques evolve, and the codebase you're working in evolves (moreso on a large team).
Devs will come and go, each with their own best practices and favorite tools, more than you could learn in 10 lifetimes. Some will be awesome and blow you away with their level of knowledge and willingness to share it. Some will be less-than-awesome but may still blow you away with their level of knowledge and tireless preaching on how "real programmers" do it. 🙄 Still others will... just make you feel good about where you're at. 😏
To be a programmer is to continually grow, better tomorrow than you are today.
Whether you're banging out open source tools for free, or you find a company willing to pay you for what you know, you're a programmer. If you stick with it, you've already arrived... and yet, you'll never arrive at any final destination. It's a marathon, not a sprint. And it's a marathon without any definitive finish line until you decide to draw one by retiring or switching career paths. 😀
13 years (and some minor crises of identity) later, I'm learning self-control over the urge to redo things, the benefits of writing tests (even when it's painful!) and pairing, and that collaboration is a necessity to have any hope of staying on the same page and turning out a good product.
I'm a good programmer. Better than I was a decade ago.
I'm not as good as I could be. I'll learn more in the next decade.
No matter what direction you go with it, remember that you're far more than someone churning out some code. There are people (not too many, I hope) who seem to have their identity and self-worth wrapped up in their ability to hack on software and hardware. Life is too short and programming, though pretty cool, is not all there is.