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.
Images by Esthr, Chealion and Pieter Baert
Related posts:
- How To Be A Real Elite Programmer And Make Sure Everybody Knows It
- You Don’t Need Math Skills To Be A Good Developer But You Do Need Them To Be A Great One
- Do You Morph Into A Different Programmer?
- Are You The Best Developer In The World?
- If Obama Were A Programmer His Campaign Slogan Would Be…
- 3 Things They Should Have Taught In My Computer Science Degree
- The Best Way To Interview A Developer
{ 12 trackbacks }
{ 104 comments… read them below or add one }
This is an excellent article. I can’t stop thinking how accurate you were about all three differences.
I’d consider myself as more of a developer (after reading this accurate depiction) with a rudimentary knowledge of a computer scientist.
As I mentioned on twitter, I would consider myself a developer at the moment, but I’d like to fit myself into more of a programmer/developer, which is why I am working on being more of a programmer :).
Same here, developer :) Great article.
… and what about “Software Engineers” ? He is very different from Computer Scientist. He want to “build things that work” and he focuses on the architectural and system aspects of the problem. Usually he is very concerned with finding the optimal solution (where the optimality can be related to different factors, like speed, time of development, and so on…)
I do mention software engineer, towards the end there :)
I have to agree with much of what you say here. In fact, I wrote a blog post that’s similar to this recently: http://bit.ly/axr4Z6. Also, you say that “One is not more or less desirable than any of the others.” I think that depends on what your need is at a given time. Now, the question is, what do you ask someone during an interview to determine which of the 3 categories he/she falls into?
Hi Gennady,
Ah, that is a good question and infact if you can classify people into those three categories and know which of the three you’re looking for, it becomes easier to come up with good interview questions. You know what, you have just given me an idea for a blog post :), so stay tuned, I will definitely write about this.
And where does Software Engineer fit into this picture?
I would disagree on the Engineering comment, at least in so far as Canadian engineers are concerned.
A software engineer is in no way a subset of a developer, they are required (at least in Canada) to have extensive math / science skills. I’d put software / computer engineers somewhere in the grey area between CS and Programming.
Engineers (in Canada) have a huge focus on technical correctness, sometimes glossing over the exact implementation details.
Finally, the statement about google further re-enforces that as I am pretty sure they employ an enormous amount of computer / software engineers.
Otherwise great post.
Hi Joe,
Yeah, I have heard it is like this in Canada, which I guess would put software engineer in a separate category all together if you’re from there.
Having said that, I don’t think the word engineer should even apply to software. As Ahmed pointed out below, Engineering assumes a “predictive” thing while Software is “un-predictive”. We can surely come up with many better ways to describe what we do, but unfortunately the weight of convention and tradition is against us.
I agree with the article on top. Software engineers should be considered as developers. Yes. I know that your software engineers study math extensively but… they just study it. They don’t create their own theories/maths.
Hi Alan,
Interesting subject.
I think there is nothing called Software Engineer/Engineering, ’cause Engineering is a “predictive” thing while Software is an “un-predictive”.
Definitions:
Computer Scientist: Theoretical oriented mind, try to prove thing theoretically and see similarities between things to create a theory so that Developers and Programmers can understand the big picture easy.
Developer: (Senior Programmer) worked on and knows all Software Development Phases (Requirements, Analysis, Design, Coding, Testing, Deployment and Maintenance).
Programmer: Knows how to code without the big picture. Give him a task and he knows well how to do it.
I think with “Agile” advent, there is no need for a programmer any more. You need someone – “Developer” – who knows and get things done in all Development Phases.
Thanks,
Ahmed.
Hi Ahmed,
It is interesting that you see developer as a more evolved form of programmer, I have heard this view before and I see where people are coming from. For me I see programmers as working at a level above (or below depending on how you look at it) developers.
For example, developers use libraries when working in enterprise, but programmers write the libraries that developers use. There are many other examples of this sort. The way i see it there are junior developers and senior ones as well as junior and senior programmers etc.
Ouch!
That little dig against architects made me lol. I hate that terminology. Almost as much as I hate the word “PC” to describe a windows machine.
Yeah I am kinda with you on that one, hence the little dig :).
Engineering is the practical application of science, so software engineers would pretty much fall into your programmer category.
You might subdivide the programmers into engineers and hackers, depending on the rigor of their process. That is, the level of discipline in the applied techniques, and how intentionally they are used. By that definition, the software craftsmen would be a subset of the software engineers. Perhaps not in title or preferred types of organisation, but in their way of working with code.
Does this make sense?
Hi Chris,
I see where you’re coming from, although using your definitions I would have put the software engineer as a subset of developer still but more towards programmer and I would perhaps say that the engineer is a subset of craftsman rather than the other way around. But that is just semantics.
As a computer scientist-programmer who is pretty on software engineering, I’d place software engineering as a mix of all three categories; the capital E Software Engineer is certainly more computer scientist/programmer, generally with a good understanding of mathematics and logic, an understanding of concepts and technologies and the skills to work on a team and get the job done.
Good article :) What I like is that the article still works even without the text.
I’ve never actually thought about the titles of people who do software, though I’ve thought heavily about what is software. Here is my take on that subject.
http://www.straylightrun.net/2009/06/13/what-is-software/
Now that I re-read it, I guess I do talk about titles a bit. In any case, I love this topic. Thanks for the post.
Hi Gerard,
You do indeed discuss titles quite a bit, and I do agree with you regarding the software craft analogy, I’ve written about this before:
http://www.skorks.com/2009/07/in-defense-of-the-software-craftsmanship-concept/
If you don’t live to read and write research papers, you aren’t a computer scientist.
I also view “developer” as somebody with a global picture of the process of creating software, (who also codes) and a “programmer” as somebody which only focuses on the code.
But maybe is just a matter of terminology.
And never call somebody an “engineer” without a degree that proves it :)
Hey Gabriel,
Too true about computer scientists and research papers :). As far as developer and programmer what you say is kinda what I was getting it, but a programmer would be better at coding as a result of the narrower focus (this is an aspect anyway).
I do have a degree that says I am an engineer, but I still wouldn’t call myself one :).
Actually, you should never call someone an engineer with out a piece of paper saying they are a Professional Engineer, unless you also count EIT’s. The bachelor’s degree doesn’t make you an engineer, the professional certification does.
I’d be wary of applying that logic to every certification though, many certification don’t really make you anything, except owner of a piece of paper that says you’re certified in something.
That’s true. The PE and EIT “certifications” aren’t like normal certifications. They are more like passing the bar if you are an attorney. EIT’s have to work under a PE for several years before they can even take the PE exam, so we aren’t talking about a certification like MSCD.
Hi Alan,
Very nice post! I’ve always though of “Computer Scientist” as the guy who comes up with the new pattern idea, works on C/C++ and implements the newest image library with these new set of shadows and vectors.
The developer takes that and build these set of apps that the engineer thinks “rrrr why I didn’t think of it in that way?” the developer uses the patterns in XYZ language and adds it’s own flavor.
Hi Pablo,
That is not a bad way of looking at it, although sometimes computer scientists do come up with that good idea themselves and then we get things like Google as a result :).
Very good blog post and good comments.
My two cents is that a software engineer is a superset, rather than a subset, of developer. Engineering does include designing “blueprints” in addition to putting something together. Programmers program to a specification, whereas software engineers write the specification (and probably also write code too).
Architects in the software field may be even more concerned with designing the solution rather than implementation details. Architects are also frequently concerned with integration of multiple systems, in addition to implementation of any given system. But often, Architect is just a title with greater prestige, trying to make up for the fact that there’s no good career path for software engineers, besides moving into management.
I’ve been told by some ex-Microsoft friends that they use “program manager” as the title for someone who is a general technical person who “owns” a particular project — this is sort of the advanced developer you describe.
Hi Bill,
It is actually pretty sad that in this industry you pretty much have to tack-on architect at the end of your title after a certain number of years in the industry, otherwise you lose a level of credibility and earning potential. I believe the word architect should die as applied to software, it is not necessary and often harmful.
Program manager is an interesting one as well since i’ve heard it used differently in a different context (i.e. a more advanced version of project manager :)).
I agree there’s a fuzzy line between project manager and program manager. I think it’s mostly due to traditions within one company or another. Sort of like “member, technical staff” can mean “entry-level grunt” or “superstar researcher” depending on what company you’re at. But the discussion of job titles may be off topic from your blog post.
I think you should a Venn Diagram to this post…
Hi Christan,
Well, it certainly might help clarify my thinking, but I do have an idea for another venn diagram post, which I was prompted by the reddit comments for this one :).
So, in other words, I think that you’re saying something like the following:
Computer scientists brave the wilderness, what was previously unknown;
programmers carve out the homestead, taming the wilderness;
developers build the railroad, connecting the world in ways previously unimagined.
Hey, that’s not bad at all. Infact, I like it :).
“developers build the railroad, connecting the world in ways previously unimagined.”
Using Ruby on Rails no doubt :-)
Great post Alan!
What is the message behind the pictures? Only developers get laid? Or is it that women can be developers, but not programmers or computer scientist? I once knew a girl who was a brilliant computer scientist. She was very clever and beautiful. She was a mediocre programmer and a terrible developer.
No message, nothing about getting laid, I just chose pics that I thought would best reflect the impression I was trying to convey. And women can be developers, programmers and computer scientists, infact I wish there were more of ‘em :).
Oh course women can be developers, programmers, computer scientists, or a ubermensch mix of all three. As far as what you were trying to portray in the developer pic though, be honest dude. Taken in context with the other two pictures, it would seem to suggest there is a trade off between technical skill and perceived attractivess. There’s a reason for that, with the exception of those ubermensch males and females out there, it is sort of a sociological rule of thumb. I do applaud you though for only mentioning these three groups and not trying to define what “hacker” really means though. It seems like there is never a universal answer for that one; you’ve got to decide for yourself what that means I believe.
Total bullshit :)
Agreed with nicholas
CS do research
programmers code
developers put all these tools together in previously unimaginable/custom ways.
If you are looking at this through the narrow view of application development, then it doesn’t appear to be too far off from reality. The one exception would be that I have come to view the programmers as not exceptional coders who really aren’t concerned with how clean and well-factored it is. They also tend to skimp on unit testing. There is another level of skill above the programmer who is concerned with these areas and is as much or more interested in the quality of the code than in the functionality it enables. If you broaden the view to include development of systems, some of your assertions fall apart. First, architecture is critical when building systems. I’ve seen too many instances where entire components had to be refactored because a developer or programmer didn’t adhere to the architecture and managed to slow parts of the system to a crawl as a result to be convinced otherwise. Because architecture by committee is not efficient and rarely effective, the architect role is not only appropriate, but required. But again, if all you are doing is building applications, it is probably overkill to say you are doing architecture. That would be like an electrician saying he is architecting a light switch. Second, software engineering is a reality. It is the application of a systematic, disciplined, quantifiable approach to development. There was a time when other engineering disciplines didn’t have governing bodies either. To say that without the governing body, they were not engineering disciplines is to put too much power into the hands of organizations of human origin. Whether or not I am practicing a systematic, disciplined, quantifiable approach to my work is not for anyone but me to ascertain.
Hi Sonya,
You must have been exposed to some crappy programmers in your time. Who besides the programmer could possibly be more concerned with the quality of the code?
I’ve see so many instances where the architecture was so completely nonsensical that it is impossible to implement because the architect and developers lived in different worlds. Most of the time in that situation the developers would make it work and the architect would continue living in a dream world.
All architecture happens by some sort of consensus in any non-trivial system.
Technically speaking, Facebook is an application, it is somewhat more complex than a light switch.
Systematic, quantifiable approach to development? I am yet to see or even hear of it.
This article is pointless. A software developer and a programmer are the same thing. Attempts to distinguish the two are pointless. The term “software engineer” is a euphemism that helps us justify our pay. The term “computer scientist” should apply to any programmer or developer who regularly enlists the scientific method. In other words…all of us.
Hi Will,
I appreciate your thoughts, however the general opinion from the other comments would tend to disagree with your assertions.
As if the masses are always right (especially in the blogosphere full off back-patting)….
hmmm sorry Alan, but I have a bachellor degree in Computer Science, and I agree with Will Roger’s comments. and btw, the “general opinion” doesnt mean ur right…. thats called a fallacy. so stop thinking that way.
Your logic has some merit, Will, but try not to take it so seriously. This article isn’t meant to be taken as cold-hard fact. It’s the author’s opinion. A lot of the naysayers here obviously read it, took offense to the distinctions they think the author is making, and then felt upset because they probably fit into one of the areas they think wasn’t glorified in the article. Also, I personally wouldn’t feel comfortable calling anyone a computer scientist unless they studied and/or have a degree in CS. Just feels icky and wrong. *shiver*
I know it’s /just/ a blog post, but the subject is provocative in a way, because you are defining an ontology for us all.
First off, designing a good ontology is often hard. Secondly, the ontologies we come up with are often so biased or flawed that they work against us as much as they work for us.
As an example of your bias, if find it extremely odd that you talk about the computer scientist completely outside the context of academia and publications. There are economic ecosystems that drive the behaviors you’re talking about. A computer scientist doesn’t /need/ well-factored code to write a good paper. Many times that code is just a proof-of-concept or a benchmarking to put some numbers to an idea. My point is that the code is /not/ the primary artifact. It is the ideas behind it.
Context is key. Anyway, I really question the value of defining descriptions for us all. Let’s just focus on good behaviors. Then it’s totally okay for a developer to act like a scientist and vice versa, provided the context is right.
Hi Sukant,
I can’t disagree with anything you said. However you will notice that I didn’t say this was a definitive guide or the one true definition for the terms in the title. It is just my opinion, a snapshot of how I see the world at the moment. Everything anyone writes is somewhat colored by their opinion and experience, wouldn’t you agree?
What you say regarding computer scientist tends to fit pretty well with what I have describe as far as I can see.
But, you’re of course correct it is totally fine for everyone to step out of any defined boundaries, I myself to it all the time :).
I happen to agree with this article – thanks for sharing
I would have to label myself as a “Developer”, but I program. Having “clean code” isn’t alway’s good. You can have clean code, but what if your project doesn’t compile or run? Uh, you’re code is sh*t.
Agreed, clean code is worthless if it doesn’t work, but as far as I am concerned, that is implicit so there is no need to even say it.
This is exactly why I’ve been calling myself a developer for the past few years.
I have no degree.
I am not a programmer in the hard core sense.
I take peoples ideas or designs, and develop them using programming and pre-built software w/ graphics and lots of coffee.
and yes I have time to score chicks ;)
Hi Sean,
You can certainly be a developer with or without a degree and you gotta make time to score chicks :)
What about the web designer that has basic knowledge of the most common languages and aim towards the perfect markup and CSS while implementing snippets of JS and PHP where ever he sees fit? ;P
Hi Jonathan,
If you’re a designer, then your primary focus is design, am I right? You may dabble in code and may be quite good at it, but you would still identify yourself more as a designer. If you were pressed to pick one of the three above, I would say developer would the closest.
I agree. Designers are primarily artists who plan and design website looks/interfaces with tools like Photoshop. They also make constituent graphics and do things like logos, business cards, brochures, image ads, and so on. If you are concerned with markup, and you’re one of those newage semantics-nuts, and you write CSS and even know what PHP looks like, let alone how to use it, you’re a web developer. At the very least you’re a front-end developer.
Front-end web developer sounds like a good title, which means you’re a developer if we take the myopic view of restricting it to the three things in the article :).
I don’t know who’s code you have been looking at, but computing science people with 4 year degrees produce some of the cleanest code ever.
I also get the distinct impression that the writer of this article views himself as a developer, and as such glorifies his description to a point where it is almost god like in comparison to the other fields.
Hi Dustin,
Really, cleanest code ever. I could point you at a number of pages where computer science researchers have posted some code, and it is certainly not the cleanest code ever. More than that, I have a computer science degree and thinking and looking back at my code from years ago (right after I finished uni), it is far from the cleanest ever, infact it is downright embarrassing. You must know some truly brilliant CS graduates :).
I do identify myself as a developer, however I am working hard towards becoming a good developer/programmer mix according to my definitions, focusing more on my programming skills. That should at least tell you that I don’t consider any of them inferior.
I believe I gave pretty balanced descriptions with weaknesses and strengths for each I did also say that none of the three were better than each other.
Correct me if i am wrong, i think these three categories are actually some what of an evolution,
one usually start of as person who is here to prove a point, or like u have said “they don’t just need to know that stuff works, they have to prove it” in a way, at one stage of our life we were like this, we dint care for how our code looked, we just had to prove a point, “yes its possible!!”
But as time goes, i think we tend to shift to being a programmer and start to be more “sober” while writing codes, we try to improve performances (i think thats d quality of a programmer) and things like that, and finally we become a developer, where we are not alone, i think thats when things become more of team game.. once again, this is just a opinion , correct me if u think i am wrong.. :) I am sure some will :)
Hi Ganesh,
It is an interesting way of looking at it, I don’t think most people evolve to or from being a computer scientist starting with programmer or developer. You might evolve into a better computer scientist over time, but if you’re one you’re one from the start so-to-speak.
Haha, true true :)
Sorry, Programmers don’t use macs.
Hehe, I knew someone would pick up on that eventually :)
Yeah we do! I’m typing this up on my Macbook Pro. I run Linux/Windows in a VM if I need to… only as a last resort!
So what do you classify the person who puts a scaled down image into a blog post without actually resizing the image first? ;-)
I think in reality there’s probably something more to this with people that work on just Web code (developer maybe?) vs someone that creates Web software that does more than just a front end website (programmer) and then of course someone that creates offline software (computer engineer?)
That’s just my take on it at least
There was a little discussion about designers further up the comments and yeah developer would probably be the best category.
Good article, and definitely makes one think. The only part I don’t fully agree with is the very small touch on what a software engineer is. I see those as being something kinda halfway between your definition of programmer and scientist, but definitely not a developer. SE is a bit beyond a developer. The UI/UX stuff involved is very developer-centric, but the math and coding involved is a bit above where your definition places them. Just my view, and SE is kind of a job title anyway. An SE at one company may be any of your three personas and different at another.
SE seems to be very dependent on where you’re from, different definitions in different parts of the world, whereas programmers and developers are a little more universal.
Hi,
I studied maths at uni, got a job as a data analyst, worked a lot with Excel, learnt to write macros and then eventually wrote some software for my last employer using VB6 (I know, I know but it was all I could get on rapidshare) and also did some data crunching using MySQL with databases of hundreds of millions of IP addresses. I quit my job in December and I have since been working with Joomla and I am now coding daily in PHP writing extensions and also creating sites using css, javascript and jquery. So which category do I fit into? ;)
Chris
HI Chris,
Haha, you’re difficult to place I guess, what category so you think you fit into? I would say probably developer (front-end).
One term you didnt mention is “Software Engineer”, which I would almost say is the combination of all three.
This has been discussed further up in the comments.
I’m afraid I have to agree with ‘al’. Given the low percentages of women in computer science/IT, and given the pervasive stereotypes in our industry, perhaps it wasn’t the smartest move to put the picture of two women surrounding the ‘cool guy’ under the ‘Developer’ title…especially since there are no women in either of the other pictures. I know you probably meant no harm, but I was immediately miffed. :-/
That wasn’t meant as any kind of statement, just an interesting photo that I thought fit my description.
The only differences are between Computer Scientists and Software Engineers (what you called programers/developers/whatever).
A Computer Scientist make use of computers as a tool, a numerical machine for implementing algorithms. As Dijkstra once said “Computer science is no more about computers than astronomy is about telescopes”.
Software Engineers, much like any other Engineer, solves problems within the domain of software, in the same way a Civil Engineer solves problems within the domain of structures and buildings.
I don’t get your differentiation from programmers or developers or whatever, besides that you’re showing different gradients of software engineers: the ones that have narrower knowledge only in programming itself, and other with a broader set of knowledge (probably in design, UI/UX, psychology, marketing, sound engineering, etc… depends with what he works). The notion of just a programmer, or a “code monkey”, is that this kind of professional is heading to extinction. Lately the best software to come around has been taking an holistic approach, integrating various areas of knowledge from computers to people. Being just a code junkie won’t cut it.
Definitely a front end developer actually although I like to think of myself as an entrepreneur! :-)
Hmm I’m an educated Software Architect :p. That was what the professors wanted us to be, doesn’t say so on the degree though. My degree says I’m a Information Analyst hehe. I think that is the correct translation. Direct translation is Software Knower.
In the education for becoming an architect we were taught project management, psychology, organisations, basic law, programming, development methods, UML etc. Basically the point of a Software Architect according to the teachers were to be a project leader of sorts for developing and integrating software into organizations.
What I call myself? It depends. Don’t really like the word developer it suggest you don’t maintain stuff.
Tony Hoare, Sir Charles Antony Richard Hoare, a Turing Award recipient, recently gave a very interesting presentation titled “The Science of Computing and the Engineering of Software” that is relevant to this discussion :)
You can listen to this presentation at:
http://www.infoq.com/presentations/tony-hoare-computing-engineering
Well actually a computer/software architect is something that’s quite important. It’s the guy/girl who designs the overarching system.
Just like a bridge architect designs the bridge’s lines and function, converses with the structural engineer to validate the possibilities (and come up with new ones), gets shop drawings made by the field experts which are then built by the builders, so do software architects design the global component and interaction architecture, discussing with computer scientists the latest advances and possibilities, then getting key component pieces built by programmers and the glue finalized by developers.
Having been acused of being a Software Architect in the past, I think the title can be differentiated (and defended :-) from the others due to the holistic nature of the mindset and breadth of knowledge required to truly ‘architect’ a complex software system. Choosing the right components, technologies, hardware, network topology, etc. for the system framework, and then clarifying which features of each of these should be used (and why), for which aspect of the system. Simultaneously, they’re collecting brainstorming feedback, use cases, and design considerations, and developing a concise and consistent nomenclature with schemas/taxonomies, in order to enable all of the members of the design and development team to communicate with each other to efficiently instantiate the “progressively rendered” vision of their specific sub-systems, while also ensuring that the integration of these components into a coherent system goes smoothly and predictably with each build… I don’t know what term describes the role better than ‘Architect’.
It’s not an easy role, and it’s equal parts knowledge, experience, and intuition, but when it’s done well, it can be a beautiful thing.
You say Tomato and I say Tomaato……
I am a Programmer I believe. I will never be a computer scientist because I have no beard :)
Hehe, nice one :)
No they don’t design buildings…
http://en.wikipedia.org/wiki/Information_architecture
While there are definitely some overlaps in our opinions, in my experience, “Developers” is another word for “Software Engineers” – people with a breadth of experience, an ability to interact with customers, managers, and other team members, and experience with tools like Mercurial and Jira. Programmers are people who learn how to program from a book in 21 days, and some can create amazing programs, but they are removed from building applications or products.
I’ve followed up on your article with a post of my own, at http://blog.davekoelle.com/2010/03/difference-between-computer-scientist.html
Thanks for sharing your thoughts, although we do differ on what actually constitutes a programmer :).
Alan,
Nice post. I have had several people forward and re-tweet it to me, and I have sent it along to others as well. I have been a designer for many years, and always will be. I am also develop(er)ing into a programmer. I agree with others on the post, there is an evolution that happens (for some, if not most of us). I thought your assessments were fair, humorous, and insightful. Those who vehemently disagree with you probably need some debugging. Oh, and yes… programmers do use Macs. I know many that do, and so do I.
I started out as a programmer. Then I went to grad school for CS. After that I managed a team of developers who implemented my system designs. What does that make me? :P
That all depends on how much programming you do yourself at the moment in the end though it is all about how you see yourself. You can manage a group of people but still see yourself as a programmer.
I feel that I am a script kiddie disguised as a developer :)
there are computer scientists from school are those who, basically, become code astronauts. they never get to write a line of code because they get dazzled by the millions of ways that the job can be done (see architecture astronaut).
then you have the software engineer who, according to the college curriculums I’ve seen, comes out with just being able to write a ‘clear’ spec, but in my experience, should be or deals with the software development PROCESS which includes stuff like implementation of enterprise services like (i.e.) MSMQ, (i.e.) couchDb, continuous integration, bug tracker, (and less like, but importantly) flowcharts, use cases, etc.
then, you have the programmer, who is concerned with the implementation of all of the above and as a senior programmer becomes more involved or aware of design patterns. a good programmer does not really get his dick hard about whether his code looks like the template pattern or a poor man’s template pattern. The good computer programmer knows that first you get it to work and then you refactor (maybe see duct-tape programmer with a grain of salt).
By the above definitions I don’t see how you can be an engineer of the process without being in the trenches programming first. Therefore, software engineering in college is bullshit.
Finally, the architect is the software engineer and computer programmer. he’s gotten to a point that can’t be reached by unless he’s been both a software engineer and a computer programmer. He might be a little below the software engineer in that he defines a pattern that can be a cookie-cutter pattern for the programmers in the team to follow and learn from to follow in similar features throughout the application but he does not give a shit about writing the shit down on paper or graphs or any of that bullshit. As a matter of fact the ‘engineer’ from school should consult with the architect as to whether the shit is plausible or not.
i also need to throw in there that engineering (i might need some backup here) is that which evaluates the tradeoffs between cost, quality, and price to get the job done.
a developer is that dude who works with the business to develop the product from the group up, somewhat akin to a real estate developer. Again, I don’t see how a good developer can justify his existence without being in the trenches first.
You actually make a really good point which should be highlighted, no matter what your title of classification, if you haven’t/aren’t spending time “in the trenches” actually writing code, you words/ideas soon start to be worth very little.
Nice Post.I cannot figure out what I am.Though I survived in the industry for 15 years with titles like Consultant,Senior Consultant,Senior QA Engineer,Junior Manager bla bla.
But to avoid all confusion I have started working toward my PhD.Hopefully that will place me in the class of Computer Scientist but hang on I still will be programmer.Coz I feel without programming I cannot do anything not even my PhD.
Nice Article! I was also thinking of these differences since I was in my 2nd year in college as a Computer Science Student defending it to my fellow students but they don’t seem to see what I meant to tell them.
Superficially, I’m a developer because that’s where I work. But I’m a computer scientist at heart because I love algorithms, theories and the like. I enjoy reading the proofs and their intricacies. I also like imagining my own version of those algorithms and try to prove them. But I would like doing it in full time as a researcher because, in actuality, my personal dream is to create my own thesis or paper under my name discussing a computer science subject. I’m a fan of Alan Turing and several Computer Theorists and their works.
To add, a Computer Scientist is someway of the same level with a pure mathematicians such that they don’t really care whether or not their research can be applied to the real world. They just enjoy the beauty of the theoretical.
I would just like to add to the definition of a computer scientist in the article above. I will use a quote.
“I don’t need to waste my time with a computer just because I am a computer scientist.” – This is a quote from Edsger Djikstra who is one of the most famous computer scientists.
Interesting article. Some people can fit in each one of the three categories at a specific time in their career.
I used to be the “computer scientist” back at the university years, probably because doing the maths was one of the requirements, even if I loved what I used to do.
After I started my first (and current) job I became more of a programmer because of the requirements of my job at that time, and then again, I loved what I used to do.
A few years later, as I get more freedom/promotions in my job, I am turning to be a proud developer :-) I like to write less implementation code and more “foundation code”, leaving the implementation details to the juniors and only helping them out with the “hard” problems :-)
I think many developers follow the same path as I did, and I don’t know if the order in which the three roles are presented was a coincidence or not, but I think for many people it’s the logical order of “evolution”.
Well, i don’t know what to say…In fact my undergraduate title translates to english as “Information Systems Engineer”, what is essentially a mix of C.S (data structures, time complexity, compiler theory, AI) and what i honestly believe is software engineering (patterns, design methodologies). And besides that, i’m currently in the middle of a M.S. in Engineering emphasized in C.S. So i definitely think Software Engineering is very much alive a kicking! :). By the way, i love to code my own things where is posible. What does that make me?
Nice article.
Haha, some kind of hybrid of all three :).
While your analysis is more detailed, I find that the best classification is as follows :
Computer scientist : Develops fundamental algorithms based on mathematics, analyses algorithmic performance for various parameters etc.
Developer : Puts together known algorithms into a method to solve a real-world problem. In essence, applies the fundamental work
Programmer : Takes the Computer scientists and Developers work and translates it into code that will execute on whatever machine is relevant.
As you said, a person may have attributes of any of these roles. This is a simple fundamental research to skill-oriented transition. Compare that to a situation where you have to design a diagnostic test based on DNA sequencing.
There is a scientist, who discovers PCR and applies it to the sequence of interest, and engineer who will design it into a more useful form, and a technician who does it regularly , all three ultimately providing the solution.