This reads like a load of pop-IT-psychology nonsense. Take a few terms and adapt them to whatever preconceived notions you have, and whammo, there's your thesis statement.
I've had the job titles "Software Engineer", "Software Developer" and "Computer Scientist" but I was basically doing the same job each time. A job title doesn't cause a fundamental change in behaviour or capabilities. If it does, then you have a whole other major problem.
FWIW, I always refer to myself as a "programmer" socially as it seems to be the simplest form for people to understand.
I think you're misunderstanding the author's intention. He's not trying to describe how the terms are used, he's trying to classify what he sees as more or less distinct disciplines of the field.
He's also not trying to classify types of jobs, but types of people, and how the different types think. I don't know if he's totally right, but it seems like a valuable enough line of inquiry to me, both to better understand who you are and what kind of role is best suited to you, and to understand others in the field and what roles they are best suited to.
But how he assigns the three titles is almost entirely arbitrary. He might as well just call them Type 1, 2, and 3 programmers instead of trying to artificially force distinctions between developer, programmer, and computer scientist.
The problem with that is that linguistic terms are defined over time and can change through how everyone understands and uses them. For example, see the words gay and hacker.
For the category of career types, definitions can only remain constant to an upheld ideal when there's a professional body that enforces what the term means. The professional body may or may not be successful in its efforts. For example, there are a lot of P.Eng folks who dislike it when software guys and network guys call themselves engineers.
Alan writes useful things, but this is pretty much meaningless. He says so himself: "Developer are programmers to a greater or lesser extent. Computer scientists are programmers to a greater or lesser extent."
Why put ourselves into different camps? Why can't I write poetical Rails code during the day and read the latest research papers on type theory at night? Placing ourselves in these artificial camps hinders us from exploring new places and ideas. This is why I'm tempted to call myself an artist or inventor (though to much ridicule) instead of a programmer or developer or computer scientist.
I'd always classified a Programmer as someone who writes code to someone else's spec, and a Developer codes to their own spec
A Programmer is a specific role - write code to do exactly this. A Developer has a broader role - they're often also heavily involved with the BA side of things, overall architecture and DB design.
Developers tend to exist in smaller companies, and are replaced by more specific titles an the company grows. A startup may have a handful of Developers, whereas a larger company will have a team of BAs, a team of DBAs, another team of Architects and sometimes multiple teams of Programmers. In large companies like this, Programmer sits almost at the bottom of the IT food chain, just above Helpdesk
Agreed. In my experience, a programmer would usually work in a team lead by a developer. In banking tech (my domain), a programmer is usually a contracter or offshore. A developer would be a employee and would be onshore.
Largely because it is self-enforcing: most "Developers" don't like to refer to themselves as merely "Programmers", because programming is only a subset of what they actually do. People who just code have no problem referring to themselves as "Programmers".
You also see this reflected in the way companies communicate: companies for whom the people writing code are at the bottom of the food chain will commonly refer to them as "Programmers".
Basically, the term "Programmer" has over time become the IT-equivalent of "grunt".
In South Africa, the terms "junior developer", "developer" and "senior developer" are used in job ads/specs. I haven't seen the word "programmer" for a while here. Maybe here it's people who work with older technology (mainframes etc) who are called programmers, and people who work with modern technology are called developers.
Overall, I think this is a pointless discussion that gets resurrected by blog writers (or are they "authors") periodically, and doesn't add much to the field.
That's easy. A "computer scientist" is a tenured professor^W^Wsomeone who does research in computer science. A "programmer" is someone who writes code for a living. A "developer" or "software engineer" is a programmer who likes business-y titles.
Computer Scientist: A computer scientist is as much a mathematician as they are a technologist
Programmer: A good breadth of algorithmic knowledge is imperative
Developer: They are consummate generalists without any truly deep specializations
Since those are bolded I assume the author means those as the defining characteristics of each group. Yet I see all of those in myself. Depending on the project, some aspects stand out more than others, and some styles (throwing together, designing, refactoring) stand out more than others as well.
I'll just nod my head to the other commenters who don't find this article very useful.
Agreed. I have a background in mathematics and formal computer science, and a great grounding and feel for algorithms, yet I work as a product manager and hack on stuff in my own time; in fact, I think "hacker" was completely overlooked in this list.
I really love the distinction that a programmer programs, writing code and making executables, while a developer builds a product, and a software developer builds a product made out of code.
Programs and products are two different thing in this metaphor. A program is just something a machine can read while a product is something a human can use.
I don't think this article helps us much at all, although I am sure it was written with good intentions.
I personally don't think of a "computer scientist" as being the kind of person who writes very much code at all. Their main concern is with the mathematical properties of various (potentially theoretical) methods and algorithms of computation. This thinking trickles down over time into language design and (very) occasionally into some new whiz-bang algorithm for doing stuff really fast.
A "programmer" (to me) is someone who writes code for a living. They may not know too much about data structures and the like, but maybe they don't need too if they're using a modern language that makes that kind of thing easy. I don't really know what the difference between a "programmer" and a "developer" is, but my job title has "developer" in it and I spend all day programming so I'm probably allowed to be plenty confused about that :-)
Computer scientists get ahead in their careers by writing papers, not by writing software; they often prove things mathematically, but they're not particularly good at writing software that actually works.
For instance, I once got a C program from one of the machine learning masterminds of our time which crashed in the static initializer on 32 bit machines because it allocated a 4GB array that it never used. If you get some software from an academic research group there's a high probability that it won't build or won't run.
"Programmers" and "Developers" both write software for a living and I don't think it's worthwhile making a distinction. Lately I've been using "Web Developer" as a title for myself that more like a "Real Estate Developer" than a "Software Developer" but I'm afraid this is a non standard usage.
My dad is a CPC on the side; He's actually an accountant. One day I caught him programming Excel macros. His office has this spare computer which just runs macros all day long to automate downloading tens of millions of rows of database data from the company oracle database into thousands of Excel spreadsheet files.
He asked me if its possible to improve his system and I said I didn't know where to start.
I was quite surprised indeed, the things office workers can come up with ;).
I've had the job titles "Software Engineer", "Software Developer" and "Computer Scientist" but I was basically doing the same job each time. A job title doesn't cause a fundamental change in behaviour or capabilities. If it does, then you have a whole other major problem.
FWIW, I always refer to myself as a "programmer" socially as it seems to be the simplest form for people to understand.