PAPL icon indicating copy to clipboard operation
PAPL copied to clipboard

Programming and Programming Languages

This repository contains lecture notes (TypeScript Jupyter notebooks) for a 1 semester upper-level course on programming and programming languages. The basis for the lecture notes is a course taught at San Francisco State University (SFSU) in Fall 2021 and Spring 2022.

Why this Class?

The hope of this class is to expose you to different ways of programming and how different programming languages support these ways of programming. Such a class is often taught using a non-main-stream langauge (e.g.,Scheme). Instead, we're using TypeScript, a superset of JavaScript. The advantage is that you'll come away learning a popular language that is widely used in web programming.

Contents

  1. Language primitives (i.e., building blocks of languages): lecture 02 - lecture 10.
    • pure functions and first-class functions
    • recursion
    • algebraic data-types
    • functional vs. object-oriented programming
  2. Language paradigms (i.e., combinations of language primitives): lecture 11 - lecture 17.
    • domain-specific languages and declarative programming
    • concurrency
    • laziness
  3. Building a language (i.e., designing your own language): lecture 18 - lecture 21.
    • interpreters and transpilers
    • meta-programming

Special Lectures

  1. Lecture 13 explores Sql
  2. Lecture 15 explores Go
  3. Lecture 17 explores Haskell

Why Jupyter + TypeScript?

Why not slides? Simply put, slides are a polished product that are not interactive and often do not show the thought proces and trial/error that goes into coming up with a piece of code that works. Jupyter + TypeScript enables you to explore concepts with actual code that you can modify.

Requirements

  1. Jupyter Notebook
  2. Node/JS

Usage

  1. npm install (first time)
  2. jupyter notebook

Acknowledgements

  1. Lawrence Kesteloot, Becker Polverini, and Aaron Bembenek.
  2. The students at SFSU.