I have been looking for fresh engineers and also wannabe IoT Entrepreneurs to help them bringing out their ideas as products. One thing that struck me was their lack C and Assembly programming skills. They are good to show you a prototype made out of Arduino and they claim their product is complete.
What surprises me is, most of them lack understanding of the processor architecture to start with. To test them, I have few standard questions and ask them. Only 1% have answered. They are;
How does a processor interrupts work. What happens if two interrupts come together
With a microcontroller can I measure AC signals?
How the accuracy of A/D conversion is decided?
How do you make your system respond fast to real-time events?
I have never got an answer to these questions. Secondly, they have no clue how a processing power is calculated. In fact, I asked one of the would be entrepreneur (who incidentally had a prototype working on Arduino) how to increase the system’s performance from the current 2-3 seconds to 10’s of milliseconds. He had no clue about the issue and told by increasing the speed! Even more hilarious was, one prototype was tested using Arduino in the lab with PC connected. He brought the prototype to me with code loaded in the Arduino and the system was behaving randomly. I suspected a grounding issue and moved my hand over the system voila! the system behaved even more funnily. Next 1 hour have to explain about how Ground is important for both digital and analogue signals.
The common things I noticed were that none of them have learnt how to bring up microcontroller from reset. They have no idea how to control the different peripherals through their code rather than Arduino IDE. Worst is that most of them have no strong basis in C that too for embedded system. Most of them didn’t know how to to do single stepping and use of debugging tools like emulators
Couple of things I noticed seem to be the reason when I use to teach for both undergraduates as well as postgraduates classes and labs are;
Labs use canned software exercises and prewired boards.
Most of the times kids just cut and paste a code rather than developing their own.
Above all complete lack of Networking Knowledge which is essential for the IoT.
What I noticed is that Arduino masks the processor complexity and architecture and the peripherals that used have networking stacks built in. This essentially prevents students learning basics. In my opinion, Arduino may be a good tool for prototyping for hobbyists but not a tool for learning.
Save Trees! Avoid taking prints…
Srinivasa Moorthy S A has over 30 years of experience in the IT industry as Head, Leader & Technocrat in the Electronic Product Design & Engineering Services and is currently working as the Chief Executive Officer of the Andhra Pradesh Electronics & IT Agency.
Thank you for this post and expressing of your opinion. You can advice something for us.
I am also a newly graduated person, and I’m aware of my lack of embedded system basics, even I took computer architecture course and I have been as a team leader/developer in a model satellite and rocket student teams. I programmed only Arduino and Teensy via Arduino IDE and PSoC 5LP via Cypress PSoC Creator. However I tried to program MSP430 boards but after simple applications, it seemed difficult to me wheb I need I2C and SPI communication. Now I finished a course on Coursera called “Introduction to Embedded Software” and I will take the second part of this course to improve my embedded skills.
Is there anything to start to advise us to be able to change our development environment from Arduino based boards to other boards? Like books, online courses, tutorials etc.
This is actually very true. I have seen people boasting about their prototype having I2C and SPI, but they dont even know how I2C works. They just use some libraries written online, that do most of the stuff. But they can’t debug the code when needed.
thanks for awaring us.could you provide online link or blog ,from where we can learn all those basic or real embedded
I completely agree with Srinivasa ….
is their any suggestion for beginners
Good article that gives a perspective of how new tools make students lose their natural intelligence and curiosity
to understand how microcontrollers work.
People staying in Chennai can attend our internship or classes to understand the nuts and bolts of embedded systems. We teach students the basics of assembly, C programming, hardware design and programming peripherals including SPI, I2C and CAN communications. We also sell embedded trainer kits for the Microchip family and ARM development boards for the Cortex-M0 Nuvoton family.
I’m 3rd year ECE student now I do some basic project using arduino…..plzz tell me how can I improve my self in basic things about arduino..?
Quite an impressive article. Thank you so much for accentuating on the fact that arduino is exclusively meant for prototyping rather than for learning. I have been working with arduino since from past one year and i completely agree with your point, but i think it completely depends upon the user that how he/she is going to make use of it. In my perspective arduino is a beautiful product, but only for testing and prototyping.
I too agree with Sri Srinivasa Murthy. I wonder to see students after completion of Electronics degree, the students never used soldering iron and completed their electronics project. The students never go through the basics of working of any IC/MCU (even never happened to go though the datasheet) and circuit/code is used from internet (copy and paste), then modify a little and test on bread board and show to the professor/guide. Thats all. The project work is over.
THE STUDENTS, WHO GO A NEW IDEA AND IMPLEMENT AS A PROJECT FROM SCRATCH (after clearly studying the basics and working principle of the components ) WILL SURELY HAVE BRIGHT FUTURE AND STAND DIFFERENT AND CONFIDENT.
Who knows cooking of maggi is NOT A CHEF. Is’t it?
True. The only way is: buy books, study and practice as a hell!
Don’t blame Arduino. It’s only a tool, and as any tool, it can be used to great advantage or misused. The Arduino system allows the user to go as deep as he desires, so he can learn microprocessors and/or electronics just as well as he can using any system. I love the Arduino development system because it allows me to focus on the outcome rather than arcane tool chains and such. Don’t disparage this wonderful tool because some are too lazy to learn.
Thank for your opinion. Can you please show some way to learn those basics.
This reminds me a bit of a difference I’ve noticed between how I learned to program and how my students program. Learning to program on my Commodore 64, I had to PEEK and POKE memory addresses, so I became very comfortable with systems-level programming and assembly language. My students use high-level programming languages that hide this complexity.
For most platforms, the low-level code has already been written and is heavily optimized. There isn’t as much demand for those skills
I think as technology progresses we gain some things and lose others. Most of the current generation of software engineers are great at throwing together rapid prototypes of complex object-oriented systems built from existing components, but they don’t have a deep understanding of pointers, memory allocation, and systems-level programming. Embedded systems are an edge case here — one of the few places in software development where an understanding of the hardware and assembly language is still useful. That’s changing, too, though, as systems like the Arduino become more powerful and “throwing more memory and CPU cycles” at a solution makes optimizations less critical.