Traditionally, the study of programming languages lies at the intersection of systems building and mathematical logic. We are interested in applying mathematical logic to build languages, tools, and processes that help us state and verify formal properties of programs. However, we do little in the way of verifying that these analyses and the resulting artifacts align with what actual developers need or want.
To address this concern, we will not only study programming languages from a mathematical perspective. We will also view a programming language as a general-purpose interface to a computational device. By doing so, we will apply human-centered design (HCD) techniques and the core principles of human-computing interaction (HCI) towards building better programming languages and tools.
By combining traditional programming languages concepts with HCI and HCD, we hope to understand:
- The mathematical underpinnings of programming and how they enable the creation of safe, secure programs.
- The fundamental implementation techniques that underlie modern compilers, interpreters, and domain-specific languages.
- The human-centered design process that allows us to design products that real people enjoy and find useful.
- The relevant cognitive theories that model how developers interact with their tools.