So, here's my question... I have worked for Otis Elevator as a software engineer for the last 20 years. I wrote code in C (and PL/M) that was installed on an elevator controller to handle elevator operations - doors, travel, dispatching, etc. To us, this was considered embedded software. I enjoyed the coding, but loved being in the field for an installation, working with mechanics and field engineers, and "fly by the seat of your pants" debugging.
Moving to present day, at 59 years old and 38 years with the company, I was laid off due to my position being eliminated. I am now looking for an embedded position again but am realizing that the embedded world is completely different, and my skill set is lacking.
I would like to stay in this area or at least use the 20-year-old skillset I have to continue my career. The funny thing is that I'm excited to take the next step, I’m just not sure where that will be.
I'm curious to know what you are you seeing as trends these days in the embedded world. I know IoT is hot, as is embedded Linux. I'll need to reschool on something but want to make sure it's a marketable skill and something I can pick up quickly.
Do you have any thoughts you’d care to share?
A great resource that I've found for staying up with the current trends and maintaining/gaining new skills is the O'Reilly book subscription. It was a little pricy, but when you look at everything you have access to, you can really learn a lot for a small price.
When it comes to embedded trends, C language and debugging skills are always critical and lacking. There is a big push to move to DevOps and I see a lot more use of C++. There are a lot of companies struggling to find good embedded programmers right now.
IoT is definitely hot, but once you abstract the connectivity piece, you're still just left with a controller that is acquiring, processing, and acting on data.
The big topics in my mind are: C++, DevOps, Security / TrustZone, low-power
Everyone talks about TinyML, but it's still in the hype phase.
Looking at the related blogs, embedded.com, DesignNews has their Continuing Education Center with free courses. You might consider attending the Embedded Online Conference (I run it, so a bit of a personal plug [sorry, but it's a great resource]).
Thanks Jacob -- I'm passing these responses on to my friend -- I'm hoping he will join Embedded Related and continue the discussion here.
IoT, Embedded Linux, and cybersecurity are indeed the hot trends, but those worlds are large and will require a significant time investment to get up to speed.
Taking his C knowledge and applying it to microcontrollers will be a very short putt. Upgrading to C++ for microcontrollers is a relatively straightforward next step. Next, I'd advise him to learn the DevOps side of embedded development -- unit testing on the host, build pipelines, continuous integration. Be sure to learn git and be very comfortable working with it.
Miro Samek's Youtube course is outstanding and easy to follow along with. A great guided tour to become comfortable with microcontrollers and the different embedded development paradigms.
I would recommend the same as Matthew Eshelman -- find a design firm (or several) that uses contract developers. There are many of them out there, specializing in all kinds of industries.
Thanks Jeff -- I will pass this on -- Max
I don't know that re-schooling is necessary here. Anyone with 20 years experience in C and PLM will be valuable to someone developing embedded systems. I agree that embedded Linux is a big thing, and skills in that would be helpful, and pretty easy to come by. I also think that C++ is a skill to develop. Pretty much what jeffgable said. I think it's also important and not common for people to have experience with hardware debugging and field engineering. If I were looking for a job, I would highlight these types of things. At this stage of career, it might be an idea to switch to consulting or contracting. Depends on temperament and risk tolerance! Point him my way. :)
I drove from Tucson to Phoenix and back twice over the weekend. Lots of really empty space alongside the road, which gave me time to think more about this.
I think the field has expanded (exploded?) in the last 20 years. There are SO many directions you could take. You might ask yourself:
Do I like bare iron or RTOS or Linux (which CAN have hard real time) based systems.
Do I want smaller or bigger projects and companies? Cog in a big machine or visibility to the whole project? This will drive the technologies you invest your time learning.
Do I want a steady job or consulting/contracting job. If the latter don't sell your time too cheaply!
In any event, learning or brushing up on MISRA and other embedded C standards would be a good idea.
Learn at least the basics of Linux if you don't already know them. Raspberry PI is a great and cheap place to start.
Learning some scripting language (Python is my favorite, due to incredible diversity of the applications, hardware and software it works with) is essential. If you are a Windows person, maybe there's a better choice.
Learn a modern source code control system. This means GIT. I HATE git. But I use it, because otherwise I'm swimming against a huge current. Make a github account and become a GIT ninja. Also be a little bit familiar with others like CVS, RCS, and the commercial SCMs just to be well rounded.
Learn and use unit test frameworks. Consider adopting test driven development as your personal software development methodology.
As someone else pointed out, getting some modern evaluation boards and learning the toolset is a good idea. For instance, TI's Code Composer Studio is a behemoth that takes a while to learn, but it supports a huge number of devices from tiny MSP430s to DSPs to AMXXXX SOCs. Same is true with ST's and microchip's IDEs.
I have recently become enamored with the Arduino ecosystem and in particular PJRC's Teensy series of microcontroller modules, which uses the Arduino development environment and libraries along with high-speed ARM processors, in which you can bring up a test application in minutes. Stuff like this used to take days or weeks to put together.
Basically, read everything Max writes, read a little documentation, and learn all the buzzwords (but don't use them unless you are forced to!)
Find out what you want to do, and go for it. Figure out how to make you whole career's worth of experience sound exciting and cutting edge. It might be mundane to you, having done the same job for a long time, but it's likely there are some diamonds in the rough mixed in there with the same-old same-old.
Thanks Jim -- I will do so -- Max
While I was a freelancer (20 years mid-career until a few years ago), I used to order cheap demo boards of things which might be useful to customers, and practice on them. I did a lot with TIs MSP430, and with ST Nucleo boards (or Discovery boards when I had actual customers asking real questions and paying as they're a bit pricier). I owned the Rowley environment, which is a great and affordable environment to work in. You can get a personal license for $150 - or if that's too much while getting up to speed, there are the now useable in-house environments (not really the case years back - but for both of the aforementioned companies there are good free options). For ST, the new environment (which combines their ST32CubeMX alongside the compiler and debugger) is actually quite nice, and comes with loads of examples. (No longer up to speed on TI, as for about the last 10 years Cortex-M has dominated my experience, and I know that the MSP430 has become the MSP432, which is a Cortex-M itself, but came too late for me). The boards either came with built-in JTAG ports, and both companies had reasonably priced JTAG debuggers available as well.
This might enable you to self-teach yourself a lot to get up to speed. I don't, however, know how this might help you get a job doing these things, unless you're able to show demos on interviews?
I agree with Jacob: C skills are still valuable and useful.
Beyond what others note, if considering self employment, look for a firm or two to help bring you work/contracts.
Crazy idea: if comfortable with this, there is a never ending stream of lawsuits, intellectual property disputes, and unhappy business partnerships falling apart, resulting in the need for software and code review experts to give their opinions on the matter. This world values experience, especially if a particular matter has a direct relationship to your experience (they can be picky). On multiple occasions I have been called upon to help review very large C and C++ code bases in a litigation context (among other languages. Sometimes they do not even know the language used when they contract with you). This used to always mean getting on an airplane and sitting in some law firm somewhere for several weeks at a time, but generally pays more than development contracts. Recently was able to perform some reviews remotely, so the law firms are finally starting to allow remote work, thanks to the pandemic. It is an odd world, and watching the lawyers play games with each other (and with you), can be frustrating.
I'm not sure how many elevator related lawsuits are out there, but if you became the "go to expert" for those, your hourly rate would be very high.