views:

467

answers:

6

What is the career difference between a embedded software developer and a software developper for the desktop/internet, in terms of career opportunities, career paths, job variation, salary (evolution), etc. Anybody with relevant experience who can compare both?

+4  A: 

I've done some embedded work although i'm primarily a internet software development guy.

In my mind the computer industry is quite huge now, and depending on where you live (Which still matters), the opportunities for both types are probably excellent.

The number of positions is clearly slanted in favour of internet development over embedded and possibly even desktop.

This means a number of things, there is more job variation, and more types of careers and opportunities.

This doesn't mean the salary is better, as there are more developers aiming at this market. (It certainly helps to specialise to some degree at some point.)

In terms of career paths, this more depends on the type of company you work at, rather then the field you work in.

If you want to progress from developer -> senior developer -> technical lead -> enterprise architect you probably need to be employed by a large company, or consultancy firm.

If you want something like developer - analyst/developer -> project manager etc, you might need to firm hop, or again work for a large company.

You might of course be happy coding, and just want to stay a developer at small companies, where your input has more say...

To me, the business knowledge and skills you learn are just as important as the technical ones, so this might mean if you start work as a developer at a non-financial firm, you never ever get into the financial market, as you have no business knowledge of that area. That's something to bear in mind.

To me, I've gone the internet development route, and am quite happy with it.

Bravax
A: 

Embedded experience is helpful but probably can't drop non-embedded development. IE, one project of embedded stuff and then something not embedded. A nice balance will allow you to have more opportunities but if you tie yourself to closely to any one thing you may limit opportunity.

Maestro1024
Given the amount of knowledge and experience required for these two different worlds, is it really possible to switch back and forth between the two, while still being an expert in both?
Steve Melnikoff
A: 

It depends on where you live/work as to the differences. For example, in Oak Ridge TN, which is by Knoxville TN, embedded development is a major part of the jobs, especially DSP work. When you start going to the DSP then it is mostly C/C++ and assembly coding, where you troubleshoot with an oscilloscope.

For working on Windows CE it helps if you learn how to create an OS image, which involves training, and is very different from coding.

The point is that at the lower level of embedded programming it isn't something you can just pick up.

It seems the career path is often that an engineer, electrical seems common around here, learns programming and becomes an embedded programmer, or, if you are a programmer and go into embedded programming you will pick up more as though you were a computer engineering major. This is largely what that degree seems to be focused on, serving as an interface between the hardware and software layers.

If you are doing Android, JavaME or WindowsCE programming that doesn't involve going toward the cpu then you can pick that up, it just requires working with a smaller footprint, more careful coding and generally a smaller framework than the desktop.

It is hard to say which is better as the jobs can be very different, but if you compare computer engineers and programmers you may get an idea.

If you know the embedded DSP level and can design circuits you may find more opportunities, but again, it depends on what is going on in your area.

James Black
+6  A: 

Here are some differences between an embedded programmer and desktop/web application programmer:

Embedded Programmer

  • Get to work with a low level of abstraction.
  • No OS between you and the MCU. And consequently no libraries (.NET).
  • Co-workers can be only electrical engineers.
  • Terrible IDEs.
  • Lower pay.
  • The ability to manipulate the physical world. ( servos, lights, motors, etc ).

Desktop / Web Application Programmer

  • Higher levels of abstraction. With lots of leaks.
  • Less time spent manipulating strings ( libraries and higher level languages ).
  • Co-workers are programmers (with nerdy t-shirts).
  • Better IDEs. ( but not great ).
  • Potentially higher pay.

I still think both careers are crazy fun and not mutually exclusive.

Justin Tanner
Very true about the "terrible IDEs" in the embedded world. Not sure about the pay though; as far as I'm aware, there are fewer embedded programmers, and the specialism requires a lot of training and experience, so I would hope that would be taken into account. Also, electrical/electronic engineers have access to nerdy T-shirts too.
Steve Melnikoff
"No OS" is mostly not true. In most embedded solutions there is some kind of an OS. Also "co-workers can be only electrical engineers" isn't true in the general sense. Similarly re the pay, which is HIGHER for skilled embedded engineers.
Eli Bendersky
One of the reasons for my "lower pay" embedded comment is that I see web apps as having the potential to make more money. You don't see a lot of Google level embedded companies. I hope I'm wrong because I love embedded programming.
Justin Tanner
@eliben: it's hard (for both of us!) to argue this point without any statistics. All I can say is that for ther lower-end microcontrollers (PICs, STM32, ColdFire, etc), it is entirely possible to use them without an OS, and accordingly, none of the projects I've worked on over the last 6 years, using these processors, has had an OS.
Steve Melnikoff
@Justin: embedded systems are **everywhere**, and there are a lot of companies making money from them. At the higher end, there's the iPod, iPhone, mobile phones and PDAs. At the lower end, there's the dozens of embedded processors in your car, plus your set-top box, DVD player, hi-fi, radio, alarm clock, etc, etc. Embedded is an **enormous** market - and it's only going to get bigger!
Steve Melnikoff
+5  A: 

Justin Tanner's answer is very good.

As far as career path, it is not mutually exclusive but I think you need to decide what you want to be, do you want to climb the technical ranks to be a senior engineer or climb the managerial ranks? If you feel the need to climb any ranks you likely need to spend your time at a big corporation. The work is easier, the tools are better, and there is a lot more headroom for advancement or even lateral movement. The sooner you learn the game the sooner you can engineer your climb up the ladder. At a small company jumping from one program director to another, from one product line to another just doesnt happen (unless you are already at that senior engineering level from your past and you just happened to have taken a small company job).

I have done both, I like being closer to the metal, even linux device drivers are so high up and close to applications that I prefer to avoid them. I am an electrical engineer by schooling software engineer by trade, but I see electrical engineers, computer engineers, and computer scientists as all being my coworkers.

I cant read the future otherwise I would just place a few bets on the stock market or powerball and retire. I see what I consider to be embedded skills going away, too many languages and high level issues and too many jobs in that arena for people to bother with bootloaders and embedded controllers for washing machines and toasters. So I see the supply there going down and with it the price going up. Both embedded and application software space requires an active participation to stay on the top of your game and demand a good salary. This means extra curricular activities. Studying on your own when not at work. I see far to many folks at large corporations expecting a company paid for handout for training. And in big companies you can expect that kind of thing, but I wouldnt rely on it as your only source of information for keeping up with the technology behind the job.

My experience was originally aerospace, which is really bad for pay because the sexiness of working on spaceships and airplanes is supposed to be so great. (same goes for game developers). What you do see in that industry is lots of new projects, every couple-three years you start on something new, sometimes from scratch sometimes a prior product with enough modifications. You are not patching the same word processor your whole life. There are other industries like cell phones and game consoles that will see the same amount of new technology hands on. Well aerospace is not NEW techology, its success relies on really old well proven technology, although the test equipment which is also built as a one-off is new technology and as exciting as the thing on the rocket. So embedded or application space I recommend finding a job that does not require the next 20 years to be patching the same word processor that someone else retired and left to you. You may not want to be like a newspaper reporter where every morning you have to start over from scratch, but somewhere in the middle, a new half from scratch product every couple of years. Give that 10 or 15 years and your golden years of employment can be a cushy job in a big corporation giving advice to younger engineers between naps.

dwelch
Oh, but when you leave aerospace for the real world, be warned, there is pretty much zero procedure out there relative to what you are used to. Its all ad hoc. This will be a difficult transition.
dwelch
+1  A: 

Sounds like you are interesting in low level embedded - without an OS or extensive libraries. I am a firmware engineer and I work on devices like this.

As a firmware developer, I spend a lot of time getting hardware to work. The hardware won't work without the firmware and the hardware guys don't know anything about firmware, and even if they do they don't have the compiler/IDE/debugger so they can't do it. So your real job becomes making the hardware work. A lot of times this involevs convincing the hardware engineer the have a problem, which means you do a lot of hardware debugging on your own to prove it to yourself.

My belief is that since embedded requires a lot more low level knowledge about hardware, microcontrollers, assembly language, compiler behavior, interrupts, and other stuff that the typical Comp Sci curriculum doesn't cover, the supply of embedded developers will drop off.

That said, the amount of development for mobile phones device suggest that microcontrollers and development tools will continue to get better and abstract away more and more of that low level knowledge.

Ben Gartner