Beginners start here !

Ok, newbies - it's been said a thousand times...

The only person that can make you a better programmer is you.
Inclination, aptitude, patience and desire are inside you. if they're not there in buckets, then go outside and mow the lawn.

There are better guides, but i'm not trying to be your friend.

BEFORE STARTING
a) Learn to read and consider what you read before farting through you mouth.
b) Read and try out the stickies at the top of the forum
c) Ask a friend or child how to use Google
EDIT: Reality check- Walk before you try to run.

START HERE - working in order will be easier.

  • Upload a program - what is happening!
  • Blink a led - with delay()
  • What are ; semicolons for?
  • Using parentheses to {group things together}
  • Using Serial monitor - print() to see things
  • Detect a switch/contact change of state
  • Blink a LED without delay()
  • for( ; ; )
  • if( ) else
  • Understanding the 'Scope' of variables
  • Variable types (String is not a variable type!)
  • Meaningful 'variable names' are free!
  • Operators + - / * | & % ~ ! && || and so on...
  • Functions() are your best friend to make code readable
  • Working with Serial input methods
  • Switch(), do((, while(), loop until(), break, continue...
  • Arrays[] of variables
    EDIT:These are not links. Try finding the answers!
    Read and try out the stickies at the top of the forum...!
    Get these sorted, then come back for pointers, structure, classes and more!

Are those supposed to be links?

This is a great start. A little harsh, but I think it will get the newbies attention. 8)

I think I like it. It is succinct and to the point.

Sensitive reades may prefer the following alternative that is more polite but also more long-winded. I hope it is no less direct.

  • A great deal of the information you will need to write an effective program can only be gained by careful reading. Some the technical documents and datasheets have not been written by novelists so you may need to read the same thing 10 or 20 times before it starts to make sense. With this in mind people who write replies on the Forum trying to help you expect you to read those replies carefully, to try out the suggestions they make, and only then come back with comments. Of course if you don't understand something then it is up to you to say so. If you don't people will assume you do understand it or that you are just being pig-headed and ignoring good advice.
  • People have put a lot of effort into trying to make the Forum an effective place for newcomers to get assistance. We all want you to have fun with your Arduino. But you need to do some work too. Read the stickies at the top of the Forum and spend at least 3 or 4 hours browsing other Forum Threads to get a feel how the Forum works. You will also a learn a great deal from reading Forum Threads even if they seem to have no direct relevance to your project. Read a few every day. An important skill for a programmer is being able to notice a technique in one project and see its relevance (perhaps greatly modified) in another project.
  • Google almost certainly knows 100 times more about your programming problem than you do. Google was created by programmers. Make sure you do an extensive Google search before asking a question which requires someone to give up their free time to write an answer that is already available. Having said that it is understandable that newcomers may not know the best terms for an effective Google search and we don't mind helping with that. And if you are trying to compile a program and you get errors it is often effective to use the first error message as a Google search term. If you don't like Google then Duck Duck Go seems to be as effective.

By the way I am NOT suggesting that this should replace @lastchancename's succinct version - only that it might sit beside, or below it.

...R

Agreed Robin2, but i figured... reading many of the posts on this forum - that those people who most need to read, simply don't bother to spend their time - rather wasting the time of others!

Succinct maybe. Harsh - definitely!
My passive aggressive streak.

Don't mixup brackets and parentheses! That is a newbie mistake.

When I started out, I read through every reference entry. While it's not comprehensive, it's largely useful for familiarizing oneself at the very least with vocab. It was good to know what the things I didn't know were called so I could then start to learn them.

lastchancename:
Agreed Robin2, but i figured...

I had hoped that the first and last parts of Reply #2 would have let you know that I agree with your approach.

May I suggest that you wait a few days to pick up more comments and then make a new consolidated Thread (with whatever content YOU deem appropriate) and then ask the Moderator to lock the consolidated Thread. You can always ask for it to be unlocked from time to time if you need to update it.

...R

@lastchancename:
You've been around the forum since 9-2012 and when you started Arduino was a very different Company.

  • They had only a few products
  • Ethernet shield provided rudimentary ability
  • All products were 8-bit, the Due was not out yet!
  • Clones were essentially "identical" builds

Fast-forward to today where 32-bit is entrenched and new boards use the ArduinoIDE but there is no official support (ex: STM32duino & ESP8266.) Where the old Arduino Ethernet of 2012 provided REST, today we deal with JavaScript and AJAX, WebSockets, SPIFFS filesystems, OTA.. and the list goes on.

The last 4 years have taken the Arduino from a few products to a BRAND, essentially concept boards and an IDE... speaking of which Arduino IDE 1.0 was less than a year old on 9-2012.

Maybe you get my drift - things were far simplier 4 and more years ago... the basic Arduino paradigm was still relatively pure. Newbies started with blinking a LED. Projects were simplier; expectations were far more simplistic. Forum support was far easier.

Arduino is everywhere today ... like Estees' rockets when I was a teen... they hang on pegboards in Atlanta stores. The brand is licensed and Adafruit and Sparkfun are major players and 8-bit clones are under $2 from China and 32-bit compatible boards are under $4 delivered!

All this in just 4 years!

People buy into the Arduino ecosystem now to replicate online projects, to fulfill grade requirements (homework), to explore far beyond a blinking LED with NeoPixels, to actually build an original project taking an idea to a product.

... and still this forum is managed by volunteers who spout about "stickies" and "code tags." Fellow senior members, we are largly out of touch with our audience.

I started a project page a few years back to address some of my needs in providing a complete project where some simple idea could be seen taken to completion. Little fun projects for a rainy weekend. I use these project references (code snippets) often when I answer forum questions (most often on ESP8266.com or STM32duino.com but occasionally here, too.)

I believe people learn best when taking a working example and modifying it to their needs - but the example must be close to what they wish to do; close enough that they can bridge from example to finished sketch. LEARNING TO BE A GOOD PROGRAMMER MAY NOT BE THEIR GOAL.

I remember being young and building electronic projects: I did not build the Knight Kit VOM because I wanted the theory; hell, I built it because I needed a VOM to use to fix TV sets to earn money.

Ray
My projects

mrburnette:
... and still this forum is managed by volunteers who spout about "stickies" and "code tags." Fellow senior members, we are largly out of touch with our audience.

I hear what you are saying.

But I don't know what practical steps we should take to respond to that audience.

Should there be project examples with a complete bill of materials and the program code to make it all work like building an Airfix plastic model airplane. Just buy the parts and follow the 1, 2, 3 instructions.

Even then I suspect many of the people @lastchancename is trying to address would struggle. For goodness sake, flat-pack furniture seems to be too complex for lots of folk.

It may be my age but I don't have a problem with this Forum focusing on teaching people to be Arduino programmers as the most effective way for them to get their projects working.

If (as is usually recommended) the newcomer breaks his project into small steps there are relevant examples for most of those in the IDE.

...R

@mrburnette -
I certainly respect your observations, except..
LEARNING TO BE A GOOD PROGRAMMER MAY NOT BE THEIR GOAL.

They should not expect forum helpers to hold their hand at every step until they reach old age. We all have hopes -and- weaknesses. Some people are simply not suited to be coders (not programmers)... they might better suited as mechanics, pool guys - or lawn mowers.

There is a critical point where beginners become self sufficient for 25-50-80-90% of their own development needs. Never 100%, because projects like these are a moving target.

We all need assistance and guidance, but there comes a time when beginners should start to 'give back'. It's not all 'take'. Learning fundamentals means that one day they can help others. You may have also experienced 'that talking about a concept and teaching it - makes your own knowledge stronger'.

Cheers

I appreciate your efforts and you obviously put a lot of thought into preparing this text. However the line near the start:

lastchancename:
... Learn to read and consider what you read before farting through you mouth.
...

will turn them off and none of your good stuff will get read. Remember the adage about flies, honey and vinegar.

You don't need to be sticky-sweet, but talking about farting through their mouth (it's actually fingers tho, right?) will be a repellant.

Here's a more considered essay on 'Who can be a programmer...'

And the source paper...

Arduino was forged in the fires of "Not being a programmer..." if I can loosely paraphrase Massimo Banzi. A platform for artistic expression by non-programmers; hence the simple BASIC like set of commands that look nothing like the underlying C/C++. Further, the automatic function prototyping and pre-defined setup() and loop() functions.

The first Arduino was introduced in 2005, aiming to provide a low cost, easy way for novices and professionals to create devices that interact with their environment using sensors and actuators. Common examples of such devices intended for beginner hobbyists include simple robots, thermostats, and motion detectors.

-- Wikipedia

11 years down the road, Arduino is a platform, an IDE, and a language... Should I say, "Poor, poor Massimo"? His platform for non-programmers is forum-steered by a group of (semi)professional programmers!

I'm an EE by training and formally schooled in Fortran and I learned C, Pascal, Objective C, Business Objects, Borland C++ all as part of managing professional programmers (the emphasis being managing... In 30 years I was only responsible for 1 personal program, in Fortran 77.) I can program but I am not a professional at it.

They should not expect forum helpers to hold their hand at every step until they reach old age. We all have hopes -and- weaknesses. Some people are simply not suited to be coders (not programmers)... they might better suited as mechanics, pool guys - or lawn mowers.

There is so much bias in the above that I simply will not comment.

A good number of newbies will not continue Arduino beyond one or two projects, IMO. Folks get excited about anything new*: sports, exercising, a gift, a dream, and even an interesting project seen on Instructables. Just because a newbie joins the forum to ask a poorly articulated question does nor mean they want to sell their soul to be a hot-shot C++ programmer. Just like my VOM project 50 years ago: they simply want a means to an end. (* I have a basement full of stuff my wife was once interested in... bicycle, exercise mat, treadmill, ... etc.)

I do not know what the answer is, but I'm darn well sure it is not how this thread started.

Ray

Learn Assembly, C++, Data Structures, Algorithms, write programs and more programs and more programs, then decided if you wanna program risc or cisc. Then study their data-sheets and their instruction-set. And that is it. No need to go on any forums and ask questions from self proclaimed gods of coding (remember they were like you once) how stupid are those. They are no Ritchie, nor do they are Widlar.

mrburnette:
I do not know what the answer is, but I'm darn well sure it is not how this thread started.

I don't see how the discussion can move in the direction you want if you can't articulate it. Clearly you have something in mind that others of us do not (yet).

I suspect part of what you are grappling with is the "I want it working NOW" attitude that is encouraged by so many gadget providers.

I'm not at all convinced that programming anything non-trivial can ever fit that model.

And I confess that it is the satisfaction I get from the intellectual effort of programming that satisfies me.

It may be that the Arduino Brand is in some sense offering (or is perceived by the NOW people to be offering) a panacea that it can never deliver.

Maybe there is a market for something like Lego blocks (I mean physical pieces that plug together) with electronics and intelligence in them - join the ram and the sheep and get lambs, sort of thing. But that is not the current Arduino system.

...R

Robin2:
<...>
It may be my age but I don't have a problem with this Forum focusing on teaching people to be Arduino programmers as the most effective way for them to get their projects working.

If (as is usually recommended) the newcomer breaks his project into small steps there are relevant examples for most of those in the IDE.

...R

@Robin2...
I've known and respected you for years and I largely agree with you but I spoke above about Massimo's vision and that is in conflict with your statement.
The second suggestion about newbIe's approach aligns somewhat parallel with my approach of referencing a working project that uses a technique they could incorporate into their immediate need.
I come and go from this forum too often to call myself one with an answer, I do not have one. But, everytime I come back, the Q/A largely has not changed.

Newbies will not "pre-search" because their queries are not specific enough.

Newbies want answers/solutions upto & including specific code

Some of the funniest reading is a professional programmer trying to explain a complex topic to a newbie -- sadly pathetic.

Maybe our membership should gather answers into projects that show a proper technique - like our Playground section. If we cannot refer a newbie to the Playground, why not? Or, said another way; why are we always reinventing the wheel?

Ray

I have been a fan of CodingHorror for a long time though I have not been following it recently. What is said in that Blog post reflects my own perception of the situation.

And to follow from what I wrote in Reply #14 I don't think there will be an easy way round that ability constraint however much people might like to bring programming to the masses.

I have seen several Threads here about relatively simple problems which dragged on for 40 or 60 Replies with no sign that the OP was "getting it" even though different people tried to express the problem or the solution in different ways.

A huge part of the problem is that people who CAN program cannot understand why others cannot. They can recognize the fact that they cannot program, but not WHY. And maybe there is no answer - maybe it is genetic. Only borderline Asperger types need apply :slight_smile:

Or, said another way; why are we always reinventing the wheel?

That's why I have made a small contribution through a few simple tutorials.

...R

An email exchange ping-pong style with a friend today and this us what he just emailed me:

I haven't visited the Rduino forum for months, but kind of got tired of the fact that the same damn old questions were being asked (and answered yet again) 100s of times over. 3 years ago, I brought this up, but the "gurus" seemed to be happy with endless re-answering and building up karma points - good for a flight to Provence in the winter, possibly.

Ray

Robin2:
...
That's why I have made a small contribution through a few simple tutorials.

...R

And I with my project pages

Here is what I do know for certain, "If we cannot handle straight-forward questions, we have no prayer of a chance with both C++ and web-services at the same time!"

Ray

mrburnette:
An email exchange ping-pong style with a friend today and this us what he just emailed me:

For the most part the answers are a response to the questions. If the answers seem repetitive that is only because the people asking the questions do no research to find the already-existing answers.

I think we are all aware that newbies (and most people in most walks of life perhaps) never bother to read the instructions or the ready-made advice such as in the Useful Links Thread

I just noticed your own recent Reply in another Thread where someone is struggling with an Attiny. What you said seems very sensible and the problem seems to me to reflect the fact that the OP does not have enough background knowledge to realize he is trying to do something moderately complex. Perhaps the problem is that so many gadgets appear simple because they have enormously complex code inside them (e.g phones) and people assume they actually are simple. Or people assume an Arduino is as capable as a phone because it is about the same size and has a nice colour.

...R