All of the various tools, links, and data mentioned in the talk are below.
Grace is a new programming language aimed at education. Grace intends to reflect the last two decades’ accumulation of knowledge on language design and teaching, and integrates well-known features that have proved themselves useful in other languages. Grace permits multiple approaches to program design and teaching, including object-, class-, procedure-, and function-based programming, with or without types, and allows moving between these approaches within the same language, so that students can be exposed to multiple approaches and instructors can tailor their courses to the topics they wish to teach.
Supporting users at different stages of understanding is a key goal of Grace. While the main purpose of Grace is to be used for introductory programming courses, it is also a full-powered language incorporating the state of the art in language design. Different approaches and different levels of learning are supported by a feature called dialects: extended and restricted user-defined sub-languages applied on a per-module basis. Through dialects a learner need only see the functionality that is relevant to their stage of learning, with other features that might confuse the issue hidden, and can gradually move to an unrestricted language.
In this talk, I’ll outline the principal features of Grace and the philosophy behind them. I’ll discuss the design choices made and the paths not taken, and describe the remaining open issues of the language. I’ll talk about where language design can help programmers say what they mean, and talk particularly about the interesting pattern-matching and dialect features in Grace.
I’ll also look at what educational research tells us about learning to program and programming languages. I’ll outline how that has influenced the design of Grace. In the same vein, I’ll give some examples from the design process so far showing how conceptually orthogonal design decisions turn out to be deeply interrelated and require careful balancing with the goals of the language. I’ll mention preliminary trials using Grace educationally.