What’s the Difference Between a Coder, a Developer, a Software Engineer, and a Hacker?
There are a lot of opinions out there about the distinctions between these terms. Some people get extremely passionate about this too. Here’s my take on them (as well as what I’ve largely seen).
Naturally, most people in the software industry are coders.
A “developer” is a step up: someone who does contract work or works full-time developing applications. The key differentiator here is that developers willingly render their services — for fun, for charity, or for money.
And subsequently, this means someone willingly accepts or requests their services.
Personally, I wouldn’t ask some random coder to make an app for me — do they even know how? I would, however, ask an application developer to do the same. It sounds more official and subsequently renders more confidence in their work.
I also explicitly mentioned the “selling” or “volunteering” of services, because really, having other people use your software / apps is a rite of passage. Anybody can hack together little scrappy solutions for themselves. But if you put an app out on the App Store? Yeah, you’re a developer.
So a developer is a coder (because developers write code), but a coder is not necessarily a developer (because developers actually develop solutions and applications rather than just slapping together code here and there).
Developers ⊆ Coders
If you don’t remember or know set theory, “⊆” means “is/are a subset of”. All developers are coders, but not all coders are developers. Ergo, developers are a subset of coders.
“Software engineers” are distinguished as people who not only know how to code/develop, but who are also familiar with all of the intricacies of developing commercial products in a team.
They’re also knowledgeable about engineering and various other highly-technical topics.
Many developers happen to be software engineers, but in my humble opinion, they’re not the same: the “engineer” portion of the title indicates a person who is familiar with actual engineering fundamentals, such as advanced/discrete mathematics, algorithms, and logic, among other things.
Being able to put together mobile apps for iOS or Android makes you a developer. But if you can’t explain or analyze the performance of algorithms or efficiency of the code, you’re not really an engineer.
I’d also argue that not being able to come up with a solution other than brute force is also not very engineer-like. Most people can write for-loops and nest them. But coming up with a clever way to reduce your algorithm to constant time? Hell yeah, that’s engineering.
So, software engineers are developers and subsequently also coders, but developers and coders are not necessarily software engineers. By definition you’d have to at least be a developer to be a coder — it wouldn’t make sense be a coder and software engineer, but not a developer.
My theory expands to the following:
Software Engineers ⊆ Developers ⊆ Coders
Then, we have “hackers”. Popularly (as in outside of software), most people think of a hacker as a person who breaks into things (like your bank, your online accounts) and steals stuff (like your money, your SSN, passwords to your other accounts, etc…).
But within software engineering, a “hack” (noun) actually describes code that is a solution to a problem, and subsequently “hacking” (verb) is another word for solving problems.
This is why “hacker” to many software engineers in the industry is used lovingly as a term to describe any developer or coder who solves problems and “hacks” together solutions (e.g., an app).
Even Wikipedia has an entry on this specific definition. But I guess for Wikipedia, the person must also be a “skilled computer expert.” Indeed, many people in industry also consider “hackers” to be some of the best, and to be called one is highly rewarding.
CTOs of software companies have been referred to as the “hackers in chief.”
So, I guess we’ll stick with the set theory: if we consider hackers to be highly skilled problem solvers, then they comprise only a portion of software engineers. After all, not everyone can sit at the top…
Hackers ⊆ Software Engineers ⊆ Developers ⊆ Coders
Anyone who can code is a coder. But only some coders are developers that create actual applications. Only some developers can additionally claim to be engineers due to their advanced knowledge of algorithms and mathematics, and finally, only a subset of software engineers embody the spirit and skill of “hackers”.
If it was, I’d have no business being a software engineer ¯_(ツ)_/¯. Some days I can’t even remember where I parked the damn car.
I mention all of this because I’ve seen people get real mad about being “mistaken” for the wrong term before.
“Coder? No, I’m an engineer. Big difference.”
— Snobby Ass Who Is, Regrettably, Really Good At What He Does
Some people get really mad when you use “hacker” to refer to digital bank robbers and not problem-solvers.
“No man that’s totally f*cked up. A hacker is a person who builds things, not breaks things.”
— Engineer I Know Who Has Strong Opinions About Everything
Personally, I don’t spend much time thinking about these terms and their differences, and I humbly don’t think you should either — skills speak for themselves regardless of title.
I mainly put this story out for fun.
Are you a hacker or a software engineer? Probably both? Are you a coder or a developer? Meh, it really doesn’t matter.
Are you good at what you do? ← Now that’s the key question.