In this paper, we describe the design, development, deployment and evaluation of NoobLab, our novel on-line environment for the teaching and learning of computer programming. Although originally devised for the teaching of elementary Javascript, the system now also supports Java, PHP and a prescriptive form of pseudocode designed to assist in the teaching of elementary programming concepts. The system incorporates a number of innovative features, such as automated checking of program code, detection of plagiarism, "gamification", and automatically logs all of each user's interactions with it, facilitating performing learning analytics relating to student engagement and performance. The system has already proved to be of value in teaching programming, and helping people to learn to program, not just to specialist Computer Science students, but also people studying Engineering or Mathematics as their main subject discipline.