Post Merged (destination) from programmers.stackexchange.com/questions/9944/…
3 edited sections for emphasis
source | link

It's up to the company really, as I don't think there's a legal framework to enforce a denomination or another, or at least not that I am aware of and this might vary from country to country (thefor instance, the use of the term engineer"engineer" is actually fairly regulated in France, but there are variants that are allowed for the "abusive" cases).

  • A programmerprogrammer position is usually the one of a professional hired to to produce the code of a computer programa professional hired to to produce the code of a computer program. It will imply that you know how to write codeknow how to write code, can understand an algorithmunderstand an algorithm and follow specificationsfollow specifications. However, it usually stops there in terms of responsibility.

  • A developerdeveloper position is usually considered a super-type of the programmer positiona super-type of the programmer position. It encompasesencompasses the same responsibilities, plusplus the ability to design and architect a software componentability to design and architect a software component, and to write the technical documentationwrite the technical documentation for it (so, that includesincluding specifications) for it. You are able to lead othersable to - at least technically - lead others (so, programmers), but not necessarily a team (there comes the fuzz...)

  • An engineerengineer position would usually imply that you are a developer who has a specific type of a degreehas a specific type of degree, some knowledge of engineeringknowledge of engineering, and is capable of designing a system capable of designing a system (as in: a combination of software components/modules that together form a whole software entity). Basically, you see a wider picturesee a wider picture, and you are capable of designing and explainingcapable of designing and explaining it and separating it into smaller modulesseparating it into smaller modules.

All this is however arguableHowever, all this is arguable, and as I said, there's no legal requirement that I am aware o f in US/UK countriesthere's no legal requirement that I am aware of in US/UK countries. That being said, in France you can only call yourself an "engineer" if you come from an engineering school (recognized by the Commission des Titres d'Ingenieurs or something like that). You cannot say that you have an "Engineer Degree", but you can say that you have a Degree"Degree in EngineeringEngineering" if you have studied a discipline that falls under the portemanteau of engineering and technologies.

Back to the software engineer title... Once, one of my teacher told our class - and rightly so - that there's no such thing, as of today, as so-called "software engineering"there's no such thing, as of today, as so-called "software engineering". Because engineering something (be it a building, a vehicle, a piece of hardware...) means you are capable of envisioning its design and all the phases of its production, and to predict with accuracy the resources you will need, and thus the cost of the production.

The major problem with software is that it is not there yet. We want to aim for software engineering, but we're not there yet, really. Because we have a very fluid and dynamic environment, very variable constraints for projects, and still a lack of maturity in retrospect in our processes. Sure we could say we get better at it (Prove ithighly arguable with hard-data, though. Try...), but we've only been at it since the 60s (earlier projects were actually closer to hardware-only computers, thus closer to real engineering, ironically). Whereas we've been building motored vehicles for more than a century, vehicles in general for a few millennias, and building for even more millennias (and have been pretty damn good at it actually in some part of the world, making you feel like we're ridiculous kids playing with our new flashy software toys in comparison).

We fail to predict deadlines accuratelyfail to systematically predict deadlines accurately, we fail to predict costs accuratelyfail to systematically predict costs accurately, we fail to identify and mitigate inherent and external risks efficiently and deterministicallyfail to systematically identify and mitigate inherent and external risks efficiently and deterministically. The best we can manage to do is produce good enough guesstimatesguesstimates, and accommodate for some buffer, while trying our best to optimize the processes to reduce cycles and overhead.

But see, maybe that's what engineering is. And that's what, when someone talks about a "software engineer", they should think of and aim for.

It's also sometimes just a force of habit and specific to an industrysometimes just a force of habit and specific to an industry's culture and jargon. More positions for embedded software production use titles for software engineers. Mostly because it would probably imply that you will always have to deal to a certain extent with the hardware as well in this field, so you obviously deal with other aspects of the production and of the whole "system" you produce. Not just the bits going nuts inside it. On the other hand of the spectrum, you don't really see the term engineer being used in financial software production positions. It's either because is a mimetic evolution of this industry from one of its predecessors (say, embedded engineering find its roots in automobile engineering, for instance), or because they just want to give more or less credit/weight to a position.

And to be sure to loose everybody in the fog, you'll then find other titles mixing both you'll then find other titles mixing both (like "Software Development Engineer" or "Software Engineer in Test"!), and then other ones emphasizing even more crazy bridges with other domains (think of "Software Architect" and how "software architecture" might be a shameless theft of vocabulary). And keep them coming: Release Engineer, Change Development Manager, Build Engineer (that one goes ffaaarrrrrr out there as well). And sometimes just simply "engineer".

Oh, and that means your new company is either trying to lure you in with a new title or that they don't really care about titles, or that you really are going to have a higher-level position. The only way of knowing is to readingread your job spec, talkingtalk to them and eventually give it a shot and judge for yourself. I'd hope it's the latter option and that you're happy with it (and potentially cash more in on it). ;)

It's up to the company really, as I don't think there's a legal framework to enforce a denomination or another, or at least not that I am aware of and this might vary from country to country (the use of the term engineer is actually fairly regulated in France, but there are variants that are allowed for the "abusive" cases).

  • A programmer position is usually the one of a professional hired to to produce the code of a computer program. It will imply that you know how to write code, can understand an algorithm and follow specifications. However, it usually stops there in terms of responsibility.

  • A developer position is usually considered a super-type of the programmer position. It encompases the same responsibilities, plus the ability to design and architect a software component, and to write the technical documentation (so, that includes specifications) for it. You are able to lead others (so, programmers), but not necessarily a team (there comes the fuzz...)

  • An engineer position would usually imply that you are a developer who has a specific type of a degree, some knowledge of engineering, and is capable of designing a system (as in: a combination of software components/modules that together form a whole software entity). Basically, you see a wider picture, and you are capable of designing and explaining it and separating it into smaller modules.

All this is however arguable, and as I said, there's no legal requirement that I am aware o f in US/UK countries. That being said, in France you can only call yourself an "engineer" if you come from an engineering school (recognized by the Commission des Titres d'Ingenieurs or something like that). You cannot say that you have an "Engineer Degree", but you can say that you have a Degree in Engineering if you have studied a discipline that falls under the portemanteau of engineering and technologies.

Back to the software engineer title... Once, one of my teacher told our class - and rightly so - that there's no such thing, as of today, as so-called "software engineering". Because engineering something (be it a building, a vehicle, a piece of hardware...) means you are capable of envisioning its design and all the phases of its production, and to predict with accuracy the resources you will need, and thus the cost of the production.

The major problem with software is that it is not there yet. We want to aim for software engineering, but we're not there yet, really. Because we have a very fluid and dynamic environment, very variable constraints for projects, and still a lack of maturity in retrospect in our processes. Sure we could say we get better at it (Prove it, though. Try...), but we've only been at it since the 60s (earlier projects were actually closer to hardware-only computers, thus closer to real engineering). Whereas we've been building motored vehicles for more than a century, vehicles in general for a few millennias, and building for even more millennias (and have been pretty damn good at it actually in some part of the world, making you feel like we're ridiculous kids playing with our new flashy software toys in comparison).

We fail to predict deadlines accurately, we fail to predict costs accurately, we fail to identify and mitigate inherent and external risks efficiently and deterministically. The best we can manage to do is produce good enough guesstimates, and accommodate for some buffer, while trying our best to optimize the processes to reduce cycles and overhead.

But see, that's what engineering is. And that's what, when someone talks about a "software engineer", they should think of and aim for.

It's also sometimes just a force of habit and specific to an industry. More positions for embedded software production use titles for software engineers. Mostly because it would probably imply that you will always have to deal to a certain extent with the hardware as well in this field, so you obviously deal with other aspects of the production and of the whole "system" you produce. Not just the bits going nuts inside it. On the other hand of the spectrum, you don't really see the term engineer being used in financial software production positions. It's either because is a mimetic evolution of this industry from one of its predecessors (say, embedded engineering find its roots in automobile engineering, for instance), or because they just want to give more or less credit/weight to a position.

And to be sure to loose everybody in the fog, you'll then find other titles mixing both (like "Software Development Engineer" or "Software Engineer in Test"!), and then other ones emphasizing even more crazy bridges with other domains (think of "Software Architect" and how "software architecture" might be a shameless theft of vocabulary). And keep them coming: Release Engineer, Change Development Manager, Build Engineer (that one goes ffaaarrrrrr out there as well). And sometimes just simply "engineer".

Oh, and that means your new company is either trying to lure you in with a new title or that they don't really care about titles, or that you really are going to have a higher-level position. The only way of knowing is to reading your job spec, talking to them and eventually give it a shot and judge for yourself. I'd hope it's the latter option and that you're happy with it (and potentially cash more in on it). ;)

It's up to the company really, as I don't think there's a legal framework to enforce a denomination or another, or at least not that I am aware of and this might vary from country to country (for instance, the use of the term "engineer" is actually fairly regulated in France, but there are variants that are allowed for the "abusive" cases).

  • A programmer position is usually the one of a professional hired to to produce the code of a computer program. It will imply that you know how to write code, can understand an algorithm and follow specifications. However, it usually stops there in terms of responsibility.

  • A developer position is usually considered a super-type of the programmer position. It encompasses the same responsibilities, plus the ability to design and architect a software component, and to write the technical documentation for it (including specifications). You are able to - at least technically - lead others (so, programmers), but not necessarily a team (there comes the fuzz...)

  • An engineer position would usually imply that you are a developer who has a specific type of degree, some knowledge of engineering, and is capable of designing a system (as in: a combination of software components/modules that together form a whole software entity). Basically, you see a wider picture, and you are capable of designing and explaining it and separating it into smaller modules.

However, all this is arguable, and as I said, there's no legal requirement that I am aware of in US/UK countries. That being said, in France you can only call yourself an "engineer" if you come from an engineering school (recognized by the Commission des Titres d'Ingenieurs or something like that). You cannot say that you have an "Engineer Degree", but you can say that you have a "Degree in Engineering" if you have studied a discipline that falls under the portemanteau of engineering and technologies.

Back to the software engineer title... Once, one of my teacher told our class - and rightly so - that there's no such thing, as of today, as so-called "software engineering". Because engineering something (be it a building, a vehicle, a piece of hardware...) means you are capable of envisioning its design and all the phases of its production, and to predict with accuracy the resources you will need, and thus the cost of the production.

The major problem with software is that it is not there yet. We want to aim for software engineering, but we're not there yet, really. Because we have a very fluid and dynamic environment, very variable constraints for projects, and still a lack of maturity in retrospect in our processes. Sure we could say we get better at it (highly arguable with hard-data, though), but we've only been at it since the 60s (earlier projects were actually closer to hardware-only computers, thus closer to real engineering, ironically). Whereas we've been building motored vehicles for more than a century, vehicles in general for a few millennias, and building for even more millennias (and have been pretty damn good at it actually in some part of the world, making you feel like we're ridiculous kids playing with our new flashy software toys in comparison).

We fail to systematically predict deadlines accurately, we fail to systematically predict costs accurately, we fail to systematically identify and mitigate inherent and external risks efficiently and deterministically. The best we can manage to do is produce good enough guesstimates, and accommodate for some buffer, while trying our best to optimize the processes to reduce cycles and overhead.

But see, maybe that's what engineering is. And that's what, when someone talks about a "software engineer", they should think of and aim for.

It's also sometimes just a force of habit and specific to an industry's culture and jargon. More positions for embedded software production use titles for software engineers. Mostly because it would probably imply that you will always have to deal to a certain extent with the hardware as well in this field, so you obviously deal with other aspects of the production and of the whole "system" you produce. Not just the bits going nuts inside it. On the other hand of the spectrum, you don't really see the term engineer being used in financial software production positions. It's either because is a mimetic evolution of this industry from one of its predecessors (say, embedded engineering find its roots in automobile engineering, for instance), or because they just want to give more or less credit/weight to a position.

And to be sure to loose everybody in the fog, you'll then find other titles mixing both (like "Software Development Engineer" or "Software Engineer in Test"!), and then other ones emphasizing even more crazy bridges with other domains (think of "Software Architect" and how "software architecture" might be a shameless theft of vocabulary). And keep them coming: Release Engineer, Change Development Manager, Build Engineer (that one goes ffaaarrrrrr out there as well). And sometimes just simply "engineer".

Oh, and that means your new company is either trying to lure you in with a new title or that they don't really care about titles, or that you really are going to have a higher-level position. The only way of knowing is to read your job spec, talk to them and eventually give it a shot and judge for yourself. I'd hope it's the latter option and that you're happy with it (and potentially cash more in on it). ;)

2 added 809 characters in body; added 512 characters in body
source | link

It's also sometimes just a force of habit and specific to an industry. More positions for embedded software production use titles for software engineers. Mostly because it would probably imply that you will always have to deal to a certain extent with the hardware as well in this field, so you obviously deal with other aspects of the production and of the whole "system" you produce. Not just the bits going nuts inside it. On the other hand of the spectrum, you don't really see the term engineer being used in financial software production positions. It's either because is a mimetic evolution of this industry from one of its predecessors (say, embedded engineering find its roots in automobile engineering, for instance), or because they just want to give more or less credit/weight to a position.

And to be sure to loose everybody in the fog, you'll then find other titles mixing both (like "Software Development Engineer" or "Software Engineer in Test"!), and then other ones emphasizing even more crazy bridges with other domains (think of "Software Architect" and how "software architecture" might be a shameless theft of vocabulary). And keep them coming: Release Engineer, Change Development Manager, Build Engineer (that one goes ffaaarrrrrr out there as well). And sometimes just simply "engineer".

Hope that helped, though it's not really an answer.

Hope that helped, though it's not really an answer.

It's also sometimes just a force of habit and specific to an industry. More positions for embedded software production use titles for software engineers. Mostly because it would probably imply that you will always have to deal to a certain extent with the hardware as well in this field, so you obviously deal with other aspects of the production and of the whole "system" you produce. Not just the bits going nuts inside it. On the other hand of the spectrum, you don't really see the term engineer being used in financial software production positions. It's either because is a mimetic evolution of this industry from one of its predecessors (say, embedded engineering find its roots in automobile engineering, for instance), or because they just want to give more or less credit/weight to a position.

And to be sure to loose everybody in the fog, you'll then find other titles mixing both (like "Software Development Engineer" or "Software Engineer in Test"!), and then other ones emphasizing even more crazy bridges with other domains (think of "Software Architect" and how "software architecture" might be a shameless theft of vocabulary). And keep them coming: Release Engineer, Change Development Manager, Build Engineer (that one goes ffaaarrrrrr out there as well). And sometimes just simply "engineer".

Hope that helped, though it's not really an answer.

1
source | link

It's up to the company really, as I don't think there's a legal framework to enforce a denomination or another, or at least not that I am aware of and this might vary from country to country (the use of the term engineer is actually fairly regulated in France, but there are variants that are allowed for the "abusive" cases).

That being said the general trend goes like this:

  • A programmer position is usually the one of a professional hired to to produce the code of a computer program. It will imply that you know how to write code, can understand an algorithm and follow specifications. However, it usually stops there in terms of responsibility.

  • A developer position is usually considered a super-type of the programmer position. It encompases the same responsibilities, plus the ability to design and architect a software component, and to write the technical documentation (so, that includes specifications) for it. You are able to lead others (so, programmers), but not necessarily a team (there comes the fuzz...)

  • An engineer position would usually imply that you are a developer who has a specific type of a degree, some knowledge of engineering, and is capable of designing a system (as in: a combination of software components/modules that together form a whole software entity). Basically, you see a wider picture, and you are capable of designing and explaining it and separating it into smaller modules.

All this is however arguable, and as I said, there's no legal requirement that I am aware o f in US/UK countries. That being said, in France you can only call yourself an "engineer" if you come from an engineering school (recognized by the Commission des Titres d'Ingenieurs or something like that). You cannot say that you have an "Engineer Degree", but you can say that you have a Degree in Engineering if you have studied a discipline that falls under the portemanteau of engineering and technologies.

It might be that some countries have a similar distinction, I just don't really know.

Back to the software engineer title... Once, one of my teacher told our class - and rightly so - that there's no such thing, as of today, as so-called "software engineering". Because engineering something (be it a building, a vehicle, a piece of hardware...) means you are capable of envisioning its design and all the phases of its production, and to predict with accuracy the resources you will need, and thus the cost of the production.

This is true of most "true" engineering disciplines. There are fluctuations, of course (the prices of the materials will vary over time, for instance), but there are very finite theoretical models (for design and planning) and empirical models (for pretty much keeping any of the former within accessible constraints) that allow you to predict the termination date of a project and its resource usage.

The major problem with software is that it is not there yet. We want to aim for software engineering, but we're not there yet, really. Because we have a very fluid and dynamic environment, very variable constraints for projects, and still a lack of maturity in retrospect in our processes. Sure we could say we get better at it (Prove it, though. Try...), but we've only been at it since the 60s (earlier projects were actually closer to hardware-only computers, thus closer to real engineering). Whereas we've been building motored vehicles for more than a century, vehicles in general for a few millennias, and building for even more millennias (and have been pretty damn good at it actually in some part of the world, making you feel like we're ridiculous kids playing with our new flashy software toys in comparison).

We fail to predict deadlines accurately, we fail to predict costs accurately, we fail to identify and mitigate inherent and external risks efficiently and deterministically. The best we can manage to do is produce good enough guesstimates, and accommodate for some buffer, while trying our best to optimize the processes to reduce cycles and overhead.

But see, that's what engineering is. And that's what, when someone talks about a "software engineer", they should think of and aim for.

So that seems hardly interchangeable with the simple act of programming routines, or the more advanced act of developing applications.

Still, everything is a matter of trends. Lately it's pretty common to have an horizontal dev team where everybody on the team is a Senior Software Developer (yes, capitals, because that makes us feel special, doesn't it?), without real distinction of age (fair enough, in my opinion) and not so much distinction of skills (uh-oh...) and responsibilities (now that can't be good, apart purely for PR buzz).

Hope that helped, though it's not really an answer.

Oh, and that means your new company is either trying to lure you in with a new title or that they don't really care about titles, or that you really are going to have a higher-level position. The only way of knowing is to reading your job spec, talking to them and eventually give it a shot and judge for yourself. I'd hope it's the latter option and that you're happy with it (and potentially cash more in on it). ;)