IoT – This three letter jargon defines the whole world in a smarter dimension. Ranging from your watch to large scale industry, it is expected to make everything smarter and easier. From an engineer’s perspective, IoT offers excellent opportunities in terms of career benefits. With organizations making long term bets on IoT, individuals can have excellent growth going forward. Having said that, the super complex nature of technologies behind IoT could give you an overwhelming feeling! However IoT is more about foundation skills applied in a better way. Sounds different? Read on!
Let us get back to our childhood
Before jumping into IoT, let us do a time-travel and get back into our childhood. When we started learning English language our teachers taught of alphabets, words and basics of sentence formation. After learning them well we started applying it during our oral and written communication. There can be umpteen number of situations where you are using English today, but still foundations taught by our kinder garden teacher holds good, right? The same applies to any technology as well and IoT is no exception to that.
IoT is trying to connect everything that one can think of – sensors, devices, gateway, network, cloud and eventually applications. This super-integration of things makes IoT as a cross-functional paradigm. However many of the foundations that any computer science or electronics engineer learn will come very much handy when one transitions into IoT. Here are the top-5 foundational skills that is going to make a difference in IoT.
Here are the top 5 foundation skills required to program IoT:
What is an Algorithm? Why Algorithm stands as an important in foundation skills in IoT?
Algorithm is the step by step instructions given to a computer to perform a specific task. The computer address each step and executes the program to accomplish the end goal. Efficiency of an algorithm is related to the amount of computational resources that is being used. The goal of the design engineer is to ensure resource consumption is low. In the world of Algorithms, there are two major ways one can look into it:
Time complexity: Amount of time the Algorithm takes to executive and provide the output
Space complexity: Amount of space (typically RAM) consumed during the run-time
For a design engineer there is always a challenge to choose between the two. It’s mainly because if you try to reduce / optimize one (say time) the other one (space) gets into a high. The same design challenge continues to be in IoT as well. The Embedded part of IoT (of devices and gateways) typically tend to have lesser amount of resources hence achieving space complexity becomes important. The Application part of IoT (of cloud platform and application) the turn-around time plays a very key role where achieving excellent time complexity becomes important.
Linux as a platform:
Linux is the most preferred Operating System by the developers. Thanks to the OpenSource way of development Linux has emerged as a giant by offering following benefits:
Customizable – Complete source code is open, change as per the need
Portable – Most of the platforms can run Linux (x86 / ARM / PPC etc…)
Free – Zero licensing cost, makes it cost effective
Secure – Thanks to many features, it is secure and hard to break
Standards and Libraries – Latest and greatest versions available due to vibrant community
Tools – Best in class editors, compilers, debuggers that makes developer life easier
Quality – Inherent in all OpenSource software thanks to more users
Development platform – Most of the development happens with Linux as the OS <
All the above mentioned benefits of Linux is naturally carried forward with IoT. If you are involved in embedded side or Application slide of IoT, any form of Linux skills will come in handy. Added to that Linux is getting adapted to IoT specific changes (too big to describe in this article) thereby staying relevant.
IoT devices are supposed to interface with anything and everything that you can think of. In fact this is one of the key aspect of IoT by bringing every “thing” into the digital world. For example, an IoT device that monitors illumination levels of a street light. In the hardware level largely this is achieved by sensors and actuators.
Sensors – Sensors relate the external environment to the controllers. They take input from the physical environment (light, sound, temperature etc..) and passed on for further processing
Actuators – It is a component of machine which controls actions. When the sensors take input and pass it on to the actuators. The actuators converts the input signals and responds by converting the signal into a motion
In order to perform a successful interfacing at the hardware level, design engineer should understand the following:
Computer Architecture and Organization
Reading data sheets
Micro-controller concepts (ex – Interrupt handling)
When it comes to IoT device, sensing input and initiating an action using actuator is one of the key functionalities (ex – sensing and controlling illumination level of a street light, in order to achieve optimal power consumption). In order to practically realize them the IoT design engineer should have interfacing skills mentioned above. Hence hardware interfacing is one of the foundational skills.
Optimization is the journey towards excellence! It can be achieved at two levels – hardware or software optimization. By optimizing them to the best possible level one can achieve maximum functionality with minimal resource consumption.
Hardware level optimization mainly focusing on reducing the hardware resources to the maximum extent starting from power systems to peripheral design. On the other hand software optimization deals with better design, efficient algorithms and programming language specific techniques. All these aspects very much applicable to IoT solution design where having optimized hardware (cost reduction), optimized software (time reduction) are very much need of every solution requirement.
Asynchronous programming is a way to handle asynchronous conditions (ex: reading from a serial port as and when data arrives), in which a unit of code executes separately from the main application. It eventually notifies the main program about the condition (ex: data has arrived in the serial port).
In IoT things happen in a very dynamic fashion where asynchronous conditions need to be handled right from sensor to application. Programming wise Asynchronous conditions implemented via interrupt service routines, call-back functions, event handlers etc. These foundational concepts have been existing in any programming language right from the beginning. This will have all the more relevance in IoT as asynchronous handling is key.
Technologies change frequently! Few of the technologies which existed few years ago are no more in use. However fundamentals of technologies will remain same. In fact foundational skills applied in a better way is what makes new technologies emerge in the journey of excellence. The same thing applies to IoT as well. While IoT can be seen as a latest “buzzword” most of the foundational skill required by a design engineer like Algorithm design, Hardware interfacing, Linux usage etc…remain the same. While the onus is on engineers to adapt to new technologies, the importance of building stronger foundations just can’t be ignored.