Embedded systems development is an exciting field that has become, in a few short decades, a cornerstone of the way we interact with technology.
Unfortunately, our education system is not training new engineers who are effective in it. This is a major problem for our industry.
Why is this happening? And what can we do to fix it?
The problem – lackluster training in embedded systems development
Graduates in any field inevitably face a steep learning curve when they dive into the workforce, and this curve is often particularly daunting for technical disciplines.
But embedded software engineers have additional challenges. They have to juggle the combined complexity of hardware and software concerns, deal with an incredibly complicated development process, and wrestle with issues involving reliability, compatibility, security, safety, and tools that would never have to be used in non-embedded programming. And all of these issues are of huge importance. Many embedded systems applications are safety-critical (where a serious error could endanger human lives), almost all have to stand up to hacking, and they need to be modified and adapted by different groups of developers.
That’s not a learning curve, that’s a massive wall, especially when compared to more traditional engineering and computer science subdisciplines.
And our colleges are, sadly, not giving graduates the tools they need to scale that wall.
The root problem is that they don’t necessarily give college students the context they need to understand how to use certain skills in real-world development projects. Graduates lack skills in tools, analysis, and prioritization, all of which comprise the backbone of successful embedded systems work.
In order to train engineers who can work in embedded systems, where efficiency is paramount, colleges need to spend more time on teaching algorithm analysis and data structures. In addition, teaching Agile development methods may be achieved by larger group projects following the Agile process, instead of small individual assignments that can be completed in a day or two.
The end result is that programmers coming out of college today have very narrow skill sets in languages that were popular when the curriculums were designed, but don’t have the broader knowledge needed to be flexible enough to tackle Internet of Things (IoT) projects.
There’s another major problem. Because of practical realities of time available for coursework, colleges teach small projects, which means that coders often have no expertise in large projects. Too bad, because most embedded software projects are large projects.
All of this adds up to a significant technological roadblock in advancing the field of embedded software.
How do we solve this?
First, colleges need to start teaching skills within the framework of large projects. Computer science could benefit from emulating architecture courses, which have mastered the art of teaching giant projects in short amounts of time. This may mean studying the development of large software projects that were done in the past, or it may mean doing the high-level planning for large projects, but not necessarily filling in all the details.
It also may mean that embedded systems companies may have to get more involved in education, by offering internships and sending professionals to give guest lectures.
Education, just like embedded software, is a very difficult field. The solution isn’t obvious. But we in the industry know that something must change if IoT is going to reach its full maturity.
If we pay attention, we can ensure a great future for our industry, and for technology in general.