What's the difference between a computer programmer and a software engineer?
Some people say I should be a programmer, but I can't figure out the difference from a software engineer. Please help. #engineer #computer #software #programming
Often the terms are used interchangeably, but the US Department of Labor Occupational Outlook Handbook has specific descriptions for both. In the OOH Software Engineer is referred to as a "Software Developer". Often when people say "Computer programmer" they really mean "Software Developer".
The difference comes down to, Computer Programmers write code to a Software Developers specification. Software Developer / Engineer also write code, but they also responsible for software requirements + design, release and deployment processes. As you gain experience as a software developer more senior positions will often have less coding and system design.
Here are "official" descriptions for reference.
"Computer programmers write code to create software programs. They turn the program designs created by software developers and engineers into instructions that a computer can follow."
"Software developers are the creative minds behind computer programs. Some develop the applications that allow people to do specific tasks on a computer or other device. Others develop the underlying systems that run the devices or control networks."
Great question -- and it depends on who you talk to. For some people, the two terms are interchangeable. For some other people, it's similar with a clear distinction.
I'll answer the latter.
Simply put, software engineer or a computer scientist is a person who can address a algorithm, project, problem, or feature making it efficient, scalable, and understandable.
To become a software engineer or a computer scientist, you are the person who can see problem or feature at hand, try to figure out how to fix it, pick the preferred choice in regards to multiple factors such as scalability, efficiency, time, costs, etc., understand the complexity (Big O notation) of your choice that can affect your stakeholders, users, etc., and then implement it properly taking in mind of other systems or modules that it can affect.
This is different from another person who is able to keep the codebase maintained, add a "band-aid", or even just implement instructions from a piece a paper.
See the difference? :)
This question can definitely be answered multiple ways depending on who you ask. Like the previous answers said, most often these terms all mean the same thing. Software Engineer, Software Developer, Computer Programmer, Software Architect are all interchangeable depending on the company or the person. What I would add is that companies almost never distinguish this way. If a company calls their developers Software Engineers, they'll use terms like 'Software Engineer 2,' 'Lead Software Engineer,' 'Principal Software Engineer' to distinguish employees by rank instead of having another 'Computer Programmer' role. At the core though, whether you are a computer programmer or software engineer you will apply to and get the same jobs, so there is no real difference!
One common association some people make is that a computer programmer is someone who has been trained through college and a software engineer is someone who has gone through an engineering program at university. Again this is neither right or wrong, it really depends on who you talk to. If you choose to make this decision then there is a difference between these two careers. Someone trained in programming at college will have much more hands on, applied experience and will understand different programming languages and how to use them. At university, you learn more about difficult programming problems and how to solve them (not with any specific language) as well as how programming languages actually work. So a Computer Programmer in this sense will be better suited for a job where they are writing code to perform a task, and a Software Engineer will be better suited for a job where they are given a problem and need to come up with a practical solution. In general though, the two jobs are interchangeable. A good Computer Programmer should be able to come up with their own solutions to difficult problems, and a good Software Engineer should be able to write code effectively. So in the end they are the same again!
In terms of an educational sense, computer programmer/science programs and software engineer programs tend to differ in terms of the courses that they offer and the type of knowledge they will focus on and prepare you for.
Computer science courses throw you into a lot of programming languages and hands-on projects at the start, as well as give you much more practical knowledge on how to program efficiently. It covers a lot more of the facts and mathematical logics of programming. They tend to fall under the Mathematics faculty.
Software engineer courses tend to provide less programming courses and more theory courses regarding programming structure at a higher level. You also cover other engineering related skills so the courses are more broad and touch on different types of subjects including a bit of management and science aspects. These fall under the Engineering faculty.
Overall, graduating from either types of programs will generally provide you with the basic skills to tackle programming jobs from the same pool of job positions. The difference in the workplace tends to be minor, so it comes down to whether you want to focus more on hands-on programming and delve deep into a program's logistics, or rather get a broader sense of the programming field and develop a wider range of different skills.
Software developer, software engineer and programmer basically mean all the same thing.
"Programmer" is an old term and typically refers to somebody who's simply told what to do and programs it (ie. somebody not very experienced), while software developer/engineer might be somebody who's doing higher-level work, but that's not a universally true distinction.
One exception: in some contexts, "software engineer" might refer to somebody who's a licensed professional engineer (ie. like a civil or mechanical engineer, but in software) and had to pass exams and certifications and do more school. You might see these types of people working alongside non-software engineers (eg. working with aeronautical engineers). Professional engineering certifications in software is only a few years old and they're rarely required for "software engineering" jobs (I've never seen it and I don't think I've ever met a professional engineer in software).
As a young person who's interested in software, I suspect you've realized that the best software people are really passionate about what they do and often have been doing it since a young age. Exceptional programmers tend not to have extensive degrees and credentials and I wouldn't recommend the professional engineer route.
In the early days of Software development, computer programmer and Software Engineer basically meant the same thing. As the industry has evolved they have come to mean different things.
Software Engineer: would be responsible for 'End-to-End' development of a software application. They could/would be responsible for:
- Documentation (Specifications etc...)
Computer Programmer: would typically be responsible for the Implementation (only) of a fully scoped and spec'd application.
You're probably going to get a different answer to this from every person that you ask. As John pointed out, some people use the terms computer/software programmer, software developer, and software engineer interchangeably. Different companies also use different titles. In the two companies I've been at since graduating, I've had the titles "Software Developer" and "Software Engineer" even though the roles were essentially the same.
The term "programmer" is not used as much anymore, and I think it's due to the fact that "developer" and "engineer" encompass a broader set of skills than simply writing code (which is what people typically think of as programming). As the software industry matures and our tasks become more complex, we see more and more titles being borrowed from other engineering disciplines, such as Engineer and Architect.
At the end of the day, I would try to focus on what you are passionate about and not worry so much about the titles.
That's a great question!
I would say that computer programmer is too restrictive a term: when you work at a company, you always do much more than programming.
Before you start programming, you need to make sure you understand the requirements. Unfortunately, you will always find that the requirements you're given are incomplete or ambiguous. You will then need to work with the user or product manager to clarify things. This requires good communication skills and empathy in order to understand a non technical person's viewpoint.
Once you've got the requirements, you need to design a solution, decide which tasks need to be done and distribute the work among your team. This requires planning and organization.
After programming, you need to make sure your application is working properly, and you'll probably need to document your code in order for other programmers to understand it in the future.
As you can see, building applications entails a lot more than just programming. All the extra stuff (communicating, testing, documenting, etc) belong to the field of software engineering. So my advice would be to not just learn programming but also the other skills needed to be an engineer, because you will need them when you start working.
They basically mean the same thing.
A lot of times these 2 terms are used interchangeably. It really boils down to the job requirements.
Programmer could just mean that you are good at certain languages, and can code. You can just focus on being a php programmer or python developer and just know how to do it really well.
Software engineer usually means that language is not so much of a key. All the other skills that you bring along with you are equally valuable. You understand good design principles, architect software, are able to evaluate tradeoffs, come up with solutions to complex problems.
Practically there is no difference in the corporate world. A computer programmer does suggest that the person just develops code all day long, but this is never the case. Programming is just part of the role. You must be able to handle all aspects of the software lifecycle these days including requirements gathering/refining, architecting, designing, creating test cases, testing, documenting, deploying, supporting, etc... This is why the term software engineer is a more encompassing term because it implies all the many roles and responsibilities you would play when creating/modifying software.
The two are somewhat interchangeable, but it could be argued that software engineers are like more like architects and computer programmers are more like carpenters. Engineers and architects design solutions, and programmers and carpenters execute them.
A good engineer should be a good programmer, and a good programmer should be a good engineer.