Tutorial :Reusable knowledge going from Embedded to Desktop


I'm thinking about switching my path "slightly" by going into desktop development (VC++, MFC, C#, etc) after about 8 years within embedded telecom systems development (C, MAKE, Symbian, 100 compilers etc, etc).

My concern however is that my experience within embedded systems maybe doesn't give me much value when going into desktop development. For example that the domain specific problems and environments I've worked with for so long still doesn't give me much to negotiate salaries with since it bares little worth on the desktop.

I think this place might be good for input on this.

So, the Q:

If you disregard the obvious generic experience on programming language level, give an example of something you have learned working with embedded systems that you could reuse when working in a desktop environment.

PS: I should note that I'm no beginner in the desktop area - since many years back all my hobby projects are focused around desktop development.


Embedded engineers in general tend to be more disciplined when it comes to validating operations and dealing with finite resources.

This can also translate into coming up with an exception handling strategy earlier on.

The quintessential example is checking the return value of malloc. I have seen very few desktop software consistently check it, but it's commonplace in embedded environments.


Discipline of having a clean, well-organized set of source-code is the key skill that translates well to the "desktop experience". -- I've noticed that the embedded projects I've written and picked up are often WAY cleaner than their desktop counterparts.


Many desktop-only developers could benefit from the experience of making a program fit in 128K of FLASH and 32K of SRAM, not to mention communicating meaningfully with a user through only an LED or two and a couple of buttons. Making that a requirement might reduce some of the endemic code bloat in the applications industry. :-)

Even if you don't switch tracks to straight application development, the embedded experience translates well to driver development, as well as to low level utilities and to long running services. All of these are also domains where the disciplines that are nearly second-nature to a successful embedded developer remain valuable.


I was a desktop developer for almost 5yrs before switching to an embedded environment. I find working on an embedded environment more challenging as we have to deal with memory limitations, slow CPU speed, cross-compilation issues, etc.

Having learned a lot of patience, discipline and low-level intricacies, desktop development should be as easy as a walk in the park.


State machines/event driven programming on embedded systems is not that different from event driven programming on the desktop. The depth of experience you have of these coding techniques on embedded systems, especially telecoms embedded systems, should make you a great desktop programmer.

Similarly, your experience with communications protocols should transfer nicely to the desktop. Most desktop applications have some involvement with the network.

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »