IoT depends on the successful connection of many disparate devices and platforms, including device management platforms, data analytics services and the cloud.
Organizations can purchase IoT technology and services off the shelf and connect it to a Wi-Fi router, but deploying IoT in an enterprise setting can introduce many other problems. Any IT professional beginning an IoT deployment -- including programmers and executives -- must understand the technology's complexity and intersection between the physical and digital world.
Author and cyber-physical systems adjunct lecturer at Northeastern University Andy King has spent years honing his explanations of IoT concepts. King's impetus to write a book on programming IoT was to give students a resource that guides them through the journey from connecting edge devices to the cloud. The book offers IT professionals a way to expand their skill set and executives an understanding of the integration challenges involved in IoT.
Here, King elaborates on these challenges and the knowledge and resources that IT professionals should use to develop IoT systems.
Editor's note: This transcript has been edited for length and clarity.
What would you say is the hardest part of programming and setting up IoT?
Andy King: The biggest challenge with the IoT is the heterogeneity of devices, operating environments and messaging that are typically involved in an IoT ecosystem. If we unpack that a little bit, what we've learned and what the cloud service providers have done really well is that we can generalize a lot of coding problems when we're deploying to a standard environment. When we're deploying modern web apps to the cloud, there are many tools for doing this. But we're mostly dealing with the configuration challenges. Obviously, there's security, and there are a bunch of other challenges that are involved that make it very, very nuanced. But with IoT, we're dealing with things from the edge, which is where we interact with the physical world all the way up to the cloud. The biggest challenges are dealing with all those idiosyncrasies at the edge, that heterogeneity, the differences that we see between one device and another, one sensor and another sensor, how you trigger an actuation event. For instance, what are the protocols that you use both at the session layer all the way down to the physical layer where you're dealing with communications challenges? All that stuff and dealing with getting that set up and then securing it is actually really quite difficult, because there's plenty of standards, but there's a lot of different ways of doing it. Integration is really the hardest part. Integration and interoperability, that is certainly the biggest challenge.
What advice do you have for people trying to learn IoT?
King: Knowing software systems engineering in general is critical to understanding how an IoT ecosystem works. It's not just about writing software, writing in one language and expecting everything is going to magically work. Even if you're good at that particular programming language, for instance, there's a system view that's important to understand. And that systems view involves how physical things interact with other physical things. There's an element of physics involved.
There's the architectural view, which any software systems engineer will have to keep in mind as well. How do all these pieces fit together and what additional data sources do I need to factor into my solution? That may have nothing to do with the IoT, but the solution may require data from access to a data lake that's provisioned within the cloud or something like that. That software systems engineering and engineering mindsets are really important.
For those who are adept at programming -- most software developers understand this -- it's difficult to make IoT work when you're focused on just one programming language. You almost always must have multiple programming languages in your bag of tricks. There are so many different things that need to be kept in the back of one's mind as they're solving IoT challenges. That software systems engineering view is critical, as well as expecting that multiple programming languages will be required in developing an IoT ecosystem.
That's what makes it both fun and really, really hard: You have to know a bit about everything in order to embark on an IoT ecosystem development journey.
What resources do you recommend to learn more?
King: There are a lot of great resources in this space. I'm very thankful to other authors and open source developers for creating these resources, making them available. We included a bibliography in the back of my book to touch on all the resources that I reference to develop the class and develop the book. I wish that there was one book that had it all, but there is not one book that has it all. There are a lot of books that have most of it.
The first class I taught in this space, one of the first questions my students asked me, besides what do I need to know, is what are the resources that I need? One of the first tasks that I put into the curriculum for this course was a list of references that students should be using in order to get more knowledgeable. This includes protocol specifications. I talked about MQTT and CoAP in my book. There are specs that are written for many different protocols, and they're very well written and extremely detailed.
More on Programming the Internet of Things
Learn how to start programming IoT with the right approach and understand its complexities in an excerpt of Chapter 1 from Programming the Internet of Things by Andy King, published by O'Reilly Media.
What are you interested in learning about in IoT now?
King: I have two areas of interest. One is in the security space. How do we put all these devices out in the world and enable them to operate securely and efficiently with high confidence that they're doing what they're supposed to be doing? The second area is what can we do as we get more and more devices out in the world? What are some of the other use cases that will be important for regular people to make use of to make people's lives better? From a humanitarian perspective, that's super important to me. Wouldn't it be great if we knew exactly what our water quality was at every point no matter where we are in the world? What if we could say with high confidence what our air quality is like at any geographic location? What if we could start making predictions about how air quality or water quality is going to change? We're doing a lot of this right now. But we're not doing it as extensively as we could. I'm really excited about those future use cases where it's not just here's one particular area, one major city, but everywhere on the planet. We know exactly what's happening with the environment and how to how to make things better. And the frustrating thing for me as a technologist is that we have the technology to do it. It's more a matter of putting it into action. But it's exciting, because it gives us all something to work toward as technologists in the space, or at least gives me something to work toward in the future.