# Dr. CS codes

This site houses the materials for computer science ("CS") courses created and taught by me, Christopher Simpkins ("Dr. CS"), reorganized and enhanced for web or workshop delivery. Most of these courses originated as Georgia Tech courses that I taught to thousands of students or prepared to teach, some of these originated as customized workshops for programs in data analytics, quantitative computational finance, and introductory computing. Some of these courses I created to help crystallize things I've learned in professional practice.

I am currently the Senior AI Architect at Semtech/Sierra Wireless building AI/machine learning features for the AirVantage IoT cloud platform. Previously I led a small team developing globe-scale distributed services at IBM/The Weather Company. I have broad experience and interest in many aspects of computer science and software development.

Courses list their prerequisites, if any, so if you're interested in one of the more advanced courses you can trace the prerequisite chain backwards to create a course of study.

## Computer Science Fundamentals

##### Programming Principles

An introduction to programming principles and computation. Suitable for someone who knows the basics of computing. Together, Computing for Professionals and this course cover the material found in a typical university CS 1 course.

Prerequisites: None

Python##### Discrete Math

A short course in the essential mathematics of computer science: logic, proofs, sets, functions, combinatorics and number theory. This course provides a minimal preparation for a university-level course in algorithms and data structures, covering about two thirds of the content of a typical university discrete math course.

Prerequisites: High school algebra and geometry, Programming Principles

View Course##### Algorithms

An introduction to algorithms and data structures. Algorithm correctness, complexity analysis, sorting, searching, stacks, queues, linked lists, trees, hashing, graphs. Divide-and-conquer, greedy, dynamic programming algorithm design paradigms.

Prerequisites: Programming Principles, Discrete Math

View Course## Data Analytics and Machine Learning

##### Professional Python

A fast-paced course in Python for people who already know how to program, whether in Python or another language. Covers all the basic features of Python needed to use Python in a professional setting. Well-suited for workshops or "boot camps."

Prerequisite: Programming Principles (CS 1)

##### Data Science

Acquiring, representing, transforming, storing, presenting and reasoning about data. An introduction to the theoretical foundations of data science and a practical treatment of the tools of data analytics.

Prerequisites: Professional Python

##### Machine Learning

An introduction to machine learning covering the material typically taught in a university senior undergraduate or graduate introduction to machine learning. This course covers a broad range of fundamental machine learning theory with an emphasis on conceptual understanding, with brief introductions to practical machine learning.

Prerequisites: Data Manipulation, Calculus 3, Probability and Statistics, Linear Algebra.

Suggested: Algorithms and Data Structures

## Languages for Large Software Systems

##### Java OOP

An introduction to Java and object-oriented programming for someone with a preparation equivalent to a university CS1 course. Based on a course Dr. CS taught to thousands of CS majors at Georgia Tech for six years.

Prerequisites: Programming Principles

##### Modern C++

Modern C++ using the latest standard supported by GCC/Clang. Covers much of the same material as OOP in Java.

Prerequisites: Programming Principles

## Modern Software Development

##### Databases

Fundamental database concepts, conceptual entity-relationship modeling, relational database theory, database design through Boyce-Codd Normal Form, Structured Query Language (SQL), database application development, storage and indexing schemes, and an introduction to other important database paradigms such as document-oriented, key-value and distributed databases.

Prerequisites: Programming Principles, Discrete Math

##### Software Engineering

Software engineering principles, development methodologies. Design principles, tools and techniques.

Prerequisites: Programming Principles, One Language for Large Software Systems

##### Cloud-Native Distributed Systems

A practical course in the principles and techniques of distributed system development, with enough theory to ensure proper understanding: communication, coordination, scalability, resiliency. Modern cloud-native technology: Docker, Kubernetes, Helm, Terraform, Prometheus, Grafana.

Prerequisites: Go, Software Engineering, Databases