As the IoT continues its rapid ascent, the need for developers is growing along with it. A recent report from VisionMobile projects that 4.5 million IoT developers will be needed by 2020, an indication of just how huge the opportunities will be in the next few years.
Traditionally, developers have been either software or hardware engineers, but the IoT requires developers have knowledge beyond their own area of expertise. Now, nobody will be an expert in both fields, but having some idea of what your team members in the next room do has its advantages. Let’s look at some of the software/hardware skills that devs can learn to help them in IoT development.
Hardware skills for software devs
The IoT is such a broad area that software devs will most likely have to program in a number of languages. Low-level assembly or C/C++ programming will be required for embedded systems. At the same time, higher-level languages such as Node.js or Java will be needed for devices with more available resources. In addition, communication protocol skills will be vital – after all, an IoT device is nothing if it can’t share its data.
But what hardware skills are useful for a software dev? Most likely, it will be the basics – you certainly won’t be designing the next revision of the product’s PCB. On the other hand, it would be useful to be able to build out a circuit on a breadboard for prototyping. Understanding basic electronics is a must. You should know how basic components like resistors, capacitors, LEDs, etc. behave in a circuit. This kind of knowledge can be used if you want to, say, debounce a button in a prototype device (see Golgi’s earlier post for more information on that example).
Other important skills for software devs include reading data sheets, understanding timing diagrams and clocking, electronics concepts such as pull-up and pull-down resistors, Hi-Z, active-low and active high, as well as logic gates and transistors.
Software skills for hardware devs
As a hardware dev, you will be the one designing the next revision of the product’s PCB. You’ll be selecting and integrating microprocessors, sensors, and radio interfaces. And like your software teammates, your work will cover everything from low power embedded devices to high(er) power, high(er) resource devices.
So what kinds of software skills would be useful for a hardware dev. Again, it will be the basics. Remember the goal here isn’t to build out a 500,000 line source code base complete with an underlying build system. Rather, the goal is to gain an appreciation of the requirements of the other half of your dev team, to gain some prototyping skills and have a bit of fun along the way.
High level languages such as Node.js or Java are excellent starting points for people new to programming. They’re easy to get into and benefit from some nice features like automatic memory management. Though if you really want to get a feel for the difficulties of your software buddies, you could dive into C/C++ and manage your process memory manually.
Also important are things like reading SoC reference manuals and understanding how a sensor can be read in software through a DAC and, say, over an I2C bus – i.e. I2C comms and drivers.
This kind of knowledge can help hardware devs appreciate the importance of building their components with software flexibility in mind. For example, providing flexible I/O options so that the software team has more options available to them when they are building out the software to sit on top of the hardware team’s work. Ultimately, understanding and providing this flexibility will help both teams build a superior product.
Where does the learning happen?
The next question (and an important one) is where can devs learn these multi-disciplinary skills? Especially since that learning can seem quite daunting at the outset. One of the main sources will, of course, be the internet.
We live in an unprecedented time when access to (almost) any information is just a few keystrokes away. But use caution! The Internet is full of very good and very poor sources of information, so you need to make sure you’re learning from the right ones. We like the following websites and blogs, which contain both general and in-depth IoT development resources:
Embedded. Good information on designing with wired and wireless networks, and using embedded designs and the right protocol.
ARM Connected Community. Excellent roundup of IoT and embedded device development news.
EE Times. Offers a wealth of resources, from news and opinion pieces to videos and forums.
Adafruit IoT Tags. Provides useful links to and information on the latest software and hardware trends.
Web of Things. Solid resources pulled together by a community of developers, researchers, and designers.
Hackaday. A fun and informative site that includes a frequently updated blog.
As you explore some of these resources and think about the skills you’ll need to be successful, you should also remember not to be limited by the training you’ve had thus far. Adaptability and versatility are two of the key traits needed in the modern business world.
Never stop learning. Learn wherever you can. Learn from your colleagues – all of them. You have the potential to learn not only from senior staffers who have amassed years of experience, but also from less experienced team members and the knowledge and skills they have acquired. I encourage you to soak it all in.