# A Self-Learning, Modern Computer Science Curriculum

## 1 Introduction

"The great idea of constructive type theory is that there is no distinction between programs and proofs… Theorems are types (specifications), and proofs are programs" (Robert Harper)

This is a collection of modern resources on various undergrad level computer science topics, for someone with an interest in theory. Use WorldCat or LibGen if you can't buy these books. You don't have to do everything here, just the topics of interest to you.
If for any reason you want a condensed version, watch the *Great Theoretical Ideas in Computer Science* lecture series to see what interests you in the field. Almost all the material in each resource is self contained so will cover necessary background which if you don't have see the *preliminaries*.

### 1.1 Studying Strategies

On Isaac Newton's iteration method to self-learn geometry:

"He bought Descartes' Geometry and read it by himself .. when he was got over 2 or 3 pages he could understand no farther, than he began again and got 3 or 4 pages father till he came to another difficult place, than he began again and advanced farther and continued so doing till he made himself master of the whole without having the least light or instruction from anybody" (King's Cam.,Keynes MS 130.10,fol. 2/v/)

If you do a resource also do it's assignments and any older exams that are available. If you don't you'll probably be fooled into thinking you understand the material then will get lost in future courses. Numerous anecdotes exist on studying strategies, like the Feynman method and is explained here "If you can’t, out loud or on paper, explain the idea without confusion or contradiction, stop and figure it out right there". Eventually you will get stuck on a problem set that has errata you forgot to look up. After working at this for an hour or so and being confused what's going on you'll remember to always look up the errata for whatever book you're reading.

If you ignore the copious amounts of marketing on his site, Cal Newport has some other interesting anecdotes on studying, such as how he was able to get the best grade in his Discrete Mathematics class, and the rest of the site is full of advice on studying, how to schedule yourself and deliberate practice.

### 1.2 Discord channel

If you want to learn this material with a community, some anons have started a Discord channel.

## 2 Preliminaries

### 2.1 Intro to Computing

How command flags/switches work, how to setup networking, basic firewall introduction, how package management works (*nix, Windows & MacOS). Why is this here? So you can install the various software to complete all the courses on whatever OS you're using.

- (Slides) CS 2043 Unix Tools & Scripting
- Editors such as emacs/vim are introduced here
- The 1980s book The Unix Programming Environment by Kernighan & Pike walks through Awk/Grep/Sed and bash scripting
- Thank me later when they ask you in whiteboard interviews multiple questions all answered from the chapter on filters
- This recent book by Kernighan provides a clear explanation on the basics of modern computer hardware, software and communications networks

### 2.2 Introduction to Computer Science

I've rewritten this entire section into it's own site, if you want to try to learn PAPL *Programming and Programming Languages* from scratch and a few other courses, try the AI workshop.

### 2.3 Assumed Mathematical Background

"So I went to Case, and the Dean of Case says to us, it's a all men's school, "Men, look at, look to the person on your left, and the person on your right. One of you isn't going to be here next year; one of you is going to fail." So I get to Case, and again I'm studying all the time, working really hard on my classes, and so for that I had to be kind of a machine. In high school, our math program wasn't much, and I had never heard of calculus until I got to college. But the calculus book that we had was (in college) was great, and in the back of the book there were supplementary problems that weren't assigned by the teacher. So this was a famous calculus text by a man named George Thomas (second edition), and I mention it especially because it was one of the first books published by Addison-Wesley, and I loved this calculus book so much that later I chose Addison-Wesley to be the publisher of my own book. Our teacher would assign, say, the even numbered problems, or something like that (from the book). I would also do the odd numbered problems. In the back of Thomas's book he had supplementary problems, the teacher didn't assign the supplementary problems; I worked the supplementary problems. I was scared I wouldn't learn calculus, so I worked hard on it, and it turned out that of course it took me longer to solve all these problems than the kids who were only working on what was assigned, at first. But after a year, I could do all of those problems in the same time as my classmates were doing the assigned problems, and after that

I could just coast in mathematics, because I'd learned how to solve problems" (Don Knuth )

Try the new Math Foundations from Scratch **experimental** curriculum we'll try and teach ourselves the math needed to try most of the courses here. The reasons I've rewritten this section a dozen+ times is because I've yet to find anything that satisfies the condition of "is this a self learner?" so I'm just going to wing it and write my own. Even if it fails you'll still be able to confidently do any of the discrete math resources here.

## 3 Functional Programming

### 3.1 Principles of Functional Programming

The 2012 version by Dan Licata has the best lecture notes, optionally combine with most recent course notes. Robert Harper keeps a blog and a follow up post on the success of teaching this course.

- (Lecture Notes) 15-150 Principles of Functional Programming
- "PSML Chapters" are assigned reading from this book Programming in Standard ML an excellent book.
- Can pair these notes with the recorded lectures from Unit 1 through 4 (specific to SML) at CSE341 (UW)
- Try the labs and homework plus any exercises you find in the PSML book. Try the CSE341 homework
- Note emacs setup also here (if you use emacs)
- A post about what recursion is

### 3.2 Functional Programming & Data Structures

This Cornell OCaml course is totally self contained with it's own textbook. You will want to archive the entire course locally using wget. The release code for the assignments wget them here and change URL to /a4/a4.zip, /a3/a3.zip, they range a0.zip - a5.zip

- (Full Course) CS 3110 Data Structures and Functional Programming
- The free textbook is essentially the lectures, the notes have recommended chapters for additional books like
*Real World Ocaml*and have exercises. - Introduction to Coq, you can extract OCaml from Coq, F* or from Why3
- Previous semesters have notes on complexity of OCaml programs and solving recurrences
- See this talk Effective ML how to properly write interfaces, error handling

- The free textbook is essentially the lectures, the notes have recommended chapters for additional books like

## 4 Algebra

It is possible in a functional language like ML to do algebra with types, proving two types are isomorphic with the desired properties of reflexivity, symmetry, and transitivity. It's also possible to abstract Lists and Trees into polynomials, as every polynomial looks like a sum of terms.
As you will learn in 15-150 *Principles of Functional Programming* "most functional datastructures have constant time access near the outer layer of their structure, ie: the head of a list or the root of a tree. However, access at some random point inside the structure is typically linear since looking at some element of a list is
linear in the length of the list, and looking at some element of a tree is linear in the depth of the tree. Datatype derivatives allow constant time access to the entire structure."

### 4.1 Linear Algebra

Wildberger has a series of intuitive lectures to understand this topic geometrically.

- (Full Course) CS053 - Coding the Matrix
- Covers interesting applications like what was shown in
*Great Theoretical Ideas in Computer Science*when you learned how a parity bit works. - No formal prerequisites except assumes you know how to do basic proofs. Uses Python but you can do this course in OCaml too.
- This free book
*Linear Algebra - As an Introduction to Abstract Mathematics*from UC Davis has plenty of exercises

- This free book

- Covers interesting applications like what was shown in

### 4.2 Abstract Algebra

Some videos in this playlist introduce Abstract Algebra, walking through it's foundations distinguishing between descriptions, definitions and specifications of abstract algebraic objects.

- (Full Course) Math-371 Abstract Algebra - note these were deleted, some people have archived them on the Discord channel. I will upload mine to academictorrents.

## 5 Discrete Mathematics

Resources to learn undergrad Discrete Mathematics.

### 5.1 Introduction to Pure Mathematics

Good advice on writing mathematics, introduces LaTeX. Cornell has a similar class with complete lectures notes.

- (Book) An Infinite Descent into Pure Mathematics
- Collection of excellent lecture notes used in CMU's 15-151/21-127 Concepts of Mathematics class
- Curriculum based on findings in evidenced based teaching
- A recommended text from 15-151 with an algebra crash course in section 1.3
- List of Common Errors in Undergrad Math like undistributed cancellations, sign errors, confusion about notation etc.
- For an introduction to math from a programmer's perspective try pimbook

### 5.2 Discrete Math with Standard ML

This book covers most of the topics in courses 15-251 and 15-150, and teaches you to write proofs as programs. If you don't know how to program this book will teach you by modeling math functions in SML, polynomials into lists, sets into types, creating relations and proving their results with programs.

- (Book/Lectures) Discrete Mathematics and Functional Programming - Thomas VanDrunen
- Lectures exist on the author's homepage, this book is used for a one semester university course with additional elective chapters in Graph Theory, Complexity Theory, Automata, etc.
- The book
*Concrete Mathematics*is an alternative for exercises, as it has answers included for self-study.

- The book

- Lectures exist on the author's homepage, this book is used for a one semester university course with additional elective chapters in Graph Theory, Complexity Theory, Automata, etc.

### 5.3 Great Theoretical Ideas in Computer Science

This is a crash course in multiple topics such as Probability, Linear Algebra, Modular Arithmetic, Polynomials, Cryptography and Complexity Theory. 15-251 assumes students have completed *An Infinite Descent into Pure Mathematics* though it is self contained.
The best part about this course is old exams with solutions, and extensive notes.

- (Full Course) 15-251 Great Theoretical Ideas in Computer Science
- Recorded lectures if you click each topic, backup YouTube lectures and course notes
- Some more material on the most recent course schedule such as induction pitfalls
- (Optional) MIT 6.042j
*Mathematics for Computer Science*recorded lectures and course notes - Additional lecture notes on discrete probability and lectures about basic probability.

- (Optional) MIT 6.042j

## 6 Computer Systems & Architecture

"[Computer science] is not really about computers - and it's not about computers in the same sense that physics is not really about particle accelerators, and biology is not about microscopes and Petri dishes…and geometry isn't really about using surveying instruments. Now the reason that we think computer science is about computers is pretty much the same reason that the Egyptians thought geometry was about surveying instruments: when some field is just getting started and you don't really understand it very well, it's very easy to confuse the essence of what you're doing with the tools that you use." (Hal Abelson)

### 6.1 x86 Computer Systems

This covers architecture from a programmer's perspective, such as how to write cache friendly code/optimizations, assembly, how compilers work, return oriented programming (ROP) to bypass stack protections, the memory hierarchy, and networks. You could read K&R's
*The C Programming Language* for a brief intro, though this course will explain C as you go anyway and fully covers pointers at the assembly language level making it self contained.

- (Full Course) 15-213 Intro to Computer Systems (CMU)
- Recorded lectures here or download them here
- Get the CS:APP book, 3rd version for x86-64 (beware of the global version errata )
- The labs (Data Lab, Bomb Lab ect) are on the book website
- You can also do systems programming in Standard ML(pdf) or OCaml
- Try the embedded security CTF here after you finish the Attack Lab
- Programming Rust is also an excellent systems book

### 6.2 x86 Operating Systems

MIT teaches OS engineering using a rewrite of the sixth edition Unix(v6) similar to the classic Lions' Commentary but in ANSI-C called xv6. The idea is you read the source as you read booklet, to understand the system. There is also a schedule of lecture notes.

The latest xv6 source and text are available via:

- git clone git://github.com/mit-pdos/xv6-public.git
- git clone git://github.com/mit-pdos/xv6-book.git

### 6.3 RISC-V Architecture

MIT's 6.004 course covers RISC-V: The free and open RISC Instruction Set Architecture. Take this if you are interested in programming FPGAs or cheap embedded modules.

- (Full Course) 6.004 Computation Structures
- Recorded YouTube lectures here
- Book used is Computer Organization and Design: RISC-V Edition

### 6.4 RISC-V Operating Systems

### 6.5 Analyzing Systems

How to build and analyze complex systems like a server farm.

- (Book) Performance Modeling and Design of Computer Systems: Queing Theory in Action - Mor Harchol-Balter
- This book assumes you have read the first 3 chapters of Sheldon Ross'
*Introduction to Probability Models*- Google has a book on systems reliability and analysis of outages from a management point of view

- This book assumes you have read the first 3 chapters of Sheldon Ross'

## 7 Networks

How the computing, economic and sociological worlds are connected.

### 7.1 Computer Networks

This series of recorded lectures by Cornell professor Nate Foster on functional Network Programming, will cover the modern theory and practice and introduce you to an entire new world of thinking about networks by developing (or using) customized domain specific languages. No background outside of familarity with OCaml/SML-like syntax is needed though the 15-213 course contains a basic introduction to computer networks if you want.

## 8 Compilers

Search libgen.io or sci-hub for additional papers.

## 9 Database Systems

Interesting post on the future of database systems by Andy Pavlo.

### 9.1 Advanced Database Systems

CMU abandoned Peloton and now is building a new disk-oriented storage prototype for education called BusTub DB. At the end of the semester the grading scripts are publically available.

- (Full Course) 15-721 Advanced Database Systems
- Recorded lectures on YouTube
- Everything is in C++17 which you can teach yourself from the bounty of books/documentation available.
- Purpose of this course is to learn how to design and build your own dbms

## 10 Web Development

Here is an example of the notes I took for MIT's 6.148 Web Programming Competition and MIT's 6.170 Software Studio. I did most of these assignments on a phone using Eruda while at lunch everyday.

The MIT crash course and 6.170 are actually pretty good, giving you just enough to make something yourself, expecting you to fill in the rest of the details. Professional webdev requires years of experience, at least through this workshop you'll learn enough to put something up right now as a hobby and then backfill from other resources what you need to know to run a real production site. You'll also learn just how to manipulate your browser DOM so you can kill popups/overlays and other cancer.

## 11 Practical Data Science

- (Full Course) 15-388 Practical Data Science
- Recorded lectures are here and archived here
- Introduction to the 'full stack' of data science analysis: data collection and processing, data visualization and presentation, statistical model building using machine learning, and big data techniques for scaling these methods.
- Cornell also has a free text with interactive jupyter notebooks (in Python)
- Jupyter notebook is a literate programming paradigm tool, you can freely write using LaTeX or markdown and run the code cells in any order to not interrupt the flow of documentation.

## 12 Introduction to Computer Music

The idea for including this came from this post about creating something everyday.

- (Lecture Notes) 15-322 Introduction to Computer Music
- Mainly just slides but the books they recommend are extremely thorough if you want to learn manipulating sound with algorithms
- Nyquist is a Lisp
- Learn how Autechre made songs like Krib
- They even perform a 'laptop orchestra' every year (the animations on the screen in the background are from 15-104
- Princeton also has a laptop ensemble

## 13 Meta-Linguistic Abstraction

A classic introductory computer science book on thinking about the big picture of programs with abstraction: finding general patterns from specific problems and building programs based on these patterns. An applied example of this is the package manager GNU Guix and distro GuixSD, which is a GNU implementation of the NixOS functional software deployment model. Package builds, including entire system builds, are declared in one text file. The resulting software deployment is functional: build inputs go in such as compilers, customizations, environments ect, and a reproducible, immutable build comes out with a hashed identifier meaning you can do roll backs to previous successful builds. A recent GUixSD feature gexp (g-expressions) is a good example what can be achieved through syntactic extensions of the Scheme language. You are more likely to benefit from this book after having some programming experience, but no matter what level of programmer you are you'll still benefit from SICP.

- (Full Course) 6.037 Structure and Interpretation of Computer Programs
- Recorded lectures from the first edition of SICP here
- Read the excellent forward from SICP on what programming is
- There is a unit test framework for SICP
- SICP in TeXinfo so you can read it in emacs
- Optional read: The Art of the Propagator for further adventures in symbolic programming
- If you like Lisp, see Norvig's old AI book for a really great programming craft text

## 14 Natural Language Processing

## 15 Programming Language Theory

Read these reasons for studying programming languages. Much like the mathematical foundations lectures in the preliminaries of this guide carefully define mathematical objects and fields, this book carefully defines programming languages.

- (Book) Practical Foundations for Programming Languages - Robert Harper
- Recorded lectures to accompany the book Programming Languages Background - Robert Harper and Dan Licata
- More info on Judgements (logic) here and a series of recorded lectures here by Frank Pfenning on Basic Proof Theory but all this is self contained in the PFPL book
*The Little Typer*book also covers judgements, and dependent types

- Read these recitations and try the assignments here

## 16 Isolating Software Failure, Proving Safety and Testing

How to verify software, and strategies of programming that minimize catastrophe during failure. The Little Prover is a good introduction in determining facts about computer programs. Prof Rob Simmons can be hired as a tutor to teach you Coq, the curriculum follows the Software Foundations book series below.

- (Lecture Notes) 15-316 Software Foundations of Security and Privacy
- Covers side channel attacks, provable privacy, web security, sandboxing, assignments are extending an http network server (in C), and spotting bugs.
- Read about tests, strategies to safe program design (in OCaml), and proving safety from the 2017 version: git clone https://github.com/jeanqasaur/cmu-15316-spring17.git

- (Book) Verified Functional Algorithms
- Some recorded lectures by Andrew Appel here
- Part 3 of the Deep Specifications interactive book series by Andrew Appel, learn by doing
- Assumes you have read these chapters of Software Foundations Part I: Preface, Basics, Induction, Lists, Poly, Tactics, Logic, IndProp, Maps, (ProofObjects), (IndPrinciples)

### 16.1 Physical Systems Software Security

- (Full Course) 15-424 Foundations of Cyber-Physical Systems
- Course (with recorded lectures) if you're interested in programming drones/space shuttles/robots/cars and other things that cannot fail from avoidable errors.
- Self contained, will teach you differential eq but assumes you already have some calculus background.

## 17 Algorithms

### 17.1 Introduction to Parallel and Sequential Algorithms

Unlike a traditional introduction to algorithms and data structures, this puts an emphasis on thinking about how algorithms can do multiple things at once instead of one at a time and ways to design to exploit these properties. It uses a language based analysis model to estimate complexity for abstractions such as garbage collection.

- (Book) Parallel and Sequential Algorithms (LibGen has the most recent version)
- Complete, self-contained book with exercises used for 15-210
- Old exams, homework and labs w/solutions are here and done in Standard ML
- If you enjoyed this try 15-853
*Algorithms in the Real World*which advances 15-210 material- Notably this book on computational geometry, is surprisingly practical

### 17.2 Functional Data Structures

"A stroll through intermediate data structures and their associated algorithms, from the point of view of functional programming." Note how pattern matching makes implementing these seemingly complicated structures a much easier task.

- (Book) Functional Data Structures
- Exercises and examples done in OCaml, no formal background beyond a typical introductory CS course
- A more advanced book Purely Functional Data Structures by Chris Okasaki uses an imaginary version of SML w/Appendix in Haskell.

- Exercises and examples done in OCaml, no formal background beyond a typical introductory CS course

### 17.3 Advanced Data Structures

Taught by Erik Demaine's at MIT, mixes 2017 lectures with MIT OCW 2012 lectures.

- (Full Course) 6.851 Advanced Data Structures
- Prereqs are a standard undergrad algorithms course
- The section on cache-oblivious algorithms is a gem

### 17.4 Algorithm Design

The typical text for a senior undergrad or graduate course on algorithm core theory and analysis is *The Design and Analysis of Algorithms* by Kozen (1992). This is an excellent book to study with difficult problems well presented and clearly analyzed by Kozen.
If you want a book to practice design, *Algorithm Design* by Jon Kleinberg and Éva Tardos contains 200+ problems and how to design solutions for them.

- (Full Course) CS224 Advanced Algorithms
- Recorded lectures by Prof. Jelani Nelson walking through the design and analysis of online algorithms, linear programming, approximation algorithms, hashing, randomized algorithms.

## 18 Complexity Theory

### 18.1 Undergraduate Complexity Theory

Expands on the lectures in 15-251.

### 18.2 Graduate Complexity Theory

You may want to try solving some of the problems in this domain.

### 18.3 Useful Math for Theoretical CS

These scribed lecture notes give you a diverse background in math useful for theoretical CS, from the excellent book The Nature of Computation such as these slides from *A Theorist's ToolKit* which describe how to find research, how to write math in LaTeX, how to give a talk, resources on math.overflow etc.

Prof Ryan O'Donnell has now uploaded lectures.

## 19 Introduction to Quantum Computing

This is a graduate introduction to quantum computation/information theory, from the perspective of theoretical computer science. Topcoder has quantum algorithm bounty's.

- (Full Course) 15-859BB: Quantum Computation
- Recorded lectures on YouTube.
- The prereqs are an undergrad background in complexity theory (15-251 or 15-455), linear algebra, and discrete probability.
- "90% of the understanding of the quantum circuit model is achieved by reviewing three purely 'classical' topics: classical Boolean circuits; reversible classical circuits; and randomized computation"
- A series of curated papers on Quantum Computing

## 20 Performance Engineering of Software Systems

If you've taken 15-213 Computer Systems or 6.004 RISC-V Architecture, and understand graph algorithms you will understand this course (with a lot of extra work), as it covers performance analysis, instruction-level optimizations, caching optimizations, and other techniques for high performance, scalable systems. The course is done in C but the concepts apply to any language.

- (Lecture Notes) - 6.172 Performance Engineering of Software Systems
- Click on 'Export Materials ZIP' before they're gone
- There are older lectures for this course on MIT OCW/YouTube
- See the first slide 'Intro & Matrix Multiplication' for a good desc of this course

## 21 Topics in Mathematics for Finance

Notice there's a button for "Export Materials ZIP". 18.642 also has an older course on Open CourseWare with lecture videos. You may also find interesting this Quantitative trading summary and this old post on pricing & hedging models.

## 22 Jobs

This service matches your skills to people who want to pay you. Jane Street Capital is a finance tech company that hires functional programmers worldwide, you may want to apply there.
There are numerous opportunities to apprentice as a security researcher or get paid to prove business logic programs like 'smart contracts'. For web programming there exists free programming notes for software like NodeJS, which you can write software for in OCaml by compiling it into JS with bucklescript or js_{of}_{ocaml} or just use pure html.
There are also bounties for writing features available on topcoder, gitcoin or bountysource or consulting outfits such as toptal or clevertech, which tend to use codility tests for filtering candidates. Do your own research on the current state of these outfits, through glassdoor or other employee review sites.
A large collection of remote job listing and consulting platforms is here.

If you enjoy research look up research programming positions at a university near you. You get hired to a grant funded team of grad students and post-doc researchers. Sometimes they are just hiring for people to build a proper user interface for the doctors, or you could be doing data visualizations, or engineering experimental software. Depending on the work you are doing, they may even write you a letter of recommendation meaning you can use this to apply to a grad school.

## 23 Graduate Research in Type Theory

Read these slides from *A Theorist's ToolKit* on how to find research, how to write math in LaTeX, how to give a talk, where to ask on stackexchange etc.

### 23.1 Basic Proof Theory

- Start with the lectures on
*Basic Proof Theory*by Frank Pfenning- These 15-317 Constructive Logic notes go with the seminar, there is another set here
- Read Martin-Löf's lecture notes

### 23.2 Intro to Category Theory

- (Book) Category Theory - Steve Awodey
- The most accessible introduction see errata, and recorded lectures by Steve Awodey here(HQ mp4) or here(YouTube)
- There is also this seminar
*Basic Category Theory: Semantics of Proof Theory*by Ed Morehouse- Also see this post here explaining Category Theory and as types in SML

### 23.3 Type Theory Foundations

- Read Chapters 1-12, 23 and 24 from TAPL
- Watch seminar on
*Type Theory Foundations*by Robert Harper- Pair with Programming in Martin-Löf's Type Theory and the rest of the suggested reading

### 23.4 Higher Dimensional Type Theory

#### 23.4.1 Computational Higher Type Theory (CHiTT)

The idea here is that a sufficiently expressive programming language can be the foundation for all of constructive mathematics, because it satisfies Gödel's incompleteness theorems that demonstrate the inherent limitations of every formal axiomatic system. Here “constructive” means having computational meaning, rather than only enjoying axiomatic freedom. Types in this theory, from a computational perspective (ie: the semantics of a language, not it's syntax) are specifications of program behaviors which can be used to compare each other and determine 'equality' and other interesting properties. Judgements are not defined by axioms/rules, so obey the incompleteness theorems. You don't need any background in formal type theory.

If you're interested in the foundations of mathematics without set theory, or research into creating a new language with tie-ins to algebraic topology then this field is for you.

- (Seminar) Higher Dimensional Type Theory
- 5 recorded lectures from Robert Harper into the current state of the field
- Extensive lecture notes from 15-819 Higher Type Theory course
- An experimental proof assistant for this theory: RedPRL

#### 23.4.2 Homotopy Type Theory (HoTT)

Start with this talk *A Functional Programmer's Guide to Homotopy Type Theory* with intro to Cubical Type Theory, aka (Cartesian) Cubical Computational Higher Type Theory.
This is today regarded as a 'misadventure in formalism' by R.Harper, due to HoTT being insufficient for their computational needs, but everything you learn in this seminar will be necessary to understand
computational higher type theory papers like the magic of paths extending other programs.

### 23.5 Further Research

- Follow the research on Robert Harper's CMU page or see CMU's Principles of Programming Group for more graduate course offerings
- Watch the recorded lectures at the yearly Oregon Programming Languages Summer School, search through Google Scholar for higher type theory research.

## 24 Graduate Research in Machine Learning/AI

I created a seperate AI workshop to build up to completing the following courses.

### 24.1 Graduate Introduction to General AI

These notes here cover more topics, such as Computer Vision/NLP/AGI and follows *AI: A Modern Approach* book by Norvig. The 4th edition draft of pseudocode algorithms for the book is here.

- (Full Course) 15-780 Graduate Introduction to AI
- Recorded lectures here from prev term
- No formal pre-requisites except grad level standing so familiar with some undergrad calculus and linear algebra/probability
- MIT's Artificial General Intelligence free class explores possible research paths for creating AGI
- Sussman had a great 2017 grad course reviewing older paper with unsolved problems or deep ideas, like his own
*Art of the Propagator*paper and implementation - AI readings to explain intelligence from a computational point of view

### 24.2 Math Background for ML

A series of recorded lectures and recommended texts for a crash course in the Math background for grad level ML introductory courses

#### 24.2.1 Statistics Theory

### 24.3 Introduction to ML

- (Full Course) 10-601 Masters Introduction to ML
- Recorded lectures and recitations
- Self contained, assumes you are grad level standing so have familiarity with basic probability and algebra
- Doesn't cover as much theory as 10-701/715

#### 24.3.1 Practical Machine Learning

"This course will teach you basic skills to decide which learning algorithm to use for what problem, code up your own learning algorithm and evaluate and debug it." This course compliments 10-601. Only prereq you may have not already done is Multivariate Taylor Series. You can directly look that up here in the vector calculus chapter.

- (Full Course) CS4780 Machine Learning for Intelligent Systems
- YouTube lectures, additional reading recommendations and videos for each topic
- Kaggle has numerous tutorials and competitions available
- Change the year to 2019 if you want the most recent version, also search for 'CS6780' the advanced Cornell version, it's also open.

### 24.4 Advanced Introduction to ML

- (Full Course) 10-715 Advanced Introduction to ML

### 24.5 Convex Optimization

### 24.6 Deep Learning

If you're interested in parallel GPU programming for training see these lectures and notes.

- (Full Course) 11-785 Introduction to Deep Learning
- Recorded lectures here to learn to build and tune deep learning models
- If the playlist is deleted, which is frequently, (use youtube-dl to archive) search YouTube for "CMU 11-785"

- There are also applied courses and practical challenges/competitions on kaggle.com
- Some slides on techniques for making deep learning robust to adversarial manipulation

- Recorded lectures here to learn to build and tune deep learning models

### 24.7 Big Data

- (Full Course) CS229r Algorithms for Big Data
- A grad level course in designing/analyzing algorithms for massive data
- Some very thorough lecture notes and jupyter books on scalable machine learning systems.

- A grad level course in designing/analyzing algorithms for massive data

### 24.8 Further Research

- Kaggle competitions
- The Journal of Machine Learning Research and other AI journals you can access with Sci-Hub
- Open challenges in ML
- Algorithmia.com an open marketplace for AI algorithms
- A series of papers curated for AI you can read with sci-hub

## 25 Graduate Research Elective: Cryptography

Read these slides from *A Theorist's ToolKit* on how to find research, how to write math in LaTeX, how to give a talk, where to ask on stackexchange etc.

### 25.1 Graduate Cryptography Intro

This course covers post-quantum crypto, elliptic curve crypto, and is taught by premiere researcher Tanja Lange (TU/e)

- (Full Course) Masters Level Cryptology
- Recorded lectures here
- See djb's talks and papers from his personal site, and post-quantum crypto site
- Some MIT cryptanalysis lectures from Spring 2018 here

### 25.2 Applied Cryptography

- Draft book
*A Graduate Course in Applied Cryptography*- Dan Boneh and Victor Shoup - Lecture notes from 18-733 Applied Cryptography
- Read all Daniel J. Bernstein's (and Peter Gutmann's) posts on the IETF Crypto Forum Research Group [Cfrg] archive, it's a master class in modern cryptanalysis and he rips apart bad standards/protocol designs.
- Read
*The Art of Computer Programming - Seminumerical Algorithms*by Knuth (Vol 2) chapter on Random Numbers. These tests are still used in MIT grad courses. Try them on every library you can find that supposedly generates pseudorandom numbers - Read about the proof of the Wireguard protocol, a VPN that uses
`AEAD_CHACHA20_POLY1305`

### 25.3 Future Research

- Follow whatever the PhD students of djb and Tanja Lange are working on
- Watch the lectures from the 2017 Post-Quantum Crypto Summer School
- Read the journal of Crypto Engineering (use SciHub proxy)
- Read a book on Random Graphs there is a connection between Graph Theory and Cryptography
- Try the Cryptopals challenges
- Read some cryptocurrency papers, such as Stellar's Consensus algorithm (soon to be used by mobilecoin.com), Fairlayer or the protocol specification for Zcash.