Why I Hate Arduino
This week I got a nice little (semi-) surprise package, Smiley Micros‘ new book, “An Arduino Workshop“! Smokey and I go way back on AVRFreaks, and he seems to be under the misapprehension that I know what I’m talking about, so he likes sending me copies of the books he writes for review. I haven’t sat down to read it over yet, but during a discussion with Joe he asked me an interesting question:
I’d appreciate it if you could articulate why you don’t like the Arduino. If you can take the time, then write this out before you’ve had a chance to look at the introductory stuff in the book.
Don’t get me wrong – I don’t wish that Arduino didn’t exist, any more than the Gentoo folk wish death upon Ubuntu for “dumbing down” Linux for those not wanting to learn how to configure and compile their own kernel from scratch. I think Arduino is a great learning tool, one which does a great job of teaching people how to make basic programs that just work, with the minimum of effort. I like that it’s getting people completely unfamiliar with anything technical (read: arts students) into a whole new world of embedded engineering.That said, it’s not for me, because I’m simply too advanced for it to be much use. I like being able to examine/design the hardware, create drivers, and have complete control over the way everything works, to squeeze the most out of the hardware. I *like* pushing the hardware to the maximum, and knowing what bits go where. Of course, sometimes I just want to make a widget X that gets Y done quickly where such factors aren’t important, so in those cases the Arduino crutch becomes tempting. I see Arduino as this decade’s version of the BASIC Stamp product, a standardized set of hardware and software which the user can “wire up” to accomplish a goal. Much like scripting languages over statically compiled languages, you’re trading off performance for simplicity, and it’s a mark of a good engineer to know when the tradeoff is a good one. This is why PHP is so darn popular in web development; not many people have a scalability that demands the writing of all the scripts in C, and they just want to be able to create a page quickly and easily – so to in the embedded world, when an artist just wants a box to blink when someone presses a button, and doesn’t much care about how many milliseconds it takes to do it.I think the best aspect of the Arduino environment is that it is using C as the backend, which means a vastly lower barrier for people to overcome when they want to move away from the Wiring library. People can use the library when they are unsure, but mix in bits of low level register tweaking as they feel comfortable. This is in direct contrast to the BASIC Stamp and other products of its ilk, where the “simple” development environment and language is generally far removed from those used “by professionals”. Arduino is like a series of black boxes, which the user can choose to open up and look into one by one as they get comfortable, or just trust that they work the way they do and not investigate further.So that’s the long (rather than the short of it) for me; great concept, but one that I’ve outgrown the need for.