The Current Situation


Currently in the Department of Computing at Imperial College, introductory programming is taught using a language called Turing[2]. The Department would like to move to a more Java-like system, to make it easier for students to move on to programming in Java, which is more applicable to real world problems.

The Turing System

The Turing language has a lot of features which make it a good choice for teaching programming. Unfortunately it is not a language in which commercial software is developed as it does not tend to be used outside of educational institutions. For this reason, students are often displeased by having to learn Turing as they do not believe that it will be useful in the long run and feel that they would be better off learning a language which is more popular in industry, such as C++ or Java.

If fact, students will be much better off learning the principles of programming using a simple language. It is far more important that students have a thorough understanding of how to solve problems and how to construct elegant and efficient algorithms in their programs than to know the syntax of a certain language. Once the basic principles of good program design and implementation have been learned, it is easy to take these principles and apply them in different languages.

Initially, students need to be able to focus on the way that they are solving problems and not on remembering complex syntax. This is why a less powerful language with a less complicated syntax, like Turing, makes a good tool for teaching and learning the principles of computer programming.

The Turing system that is currently used has an Integrated Development Environment (IDE) which can be used to edit code, to compile it (into a byte code which is then interpreted by a virtual machine), to execute a program and to step through the execution an instruction at a time. The ability to step through the execution, and also to examine the contents of variables during that execution, makes debugging programs much easier as it allows the programmer to observe the path of control through their programs.

A Java-like Teaching Language

The Turing system has many features which make it a good teaching language, as have been described above. There is no substitute for learning good techniques and thinking about structure and algorithms when it comes to learning programming. The use of a teaching language makes it easier for students to develop these key skills without complex syntax getting in the way. However, programmers will soon want to move on to a more commercial language. At the time of writing, the language which is seen as most desirable by employers, and on which most research and development of software engineering techniques is being based, is Java. The learning curve in moving from Turing to Java is quite steep, as few pieces of the syntax are shared, and some of the object-oriented concepts in Java are hard to grasp quickly. The severity of this learning curve could be reduced if a teaching language was developed which shared the syntax of Java (or at least followed its general style) for expressing common constructs. Better than this would be a system which would take code written in a teaching language, and automatically translate it into the Java code that a Java programmer would write to complete the same task. This would allow a novice Java programmer to see how constructs from the teaching language map to Java code. If this could be combined with a good Integrated Development Environment then this would be a very good tool for teaching introductory programming with a view to later moving on to Java. The design of such a language and development environment is the aim of this project.