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:

[shareable cite=” Tom Igoe”]“Just because it was hard for me [to learn], doesn’t mean it needs to be hard for you.“[/shareable]

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.

Author

Fan of making things beep, blink and fly. Created AddOhms. Stream on Twitch. Video Host on element14 Presents and writing for Hackster.IO. Call sign KN6FGY.

35 Comments

  1. When I did my studies microprocessors were just starting to become mainstream.
    Apart from a little bit of writing assembler code on pieces of paper there was not much more formally.
    So I did a bit of 6800 and 8085/Z80 stuff after my studies. Other then assembler I taught myself ‘Basic’ and later ‘C’.
    I’m definitely NOT a software guy even though I have completed many projects and a number of products requiring software.
    Just recently the Arduino framework (I’m using the VisualMicro plugin for Visual Studio) and an ESP32 enabled me to create and finish a ‘private’ renewable energy project I never would have envisaged I could do – only possible through the plentiful libraries available.
    E.g. do I really need to know how a library receives, decodes and filters certain data in a .json file?
    Well I don’t – Live’s to short.

  2. Jon Rothlander Reply

    Even after 4+ years, I found this article helpful and insightful. In case anyone comes across this, I wanted to make offer a couple of observations that I did not see mentioned.

    First, I want to point out that I like Arduino and have dozens of them. But what really bothers me, is the claim that using Arduino to learn software and electronics is a good idea. I don’t agree. If you are trying to learn electronics, get a breadboard and some components and a beginner level book on electronics and circuit design. If you are looking to learn software development, get a book on C#, Python, etc. If you want to build some projects and not have to learn any details on circuit design and software, get an Arduino. Same goes for any microcontroller or minicomputer like the Raspberry PI.

    I came across this article while researching for some information for a curriculum I am writing on electronics. I’m adding some Arduino sections. When trying to build a curriculum that steps students through a learning process, you start to see the weaknesses. Here’s a few that come to mind in regards to software. I tried asking Arduino company about these, but they kicked me off the forum because they said I was being mean. So I take that to mean that they don’t have an answer. The annoying thing is, they could fix all of this really easy. But after 15 years of ignore it, I don’t see them ever fixing any of this.

    Sketch C/C++ Language
    – No concept of code organization and 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.
    – No concept of classes, objects, OO, inheritance, constructors, destructors, an many others. To teach software development without being able to teach SOLID principles, OO, 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 week. For this reason alone, I would not recommend it for teaching software.

    Arduino IDE
    – It’s pretty bad. I recommend using Visual Studio, as it will at least give you some experience with a professional grade IDE.
    – No concepts of projects, solutions, or shared resources.
    – Library management is bad. Multiple versions of a library is not support. Each library must be recompiled each time a program is compiled.
    – You cannot write libraries for Arduino using the Arduino IDE. Just move to Visual Studio.

    I just found the Meadow F7 board, which is fully .Net Standard 2.0 compliant. I’m starting to like this board for teaching software and microcontrollers. If you like Pyhton, which I don’t, the Raspberry PI is a good way to learn Python. But for electronics… get a boardboard and an intro book. There are plenty of them. Hopefully there will be a few more once I finish my own!

  3. Sean McCartin Reply

    For me, I don’t _hate_ Arduino, but I find it to be very limiting in more advanced applications, especially when you need to directly access the registers on the chip or need to use the ADC in a way that isn’t supported by the Arduino environment. The programming environment also makes it very hard to organize code when working on highly complex projects – in situations where you have a large number of functions it’s often better to split the source code into multiple custom includes, something that most IDE (such as Atmel Studio) have no issue with but the Arduino IDE is only capable of doing if you dump your includes into the default library directory. It also doesn’t help that as soon as you start having to utilize those more advanced functions of the Atmel AVR series chips you have to learn an entire new C++ library, as the Arduino environment uses its own simplified C++ library rather than the one generally used by Atmel microcontrollers.

    In short, Arduino is a good starting place and great for simple applications, but it doesn’t grow very well and more advanced users, such as engineers, often find themselves limited by the platform’s “user-friendly at the expense of functionality” design. That’s not to say it’s a bad platform, just that it has its strengths and weaknesses.

    What I do hate, however, is when someone sticks an Arduino into a device that only needs a simple relay, such as a basic alternating station setup for a model railroad layout. I like to refer to things like that as “Arduino for Blog Cred” projects, because they don’t need a microcontroller to work, the person working on that project just tossed one in because it’s shiny and attracts attention.

  4. Arduino has enabled tens of thousands of design, product development and architecture students in our country to experiment with physical computing and then realise tangible ideas, some that subsequently won awards ore were later taken up by industry and developed further.

    The arrogant and condescending attitude of certain commenters here is outrageous and shows what is so terribly wrong with society.

  5. Blake Thompson Reply

    Arduino is subpar and expensive. The pricepoint per compute is not comparable. A “real” engineer would use the atmega chip and design a custom pcb, or use a pic chip or an fpga. pre made arduino boards aren’t engineering devices, they are learning tools. Breakout the microprocessor and then maybe. Otherwise you’re just paying for shit you don’t need. Even with an ESP32 or a teensy. C’mon now. It’s not hating at all just common sense.

    • I am not sure I understand your argument. “Arduino” is not really a board, it’s more the software libraries surrounding it (the abstractions mentioned in the article above). A “real” engineer does not have to buy an expensive Arduino board for the final product, he just has to buy a ATmega328p/ESP32/(whatever MCU he is interested in) chip and make a PCB based on that. The “using arduino” part is just about which bootloader and code you put on the microprocessor. It costs exactly the same to use arduino or not. The difference is that with Arduino libraries, you can write your code much faster and make your product do more complex thing easier, at the cost of having a slightly less efficient code. Whether your application needs maximal performance and thus lower-level code or not, should be the main deciding factor.

      I am myself using ATmega328P chips (without a board) directly on a breadboard/PCB and program it using arduino bootloader and libraries.

  6. Sometimes is not a love/hate with Arduino, is more about when to and when not to, or best not to use. Sometimes a function is just simple enough that is much cheaper and easier for hardware type folks to build than program, and many times the Audrino is more costly do do these simple functions, I still design is standard logic many times. But is great regardless if just want to, learn, etc. I dont think there is a wrong or write answer. Many do not have the electronics background to do a more complex logic design, or at least get to building them practically. so programming and ready made kits are much easier then. But then I sometimes find myself frustrated when searching some info and all I see is Audrino related projects and hard to find the old school way of doing something. 🙁

  7. Michael Garner Reply

    Thanks for this article. I have no issue with the Arduino and am in favor of it as an introductory learning platform.

    My issue is with the use of the expression “drinking the kool-aid”. Those of us who were around in the seventies know that this is a reference to the 1978 Jonestown Massacre when the cult leader Jim Jones persuade some followers and forced other followers to commit suicide by drinking cyanide laced kool-aid. Over 900 people died.

    It is a horrible expression.

  8. Arduino makes it possible, not to mention way cheaper to prototype concepts – its like the hatred against the BASIC language by C++ developers – sure C++ unlocks many things not posdible with VB – but far more projects actually get implemented because of VB – I’ve worked on a few C++ projects that failed to deliver, or went way over budget because it is a way longer development process. And of course there is the old adage that a bad tradesman blames his tools – its just as easy to implement clean arduino design as much as totally flawed designs, bad programming, etc.

  9. An excellent topic.

    Microcontrollers, photography, music, literature, urban fashion or product design – whenever curious and open minded people (professionals like to brand those people “amateurs”, “laypeople” or worse) happily and care-free enter a field previously played on exclusively by a small elite (the often highly paid “experts”), the elite suffers what psychologists call a narcissist blow, for their previously secret knowledge and system of belonging develops cracks that eventually can no longer be papered over, no matter how hard they try.

    I endure such backward-looking yesteryear discussions at conferences in my field, where the old guard desperately tries to defend their holier-than-though realm only to discover in horror, that in today’s connected and globalised world, the above mentioned curious and open minded people give a damn about proto-religious attitudes – and just start thinking, making and doing without asking the experts for permission.

    As for Arduino and its derivatives, any technology that enables common citizen to take matters in their own hands and explore what was previously under control of experts has my blessing.

  10. JediJeremy Reply

    I probably embody the whole love/hate thing in one person, and have spent a LOT of time working with Arduinos and thinking about this. I can’t speak to a lot of the “irrational” hate that you point out, but I think I can trace where a lot of the genuine problems come from: The Arduino IDE, and their focus on Pedagogy. (What people call the “Too many layers of abstraction” issue comes from here.)

    In general, the Arduino hardware is very nice. Well built, no major flaws, easy to work with and quite hardy. Unfortunately the IDE is a mess, and barely fit-for-purpose. They forgot Einstein’s maxim “Things should be as simple as possible, but no simpler.” Things are better now, in some ways, but also worse in others, because they’re addressing (at a very late stage) issues they really should have thought about back in the beginning, like libraries.

    Basically, the Arduino IDE was never designed for programs longer than about 100 lines. It doesn’t even _show_ line numbers unless you turn that on. It’s library management is awful. What that means is you have a nice easy learning curve for the first few months, and then you hit a wall.

    The digitalWrite() function pretty much encapsulates the whole issue. It’s easy, it’s slow, and using it increases binary sizes far more than is reasonable. Everyone knows it. Every “major” project (Marlin, GRBL, etc) ends up writing their own macros out of sheer necessity, and so instead of “simplifying” the environment you end up with some code using the functions, some using the macros, and the extra complexity of the interactions between them. Code isn’t portable between projects. It’s insane.

    People can’t “graduate” from Easy Arduino to Advanced Arduino without basically falling off the learning curve, and having to start over on a new one, wasting all their time and effort up until that point. “Oh, it’s just a learning experience, we didn’t expect you to do anything _serious_ with it” is another way of saying “We sell crap to kids because they don’t know any better.” and that’s when I start grinding my teeth.

    Another example: You can’t use the IDE to upload binaries. Again, that’s fine if you assume you’re only dealing with 100-line programs hacked together in an afternoon, or copypasta’d from the Arduino Playground (and “playground” is an excellent description) but when you’re trying to distribute firmware intended to drive 3D printers (like Marlin) that’s simply not good enough. People’s safety depends on that firmware. Forcing everyone to recompile it from scratch (instead of an “App store” with binaries) means they’re at the mercy of whatever API or library changes happened that week. Critical timing loops are vulnerable.

    A lot of people’s first experience with the IDE isn’t in the classroom, it’s trying to download and install existing projects to the hardware they bought just for that purpose. And the forums are full of suffering people who can’t get it to work. There’s no dependency tree that can pull in the right libraries for each project, there’s no ability to have multiple versions of a library installed for different projects.

    If the IDE had a way to build binaries for a set of common targets, it would vastly improve the process of distributing software (and all the effort people have put in) as well as give devs confidence their code is actually going to work cross-platform. That’s the messy truth of software development, and ignoring it doesn’t make it go away.

    There was a major issue not long ago because the API used to use the digitalWrite() function to set the pullup state if the pinMode() was set to INPUT, because someone thought that would be “easier”. But by overloading that function with a semantically inappropriate side-effect, they created a situation where they can’t even issue compiler warnings after the API change to indicate they just broke your code, because you originally did it the way they told you.

    There’s no directory structure in projects that encourages re-use (yet). You can’t even write libraries FOR their IDE, USING their IDE.

    It’s bad software engineering. It’s bad computer science. It’s a denial of the realities of what it takes to build stable systems, not compared to the “olden days”, but modern best practice. Kids are being led down the garden path to the “Playground” and then left there, and then the rest of us have to pick up the pieces when they want to start contributing to important projects.

    That’s my issue, anyway. But it is nice hardware.

    • You might have provided the most articulated response I have ever had on this subject. (My post was the result of multiple discussions with people.) I appreciate you taking the time to respond. And I apologize it got caught in the spam filter! It is the longest comment anyone has ever posted here… 😉

    • Hi,

      Good points in both article and this reply. I would just add my views in hopes it would allow experienced people to see whats cooking in mind of a hobbyist.

      Being just a hobbyist, all I wanted to make was a digital thermometer for my room 😛 and that’s what got me introduced to arduino.

      Even with no background in embedded systems, arduino was very easy to start, I wrote 900 lines of code for thermometer, dancing lights and temperature based fan controls, that much easier it is, for new user.

      I tried to get in raw coding and it was a mess. I dont want to learn things from abacus, to make the registers work, I just want them to work. As its said, people dont want drills, they want hole.

      After half a dozen projects, I am looking for this topic because I discovered that STM32 offers much more than atmega328 and I want to utilize it. But after googling and seeing the messy crowd of one bricks castles of ways, as a hobbyist Arduino with its limitations, still is a lot unified.

  11. Andre D'Iorio Reply

    I see it the same way as fixing my own car. I’m not a professional mechanic but that doesn’t stop me from learning to do relatively simple stuff on my own. That doesn’t mean I’m capable of fixing any problem on any car.

    I am a hardware/firmware engineer who doesn’t see these platforms as a threat, and neither do any of the hardware or firmware folks here where I work. Some people may feel threatened, meh…I’m not sure that it’s as big an issue as it’s made out to be here.

    Platforms like arduinos are great to leverage for certain purposes such as a quick prototype, a debug board to test a product with, a proof of concept or a even a personal DIY doodad not for commercial use. But that doesn’t mean Arduino is a solution to every problem. A bunch of things have to be considered to make a product usable (that’s what’s learnt in school), and Arduino may not have the right mix of features for a product design. Lord knows there’s a lot of easy-to-use platforms to choose from nowadays (think Beaglebone or ESP32) that have a different mix.

    I like the Arduinos of this world because they force all the other chip manufacturers to invest resources in developing a richer and more accessible development ecosystem for their own eval boards…the bar has been raised, we all win.

  12. Sinan Hersek Reply

    I have a PhD in Electronics Engineering from Georgia Tech. I work extensively on wearable electronics (analog and digital) and have worked with Arduino systems as well as other embedded systems that are more difficult to use. For most devices we develop, Arduino just does not cut it. The DIY tricks and instructions that are widely avaliable also do not cut it at for the circuits we design. Arduino systems consume a lot of power and do not have enough processing capabilities. So yes, I am not too fond of Arduinos for my own development purposes.

  13. Joseph McCarron Reply

    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.

  14. 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.

  15. 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.

  16. 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,
    nippius

  17. Paul Bartram Reply

    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.

  18. 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.

  19. 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.

  20. 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…

    • Arduinos are great for quick and simple one time applications such as test fixtures etc. Saves me from a ton of hardware and firmware efforts.

      However, when I design a product I obviously design the hardware from scratch and use the particular development platform recommended by the manufacture of the selected uC as the Arduino platform does not support the selected processors, execution speed, or low level subsystem interfaces that are required.

      Bottom line, both approaches have their place depending on application.

  21. 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.

Write A Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.