Why Arduino is not the right educational tool

I could have started with ‘why the Arduino sucks’ or ‘why the Arduino is bad’, which would have gotten me a tremendous load of page views. But I didn’t because it simply isnt’t true. The Arduino does not ‘suck’, and neither is it bad in its own right. It just isn’t the right tool to teach people programming, but it’s abused that way. Let me tell you why:

What is the Arduino?

“Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It’s intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments.” There. I just copy-pasted that from www.arduino.cc. And they’re right! The arduino project is great for  creating interactive objects or environments. You’ve got a gazillion of code examples to use, you can easily read out sensors that would take hours to days to get going (even with coding experience) and a large user base to ask questions. Above all, creating interactive objects or environments is about human interaction (fun!). Hook up a sensor to an actuator, create new combinations and play around… But it’s NOT a good standard to learn coding, or benefit from the power of embedded electronics.

And that’s where I’m bearing a grudge to the use of Arduino’s as a ‘getting started with programming’. Learning to work with microcontrollers is sometimes a steep pathway, but leverages the power of these little beasts. Using an Arduino to learn programming is like using MacDonalds to learn cooking; you get your meal, very fast, but you don’t get the skills to cook yourself. When you need a quick meal, the Mac can be OK (debatable, but just to make my point), but it’s not a cooking class.

5 reasons why, in no particular order:

1: no project space / code partioning / decent IDE

To me this is a great nuisance; I understand you don’t want to overwhelm novices with options, but the Arduino IDE ridicules decent code writing. Maybe you’re supposed to bend your knees that they’ve included color highlighting of variables, but come on, if you want to write decent code, at least give the option to look up variable definitions. See what that looks like below, in a screenshot from Code::Blocks. Another, somewhat related point is that you’re supposed to write all your code in one ‘sketch’. When you want to write any substantial program, with functions you’d like to be able to use later on, good practice (or even complimentary practice) is to create modular pieces of code. Writing everything in one long file is going straight against that objective, and stimulates writing ‘spaghetti code’, with definitions of variables everywhere and nowhere.

The concept of why header files are important is described here on www.cplusplus.com. Another good discussion and fast ‘howto’ is written here (read the discussion!). Also, a great document describing why and how modularizing your code is great can be found on this post at embedded.com

To get a good understanding of  ‘how it’s done right’, please take a look at this very clear document from MIT (pdf)  regarding header files:

“A well organized C program has a good choice of modules, and properly constructed header files that make it easy to understand and access the functionality in a module. They also help ensure that the program is using the same declarations and definitions of all of the program components. This is important because compilers and linkers need help in enforcing the One Definition Rule.”


Being able to look up definitions and implemenations....

Being able to look up definitions and implementations….

Being able to look up the definitions and implementations of files is a great help in writing modularized code. The Arduino IDE does not provide an easy way to create other c / h files, nor does it enable looking up the definitions of it’s own code (what does ‘digitalWrite’ actually do?). When learning to program C, PLEASE learn to use header  files appropriately!

2:bad abstractions / naming

The Arduino ‘programming language’ uses a lot of predefined functions to use peripherals of the Arduino. A lot of these functions use misguiding names or use bad abstractions, simply not describing what they’re doing. Good hardware abstraction saves the end user from fiddling a lot, bad hardware abstraction confuses. A few examples:

  1. analogWrite(int): “writes an analog value (PWM) to a pin”. You say what? PWM is analog? It’s as much analog as a CD contains analog information. Pulse width modulation is NOT analog; the rate is ‘approximately’ 490Hz, and no clues are given to what RC combination you should use to make it analog. This is misguiding; good enough for a LED but it’s not the ‘Analog’ you’d like to use as a setpoint for an analog control system. 
  2. OK, and if you generate PWM, at LEAST let me be able to set the PWM frequency.
  3. pinMode(): I have to admit this is fixed now, but a while ago you had the options ‘INPUT’ and ‘OUTPUT’ only. When you wanted to have an input with pullup, you also had to do a digitalWrite() to the pin you just made an INPUT. When you know the AVR architecture, you know that you’re writing the DDRx and PORTx registers, but to a newbie it’s quite strange to ‘write’ to a pin you just made ‘input’ to get a pullup. It’s fixed now, but it took too long; the pinMode function was already available, and it just needed this extra option. This was not abstracting the hardware, but even creating code that will not be able to port nicely to other microcontrollers (which is probably why it was fixed around the time the Due came).
  4. variables: why use all the chars, ints, longs, etcetera? Using stdint (uint8_t, uint16_t, int32, …) will give more insight, and more portable code. The int for AVR-GCC is 16-bit, while it is 32-bit for the GNU ARM compiler….
  5. Missing abstraction / feature: progmem. A lot of people use strings in memory for debugging. Fixed strings could be stored in flash memory and read from that memory, that feature is present in avr-libc. My guess is that 90% of people saying ‘my Arduino is full’ would benefit from adding some kind of keyword.

3: horrible documentation

Again, this article / rant is based on using it for educational purposes. The documentation on the functions tells nothing about which peripherals are used, not even on a deeper level, hidden away from normal users. I’ve used openFrameworks before, and at least with their IDE you can look in the code how functions are implemented. When using the Arduino, you’re kept dumb. Could I be using a timer while running the servo() functions? Will sending a serial string block my program? Will using analogWrite interfere with other timed functions? You can’t read it in their reference manual.

The Arduino reference also describes its ‘language’. The underlying framework uses some C and some C++ features, both not clearly described. If you want to learn programming, ‘Arduino’ is not the language you’d like to have on your resume, you want to be able to program in C! The difference / equality is not clear, and leads to confusement when going to other microcontrollers or ANSI-C environments. Where are classes used? Where are structs used? I understand that Arduino doesn’t want to scare off new users, but there is no roadmap to ‘advanced’ use.

4: no access to peripherals / wasting resources

I know, you do have access to the peripherals of the Arduino / Atmel chip when you mingle your Arduino code with ‘real’ C and use the Atmel registers. But when you’re that far, please do yourself a pleasure and write your own code, where you know which peripherals are used in which way. When I started programming microcontrollers I was amazed at the speed at which they worked (8 MHz PIC); writing code optimized for the peripherals, using interrupts to do as much parallel as possible showed me what power lies in embedded devices and computers. To me, using the Arduino to learn programming embedded systems takes away that golden edge of creating ‘lean and mean’ applications.

At my current job, people are trying to write control loops using the Arduino; by using the micros() funciton they take the start time of the loop() function, do their tasks, and then poll the micros() function to wait until their loop time has passed. This wastes so much potential for future tasks that should be added, or for processes that are not running at the same timebase. This alone is what makes the mbed better; it’s implementation of ‘Ticker’ functions has its drawbacks, but at least uses interrupt-based timing, leaving the main loop for ‘slow processing’ tasks.

5: no ‘real’ debugging

When the Atmega328 was used no debugging port was available; now the Due is released and the Atmel devices have debug ports from tiny series (DebugWire) to the XMEGA series (PDI and JTAG), this powerfull toolset is kept from the Arduino users. I think development time of applications drops by 30% for me when being able to use a proper debugger setup. At least the ARM could use the OpenOCD implementation, and give power to the programmers. A few breakpoints give a very fast indication of what code is executed, and what error conditions happen. This is where I get very enthousiastic about all new ARM development kits with debugger hardware included. Add arm-gdb and OpenOCD, and you’re up! Setting up those toolchains can be a bit fiddly, but completely worth it when trying to make a decent embedded application.


What’s your alternative?

I think that’s enough for complaining. Your next question should be: how do we educate programming with a good environment? I have several options, all of whom might be worse or more difficult to start with. To get back to my comparison between the Mac and learning to cook yourselve: learning to cook takes someone to teach you. I’ve helped quite a few people to show how to start using other tools, and in general they’re a bit grumpy at the start (why is this so laborious?), and happy in the end (now I understand what’s happening!).

  1. Scratch. To get youngsters to start programming, this is fun, and shows what programs are. It’s fun and easy, and it even enables code partitioning! It’s not embedded though, but if you start out young, this is a good way to learn programming.
  2. mbed. Now open sourced, this lets you use NXP boards and the inexpensive Freescale Freedom board. Here I’m getting quite enthousiastic. The compiler is online, which is great for novices, as you don’t have to install toolchains. Also a humongous archive of code examples is available that you can easily import into your project. Yes, projects! You can organize and partition your code, and use version control online. The code provided by mbed is C++, using classes and operator overloading, which was a bit confusing for me as ANSI-C-er at first, but the documentation is SO clear, and easily available (again found in your project) that it was more encouraging me to also use those features. Peripherals cannot be used simply, but you can use timers indirectly to generate timing interrupts, and again this is well documented.  You don’t like online services? You can also use it offline. The only downside to the mbed for me is that you can’t debug using breakpoints or watchpoints.
  3. AVR-GCC /WinAVR, with Xmega series. The AVR-GCC toolchain (with avr-libc) has a respectable reputation and a very good userbase (www.avrfreaks.net). The reason I recommend the Xmega series is the *fantastic* documentation, the fact that the peripherals each have their own application note, that Atmel Studio is bloated, but gives you the real tools in hands for code partitioning (Goto definition of…), debugging (breakpoints!) and simulation (view bits in peripherals!). When using the (overpriced) Dragon debugger you can debug devices up to 32k code size. Starting with this setup without any coding knowledge might be a bit too steep though, try to get help online, or ask a knowledgeable friend to help out. Reading the application notes just gives me that fizzling feeling that you can make a system that does SO much on its own once you set it up; DMA’s to get ADC values into memory, event system to trigger timers to trigger DACs, etcetera. Quite a bit of work, but than you’re doing embedded-fu. Like making Sushi instead of going to the Mac…..
  4. Use Launchpad/STM32/… Other ARM board. Yes and no here… Yes, ARM is the future, but it’s quite complicated to start with, I think. Also, when using free toolchains you have to put a lot of work into setting up the toolchain. It’s rewarding though; boards with debuggers for takeaway prices (EUR 8 for an STM32F0 Discovery -> Atmel, are you reading this?!), and something to put on your resume: I’ve worked with ARM. The documentation however is mostly poor and frightingly large…. Also, the option set for compilers and IDE’s is so large, that it’s hard to find out why your program is not compiling when it isn’t…


The Arduino is great ‘programming fastfood’: easily available, quick result and sometimes quite tasty. But it isn’t suitable for educating ‘how to program’ or ‘getting performance out of microcontrollers’, or use it as a first step that has an advanced level for enthousiasts. To do that learn real cooking; start with boiling water with scratch, cook potatoes with mbed and make sushi with Atmel to end up going freestyle on the ARM development boards. Now you’re playing with power!


79 thoughts on “Why Arduino is not the right educational tool

  1. It depends how you define programming. Not everyone needs to work on a low and professional level.

    I agree with Scratch, since it’s all in one environment.

    Considering working with electronics Arduino is the most easy way to start. Why you think most microcontroller related projects on Kickstarter adapt Arduino. It’s unbeatable if you consider all the resources available and the community. Maybe not the best IDE, but when you start programming with if/else you don’t need the bells and whistles you mention.

    • admin says:

      Hello Kasper,
      There’s no way to beat the number of Arduino-based projects. But that doesn’t mean it’s a good basis to start learning programming.

      If your only goal EVER is to do some if/else logic, and read some sensors and display data (or turn on a motor) on a human-compatible time scale, Arduino is a good tool to do some quick and dirty programming. If you want to do more, now or in the future, there is no direct path to look how the underlying code is written, or a way you’re encouraged to follow ‘good practice’ rules for encapsulation or abstraction. This, in my opinion, cuts off a very important part of learning the skill of programming.
      When I take a look at the mbed, I see that the quick and easy options for programming are still there, but that I can easily have a quick look in the sources if I want to, and that the IDE supports and encourages good coding techniques; see these course notes on writing modular code.
      The fact that Arduino is fully open source, and thus cheap to clone has brought it far, and it deserves credit for making microcontroller projects appealing again. But I’ll keep stating that it’s wasting resources, and that the complete environment discourages good coding practices.

    • Mark Harrington says:

      Ps for those who want to learn how to do this effectively in c here is a tutorial I found on the net


    • Mark Harrington says:

      For a more in depth study of this topic please see following article below


      What I found particularly interesting was that part about Ethernet connectivity and of course the examples quoted with respect to communicating across the net

      Good until you reach this part Hmmmm interesting ?? Object oriented programming

      Now what The student has only learnt how to use the Arduino ide How will you ever explain this bit of code to them seeing as they have only ever understood Arduino IDE never mind c , c++ java or html or style sheets or javascript

      Now all of a sudden lets introduce them to net programming and applets shall we

      hypermedia.net. * :

      Huh ??? Where did this ever appear in the java framework why just java.net

      Oh well first problem

      public void paint(graphic g )

      Oh do they understand all of this ?? which context are you in at the moment I can see this becoming ever so confusing

      And what about the applet tags then and how do you set the size of the applet ?

      Well I never all of a sudden you’ve now got to show them all of this then take then back to simple arduino

      You are going to get some questions here aren’t you, never mind confusion. com

      And what about applet signatures and the security manager package Oh !! Security manager now what ??

      See code below

      import hypermedia.net.*;
      UDP udp; // define the UDP object
      String currentMessage;
      String ip = “”; // the Arduino IP address
      int port = 9999; // the Arduino UDP port
      void setup() {
      size(700, 700);
      udp = new UDP( this, 10000 ); // create UDP socket
      udp.listen( true ); // wait for incoming message
      void draw()
      ellipse(width/2, height/2, 230, 230);
      void receive( byte[] data ) {
      // if the message could be “Pushed” or “Released”
      if ( data.length == 6 || data.length == 8 )
      for (int i=0; i < data.length; i++)
      currentMessage += data[i];
      // if the message is really Pushed
      // then answer back by sending "Light"
      if (currentMessage == "Pushed")
      udp.send("Light", ip, port );
      else if (currentMessage == "Released")
      Chapter 11
      [ 407 ]
      udp.send("Dark", ip, port );

      problems problems problems

      No main method, threading , the this pointer never mind c pointers destroying objects, creating objects through constructors and the friendly , private , public functions Overriding functions and of course templates polymorphism , locking threads , thread priority to name but a few hmmm !!

      What happened to good old fashioned c then

    • chris says:

      To whom it may concern, I am in the electricl engineering field and yes I am an engineer, It is the year 2015 now and everything is going smaller and easier to use for the end user. The IDE for Arduino was inovative and had the fore site to what was coming. There are companies now that employ people to work with the arduinos to control robot on assembly lines. Due to the fact that they are so very easy to program everything. Yes even a child could do it. Chech out Adafruit and arduino badge system fr children. If your a die hard programmer that whom knowledge spans back to GW basic and before, then your just use to doing things the hard way and the long way.
      In the year 2015 we want it done “now” and “quick”. We don’t to wast time on a program that will take 40 lines for code to run a machine. When we can do in 4 lines with the arduino ide. So conclusion: get out of the way for the new geration of fast programming to get the same work done in a third of the time. C and C++ …time to retire

  2. John Lloyd says:

    I would disagree. Arduino is great for imparting a concrete understanding of basic programming concepts to children. Learning loops, conditional logic, and basic functions form the core of any Pri/Sec level CS class. Arduino lets students learn those core concepts through playing with something they can touch and interact with. Projects also require skills from other disciplines which help pique young imaginations.

    • admin says:

      Hello John,
      Thanks for your comment. I value your opinion, but I still think Arduino is almost a dead end ally when it comes to going further with embedded programming. Which is fine if you’re forced to do some electronics in your project, but don’t want to learn all the concepts of embedded programming. If you want to learn programming to ‘young adults’, give them something that opens up their options, instead of closes them in. Although Arduino is open source, it’s quite hard to browse that code from the IDE, and general programming concepts are not taught due to the restricted IDE (encapsulation, abstraction).

    • Tyler says:

      How does arduino teach to children? Kids in my high school are lucky to be able to text! And now all of a sudden, arduino is for children? Yes it may be simple, but for children?

      • admin says:

        Hi Tyler,
        Thanks for your response, but I do not completely get your point. I’ve seen Arduino used as educational platform (for younger and older ‘children’), and I think it is a very unsuitable choice to use it for that purpose. Of course, teaching requires a teacher, especially with more complex stuff as programming. I think I never suggested that any platform would be able to teach ‘by itself’.

        • Aditya Goturu says:

          Bah! I am 16 and I grew sick of the overprotectiveness of arduino. Me and some of my friends are using various atmegas and attinys.

  3. Dan says:

    Good point!
    I’ve just add the TI’s Launchpad line on your alternative list.

  4. Jeroen says:

    I would strongly disagree. First there is no difference between avr-gcc and Arduino. It is exactly the same, just packaged in such a way that a beginner can start straight away.
    Second: I have seen how my 13 year old son went from not interested in programming at all to enthusiastically programming and tinkering with his Uno. That is where Arduino excels: in getting people into programming and into electronics. Sure, later in life you have to learn programming on a more serious level. And you know what? You can do that using Arduino! Get the free Atmel IDE and away you go. All the functionality you can ever need. Still not satisfied? Get a Due and learn the future, not some kind of irrelevant sideshow.
    The Arduino is not perfect, especially the documentation of advanced features is unstructured and takes a while to get to grips with. And many versions of the Arduino seem superfluous.

    • Boo says:

      How on earth did you come to this conclusion ? I find Arduino fanatics are always sticking their necks where it doesn’t fit.

    • admin says:

      I think that your son is lucky enough to have a devoted teacher that can help to show the road to a full IDE. That’s missing for all those that learn Arduino and are than scared by the ‘complexity’ of other systems.
      I don’t know how many people not even know that they’re programming C (they’re programming ‘Arduino’!) let alone understand that it’s avr-gcc or understand how to migrate all libraries to a AVR-Studio environment.
      For -again- educational purposes it’s better to have an environment that has a bit steeper learning curve, but also gives the freedom of learning more from the environment you’ve took your first steps in.

    • Dave says:

      I’m gonna agree with both of you on this. I wasn’t that interested in programming until I discovered Arduino. It made me want to learn about it. But, as someone who is just getting into it, it seems pretty obvious that if you really want to seriously tinker with Arduino, then it would behoove you to learn how to program. I can see how some impatient people would just wanna skip that and simply ask someone to tell them how to get his/her program to do what they want. So I guess Arduino would be a good motivator. I’m still looking for a good starting point for a good base knowledge foundation. I’m not gonna use Arduino as my foundation tho, thats for sure. I’m thinking Python or Ruby

  5. Boo says:

    Arduino => Lazy people who loves comfort zones, good for doing quick things.

    True micro controller development teaches you about ISR, registers, multiplexing, setting up a port that shares peripherals interfaces, working in C or ASM.

  6. Mark Beckett says:

    While you can’t deny that Victor is right with regard to popularity and hiding the underlying functions, there is a comparison I once made to someone else.

    I presume most of you drive/own a car.!

    How many of you know the inner workings of the engine, the valve timing, injection, and the engine management computer?
    What about the gearbox (auto or manual) and exactly how each part interacts based on the diff ratio?

    When you get into your car, and want to do a short run to the shop, you really don’t expect to have to set the ignition timing, the fuel ratio, and the gearbox and diff settings.

    Maybe you have some default settings, based on yesterdays trip when it was fully loaded with 4 people.

    Most people just expect to get it, and drive.
    The underlying features are hidden and just work.

    Sure as it sits it has much more potential, and it won’t win a race, compete in a rally, or do some of the other stuff that a specially built version in which each component is adjusted to suit the event and conditions.

    The point is that some people simply want a car to drive.
    Arduino is like that car, hop in, start it and away.

    There are probably thousands of users that will never take up programming, but may start playing with hardware and use the Arduino IDE in order to achieve what they want/need.

    So sorry Victor I think your points are valid, but its still ONE tool available to educate.
    It is certainly not the only tool, but a lot less confusing to many people.


    • admin says:

      Hi Mark,
      Very valid point, and good comparison. But if you want to teach engineering, and not teach driving the car, you’ll have to know something about internals. I guess I want to go ‘deeper’ in teaching than others…

      • Greg says:

        The point you are missing is that Arduino is not about teaching engineering. It is about providing an experience where the students can quickly getting something working so they are inspired and have the confidence to try to do more.

        Starting by installing a programming tool chain then trying to understand a proper programmer’s IDE will discourage most of them before they write their first line of code. Dealing with DDR and PORT registers, plus bit operations just to get an LED to blink would further discourage the few that lasted through the setup.

        Your McDonald’s / cooking analogy is poor. McDonald’s is to cooking as handing someone a box with a blinking LED is to programming. A better analogy is that Arduino is like starting to teach a kid to cook by having them make Mac-n-cheese. Using engineering tools to teach a beginner to program is like teaching a kid to cook by having them make a cupcake from scratch in a bakery. They’ve never been in a bakery before, the tools are all oversized for making one cupcake, and there are a dozen steps that have to be done nearly perfectly to get an edible result.

    • Mark Harrington says:

      You could say this too equally you could argue what happens when you get to the shop and you dont even know where the petrol cap is or how to check the oil and when do you know your breaks need replacing or do you just take this for granted too

      Depends I suppose if you want a nation of dummies but then isn’t that why the US military was recently hacked much to their embarrassment

      Still not to worry I guess

  7. john lim says:

    Not really true. Arduino does exposes its processor architecture like registers and interrupt vector maps etc if you bother to research.

    Moreover as a long time C programmer, I find the arduino a useful tool to teach basic programming construct like loop and conditional cases quickly to some first time young people who are not able to visualize these ideas in their mind without some physical demonstrations.

    A blinking light emphasizes the idea of loop to these kind of people, likewise the selection of action depending on sensor triggered (PIR , Light, sound sensor etc) reinforces to them the idea of if else conditions.

    • admin says:

      Hello John,
      It does expose if you research… But it’s a PITA to open cpp and h files from libraries you’ve included in the Arduino IDE.
      My whole point is that the Arduino environment doesn’t encourage digging into the details. As others have pointed out, sometimes that isn’t necessary, I agree to that.
      But to teach programming, I think it is good to be able to have a quick look what’s under the hood, and to be encouraged to use good coding style like NOT writing everything in the same file. The Arduino IDE is to blame for a lot of the points I’ve made here.
      For general concepts, the Arduino might suffice. But if you want to go for some performance (I’m now teaching how to control a small robot with 2 motors with encoders) and discover how speedy and powerful microcontrollers can be, Arduino is not the right tool. If you have to learn a new tool when you’re ready for more detail, I think you get discouraged. That’s why I think the mbed platform (for instance, it’s just what I have experience with) is better. You can easily look into libraries, see function definitions, use interrupt based timing.
      Maybe the bottom line is: if you teach young kids (elementary school): use Arduino ’cause it’s simple. Any higher: please get some C programming concepts grounded well and use a ‘real’ IDE with consistent naming.

  8. Chey says:

    There are plenty more IDEs out there. Here’s a couple options for those who don’t like the standard Arduino IDE.


    “to each his own”

  9. Sun says:

    Great finding! Can’t agree more! I just returned the Arduino kit I’ve bought a week ago because my goal is to consolidate my low level knowledge, but just realized it is painful to dig into the low level baremetal with Arduino. I did find all the sources needed to understand the details of initialization and basic drivers in the Arduino IDE, but it is just inconvenient to figure out the programming specs by reading meaningless code rather than reading MCU or a board manual, which I mean should be something like Intel’s x86 software developer manual.

    Not sure about mbed, is it very easy to start programming baremetal mbed without the mbed libs? Is there any simple board with simple processors and just a few peripherals directly connected to the MCU for us to practice programming MCU from the first instruction to execute?

    • admin says:

      At least mbed doesn’t hide everything from view; when you hover over a function call, there’s a way to immediately dive to the function implementation of that function.
      To start from bare metal, you can start with anything. I did this with first with Atmel (AVR-GCC, now included in WinAVR) then MSP430, then ARM (ST, EnergyMicro, LPC). I really like the 8-pin DIP ARM (LPC812) from NXP to do bare metal stuff. It’s so tiny you have to be creative!

  10. Duality says:

    I agree with the post.
    But I started out with arduino, and had alot of fun playing with it, but after a while you find out that there is another way of doing it (through the real C programming),
    And me being me 😛 I want to be as close as possible to the machine and exactly know What it does why it does it. and knowing gives you power imho :) and it’s alot of fun too!

  11. Graham says:

    I sort of agree but I like the Arduino IDE as a teaching tool. It is simple, yes keeps all the code in one sketch, but it is simple. When we start to teach children Maths for example, we start with the numbers, not necessary at that time to define them as a set if integers! Initially the fact they can be negative is actively ignored. Once they have a grasp of the basics then more concepts can be introduced.
    I would prefer to start with If Then Else and For and While rather than polymorphism! Rather explain simple data types, byte char int rather than portable ones, we can get to those later.
    First I want to get you interested!!

  12. Nikolai says:

    I started out on Arduino 2 months ago. I have developed desktop apps and web/server solutions for more then 10 yers using C#, as main language. I wanted to start out with AVr’s and got a Arduino board with 15 pratical leasons, and found out that there was some way to go. Then i got ‘Make: Electronics’ and ‘Practical Electronics for inventors’ to kickstart my self on basic knowledge. After that the Arduino cookbook. I have read all and experimented with all the analog components to build a basic knowledge. Now Iam digging further down the AVR, and looking in to using pure C to code my stuff. I quickly realised that the AVR is alot smarter enginered then Arduino made me think in the first place. Any ideas on where to go from here. I would like to understand more about using digital components. Even Practical electronics for inventors, has this plug and play approach that doesn’t tell you why it works as it do. By the way. Whitout Arduino i would proberly never have started out on AVR’s 😉

    • admin says:

      Thanks for your comment, and good points.
      I know that recently there’s been a very good course online in programming embedded systems at a university in the States, probably the courseware is open. I’ll see whether I can find the link. You could also take a small step and go to mbed; still a lot of stuff is in libraries, but it’s easier to track down which code is coming from where, and you’re encouraged to create libraries and treat them as such.
      If you want to continue with AVR, AVRFreaks is a great place with lots of knowledge

  13. Davis says:

    Strongly agree!!. I can testify that your article is totally true because i am a student and i am in a arduino infected collage. In theory arduino is useful to start programming and doing quickly prototypes and then migrate to other platforms with better performance. The problem is that in real life, the migration never happens. The bridge between arduino and a better plataform does not exist because arduino has educated students in the wrong way, and now they see very complicated migrate to another plattaform so they decide stay with arduino. They never learn to code properly because arduino dont teach to code properly, and they cant see that there is a world outside arduino with a lot of things to learn.

  14. ramakant says:

    I just dont understand, this is how we blink lights in the ardunio IDE, so what is the big difference, do you do it differently in c/c++ ? Does the built in while(1) really matter so much? What am I missing here?


    void setup() {
    DDRB = 0xFF;

    void loop() {

    PORTB = 0x20;
    PORTB = 0x00;

    • No, that is ‘correct’ code; however, it is grossly inefficient. Using the internal hooks ‘setup’ and ‘loop’ require dedicated places in memory (in addition to the wasted memory used by the boot loader).

      Also, note that in your code you:
      1. Set all of Port B to outputs (default LO, so off)
      2. Set all of Port B to be 0b00100000, hence, you turned off all pins at the same time you turned on PB5
      3. Turned off all pins at the same time to turn off one pin (PB5)

      Instead, try this:
      #define LED 0x20 // OR _BV(PB5) <– defined in default AVR headers

      PORTB ^= LED; // XOR the port with one bit will toggle just one pin, doesn't affect the state of the other pins


      However, the real point is that if all you ever need to do is toggle an LED, then Arduino is perfect for you. BUT, if you want to learn what you are actually doing, there are better approaches. I field questions from Arduino users all of the time – none of them actually understand what they are doing.

      Using embedded systems to teach programming is kind of dumb anyway (and I work in embedded systems). Learning software by using hardware boards is doubling the amount of things which can go wrong. Why not teach coding principles using actual software? Show how to make a loop that can add all of the numbers from 1 to 10, and then run that program immediately on the computer?

  15. ramakant says:

    delay.h got deleted above

  16. Omar Mokhtar says:

    Totally agree with you! I am lucky to find someone who supports the same opinion!

    Add to that :
    – Arduino does not support multithreading
    – Arduino IDE does not support version control
    – Serial communication in Arduino is polling based not interrupt based. Which is the worst thing ever.
    – Arduino provides the most stupid function ever called ‘delay’ !

  17. Vito says:

    Strongly agree!! but…
    if someone what try to understand, can be an easy way…

    i’m poor, so i’d like to reach big results, witout wasting money and resources..so … i try to build all with my hands… i love microchip’s controllers, thath allow you to have the total controll of the programm, by c++ complier (free) !

  18. George says:

    I’m guessing, like you lead off in your introductory paragraph, you wanted something to shock people into skiming through your article. I do agree with much of your article, but your aggressive stance feels so frustrated possibly targeting a previous teacher or course.

    As an aside, it is ironic that an educational page has so many grammatical and spelling errors. :)

    • admin says:

      Hi George,
      I’m not targetting a teacher, but when writing this down I had had many discussions with colleagues about this subject, and I wanted to write it down for myself completely. So yes, it was born out of frustration, but mainly because I was frustrated with the use of Arduinos and the lack of understanding of embedded systems (wasting resources) in an educational system.
      Maybe this is also a good place to write that I was mainly targeting secondary and university education, not primary schools. I understand the use of Arduinos there.

      Regarding the grammar and spelling errors: please indicate what and where, and I’ll correct them. English is not my native language, so I’m happy to learn what can be improved!

  19. Egon Herrmann says:

    Hi there

    Thank you for your article, it is very insightful.

    I am an electrical engineer and we had quite a few classes in programming micro controllers when I was in university.

    Our first course was about the raw basics: programming a 8051 using the Assembly language. We later had courses in programming PICs in C and we also had a number of C++ courses.

    Problem is that I HATED every second of it, as I didn’t have any knowledge of programming prior to university and the subject was too complex for me to learn at the rate that we had to learn it. The end result was that I didn’t practice any more than was needed to pass a test and I mostly relied on short term memory to do so. Now I have some basic knowledge in programming and of micro controller architecture, but not nearly enough to construct and program a complete, working system. I do, however, have quite an extensive knowledge of electronics in general.

    This is where Arduino comes in real handy: I can use my knowledge in electronics and combine it with the raw and easy Arduino architecture to have a system that does what I want it to do without having to spend weeks to get my code to work. I will, however, rather use something like the Arduino Pro Mini as the brain of my self-designed PC board in my projects, as I feel that the larger boards (such as the UNO or MEGA) are too cumbersome to work with and the thousands of wires frustrate me (they do help in the prototyping stage, though).

    The pre-coding design techniques that I learnt in the courses are still very valuable and I feel that, even though the Arduino architecture is so simple and raw, you can still use those techniques to design your Arduino program before actually starting to code it.

    That being said; I don’t believe that Arduino should be used in commercial applications (I mainly use it in hobby-electronics). Further, I do agree with you that Arduino should NOT be used as a tool to teach programming with (especially on a tertiary education level) and I would consider any university-level project done with an Arduino as “cheating.”

    What I do believe Arduino is good for, is when you want your project to do something without the need to pay too much attention to the programming, but rather to a working project (especially ones that don’t need a lot of processing power).

    To conclude, I do believe that Arduino does definitely have its place in hobby electronics and it is still very possible to go through a design stage before actually commencing the programming thereof, so it isn’t a complete mindless platform to use. Learning to program correctly takes a lot of time and commitment and, if programming isn’t the main purpose of your project, Arduino is a good alternative to get the job done. If your main purpose is to learn how to program, you should best choose another platform from the start.

    P.S. An analogy I would use for Arduino style C programming vs. real C programming, is Krav Maga vs. Jiu Jitsu. Krav Maga, being a raw form of martial arts, can be learnt relatively quickly, but it is still quite effective. Jiu Jitsu consists of many fine skills and takes years to master, yet you are left with a better quality knowledge of martial arts. Which one you choose depends on if you need to go to battle in a few months’ time and need to be able to defend yourself, or if becoming a martial arts master is one of your life long purposes.


  20. Joe says:

    This week the SF Chronicle wrote about how kids can learn to “code” and become “engineers”! It worries me that people are being led to believe they can learn some javascript, and boom, they’re in line for big bucks at google. Perhaps in the process of using Arduino, beginners will get a sense of what they can and cannot do, and the limitations will lead them to ask questions and find other embedded system platforms (mbed?) that allow them to learn about timing, ISRs, threads, inter-thread messaging, etc.

  21. mike says:

    I agree with Mark’s car example. I can see your point to a certain extent in that it’s not perfect form a lot of perspectives. Then again, what is ? Back to mark’s car example , i use arduino because it just works and gets me from point A to point B. Now if something better than the Arduino comes along – i’ll probably use that. I write most of my code in python and have making some little starter apps in android – so in regards to number 1, if the was structured in a way that required a lot of modular C files and coding and imports, I would have to spend a lot of time writing in C just to get something out of my arduino. I guess i am probably limited by whats possible because of the arduino sketch – i just probably wouldn’t have even reached a point of getting a result out of microcontrollers had it required 6 months to get started. For a beginner like myself, just gathering the arduino parts and electrical components and getting a good book on arduino development and finally finding the time to sit down and write a bliking LED script or a moving servo script, can take anywhere from a few hours to a few days.(with other obligations like work + family)

    • Mark Harrington says:

      Try Pic basic( proton) that’s a good ide as well and also teaches basic English methodology reference writing algorithms

      Unfortunately it is only for pic but the Pic18 F ( Amicus compiler )very similar to Arduino to some degree

      This too is free and they have some excellent people in that forum who are quite helpful Ive got this as well and it is very very good even has its own RTOS for this as well (RTOS = real time operating system ) event driven

      Link below

      Second to this I like the rasperry pi now that is incredible and can be used alongside Netbeans IDE to create both C and JavaFX programs never mind what this tiny dev board can do and does even with networking

      This you have got to play with Its truly magical

      • Mark Harrington says:

        ts a little bit more than just an ordinary micro controller Its embedded linux which is what your smart phones of the future are Go check out ada fruit too with this
        Link below

        Good tutorials on this sites Hats off to this crowd excellent the work they do This is one crowed Id love to meet

        Very interesting group of dedicated people

  22. Bruno Beloff says:

    As a former University lecturer in computing, turned full-time developer, I disagree.

    Arduino is a great educational tool. Not a great education, but a great tool.

    For all its silly inconsistencies, Arduino is a quick, low-cost route to controlling hardware. It gives the learner (or the professional developer) positive feedback quickly. What more could you want?

    Arduino does not teach software engineering. But don’t fail it for that – that was never its purpose. Nor does it provide hardware-level debugging. But if you think you need hardware debugging, I respectfully suggest that you go and learn some software engineering.

    • Low cost? All of the parts needed for a bare bones AVR board is less than $5. A simple programmer for AVR can be bought for $15 (and reused again and again).

      It doesn’t teach ANY engineering. It teaches people how to copy and paste code from one source to another, without them learning how any of the underlying hardware or software actually works.

  23. Glen Mason says:

    I am a lecturer in embedded systems at a further educational college. I was introduced to it by Dr Rob Toulson co author of Fast and Effective Embedded Systems Design book. Before using the mbed we used old development boards for the PIC16F84A etc which required multiple tool chains. I love the simplicity of mbed and its IDE I only wish it had an online de-bugger. I feel the layout of the mbed code is more inline with professional C code practise compared to the arduino code e.g the loop() expression. A lot of my colleagues are starting to use arduino however what they are doing is copying and pasting example code together which is messy and they are not really understanding what is going on. I use the mbed because its great for teaching students like the author says you can partition code in a professional way and the documentation is very good.

    Taking students along the Arduino path will no do tjhem good in the long run especially when they get their 1st interview at an embedded systems design house.

    As for Rasberry Pi well I don’t even want to go there..

  24. Roberto says:

    Arduino sucks like shit (To Start Learn), People that want to lern, program very complex things in arduino and they dont know the OHM law. I want to continuw writing but i dont speak/write very good inglish.

  25. Mat says:

    Just out of curiosity, how many of you are certified teachers? I ask because the premise of the discussion revolves around the art and science of teaching, but it seems many of you are programmers. Also, at what level of education are we talking? My nine year old daughter loves the Arduino starter kit we “play” with (and MITs Scratch software). If that leads her into an awareness of programming and coding and creates an inspiring experience that allows her 1) to break down the stereotypes of women in engineering and programming 2) continue to investigate it’s career potential, hasn’t it done it’s job? I think the variables being overlooked, such as level of education it’s being used, teacher delivery, teacher comfort level (a lot of teachers want their children to have exposure, but are not any better at programming than my keyboard by itself) and intended outcomes, are also worth considering when choosing the tool.
    I have seen a lot of middle school students move to the deeper levels being discussed here after having some experiences with Ardunio (as well as NXT with leJOS and Robo C in all fairness).

    I have very much enjoyed the discussion here and how it has stretched my thinking, so thanks.

  26. Verto says:

    OMG. So the default editor sucks. Calling it an “IDE” is a stretch. Who cares? Don’t use it if it doesn’t work for you. Noone is advertising Arduino’s glorified text editor as the final word in programming education. Notepad isn’t a very good word processor; shall we complain about that too?


  27. Jim says:

    The great thing about Arduino is that real cheap Arduino boards (Arduino Mini Pro – ATMega328P)have become available for real programmers to use in the conventional manner. ie. Start by getting rid of all traces of Arduino by erasing the bootloader and just program the board with usual ISP method.

  28. g says:

    I played with Lego’s I am sure many of you did also.We all built some fun and creative things. How terrible!! so much wasted creativity due to the the fact that my home or furniture isn’t constructed in this manner. We often forget that baby steps which involve enjoyment and rewards are important in the process of learning. Even if the rewards are kind of negative such as learning how things don’t work well once you let the smoke out, its still fun.

  29. Sailor says:

    Mr Hack van de Dam, reading responses, at least you took a shot with this article.

  30. Arslan ali says:

    hmmm admin i m using arduino in my security based project but i m confused y i m using it n y i red a’lot of advantages n disadvantages n compared it with other but it waste less n i could nt got my answer ..so plz tell me if u have some idea about this

  31. Gary Foster says:

    The Ardiuno platform is fantastic to learn on. For £10, you have access to lots of I/O, PWM, interupts etc.

    This is exactly the kind of platform I learnt on (though in my day it was assembler not C).

    How can this possibly be bad ! you learn how to read / write registers, do control loops, and hang functions on hardware interrupts.

    Sure if you want to progress and use Real time OS’s / Jtag / Other debuggers / C++ (god forbid) then no, you need something else.

    But then you are talking about needing a software degree.

    That should not detract from a platform that can get kids / enthusiastic makers into writing code and getting stuff going.

  32. Timo says:

    This post just destroyed my enthusiasm in going on programming on my arduino which I got 3 days ago.

    Actually. I knew its not very good to teach a real (C or whatever) programing.

    But I want to get in touch with some programming in general. I know, there are so many hidden things, which I’d actually like to understand. But that would take me years to understand – and I have a hell of other things to do – thats why I think, Arduino is bad for teaching programming, or more: Good Programming in general.

    But it let you discover the basics, like, how does a program look like? Boolean shizzle, how do I have to build up the program to achieve what I want, If/else conditions etc. etc.

    In my opinion, easy projects, like an automatic door (what I want to do) are very good done by the arduino, and give u a little glimpse in the programming world.

    But as an actual educative platform, its not that good, because like many already said: Implemented libraries, already programmed functions, hidden features etc etc.

    (Just my opinion)

  33. Joe Honey says:

    Well, I had the pleasant experience of learning the 8051 and 8086 inside and out many years ago. I wrote my programs in assembler starting with start location to my program in the reset interupt vector. We had to use the lab equipment to program it- painfully time consuming to accomplish a simple task, but atleast I really know how a microprocessor/microcontroller works. Then I got an ardiuno and plugged it into my usb port and made an led blink.

  34. John says:

    Great article, I just wish I had found it before I bought my Arduino kit. I have always been into electronics and used to build my own projects. I really wanted the Arduino to learn programming, and since I have no experience whatsoever, I fell for the, “great way to learn programming” sales pitch. I bought the beginners starter kit thinking I would learn something, but I have yet to write my own (working) sketch that actually does something useful. I’m a little annoyed now that I know that learning to program the Arduino doesn’t give you transferable skills, although I have learned a few things about programming which I’m sure are common to all languages.

    I dont really want to have to copy other peoples projects, because the whole point was to learn how to program it myself.

  35. Alessio says:

    This kind of went over my head. I’m looking into Arduino to do exactly what you’re advising not to do, but I’m looking for opinions elsewhere before I commit to buying.

    I only say it because it seems that I’m the target audience for this article but my overwhelming feeling is that there are high level problems with the programming language… Which doesnt seem like something that should stop me taking my initial steps into programming with Arduino.

    It feels like this was aimed more at your peers, the technical descriptions and suggestions feel like they over complicate things when the Arduino commands are relatively straight forward. The way I see it is that electronics can be understood and Arduino is just slightly more complicated electronics.

  36. Anyi says:

    In my opinion, arduino is good…for quick results and testing purposes. But for someone studying electronic engineering, it should not be used for a final year project. Why? First of all the purpose of being in higher institution is to learn how to use basic electronic components to develop complex hardware. Secondly is the cost evaluation. Obviously whoever says arduino should be used for electronic engineering final year projects doesn’t have any value for true experience or cost efficiency.

  37. Andras says:

    I teach Microcontroller programming at a University. I have used EvB 4.3 boards from a Polish company (and-tech.pl). They have an Atmel32 chip and quite a few things mounted already on the evaluation board (Led, switches, 7 segment, LCD, motor driver, MMC card reader, 1W thermometer, IR sensor 4×8 pin GPIO, RS232, RS485, USB, external power in, TWI units mounted (RTC clock and EEPROM) ), buzzer, pot meters for creating analog in for the ADC. It is a great little board for teaching but very few people are developing for it (compared to Arduino) and it does not have the shield system … 1v1 it beats an Arduino uno hands-down but in the long run shields make the Arduino shine. I use the Atmel Studio (freely available IDE) and C/C++ to program these (with AVRDude directly).

    As far as I understand I can do the same for the Arduino – use the Atmel Studio and AVRDude to program it – is that correct? After all it’s an Atmel chip.

    I would use the same approach for programming the Arduino as well (dispensing completely with the silly language) – I would only buy Arduino to get all the shields and functionality developed for it. Then I guess one would have the best of both worlds – C/C++ programming with proper programming practices and access to all Arduino stuff – that would leave students knowing an environment that has a lot of development happening + lots of shields available – as well as proper C/C++ programming of microcontrollers.

    PS. I checked the and-tech.pl site they are offering now the Evb 5.1 that added even more motor controls + IR LED + RGB LED into the mix. You can connect external things to it just not as elegantly as the Shield system.

  38. nemo says:

    if Arduino is not the right educational tool, what WOULD you recommend.

  39. […] Arduino: pourquoi ce n’est pas la meilleure manière d’apprendre à coder http://www.hackvandedam.nl/blog/?p=762 […]

  40. Vested says:

    For PWM, try the following alternative to analogWrite(). “pin” is the pin you want to output to, “period” is the period of the signal in milliseconds, and “dutyCycle” is the duty cycle of the signal in percentage.

    void pwm(int pin, int period, int dutyCycle)
    float dutyCycle2 = dutyCycle/100;
    int pulseOn = period * dutyCycle2;
    int pulseOff = period – pulseOn;
    digitalWrite(pin, HIGH);
    digitalWrite(pin, LOW);

    This function works very well as a PWM signal generator and in addition gives some insight on how PWM actually works.

  41. milo says:

    arduino is awful, it makes me feel bad i dont know how to code

  42. Roberto says:

    I completely agree. In addition, the lack of documentation limits advanced users who already know how to program and rather use the system for rapid prototyping.

  43. David Watson says:

    At the risk of stoking dying embers, I would like to suggest that you’re all right, except for those of you that comment that other people are wrong. I’m a retired systems engineer and start building computers with Intel’s 4004. We programmed in ASM/HEX and keyed binary using toggle switches. Before long we had a full byte-wide processor (8008) and the world opened for us. We started converting the telecommunications network from analog to digital using successors of these. One of my first post graduated jobs involved ‘booting’ a DEC PDP 11/40, using toggle switches on the front panel to install the bootloader so we could read off of mag tape. Our language of choice/necessity was FORTRAN (WATFOR/WATFIV). Somebody introduced us to Pascal so we would develop ‘structured programs’. You can read the history of Pascal elsewhere.

    In any event, to make a longer story shorter, there is no magic solution to either educating people or learning yourself. If we consider all of the very valid comments posted above as what they are, opinions (like somebody once said is akin to a certain orifice that we all have), I would like to share mine with you. Education is not, and should not be about a solution considered by some to be batter than another. Knowledge is boundless and so should be our education. I’ve been in the industry for almost 45 years and still sleep better at night if I was able to learn something new. I have 5 engineering degrees from 4 universities In Canada and the US (and yes, a couple of the alphabet soup ones). My education is not finished. I would be overwhelmingly disappointed in today’s education if some technology was overlooked or ignored as having been deemed superfluous.

    Arduino may not be a lot of things, but what it is should not be trivialized, nor should the education of our children. In my humble opinion, expose them to everything so they can learn not only what’s right but what is wrong. I don’t advocate sticking a child’s hand into a fire so they understand what ‘hot’ means, but face it, we all did it on our own anyhow. Most kids are smarter than we give them credit for. Let them explore.

    For me, Arduino is a toy and I’m having fun playing with it. If the IDE sucks, blame the IDE.

  44. Sergio says:

    Regarding your comment:
    “I know that recently there’s been a very good course online in programming embedded systems at a university in the States”

    I am very interested in learning how to programm embededded systems with C and I would be very thankful if you could share the link to the online course mentiones above.

  45. Dan says:

    I am an Electrical Engineering student and this is nearly a year late response to dispute a statement with a civil response. You can program in C using the Arduino by utilizing Eclipse and the proper AVR software without even touching the Arduino IDE and this was all done back in 2013/2014.

    At my school, we started off with the general concepts that you regard as inadequate regarding the interaction with the Arduino as an embedded system however, we only used that IDE for 10 weeks to familiarize ourselves with the core subsystems utilization for the Uno.

    We are on the quarter system but during the following quarter (10 weeks of class, 1 week of finals and off for a week, repeating this 3 times during the academic year), we started programming the microcontroller directly using commands not provided by Arduino, which you can observe in the included sample code that was written using “functions” to configure the hardware to behave in the way that we desired.

    Basically, we had to manipulate the entire functionality of the device ourselves, which meant we generated our own PWM’s using the timer counter subsystem and the OCR0A or other registers to calculate the speed and pwm type to produce. Note, we had to reference an atmega328p book that contained all of the configurations that we needed to manipulate in order to articulate flags, watchdog timers, ISR interrupts and various other register/thing related behaviors. Some of the practices were relevant to operational related defects and what could be perceived as timing obstructions that could result in inadequate product performance.

    Note that the following code simply contains a few functions that were used in the main body of code to operate an autonomous robot and I will be more than glad to show you the original code prior to when I revamped it to operate the robot independently of “delays”. I will be honest to state that I am sick of individuals who grossly underestimate the arduino boards, not to mention the atmel328p line of microprocessors in the electrical engineering field considering that when they think of “Arduino”, they think that we only learned how to program through the shoddy Arduino IDE. The sad part is, there is alot to be learned and no one can officially state that they know everything and the only benefit of writing this comment is to simply influence your opinion so that other individuals in the field will start to view potential interns and co-op students individually based upon their practices and abilities to learn without relying on their GPA.

    void Initialization(void)



    void Config_Timer_0_76kHz(void)




    Enjoy. Also note the following link can introduce you to what I applied and how assuming you are unable to find the book/pdf relevant to the Atmega328p.

  46. Avinash Gupta says:

    Very good :-) I also once tried to see what arduino can offer but left only just after a hour when I found out that it does NOT supports “separate compilation”, and library functions must be written in header files in place of .c (source) files! Wow can’t think of a much sillier method to make things “appear” easier!

    I am happy with Atmel Studio 6 for Atmel MCU and MPLAB X for PIC MCUs.

  47. edward says:

    I’m agree. I prefer Raspberry or Beaglebone Linux environment, It is a very real programming language.

  48. Andrew says:

    Having experienced the complete development lifecycle thus far from the 6502, z80, BBC to PIC and being a retired lecturer in Electronic Engineering I would like to give my thoughts.
    Most children under the age of 18 are only interested in Games and Videos. If it does not play a game then they are not interested. The Raspberry Pi does possess games and video capability, the Arduino does not. Modern programming techniques like Scratch and Python are best taught on the Raspberry Pi. The Arduino uses its own variation of old C. C is the worst of all languages, in my opinion to learn as a first language. I still struggle with string (char arrays) and pointers. The Arduino ide throws in an extra ‘String’ data type which confuses the issue further. Bad news for the learner.
    The Arduino environment is best suited to Instrumentation and Control. A motivated learner should be able to let their imagination run riot with Arduino applications and encourage learning more coding techniques and understanding the operation of the hardware. I have recently lent a lot of Arduino parts to my ‘Access to Engineering’ student I have been tutoring this year. He will study for a degree in Aircraft maintenance next year. I am sorry to say that the package I gave him remains unopened. Its a sign that he will struggle on that degree course. No spark was ignited! The days of direct register manipulations is over, as are the days of circuit design, board etching, hole drilling when a lot of complex circuit boards can be bought from China for 99p including postage.
    The Arduino is an ideal learning environment if used with the right calibre students for the Instrumentation and Control environment.

  49. Nikols says:

    In the title you said “NOT THE RIGHT EDUCATIONAL TOOL”, but in the body you are talking about “EDUCATIONAL TOOL” for programming.
    I find this very misleading.

    IMO it is great educational tool, for getting into electronics and programming.
    As a software engineer, I think it will not teach you programming, but it will teach you basic concepts on which programming is based, along with procedural thinking (most important for kids IMO).

    And it will teach kids that they can be inventors and producers not just consumers. There is more pleasure to build something than to buy it.

Leave a Reply

Your email address will not be published. Required fields are marked *