Software was not my first career. I started out as a mechanical engineer. While I enjoyed the work, I quickly found that something was missing. You see, I studied mechanical engineering because I loved to tinker. My undergrad studies were fantastic in that regard. The real world was a little different. Working on 'real' projects it was difficult to try new things; it was just too risky. Engineering is a conservative field in that regard.
So in the interest in broadening my professional horizons I enrolled in a multidisciplinary engineering program. The focus was systems engineering and we took courses from the mechanical, electrical, and computer engineering departments as well as some advanced mathematics courses. It was challenging to say the least.
During this program I learned to program in C during some of the computer engineering courses and ended up doing a team project with a software engineer from another company. Our project went well and he asked how long I had been programming. When I told him just a semester he was a little surprised. When I asked why the surprise he quipped that in his experience mechanical engineers were no good at writing software. We worked on a number of projects togehter through several semesters and he ended up asking if I would be intested in a job writing software. After much consideration, I made a career change.
So why did I decide to make the change? Software work offered me the very things that drew me to mechanical engineering. The ability to tinker, to experiment, to rapidly change things, to take some risks... Do I miss mechanical engineering? Sure! I have a lathe, a milling machine, a tig welder, and a plethora of other tools in my workshop and spend a fair amount of time tinkering in 'physical space'.
To that end firmware development is a good fit for me and I especially like working in the space where software meets hardware.
I still do have opportunities to dabble in mechanical engineering professionally and try to keep both skill sets up to date, but recently my professional work has been a little more software centric.
Experienced developing with C, C++, Python, HTML, C#, and Java
Designing and building software for Linux, Windows, or Mobile
Developing/updating drivers for custom hardware
Experienced developing and troubleshooting algorithms for image processing, data modeling, measurement, and signal processing on DSPs and FPGAs
Experienced developing and implementing processes and tools in large multidisciplinary teams
Experienced with software methodologies