By
Alan Skorkin I
have often used those three terms almost interchangeably, yes, even
computer scientist. After all, most of us have a degree in computer
science, so what does that make us? However, recently I find that those
three things have come to take on more and more distinct personalities
in my mind. It has come to the point where if I think about someone I
know – or know of – within the industry, they immediately fall into one
of those three categories. Which is not to say that one person can't
have attributes from all three, but regardless, they always tend to
favor one most strongly and so I fit them into that category,
programmer,
developer or
computer scientist.
It is difficult to define what each one should be, (
it is more of a gut feel rather than a strict delineation) they are very similar (
and rightly so), but I am going to attempt to do it anyway, cause I am a glutton for punishment :).
Computer Scientist
They write code (
yeah I know it's a bit of a bombshell). It may not be the prettiest or most well-factored code, but it gets the job done. It is not about the design of the code or "
good" practices, it is about proving what they set out to prove.
A computer scientist is as much a mathematician as they are a technologist (
they have 31337 math skills),
they don't just need to know that stuff works, they have to prove it.
Communication and people skills are desirable traits, but not
emphasized. Software process and team dynamics skills are desirable
traits, but not emphasized. They have good breadth of general knowledge
of their whole field, but they deeply specialize in one or several
narrow areas. In these areas they are considered world-class experts.
They work on stuff related to their research in their personal time.
Programmer
Programmers write awesome code. Making it clean, well-factored and
error free are very important concerns, but not at the expense of
getting the job done. It is all about knowing the meaning of "
good code"
within their domain. They need to have some math skills, but this is
not a paramount concern. They need to know of good (best) solutions to
problems, but they don't need to prove it is the best solution.
A good breadth of algorithmic knowledge is imperative.
They have a depth of skill in a wide area of expertise and have
reasonably good knowledge of related areas as well. Communication and
people skills are desirable traits, but not emphasized. Software process
and team dynamics skills are desirable traits, but not emphasized. They
work on personal software projects they find of interest in their off
time.
Developer
They write code. Making it well-factored and clean is important, but
other factors often take priority. Math skills are very much optional,
but it does help to be aware of common problems and solutions related to
the domain they are in. Communication and people skills are paramount.
Process and team dynamics are bread and butter skills.
They are consummate generalists without any truly deep specializations.
They are expert at finding ways around problems and plugging components
together to fulfill a set of requirements. In their personal time they
are either trying to build the next Facebook, or engage in activities
that have nothing to do with programming, developing, or computer
science.
- Developer are programmers to a greater or lesser extent.
- Computer scientists are programmers to a greater or lesser extent.
- Enterprise software is the domain of the developer.
- The Googles and Microsofts of the world are after programmers
(and to a lesser extent computer scientists). The developers who end up
there become product managers.
- RnD and academia are the domain of the computer scientist (and to a lesser extent the programmer)
The thing to remember here is that none of the three is derogatory or "
bad" in any way. One is not more or less desirable than any of the others. They are simply different dimensions (
with some crossover)
of the field we are all involved in. Particular personalities will
identify more with one but that does not mean that all three can't "
bleed" into each other and combine favorably. It is entirely possible to be both an awesome developer and a great programmer (
although it is difficult with so many important things to focus on).
In rare cases you may even get an all 3 in 1 type of deal, in which
case I'd love to hear from you, cause we should start a company
together, so that I can ride your awesomeness all the way to easy-street
:). But no matter where you fall, it is entirely possible to be highly
successful if you fit snugly into just one of the three.
What about a software engineer? That's just a subset of developer.
What about an architect? They design buildings and stuff, so I am not quite sure how that's relevant :)
I do believe that I have thoroughly failed to communicate my meaning. No matter. I will throw the ball to you, dear reader.
Do you see programmer, developer and computer scientist as distinct and if so are you definitions similar to mine? If not, then I'd love to hear your thoughts about them being one and the same.
Comments
Post a Comment