Education Technology

Playing with Small Basic

Yesterday I stumbled upon SmallBasic, while looking for something else. It is an interesting little project by Microsoft to create an entry level language to teach programming. It is a mix of toned down BASIC and Logo. Since the language (or is it an application) is still in infancy, version 0.5 released recently, I will try not to be too harsh on it.

Sample program with obligatory screenshot

Showing Flickr Image

1: url = Flickr.GetPictureOfMoment()

2: img = ImageList.LoadImage(url)

3: GraphicsWindow.Title = url

4: GraphicsWindow.DrawImage(img,0,0)

5: GraphicsWindow.Height = ImageList.GetHeightOfImage(img)

6: GraphicsWindow.Width = ImageList.GetWidthOfImage(img)


The Good:

  • The interface is toy like and very simple. Will surely win favours with 10 year olds.image

  • The limited with just 15 keywords is good too.

  • The learner does not need to initialise variables, there is no new.

  • No variable scopes, everything is global.

  • Before you think it will bring forth another set of programmers, like the much maligned VB programmers, remember this is for 10 yr olds.

  • In general, it feels light weight and fast.

The Bad

  • The application itself depends on .NET 3.5 which still does not have a large installed base.

  • For sake of simplicity, all libraries are more or less global objects. This approach might not scale when more libraries are added.

  • The turtle is non-interactive and verbose. How I long for the good old code which went something like:

1: FD 100

2: RT 90


  • Same application in SmallBasic:

1: For i=1 To 4

2: Turtle.Move(100)

3: Turtle.TurnRight()

4: EndFor

  • The result:

  • Output of Logo square

    Notice there is no area to type the next command, all commands to turtle have to be specified upfront.

The Ugly

  • The syntax is very ugly. Why the curly brackets?

1: ‘You need the curly brackets for all function calls.

2: GraphicsWindow.Show()

3: ‘Why not drop the brackets for zero argument functions?

4: GraphicsWindow.Show

  • The current syntax forces the learner to understand the different between a property and a function. Completely unimportant for the target audience.

  • To add to that it is not consistent, you still have a few functions that have a property pattern (GetSomething, SetSomething)

  • What would look better, VB.NET style or a mix of original BASIC and ruby?


I really dig for anything related to teaching programming to children. Although my daughter is too young to program, I draw from my experiences of learning programming. I, like countless others, was introduced to BASIC and Logo as the first programming language. But I was not interested in adding 2 numbers or drawing a square. I became interested in programming when I was introduced to dBase III (remember it?). When I found I could save and retrieve data and manipulate it, I was sold.

Similarly, I think, today’s internet generation might be sold on network based interactivity. SmallBasic takes initial steps in that direction by having a Network object and a Flickr object. This will be a good direction to pursue and add more libraries for APIs from other web apps. Hackety Hack approach, I guess.

The other thing interesting to this generation is gaming and multimedia. Although Scratch, Alice, Phun and others like Phrogram are filling that need, a few libraries towards that end (animations, effects, sound, video), will not hurt at all.

In conclusion, I think this is a very interesting start, but needs to cover much ground, while remaining true to the promise of simplicity.