With demand for IoT devices continuing to soar, there is a real danger of running out of the talented people required to design, test and build them.
So many IoT articles begin with the prediction that there will be tens of billions of connected devices in the world within the next five years or so.
While that might be true from a market potential perspective, there are some elephants in the room that may prevent us getting there.
Proper security is one, but we’ll take that another day. What I'll focus on today is whether there is a sufficient supply of engineers and, as is most in demand today, software and firmware developers to meet this anticipated growth.
Embedded skills take time
Embedded software development in general is pretty hard, but doing it well takes years of learning and experience. Specific skills in the dominant languages of the field, C/C++, are required.
C/C++ give you the ability to get as ‘deep and dirty’ into the hardware as you like, allowing almost complete freedom on how you construct your system and its relation to the hardware.
With this freedom comes risk. If you can bend it any which way, you can also break it. That’s why true embedded skillsets take years of experience to avoid potentially catastrophic, but not uncommon, mistakes such as race conditions and memory leaks.
New graduates can enter the world of app development and other web industries much more easily and usually become productive in a shorter period of time. This is largely because the technologies and frameworks in those industries are more ‘sandboxed’ and sit atop operating systems that make catastrophic error less likely.
Not a compelling offer for talented students
Additionally, embedded development does not sit at the top of the tree salary-wise. Unless students of Computer Science have a real passion for making things that work tangibly, chances are they will head for the bigger bucks in the world of web-based and mobile app development.
University courses in Computer Science and Engineering are steadily having fewer and fewer specialist embedded courses. In fact, some Computer Science courses no longer teach C/C++ at all.
It is a real shame as building systems that enable real things to work is incredibly rewarding. But not only is it a shame, it is potentially a real problem for the entire IoT industry.
How to solve the problem
While there are a number of solutions, none of them will offer a quick fix.
Firstly, the industry could do a better PR job along with a salary hike to attract more talent. That’s going to take time, and even if it does happen, there’s a delay period in turning the ship around.
A second option, which may happen naturally, is that embedded moves more in the direction of the web industries.
A performance hit, but a solid foundation
This often means certain compromises at an engineering and performance level. But there is the implicit assumption that embedded development in C is superior. That's true if it is implemented correctly, and that's not always the case.
The higher level languages have well-known and thoroughly tested frameworks for many functions, including security, memory management and housekeeping, as standard. This can mean a bit more bloat, but conversely offers a well-proven foundation for the system.
MCUs in embedded systems are getting more powerful and sophisticated at the same, or at lower, cost year-on-year, and the use of operating systems and interpreters becomes more feasible. It may mean you don’t have a lean, mean fighting machine, but you may have a device with so much weaponry you can tolerate the hit.
This table shows a general, and arguably subjective, comparison of languages for embedded development:
|Execution speed||Fast(**)||Fast||Fast||Slow||Slow||Very Fast||Very Fast||Slow|
|Package support||Very high||High||High||High||High||Low||Medium||Medium|
(*)This is somewhat subjective, and a low learning curve is assumed due to prior knowledge by an embedded developer.
Moving things up a level
Embedded taking a lead from the world of web development could be the answer. There will always be a need for engineers who can create the highly efficient firmware modules that wrap around core hardware elements, but the general application usage of hardware may be in a higher-level language.
Maybe the onus will fall more and more on the shoulders of the MCU suppliers to deliver the lean modules for the device and higher level APIs for alternative programming languages. There is much of this happening already in silicon providers' SDKs, only most of the APIs still support only C/C++.
The demand is coming
There’s much more to delve into on this subject, and I’ll do another blog on some of those aspects soon.