I would like to know the difference between a programmer and a software developer. From what I understand a programmer is someone who codes a solution whereas a software developer finds a solution to a particular problem and then designs the application. Is this correct?
There is more to software development than programming. Calling yourself a software developer is choosing to emphasize that fact.
Isn't the difference between a programmer and a software developer the same as the difference between toilet paper and bathroom tissue--in other words, just a prettier sounding term that looks better on a résumé? :-)
I call myself software developer, because programming is only part of my job. Actually I spend most of the time figuring out what needs to be programmed.
Programmer is what you think you are, Software Developer is what an employment agency thinks you are.
I suspect the distinction is made to emphasize the "industrial engineering" aspect of the trade.
A programmer... programs, but a software developer should also register his actions within an "industrial" process (made of well-defined, easily repeated or reproducible steps) like:
- manage his code in VCS
- have several environments for:
- developing the current version
- debugging the previous one into production
- integrating in advance some new library for a next future version
- check that code against a continuous integration process
and so on.
In short, a software developer thinks of his activity as part of a larger organization, whereas a programmer could just think of his code ;)
That said, the distinction is often artificial and many programmers are well-aware of the aforementioned "organization".
Strongly depends on local/corporative nomenclature and on the context. I'd say "software developer" is very general and doesn't define position, while "programmer" is clearly positioned in corporative hierarchy below "analyst". In many corporations "programmer" == "coder" == "code monkey".
BTW. Wikipedia's entry sheds some light on this:
A programmer is not a software developer, software engineer, computer scientist, or software analyst. These professions typically refer to individuals possessing programming skills as well as other software engineering skills. For this reason, the term programmer is sometimes considered an insulting or derogatory oversimplification of these other professions. This has sparked much debate amongst developers, analysts, computer scientists, programmers, and outsiders who continue to be puzzled at the subtle differences in these occupations.
In practical use they are the same, just like using a meaningless title like "software engineer". So few people can make a distinction that (like most things in natural language) there is no distinction outside of small groups.
On technical grounds a programmer is a subset of a developer. A programmer programs, but does not do the analysis or "real world problem translated to computer solution" part of the process. A programmer has to be told what to create in programmer terms, not human ones ("Create a hash map and based on the name in the customer record" vs "I need to quickly look up my customers by their name").
Personally I use and see used the term "Programmer Analyst" as a more well understood way of saying "developer".
"Software development" sounds cooler than "programming". I guess it's the same as "development" vs "building" in construction. If I talk to a person who doesn't really understand waht stands behind "programming" claiming to be a "software developer" makes me look much cooler.
Sometimes it's expected that developers don't only write code, but also work with requirements and actively participate in other software project activites. Eric Sink discusses this regarding small companies.
To me, it's like the difference between "janitor" and "sanitation engineer".
If I needed something really coded up to save my life, I'd trust the guy who calls himself "programmer" before I'd trust the guy who calls himself "software developer". I think that term has been co-opted by people in software companies who don't really program, but believe that it conveys some status.
The act of programming is a subset of the activities that make up software development.
Programming is the act of writing, compiling, testing and debugging source code.
Software development includes other activities like:
- Requirements definition
- Specification writing
- Project planning
- Creating an installation package
- Troubleshooting problems during installation
- and, and, and...
Therefore a programmer is a person who produces code, usually after some sort of specification. This is focused on a specific functionality.
A software developer is producing a solution for the customer, with a big focus on customer satisfaction.
I think it comes with age. I am now 33 years old, I am a programmer and I am a rusty nail. I'm still sharp, I still hold things together, and I can even be used in new problems.
However, the advent of very high level, interpreted languages made people who actually knew what their code was doing to a computer want to differentiate themselves from the person who read the `idiots guide to (???)' and got hired.
Yet, I remain a programmer. I still find some esteem in the title, especially when I'm able to demonstrate some level of skill (beyond reading the `complete idiot's guide to "foo"') and actually argue with a compiler.
Here come the flames .. here come the flames ...
Just to use Salary.com as a reference...
Software Developer I has a median salary between $50,131 and $61,405
Programmer I has a median salary between $47,025 and $60,800
Just thought that pay was interesting to look at as well because there really isn't that much difference.
However, I think a lot of companies just pick a title that sounds nice without actually reflecting your work. I have been a Software Engineer, Programmer Analyst, Software Developer and Programming Engineer. I think they just sound nice when you say it to other people, haha.
Just to mention another dimension that might not be valid in every country.
Specifically in Greece, sometimes, when I am asked what is my profession, if I say "programmer" then the person asking might not understand I am referring to programming a computer. I have to say that I am "developing software" for them to understand what I am doing exactly.
I am not sure this is the case in other countries. Maybe this has to do with the language as well as how developed the country is.
I'm neither. I've coded for 16 years, and I'm a Software Engineer.
Programmer doesn't have to develop software, programmer can program shaping machines :) I've just realised the possible difference :).
According to this: http://www.npr.org/blogs/money/2009/05/going_into_therapy.html
the job outlook for Software Engineers is much rosier than the outlook for mere Computer Programmers. I wonder what the outlook for Software Architects vs. Designers looks like?
A software developer is familiar with the entire process of software development, not just the programming.
A programmer fulfills spec, much like framing a house, it's hammer and nails.
Programmers can often build a shed without a blueprint, but rarely a house.
Software developers can design a plan, and build it and plan for the lifecycle of the house.
What's the difference between a "cashier" and a "sales associate?" It's all about making people feel better about their crappy job.
Personally, I prefer "code monkey."
It relates to perceptions...
You have...
Programmer, Software Developer, Software Engineer, Analyst
Each of those carries slightly different connotations of what they do and how they do it, depending on local culture.
Just to toss another in the mix, see one of the more interesting articles I've read recently:
Programmer :- One who programs. They don't write specs,No automated test case. They will not help the customers to solve tough problems. They don't know the non coding aspect of the of the product development. Developer :- One who develops. They are the people who will contribute in many ways to make the product successful. They are active in all stages of the software development. Developer involved in many areas in software development such as
Preparing Spec / document Writing code Code reviews Configuration Management Testing Automated Tests Fixing Bugs Solving tough customer problems
The difference is historical, and it's a change of terminology that reflects a real change in the role.
Years ago, before we had fancy languages and libraries and list comprehension and actually needed to worry about things like memory management, there was a long, involved task that consisted of taking a specification for a subroutine and translating that into whatever crude programming language was being used. This is not to say that there were not design aspects to developing software -- there were, and they were just as important as they are today -- but the largest single chunk of a "programmer's" time was devoted to the actual programming task.
Now, the process of developing software still involves all the same steps, but high level languages, frameworks, best practices, widely available rich libraries, and pre-built components have reduced the programming step down to almost nothing. Programming, that is, translating a detailed mental picture of what the computer should be doing into the programming language, has faded to a small part of what a software developer does.
There's an interesting remnant that shows something similar in the military -- the Surgeon General isn't (as far as I know) a surgeon. His/her title is a remnant from when the only thing that differentiated an MD from any random person who knew how to set a broken arm was that an MD performed surgery.
Now, programmer is a poor term to refer to a software engineer because it's like calling a carpenter a nail hammerer -- that's just a part of his job.
Sure, people can invent different meanings of the terms to make it sound like they all refer to different things, but to say that "programmers" and "software engineers" are different types of people or different job roles makes it seem like a reasonable thing to say that your department has 5 programmers and 3 software engineers. It isn't. Maybe we could differentiate based on type of application people write, enterprise vs. web applications vs. shrink wrap, or the preferred language, or UI vs. data layer, but certainly the distinction between "programmer" and "software developer" doesn't capture any of these.
Anyone who says Software Engineering is the same as Software Development/Programming obviously has NO idea what they're saying! Most people that call themselves software engineers are computer science and IT majors that do software Development. Software Development in my book involves tasks such as programming, basic "low level" design, testing, UI design etc. I'd like to make 2 points:
Software Development vs Programming: Back in the day, when people from random majors tried their hand at "programming", you would call them programmers. In today's age when most computer science and IT degrees have a well structured and evolved degree program, calling such people "programmers" carries the wrong connotation and hence "Software Developer" is a more appropriate title.
The Real Software Engineers: Real Software Engineering is as much an engineering discipline as a computing discipline. There are numerous aspects of building software besides programming/coding. Although the work of an ordinary Software Developer may involve several of those same tasks such as requirements gathering, testing, planning, etc. Software Engineering takes all these tasks to a whole new level by applying engineering approaches to these.
Software Engineering vs Software Development: Let's take a simple example of building the user interface for a website. A software developer might put in several days designing a user interface and finally come up with the "perfect design" - green colored notifications for pass, red ones for critical errors and so forth. A real Software Engineer will typically have spent an entire semester in school learning about user interaction and will know that about 8% of males are color blind and most of them are deuteranopic, (AKA red/green color blindness). They will know how the size or relative distance of buttons affects the interaction. They will actually employ a representative sample of end users and carry out usability testing to measure response time for typical tasks, go back to the drawing board, redesign and try to optimize the user interaction based on empirical data.
What else do Software Engineers do?:
Software Process Engineering: Project planning, estimation and managing the Software Development Lifecycle. Agile, lean, Scrum, RUP, etc. are all part of it. Software Requirements Engineering: Getting to know what to build. Keep in mind that two-thirds of all failed software projects had poor requirements.
Software Design: GoF design patterns (O-O design), refactoring, etc.
Software Modeling: Specifications and modeling using formal methods, to model the behavior of systems before actually building them. Very useful for mission-critical systems, concurrency issues and complex business logic.
Software Architecture: High level design of how various components interact, quality requirements, Product Lines, Service Oriented Architecture, Information Systems Design, etc.
Software Testing: Engineering and process techniques applied to testing - regression testing, continuous integration, etc.
and much much more...How do you become a real Software Engineer? :
You have a couple of options. Traditionally, you start off as a computer science/IT or Engineering major and get a Master's/Doctorate degree Software Engineering. You can get it from places like CMU, UTexas, Penn State, etc. Ideally you would want to ensure that you are actually getting a degree in Software Engineering and not just a masters in computer science with a few Software Engineering courses thrown in as a 'track'.
The other option is to get a Bachelor's degree in Software Engineering. This is a relatively advanced and challenging and only a handful of colleges offer this option. Examples would be Rochester Institute of Technology (it is by far the best and also the first to start it), Drexel University, Florida, etc.
There are some other points that about everyone has missed.
it is that a programmer is not much experienced in programming and environments. on the other side, a software developer/engineer is much experienced than a programmer.
Programmer may be a programmer just for fun and might not get any financial benefits from his job while software engineers/developers are professional.