It took me a while to come up with a meaningful answer, but it inspired me to write this post. I hope it can help some of you out there who are also struggling with this question.
So, what does it mean to be a programmer? When can you confidently call yourself a real programmer? Who sets those standards?
Am I a real programmer?
Let’s talk about it.
Some of you already may know about Jeff Atwood’s infamous article about the “FizzBuzz” test. Atwood believes that you should not call yourself a programmer, let alone apply for a programming job if you can’t solve the FizzBuzz test.
I won’t quibble with - Mr. Atwood’s piece, he has every right to his opinion, but make no mistake, it is just his opinion. In the following, I try to offer a less aggressive and more practical perspective.
To me, you are a programmer, when you can solve a conditional problem, without just copy/pasting code. I don’t care how small that problem is.
The condition could be “if a user clicks a button, show text element”.
Btw copy/pasting code might solve problems for you — which is great — but it doesn’t make you a programmer because you didn’t apply the type of thinking required to programmatically solve a problem. But other than the copy/paste example I don’t have high standards for what is considered a programmer, nor do I believe many people are qualified to decide what the general standard is.
If you can break down the problem above to its smallest part and come up with a solution, to me that’s programming. Rest assured that someone will disagree, and that’s okay. This is my opinion.
While the click event example above is considered easy work for experienced developers, it still requires a small dose of logical reasoning to do. And logical reasoning is a key component of programming.
You can argue that knowing how to solve a basic click event doesn’t make you well rounded. True. But I would argue that you don’t have to solve every type of programming problem, to be a programmer. Context is key.
Who decides which types and how many programming problems you should be able to solve before you get a t-shirt and get invited to the cool people’s club?
There are so many different standards and definitions in tech that it often appears arbitrary. Search a bit on the web, and you’ll discover plenty of threads where people are debating the difference between coder vs. programmer, developer vs. programmer — and many others.
To me, a programmer is a coder, but a coder is not necessarily a programmer. How so? Well, I don’t consider writing HTML and CSS programming, but it’s certainly coding.
But some argue that HTML is indeed a programming language.
If that sounds laughable to you, you should check out the link above, you’ll see that you can argue either way, and either side is quite persuasive.
Agreed-upon standards are great — when we actually have them — because it makes communication easier. But when we don’t have them, it only makes things more confusing when people try to push their standards on other people. It hurts newcomers to the tech scene more than anyone, because they get the impression that they have to be masterful programmers to even apply for a job.
It’s like the classic discussion about “what does it mean to be a beginner, intermediate, advanced?”. Ask 10 different developers and you’ll get a myriad of inconsistent answers. There is no single answer.
Especially the concept of “intermediate” is hard to reason about. We humans relate better to the opposite extremes: yes/no, black/white, beginner/advanced concepts.
That’s why you rarely see anyone promote a tutorial for intermediates (the in-between). It’s a hard sell because nobody knows what it means.
The ironic part is that it’s just as difficult to define beginner and advanced, but it doesn’t seem that way on the surface, because they read as polar opposites. In reality, what some developers consider advanced, other developers consider as rookie stuff. It’s all relative.
I think there’s an underlying, and much more important question than “when you can call yourself a programmer”. How about:
Labels aside, the most important thing is that you can do the job you’re hired for.
I’m not saying that how you solve a problem is not important. Of course, it is. Things like high-end performance optimization and security are crucial for many companies. It’s not always enough to just solve a problem.
Sometimes you need to do solve a problem really well. However, every context is different. Not all clients need the security level of PayPal or the performance of Airbnb. There’s a thing called: good enough for a specific context.
Exactly when something is good enough, is contextual. As an up and coming developer, one of your biggest challenges is to acquire both self-awareness and situational awareness.
In less sexy terms, that translates to:
- Don’t apply for a job if it’s way beyond your current level.
- Don’t apply for jobs that involve a boatload of responsibility.
Learn to properly read and analyze job descriptions. Make sure that not only you, but your potential employer knows what the job entails.
Ask any developer who has experience reading job descriptions, and they’ll tell you that hiring managers often don’t know the difference between front-end and back-end development — and that’s just the tip of the iceberg.
Obviously, some hiring managers have no place being in their position, but it’s not without reason that many of them write confusing job descriptions. Tech-terminology is all over the place.
There are only a few things that people 100% agree about.
As a freelance web developer working for smaller clients, a common task you’ll get is to build a responsive menu/navigation component of some type. The most basic requirement of a menu is that you should be able to toggle its visibility on smaller devices. A so-called off-canvas menu:
Now, building a basic responsive menu with a toggle function doesn’t require much programming skills. Not if the only requirement is to make a menu show and hide when you click a button. Most WordPress and SquareSpace themes have that functionality out of the box. The programming is already done
With today’s myriad of “one-click-POOF-you-have-a-website!” services, you’ll quickly find yourself an expendable asset, if your skills don’t go beyond writing a generic toggle function.
But.. you don’t need much more than that before your market value starts to rise fast. The following statement is a crucial takeaway for today:
It doesn’t take much to get better than most.
Keep that in mind.
What if your client doesn’t want a standard menu bar like the one you saw previously? What if they want a specific type of menu bar that hides as the user scrolls down, but then slides back in as soon as the user scrolls up again as the one Medium has?
Medium has both a top and a bottom bar, they call it an action bar:
From personal experience, building an action bar that is similar to Medium’s does not require what I consider “advanced programming skills”.
So does it take an “intermediate programmer” to build a slick action bar like Medium? I don’t know, because I’m not sure that I know what intermediate means. Do you?
What I can tell you is that there are many ways to build an action bar that looks exactly like the one Medium has. But looks are one thing, what about performance? There’s more than what meets the eye.
Scroll events are expensive from a hardware usage perspective. How you execute functions matters a lot, especially on scroll events.
You might be interested in this in-depth tutorial where I discuss the challenge of window resize events and how to improve their performance.
I don’t know the exact details, but I know that Medium uses some type of throttler function for their scroll events. This is to reduce the hardware strain on their user’s devices when they scroll/swipe up and down.
See, a beginner-intermediate (whatever) developer might be able to build an action bar feature that is similar to Medium’s. But a highly skilled developer can build something that works and performs as well or even better than Medium’s.
Sure, I can build an action bar that works like Medium’s, and doesn’t brutally hammer my users’ hardware. But I’m also self-aware enough to know that I’m not skilled enough, yet, to build one that works as well as Mediums (I’ve tried!).
Does that mean that I don’t qualify as a programmer? Am I a beginner, intermediate, something else? And according to who?
I don’t know and I don’t care, because other people’s labels have not stopped me from making a living doing what I love every day.
Not all companies can, need or will pay for Medium’s level of software quality. Good enough is whatever is good enough for a specific context.
Most clients would be happy with a website that has 10% of the horsepower that sites like Medium have.
No WordPress theme has all the features that every client needs.
Most websites will sooner or later need customization. That’s why your skills as a developer start to become incomparably more valuable, once you know just a little bit more than 2 + 2 — or how to show/hide an element.
Let me repeat what I said earlier because it’s important:
It doesn’t take much to get better than most.
The average website owner doesn’t have a clue about how to solve “simple” tech problems. Even if they can find a solution on their own (e.g. by installing plugins), they don’t have time, because they usually got a product to sell or a blog post to write.
Someone on StackOverflow might not be impressed by your ability to make elements show and hide. Hell, you might not be that impressed yourself — but to your client, you are a fucking magician.
Most clients just want their website to work, they don’t care how you solve it. As long as you do your best and they feel that they got what they paid for.
Who cares if some random user on the Internet tells you that you don’t meet his or her requirements for “a real programmer”? What are they to you? Do you think your client (whose problem you just solved) cares? They don’t.
What matters is that you acquire the ability to recognize:
- A: the nature of a task.
- B: what is required to solve the task.
If you’re not up for a specific task, find another client, there are thousands of new businesses starting up every day. 99% of them need a website.
I got my first freelancing job after just 3 months of learning HTML, CSS, and basic WordPress customization. Let me tell you, even though I hardly knew anything about development, I was still good enough to get a job because my client knew even less than I did. And that’s how the world works in general.
Programming/coding is not easy but it doesn’t take much to get better than most. The average person is not tech-savvy — at all.
No programmer can do everything. There are many types of programmers. There are countless of levels (and pay grades) to this game, from complete beginner to ultra-advanced.
There are many, many different types of websites and web apps. From simple landing pages and blogs to Airbnb and Medium. Therefore there are endless job opportunities for every level of programmer, developer, designer and so on.
If you don’t have the skills to build the next Instagram, that doesn’t mean you’re not a “real programmer”. You’re just not at that level yet. But one day you will be — if you want to — as long as you don’t give up.
You’re always a work in progress. Focus on getting better at your craft, and work on becoming a better communicator. This is far more important than worrying about whether or not you fit into some arbitrary box.