More than 15 years ago, embedded software engineers were often electrical engineers who understood the low-level hardware, wrote code in assembly or C language to get the system in balance with its real-time requirements. An embedded software engineer had to understand not just the hardware, but also software.
Current embedded systems have started to become extremely complex. Nowadays many teams have moved to complex 32-bit architectures which include a few peripherals for sampling sensors and communicating, hardware for USB, external memory, DMA, TCP/IP, Bluetooth, and limitless options of other peripherals that would take a developer perhaps years to truly master.
The big IoT push to connect every device to the internet is causing a huge demand for embedded software engineers. Currently HR department cannot find enough embedded software engineers for their existing projects and face two options to rely either on application developers or train new engineers from scratch.
The traditional embedded software engineers are still required to bridge the gap between the hardware and the new embedded application developers.
Jacob Beningo
To answer this shortage of low-level programming skills, microcontroller manufacturers are in a big push to provide developers with high-level software frameworks and tools that abstract out the low-level hardware. Using these set of tools embedded software developers and application developers can easily write their application software at a higher level, which in turn leads to decreased costs and quickest time to market. It also makes life much easier for programmers. All they need to know is how to call an API to make the hardware do something, with zero knowledge why and how it does, how to do real-time debugging or check the registers to find a problem. This shift in skills set is not necessarily a bad thing. The same shift already happened in the mobile market, where working at a high level produced rapid innovation allowing teams that might otherwise have been lacking in critical skills to be successful.
As we move towards ubiquitous computing, almost everything from a toaster to a coffee maker is powered by an embedded system and if you are an embedded engineer, you ought to rejoice at the thought of the sheer number of opportunities open to you.
Continuous learning became a must-have attitude in the world of dynamic technology. The best place to learn is at work, by putting your knowledge into practice. However, even in the most dynamic workplaces, it is easy to get too accommodated by becoming an expert in some field while ignoring new trends. Thus, to be constantly learning, you should either join new or existing projects or create your own pet project and share it on GitHub or other open source platforms.
These are seven skills that every embedded engineer must have:
Whether you are an assembly language programmer or design embedded circuits, you must have in-depth knowledge in your vertical. The more knowledgeable you are the more value you bring and the less dispensable you become. Subject matter experts are invaluable. Build your knowledge base and your reputation as the person who holds the knowledge. You will establish a reputation for yourself, your team and your company while making yourself indispensable.
Companies these days are looking for engineers who understand the hardware and software aspects of any design – even embedded systems. You don’t have to be able to design the board and write the software, but you should have more than a fleeting knowledge of the other while working with one.
Whether it’s the Internet, a colleague, industry publications, or focus groups, online forums. Learn. Ask questions. Respond to questions you can answer. Take it all in. Be active. Aside from growing your knowledge, you will grow your social and professional network. Don’t use Facebook, Instagram, Twitter, Quora or LinkedIn just for social interactions and entertainment. Maybe someone in Facebook group has already figured out the problem you are facing with your Arduino board. Take advantage of all the open-source stuff out there! Be a part of an online community or a forum related to your domain, and learn exciting new things that will help you improve as an embedded system engineer.
The gigantic monolithic software of yesterday is gone with the wind. Every single day tech trends are changing the rules of the game. Knowing inside and out of C language won’t be enough! To stay relevant, you need to track and learn the latest technology.
If your knowledge about the latest processors, security threats or MCUs are nil, you are in deep trouble. To be a good embedded systems engineer, you need to stay attuned with the latest from the world of relevant technologies. Start tinkering with the latest tech on the market as soon as you can get your hands on them.
You are not only an embedded systems engineer but also a professional. Most of the time you will be working to accomplish a specific goal with a group of individuals. You will need to cooperate and coordinate your daily routine tasks always with your co-workers. And, while you may not be the project manager, there may be one assigned to your team. Understanding the process, steps and approach will only benefit you in the long run. Project management and soft skills will help you deal with the various aspects of corporate life.
You might be a great engineer with exceptional designing, coding and assembling skills. But even with you superhero-like skills, you will come across situations when your design or coding doesn’t work. Whether it’s a faulty IC or a defective component, the bottom line is the issues need to be resolved. Having good troubleshooting skills will pay back in spades. If you are able to identify, isolate and fix the issues – you will save yourself time, effort and possible embarrassment. Troubleshooting isn’t always for the experts. There is a methodology you can use to help you guide through the process. It will take time and patience, but the effort of perfecting your troubleshooting skills is definitely worth it.
Your thoughts are your most valuable asset. What makes a good developer different from an average coder? Creativity! To design a functional system that stands out from the rest, you need to imagine it first. Your creativity will help you on your journey in becoming a good and successful embedded systems developer. Creativity isn’t necessarily something you have or don’t have – it is something you can learn, a skill you need to practice and practice every day. If you don’t use it, you will lose it.