I generally despise "How To Become A Programmer" articles. They're chock-full of useless bromides and pointless anecdotes. They're like the endless stream of "How To Lose Weight" articles that purport to show you "that one simple secret" that will somehow solve all your problems (with no effort or sacrifice on your part). In other words, most "How To Become A Programmer" articles are complete and utter crapola.
And yet... this is my "How To Become A Programmer" article.
Why???
This year's foray into blogging has exposed me to some interesting readers. Specifically, there've been a few individuals who've reached out to me, apropos of nothing, to solicit my advice on "how to become a programmer". And as much as I don't actually feel "worthy" of such a query, I have tried to provide the best-possible answer.
And yet... I feel like my one-on-one answers are somehow lacking. So I'm gonna try to rectify that - as best as I can - right here in this article.
Acting (Like A Programmer)
Programming's a little like acting, in that it seems as though a great many people assume they can do it. They believe they can do it. They're eager to do it. But they can't quite figure out how to get paid to do it.
This is because programming, like acting, has what economists call a "low barrier to entry". Do you wanna be an actor? Great! Stand up on the first stage you can find and start hollering Shakespeare. No one may appreciate your acting. And they almost certainly won't pay you for it. But even if you're standing all by your lonesome, spitting sonnets into the void, you are, on some basic level, "acting".
Do you wanna be a programmer? Great! Open your browser's dev tools, or go to one of the many online, realtime, coding IDEs that are available, and start cranking out some code. No one may care about what you're coding. And anyone who knows the craft may wince at the sight of your noob logic. But even if your buggy code barely works and doesn't really do much of anything, you are, on some basic level, "programming".
Like any endeavor with a low barrier to entry, there are many people trying their hand at acting and programming. And there are many people who can't quite figure out how to make a living at either.
Also, like any endeavor with a low barrier to entry, a great many people claim to be actors (and programmers). But when you inspect their actual activities, they're more likely to be seen as waiters or bartenders or delivery drivers. Because those jobs pay (something). While many would-be actors (and programmers) aren't really getting paid much (or anything) for their desired profession.
So how do you break into the glorious (and lucrative) field of programming? Well... you're in luck. Because I'm about to drop the Mother Of All Secrets on you. I'm about to whisper the magic formula in your ear. Are you ready???
Write More Code
Did you catch it??? Maybe you thought that section header was just meant to be a synopsis of some deeper, broader point. Maybe you absent-mindedly skimmed over it. So I'll give you the secret again:
WRITE MORE CODE.
I'm not trying to be snide. Nor am I deaf to the struggles one faces when trying to get that first paying coding gig. But I mean it when I say that the best possible answer to breaking into the professional coding ranks is as "basic" as this one simple mantra:
Write more code.
I know there are all kinds of exasperated retorts dancing through your mind right now. So let's have a little conversation about it:
The Aspiring-Coder Debate
Aspiring Coder: I absolutely want to write more code. But I can't find anyone who'll take a chance by hiring me, so that I can, indeed, write more code.
Me: I'm sorry. Maybe the acoustics in this room are a bit dodgy. Or maybe I didn't enunciate. So let me be clear. I didn't tell you to write more code for your next/first employer. I told you to write more code. Period.
Aspiring Coder: What would I possibly code if I don't first have a job as a programmer??
Me: If you need to ask that question, you first need to be very honest with yourself and determine whether you really want to be a programmer at all. Just as a dancer can dance without having a gig on Broadway, a programmer can program without having a formal employer to pay for that code. Furthermore, if someone tells me that they're a "dancer" - but they haven't danced at all in the last year, then I truly question whether they are, in any way, a dancer. And if someone hasn't recently written code (for anyone), then I truly question whether they are, in any way, a programmer.
Aspiring Coder: OK. I get that. But my goal is to be a paid programmer. I want programming to be my career - not my hobby.
Me: Yes. And I want to be the world's greatest pop star. But if my approach is to wait for a music label to sign me - before I've spent countless hours honing my musical chops on my own - then I'm gonna be waiting for a verrrrry long time.
Aspiring Coder: But I've been honing my skills! I went to a code camp!
Me: Get out. Get out of my office right now.
Aspiring Coder: What?! What did I do???
Me: OK, maybe you don't have to get out. And I'm not trying to downplay your epic code-camp experience. But saying that you went to a code camp is like saying that you spent last weekend at a "law camp", and now you're ready to start trying legal cases.
Aspiring Coder: So the code camp was a waste of my time (and/or money)?
Me: Of course not. Code camps are a relatively recent innovation. And they can provide great value - for complete noobs and experienced coders alike. A solid code camp can expose you to a great many concepts in an abbreviated period of time - all in an atmosphere where there are a great many people around to help you learn quickly. But even the Greatest Code Camp In The World is still limited to the skills that you can acquire/practice over hours or days. Employers need skills that have been practiced for (at a minimum) months, if not years.
Aspiring Coder: But I also have a computer science degree!
Me: Oy vey. Don't get me started on the Comp Sci majors.
Aspiring Coder: That was four years of my life! And a whole lot of my parents' money! Now you're discarding those credentials out-of-hand??
Me: Not at all. But a computer science degree is a longer (and, if you're in the US, far more expensive) version of a code camp. It's a nice... primer. It will expose you to some moderately-useful concepts that you'll... occasionally use in a real-life programming job. But if I'm the hiring manager (and I've frequently been the hiring manager) and your only real qualification is your bachelors degree, well... you're probably not even remotely hire-able to me.
Aspiring Coder: This is depressing me. What else am I supposed to do to get potential employers to notice me??
Me: Maybe your short-term memory is misfiring, so allow me to suggest (yet again): Write more code.
Aspiring Coder: Ughh! Again with the "write more code" mantra! What am I supposed to code if I don't have a programming job???
Me: I've never met a top-notch dev who's ever had any trouble with that question. In fact, most of the devs I know have more "I'd really like to build..." side projects floating around in their mind than they'd ever get the time to actually program. Soooo many of life's little problems scream out (to "programmer types") for new apps that could be built to solve those problems - if only someone would take the time...
Aspiring Coder: So lemme get this straight. You want me to spend gobs of my own free time writing code for personal projects? Projects for which I'll probably never be paid a dime??
Me: Well, that would certainly satisfy the core requirement to: Write more code.
Aspiring Coder: I have bills. Commitments. I can't just go off to a cabin in the woods and spend the rest of my life coding on free projects.
Me: Look. No one ever said this was gonna be easy. (At least, I hope no one said that to you. If they did, you might wanna consider showing up on their doorstep at 3AM and punch them in the face.) And no one expects you to live in a cardboard box until the magical day that someone hires you to be a formal "programmer". When you're trying to break in, it's quite possible that you'll need to be paid for something else for a while. Just like the aspiring actor who waits tables for a few years, there's nothing wrong with being an aspiring programmer - while you do something else in your "day job".
Aspiring Coder: This is all easy for you to say. You've got a cushy job and a firm foothold in the career. And now that you've achieved that status, you think that I should have to do endless "free work" just to prove my worth??
Me: You can do whatever you want. There are, in fact, some people who come straight out of college - or straight out of code camps - and land great programming jobs. But I'm here to tell you that those people usually land those gigs because they can exhibit skills that were acquired "above and beyond" their courses or their code camp assignments.
Aspiring Coder: And then they can get a choice job like yours??
Me: Maybe. But I'd be careful how you define a "choice job".
Aspiring Coder: What are you driving at?
Me: I won't deny that I make a very nice salary nowadays. Probably more than I ever imagined I'd make when there was no grey in my beard. And my annual pay may, on the surface, look quite generous.
Aspiring Coder: "On the surface"??
Me: Right. Because you may look at nothing more than my annual salary and think, "Oh, man... That's where I want to be." But don't kid yourself. My current salary is, essentially, back pay for the many long years I've spent working FOR FREE.
Aspiring Coder: Wait. Your previous employers didn't pay you?? They had you working for free???
Me: No. Of course not. But nearly all of the skills for which I've been offered fat salaries have been acquired through hundreds, and even thousands, of hours of completely UNPAID work. Most of that work was done entirely for myself, as I tinkered with new technologies. Still more of it was done for "businesses" I intended to launch - and then they went nowhere and I was never (directly) paid for any of that effort. For example, I've had the mantle of "React Developer" now for the last 2-3 years. But I easily spent more than 1,000 hours doing React development for myself, for free, before anyone ever formally brought me onboard as a "React Developer". In fact, if you added up all of the money I've earned in my career, and you divided it by the raw number of hours I've spent in all programming-like endeavors, I fear that my overall hourly wage would come out to be quite... measly.
Aspiring Coder: Wait... You're saying that, if I truly want to become a professional (meaning: paid) programmer, I must first invest countless hours in unpaid work. And that, even then, I will probably end up earning a very poor "hourly wage" when all of my effort is weighed against all of my earnings? And if that is what you're saying, why in the hell would I ever want to pursue this career???
Me: If you have to ask yourself that question, then you probably don't want to pursue this career. Trust me. What I'm trying to get across in this whole discussion is that programming isn't so much a skill - like knowing how to rebuild a carburetor or how to cut hair. Programming is more akin to a way of thinking. It can be a bit of a... compulsion. I don't program for free (meaning: for myself) every single day. But even after a quarter century in this field, I still end many of my work days by "flipping over" to my personal projects - and continuing to write more code. For free. I can't help myself. It's truly my life. You don't need to have that same mindset to be a successful coder. But if you think that coding is a skill that you pick up over a coupla weekends and then you get a lucrative job, well... I might have some bad news for you. I have no doubt that, even when I'm 90, and I'm long-since retired, I'll still find myself occasionally opening up my IDE and cranking out some code - even though no one will be paying me anything for it.
Dreaming In Code
It's a bit of a clichΓ©' to speak about prodigies who "dream in code". But I'm here to tell you that it's not hyperbole, or some kinda urban legend. When I'm nose-down on a particularly tough problem - one with which I've been wrestling for days - I still sometimes sit up in the middle of the night. When that happens, my beloved will ask, "What's wrong?" And I reply, "I just solved it." Then I go downstairs to my computer and I crank out the solution that I just worked out in my unconscious/dreaming mind.
You don't have to obsess over code on that (possibly unhealthy) level. But if you want to truly entrench yourself in this career field, my advice to you is that programming can't just be "that thing you do from 9AM through 5PM". It must be something about which you're passionate. It's gotta be something that you do for fun. In your free time. When no one else is watching.
In short, if you wanna become a really kick-ass programmer - the kinda programmer to whom companies offer high salaries - there is really only one way that I know to get there. You must relentlessly:
WRITE MORE CODE.
If you do that. If you have the mindset to do that. If you're motivated to do that - without an immediate promise of riches... you might just find that (eventually) the riches have a way of coming anyway.
I sincerely wish you nothing but the greatest of success in your own programming endeavors. And if you've found an easier way to "punch that clock" and break into this career field, then... I applaud you. But for me, the "formula" for success has always been quite simple. I just keep: Writing. More. Code.
Top comments (13)
"Write more code" is key. But what is actually most important when you do that, is what you're doing when you are "writing more code". I've made the biggest mistake writing code endlessly without prioritizing learning new materials at the same time. What I'm saying is that I actually wasted a lot of my time writing a lot of code using bad practices or writing code that were written in a way where there were more performant/cleaner ways to write them and I realized that I kept writing code that i only knew what I was exposed to. It's all because I didn't spend more time reading online resources that basically gave better examples to bad practices and explanations of why we shouldn't do this or that. It's best to divide your time writing code and go through learning materials at the same time so you get the most of learning through exposure, trial and error instead of continously writing only the code that you know at the top of your head due to the lack of exposure.
There's a talk by 'Uncle' Bob Martin called "The Future of Programming", where he argues the barrier to entry is in fact too low considering the importance of what the software industry does. Not sure I agree with it, but an interesting perspective.
I can understand the sentiment. But even if we agree with the concept, it wouldn't actually change anything about the barrier to entry. I don't think there's anything you could do to artificially raise the barrier.
For example, one way to raise the barrier is to require everyone to have 4-year degrees - or even higher degrees. To be clear, I think this would be a horrible idea, but it's theoretically possible. However, it would be almost impossible to implement. Companies, with real-life programming problems to solve, and a shortage of talent to solve them, won't forgo talented candidates if they realize that good, potential employees can be had who do not possess a degree.
You can also raise such barriers with regulations (e.g., requiring every programmer to be "certified" or have some sort of special license). But such approaches would require broad societal support. Any such proposal would probably be dead on arrival.
Nevertheless, I do somewhat agree with the original idea. In theory, anyone with a keyboard can call themselves a "programmer". And if an employer is not careful, that "programmer" could find themselves working on critical systems that control medicine, finance, government, etc.
If the barrier was raised (like Bob is proposing), I think this would be the pathway. After all if many states demand you need a licence to braid hair, then you can see how they could get onboard with something like licences for programmers. Though admittedly rather different sectors...
I personally don't support the idea. I could see unintended consequences for reducing social mobility (as it is more difficult to get into the career without resources) and innovation (as college drop outs find it harder to start the next big thing). I also suspect it might not help that much in critical systems - you would hope that organisations working on those systems would have their own vetting procedures in place as is (for reasons of reputational damage if nothing else).
I do think that reasonable people can disagree over this however. And there are some other potential advantages (apart from the obvious quality one) too - for instance you wonder how many hours are wasted by people re-creating the wheel when they don't know a solution already exists, a higher barrier might help this (as they would learn about already existing tech).
Haha, nice awesome truth bombs and I chuckled on the back and forth.
Thank you!
This is the only article about how to become a programmer that I have read till the end. Very useful and entertaining article.
Thank you!
The Aspiring Coder Debate actually lifted my spirits.
Very well written! Thanks.
Awesome read. This article could have been titled 'Advice for young programmers'.
golden
Nice article! Btw "Dreaming In Code" is the title of a book about software programming. It is a good read
I will need to check it out.