Difference between software engineer and programmer

Started by
20 comments, last by Steve_Segreto 10 years, 10 months ago

This description on the Internet makes it sound like the engineer play more of a Designer and the programmer plays the role of the Implementer.

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.

Advertisement
Software engineering is a broad field that contains knowledge about programming, but also about architecture, design, testing, planning, configuration, etc... A software engineer is someone who has studied this field.

A programmer is someone who writes code. They may be a software engineer, but they might also just be a hobbiest with a programming book, or a mathematician, or a computer scientist, or an electrical engineer, etc ;)

It used to be the case that companies would hire a small number of "architects" to design programs, and then a large numbe of "programmers" to implement them. In my experience, this structure is very outdated. I've only been in one job that worked this way, and it was horrible (the senior programmers were better architects than the "architect")...

The formal education curriculums that produce "programmers" these days also include a lot of SoftEng/CompSci knowledge, so companies these days usually hire jack of all trades "programmers" that can do both their own architecting and implementing. Large-scale architectural choices are typically made by a senior programmer, rather than some dedicated architect who doesn't actually write code...

(the senior programmers were better architects than the "architect")...

when you say than the "architect" are you referring to an architect that has a background in architecture? when you say "better architects" are you referring to a software architect? So is it because their college degrees are different?

It means software architecture.

I'll try to answer it with a different direction.


There are people who generate code. That is a programmer. It doesn't necessarily take a lot of skill or talent, so it is very broad and inclusive.

There are people who generate systems. These are generally software engineers. Such a system can include code, but it also can include more complex features, such as being easily reused and extended, or being able to handle interdependencies in useful ways. For example, a software engineer might be responsible for a networking component in a single game.

There are people who build systems of systems. These are generally senior software engineers, software architects, or principle programmers. The things they build are more than a single system, they build an ecosystem of many different things going on at the same time. They are generally the leaders on the team who know how all the systems work together.

It means software architecture.

I'll try to answer it with a different direction.


There are people who generate code. That is a programmer. It doesn't necessarily take a lot of skill or talent, so it is very broad and inclusive.

There are people who generate systems. These are generally software engineers. Such a system can include code, but it also can include more complex features, such as being easily reused and extended, or being able to handle interdependencies in useful ways. For example, a software engineer might be responsible for a networking component in a single game.

There are people who build systems of systems. These are generally senior software engineers, software architects, or principle programmers. The things they build are more than a single system, they build an ecosystem of many different things going on at the same time. They are generally the leaders on the team who know how all the systems work together.

Is there a CS course or a book tailored to be able to build systems of systems? When you say things going on at the same time, are you referring to concurrency? Or is building systems largely a skill? The closest I have to building a system is for a hobby game project that has a simple health system that is scale able with the character maximum life value and a simple inventory that contained one item along with it in a arcade shooter game

The "system" isnt just the software. The system might include aspects of the environment where the software works. Say, If you have a software for managing a depot, your system might not only be the piece of software you have to develop, but also the bigger system, the entire depot, who might depend on other systems, say, administrative sector, maybe there is another piece of software for sales that needs to interact with the depot's software, or even maybe a non-software part, like the dudes who work in there and do specific tasks that the depot system has to control.

A part of Software Engineering is system's engineering and system analysis. Which deals with how to tackle these kind of things. There is also project management, like deciding on what development technique fits best with the software you have to develop, do you need a non-functional prototype working in two weeks to get the client's feedback on it? Or you can present it on a few months with some functional parts already implemented? How many people you got? Have they worked on a similar project before? If its the case, can you reuse some of that code on this project? Does the client has the hardware needed to run the software you're developing? And a big etc.

Its a big topic, and entire degrees based around it, and all of them can teach it from different perspectives.

"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

My journals: dustArtemis ECS framework and Making a Terrain Generator

Take a look at the answers to a similar question on Programmers StackExchange:

What are the key differences between software engineers and programmers?

http://programmers.stackexchange.com/questions/4951/what-are-the-key-differences-between-software-engineers-and-programmers

I wouldn't pay too much attention Dijistra quote :D It's an example of the quarrels that go between scientists and engineers (also engineers vs artists).

Its your typical "Well, with only fancy theory you won't build the stuff we're building!" and then "But without the "fancy theory" you wouldn't have stuff to build!" Or on more simpler terms, the "practical stuff vs theoretical stuff" debate.

Its a bunch of nonsense really. They're all high up in their clouds looking down their noses...

"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

My journals: dustArtemis ECS framework and Making a Terrain Generator

I remember reading a whole youtube page full of comments arguing if the Linux Kernel IS the OS or simply a part of it.

I agree with TheChubu, those two words are so related, they are almost interchangable. They add nothing to any conversation, calling a Programmer a Software Engineer makes no difference whatsoever. Better yet, the usage of the words tend to change with time and culture. In my Region for example, you tend to call Programmers with a Bachelor/Master in Computer Science a Software Engineer.

IMO there are better ways to waste your time than with irrelevant word definitions.

Project: Project
Setting fire to these damn cows one entry at a time!

Is there a CS course or a book tailored to be able to build systems of systems? When you say things going on at the same time, are you referring to concurrency? Or is building systems largely a skill? The closest I have to building a system is for a hobby game project that has a simple health system that is scale able with the character maximum life value and a simple inventory that contained one item along with it in a arcade shooter game

There are some books dedicated to working with systems, but the skill is developed by many years of experience. It is also a trait, some people just happen to be really good at understanding and improving complex systems.

In a sufficiently large group of programmers, there are some who are 'go-to' people that everyone asks for help when something goes wrong. It doesn't matter if it goes wrong in networking, graphics, audio, UI, AI, resource management, concurrency, or anywhere else; people still say "Hey Bob, could you help with this?" These are the ones who tend to know how every system works and how they all work together.

This topic is closed to new replies.

Advertisement