"What is the nature of the thing, what does it do?" - Hannible Lecter
All these titles
should carry specific information to others. These days people will call themselves anything and get away with it, my general advice is to understate any pretentious titles and concentrate on your real experience.
A savvy employer should understand these distinctions...
Programmer
programs
Requires (none)
Actually writes the code implementing software. Anyone can start as a programmer.
The programmers central skill is the ability to transform
a high level (algorithm) expression into a sequence of lower level operations (code).
But since we all do that every day with mobile phones, video recorders, microwaves
and desktop computers, that makes almost everyone a programmer. If someone introduces
themselves as a programmer I assume they have fairly deep coding skills, but that
doesn't imply they know anything about computers at all.
Computer Engineer
Engineers computers
Requires (physics, electronic engineering, VLSI, CS, screwdriver)
You can spot an SE by the screwdriver.
He deals with the actual physical implementation of computing platforms. This ranges
from anyone who built their own PC from cards, to members of the team designing
Intels next chipset. All good CEs have deep understanding of binary logic, timing and
bus protocols, system components like RAM, ROM, DMA, clocks, interface devices
and a register level understanding of the processor and all its internals.
A good CE has built at least one computer from component level. Mine was a
68000 based SBU roughly equivilent to an Applemac, made on a wirewrap Eurocard.
But, the discipline is broad, and anyone who has designed a small cluster or
company network from stock parts and had to take account of physical wiring,
heat dynamics, component compatabilities and so forth should count themself
as a Computer Engineer. A good CE also has a soldering iron in his kit.
SEs are invariably male.
Systems Analyst
Analyses Systems
Requires (programming, theoretical computer science, experience)
The SA usually comes to an existing scenario which needs automation.
The SA analyses the system revealing entities, relationships, control
and data flows, transformations/functions, stores, pipes etc. S/he then
expresses this in a very high level 'formal' language such as Z, VDM or
another psudocode appropriate for describing high level architectures.
The hayday of the Systems Analyst was the 60s and 70s when most automation
took place. Another more modern role for the SA is to 'rediscover' legacy
horrors which have no documentation as a pre-analysis stage to a rewrite.
The best attributes of a SA are patience, detective like skills, and
experience is vital, you cannot walk straight out of college and call yourself
a systems analyst, you should have tackled at least 4 or 5 difficult
problems. Some good social and political abilities are also useful when analysing
large organisations as there will inevitably be hidden processes and agendas
that, although not a part of the technical spec, need routing around.
Women make exceptional SAs, Ive met some. Women that is.
Software Engineer
High level product engineering
Requires (programming, software engineering, some theoretical CS is good)
SE is an identifiablty separate skill.
The SE is usually a programmer, at least senior team leader or head of
development. The SE takes an overview of a large application. You are
not a software engineer if you are working alone or in a 2 man team.
Sommerville describes the essential roles of SE. Overseeing Specification,
Systems analysis, Prototyping, Development, Test, Version Control, Maintainance
and patches. The SE sees a project as a whole lifecycle, a much bigger
and broader view than any of the individual coders or teams. There is nothing
pretentious about calling this 'Engineering', it is quite appropriate.
If the Manager and Team Coders are good a rookie SE can come straight from
college and survive under that title, experience is not as important imo.
Anyone who did very well at just CS could probably cope nicely once they saw
2 or 3 projects through, or blag it from first principles.
Software engineering/Product Manager
Manages
Requires (SE, CS, experience, experience, experience, confidence)
Managers do very little at all except take responsibility and deal with people.
Certainly the best manager you can work under has 25 years of practical coding, a
higher degree in computer science and has worked in all of above roles in their time.
In reality most 'managers' are nothing like that. In many areas of human activity its
possible for a person with no experience of a field to come along as a 'Manager' having
studied only a 'Management' degree. In software it is not. Such self appointed managers
fail very quickly because software is unique. Managing code production requires insights
into very complicated issues that pedestrian management skills cannot deal with.
A good Manager has risen from at least 5 years SE imho. I taught elementry programming
to students on an undergrad course 'Software Engineering Management'. Looking back
I never would have hired any of those students fresh out of grad, it just can't be taught
on a theoretical level. One might be able to blag a crony job as manager of some media
company, but SEMs out of their depth rarely last the first week. Real SEM is very
active and stressful.
Hacker
hacks
requires (the mind of a hacker)
Hacker form a subset of all the others. People are either hackers
or they are not, but that doesn't stop them from becomming very skilled
and sucessful carreer programmers, software engineers or managers.
A hacker is a warrior-poet-artist-scientist, indeed best summed up in Podmasters
link given by EdwardG. Sourcerer is excellent! Also Codesmith and Code Poet.
Hackers are the creative force behind software development. All genuinely new
advances in computer science are the fruit of hackers, even if faceless corporations
end up eventually robbing them of the patents, IP and attribution. Large teams
may create code of immense scale, complexity and reliability, but without hackers
in their ranks it can only ever be a derivitive extension of principles.
The hacker introduces something else important to the discussion,
latent ability, they are whether they know it or not, natural computer scientists
and it doesn't matter if they are formally qualified. I recognise fellow hackers
by their attitude to problem solving.
My self title is 'computer scientist', which is my formal qualification and outlook.
My given title is CTO, which is just an accident of our company being less than 5.
If asked my answer is the same as Abigails, 'I work with computers', and see where it goes from there.