# Teaching Computer Science Topics

**(!) Note:**
This blog post is rather old, and may not reflect my
present day writing style or thoroughness. Kept here for archival purposes.

There are a number of topics in the field of Computer Science that I believe aren’t taught well. What I would like to do is take complex topics like Type Theory, Compiler Design, Concurrency, etc, and make digestible articles that will give newcomers a surface level understanding and the resources to explore these fields more. There have been many times where I have wanted to research a new topic that some might consider niche, like Floyd-Hoare Logic, and the only resources I will find are blog posts that expect the reader to know way too much or to have studied it in school, or academic papers that use way too much jargon.

These articles will hopefully change that. I want to start out with the basics of Type Theory and
go up the ladder to Dependent Types, Proof Assistants, and other complex topics that the average
Software Engineer doesn’t *need* to know, but might enjoy learning if they want to continue growing
in Computer Science. I want these articles to be beneficial to *“wanderers”*, the people searching the web
trying to teach themselves these topics without formal study.

Without further ado, the first article will be an **Introduction to Type Theory** that explains what Type Theory
is, how it is applicable to programming languages, and why it is important.

Below is a roadmap of topics I would like to cover. I will update it with links to the final posts as they are completed. This list may change, and I might write things out of order!

- Type Theory
- Algebraic Data Types
- Hindley-Milner Type System
- Lambda Calculus and its Derivatives
- Parametric Polymorphism and Type Operators
- Row Polymorphism
- Inductive Types
- Dependent Types
- Calculus of Constructions
- Homotopy Type Theory
- Cubical Type Theory