8

I'm interesting in teaching programming to middle school students. I'd like a programming language with the following criteria:

  1. Simple - pared down to the absolute minimum needed to support sophisticated programming without too much code. As such, for this language, I'm not interested in pointers and am weary of object-orientation (although functions are good).
  2. Powerful - I'd like to be able to program 21st-century elements, including graphics, networking, and distributed processing.
  3. Debuggable - I'd like an elegant Integrated Development Environment with a human-readable debugger (i.e. not some strange error message with a stack trace, but a clear explanation that an average middle school student can use to determine what is wrong with the code).

The standard programming languages (C,C++,C#,Java) fail the first criterion. Basic programming languages like Scratch fail the second (and possibly third) criterion. Scripting languages (perl, python, php) fail the last criterion.

I'd like to know if someone knows of such a beast, before I sit down to make it up myself.

Ari Trachtenberg
  • 652
  • 4
  • 10

7 Answers7

8

You should perhaps look into Racket (formally known as Scheme, a derivation of Lisp). It's the language taught to first year CS students at my University. Since it's a functional programming language, the syntax and concepts are quite simple compared to C/C++, there are several libraries that can do some basic drawing or networking related things, and Dr. Racket as several debugging features... including a Stepper (i.e it will show and perform one substitution at a time when you click the "next" button). I think that it may be worth looking into: http://racket-lang.org/. It has several other features that you may like, such as teaching modules (beginner, intermediate, advanced, full student levels) and pretty good documentation and examples. The book: How To Design Program (http://www.htdp.org) is a great teaching reference for this language which has a few nice examples using some of the libraries I mentioned above.

user340082710
  • 1,113
  • 2
  • 11
  • 28
4

I recommend Javascipt.

  • Just about everyone reading this has access to a development environment by default in their browser.
  • It's forgiving for new programmers.
  • It supports a modern feature set.
  • There's a vast repository of sample code on the internet, quality notwithstanding
  • It's a real-world applicable language.
John
  • 164
  • 2
3

If you decide Python might work for you, I would take a look at the Jython Environment for Students (JES). There are some nifty debugging tools including a "watcher" that lets you choose variables to watch. You can control the steps or let it go quickly. I have used this IDE with middle-school-aged learners in a summer program successfully, but I also use this in an introductory course at the University level. The media computation libraries are fun, too. Students in my courses have enjoyed editing pictures and sounds. There is support for making animations too.

I have not used it for networking and distributed processing. There are examples in the Media Computation textbook by Guzdial and Ericson for topics like databases and functional programming, including higher-order procedures. You can do regular Python things in JES, but it has extra support for media things.

2

Python is a "almost pseudocode" language that is powerful enough to do "real" programming (most of the administrative tools in e.g. Fedora Linux are written in Python), it has simple to use extensions for graphics/graphical interfaces, it can handle large numerical problems (people use NumPy for this), much web programming is done in it, several programs use it as extension language. There is an extensive library, and many larger systems written in/for it. So it is not a toy language, learning it is useful later on.

Look at it's homepage, there are mature implementations available for almost any platform you might care for. It is free (not just zero cost). There is extensive documentation available, a Google search for "python tutorial" gives millions of hits. A hands-on web tutorial is Learn Python. For an introductory programming course using Python, consider Downey's Think Python.

vonbrand
  • 14,204
  • 3
  • 42
  • 52
1

you exclude scratch developed by MIT which seems to roughly fulfill some of the criteria. anyway here are two newer languages that are worth some consideration.

  • Go by google. designed for fast compilation. here are the design goals

  • Swift by Apple for mobile development. designed to be a less complex alternative to Apple's Objective C.

  • node.js is newer & basically designed to expand the capabilities of Javascript to the server side & include networking capabilities.

vzn
  • 11,162
  • 1
  • 28
  • 52
1

You should probably use Visual Basic. It is simple, you can easily make the contacts list application along with some simple GUI games. You can also debug it. If your school is willing to dish out the dough you can get a dreamspark subscription. I think it will hold the students' attention.

109
  • 27
  • 2
0

Have you looked at Newspeak? Newspeak is a modern variant of Smalltalk. So yes, it's object oriented, but in the Alan Kay sense rather than the Simula 67 sense.

Having said that, if I were teaching programming to the middle school, I would ditch the debugger requirement and teach something more like Haskell.

Pseudonym
  • 24,523
  • 3
  • 48
  • 99