Blog Post

Anti Arduino - Why I will never teach Arduino in my Embedded Systems class

There's a lot of buzz these days about Arduino:

Occasional HASTAC posts mention it in passing:

In a nutshell, it is a platform for embedded system design which has a reputation for being easy to use. While I think the project is neat, I have to ask if Arduino has outlived the purpose for which it was concieved, according to Wikipedia:

The project began in Ivrea, Italy in 2005 to make a device for controlling student-built interaction design projects less expensively than other prototyping systems available at the time.

Personally I think the project has *limited* applications, but is it wise to be presented as the default "go to device" for designing some type of physical computing embedded system as opposed to other platforms like the PIC? I have the following problems with the Arduino:

1) Very little mass produced hardware is Arduino based. My MIDI to USB converter has a PIC, almost every USB memory stick uses an ARM, my pocket timer uses an 8051.

2) Arduino ultimately seems to be a wrapper for the core functionality of the ATMega168, but in a way it makes it hard to implement features important to a "real" product (for example, putting the processor to sleep to save battery life). Ultimately 90% is very easy but the remaining 10% that separates a good design from a bad one is very hard to do on the Arduino platform.

3) Arduino doesn't actully teach students how to solve "real world" problems. For example, how to make sure your compiler can find the correct headers? How do you port an industry standard library such as zlib? How do you make sure your serial port is actually working?

4) The competition isn't very expensive anymore. It used to be that every other platform has huge startup costs, programmers, compilers, etc. Manufacturers have wisened up to this, however. A PICStart III kit costs $50, and can program almost every chip in Microchip's product line. Likewise they have free versions of their compiler. TI has their launchpad available for $4.30 with free version of their compiler.

5) Arduino encourages overbuilt hardware. Even though it is certainly possible to take the ATMega 168 and run it with a minimum of components, too often the entire Arduino design is simply slapped on some project. Projects with Arduino generally don't consider whether this capacitor or that resistor is necessary which encourages bad engineering.

That is my feeling towards the Arduino platform, what do other people think?



Hi, Zuofu -


I find your discussion very interesting as, as you say, the Arduino was the go-to platform a few years ago.  I admit I was excited by and impressed with it when I saw some folks working with it a few years ago at a conference, yet I can see what you're saying - that learning with the Arduino really means just learning how to program the Arduino, period.


That having been said, I think for people who aren't engineers or programmers, this could still be an easy and simple way for them to learn a variety of concepts that it could be used for for hands-on teaching.  I'd love to participate in, say, an Arduino for Non-Programmers session in which the concepts and the actual programmatic commands that would produce tangible results could be taught in tandem.


Interesting topic, but I'm afraid you aren't seeing the forest from the trees. The arduino team is the first to say that some of your arguments are correct. It isn't an efficient board, it doesn't sleep, you won't see the chip in commercial products... but that isn't the point. The point is that it is easy to learn, easy to teach, and has a massive community to help you! Making sure your compiler has the right headers? Knowing what a register is? The competition is cheap now too? Zlib? None of that matters! What matters is that someone previously afraid to "code" is now connecting wires, writing simple lines of code, and actually making some work right away! That's exciting!

Arduino only continues to pick-up speed and adoption throughout universities and high schools! And it will continue to do so, until something even easier and cheaper comes along! :)


Anonymous (not verified)

Well I'm just throwing this out there, I've never used the book and I know very little. But I'll say this, I got an arduino because I have been wanting to learn more about interfacing with my computer and hardware. The arduino was perfect for this and it has opened the doors to all sorts of wonderful learning. I'm learning C right now and I was wondering what it is good for compared to C++ (which I took two semesters in as part of a minor in CS). I read something about it being perfect for embedded systems and started wondering what exactly an embedded system is. Well, a google search later and I came across your post. Then I found this book:

Interestingly, it addresses a lot of the issues you brought up regarding why you'd never use Arduino. Seems like this author found a way to teach just what you thought was impossible to teach using the Arduino!

I could be wrong, I don't know much...but thought maybe you'd like to check the book out.


- Margot.


Anonymous (not verified)

You can use an Atmel programmer to upload your native programming code and not use the Arduino boot loader. So really it is much more flexible than you give it credit. Use whichever programming method you like.