Ask HN: What is a Software Engineer?
As someone who doesn't have an Engineering degree (or even CS for that matter), when would it be acceptable to call myself a software engineer and not just a developer or programmer? I've architected a couple different systems for my own apps, design and code everything, but lack "formal training." I graduated with a degree in Art, but surely a piece of paper doesn't make you a great engineer. So what are your thoughts - what makes somebody a software engineer?
18 comments
[ 2.3 ms ] story [ 60.8 ms ] threadThis normally means broadening your C-S background (think of all the electives you didn't take as an undergrad) and learning skills like formal verification and analysis, project planning, managing quality assurance, formal documentation and designing complex and scalable systems.
They also wouldn't need to know much about scalability or documentation, not yet anyways. Many of us here absorb knowledge like a sponge, and learning stuff not directly relevant to what I am focused on "right now" is a distraction.
Software is a complex system and knowledge of building it is Software Engineering.
if you know how to avoid complexity in software (Software Crisis) you are doing Engineering. But the fact that you are building software doesn't make you a Software Engineer.
These are my understandings.
In my experience, "programmer" refers to the relatively low-level aspects of software production/maintenance. Someone who deals with relatively high-level aspects is either a "software architect" or a "software engineer". S.A. is oriented toward the high-level aspects of the software itself: overall design, choice of platform, technical standards, etc. S.E. is more concerned with things like gathering and managing requirements, ensuring conformity of documentation and code, project management, etc.
So, obviously you have some S.E. experience, but I would have a hard time calling someone a "software engineer" if they had no experience with software projects involving more than one person.
2. I think it would be fair to call yourself a software engineer once you have verified your ability to master multiple languages, and finished multiple projects, as the concepts behind them are the same.
There is no rule that dictates when someone becomes a software engineer. It happens when you're confident enough that you know your stuff, which is subjective. To me, it's when you can learn any language/project, given a reasonable (subjective to other SEs) amount of time.
In my own bubble of reality, if you can point to a design document for your software project that explains what goals your project will meet, what implementation decisions you made and why, and enough architectural information for someone new to your project to have a good chance of jumping in and helping to carry the vision (and fix the bugs), I'd be inclined to think of that as software engineering. Whereas if you drank some Jolt and hammered out some code off the top of your head, I might not be inclined to think of that as software engineering. And of course, there's a whole spectrum of project styles in between.
I completed my degree in an accredited engineering program, but have yet to complete the application for my professional designation (needs 4+ years of engineering experience and an ethics exam) and so my job title is "Software Developer" instead of "Software Engineer".
One notable difference is that as a professional engineer, in some instances, you assume liability for your work and are not necessarily protected by your employer against legal action resulting from a mistake you made.
That said, a lot of companies pay no attention this and use the engineer title without proper designation.
In the mean-time, you do the same type of work with a different title, like "Software Developer" or you can add "EIT" on the end (Engineer in Training).
Then again, you could most likely just call yourself a "Software Engineer" anyway and nobody would hassle you for it. My current employer is the only one that has ever cared, and that is because they have some governmental affiliations.
The only places I know of that don't use are places that also hire 'Engineers' to do 'Engineer' stuff.
A 2% raise instead of a 5% one?
I don't think I've met any "software engineers" since the early 2000s, when bosses started giving programmers the "engineer" title to make them feel better about themselves while simultaneously stiffing them on raises & perks.
People like voidlogic here have actual degrees in software engineering, and I wouldn't have a problem with someone like that using the title. They earned it. But that title has some baggage, at least in my eyes, and in your case you'd probably be better off with "developer". Also, be careful about putting adjectives in front of "developer", especially a particular language or framework because people will pigeonhole you based on that.