tags:

views:

291

answers:

9

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?

+1  A: 

I think the standard is to teach them something imperative.

ygd
+5  A: 

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.

alt text

And Yes Let them play games until they are curious one day to find out how they make it!

this. __curious_geek
Wow! Small Basic looks awesome for beginners!
Charlie Somerville
+1 for "small-basic", -1 for "eventually migrate to basic C"
Nifle
My objection to this answer is not quite strong enough to merit a downvote (for now), but it is basically just a plug for one particular language (and arguably its development environment) rather than addressing the question. The closest I can make out is that the recommended paradigm is somewhere between "not important" and "OOPish imperative, preferably with visual aids".
John Y
the essense lies in how they can first identify a problem and approach in a right direct to solve the problem. Somewhere down the line they will realize to solve the problems with the help of computers. That is the whole idea of writing programs - that is computer aided problem solving. I'd consider programming as more mature form of computer aided problem solving and paradigm as the way to interact with the computers by writing the computer programs.
this. __curious_geek
A: 

I'm struggling with calling Logo with this, but my vote is for declarative.

Xepoch
+1  A: 

Objects and Object Relationship would be important. Distinguish object properties and methods, derive subclasses.

Zepplock
That's something I'd start only after imperative programming is understood. Otherwise you'd layer stuff around things they don't even know yet. I've seen enough people here at the uni being very confused because they started with Java without any prior programming knowledge.
Joey
Starting with Java is still much better than starting with BASIC ;-) Overall I agree, some basics like commands and syntax should be learned prior to that. But starting with OOP, in my opinion, is very beneficial, even if it's just a "design" not "coding"
Zepplock
+3  A: 

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".

Phillip Ngan
This is fantastic material! Thanks.
jnorris
+1  A: 

The Professor, I m currently taking programming language class said that first language should be functional language, and of course recursion. Then declarative languages. and then procedural languages.

+1  A: 

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).

Moishe
+1 for LOGO. I did not start with that (C64 Basic was my first) but I enjoyed it a lot when I was 11.
Stefano Borini
+2  A: 

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?

William Billingsley
+2  A: 

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!

Chip Uni
the essense lies in how they can first identify a problem and approach in a right direct to solve the problem. Somewhere down the line they will realize to solve the problems with the help of computers. That is the whole idea of writing programs - that is computer aided problem solving. I'd consider programming as more mature form of computer aided problem solving and paradigm as the way to interact with the computers by writing the computer programs.
this. __curious_geek