Classes: | Tuesdays and Thursdays, 4:00–5:50pm · GFS 223 · [Zoom] |
Piazza: | https://piazza.com/usc/fall2025/csci431 |
Instructor: | Mukund Raghothaman (raghotha@usc.edu) |
Office hours: | Thursdays, 1:30–3:30pm, or by appointment |
This course will introduce you to a range of advanced programming paradigms. We will assume an elementary knowledge of programming, such as that covered in CSCI 103 and CSCI 104, and study powerful ways of structuring code with higher-order functions, of providing strong guarantees with static type systems, and ways to liberate the programmer from low-level resource management. By blurring the distinction between programs and data, and widening the gap between a program and its execution, our goal is to blow your mind about what it means to program a machine, and to reinforce your developing sense of computational thinking. The first half of the course can alternatively be seen as an introduction to functional programming with Ocaml, while the second half of the course can be regarded as an introduction to logic programming.
Note: The syllabus and schedule listed on this webpage are tentative, and may be updated as the course progresses. Please check back regularly!
Aug 26, 28 |
Course introduction
|
Sep 2, 4 |
An introduction to types
|
Sep 9, 11 |
Abstracting computations with functions
|
Sep 16, 18 |
Processing recursive data
|
Sep 23, 25 |
Assorted topics
|
Sep 30, Oct 2 |
Understanding syntax
|
Oct 7, 14, 16 |
Syntax, contd.
|
Oct 21, 23 | Syntax, contd. 2: Parsing algorithms for regular expressions and context-free grammars |
Oct 28, 30 | An elementary understanding of types and the runtime |
Nov 4, 6 |
Spreadsheets
|
Nov 7, 12 |
The relational data model
|
Nov 13, 18 |
An introduction to recursive query languages
|
Nov 20, 25, Dec 2 |
More on recursive query languages
|
Dec 4 |
Course conclusion and review
|
Dec 11 | Final exam (4:30pm–6:30pm) Good luck! |
The first half of the course will follow the Real World Ocaml textbook. This is the only required textbook for this course. We will assign additional supplementary readings as appropriate.
sudo dnf install pl
,
brew install swi-prolog
, sudo apt install swi-prolog
, or similar),
or directly from its website.You are welcome to discuss homework assignments with a partner. However, each of you will turn in your submissions separately. You will each be responsible for independently writing and physically typing the solutions in your submission. Please identify your discussion partner, if any, in your submission.
Last updated: Tue Sep 2 11:52:02 AM PDT 2025