When introducing basic programming concepts to kids for the first time, what paradigm is best to start with? What research has been done in this field?
First they should be taught problem-solving skills, the next milestone would be to write algorithms to solve simple problems. Then they can start implementing those algorithms in SMALL-BASIC and eventually migrate to basic C.
And Yes Let them play games until they are curious one day to find out how they make it!
I'm struggling with calling Logo with this, but my vote is for declarative.
Objects and Object Relationship would be important. Distinguish object properties and methods, derive subclasses.
Tim Bell and Ian Witten, a couple of CS professors in New Zealand, have developed a course for teaching the fundamentals of Computer Science to elementary aged kids. It works! I taught my 6 year old daughter to convert between base 2 and base 10 numbers in an hour. You can find the information here. Looks like they have made their teaching resource material publicly available. Their thesis is:
The easy and fun activities in this book, designed for children of a range of ages, introduce you to some of the building blocks of how computers work—without the children using a computer at all!
I know this answer doesn't directly address your question about 'which paradigm', but it does address topics that are the "building blocks".
I was lucky enough to take a LOGO programming class in 5th grade (this was in the early eighties, so it was really uncommon to teach any computer skills to kids).
I loved LOGO for a few reasons:
- Something happened right away, specifically something visual, when you told the computer to do something.
- It was very easy to write a loop. Doing something cool once is cool, doing something cool (like drawing a line, then "turning" 100 degrees) a bunch of times is really cool.
- The second version of LOGO I used supported "cloning" the turtle and running a routine against all the cloned turtles, which was a great way to literally see recursion.
So I think the ideal language to teach kids would be interpreted and graphical, preferably with some intuitive recursiveness built-in. I don't know that it's worth over-thinking beyond that.
Kids who like programming from that introduction will go further on their own because it's like crack to them (if my experience is any indication).
This question comes up time and again on the Psychology of Programming Interest Group list. http://www.ppig.org/
Even there, on a scientific list largely dedicated to how people think and learn about programming, the outcome is "a really long argument" rather than a definitive answer.
The issue is that "best to start with" is hard to define -- how do you measure "best"? Is it just a subjective measure? Measured by self-efficacy? Measured by a test, in which case a test of skill in what paradigm? And who are your subjects?
There has been a fair bit of research on how people learn programming. Environments such as BlueJ (http://www.bluej.org) and Alice (http://www.alice.org) have been designed around pedagogicial studies. Various other studies have been done into what programming concepts novices find easiest understand (upshot is, novices find recursion hard). But an objective study as to which paradigm is best to start with would be very difficult to design -- how do you separate factors that are just due to syntax of the chosen languages ("=" vs ":=", excessive use of nested parentheses, etc), environment, student background, and how do you test the outcome -- if a programming test, then in what paradigm?
I disagree with the assumptions of the question.
I don't believe that the paradigm of a language will matter much in education. What will matter deeply for learning is whether kids will stick with programming for long enough that they internalize the ideas of breaking down a problem into parts, then building those parts back up.
For that, I don't believe that the paradigm matters much.
If it matters, we can look at the chosen paradigms of software designed to teach children programming:
- Alice is object-oriented and event-driven.
- Scratch is object-oriented.
- LEGO Mindstorms is based on LabView, a data-driven language.
- LOGO was based on LISP, a functional programming language.
- Basic has many variants, but tends to be either iterative or object-oriented.
There are many other educational programming languages. Enjoy looking them up!