Post by curious48 on Jul 16, 2016 3:57:35 GMT
So some of the readers of this forum are abject beginners when it comes to microcontrollers (like arduino, etc) - but others are seasoned veterans, electronics engineers - some may even have degrees. In this post I'd like to examine some of what I've found about the subject of why some expert engineers "hate" Arduinos. If you're in a hurry, scroll down for the ultimate example.
Introduction
To remind everyone about the good. Firstly, the Arduino is a gateway that unlocks a world that is completely unavailable to anyone who hasn't taken a deep dive into electronics. Microcontrollers are everywhere - in your microwave, in your dishwasher, in your mouse (what, you didn't think it ran Linux did you? Well it's gotta run something...), all over cars, simply everywhere. But these are industrial things - they require expensive developer kits to program, which is often done in a special language unique to them. Arduino changed all that by creating a special user interface that runs on any PC and connects to the Arduino board over USB, and could be used to code in a standard "Arduino" language (close to C) and thereafter be translated into the low-level languages of the different microcontrollers that were compatible. The microcontrollers had to have the Arduino language loaded onto them, which in the case of buying an Arduino board, is the state in which they came. But one could also program Arduino onto a run of the mill $1.50 microcontroller, and not include a whole Arduino development board. The possibilities were endless. So Arduino unlocked a deep dive that took many people into microcontrollers. By the way, the dive goes very deep. You can read what I previously wrote about what to expect when you move into the world of microcontrollers here.
So what started this rabbit hole of why (some) people hate Arduino? I ran across this post from Dangerous Prototypes (a very good tech blog you should add to your reading list if it's not there already): "Why do you hate the Arduino?". It's still worth a quick read!
I'll quote the introduction of it here:
The contest is long-since over, but it's instructive to see what people posted - and how it might compare today. Have a click and read for yourself.
But also instructive is what the poster themselves posted:
In other words -- all those things I said above about microcontroller hardware all being different, all requiring special dev boards and languages and the like? Well, when it comes to people who design custom projects, some of them like it! That's how deep the rabbit hole goes. While you can start with a sketch (which is what microcontroller code written in the Arduino language is called) that the Arduino software will turn into proper code for any number of microcontrollers, in the end they all have to be running the Arduino framework. Making them more generic, and leaving you to use the Arduino language on the computer. Some people just prefer to intimately learn the details of their hardware, and not use a simplified language that translates into it.
Back when the above post was posted, it generated 149 responses.
Someone said:
Which I haven't talked about too much. FPGA's are extremely customized (not general purpose) boards that only do certain tasks - but do them very well. We should have posts up about them in the future. But notice the interesting part of the above quote: the full Electronics degree. That is the opposite of a simplified language you can copy a sketch from over the web, with the language (Arduino) figuring out what it means on a given microcontroller.
There is another very telling quote:
One thing that greatly surprised me about how professional electronics engineers operate - is just how much time they spend reading datasheets and documentation. I guarantee you there is not one person born in the last twenty years who read the entire Python standard library and the entire Python Language Reference before they tried to write a single line of Python. The same is not true for some people who program some microcontrollers: they might very well read every line of reference that is supplied with their chips and capabilities. Well, this is my impression anyway - for all I know they are faking it. But the poker face is very strong. If there is a pin that has nothing connected to it, they will know. If there is an operation that does not do what you would expect - they'll know that too. And when they read all of the documentation, and nothing in it surprises them, they act very surprised. "Huh! That was easy. Maybe a little too easy..." Again, this is just my impression as a curious beginner. Check back in two years to see if I feel the same way.
Another user pointed out hate that at the same time manages to underscore why the Arduino is such a fantastic tool for beginners:
The Arduino is a different language from PIC controllers, with different features. While it means that libraries for the Arduino aren't easy to transition to a different architecture - that only means that someone wrote those libraries, and they're available. You do not have to figure out how to go about writing them yourself. That is a massive boost to a beginner, who might not be able to figure out how to implement something at all. (For an idea of how much help can be provided - consider the staggering difference between communicating via a serial library, or trying to write 1's and 0's, bits and bytes - that's kind of what the experience is when you find a library that does just what you want.) That "pain in the ass" porting to PIC is all of the same pain that the person writing on the Arduino saved, to begin with. Without the Arduino, that isn't saved time at all.
There is a downside to all this simplification, however. As someone pointed out:
If the reason you can do something in Arduino, is because someone has written you a library for it - or because you found a Sketch for it on the web: then what happens when you are trying to do a novel task nobody has turned into code? If you have not learned the intricacies of programming, and have been relying on copying and pasting code and making small changes, you might be at a loss doing certain extremely subtle things that it takes a kind of "real engineer" to do. For the same reason, these "real engineers" will avoid Arduino.
But should you? After all, you're not this kind of "real engineer" - who can do a fast fourier transform on a 4 megapixel camera at 60 frames per second using a 256 byte buffer and a single bitshift, and send it over a rusty wire at two frames per crystal cycle using an obscure effect they read about four hundred pages into Nicola Tesla's autobiography - remember, they read ALL the documentation - so what are you even doing?
There's certainly something to be said for spending 10 semesters getting a Bachelor of Science in Engineering degree. However, proponents of the Arduino might argue that there might be something to be said for reading a thermometer...without doing that first.
Some complained of the IDE (the Arduino environment which runs on the desktop - the basis for uploading Arduino code, and which translates it into code the microprocessor will accept, and then uploads it.) There were statements that it is somewhat out of date. But there is no clear and easy alternative, nor any other project that would do as well. So while you can get a purer microcontroller experience coding directly against a chip using its native developer code, this does not help ease the transition or just get something done when you've first read about it on the web. The Arduino, for bettter or for worse, is the easiest way to get code onto Arduino-compatible microcontrollers. The library support along is astounding.
I googled to see what some libraries were that someone found useful. Here is an interesting one - Si4703 FM Radio Receiver Hookup Guide. This will highlight both what people love, and hate, about arduino. What's to love? If you have the components, then in 7 minutes of carefully following the instructions (or 14 minutes if you're methodical) you will have built a working radio receiver. Try to do that starting with microchips and microcontrollers and schematics or data sheets. You won't even be done reading the first page.
Yet this is precisely what those who might "hate" the Arduino might object to. After all, have you really learned to create a radio? Or are you just using someone's sketch in the hope that it works as they advertised.
There is no theoretical answer to this. If the library doesn't support something the chip does, then you won't have access to it. Conversely, the library author has a deeper knowledge than you do - and you get only what this person chose to make available to you, in the manner that they chose to make available to you. It's kind of like the difference between cooking in a kitchen, and ordering something from a chef. Who has more control? Who "really" understands their food? Of course, the person who has to write every step, or the chef who is actually coding what they've made available on your menu (i.e. via an Arduino library).
Check out the link for a lot more angry comments about how easy people think electrical engineering becomes with an Arduino.
2. The situation today.
Still with us? Let's jump ahead to the present day. Now Arduino is even more popular than at the above date. Here, James Lewis, the "baldengineer", addresses Why do engineers (love to) hate Arduino? with the subtitle "Engineers love or hate Arduino, but why?"
Let's see how things have changed. He begins his article writing
so that clues us in that the situation is very similar a few years in (and indeed, everything I wrote in the first section is reflected in sources today). As you can see in his article, he divides criticism into 3 main sections: "It's easy"; "It's not perfect"; "It's popular". In essence, Arduino lifts the veil and prevents people from having to know how things work. That FM Radio sketch above? It means you might not know what Arduino is even communicating to the chip. Likewise, as we stated, there are cases in which the abstractions the libraries provide just aren't the best way to get something done. This is the difference between being a trained specialist, or someone who "just knows how to do it". And, of course, there is the problem of popularity.
But let's be honest: popularity is what allows many people who have not invested ten semesters and then ten years into electronics engineering, to make their dream come true. While someone who has might sneer in disgust, at the end of the day it's the person with the idea and the dream that matters. If you can make your dream come true, putting together sketches that do things that you couldn't code yourself -- who's the one who can is really doing things?
Other resources:
I wouldn't normally link them, but here is:
Finally, I found this example.
The ultimate example
Open these two pages:
- this example from the grumpyprogrammer about why he hates the Arduino. "And this is basic knowledge. It really is. That's just basic switches tied together creating a closed circuit." Simple.
- the Arduino page he objects to.
One of these is easy for almost everyone. The other one, despite his claims, is...not.
What Grumpyprogrammer thinks everyone should understand:
He says:
What Arduino thinks everyone should understand:
Creation
char waitForKey()
This function will wait forever until someone presses a key. Warning: It blocks all other code until a key is pressed. That means no blinking LED's, no LCD screen updates, no nothing with the exception of interrupt routines.
char getKey()
Returns the key that is pressed, if any. This function is non-blocking.
That example really drives things through. The Arduino playground page he links is easy to read and very accessible, with lots of examples. By contrast, his language goes right over the head of many people.
Final thoughts
So, that about sums up why some people "hate Arduino". When you speak with electronics engineers, sometimes you should be careful not to mention Arduino, and instead talk in terms of features and pins. Closer to the datasheet you're looking at. But if you build a prototype using an Arduino - you should know you're in good company. Many very serious projects were quickly prototyped in part using Arduino programs. This might not make it into mass-scale production, but before you can mass-produce something at the lowest cost, with the lowest-cost components, with an electronics engineer using every feature to extract the most value -- it certainly helps if you can show that it's worth getting the thing working as you envision at all. And there is no easier way to do that than with Arduino.
Arduinos are very good, and very important for us.
Feel free to leave your comments below, or take a look at some of our members' recent posts.
Introduction
To remind everyone about the good. Firstly, the Arduino is a gateway that unlocks a world that is completely unavailable to anyone who hasn't taken a deep dive into electronics. Microcontrollers are everywhere - in your microwave, in your dishwasher, in your mouse (what, you didn't think it ran Linux did you? Well it's gotta run something...), all over cars, simply everywhere. But these are industrial things - they require expensive developer kits to program, which is often done in a special language unique to them. Arduino changed all that by creating a special user interface that runs on any PC and connects to the Arduino board over USB, and could be used to code in a standard "Arduino" language (close to C) and thereafter be translated into the low-level languages of the different microcontrollers that were compatible. The microcontrollers had to have the Arduino language loaded onto them, which in the case of buying an Arduino board, is the state in which they came. But one could also program Arduino onto a run of the mill $1.50 microcontroller, and not include a whole Arduino development board. The possibilities were endless. So Arduino unlocked a deep dive that took many people into microcontrollers. By the way, the dive goes very deep. You can read what I previously wrote about what to expect when you move into the world of microcontrollers here.
So what started this rabbit hole of why (some) people hate Arduino? I ran across this post from Dangerous Prototypes (a very good tech blog you should add to your reading list if it's not there already): "Why do you hate the Arduino?". It's still worth a quick read!
I'll quote the introduction of it here:
Why do you hate the Arduino?
That’s assuming you do. We’ve noticed a general malaise towards the Arduino and/or Arduino projects in comments at tech blogs. Arduino is to Hack a Day as Knex guns are to Instructables.
What’s the deal? Too many newbies with blinken LEDs? $30 is too much for an AVR with a bootloader? Is it the platform or the projects?
We all know the arguments for the Arduino: it’s an easy and open prototyping platform with free tools and great community support. But why do so many geeks detest the Arduino? Why the hate?
We’ll send a free Bus Pirate v3 PCB to the commenter with the best rant for- or against- the Arduino.
That’s assuming you do. We’ve noticed a general malaise towards the Arduino and/or Arduino projects in comments at tech blogs. Arduino is to Hack a Day as Knex guns are to Instructables.
What’s the deal? Too many newbies with blinken LEDs? $30 is too much for an AVR with a bootloader? Is it the platform or the projects?
We all know the arguments for the Arduino: it’s an easy and open prototyping platform with free tools and great community support. But why do so many geeks detest the Arduino? Why the hate?
We’ll send a free Bus Pirate v3 PCB to the commenter with the best rant for- or against- the Arduino.
The contest is long-since over, but it's instructive to see what people posted - and how it might compare today. Have a click and read for yourself.
But also instructive is what the poster themselves posted:
Speaking personally, we don’t hate the Arduino. We don’t use it, but that’s because it’s way to expensive for our tastes, and custom hardware is our shtick. We enjoy designing a custom hardware solution for a given problem, and Arduino abstracts that into a software exercise.
In other words -- all those things I said above about microcontroller hardware all being different, all requiring special dev boards and languages and the like? Well, when it comes to people who design custom projects, some of them like it! That's how deep the rabbit hole goes. While you can start with a sketch (which is what microcontroller code written in the Arduino language is called) that the Arduino software will turn into proper code for any number of microcontrollers, in the end they all have to be running the Arduino framework. Making them more generic, and leaving you to use the Arduino language on the computer. Some people just prefer to intimately learn the details of their hardware, and not use a simplified language that translates into it.
Back when the above post was posted, it generated 149 responses.
Someone said:
As part of my Electronics degree we focussed far more on FPGAs than uProcessors so I inherently don’t like uProcessor based designs. FPGAs will rule the world!!!
Which I haven't talked about too much. FPGA's are extremely customized (not general purpose) boards that only do certain tasks - but do them very well. We should have posts up about them in the future. But notice the interesting part of the above quote: the full Electronics degree. That is the opposite of a simplified language you can copy a sketch from over the web, with the language (Arduino) figuring out what it means on a given microcontroller.
There is another very telling quote:
I think that the hate stems from the old-school hackers’ belief that you have to know everything about everything before you can do anything, and that the other 97% of the population is just plain wrong to not think the way they do
One thing that greatly surprised me about how professional electronics engineers operate - is just how much time they spend reading datasheets and documentation. I guarantee you there is not one person born in the last twenty years who read the entire Python standard library and the entire Python Language Reference before they tried to write a single line of Python. The same is not true for some people who program some microcontrollers: they might very well read every line of reference that is supplied with their chips and capabilities. Well, this is my impression anyway - for all I know they are faking it. But the poker face is very strong. If there is a pin that has nothing connected to it, they will know. If there is an operation that does not do what you would expect - they'll know that too. And when they read all of the documentation, and nothing in it surprises them, they act very surprised. "Huh! That was easy. Maybe a little too easy..." Again, this is just my impression as a curious beginner. Check back in two years to see if I feel the same way.
Another user pointed out hate that at the same time manages to underscore why the Arduino is such a fantastic tool for beginners:
Because since the arduino, the PIC is getting lesser attention, and also, the abstraction from the hardware, provided by the scripting language it uses and the huge quantity of pre-made libraries makes most interesting projects a real pain to port to another non-arduino uP platform (like the PICs)
The Arduino is a different language from PIC controllers, with different features. While it means that libraries for the Arduino aren't easy to transition to a different architecture - that only means that someone wrote those libraries, and they're available. You do not have to figure out how to go about writing them yourself. That is a massive boost to a beginner, who might not be able to figure out how to implement something at all. (For an idea of how much help can be provided - consider the staggering difference between communicating via a serial library, or trying to write 1's and 0's, bits and bytes - that's kind of what the experience is when you find a library that does just what you want.) That "pain in the ass" porting to PIC is all of the same pain that the person writing on the Arduino saved, to begin with. Without the Arduino, that isn't saved time at all.
There is a downside to all this simplification, however. As someone pointed out:
These “hackers” as they like to call themselves should get real, I’ve not seen one real engineering project done with this platform, and the fact that they use apb modules like the WiFly grimes my gears.
Blinking leds, dataloggers, temperature sensors, lcd displays, it is getting too repetitive for me, like a virus.
Blinking leds, dataloggers, temperature sensors, lcd displays, it is getting too repetitive for me, like a virus.
If the reason you can do something in Arduino, is because someone has written you a library for it - or because you found a Sketch for it on the web: then what happens when you are trying to do a novel task nobody has turned into code? If you have not learned the intricacies of programming, and have been relying on copying and pasting code and making small changes, you might be at a loss doing certain extremely subtle things that it takes a kind of "real engineer" to do. For the same reason, these "real engineers" will avoid Arduino.
But should you? After all, you're not this kind of "real engineer" - who can do a fast fourier transform on a 4 megapixel camera at 60 frames per second using a 256 byte buffer and a single bitshift, and send it over a rusty wire at two frames per crystal cycle using an obscure effect they read about four hundred pages into Nicola Tesla's autobiography - remember, they read ALL the documentation - so what are you even doing?
There's certainly something to be said for spending 10 semesters getting a Bachelor of Science in Engineering degree. However, proponents of the Arduino might argue that there might be something to be said for reading a thermometer...without doing that first.
Some complained of the IDE (the Arduino environment which runs on the desktop - the basis for uploading Arduino code, and which translates it into code the microprocessor will accept, and then uploads it.) There were statements that it is somewhat out of date. But there is no clear and easy alternative, nor any other project that would do as well. So while you can get a purer microcontroller experience coding directly against a chip using its native developer code, this does not help ease the transition or just get something done when you've first read about it on the web. The Arduino, for bettter or for worse, is the easiest way to get code onto Arduino-compatible microcontrollers. The library support along is astounding.
I googled to see what some libraries were that someone found useful. Here is an interesting one - Si4703 FM Radio Receiver Hookup Guide. This will highlight both what people love, and hate, about arduino. What's to love? If you have the components, then in 7 minutes of carefully following the instructions (or 14 minutes if you're methodical) you will have built a working radio receiver. Try to do that starting with microchips and microcontrollers and schematics or data sheets. You won't even be done reading the first page.
Yet this is precisely what those who might "hate" the Arduino might object to. After all, have you really learned to create a radio? Or are you just using someone's sketch in the hope that it works as they advertised.
There is no theoretical answer to this. If the library doesn't support something the chip does, then you won't have access to it. Conversely, the library author has a deeper knowledge than you do - and you get only what this person chose to make available to you, in the manner that they chose to make available to you. It's kind of like the difference between cooking in a kitchen, and ordering something from a chef. Who has more control? Who "really" understands their food? Of course, the person who has to write every step, or the chef who is actually coding what they've made available on your menu (i.e. via an Arduino library).
Check out the link for a lot more angry comments about how easy people think electrical engineering becomes with an Arduino.
2. The situation today.
Still with us? Let's jump ahead to the present day. Now Arduino is even more popular than at the above date. Here, James Lewis, the "baldengineer", addresses Why do engineers (love to) hate Arduino? with the subtitle "Engineers love or hate Arduino, but why?"
Let's see how things have changed. He begins his article writing
A couple of months ago [article date April, 2016] a 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.
so that clues us in that the situation is very similar a few years in (and indeed, everything I wrote in the first section is reflected in sources today). As you can see in his article, he divides criticism into 3 main sections: "It's easy"; "It's not perfect"; "It's popular". In essence, Arduino lifts the veil and prevents people from having to know how things work. That FM Radio sketch above? It means you might not know what Arduino is even communicating to the chip. Likewise, as we stated, there are cases in which the abstractions the libraries provide just aren't the best way to get something done. This is the difference between being a trained specialist, or someone who "just knows how to do it". And, of course, there is the problem of popularity.
But let's be honest: popularity is what allows many people who have not invested ten semesters and then ten years into electronics engineering, to make their dream come true. While someone who has might sneer in disgust, at the end of the day it's the person with the idea and the dream that matters. If you can make your dream come true, putting together sketches that do things that you couldn't code yourself -- who's the one who can is really doing things?
Other resources:
I wouldn't normally link them, but here is:
- a 4Chan discussion "Why do people not like Arduino?" (Includes some bad language). A lot of arguments on both sides - some people object to the relatively high cost as compared with bare microcontrollers. However, near the end, someone points out that it is best for prototyping. These days, when Arduino compatible boards are available very cheaply, the argument is somewhat moot. While there is something to be said for shaving off every penny moving to a native microcontroller, such as a very inexpensive PIC, development cost is not trivial, and, yes, some people ship Arduinos in production.
Finally, I found this example.
The ultimate example
Open these two pages:
- this example from the grumpyprogrammer about why he hates the Arduino. "And this is basic knowledge. It really is. That's just basic switches tied together creating a closed circuit." Simple.
- the Arduino page he objects to.
One of these is easy for almost everyone. The other one, despite his claims, is...not.
What Grumpyprogrammer thinks everyone should understand:
He says:
You may think that this properly supports simultaneous key presses: if you activate the first column, and read voltage from the first and third lines, you could deduce that keys 1 and 7 are pressed. But that could be wrong. It could be that keys 1, 3 and 9 are pressed. If you look at the circuit carefully, pressing simultaneously 1, 3 and 9 will create a full circuit. Powering on the first column will make the current go down to button 1. From here, it'll go the left to reach wire RC.3, but will also go to the right until it reaches the button 7. Then it will go up towards RC.5, but that's fine and won't fry the MCU, because it's set as pull down, but will also go down towards button 9, and then left until it reaches wire RC.1. So while activating the first column, you'll read the third line. Meaning that your MCU will ultimately think that buttons 1, 3, 7 and 9 are pressed, while only 1, 3 and 9 actually are, effectively creating a phantom activation of 7.
What Arduino thinks everyone should understand:
Creation
const byte rows = 4; //four rows
const byte cols = 3; //three columns
char keys[rows][cols] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'#','0','*'}
};
byte rowPins[rows] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[cols] = {8, 7, 6}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, rows, cols );
char waitForKey()
This function will wait forever until someone presses a key. Warning: It blocks all other code until a key is pressed. That means no blinking LED's, no LCD screen updates, no nothing with the exception of interrupt routines.
char getKey()
Returns the key that is pressed, if any. This function is non-blocking.
That example really drives things through. The Arduino playground page he links is easy to read and very accessible, with lots of examples. By contrast, his language goes right over the head of many people.
Final thoughts
So, that about sums up why some people "hate Arduino". When you speak with electronics engineers, sometimes you should be careful not to mention Arduino, and instead talk in terms of features and pins. Closer to the datasheet you're looking at. But if you build a prototype using an Arduino - you should know you're in good company. Many very serious projects were quickly prototyped in part using Arduino programs. This might not make it into mass-scale production, but before you can mass-produce something at the lowest cost, with the lowest-cost components, with an electronics engineer using every feature to extract the most value -- it certainly helps if you can show that it's worth getting the thing working as you envision at all. And there is no easier way to do that than with Arduino.
Arduinos are very good, and very important for us.
Feel free to leave your comments below, or take a look at some of our members' recent posts.