There is often spirited discussion and debate about the differences between Programmers, Hackers, and Developers. Most descriptions I’ve seen are flawed in at least one serious way, so I provide below my preferred—and I hope more accurate and elegant—definitions:
- A Programmer is someone who can solve problems by by manipulating computer code. They can have a wide range of skill levels—from just being “ok” with basic scripting to being an absolute sorcerer with any language.
- A Hacker is someone who makes things. In this context, it’s someone who makes things by programming computers. This is the original, and purest definition of the term, i.e., that you have an idea and you “hack” something together to make it work. It also applies to people who modify things to significantly change their functionality, but less so.
- A Developer is a formally trained programmer. They don’t just solve problems or create things, but do so in accordance with a set of design and implementation principles. These include things like performance, maintainability, scale, robustness, and (ideally) security.
In short, all three solve problems using code. Programmer is the umbrella term which means problem solver, a Hacker is thecreator/tinkerer, and a Developer is a formally trained programmerwho doesn’t just solve problems but does so in a structured and disciplined way likely learned a part of a formal education.
People can be any combination of these. Here’s how they relate to each other:
- All hackers and developers are programmers.
- Many programmers are not creative or talented enough to be considered hackers.
- Many programmers are not educated or disciplined enough to be developers.
- Many developers are not creative enough to be hackers.
Ideally, one would strive to be all three, i.e., creative enough to be considered a hacker, but with enough formal training and experience to design software rather than simply…well, hacking it together.
But even if you aren’t very creative, and/or lack the training to do things the right way, you should still be proud. Solving problems using code is a superpower on its own.
- A “coder” is basically a synonym for programmer.
- Hacking is often, but not always, associated with poor quality. This is because it usually takes place in a rush of creativity that is best not slowed by the friction of doing things properly. In cases where a hacker is also a developer, or has an eye for design and quality elsewise, they almost inevitably have to come back to their creations afterward and clean them up.
- The determination of who gets called a hacker and who doesn’t is a contentious one. The basic rules that most agree on include 1) that you need to have made one or more things that people find useful, and 2) be recognized as a hacker by other hackers.
- In the security world, a hacker also means multiple things. For testers it usually means someone who understands systems and can defeat their security controls. In the top tiers of security, however, the definition returns to its more pure form, i.e. someone who creates security software or tools used by others.
- In popular culture, hacker means computer criminal. Within the security world that type of actor is often referred to as an “attacker”.
- Eric Raymond, a notable programmer and personality in the original computer community, defines a hacker like so, “An intelligent, creative, and open-minded individual who enjoys problem-solving, learning, and the sharing of knowledge above all else.”