Once a student is ready, NoobLab supports a variety of programming languages/environments out of the box. All of these allow the tutor to create the same automated assessment and feedback experience the students will have become accustomed to when using the block-based visualisation tool and the simple Banana language.
The screenshot opposite shows NoobLab in the "plain" Javascript mode. In this mode, students can write Javascript code that uses a text-based console, or you can provide HTML fragments against which students can use Javascript DOM manipulation functions.
In our use of the NoobLab environment in a Higher Education context, we have found that Javascript provides a good transitonary introduction to C-like grammar and syntax. Starting students with console-based programs is a logical progression from blocks and Banana. Students can then be introduced to the DOM and event-driven programming - the latter being an important concept that can be overlooked.
Javascript can also be supported within our "web" mode. This mode allows exercises in which the student can start with static HTML pages, style them, and then add server and client-side interactivity with Javascript. The tutor can create tests which use Javascript to test the student's HTML output (which might have been produced from a static HTML file or dynamically generated by PHP), or use PHP to write tests that examine the student's server-side code.
NoobLab supports two modes for Java. The first is a "scaffolded" mode in which the student is provided with a (non-editable) skeleton class and main method. This allows the basic grammar and syntax of the Java language to be taught while abstracting the complexities of Object Orientation - useful if a "late objects" teaching approach is being used. The second mode allows the student to create unadulterated Java projects that consist of as many classes as may be appropriate to a given activity. In both cases, the tutor can create tests that provide the student with automated assessment and feedback; this can be as simple or as complex as necessary. In Java mode, the tutor writes their tests in Java and has access to the students' console, as well as the classes they generate. A test might simply examine the output of the program, it might create instances of the class(es) the student has written, or it might use Java reflection to query whether certain methods or attributes exist.
Python can be used as a "raw" language much as Javascript or Java to create console based applications, or it can be used as a slot-in replacement for Banana for introductory material. In the latter case, students can use the Blockly overlay to author code and see Python code dynamically constructed, and the Carol microworld can be used within Python-based exercises.
NoobLab would be easily extensible to accommodate other languages. It would be trivial to add support for any JVM-based language. Languages for which cross-compilers to Javascript exist could also be quickly embedded. There is also a simple BASIC interpreter already embedded in the system (although this has been largely superceded by the Banana language).