Why do engineers (love to) hate Arduino?

Engineers love or hate Arduino, but why?

why engineers hate arduino

A couple of months ago podcast I listen to interviewed an embedded engineer. Eventually, the topic of Arduino came up, and all three people on the show let of sighs of disgust. This lead to me to start thinking about why do engineers hate Arduino?

On this particular show, they said Arduino had too many abstraction layers to be useful. All three members of the panel agreed that direct hardware access was critical to success in embedded designs.

On the same episode, the same people talking, the topic changed to using a new chip or sensor. Then this comment was made: “I won’t design for a chip with no high-level software API and detailed examples.” (I’m paraphrasing to protect the innocent.) Everyone on the episode agreed.

Wow. Just what is Arduino then? One view is that it’s a well-documented board, with a high-level API, and lots of detailed examples. But somehow, these features on other platforms is desirable? So why do did these engineers hate Arduino so much when it is what they said every vendor should offer?

Are they haters? Are they trolls? Or are they just engineers who show a behavior common to humans. Let’s take a look at why engineers hate Arduino using other examples and concepts from psychology.

1. It’s too Easy

Recently I got to see three of the Arduino co-founders speak at Berkeley. One of my favorite quotes was from Tom Igoe:

And this is where most engineers, especially embedded engineers, take umbrage with Arduino. It makes the world of electronics and microcontrollers ridiculously simple to access. Of course, you might be thinking, but isn’t that a good thing? And if you ask those same engineers they would likely agree.

Arduino-hatred is hardly the first example of experienced engineers disliking non-technical users as a field expands.

Remember AOL?

One of the passages that resonated with me in Walter Isaacson’s book “Innovators” (my review here) revolved around when AOL users started using the Internet.

Veterans of the Internet and fledgling World Wide Web were disgusted by the flood of uninvited users. These new users didn’t understand proper etiquette, they asked ridiculous questions, and most of them didn’t even know what an IP Address was!

Here’s what I find interesting. Do people whose first access to the internet is a smartphone, know any more or less than AOL users did back in 1993? Probably not. And there is a lot more of them. We don’t see as much backlash against these neophyte users today.

Analog vs Digital

On Episode #103 of The Engineering Commons Podcast, the team interviews Dave Vandenbout. Dave gave a recount of his experience when digital electronics engineering was in its infancy. He recalls that “analog engineers” (were there others at the time?) referred to the digital engineers as “digital dingbats.”

Why? One of the reasons is that digital engineers, especially new-to-electronics digital engineers, didn’t have the base of knowledge the “old-hat” analog guys had. From the experienced engineer’s point of view, these darn kids don’t understand the details of hooking up 7400LS chips together!

And you know what, those darn kids didn’t need to understand 20 years of analog design to make the AND-gates work. Of course, being able to dig deeper is critical when circuits “don’t work” but that’s a topic for another rant.

2. It isn’t ideal (for everything)

When you have a hammer, everything looks like a nail. Many Arduino users aren’t looking for the ideal solution. They are happy hammering a screw into the wall if it solves their problem.

Most people are familiar with the concept of confirmation bias. (In America it becomes the lifeblood of social media during election times!) In short, confirmation bias is focusing on elements that support a preconception.

An example I experienced was when I wrote about the performance difference between digitalWrite and direct port manipulation. The actual point of the article was to show how to make measurements on a Logic Analyzer. One Twitter (ex-)follower responded un-politely about Arduino users, stating they couldn’t see past the “horrible and garbage API.”

There is an element of truth there. Some users cannot see past the API. They’re new. Of course, they can’t. Not yet! In this case, the rude Twitter comment was someone who used confirmation bias, digitalWrite is slow, to support their negativity.

Here’s the thing, though, if digitalWrite() works, it is perfectly acceptable to use it as-is. As Donald Knuth said,

“…premature optimization is the root of all evil (or at least most of it)…”

In other words, even if a solution isn’t optimal to a problem, it may not be necessary to “optimize” to a better one.

3. It’s too popular

People love to hate popularity, which leads to Kathy Sierra’s idea of the Kool-Aid Point.

Physics of Passion

Physics of Passion

Sierra is a developer that taught Javascript-based classes. Javascript is another technology engineers, software engineers, love to hate. Sierra makes the point that the existence of a passionate group means you also create passionate haters (she says “detractors.”)

This concept isn’t some new-age touchy-feely idea. It is how humans behave. Humanity naturally polarize around almost any idea or object.

Nothing makes everyone happy.

Her point boils down to the idea if a group hates you, then you’re doing it right. But what about engineers? Surely engineers are logical people who only make rational evaluations. Logically, they would never hate something that has positive attributes, right?

And so, part of why engineers hate Arduino is that it is the popular thing to love or hate. I’m sure programming languages, smartphones, operating systems, and cars are immune from this effect.

Don’t feed the haters

When you meet someone who demonstrates the behaviors outlined in this post, you might wonder what you should do. If that person is unable to revise their beliefs based on the new evidence being presented to them, they suffer from conservative bias. It’s probably better to just let things go.

Otherwise, you are going to find yourself in the middle of a full-force flame war. The irony? Both you and the other party will think each other are trolls. And in a way, you both are trolls.

You have both drank Kathy Sierra’s Kool-Aid.

Long comments, URLs, and code tend to get flagged for spam moderation. No need to resubmit.

ALL comments submitted with fake or throw-away services are deleted, regardless of content.

Don't be a dweeb.

Leave a comment

33 thoughts on “Why do engineers (love to) hate Arduino?

  1. I think the short answer is it took a 4 year degree and work experience to learn embedded systems in the “old” days which were not that long ago. Now with high speed (non-dialup) internet and arduino and some brains a 12yr old kid can do what engineers can do. So now a steep learning curve has now gone away.

    Just a hard pill to swallow for degreed engineers.

    Of course all that learning/experience is never wasted. Just trying to make a point.

    • Exactly!
      In other news, sculptors cannot stand legos and painters are on a protest against paint-by-numbers kits. “Its taking away my meaning of existence.”, one of them said to me, sobbing uncontrollably.

      Engineers obviously have several of reasons to feel threatened by 12yos who can make robots by 3d printing parts designed by mech. engineers and using shields and arduino made by electronics engineers. Its their worst nightmare.

      Seriously though, being an engineering student I can’t tell you how much of a boon arduino has been to me. Its an invaluable tool for prototyping and testing ideas. For the ability to print debug messages on the computer alone arduino invaluable.

      That being said, if I see someone using an arduino on a finished product, in an expo or something, they automatically lose my respect. Just having an arduino on a project is bad engineering practice 90% of the times. And its ugly, the tangle of jumpers, the shields used for most trival problems and the grotesque code. Something that could be powered by a coin cell requires a hugeass battery if it has arduino. Something that could be made into a keychain requires a full tiffin box sized project box. The IDE is not an IDE. Well you get the point. I have seen people (engineering students no less) in place of a 556 ic.

      The reason I think think engineers hate arduino is because they are freaking OCD nerds. They can’t stand it when trival problems are solved using big weapons.

    • It is undeniable that as the technology progresses, more and more layers of abstraction are added to everything, and things get easier. That’s great of course, it allows a person focus on the added value of its creation without worrying what’s happening under the hood. For me one of the most impressive examples is web development, before it was HTML and CSS, and now there are more languages, frameworks, abstractions.. than I can even comprehend. Ok, C is not assembly either, but it managed to stay as a standalone language and even a modern embedded engineers use it.

      However there’s one hidden fact in your comment: “a 12yr old kid can do what engineers can do”. Yes, they can, but only because there’s a big previous work of many engineers behind that makes everything easy, starting from the Arduino core itself, and considering the numerous libraries. I don’t think these kids are contributing to the Arduino community. In short, there wouldn’t be 12yr old kids programming Arduino if there weren’t any engineers that took that 4 or more year degree. I’m saying it as someone that is considered “young”, that started with embedded programming thanks to Arduino, and took as well a degree in engineering.

      Again, it is good to take advantage of the work that has been done before, it allows us to progress faster. Nevertheless we shouldn’t ignore the underlying complexity, not necessary comprehend everything but still realize that we only see the tip of the iceberg. This is what makes the difference in my opinion, an engineer understands the basis and can adapt to the situation, while the kid only expects the thing to work, even if they both are capable of blinking LED. The learning curve doesn’t disappear though, if that kid decides to dedicate him/herself to embedded programming he/she will have to learn what is a register and how to configure a clock.

      I understand your point, but I wouldn’t generalize this for every situation. Turning on the living room lights might be fine, but I bet nobody will allow a kid or, overall, an inexperienced person to work on the cockpit of a plane, even if the task was just to switch on a simple light.

  2. Because its not command line based programming but interpreted programming. Which mean Arduino is no good if you want to get into computer programming. Thus I think the dislike (or hate if you will) probably steams from there for most part. But if you want learn to program some hardware so objects can move around (although you could learn stop-motion animation to do that but thats another story). It might be good starting point. But I have heard there are lot of bugs in Arduino that the creators have ignored which makes Arduino more frustrating to use than its probably needs to be. IF the creators of Arduino had any respect for its user they should actually sit down and work through every possible bug.

    • You are clearly misinformed. You should read my list of Arduino Myths first.

      Because its not command line based programming but interpreted programming.

      This is absolutely false. The Arduino library is a C++ library. It is not, by any means, interpreted. It is compiled C-code. The Arduino library provides some nice functions to make working with the hardware simpler for the user. All of those functions are pure C/C++ code which is compiled. This type of functionality is absolutely no different than when a vendor provides an SDK or sample code to use their hardware.

      Arduino is no good if you want to get into computer programming.

      It depends on you definition of “computer programming.” If you want to program complex multiuser systems or web applications, then no, Arduino is a horrible entry point. If, on the other hand, you learn to do hardware-focused embedded programming it can be a very good starting point.

      I have heard there are lot of bugs in Arduino that the creators have ignored

      Another falsehood. There is a very active development team for the Arduino library. If you look at the issue list on the Arduino GitHub project, you will see that bugs are being address where possible. This notion that bugs are being ignored is absolutely ridiculously and 100% false.

      Please stop spreading your misinformation as fact.

      • 1. something might have lost in translation there, what I indented to say was when you upload the source code in arduino, it run directly. while in RPI you will have create the execute file first, and you cannot run it until you have completely debugged everything.

        2. Of course i was think of software programming, but it wouldn’t surprise me that general public thinks of computer programming as software programming exclusive.

        3. hum, but unfortunately you don’t find that GitHub link on the main arduino website, of course when selling a product, you cannot admit on your main page, that there is fault with your product. Because that would be bad business practice.
        What I was actually referring to was this “…it’s the lack of professionalism of the Arduino creators.” this what Martin said back in September last year.
        Credibility can be ruined in various ways, but i know Martin is not talking about the main arduino website. One little example on how credibility can be lost is if you don’t make it crystal clear who wrote said code example in the learning sections or that particular additional library. I have seen in some of those learning sections that they ask for corrections or suggestions on the forum which quickly makes you wonder if they actually peer review those codes or libraries before they publish them. If they do there is no reason to ask for correction or suggestion as everything should be properly functional. If they do, then there is no need to confuse the reader about it, and if they don’t at least they could admit they don’t peer review those codes or/and libraries so there shouldn’t be no surprise for the reader if he try using those code examples or/and libraries if they end up not working.
        If they support community and encore regular user to add codes or libraries for public to use, they should be clear that these are not coming from them and that they take no responsibility if those are not compatible with arduino. If they don’t then they are making themselves the guilty party if things end up not working properly, and then whole arduino project can quickly become as unreadable as wikipedia.
        Now I don’t know about the production history behind arduino but if each new release of arduino is rushed to the market it can easily get riddled with unnecessary bugs and problems.
        There is great quote by one of the greatest gaming developers of all-time “A delayed game is eventually good, but a rushed game is forever bad.” I don’t know if this particular quote applies to arduino but its worth thinking about if we apply the meaning of it to arduino all though we should know arduino is not a video game.

        • what I indented to say was when you upload the source code in arduino, it run directly. while in RPI you will have create the execute file first, and you cannot run it until you have completely debugged everything

          This makes absolutely no sense and is 100% false. Arduino is compiled code. Raspberry Pi can be compiled code or it can be a script. It’s a PC running Linux. I have absolutely no clue what you mean by “you cannot run it until you have completely debugged everything.” That’s just more of your trolling nonsense.

          but unfortunately you don’t find that GitHub link on the main arduino website

          So? The vast majority of people who go there just want to download the software and make their project work. In the forums there is a section called “Suggestions for the Arduino Project.” And inside of there is a link to the Github project.

          you cannot admit on your main page, that there is fault with your product.

          More of your trolling. The very first forum in the Forum link said “For problems with Arduino itself.” This claim you can’t “show faults” is utter bullshit.

          Please take your bullshit elsewhere.

  3. It’s not hate of Arduino, it’s the lack of professionalism of the Arduino creators.

    They say it is made for hobbyists, tinkerers, … but the shield connectors are not in a 0.1″ grid which makes them incompatible to commonly available breadboards.

    Why does the IDE automatically include “arduino.h” instead of teaching people to do that themselves at the start of a source file? This also prevents some “hacks” where you do not want “arduino.h” included.

    The IDE should start the compiler with maximum warning level (-std=c++11 -Wall -pedantic) and with warning-is-error compiler option (-Werror). This is a simple tool which prevents lots of mistakes. I don’t understand why people are not using it.

    Why did the ports have to be numbered and in such an awful way? What do you gain by using numbers instead of port name and pin number like B3? Pretty much everything that can be done using numbers can also be done using port/pin pairs. It would also be easier to mix low level code like directly accessing code with high level arduino library functions.

    It’s annoying that everybody has to stamp “arduino” onto everything. For example your post “5 Common Arduino Programming Mistakes” is also good advice to people programming other things, but since it is realted to Arduino that’s OK. But what’s really annoying is to find “Arduino compatible resistors” on Ebay.

    And finally the Arduino-versus-Arduino war… a very questionable thing which tells me keep the fingers away of it.

    Too bad these things can’t be fixed anymore. I would have been a very nice platform for everybody, from beginner to wizard.

  4. Hei i just found your blog after watching your talk about capacitors and it was a very interesting watch! (i’m a software engineer but i love electronics and have a special interest in embeded systems)

    Anyway, regarding the topic on this post, i do completely agree with your point of view and i just can´t understand the reason why engineers love or hate the arduino and other products. It makes no sense.

    In my point of view, these are tools and i’ll use whatever makes my life easier. Sure, i do love my ARM Cortex’s but if i can make the same job in half the time on an arduino, i’ll gladly use it.
    It’s like all those flamewars about linux being better then windows and vise versa… Operating systems are also tools and as such some are better at some things and others are better at other things. i use both and i love both.

    My only real complain about the arduino environment is that sometimes it feels like i never “learn” anything. For example, a few days ago i used a arduino for testing a OLED display from ebay. I had never done this before and yet it took me around less then 10 minutes to connect the display, download an example, install the needed libraries and presto, a working OLED display. I didn´t even touch a single line of code or read it for that matter…

    Sure, i could do the same on my Tiva-C Launchpad but i would either need to find a library already made (not so easy sometimes) or make my own which coud take a few evenings just to get the same result.

    Best regards,

  5. I’ve been playing around with some small electronic projects after a break of thirty years and the availability of microcontrollers like the Arduinos makes projects that would previously have been very complicated simple to implement.
    I use a microcontroller for even very straightforward applications with only a couple of inputs/outputs because they are so cheap. I recently bought some Arduino nano clones from China for £2 each. This makes the hardware incredibly cheap and half the fun is playing with the software and thinking of new and improved ways of controlling the hardware.

  6. Good post James. I’m a retired engineer, I don’t do it for a living any more, but I still enjoy the creative process.
    I am also a photographer and I remember having photos rejected because they were “digital” instead of film.
    I was an engineer before the advent of the microprocessor. The old school digital circuit designers scoffed at those also. We had a project that my boss, an old school guy, was lead on. After five or six pages of schematics of discrete logic circuits he got stuck. I showed him how to accomplish the task with an 8 bit 8080 and some assembly code.
    I became project lead and the project was finished and worked without a hitch. I’ve done scores of highly technical embedded processing projects, written my own compilers, interpreters, RTOS implementations and been as close to the bare metal as you can get. I use Arduino because it allows me to quickly and relatively easily prototype a system idea and get it running. Many times the prototype is very close to the final implementation. Every project is different
    and you don’t need an RTOS or a complex toolchain for every project. Once you have that depth of knowledge it is yours as long as you live. Letting someone learn a simpler way doesn’t diminish it. There is no threat from Arduino.
    Really, there is nothing to fear, so there is nothing to hate. Imagine.

  7. Oh yes, on another note, I recently noticed Arduino experience listed as a requirement in a job add. That tells me something (bad) about the company…

    • Really? I see it is a positive. It’s a way to identify someone who enjoys working with electronics and experimenting on their own. Of course, it depends on the specific job.

  8. Interesting article. I have to admit that I was one of the haters, initially – but I have since matured. :o) To an engineer it does feel too easy, and being use to being in full control at first it did feel very limiting. However, there are times when all you need is to get something up and running quickly and its is great for that – yes even for an engineer. I think many engineers don’t like the notion that everything is easy, there is a big difference between an Arduino prototype and a production product. It does seem to create the perception that anyone can put together anything and its easy – what do we need engineers for? Companies with this conviction will learn the hard way, but that’s what makes engineers angry and hate it – I think. On the other hand, if it gets more youngsters (and older folk) into electronics – then why not?

    Everything does not have to be hard and sometimes we need to look past the hard stuff and how we think we’ll do it to the actual idea. I think sometimes good ideas get shelved just because it looks to hard. If Arduino brings a new generation of innovators with new ideas who naively (maybe) see past the hard stuff – that will be good for us all…

  9. Another good post James. I’m not sure I’m an Arduino acolyte but I am happy to use it for lots of my designs and prototyping. For the stuff I’ve used it for, stepper motors, sensors, simple servos I’ve had lots of success with the Arduino.
    I am inclined to dislike the Arduino Yún which I spent a long project working with, that does seem to be a bit of a frankenboard and does not have any strong use case in my opinion. However the Uno and Leonardo are great and I’ve also worked with a Pro Micro clone which I’m happy with. Trinket has is peculiarities but again was just the job for my Christmas project.
    My main gripe which is related to the popularity is that there are a good few examples of shoddy code. Also because some of the libraries are trying to be a jack of all trades solution they can be a bit resource hungry.
    Not tried the newer more powerful Arm boards yet but the MKR1000 is on my radar as something to check out.