How difficult is it to convert from Software Engineer to Embedded Software Engineer? Anyone here make the conversion or the other way around?

I've been a Senior Software Engineer for about 6 years and been in the industry for about 15 years.

I've worked professionally on almost every popular language and framework you can name. Every position has been full-stack developer.

A position opened up that is walking distance from my home and the environment is a nice place to work too.

The location is exactly where I would want to be and the company is a good name to have on your resume.

I'd love to apply and get the job, but I'm not sure what it takes to go from software engineer to embedded software engineer.

closed as off-topic by AndreiROM, Victor S, Seth R, IDrinkandIKnowThings, gnat Jan 4 at 20:42

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions asking for advice on a specific choice, such as what job to take or what skills to learn, are difficult to answer objectively and are rarely useful for anyone else. Instead of asking which decision to make, try asking how to make the decision, or for more specific details about one element of the decision. (More information)" – AndreiROM, Victor S, Seth R, IDrinkandIKnowThings, gnat
If this question can be reworded to fit the rules in the help center, please edit the question.

  • 2
    So what's stopping you from applying? – Dan Pichelman Jan 4 at 15:49
  • I would like to know what it takes to convert from Software Engineer to Embedded Software Engineer? Maybe someone on this site has experience being an embedded software engineer or making the jump. I know how important it is to have a career track and don't want to go from a knowledgeable full-stack developer that I've worked a decade to become only to something that can't translate over. – ConfusedDeer Jan 4 at 15:51
  • Software engineer is a pretty broad term. An embedded engineer is just a type of software engineer. Have you done any kind of embedded software development before? Do you meet the qualifications listed on the job posting? – Seth R Jan 4 at 16:07
  • 1
    @SethR No, I haven't done any embedded software development before. yes, I meet the qualifications. – ConfusedDeer Jan 4 at 16:13
  • 2
    @ConfusedDeer, if you meet the qualifications, then what is stopping you from applying? No one here can tell you if this job is right for you. The only way to figure that out is to get invited to an interview and ask questions. – Seth R Jan 4 at 16:16

I ended up on the embedded side from an EE background (which is actually a fairly common route).

What does "Full stack" mean to you? Right the way from configuring the MAC hardware and the handling the MAC buffer received ISR up?

Have you done much with writing device drivers? A lot of embedded development is that sort of style of code.

Embedded these days is a somewhat broader church then it used to be, but usually it still means working close to the metal, usually in C or similar (Sometimes these days a very restricted subset of C++ is used) in more or less memory constrained environments (Code space of a few kB to maybe a few MB or so, RAM from maybe 64 bytes to a few MB or so).

Assembler is something we use reluctantly, but it does happen on occasion (Usually in the context of interrupt jump trampolines and such).

The embedded crowd tend to expect familiarity with the use of oscilloscopes and logic analysers to debug things, and knowing your way around such things as well as how SPI/I2C/CAN/UART/Modbus interfaces usually work on the wire is more or less expected in many jobs.

Sometimes there are very restricted subsets of languages used, MISRA C for example being a 'safer C' popular in automotive use.

Now these days embedded things are tending to acquire graphical user interfaces and web servers, but still in very memory constrained environments, so the ability to code up a good looking web site that provides a configuration interface in say 10kB or so of html5 and javascript is a useful skill sometimes (No 100+kB javascript libraries here).

At the top end you find the sort of multicore ARM that are used in modern smartphones with all the trimmings (Including Linux!), but there are probably ten 16k ROM, 2k RAM projects for every big system (And the big systems may as well be PCs for all practical purposes).

By all means go for it, it is fun shit to work on, but do expect to be getting down and dirty with the register level stuff and to be reading datasheets and silicon errata on a regular basis.

  • 1
    Right :) For most, "full! stack!" means "Not only can I move buttons around in Xcode, but I know the url of Firebase!!" :-) – Fattie Jan 5 at 14:56
  • @Fattie Ouch! Somewhat harsh. – Dan Mills Jan 5 at 15:06
  • Heh! Just as the other answerer says, there is embedded and there is embedded. I wish I was man enough and good enough to do the latter. But I'm not. – Fattie Jan 5 at 15:11
  • 1
    "Full stack" in my world tends to mean "I can write the device drivers, tcp AND ip stacks (Also the CAN and modbus stacks)", the rest we give to the userland typing pool to deal with. – Dan Mills Jan 5 at 15:17
  • LOL that last phrase gave me a chuckle :) – Fattie Jan 5 at 15:19

There is "embedded" and there is embedded.

A lot of jobs use high-level programming languages, and the main difference to web application development is that you cannot simply deploy updates when you find a bug, either because the device is designed to work offline, or because you need to provide an update mechanism that runs unattended on user devices, migrates user data and gracefully handles power outages at every step of the process.

This basically means lots of testing, writing specifications for every eventuality beforehand, but apart from that it's a normal programming job.

On the other side of the spectrum there are jobs with ridiculously tight hardware constraints. RAM will be the smallest amount of SRAM you can get away with, and there is really no space for anything resembling an operating system. Each vendor has their own toolchain with weird idiosyncrasies, #pragma statements to squeeze out another five bytes somewhere and make sure your 256 byte stack cannot overflow, and accompanying framework full of #ifdef blocks to make it both easy to use and impossible to migrate at the same time. You will be stuck using their IDE with a broken editor that was obviously designed by programmers, not user experience people.

These kind of projects also come with lots of testing, because the same constraints apply, much less testing automation, but at least the debuggers are usually decent and give you access to all the hardware capabilities.

There's not much in the middle between these two anymore. We used to have ARM9 CPUs with 16 MiB of RAM running Linux, but the engineering effort to get this to work is more expensive than the price difference to a quadcore CPU with 1 GiB of RAM for anything less than 10,000 units, and many projects have smaller production runs than that.

  • 1
    You can usually just ignore the IDE and use vi (or emacs if you really must) with a Makefile, the dirty secret is that under the canonical uselessly slow (and generally buggy) version of eclipse (That all the silicon vendors feel the need to reinvent) the real work is usually just a GCC cross compiler and tools. – Dan Mills Jan 4 at 18:06

I'm not sure what it takes to go from software engineer to embedded software engineer.

All it takes is to convince someone to hire you.

If you're motivated, enthusiastic, smart, get things done, aren't a jerk, and have "close enough" experience, you may be able to convince the manager that you're worth training on whatever you're missing.

Remember, you are never hired for the positions you don't apply for.

  • Yes, without knowing the OP's skill set nor the job's requirements it's really hard to say anything other than "You've got to be in it to win it." – Peter K. Jan 4 at 17:34

Not the answer you're looking for? Browse other questions tagged or ask your own question.