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.




Comments (7)

  1. Doug Holton says:

    Well I’m hoping to work on a more beginner-friendly programming language/environment sometime in the near future.  I’ve been an active contributer to boo, a .net/mono language which now also has the beginnings of a java backend.

    I don’t have a problem with logo/scratch/alice/supercard/etc., but one major major limitation of those and other beginner tools is that you cannot use them to develop any type of application you want like you can with java/C#.

    You can’t develop a 3d game, or a chat bot, or a notes organizer, or a web application, for example.

    You can do that if you have a beginner-friendly wrapper to the .net and/or java class libraries.

  2. AlfredTh says:

    Boo (http://boo.codehaus.org/) looks like an interesting project. Thanks for bringing it to my attention.

    I agree with you that not beign able to create general purpose programs in various domain is a serious limit to languages like scratch and alice. That is one thing I’d like to see overcome.

  3. Ben Chun says:

    I’d put in a vote for Scheme as best teaching language ever.  Just kidding.  I actually really like using Flash to teach programming concepts, because ActionScript has a pretty relaxed syntax (same as JavaScript) but still lets you introduce important concepts like objects, functions, variables, scope, etc.  The visual aspect of it is also key to student engagement.  I don’t think we have to hide syntax from students entirely to make programming approachable.  We just have to give them some kind of payoff, some visual confirmation that what they are doing has an effect.  Printing out “17” just doesn’t have the same impact as seeing their own art being programmatically moved around the screen and animated.  For example, this is what my students are doing tomorrow:  http://www.galileoweb.org/chun/newsItems/viewFullItem$46

  4. Ben Chun says:

    Looks like your auto-linker borked on the $ … definitely not my preferred URL there, sorry.  The school is on this old Manila installation and we’re trying to figure out how to migrate to WordPress, which is not only sensible about URLs but also other things.

  5. AlfredTh says:

    Yeah the auto-link code did mess up with the $ but I was able to edit it manually to make it work. Don’t you love it when software is "helpful?"

  6. Phil Carbone says:

    If anyone is interested in a "Universal Programming

    Language" concept please visit the URL below:

    http://groups.google.com/group/universal-programming-language/

Skip to main content