top of page

Why using Arduino to learn software and electronics is a bad idea.

Updated: Feb 10, 2022


I really like the Arduino platform, boards, and how easy it makes getting started with electronic projects. I personally own dozens of Arduino boards and I even like to build my own. My goal is to become an Arduino distributor once my business meets the volume requirements. So, I am in no way an Arduino hater and I consider myself to be a part of the Arduino community and support the products and company. While I recommend the platform and offer a number of Arduino compatible products and use the Arduino platform in my curriculum, I think it is important to mention where its weaknesses are, as there are many. While Arduino has its place and is a great way to get start in microcontrollers, I believe that using Arduino to learn electronics, and software as well, is a bad place to start.


If your goal is to learn software and electronics, you need to start by building a foundation before moving into Arduino and microcontrollers. Arduino doesn't build that foundation. If you skip the foundation, you will always struggle to understand the many circuit designs you encounter. While you may become proficient in copying other people's designs, you will not have the knowledge to come up with your own designs. If you do manage to piece together other people's designs into your own, you will not be able to identifier errors and optimize your designs. What you'll end up with is a poor performing circuit and an amateurish design.


Arduino as an Electronic Education Platform

If your goal is to learn electronics, you should spend a couple of minutes searching the internet about using Arduino to learn electronics. You will find that the vast majority people will tell you that Arduino should not be used to learn beginning level electronics, as the focus is not on electronics but on the Arduino hardware and software. The proper way to learn electronics is building circuits with a breadboard and components. The advantage of Arduino is that you can build projects without having to learn much at all about electronics or software. That is the whole point of Arduino, it makes everything simple. However, if your goal is to learn electronics, maybe the simplest approach isn't the best.


Arduino as a Software Education Platform

If your goal is to start learning software, there are essential skills you need to begin developing. A quick search online will come up with a list of things like, database, testing, object oriented design (OO), source control, IDEs, and learning one of the top languages is a must. I recommend starting with C# or Python as a primary language, as they are well suited to learning and are in the most demand. Languages such as JavaScript, PHP, Ruby, Visual Basic, and others would be fine but have some complications or limitations for educational usage or have questionably futures. I would only move into more specific languages like JavaScript, PHP, Visual Basic, Assembly, etc. as a need arises and I would not start my education with these. Markup languages like HTML, XML, JSON, and database languages like SQL and MySQL should be learned as you encounter the need, as they are not primary languages, but languages used for specific purposes. But again, I don't think these are good for a beginner to use to learn software development, at least not until you get some of the basics down.


That brings us to the Arduino IDE and Sketches. Sketches are fully C/C++, however the Arduino IDE only allows you to edit two functions (setup and loop) and add your own functions. Because of how Arduino IDE limits your access to the C/C++ code, you are limited in regards to language features you can learn. Many of these features are a must for a beginner level software education. To have access to these blocked features of the language, you have to leave the Arduino IDE and Sketch and use a more complicated IDE such as Amtel Studio. So the whole point of using Arduino because it makes things easier, has just been lost because now you need to learn C++, which is not a language I would recommend for a beginner.


My point being, that the limitations of the Arduino IDE and language makes them a poor fit for learning software development. I think you are better served by languages such C# or Python, if learning software development is your goal. That's not to say that Arduino can't or shouldn't have a place in your education, as it certainly does. But I think you need to really understand where it fits... and where it does not.


Where does Arduino fit into the picture?

I think my biggest concern is that Arduino company and community should NOT pretend it is something that it is not. Asking questions about this got me kicked off their forum. They don't like to talk about it. A better solution would be to simply admit to the issues or solve them. They've had over 15-years to address these issues and have chosen not to. So I would not plan on any major changes any time soon. So we should just be open to discussing the issues and how to work with them.


So, what should we do? The first thing we need to do is understand the limitations, as that will drive the path we choose. Arduino is a great tool and it has its place. I recommend learning it. But you need to know when to use it and when not to. To understand this, we need to start with looking at its limitations.


Here's a list of the most serious issues I have with the Arduino IDE and the sketch language.


Sketch C/C++ Language

  • No concept of code organization. You cannot split code into multiple class or programs. All modern software has this ability. In fact, I'm not aware of any other programming language that does not support this. I think sketches stand alone in this limitation. Don't confuse this with being able to split a Sketch into multiple files, as it is really just one. The pre-processor simply combines them into a single file. Also, don't confuse nesting classes inside of a Sketch as being the same as building separate classes. While similar, it is not the same thing and there are limitations.

  • Since the Arduino libraries are all custom for Arduino, nothing will apply once you move on from the Arduino and sketches beyond the basic C/C++ structure and logic flow, which is already significantly limited to a point that it makes it impossible to teach software using it. Of course you could use the Arduino libraries outside of the Arduino IDE, which might be a good alternative. But why would you. The Arduino libraries are much slower. In fact, if you work with performance enhancing Arduino code, the best way to tune it is to stop using the Arduino libraries. Really!

  • While acceptable for beginners, the Arduino IDE is very limited and only intended for simple applications. For example, you cannot access registers and you cannot call another program without moving into C++ development using another IDE.

  • The Arduino company, examples, and forums tend to push an Arduino solution for everything, even when a simple circuit is the better solution. Using an Arduino to turn off and on an LED is not a valid application of a microcontroller. It is better suited to a simple 2-cent switch as opposed to a $50 microcontroller and motherboard.

Arduino IDE

  • It's pretty bad. Very far removed from being something a professional can use. I recommend that after working through the Arduino examples, that you move away from the Arduino IDE and use one of the free versions of Visual Studio.

  • No concepts of projects, solutions, or shared resources. This means that code is not portable and concepts like classes, objects, OO, constructors, destructors, are not possible. To teach software development without being able to teach the concept of objects, classes, inheritance, dependency injection, etc., etc. means that Arduino could not be used to teach even the most introductory level software class beyond maybe the first few weeks. For this reason alone, I would not recommend it for teaching software development.

  • Library management is terrible. Multiple versions of a library is not support (as of May 2020 when this article was written). If you want to do ANYTHING beyond what is supported in Sketch, you have to do it in a library and outside of the Arduino IDE.

  • You cannot write libraries for Arduino using the Arduino IDE because they do not support more than a single file and does not support a project structure. If you have to move over to Visual Studio to develop libraries, I'd suggest you stay there and use it instead of the Arduino IDE.


Final Conclusions

What begins to emerge is that Arduino is more about Arduino than learning software and engineering. That is fine if learning Arduino is your final goal. But if your goal is to develop software and engineering skills, you need to realize when it is time to move on from Arduino. However, the majority will never need to make a transition beyond Arduino. So here is where we find Arduino's niche.


It is a great early educational tool for students interested in STEM. It allows educators to peak a students interest quickly with small successes very early in the learning process. It is a great tool for those that do not have or want to develop depth in software or electronics knowledge, but still want to build electronic projects, as that is what it was developed for.


The limits of Arduino are realized when a student wants to develop software and electronic engineering skills. At this point, we need to push the student towards great learning opportunities, and there are many. For those wanting to learn basic electronics, start with a breadboard and some components. There are many great courses, curriculum, and books available.


Beyond Arduino

There's virutally an endless number of options to pick from beyond Arduino. I would recommend you consider STM32 ($5), ESP32 ($4), NodeMCU ($4), and there's even a C# based microcontroller called the Meadow F7 by Wilderness Lab's. Well sell a number of these on this website.


For those looking to get into ARM development, take a look at Cypress Semiconductor's PSoC6 development board ($99). I've picked up one but haven't have them time to play with it just yet. But so far it looks really impressive with lots of great features, dual processors, and many other great features right out of the box.


For those looking for careers in electronics don't overlook FPGAs. There are many great ways to begin learning FPGA development. With the numerous educational level dev boards such as the Terasic DE boards ($50 to $100 range), webFPGA ($30) that requires no local software to program the FPGA, and now even Intel, Xilinx, and Altera all how low-cost educational platforms with boards start in the $30 range, and even less. I recommend Digilent's Basys 3 Artix-7 ($150) or the Nexys A7 board ($249-$299) if you are serious about learning FPGA development. If you are a student, you can submit a request for student pricing, which will knock off $50-$75 and you will get free shipping.







25 views0 comments

Recent Posts

See All

Why I've moved on from Arduino

I've finally given up on Arduino, not the tools and the platform, but the company. Why? After working with them for years, I've finally got to a point where I think they are playing too many games wit

bottom of page