Lecture Notes: Theory (and Practice) of Programming Languages
Welcome! In this course, we study programming language concepts and paradigms in the context of contemporary software engineering practice. This version of the course is normally taught by Konstantin Läufer and focuses on functional and concurrent programming languages with examples and projects mostly in Scala.
We maintain these lecture notes using GitHub. We also offer PDF and ePub formats for offline/mobile reading.
Warning
These notes are still being written, so expect a few rough edges. But we’re getting closer! Your contributions are highly welcome! Please submit issues and pull requests.
- 1. Overview
- 2. Context and Background
- 3. The Imperative and Object-Oriented Paradigms in Scala
- 4. The Functional Programming Paradigm
- 5. Program Representation and Interpretation
- 6. The Concurrent Programming Paradigm
- 7. Summary
- 8. Appendix: Programming Language Design Principles
- 9. Appendix: Resources
- 10. Appendix: Course Software
- 11. Appendix: Course Syllabi
- 12. Appendix: TODO
Todo
add sample projects, activities, tests, and (tiered) master list for presentations
Todo
add stuff from https://trello.com/c/kAMGZ4uf/28-add-in-next-iteration