The Difference Between A Developer, A Programmer And A Computer Scientist

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

  • http://badalyan.com Alex Badalyan

    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.

    • http://www.skorks.com Alan Skorkin

      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 :).

      • Slobodan Kustrimovic

        Same here, developer :) Great article.

    • anom

      man, this article is sooooo stupid. what about architects? wow, those ones build houses…omfg…you are a dumb ass and an example of why software is so badly done. software architects are the most important part of the whole process

  • Claudio

    … 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…)

    • http://www.skorks.com Alan Skorkin

      I do mention software engineer, towards the end there :)

    • Prashant

      pls telll me more about software engineers and also of programmers

    • Bob

      Software Engineers aren’t engineers, in fact, this is an oxymoron. The person you’re describing is a programmer.

      • http://whitesocksai.blogspot.com SigmaX

        Software Engineers and programmers are very different. Software Engineers use software engineering processes and modeling, and are interest in things like design patterns, management of agile development models, etc. There are whole masters programs in Software Engineering, and textbooks and reference manuals hundreds (even thousands) of pages long — all covering things that the average programmer knows little of.

        Someone who knows a little VBscript can call themselves a programmer. Software Engineers earn the title with a decade (plus) of experience or a graduate degree.

  • http://gboruk.com Gennady Borukhovich

    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?

    • http://www.skorks.com Alan Skorkin

      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.

  • Alamgir Kahn

    And where does Software Engineer fit into this picture?

    • crander

      I see software engineers as 1/2 programmer, 1/3 computer scientist and 1/6 plumber or electrician.

  • http://www.joegaudet.com Joe Gaudet

    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.

    • http://www.skorks.com Alan Skorkin

      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.

      • Vovka

        Software engineers write software that IS predictive :) That is the difference.

        • http://www.thinkbottomup.com.au Daniel Paull

          … ergo the Software Engineer is a myth …

    • Neil

      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.

  • Ahmed

    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.

    • http://www.skorks.com Alan Skorkin

      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.

      • LAW

        I have the same view on this as Ahmed, which is totally different than your view. Most jobs I see have “programmer” on a lower rung than “developer” or “engineer”. From my point of view, a developer/engineer has a degree in CS and can design algorithms and thoroughly understand something, whereas a programmer will hack at something using libraries and patterns developed by others to make things work.

      • SAm

        Pls can send me some cold to make use of it…

  • the_architect

    Ouch!

    • Max

      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.

      • http://www.skorks.com Alan Skorkin

        Yeah I am kinda with you on that one, hence the little dig :).

  • Pingback: Markus Tamm » Blog Archive » Links 16.03.2010

  • http://karmazilla.net Chris Vest

    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?

    • http://www.skorks.com Alan Skorkin

      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.

      • Sam Douglas

        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.

  • Pingback: Dew Dump – March 16, 2010 | Alvin Ashcraft's Morning Dew

  • http://www.johnrockefeller.net/ John Rockefeller

    Good article :) What I like is that the article still works even without the text.

  • http://www.straylightrun.net Gerard

    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.

  • http://gabrielsw.blogspot.com Gabriel C

    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 :)

    • http://www.skorks.com Alan Skorkin

      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 :).

    • http://www.highpowerconsulting.com Jeremy Beckham

      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.

      • http://www.skorks.com Alan Skorkin

        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.

        • http://www.highpowerconsulting.com Jeremy Beckham

          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.

      • http://whitesocksai.blogspot.com SigmaX

        Which is why many people advocate a similarly intense certification for Software Engineers.

  • Pablo Viquez

    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.

    • http://www.skorks.com Alan Skorkin

      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 :).

  • http://karwin.blogspot.com Bill Karwin

    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.

    • http://www.skorks.com Alan Skorkin

      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 :)).

      • http://karwin.blogspot.com Bill Karwin

        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.

  • http://www.christangrant.com Christan Grant

    I think you should a Venn Diagram to this post…

    • http://www.skorks.com Alan Skorkin

      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 :).

  • http://nicholas.piasecki.name/blog Nicholas Piasecki

    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.

    • http://www.skorks.com Alan Skorkin

      Hey, that’s not bad at all. Infact, I like it :).

    • Skip Scheepers

      “developers build the railroad, connecting the world in ways previously unimagined.”

      Using Ruby on Rails no doubt :-)

      Great post Alan!

    • Bob

      “in ways previously unimagined” makes jamming software packages together to accomplish simple tasks with gross inefficiency sound glamorous.

      • http://whitesocksai.blogspot.com SigmaX

        @Bob: Code monkeys do that. It’s the simplest kind of innovation.

        Computer scientists do things that others couldn’t, because they lacked knowledge of the tools or mathematical dynamics of the problem. Operating systems, compilers, data mining tools, distributed and cloud computing — all these are things that simply could not be without computer scientists. They’re too complex for most of us to intuit our way through without immersing ourselves in a specialized, mathematical world.

  • al

    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.

    • http://www.skorks.com Alan Skorkin

      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 :).

      • Zak Hoskins

        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.

  • http://realcnbs.com Vitali Carbivnicii

    Total bullshit :)

  • Denis

    Agreed with nicholas
    CS do research
    programmers code
    developers put all these tools together in previously unimaginable/custom ways.

  • Pingback: Différentes nuances | traffic-internet.net

  • Sonya Lowry

    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.

    • http://www.skorks.com Alan Skorkin

      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.

      • Dalboz

        I have to agree with Sonya here.

        Remember that software engineering is the most immature of all engineering disciplines. We’ve been building bridges and buildings for centuries – chemical and electrical systems to a lesser extent. But modern software development has only existed for about 30 years.

        Add to that the much higher growth rate in software relative to other engineered industries, and you start to understand the lack of widespread adoption of engineering in software. Software engineering is still evolving as new systems come along such as the Internet, distributed systems, clout computing, social networking etc. Many programmers, developers, project managers, etc. will hesitate to adopt a certain architecture or expend resources to engineer a system when there is a very real possibility that all their work will be out of date in 2 years as something better has come along or the industry has moved on.

        So why then is rigorous architecture so ingrained in other industries such as mechanical, electrical and civil engineering? It’s a necessity. Without engineering, projects fall apart. There are no real consequences if your toy Web 2.0 app falls apart – maybe some commercial losses. But what if your un-engineered application was a control system for a nuclear reactor? A building, a bridge, or a train signalling system? Ouch.

        Alan, have you done any research into Facebook’s architecture? There are some brilliant videos and their engineering notes blog which describe it in detail, especially their focus on scalability. Services such as Google and Facebook could not meet their load demands without a scalable architecture. This kind of architecture will not “evolve” out of a consensus – it has to be designed.

        I worry that your attitude of “Architecture is not used, therefore it’s not needed” is counterproductive and will only serve to reinforce the already observed industry-wide skepticism about engineering in software.

        What’s missing from this post is the acknowledgement that people can fit into one of the three categories but still be bad at what they do. Not all programmers “write awesome code”. Not all computer scientists have 31337 math skills. Not all developers have awesome people skills.

        I can only speak on my experience as a programmer — In projects without the discipline of clean, modularised architecture, programmers will often revert to worst practices. If they have the time, they might do some refactoring but in reality, in high pressure environments with looming deadlines and no architecture enforced by management, programmers will be expected to achieve their task as quickly as possible – and this is often at the expense of code quality and thorough testing.

  • Will Rogers

    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.

    • http://www.skorks.com Alan Skorkin

      Hi Will,

      I appreciate your thoughts, however the general opinion from the other comments would tend to disagree with your assertions.

      • Marek

        As if the masses are always right (especially in the blogosphere full off back-patting)….

      • phobox

        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.

    • http://theal.deviantart.com TheAL

      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*

    • http://whitesocksai.blogspot.com SigmaX

      Will,

      I don’t think you understand the difference between what the different people do.

      If you think everyone is a programmer/developer, you are clearly not familiar with the the origins of compiler optimization, relational database management systems, operating system fundamentals, operations research algorithms, P vs. NP (i.e. tractability of problems), data mining tools, computer vision and robots algorithms, the Internet, distributed computing, etc — none of which we could have without the efforts of computer scientists to assemble theoretical foundations and understand specialized domains deeply so they can see how to break new ground.

      Furthermore, there is a huge different between a code monkey, a developer of small software projects, and a Software Engineer capable of handling the complexity and unique problems that emerge with large software projects.

      Standard programmers can go decades without ever hearing about agile software development, UML, design patterns, or reading a book on how to handle customer requirements competently. Software Engineers live and breath the bigger picture.

  • Sukant Hajra

    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.

    • http://www.skorks.com Alan Skorkin

      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 :).

  • John

    I happen to agree with this article – thanks for sharing

  • blake

    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.

    • http://www.skorks.com Alan Skorkin

      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.

  • http://eswhy.com Sean

    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 ;)

    • http://www.skorks.com Alan Skorkin

      Hi Sean,

      You can certainly be a developer with or without a degree and you gotta make time to score chicks :)

  • http://bashingdesigns.com Jonathan

    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

    • http://www.skorks.com Alan Skorkin

      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.

      • http://theal.deviantart.com TheAL

        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.

        • http://www.skorks.com Alan Skorkin

          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 :).

      • http://whitesocksai.blogspot.com SigmaX

        Then again, I know of plenty of “backend” web developers who don’t have much more than a basic grasp on JS and PHP.

  • Dustin

    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.

    • http://www.skorks.com Alan Skorkin

      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.

    • http://whitesocksai.blogspot.com SigmaX

      There’ s a lot of variation amongst academics.

      A lot of CS guys are used to just doing proof of concept, so they tend write things that “just work” and not develop good practice.

      But CSers rub shoulders a lot with Software Engineers (ex. both take their masters classes together) — who live and breath the ideas surrounding clean and well-tested code.

      The labs I work with as a Ph.D. student have, luckily, been influenced by several students who came in with a Software Engineering background. The group proudly develops frameworks that are quite orthogonal (i.e modular & modifiable) and well-documented.

  • Ganesh

    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 :)

    • http://www.skorks.com Alan Skorkin

      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.

  • http://www.thehdblog.net HD

    Haha, true true :)

  • James

    Sorry, Programmers don’t use macs.

    • http://www.skorks.com Alan Skorkin

      Hehe, I knew someone would pick up on that eventually :)

      • Mike

        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!

    • http://whitesocksai.blogspot.com SigmaX

      Computer scientists do.

      A running joke I heard at University of New Mexico is that “we only keep Windows around to do our research on viruses.”

      The prevalence of *NIX amongst computer scientists makes Mac popular too, since OS X is just sexified UNIX.

  • Pingback: Thought Syndrome

  • http://www.drsandassociates.com/ Web David

    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

    • http://www.skorks.com Alan Skorkin

      There was a little discussion about designers further up the comments and yeah developer would probably be the best category.

  • http://theal.deviantart.com TheAL

    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.

    • http://www.skorks.com Alan Skorkin

      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.

  • http://club.freakedout.de Chris

    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

    • http://www.skorks.com Alan Skorkin

      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).

  • zod

    One term you didnt mention is “Software Engineer”, which I would almost say is the combination of all three.

    • http://www.skorks.com Alan Skorkin

      This has been discussed further up in the comments.

  • FHSmith

    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. :-/

    • http://www.skorks.com Alan Skorkin

      That wasn’t meant as any kind of statement, just an interesting photo that I thought fit my description.

  • Henrique

    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.

  • http://club.freakedout.de Chris

    Definitely a front end developer actually although I like to think of myself as an entrepreneur! :-)

  • http://andreasnurbo.com Andreas Nurbo

    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.

    • http://whitesocksai.blogspot.com SigmaX

      In the US these days we’d probably call you a Software Engineer. I tend to think of Architect as a special type of SE, in the upper echelon of managing extremely large projects.

  • Munjid Musallam

    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

  • Pingback: Michel Billard » Blog Archive » I’m a web developer

  • http://henri.tel Henri Asseily

    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.

  • Stu Klingman

    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.

  • John Smith

    You say Tomato and I say Tomaato……

  • Pingback: Who needs math skills?

  • Viktor Skarlatov

    I am a Programmer I believe. I will never be a computer scientist because I have no beard :)

    • http://www.skorks.com Alan Skorkin

      Hehe, nice one :)

  • http://bibakis.com Vangelis

    No they don’t design buildings…
    http://en.wikipedia.org/wiki/Information_architecture

  • http://www.DaveKoelle.com David

    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

    • http://www.skorks.com Alan Skorkin

      Thanks for sharing your thoughts, although we do differ on what actually constitutes a programmer :).

  • Pingback: Hackers and Programmers « Cvet's Blog

  • Pingback: geographika » The Seven Bridges of Königsberg

  • Pingback: [转载]成为优秀的开发者无需数学技能,但成为卓越的开发者需要 | 人工智能&机器人

  • Matt B

    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.

  • http://linearityofexpectation.blogspot.com James BonTempo

    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

    • http://www.skorks.com Alan Skorkin

      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.

  • http://droope.wordpress.com droope

    I feel that I am a script kiddie disguised as a developer :)

  • gshock

    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.

    • http://www.skorks.com Alan Skorkin

      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.

    • http://whitesocksai.blogspot.com SigmaX

      “software engineering in college is bullshit”

      No, software engineering without experience is bullshit. Different. Just being involved in one or two projects during the summer can help to start bringing Mythical Man Month and the GoF to life.

      I’ve known programmers who went 20 years in the “trenches” without ever hearing about UML or development processes. Early exposure at least lets them know they exist, to be learned about when the need becomes evident. That’s a major purpose of college — exposure to things you might not pick up in your cubicle.

      “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).”

      Those “code astronauts” generally make six figures if they go into industry as a starting salary. Just because you don’t understand what they do doesn’t mean they don’t do things that are useful. If you look into bioinformatics, robotics, brain-computer interfacing, data analytics, or operations research, you’ll find a lot of jobs that are looking specifically for Ph.D.’s.

  • Bilal

    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.

  • Neil

    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.

  • Neil

    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.

    • http://whitesocksai.blogspot.com SigmaX

      Only some of them. Most computer science research is closely related to application areas, however. For example, parallel and distributed algorithms are hot stuff these days, along with computer security, machine learning, and others. There is a lot of mathematics in these domains, even outright theorem proving, but it’s not all about beauty — a good deal of it is about *power.*

      Compter science is about breaking new ground — adding to our body of knowledge *and* our abilities, our tools. Engineering (and programming) is the application of old knowledge/tools.

  • Neil

    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.

  • Elias

    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”.

  • William

    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.

    • http://www.skorks.com Alan Skorkin

      Haha, some kind of hybrid of all three :).

  • http://www.vartak.org/ Nash

    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.

  • Pingback: Webs Developer » How To Be A Real Elite Programmer And Make Sure Everybody Knows It

  • Pingback: Sự khác nhau giữa Developer, Programmer và Computer Scientist | Kucku's Blog

  • Pingback: tekcastdesigns.ca » Blog Archive » The Difference Between A Developer, A Programmer And A Computer Scientist

  • http://Clickmobile.blogspot.com Steve

    Which degree program offers you access to become a programmer, developer, scientist.? I guest its cs. So they are all related b.sc&m.sc(programmer and developer) p.hd(programmer, developer and scientiest) cs degree gives u plat form for all even software enginnering. So it depends on where u major and what u do. Am a programmer and also a developer. All to profesional level, holds my b.sc m.sc in cs. Thoug u need some raw knowledge(pratical knowlegde outside school)and certifications, to get the real deal. All will give u what u may need in lyf. Nice article

  • Prashant

    pls telll me more about software engineers and also of programmers i want to learn more so that i can choose one option for me pls tell more about their studies and languages important

  • Pingback: You Don’t Need Math Skills To Be A Good Developer But You Do Need Them To Be A Great One « lei

  • Pingback: 开发人员、程序员与计算机科学家三者之间的区别 « 爱puck

  • Pingback: The Difference Between A Developer, A Programmer And A Computer Scientist | 做人要豁達大道

  • Pingback: 一个人的天空 » 开发人员、程序员与计算机科学家三者之间的区别

  • Pingback: The difference between a Computing Scientist, a Programmer, and a Developer | Jansepar.com

  • Pingback: 开发人员、程序员与计算机科学家三者之间的区别 》CrazyCoder

  • Pingback: 开发人员、程序员与计算机科学家三者之间的区别 « 编程王网站

  • Pingback: 开发人员、程序员与计算机科学家三者之间的区别 - HappyStudy - 乐学博客

  • Pingback: 开发人员、程序员与计算机科学家三者区别 | 否何 - fouhe.com

  • http://www.aowanders.com Adam

    Thank you for this. It was very informative and helped me to try and understand what my course curriculum was actually trying to tell me. I was wondering if you would/could recommend an online school to become a programmer?

  • http://www.rowdylabs.com Michael Langford

    I think the difference between a programmer and developer here is artificial.

    There are lots of glue level developers out there. They never write modules, etc. They only use them. Lots of those guys.

    There are ALSO lots of developers who make lots of libraries, and use them, and manage the whole process by which stuff is cutup and are the ones who deal with people.

    The last two categories feel like they’re trying hard to make exclusive categories where there aren’t. There are two skillsets: Development (the process by which a piece of software is created) and Programming(putting instructions for the computer together in the way that gets a certain outcome).

    You can be good at either while being only middling at the other. But they’re not mutually exclusive, and most people good at one are fine at the other and vice versa. There are corner cases out there were people are really good at one of the two but suck at the other, but those are oddities, not normal paradigms.

  • http://benreinhart.com Ben

    I think you should add a fourth category of “Software Craftsman”… They would be very similar to your definition of Programmer but they apply their knowledge like a developer. They are very passionate about their 9-5 job as well as side projects, etc.

    Maybe only I can see that difference, just my two sense…

  • Pingback: From the web #11 | Jamie Osborne

  • Ryan

    “One is not more or less desirable than any of the others.”

    I dunno, the last guy has two girls beside him… Based on the three photos, I think I’ll call myself a developer. xD

    And what about the “day time programmer” the guy who programs at work and ONLY at work, where its way more of a job than a passion.

    • darchitect

      I’d call the “day time programmer” a “code monkey”

  • Zeeshan Khan

    What about a Coder ?

  • NonHaxors

    You missed “Hacker”.

    Hacker, noun: believes they are a Programmer and can make the next Facebook, but they consistently write ill formatted code which is non documented and of poor logic. They often refer to themselves as a “programmer” thus giving programmers a bad name.

    Web “developers” are worse, they are just HTML hackers who adopt the term “developer” because it gives them more status, or so they think.

    Sadly I think your definitions while good, are more fitted to Utopia or 1994, nether of which exist.

  • http://eikonne.wordpress.com Eb

    So what group would you say a practice such as TDD applies (more) too?

    • Idran

      A developer of course. Test Driven DEVELOPMENT (with Software usually implied before Development).

  • http://blogs.oracle.com/archbeat Bob Rhubart

    “Architect” is indeed relevant. Yes, there is endless debate on social networks about what architecture is and what architects do (all of which parallels the discussion here). But like it or not the word “architect” is part of the lexicon of IT roles. It appears in the job descriptions or job titles of a whole lot of people who make a whole lot of money doing work that matters. Search Monster for the term and you’ll find a very long list of available positions. A 2010 CNN/Money.com poll listed “software architect” as the top job in the US. How much more relevant can “architect” get?

  • Jussi

    I actually agree with you, those are very nice categories that cover most of the people in the industry. Of course they are simplified, but well, they are just categories, and there are Swedish people who are African American, if you want accuracy, you need to have as many categories as there are people. And yeah, some people don’t work under the same title that define them as a coder.

    I think I myself fall in the category of a programmer, who would like to be a bit more of a developer. I love going into detail with code, refining every stupid space to their right place and crap like that. I enjoy making open source modules and making really obscure coding solutions that make other people tear their eyes out, but I just love how they look, and their cleverness. I tear my eyes out when I see my old code or some architect fella’s 50 file 10k-liner class mess that could’ve been a three-liner, and I really enjoy demo scene and all those things that are sometimes perceived as nerdy perversions.

    But on the other hand, I’m pretty open and outgoing person, and I really don’t look like a programmer, I actually look more like a musician, which I also am. But still, I’m pretty much used to just coding alone, so I’d like to develop (program?) my communication skills to achieve better results in team projects. But I’m 22, so it’s not too late.

    A nice article, made me reflect on myself and on the focus of my career.

  • Norm Chan

    You are incorrect. http://ibuilthiscage.com/2008/07/03/developer-vs-engineer-vs-programmer/

    To call “software engineers” a subset of developer is belittling to software engineers. It should be the other way around.

    PS: I didn’t read the comments, so I hope this wasn’t mentioned already.

  • Karthik Hariharan

    My only correction would be “An Architect is just a fancy title for an overpaid developer with zero accountability.”

    • RaghupathySrinivasan

      Ughh – I’m an architect and that pretty much sums up my job description… much as I hate to admit it :p

  • Brennan

    I’m late to the party here. Distinctions like this are mostly arbitrary, is there a use for drawing these lines?
    But going by this system, I used to be very much a computer scientist when I was young – like High School before I could get a significant math background. Over time I became more of a Programmer, focusing more on simple code that works as well as possible. Some of the very clever ways I’ve implemented things in the past would be unacceptable in my mind today for any product (as opposed to an experimental software).
    Lately I’ve been moving toward being a Developer. Building software is fundamentally a team activity. You have to make it easy for the team to collaborate. Using a third party component reduces the amount of code you must design, write and maintain. Although it does come with its own risks, it’s usually the better choice.
    The Architect is there to make sure the team as a whole produces good, cohesive code. The members of a team might all produce great pieces with different mechanics that don’t fit together well, switching between these pieces you have to know each one individually. I see a lot of value in this position, although the title sucks. :)

  • Brian

    I think you did well on identifying the distinctions between the 3. I’d say I am more of a programmer, evolving into a developer. I first started programming BASIC in 1994 when I was 14 and now I like to find new ways to exploit whatever language (Ruby/Java) I’m working with while solving problems I come across in the clearest way possible. I am a stickler for things such as indentation, naming conventions, clean/maintainable code, DRY, etc… I am somewhat of an un-official mentor where I work to the “green” programmers so that they can learn about important topics early on. About a year ago, I started work on my own maven archetype/framework where I integrate Spring (Security), Vaadin/JPAContainer, JPA/Hibernate, et al… but haven’t really hammered at it for a minute. This is eventually going to be one of my flagship projects. Despite the fact that I do not have a degree (I did go to college, though!), I think I’ve done pretty well for myself. I’ve come to the realization that a degree is good if you wanna get rich working for someone else, but you don’t really need one when working for yourself.

  • ash

    I was wondering if the photos chosen to accompany this article illustrate your unconscious ranking of “coolness” amongst computer scientist, programmer, and developer? I mean, look how the developer is flanked by two blondes, the programmer is sitting (alone, might I add) on what looks like to be the standard vanilla table in a dorm commons lounge, and the comp sci dude is rockin’ facial hair à la Genghis Khan and the best head of hair since Schwarnegger’s Conan the Barbarian. Clearly, the computer scientist is the blood-thirsty conqueror of new intellectual worlds. ;)

  • Evan C

    I disagree with your definition of a computer scientist, not wholly, but still enough to post a comment. I also feel you left out one crucial group: hackers, but more about that later.

    Firstly, the computer scientists. There are possibly degrees of computer scientist and I believe that one is the general comp sci grad of which you speak, who generally builds systems themselves to see how they work, rarely use frameworks or boilerplates. They prefer to pick it apart themselves rather than just have it handed to them. They write less emergent code and more building-block code. Then there’s the second degree of computer scientist, the ones who don’t have a bachelor’s or master’s, but a doctorate in comp sci; the sort of person who has dedicated their lives to advancing the actual science of programming. They normally write huge research software like Neural-nets, genetic algorithms and other sorts of software that are purely experimental. Computer scientists also like writing their own languages and toolchains for them. They’re the sort of people who write esolangs like Brainfuck, and some more useful languages like Scala.

    Now hackers. I certainly don’t mean those snot-nosed skiddies that you see in the headlines nowadays, breaking into poorly protected sites with simple SQL injections or brute-force attacks on FTP ports. I’m talking about the kind of people who write cracks and hacks for software that involves disassembling the native binaries and re-writing them in C for the hell of it, or the authors of extremely advanced malicious code like stuxnet. The sort of people who LIVE in assembly, know the entire x86 assembly instruction listing and exactly which one to use. Hackers like ASM, C, and Perl.

    • asdfasdfadf

      I disagree about your definition of hackers. I know assembly, C and Perl (as well as some others you didn’t list), have rewritten disassembled programs, etc. and I wouldn’t call myself a hacker. You’re missing one important part of being a hacker: exploitation. You need to be good at finding security flaws or you’re just another reverse engineering programmer. And I don’t mean using automated tools like Acunetix or some other vulnerabilty scanner. This is the skill most people lack – why there are so many script kiddies.

      • Michael

        What you’re talking about, asdfasdfadf, is not a hacker, but a cracker (read some of ESR’s work, if you’re not sure of the difference I’m talking about). The word you’re looking for is not “exploitation” but “exploration.” Hackers are all about advancing their own knowledge, not breaking into other people’s stuff. That’s what crackers do. And yeah, those skiddies you’re talking about, they’re crackers, albeit rather unskilled ones.

  • http://www.abdelhafid.com abdelhafid

    i’m truly laughing my ass off ….. dude .. that was hilarious

  • Pingback: Hva bør en SharePoint-konsulent være? Utvikler, funksjonell designer eller dokumenthåndteringsekspert? – BEKK Open

  • http://michalisnicolaides.com Michalis Nicolaides

    I like the photos for each category. Ok we have Developers, Programmers and Computer Scientists but I prefer the term Software Engineer though.

  • Heather

    Now why isn’t information like this posted someone on college websites where confused students can get real information? Thanks for the article, VERY helpful.

  • andre

    It’s completely WRONG!

  • Pingback: 开发人员、程序员与计算机科学家三者之间的区别 - 博客 - 伯乐在线

  • Pingback: Vpopulare.ru » Coder vs. Developer vs. Engineer — а какой Job Title у тебя, %username%?

  • AndyC22

    I like to go ahead and sort of disagree with everyone here, on the subject of who is best. Isn’t it true that Developers, Computer Scientists, Hackers, Software Engineers (and pretty much everyone else with a keyboard) all aspire to be truly great Programmers? Such programmers are those stratospherically rare individuals that can do the work of a team of 50 overnight, and entrepreneurs build successful start-ups around.

  • Pingback: A$hraf – a personal blog » Blog Archive » The Difference Between A Developer, A Programmer And A Computer Scientist

  • Pingback: «Программист» — это сверхобобщение [habr.ru] « JTProg

  • Eliza Wright

    I think in part it depends on where you live & work. Hwever, I would assume most of the respondents to this article are based in the US. I live & work in Australia & we obviously use the job titles & terminology a little differently than you, although essentially its pretty close & all of the above mentioned roles fall under a fairly small umbrella. Over here, the term computer scientist has pretty much died the last decade. Bachelor of Computer Science degrees as such are almost unheard of now & have been replaced by a Bachelor of Computing, the course content is still the same sort of thing though. I think it’s because Computer Science used to be a part of university science faculty’s but as the student demand grew so much the last 10-15yrs universities began establishing separate faculties for their computing courses. So as they were no longer were a part of the science faculty they altered the degree title from Computer Science to Computing. Interestingly the Information Systems degrees that are still very common here, which sure are pretty much the opposite of what we do, as in their graduates become specialist users of the programmes & software we spend our lives creating, are all still part of the business/commerce facultiies in our universities…. In recent years though, Bachelor ofComputing degrees which take 3 years have begun to incorporate more aspects of web design than in the past. Quite a few degrees are even offered as a 4 yr combined degree in Computing & Media, as sometimes called or Computing & Graphic Design. It’s also really common for people wanting to go into our industry as “software engineers” to study a Bachelor of Engineering (Software) which takes 4 yrs & the first 2 are made up of the same subjects as every other engineering student. That’s what I did & we weren’t able to select a specialty to study until year 3 so in the first 2 yrs we all had to do basic intro units in all engineering fields like civil, mechanical, aerospace & chemical plus Calculus, Physics & chemistry!!! So I’m a real engineer but qualified in Software & yeah I’m a 27 yo chick too!!! The tern Software Engineer is really common here & I think closest to being a cross of how you describe programming & computer science. I think the longer your career goes on too the more blurred your title becomes because it’s pretty normal to migrate from one platform to the next learning new skills & languages as we go. When I graduated I was more knowledgable about the client/back end side of things but I’ve since i graduated ive picked up PHP, Perl & Ruby. Plus I can of course write XHTML/CSS/JS & am now learning some Ajax & improving my SQL & Java. Ive moved around a few jobs the last 10 yrs so its allowed me to branch out more so I’m not actually sure I fit in any of your little boxes!!!!.

  • Pingback: Phân biệt khái niệm: computer scientist vs. programmer vs. developer | hajimezhao

  • http://thetechmag.net Saad

    lol this is best defined so far, I was always in debate with my colleagues & friends, now I know how I fit in the developer category (technically)… =P

  • Pingback: Phân biệt khái niệm: computer scientist vs. programmer vs. developer « hajimezhao

  • Caspar

    Venn diagram, anyone?

  • Scippie

    I think that the last category, developer, is more and more creating a new category, leaving the catogory almost empty. The new category is called: IDIOTS. They know components and know what they’re for, but don’t have a clue at what it actually is. They don’t know anything about the internals and the only thing they know is that their bosses are even bigger idiots and that they will pay the salary even if they don’t solve the problems.

    • Will

      Lol developer. From my experience, in a team of ‘programmers’, the least experienced is usually the team manager or ‘developer’ in this instance. As a team’s ‘developer’ I would be handling tasks such as hiring, communicating progress in lamex terms for clients etc in addition to what programming I could manage. There is value in a good developer though, e.g a good web dev would be specialized in seo, smm, and design, areas that few programmers specialize, in addition to understanding the web framework.

  • rk

    good

  • Pingback: mdominick.com - One Job, Many Titles

  • Jim Cortez

    At Coca-Cola the defined us by the following at and ascending payscale, each one of these had a 1,2 or 3 level.
    From lowest to highest:
    Developer: Expected to be expert level at one programming language (html, javascript and CSS if web)
    Programmer: Expected to be expert at several different languages.
    Programmer Analyst: Expected to be able to progam applications that integrate between different systems.
    Systems Analyst: Expected to Design Information Architecture to improve business information systems
    Systems Manager: Manages everyone below them.
    Right around the point someone becomes a System Analyst they lose thier ability to program efficiently and walk around with a puzzled, fearfull look on thier face. By the time they reach management they sold thier soul, despise computers altogether and eat their young.

    • rick

      hahaha I think what you said at the end is just one of the funniest things i’ve read in a long time. “despise computers altogether and eat their young” haha so true!

    • Dave

      Two things:
      1) I can’t believe that any real programming happens at Coca-Cola.
      2) Anyone with a title which contains the word “analyst” is not a serious programmer.

  • Brian

    Thank you for your article I found it very interesting but did have one question…Is it true that Developers get all the chicks?

  • ann

    So a developer with an education is usually someone who has a benefactor with big pockets

  • http://twitter.com/SeanFathom Sean Fallon

    I would say I’m more of a developer.. but a Front-End developer ( Although a Designoper sounds pretty epic too). I can definitely create a back-end, but I much more enjoy a user interface. :)

  • http://conservatives.forumotion.net/ Chris “Jesdisciple”

    At my job, we use “developer” to mean anyone involved in the production of an application. Our applications happen to be mobile games, so examples include modelers, artists, programmers (“coders” is the common term here), level designers, etc.

    I don’t think I’ve ever met a computer scientist per your description; the most theoretical programmers I know apply theory to best practices and are very concerned about good code.

    But I might have a fourth category for you. One of my coworkers isn’t crazy about code, but neither is he a people person. He’s interested in designing and building games, and considers the programming an important responsibility of the game designer, because he doesn’t trust anyone else to implement his game mechanics correctly.

  • holger

    Quite cool what you said. I am the 3: a graduated computer scientist worry about “the science thing” and proofs, the “solitary” programmer programming his own projects and ideas for success and a developer for others “business companies”, and I recognize it causes me some lost of identity sometimes: what I am??? Confusion is all around. This post makes it clearer to me the actual situation in my life. TNX (PS: I m looking for a partner as well) ;-)

  • steven

    i think its easier than that, A computer developer goes to a programmer when they need help.

  • Pingback: From the web #11 | Jamie Osborne

  • Davidson

    It’s funny, the first time I read this text, I was just a high school student, and now I do Computer Science,: D, and I totally agree with what was said, but I don’t have so many math skills, lol

  • Pingback: The Difference Between A Developer, A Programmer And A Computer Scientist | Juan Pablo Zamora

  • Pingback: The Difference Between A Developer, A Programmer And A Computer Scientist | skatterBOT

  • Alex

    I am amazed at how many descriptions of what a good programmer is involves what they do in their free time. Does a programmer need to build “the next facebook” in his free time to be considered “a good programmer”? What does a good lawyer do in its free time? Or a bridge engineer, a teacher, or a cop?

  • juan

    i would only said that an architect kick asses more than everyone else, and its absolutely necessary if you want to develop a high profile system (wish someday i could become one)

  • Pingback: Can an excellent programmer be terrible at math | Resume Rewriter Free

  • Pingback: Who is the best upcoming programmer in India | Resume Rewriter Free

  • james shill

    I was on board until I got past the title. I don’t agree with how you define these roles, and furthermore I’m rather disturbed that you didn’t include “Software Engineer” in your list of terms. Also, Karthik Hariharan clearly doesn’t know what a software architect does.

  • Pingback: 开发人员、程序员与计算机科学家三者之间的区别 | z36ker

  • Robiul

    i could not find system analyst, business analyst, software engineer, hackers, coder… ? and what happens if the role requires to travel or work over weekends, may be they just depend on job description and requirement

  • Pingback: Sự khác nhau giữa Developer, Programmer và Computer Scientist | Phạm Phương's Blog

  • http://phillipransburg.com/ Phillip Ransburg

    ha ha ha…this article is spot on. I’m a front-end Dev. and I love it because I’m so much cooler than those Programmers and High paid no accountability arse Front-End Architects. lol

  • Pingback: The Difference between Programmer, Developer,and Computer Scientist | Marjuk's Blog

  • Pingback: Developer, Programer or Computer Scientist | David Hurley