The first Open University Sense Workshop was held at the London School of Economics on Saturday 11 November 2012.
Sense is a computer programming language that has been derived from Scratch, a language that was developed by Massachusetts Institute of Technology. The aim of the Sense workshop was to allow TU100 My Digital Life students to become more familiar with the Sense environment helping them to learn some of the fundamental principles of computer programming.
This blog post is intended as a summary of the first ever Sense workshop. It has been written for both students and tutors. If you feel that anyone might find this summary useful, please don't hesitate to distribute widely.
The phase 'computer programming' is one that can easily elicit an anxious response. Programming is sometimes seen as something that is done through a set of mysterious tools. The good news is that once you have gained some understanding of the fundamental principles of programming (and how to tackle problems and debug programs), the skills that you learn in one language can be transferred between other languages.
Sense is a programming language that uses the same fundamental concepts of languages that are used in industry (such as C++ and Java) but Sense makes the process of writing computer programs (or code) easier by allowing programs to be created from sets of visual building blocks. In some ways, Sense is a visual programming language that is completely analogous to many other languages. The fundamental difference between Sense and other languages is that it helps students to focus on the fundamental bits of programming by shielding new programmers from the difficulty of writing program instructions in a language that can be quite cryptic and difficult to understand.
The overarching intention of the Sense workshop day (that is described here) was to demystify Sense and encourage everyone to have fun. The Sense environment allows programming instructions to be manipulated as a series of lego-like blocks. These snap together to form 'clumps' of instructions which can be attached to either a background (or stage, where things can more about on), or sprites (which are, in essence, graphical objects). Through Sense it is (relatively) straightforward to create sets of instructions to build simple animations and games.
The workshop is divided up into three different sections. The first is a broad overview of some of the ideas about programming, followed by a demonstration about how to use the Sense environment. The second section was a presentation which contained some useful guidance about how to complete an assignment. The third section was more open... but more of this later.
The lecture bit - stepping towards programming...
The workshop kicked off by a talk by one of our Open University tutors, Tammy. Tammy made a really good point that 'we can't teach you programming'. The implication is that only a student can learn how to do it. The best way to learn how to do it is, of course, to find the time to play with a programming environment and to tackle, head on, the challenge of grappling with a problem.
Tammy asked a couple of people to come up and draw some shapes on the whiteboard. Different participants drew very different shapes despite being given exactly the same instructions. The point of the exercise was clear: that it is absolutely essential to provide sets of instructions that are both completely clear and unambiguous (as otherwise you may well be surprised with the results that you come back with).
Tammy talked about the different categories of program instruction, which were: sequence instructions, selection instructions and iteration instructions. Pretty much all programs are composed of these three different types of operations. Put simply, a sequence of instructions is where you do one thing after another. A selection operation is where you make a choice to do something depending upon the status of a condition (for example, if you are cold, you might turn the heating on). An iteration operation is where you do something either a number of times.
These sets of operations can be used to describe every day actions, such as making a cup of coffee, for instance. This simple activity can be split into a sequence of steps, which can include iterations where we check to see if the kettle is boiling. (We might also do some parallel processing, such as making some toast whilst the kettle is boiling, but multi-threading is a whole other issue!)
The main points were (1) programming cannot be taught, it can only be learnt by those who do it, (2) there are some fundamental building blocks that can be combined together and nested within each other; you can have a sequence of steps within an iteration, for instance, and (3) programming requires things to be defined and described unambiguously.
The demonstration bit - creating an animation...
The second part of the morning was hosted by Leslie. Building on Tammy's summary of programming Leslie showed us what it meant to actually 'write' a program using the Sense environment.
In some respects, you can create anything within the Sense environment. It provides a set of tools and it is up to you to come up with an idea and figure out how to combine the pieces together to do what you want to do. In some respects (and getting slightly philosophical for a moment), you can define a whole universe or a world in software. You can, in effect, define your own laws of physics. I can't remember who said it, but I have always remembered the phase, 'the universe is mathematical'. Given that computers only understand numbers, the Sense environment allows you to create and represent your own universe (and interact with it in some way).
Leslie's universe was a fishtank. She began by drawing the tank, including water weeds. She then went onto draw a set of different fish characters. Script was then added to move the fish around the screen (in the tank), first in one direction (from left to right), and then in both directions (from side to side). Leslie then added more characters and defined interactions between them using something called the 'broadcast' feature to alert some of the virtual fish that a bigger and more dangerous fish had arrived in the tank.
What was really great was how she demonstrated how to connect different instructions together (to create sequences), to have sequences of instructions operate when certain conditions are met (which represent selections), and introduce repeat loops (which represent iterations; carrying out the same instructions over and over again).
The bit about the assignment...
The final 'lecture' part of the day was by Open University tutor Dave, who took everyone through the structure of the forthcoming assignment (without giving any of the answers). Dave talked about the use of the on-line discussion forums and this gave way to an interesting discussion about the importance of referencing. Other points that were mentioned included the importance of things such as including word counts (on the TMA), and the learning objectives that are used by the module.
The programming bit...
During the afternoon, we all split into two different groups and got together into small groups of between two and four people. The intention of the second part of the day was to try to create a small Sense project by huddling around a single laptop on which the Sense environment had been installed. We would then work on something for an hour, and then we would present what we had done to the other groups, describing some of the problems and challenges that we had encountered along the way.
Not having had much experience at using Sense, I was very happy to play an active role within one of the groups. One of my main intentions at coming along for the day was to learn more about how to use the language and discover more about what it was capable of. Our group came up with two different ideas: a representation of a car race track and some kind of athletic game or animation. We settled on the athletic theme and decided we would try to animate a man running around a very simple athletics track. (Our track became a square as opposed to an oval shape since we decided that re-discovering the mathematics of the circle was probably going to be quite tricky to master in about an hour!)
Within an hour we had drawn some stick figures, got our character doing a really simple 'run' animation and had our figure run around a really simple athletics track. From memory, one of the challenges was figuring out how to represent program state and have it shared between different scripts that were running within the same sprite (apologies for immediately going into Sense-speak!) Another challenge was to figure out how to represent state with Boolean variables and have those embedded within a continuous loop (but given enough time, I'm sure that we would have cracked it!) A final challenge (and surprise) was to understand that the Sense environment automatically 'remembered' how much a character had been rotated between the different times that we 'ran' our scripts. (We had instances where our running character ran off the side of the screen, much to our surprise!)
After our time was up, we were all asked to demonstrate and talk through our various projects. I can remember a simple etch-a-sketch game, a demonstration of some bouncing balls (which bounced at different speeds), a space invader game (where the invader was a cat), a Tom and Jerry animation where Tom chased Jerry across a screen, and an animation that involved a balloon and a plane. It was great to see very different projects since when we were coding our own, we can easily get into the mindset of just solving our own problem; seeing the work of others is something that is very refreshing. It was inspiring to see what could be created after an hours of programming.
The whole day reminded me of the time when I first tried to learn computer programming and I still remember that it was a pretty difficult challenge (in my day!) I always wanted to rush ahead and solve the bigger more exciting problems but I was often tripped up because I needed to understand the operation of the fundamental instructions and operators (and the way a language worked). In my own experience the only way to really understand how things work is to find the time to play, to explore the various operators and instructions, but finding both the time and the confidence to do this is perhaps a challenge itself.
All in all, the first Sense Workshop was a fun day. I certainly got a lot out of it and I hope that everyone did too. I certainly hope this is going to become a bi-annual event for all our TU100 students. From my 'I've never really used Sense before to do anything other than to run a demo program' perspective, I certainly came out learning a lot more than I did when I started. Large parts of Sense was demystified, and I certainly had a lot fun attending.
After sharing a link to this post my colleague Arosha (who also came along to the Sense workshop) has written a short blog post. Arosha is loads more skilled when it comes to Sense programming and has re-created one of the projects that were demonstrated on the day. Thanks Arosha!