My Ideal First Programming Language

Long before I ran into graphical/drag and drop programming languages for kids like Scratch and Alice I was thinking about some thing similar. What I wanted was a tool that allowed a beginner to write their own programs without syntax and syntax errors getting in the way. I wanted something that would provide the programmer only a list of the options that were legal in the selected context.

I envisioned drop-down lists largely because I am artistically challenged but conventionally I was along the right path. Of course the experiences people are having with Scratch and Alice are opening my eyes to a lot of things I hadn't thought about earlier.

One of the problems I've heard a couple of people talk about is that while these tools don't allow one to do things that would be syntax violations they also don't tell the user why they can't do those things. I'd like to see something that both listed the allowable options but also to ask why other things are not allowed. Perhaps a "Why can't I ..." option for the user. This seems like something that would especially help students who are learning on their own.

The other things is that variables are both tricky to create and to use in these tools. I'd like to see a way to easily create variables with names, types and initial values. And then of course we'd want adding them to algorithms and statements should be easy as well. Personally I have trouble dragging variables into little boxes in Scratch and Alice. I'd like to be able to right-click on a place and see a list of possible and legal variable options. I also think that warnings about possible interaction/conversion issues with different variable types (see my recent post on some Visual Basic conversion issues) would be useful.

I'd like to be able to run bits of code without driver programs/routines like one can in BlueJ or Visual Studio's Object Test Bench. I like the idea of doing small unit testing early in the development process. I also think it would be useful for students to see how the little pieces work individually as well as collectively.

And I'd like to see the created program be available in a variety of higher level languages.  Alice allows one to see a more complex version of the symbolic code and I understand that one day Java output will be available. I'd like to see a choice of languages that include C++, C# and of course Visual Basic. Since F# is coming to Visual Studio which will make it more widely available I like the idea of using this programming method with a functional language as well.

Of course in my dreams one would be able to import higher level language code into this environment. But for practicality and manageability we'd likely to have to limit a tool like this to a subset of complete languages. 

The other thing I would like is ease of combining multiple projects. With separation of UI and code using Visual Studio and Expression Design (part of the Expression Suite) and perhaps even Silverlight this should be manageable. In fact perhaps it would let designers create some simple code to work with their user interface designs.

What would you like to see in a teaching tool? Are there things missing in Alice and Scratch that you'd like to see? Are there tools in other IDEs that should be included in your ideal beginning programming environment? What should be left out?

Eventually I'd like to come up with something to ask Microsoft to build. Jump on in and help me out.