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 wanted
to assemble my own—hopefully more accurate—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
tinker with things in a way that extends or changes their functionality,
or otherwise uses them in ways that weren’t originally intended. -
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.
Programmers solve problems using code, a Hacker is a
creator/tinkerer, and a Developer is a
formally trained programmer who doesn’t just solve problems but does
so in a structured and disciplined way that was probably learned formally.
What developers, hackers, and programmers all have in common is that they
solve problems using code.
Relationships
People can be any combination of these. Here’s how they relate to each other
(also see the Venn diagram above):
-
All hackers and developers are programmers.
-
Many programmers, and even developers, are not creative enough to be
considered hackers. -
Many programmers, and even hackers, are not educated or experienced
enough to be considered developers.
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 education and/or
experience to properly build massive applications, you should still be proud
to be a programmer.
Solving problems using code is a superpower by itself.
Notes
-
There is a broader type of Hacker which can apply to any field, not just
computers. This article specifically deals with the software type. -
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. -
The term “Software Engineer” is nearly synonymous with Developer for
these purposes. It means someone who is well-rounded in all aspects of
software creation, and not just a few. -
It is possible for someone to have engineer/developer-type skills
without formal training, but it is not common. -
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.” -
“Software Engineer” is synonymous with Developer. It implies a formal
education in the core concepts of software architecture, design, and the
requisite pre-education to support it.












0 responses on "Shallow on Purpose"