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
- Research - Assignment & How to do programming language research
- Types - Mathematics and engineering of types
- Beyond - Unexpected perspectives on types
- Philosophy - History and philosophy of programming
- Close - Close look at past and today's programs
- Heuristics - Heuristic evaluation of programming systems
- Cognition - Making programming easier and learnable
In this course students will explore .NET platform's advanced programming techniques and internals, and specialized parts of standard .NET libraries. Successful completion of the course should give students a good knowledge of the wide range of features provided by the .NET platform, and allow them to effectively use the gained knowledge in real-life projects developed for .NET platform.
See also the official course page and NPRG077 in SIS.
The goal of this course is to teach how fundamental programming language techniques, algorithms and systems work by writing their miniature versions. The course covers multiple paradigms including functional, object-oriented, imperative and logic, as well as end-user programming environments like spreadsheets. Examples will be given using the F# programming language, which will be briefly introduced.
See also the official course page and NPRG077 in SIS.
- Lecture - Welcome: Tiny programming system(s)
- Lab - TinyML: Tiny functional language interpreter
- Lab - TinyBASIC: Tiny interactive imperative programming system
- Lab - TinyHM: Tiny Hindley-Milner type inference
- Lab - TinyProlog: Tiny declarative logic programming language
- Lab - TinySelf: Tiny prototype-based object-oriented language
- Lab - TinyExcel: Tiny incremental spreadsheet system
I did guest lectures at two courses! The Concepts in Modern Programming course (NPRG014 in SIS) shows interesting and advanced concepts of modern object-oriented programming languages and demonstrate their application together with practical exercises. The Functional Programming course (NAIL097 in SIS) covers theoretical foundations of functional programming and their uses, in particular in the environment of Haskell language.
- 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.