views:

131

answers:

7

I'm investigating languages and IDEs for a project involving teaching high-school students (around grade 11). It will teach basics of programming as an introduction to computer science (e.g., including how numbers/strings/characters are represented, using procedures and arrays, control flow, a little bit of algorithms, only very basic I/O). The non-negotiable requirements for this project are:

  • a free up-to-date cross-platform IDE (Win & Mac incl. 64-bit) with debug
  • a compiler where it's easy to learn from your mistakes
  • together with the IDE, a gentle installation+learning curve

So far, the best options I see are the following. Are there others I should know about? I am giving a short explanation with each one to generally show what I am looking for. In order from most to least promising:

Promising:

  • Pascal + FreePascal IDE (it seems a little buggy but actively developed?)
  • Python + Eclipse + PyDev (good but features are overwhelming/hard to navigate)
  • Scheme + DrScheme/PLTScheme (good but very different)
  • Python + IDLE (looks unnatural to do debugging, to me)
  • Boo + MonoDevelop

Not promising:

  • Pascal + Lazarus (IDE overwhelming, e.g. not obvious how to "start from scratch")
  • Groovy + Eclipse (debugging mode gets into Java)

Preferably, as a rule of thumb, the language should be direct enough that you don't need to wrap every program in a class, don't need to reference a System object to println, etc.

I tried a little bit to see if there is something in JavaScript or (non-Visual) Basic along the lines of what I want, but found nothing so far. I would say that C/C++/C#, Java, Ruby, VB do not fit my criteria for languages for this project.

To reiterate my questions: are any of those options really awesome or un-awesome? Are there other options which are even MORE awesome? Anything for Basic or JavaScript which meets all of the criteria? Thanks!

Edit: It's helpful for people say whether they're recommending tools they've actually used; also, I edited the list above based on first round of responses.

+1  A: 

You commented that you ruled out Lisp, but didn't say why. I realise Common Lisp is very big, but you might want to take another look at the Scheme dialect, which is much smaller and simpler, and is often used as a teaching language even for non-CS types (Felleisen et al.'s How to Design Programs specifically targets a non-programmer audience). There are various "Lisp in a Box" IDE-esque packages available for download.

That said, Python and Pascal are much more widely used in business computing than Scheme. So you may prefer them for that reason alone.

itowlson
daveagp
erjiang
I have turned around my parenthophobia based on Norman's comment above. But to get a sense of my source of fear, I think stepping through a program line-by-line is more effortless with other languages (e.g. Pascal).
daveagp
+3  A: 

Take a look at Boo and MonoDevelop.

Also, Microsoft's Small Basic is targeted at new/young programmers. The IDE (if it can be called that) is simple to use and the language is based on traditional BASIC, so it should be pretty easy for most people to pick up. If you really need to run it on a Mac, why not use VirtualBox or VMWare Player?

Rory
The more I see of Boo, the more I think it is a tremendous little language. With MonoDevelop to handle the cross-platform requirement, this is a great suggestion.
itowlson
I have spent some time today installing MonoDevelop but am failing to find online instructions to add Boo. I may be very dense here, but can someone provide a pointer to how to do this?I tried SmallBasic today. It is a very neat concept but doesn't seem to have debug, and the compiler errors were not so helpful in my opinion.Thanks! The remark about VirtualBox and VMWare is helpful too.
daveagp
@daveagp: Sorry about the late reply, I only just noticed your comment. If you take a look at the "Source Code Tarballs" section of the [MonoDevelop download page][1], you'll find one for adding Boo support (5th item in the table). There is a link to instructions for using it just below the table. As for Small Basic, I haven't looked at it since it was on devlabs and didn't realise there was no debug support, sorry about that. Glad the virtualization suggestion helped. [1]: http://monodevelop.com/Download
Rory
@daveagp: I just took a look at the Small Basic forums and found this: http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/1f0c90a0-e7f8-4e6c-8fff-146a3208c3f2/ So maybe theres hope for using it in your situation in the future. Hopefully they'll improve the error messages as well, but this is Microsoft we're talking about so don't hold your breath ;)
Rory
A: 

It almost sounds like you are going to need to write a language of your own. Though I would like to say that there are open and free versions of editors for C# (on both Windows and Linux) and the language is a nice cross-section of various other languages (java, C++, etc). Language imports and modules (System.Console for instance) can be easily addressed with aliases and partial classes which can be provided in the default "new project" such that everything works as you have specified above.

Outside of that you may want to look at scripting languages (Python, Powershell, etc), there are several choices of IDE's but the debugger might be the bigger issue there.

GrayWizardx
I don't know anything about this alias/partial class approach. Can you be explicit or give a pointer to more information?
daveagp
A: 

Have a look at freebasic, which is a 32bit basic compiler and is opensource, that might fit the bill, look here at phatcode.net...to quote from their website (first link):

FreeBASIC is a completely free, open-source, 32-bit BASIC compiler, with 
syntax similar to MS-QuickBASIC, that adds new features such as pointers, 
unsigned data types, inline assembly, object orientation, and many others.

Speaking of which, you wanted a 64bit version of a BASIC like syntax, have a look at this QB64..on the wiki page of their site here, to quote from their page here:

QB64 is a compiler with an editor(IDE) that strives for 100% Qbasic and
QuickBasic 4.5 compatibility. Galleon is the author of QB64 and has decided 
to work alone on the compiler for the time being to keep it on the right track, 
but open-source has been implied in the future. 


QB64 not only strives for 100% QB 4.5 compatibility but also strives to extend 
the capabilities of QBasic to fit modern needs without changing the 
BASIC philosophy. New statements often begin with _ to keep it compatible 
with old QB source.
tommieb75
"I think of the company advertising 'Thought Processors' or the college pretending that learning BASIC suffices or at least helps, whereas the teaching of BASIC should be rated as a criminal offence: it mutilates the mind beyond recovery." ---Edsger W. Djikstra
erjiang
@mazin: *offers his wrists out to get handcuffed*....
tommieb75
mazin: to be fair, that was the Basic of the glory days, of `10305 GOTO 2070` and $ for string variables. Modern Basics are fully structured languages with more in common with Algol and Pascal than with ye olde Basicke of the 1960s and 70s. I assume (without looking) that the Basics tommieb links to are such modern dialects.
itowlson
@itowlson: thank you for saving me.... :D yeah right on, it is modern dialect, freebasic actually looks a more promising language for starters learning programming...
tommieb75
I tried downloading these, and correct me if I'm wrong, but it looks like QB64 is not cross-platform, similarly FreeBASIC itself is a compiler without IDE, and the advertised IDEs on its download page are Windows-only.
daveagp
+4  A: 

Are there other options which are even MORE awesome?

Yes: PLT Scheme. The TeachScheme project is designed exactly to teach computer science and programming to high-school students (even middle schoolers), and they have had over 15 years' experience developing a superb IDE and pedagogy. Unless you suffer from an irrational loathing of parentheses, or unless you would rather step on other people's toes instead of standing on their shoulders, this is what you should be teaching.

(There are other good choices for beginners, but none comparable to the alternatives you list above.)

Norman Ramsey
This is a very useful answer, thanks especially for your comments on the ones listed above. The TeachScheme project is somewhat similar to the project I would like to make. The DrScheme/PLTScheme IDE seems to be good for basic operations and debugging, and makes it worthwhile to add Scheme back to my short list before fixing a language.
daveagp
+2  A: 

F# sounds like the best option because you don't have to do OO, or functional, but you can mix them together as you please. It has an interactive shell, but it is also fully type safe. It integrates with all the .NET libraries and is built to specifically make it easy to integrate with other languages and libraries as well, providing hooks etc....

For students it gives them the ability to approach designing programs interactively, but also use Visual Studio to create F# applications, with full intellisense etc....

It's easily the best choice for a brand spanking new language if someone doesn't know a thing, and which can take you from beginner to super coder using exactly the same language and platform.

Check out Don Syme (the creator of F#) giving a 3 part lecture on F# where he talks about that interactive, interative, experimental way of developing with F#, it's features and so forth: http://channel9.msdn.com/shows/Going+Deep/C9-Lectures-Dr-Don-Syme-Introduction-to-F-1-of-3/

Richard Hein
A: 

Why not Java? It seems like you're ruling out all of the languages that students will actually use in programming jobs.

I teach Java in my high school class using JCreator as the IDE. We're transitioning to AP Computer Science next year, which also teaches Java. It's not perfect, but it's a good choice, considering: - Java has a C like syntax - Java does a great job teaching object oriented programming - It is free - It is widely used

I was teaching Applets last year but I'm switching to Applications next year. There are some great resources for getting started on the College Board website.

I think students will get frustrated if they learn some obscure language that they'll never use again.

bestattendance
Java is not bad, it is one of my two favourite languages (along with Maple) but I excluded it because (like C#, VB) I would rather not talk at all about objects or "static" or "System.out." at the start if I can avoid it. For a slightly more advanced course, once someone has some programming chops, it seems more reasonable. I find it is actually very common for people who program for a living (among those I have asked) to have started learning in a language like Basic or Pascal which they don't use for anything, and have liked it. Thank you for the suggestion though.
daveagp