This site collects resources for use in CSC 424. For information specific to a particular semester, consult the associated Moodle page:
| Week | Topics | Readings | Assignments |
|---|---|---|---|
| 1 | Intro | Scott: Ch. 1 | Lab One: Scala Overview |
| 2 | Syntax | Scott: Ch. 2, only Sect. 1 | Lab Two: Parsing |
| 3 | Names and Bindings | Scott: Ch. 3, except Sect. 4 | Lab Three: Expression Language |
| 4 | Control Flow | Scott: Ch. 6, Sects. 1-6 | Lab Four: Defining Control Structures |
| 5 | Data Types | Scott: Ch. 7 | Lab Five: Type Checking |
| 6 | Control Abstraction | Scott: Ch. 8 | Lab Six: Function Language |
| 7 | Midterm Exam | – | – |
| 8 | Data Abstraction and OOP | Scott: Ch. 9 | Lab Seven: Design Patterns |
| 9 | Functional Programming | Scott: Ch. 10 | Lab Eight: Higher-Order Control Structures |
| 10 | Logic Programming | Scott: Ch. 11 | Lab Nine: Prolog |
| 11 | Concurrency | Scott: Ch. 6, Sect. 7; Ch. 12 | Lab Ten: Approaches to Concurrency |
| 12 | Scripting Languages | Scott: Ch. 13 | Lab Eleven: JavaScript |
| 13 | Domain-Specific Languages | – | Lab Twelve: Internal and External DSLs |
| 14 | Wrap-up and Presentations | – | – |
There are many textbooks covering the area of programming languages in general (to say nothing of the books that focus on specific languages); here are links to a few of the better ones (several of which are available online):
One of the common features of all of these texts is that they focus on the concepts behind various languages and paradigms, rather than simply presenting a catalog of different language features.
Part of this list comes from a 2009 blog post by Michael Feathers, 10 Papers Every Programmer Should Read (At Least Twice). The comments on that post suggest many additional worthwhile papers.