New Horizons for Embedded
Tags: Computer, Embedded, Programming, School
Well, maybe not that new - but definitely something that is getting more and more important.
The embedded development toolbox is rapidly expanding, and it is becoming harder and harder to find people skilled in these tools. Starting from the university, 'embedded' is considered hard and not as 'cool' as traditional software development. Why spend hours hacking away and reading datasheet to get to blink a LED and send 'hello world' over a UART when you could build rich graphical programs with web technologies or mobile? The fact that embedded development requires a wide skill set going from electronics, process control, signal processing to software, to Matlab means that substantial time is required to form a good base on which to build the required specialized skill sets. Not many people are willing to do that.
But even those who persist face new challenges: the embedded landscape is rapidly changing. You used to have the micro controller people, the FPGA people, the SoC guys, the DSP guys, etc. They all have their own specialties and requirements. Things are not that simple anymore (well, they never really were, but let's consider that for the sake of argument). Nowadays, we see that all these technologies that were considered separate segments are growing towards each other rapidly. Take for example the Xilinx Zynq chip. It's got FPGA fabric, but also includes a dual core ARM Cortex A9 processors. It's a type of SoC, but not exactly like for example a Freescale SoC. This latter one for example would also have a couple of ARM cores but would have a specific set of modules around it: an IPU, VPU, etc. The Xilinx one does not, and instead uses the FPGA side to implement whatever modules you need.
As you can imagine, this is a very flexible and powerful approach, but it requires from the developer to know not only how to write the C code to build drivers for these modules. It also requires knowledge of FPGA programming and everything that comes with it, and often DSP skills as well. The barriers between the different segments that used to be defined are blurring rapidly.
Still, no matter how diverse the skill set has become, most embedded developers with a wide enough base and proper problem solving skills can learn these new tools and relatively quickly use them to tackle new problems. That is in part because these people grew up tinkering with devices, building exciting projects in their free time, and a genuine curiosity in what makes things tick (in order to learn how something works, you have to take it apart). It is also because these people grew up with what would now be considered antiquated computers that required not only programming skills but also needed one to go through the hardware manual to figure out the register set of the processor and other chips on board to do anything useful with said computer. A typical example is the Commodore 64 where one only had a basic prompt after turning the machine on. To really use the machine though, one would dive into assembly language, learn the 6510 processor, the SID audio chip, the VIC-II graphics chip, etc. The best embedded developers these days tend to be those that grew up with these kinds of systems, augmented with a formal education that included math skills and logic.
Reading the news these days, it seems that some people think that teaching programming in schools from an early age on is a good idea. Personally, I disagree with this, at least with how it is presented. Programming is only a small part of the development cycle and is not even the most important one at all - be it in embedded or not. The focus should instead be in problem solving and analytical thinking. Breaking problems down into small sub-problems, solving them, and combining them to form a solution. You could support this with programming, but programming itself should not be the focus. With a focus on programming (and the associated futile discussion on what language to use) it distracts students from the real aspect we want them to learn. When people grow up with the idea that programming entails building some web application, I'm afraid we're moving in the wrong direction if we ever hope to get these kids interested in embedded.
So, what is the solution? I don't know; however if we're going to see a more and more integrated world where embedded systems are even more ubiquitous than they already are (Internet of Things anyone?), we need to change the way people think of these systems and generate interest among students to become an embedded engineer. We need a new Commodore 64, and while the Arduino and the Raspberry Pi are some really good candidates, we don't just want to turn the Pi into a platform to just run Scratch on, hidden behind a monitor or an Arduino to act as a hidden device somewhere. These devices should prominently be at the foreground so the link with the physical world, the embedded world, the hardware, isn't lost because of layers and layers of abstraction. We have to take the systems apart...