Sure, no-code and low-code IoT platforms are a thing. But chances are you’ll need to write some code at some point. You may be able to get by running someone else’s code if you’re building a common project, but for the most part, you’ll need to be acquainted with code.
As with anything, you have a lot of choices when you’re choosing a programming language for your IoT project. A few things to consider are performance, the libraries available, and how easy it is to write and maintain code in the language. We’ve put together what we think are some of your best options.
1. C++
One of the best things about C++ is that it’s everywhere. From cars to games to planes, even your favorite Android game probably has it. And because it’s everywhere, it’s easy to find guides and help threads about it online.
In fact, most Arduino developers start out with C++ because it’s so handy for embedding into devices.
C++ has more power and a higher level of abstraction, objects and classes than its ancestor language, C. The fact that many IoT operating systems have extant support for C++ also makes it extremely versatile, particularly with Linux-based systems, which are the most popular for use in IoT.
Pros:
- Lets you manually allocate memory
- Faster to work with compared to other bare-metal languages
- Plenty of community support
Cons:
- Has a steep learning curve
- Memory leak problems if you’re not doing best practices
2. Python
Python is often used in teaching the basics of programming due to how easy it is to learn. This also makes it a good pick for your IoT project if you’re not especially well-versed in coding. The downside is that the Python interpreter is slightly heavy, so it’s not great for low-spec environments.
One major strength of Python is that the language is very good at dealing with databases. If your project involves taking measurements and writing them to a database, Python may be a great pick for you.
Python is also one of the languages of choice for the Raspberry Pi, so much of the code in projects for that device is written in Python. This means you have plenty of opportunities to read the code and learn.
Pros:
- Easy to learn
- Plenty of modern resources to work with
- Quick to test and prototype
Cons:
- Too heavy to use in embedded electronics systems
3. Rust
A sort of a middle-ground between C++ and Python, the way Rust works is that it gives you the performance of C++ within the relative safety of Python.
With Rust, you won’t need to worry about memory allocation and garbage collection. You can define any variable to your heart’s content – the compiler will do the rest. This makes it really great when it comes to large-scale systems maintained by multiple people like company servers and control equipment because it reduces the chances of a bug or exploit coming from misallocated memory problems.
It’s so good, in fact, that you’d see Rust in a lot of web-related services. Namely, there’s Dropbox and Cloudflare’s Oxy framework which are big names in the cloud-based technologies circle. Plus, it’s the programming language Mozilla used to make Firefox!
Pros:
- Simplifies work with complex data structures by having pattern matching
- Works great with embedded systems
- Easier to work on with multiple threads
Cons:
- Less math-like syntax
- Super-steep learning curve
4. Go (aka Golang)
When building and developing systems for systems using multiple smaller sub-systems, you might want to run it all in containers (or smart containers for IoT systems). And what’s a better programming language for working with smart containers than Go?
Go (or Golang, depending on who you ask) is a high-level, general-purpose programming language that works really neat in small systems meant to grow bigger in userbase and capacity over time. It’s used in cloud and networking systems, as well as web development and data analysis.
It’s can also be used in small embedded systems for building smart watches and other wearable sensors. A variant of it called TinyGo works in all those things – it even has a cross-platform API for connecting TinyGo with regular Go through Bluetooth!
Pros:
- Built-in garbage collection
- Meant to run on different operating systems and computer architectures
- Easy to move to after learning C or C++
- Fast compile time
Cons:
- Has one of the worst error messages that will rack your brain
- Quite a lack of third-party libraries
- Smaller community
5. Java
When Java first appeared in the ’90s, it carried with it the mantra “write once, run anywhere.” This means that at least theoretically, any code you write should run on any system that can run the Java Virtual Machine (JVM).
You need to write your code carefully to account for platform differences, but this easy portability is handy. In a lot of cases this means that if your Java code runs on your machine, it should also run on an IoT device as long it has a JVM.
Java is known for being heavy when it comes to resources, but there’s an option that makes it a good pick for IoT. Java Embedded SE has many of the features of the standard language but uses fewer resources.
Pros:
- Multithreading support
- Has a large community of developers
- Easy to work with multiple programmers working on a single project
Cons:
- Difficult to get into
- Can be a bit of a memory hog
6. C
C is one of the oldest languages still widely used today. Despite the many languages to come along since, there are still plenty of projects that make heavy use of C. Some even only use C. There’s a good reason for this, too: performance.
The other languages on this list use a runtime, which means that either bytecode or the actual code you write is being interpreted when your program runs. C, on the other hand, compiles to machine code. This means that C programs are generally much faster than their equivalents in other languages.
Any embedded platform you find will be using C in at least some parts of the system. And in most cases, that will be the embedded systems part and others that rely on edge computing. This makes it a good language to learn after mastering C++ or Python. After all, you’d be used to the syntax if you’ve spent a good deal of time on C++. And if you’re using Python, you can make highly-efficient modules for it out of C.
Pros:
- Works on any computer architecture
- Allows you to make your own data types by defining them
- Larger programs can be as small as a couple of kilobytes
Cons:
- Requires different compilers for different architectures
- Easy to make bugs in
7. JavaScript
Despite the similarities in their names, JavaScript and Java have nothing to do with each other. The only thing similar about the two is that they’re both programming languages that began life in the ’90s.
In JavaScript’s early days it was used mainly for adding functionality to webpages. Now, developers use it for everything from web servers to manipulating databases and even creating games.
Like Python, JavaScript is an interpreted language, but many IoT devices are able to run Node.js. This is an interpreter that lets JavaScript run just as Python does instead of being limited to a browser. There are even microcontrollers like Espruino that run JavaScript out of the box.
8. Julia
Data and IoT are like yolks and egg whites. It’s real difficult to separate them – especially by hand. Likewise, it’s just as difficult to remove numbers from IoT systems especially as they grow larger. Julia simplifies data analysis complex Mathematics for these kinds of things.
Julia is a “just-in-time” compiled language, which makes it as easy to check for errors as Python but also be way faster than most other interpreted languages. In fact, its speed is almost comparable as C!
You’ll often see Julia in more science-y projects, which is great especially when you’re developing IoT systems for scientific research. And if you’re not, Julia’s large set of mathematical tools makes it a great language to learn for analyzing other things in commercial IoT development.
Pros:
- Allows for use with parallel computing and GPUs
- Lets you use Unicode characters
- Blazingly fast
Cons:
- GUIs can be hard to program with this
- Relatively smaller userbase
9. Kotlin
One of the fastest-growing languages out there, Kotlin is a great language to learn if you already know Java. Why? Because it’s designed to work hand-in-hand with Java.
Unlike Java, Kotlin is much easier to use and its syntax is more concise. In a project running with Java, it won’t be a surprise to see Kotlin code scattered here and there to add for better efficiency at just the right places. And in the IoT world, making efficient code will let you get more juice out of every precious bit of memory.
Primarily, you’ll see Kotlin more in Android apps. It’s used a lot in client-facing programs, although you can also see this in some backend systems. If you are planning to make systems with masses of human end-users, you won’t go wrong with this.
Pros:
- Define more data types with flexible type system
- Built-in support on Google Android Studio
- Allows for safer asynchronous code
Cons:
- Limited libraries
- Relatively slower compile time
10. Perl
For the same reason you might use Javascript for making web GUIs, Perl is something you might consider learning if you’re planning to join companies working with large-scale industrial IoT. Sure, it’s not used directly in IoT development. But it’s something you might eventually work with, especially with the rise of industrial IoT and edge computing.
Perl is more commonly used in bioinformatics and interfacing with pre-built programs. In a larger IoT system spanning hundreds of edge-computed devices, Perl makes it easier to build synchronization and communications programs between systems and devices using the Net::MQTT module.
Perl shines at automation programs. Think of web crawlers, systems administration, and server handling. Plus, it’s about as easy to get into as Python – even though it’s not as popular as it.
Pros:
- Easy to prototype with
- Supports multithreading
- Faster compared to other interpreted languages
Cons:
- Verbose error messages
- Lots of work with Perl involves old, hard-to-understand code
Tip: Not sure where to start? Take a look at our list of technical skills you need to know to be successful with IoT projects.
Frequently Asked Questions
What's the difference between C and embedded C?
On the language level, the difference between C and embedded C is barely nothing. They’re the same thing. They are more like best practices, with embedded C focused on small devices with barely even 2 MB memory. One notable example is the lack of malloc()
in embedded C.
Is Arduino Programming Language the same as C++?
The Arduino Programming Language is based on C++, not exactly C++. You can use C++ on the Arduino Programming Language, but you can’t import C++ modules (or at least not directly).
Do I need to learn to program embedded systems in IoT?
While embedded systems and IoT are tightly connected, you don’t really need to learn the former to get into IoT. There’s a lot more to IoT than just tiny computers and autonomous robots. You could say that over half the work on IoT is the infrastructure needed to support all the edge computed devices in a network.
Image credit: Unsplash. Screenshots by Terenz Jomar Dela Cruz.
Get the best of IoT Tech Trends delivered right to your inbox!