This repository contains various teaching materials I created for the courses taught at Charles University and University of Kent. The materials use reveal.js and are generally generated from Markdown using F# Formatting. For my industry and research talks see my Talks repository and for older materials (before 2015), check out my old Documents repository.
The goal of this course is to show students how to design better programming languages, developer tools, development frameworks and libraries. The course covers rigorous methods for programming language and library design, ranging from formal methods based on logic and programming language theory, to human-computer interaction methods based on qualitative and quantitative user studies.
See also the official course page and NPRG075 in SIS.
- Introduction - Programming language design
- Design - Learning from architecture and design
- Usability - Human-centric language design
- Semantics - Formal models of programming
- Types - Mathematics and engineering of types
- Beyond - Unexpected perspectives on types
- Paradigms - History and philosophy of programming
- Close - Close look at past and today's programs
- Assignment - & How to do programming language research
- Heuristics - Heuristic evaluation of programming systems
- Cognition - Making programming easier and learnable
- CO886 - Software Engineering (2022)
- CO886 - Software Engineering - Class Materials (2022)
- CO559 - Software Development (2022)
- CO582 - Computer Interaction and User Experience (2019)
- CO880 - Software Project and Dissertation (2022)
The presentations and documents available in the repository are available under the Creative Commons Attribution 2.5 license. This means that you can copy, distribute and remix the work, but you must attribute the work to the author (by providing a link to the original source and my name). For more information see the full license details.