Tutorial :What features are important in a programming language for young beginners? [closed]



Question:

I was talking with some of the mentors in a local robotics competition for 7th and 8th level kids. The robot was using PBASIC and the parallax Basic Stamp. One of the major issues was this was short term project that required building the robot, teaching them to program in PBASIC and having them program the robot. All in only 2 hours or so a week over a couple months. PBASIC is kinda nice in that it has built in features to do everything, but information overload is possible to due this.

My thought are simplicity is key.

When you have kids struggling to grasp:

if X>10 then <DOSOMETHING>  

There is not much point in throwing "proper" object oriented programming at them.

What are the essentials needed to foster an interest in programming?

Edit: I like the notion of interpreted on the PC as learning tool. Due to the target platforms more than likely being somewhat resource constrained, I would like to target languages that are appropriate for embedded work. (Python and even Lua require more resources than the target likely to have. And I actually kinda like Lua.) I suppose that is one of the few virtues BASIC has, it has been ran on systems with less than 4K for over 30 years. C may not be a bad option if there are some "friendly" tools available such as Ch.


Solution:1

The most important is not a lot of boiler plate to make the simplest program run.

If you start of with a bunch of

 import Supercalifragilistic from <expialidocious>   public void inherited security model=<apartment>            public : main .....  

And tell them they "not to worry they aren't supposed to understand that" - you are going to put off both the brightest and the dumbest.

The nice thing about python is that printing "hello world" is print "hello world"


Solution:2

Fun, quick results. Capture the attention span of the kid.

Interpretive shells like most scripting languages offer (command line) that lets the student just type 1 or 2 liners is a big deal.

python:

>>> 1+1  2  

Boom, instant feedback, kid thinks "the computer is talking back". Kids love that. Remember Eliza, anyone?

If they get bogged down in installing an IDE, creating a project, bleh bleh bleh, sometimes the tangents will take you away from the main topic.

BASIC is good too.

Look for some things online like "SIMPLE" : http://www.simplecodeworks.com/website.html


Solution:3

When you have kids struggling to grasp:

if X>10 then <DOSOMETHING>

Maybe it's a sign they shouldn't be doing programming?

What are the essentials needed to foster an interest in programming?

To see success with no or little effort. To create something running in a matter of minutes. A lot of programming languages can offer it, including the scary C++.

In order to avoid complication with #includes, multiple source files, modularization and compilation, why not have a look elsewhere? Try to write some Excel macros or use any other software with some basic built-in scripting language to automate certain tasks?

Another idea could be to play with web pages. It is not exactly programming, but at least easy to achieve something and show to others with pride.


Solution:4

A team of researchers, beginning at Rice, then spreading out to Brown, Chicago, Northeastern, Northwestern, and Utah, have been studying this question for about 15 years. I can't summarize all their discoveries here, but here are some of their most important findings:

  • Irregular syntax can be a barrier to entry.

  • The language should be divided into concentric subsets, and you should choose a subset appropriate to the student's level of knowledge. For example, their smallest subset is called the "Beginning Student" language.

  • The compiler's error messages should be matched to the students' level of knowledge. If you are using subsets, different subsets might give different messages for the same error.

  • Beginners find it difficult to learn the phase distinction: separate phases for type checking and run time, with different kinds of errors. For this reason, beginners do better with a language where types are checked at run time, i.e., a dynamically typed language.

  • Beginners find it difficult to reason about mutable variables and mutable objects. If you teach pure functional programming, by contrast, you can leverage students' experience with high-school and middle-school algebra.

  • Beginning students are more engaged by an interactive programming environment than by the old edit-compile-link-go model.

  • Beginning students are engaged by splash and by interactivity. It's good if your language's standard library provides built-in support for creating and displaying images. It's better if those images are supported within the interactive programming environment, instead of requiring a separate player or viewer. And it's even better if your standard library can support moving images, or some other kind of animation.

    Interestingly, they have got very good results with just 2D images. Even though we are all surrounded by examples of 3D computer graphics, students seem to get very engaged working with just two-dimensional images.

These results have been obtained primarily with college students, and they have been replicated at over 20 universities. However, the research team has also done some work with high-school and middle-school students. The first papers on that work are just coming out, so I'm less aware of the new findings and am not able to summarize them.


Solution:5

This has been said on SO before, but... try Scratch. It's an incredible learning tool for kids. It teaches the basics of programming concepts in a hands-on and language-independent way. After a bit of playing around with it they can get down to learning a specific language's implementation of the concepts they already understand.


Solution:6

The common theme in languages that are easy for beginners - especially children to pick up is that there's very little barrier to entry, and immediate feedback. If "hello world" doesn't look a lot like print "Hello, world!", it's going to be harder for people to pick up. The following features along those lines come to mind:

  • Interpreted, or incrementally JIT compiled (which looks like an interpreter to the user)
  • No boilerplate
  • No attempt to enforce a specific programming style (e.g. Java requiring that everything be in a class definition, or Haskell enforcing purely functional design)
  • Dynamic typing
  • Implicit coercion (maybe)
  • A REPL


Solution:7

Breaking the problem (read program) down into a small set of sections (modules) that do one thing and do it very well.


Solution:8

You have to get them to stop thinking like a user and start thinking like a programmer. They need to take it one step at a time. Ask them what they have to think of in order to figure out the problem them selves and then write them down as steps. If you can then you break each step even more in the same mater. When done you will have the program in english making it simpler to program for real.

I did this with a friend that just could not get it and now he can. He used to look at something that I did and be bewildered and I would say that he has done more complex stuff than this.


Solution:9

One of the more persistently-present arguments I have had with other programmers is whether or not one's first language should require explicit type languages. Many are of the opinion that learning a language which requires you to explicitly declare type information is one which will teach you to program typefully. Conversely, it can be said that dynamic languages might present a less demanding learning curve. It goes either way, I suppose.


Solution:10

My advice: start with a simple model of how a computer works. I am particular to stack machines as good tools for teaching computation.


Solution:11

Remember that beginners are learning two disciplines at the same time: how computers work and the abstract logic involved (the basics of Computer Science), plus how to write programs that match their intended logic (learning a specific language's syntax and idioms). You have to address both concerns in an interwoven fashion in order for the students to quickly become effective. This is also the reason experienced programmers can often pick up new languages quickly.

It's worth noting Python grew out of a project for a language named ABC, which was targeted at beginners. For example, the required colon isn't strictly required, but was found to improve readability:

if some_condition:    do_this()  


Solution:12

I got 3 words : Karel the Robot. it's a really really simple 'language' that is designed to teach people the basis of programming :

Look for it on the web. You can look at this, though I never tried it : http://karel.sourceforge.net/


Solution:13

While this isn't related to programming a robot, I think web programming is a great place to start with kids that age. It's how I started at that exact age. It easily translates to something kids understand if they use the web at all. Start with HTML, throw in Javascript, and soon they want to be doing features requiring server-side scripting or some sort, and things progress from there.

With the kind of kids who are already interested in robotics, though, I'd actually go for a different language like the ones already described. If you want to work in a field like robotics, you don't need to be convinced to try something hard. You need to be challenged.


Solution:14

A few years ago I saw a presentation at Ignite! Seattle from one of the people working on the project now known as Kodu who envisioned as a programming language for children. He spent time talking about what common language features could simply be thrown out in a programming environment meant to teach fundamentals.

A lot of cherished imperative constructs, like C-style for loops, were simply left out in favor of a simple object-messaging approach. Object-oriented programming isn't hard to understand when you think about "objects" and "messages"; the hard part is when you deal with things that programmers, but not children, care about, like inheritance and contracts and sweeping abstractions. I've got this thing (noun), now act on it (verb), in this way (adverb like quickly), when thing (sees/bumps into) something (with some attribute) (that's your if). Events are really conditions, and have all of the power of conditions, but it's up to the runtime to identify when those events happen.

This kind of event and messaging driven approach probably translates even better to robots than procedural programming would, anyway, so it might be a good way to look at the problem. Try not to think about what you'd "need" to know to program in C or Pascal or something; think about what you'd want to be able to make something do.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »