Skip to content

DEV-000 Course Structure

Note: Some modules are not available yet. The names of available modules are shown as links, while unavailable modules are shown as plain text.

Module 0: The Developer's Mindset

This module covers the fundamental concepts that underlies all aspect of the developer's world, such as abstraction and hierarchy.

Topics include:

  • Abstraction
  • Hierarchy
  • Standards

Module 1: The Abstract Computer

Prerequisite Modules:

  • Module 0: The Developer's Mindset

This module explains how a computer is abstracted to developers. Topics include:

  • Instruction Set Architectures (ISAs).
  • Memory use cases, stack and heap.

Module 2: Programming Languages

Prerequisite Modules:

  • Module 0: The Developer's Mindset
  • Module 1: The Abstract Computer

This module gives a panoramic introduction to programming languages. This is not a tutorial to a specific language; instead, it explains how programming languages generally work, introduces the syntactical constructs found in almost all mainstream languages and compares the styles and design choices of multiple programming languages.

This module does not assume you have any experience with coding, but it is not a programming tutorial. Instead of learning to code by reading this module exclusive, you are expected to consult GPT on how to actually code in specific languages.

After learning this module, you should have a good understanding of how modern programming languages work and why they are designed in certain ways. With the help of GPT, you should be able to get started and code in any language.

Specific topics covered in this module are listed below.

Programming Fundamentals

  • variables & types
  • control flow statements
  • functions
  • classes
  • modules

Programming Language Taxonomy

  • Compiled Languages v.s. Interpreted Languages + virtual-machine-based
  • Static typing v.s. Dynamic typing
  • Garbage collection v.s. manual resource management
  • High-level v.s. low-level

Common Concepts in Programming Languages

  • Abstraction
  • Interfaces & ABCs & Polymorphism
  • Meta-programming
  • find-replace-based macros
  • generics
  • Ownership & lifetimes
  • Error Handling
  • try-catch
  • Result

Other "Abnormal" Languages

  • LISP

Module 3: Coding Properly

Prerequisite Modules:

  • Module 2: Programming Languages

This module explains the "good practices" and paradigms in programming, and more importantly, the logic behind them.

After learning this module, you should get a good idea of how to design and code up large projects with hundreds of thousands of lines of code.

Common Coding Practices

  • Code Styling
  • CODE_OF_CONDUCT
  • Identifiers Naming Conventions
  • Comments & docstrings
  • Testing (just mention some concepts)

Programming Principles

  • Syntax & Semantics: What it can be v.s. What it should be (and usually be)
  • Don't repeat yourself
  • The rule of elegance
  • Hierarchy
  • Coupling & Cohesion
  • Depend on interfaces, not implementations
  • Write comments
  • When the program is short, forget about all principles

Programming Paradigms

  • Object Oriented Programming
  • Functional Programming

Designing Software Systems

  • Modules & APIs & Interfaces
  • Coupling & Cohesion
  • Other Considerations
  • Abstract your dependencies

Module 4: Terminal & Superuser Basics

Prerequisite Modules:

  • Module 2: Programming Languages (recommended)

This module introduces terminal, operating system basics and other "superuser stuff".

This module should take you from a "regular user" who interacts with a computer by dragging-dropping and pushing buttons to a "superuser" who feels comfortable using terminals and doing multi-booting.

Specific topics are listed below.

Terminal & Shell Scripting

  • What is a terminal? What is a shell? What is a shell script?
  • Taxonomy of shell scripting languages: text-based (bash) v.s. data-oriented (powershell & nushell)
  • Key differences between scripting languages and programming languages
  • Shell scripting basics
  • Basic commands
    • cd, pwd, pushd, popd, find, ...
  • variables & control flows, etc.
  • commands
  • pipes & redirection
  • environment variables
  • Miscellaneous
    • &&, ;, $!, ...
  • Terminal Tricks & Common Practices
  • Auto-completion, history, etc.
  • Shell config files
  • Prompt-customization & theming
  • Shell plugins
  • Common Tools & Commands
    • grep, cut, awk, tmux, ssh, etc.

Package Management

  • Software dependencies
  • Software packages
  • Package managers

Miscellaneous

  • Config files
  • vim & emacs
  • Virtualization & docker
  • Booting
  • Hard drive partitions & (g)parted
  • Bootloaders & GRUB
  • BIOS & UEFI
  • Dual (Multi) Booting
  • Linux potpourri
  • kernel modules

Module 5: Software Development

Prerequisite Modules:

  • Module 2: Programming Languages
  • Module 3: Coding Properly

This module explains the common concepts and tools involved with software development.

After learning this module, you should feel comfortable starting a large project, coding it up with a team, and publishing it to the public.

Specific topics are listed below.

Common Concepts in Software Systems

  • Versioning & Dependencies
  • Semantic Versioning
  • Interfaces & APIs & Libraries
  • Remote Procedure Call (RPC)
  • Serialization & Deserialization
  • Inter-process communication (IPC)
  • Frameworks
  • What is a framework? Why framework?
  • Framework v.s. Library
  • Examples: Flutter (UI), PyTorch (deep learning) & Unity (game development)
  • Specification & Standards (Use examples to illustrate the concept)
  • Why standards?
  • Examples
    • CPU Instruction Set Architectures (ISAs)
    • GPU specifications (OpenGL & Vulkan)
    • Data Representation Standards (JSON, TOML, YAML, XML, HTML)

Testing

  • Unit testing

Documentation

  • Docstrings
  • API Docs
  • Tutorials
  • Doctests
  • Common documentation frameworks & languages
  • Sphinx & mkdocs (just mention)
  • Markdown & RST

Building & Deployment (tentative)

  • Build systems

Version Control

  • Version control & git

Standardization & Collaboration

  • The need for standardization across contributors
  • CODE_OF_CONDUCT

CI/CD

Miscellaneous

  • PRs & Issues
  • README, CONTRIBUTE, LICENSE
  • TODOs & FIXMEs

Module 6: Concurrent Programming

Prerequisite Modules:

  • Module 2: Programming Languages
  • Module 3: Coding Properly (recommended)

This is a relatively stand-alone module that explains the concepts involved with concurrent programming.

Topics are listed below.

Introduction to Concurrency

Concurrency Model

  • Concurrency v.s. parallelism

Problems with Concurrency

  • Data races

Low-level concurrent programming

Synchronization primitives

  • Locks (Mutexes)
  • Semaphores
  • Read-Write Locks

Concurrent Programming Paradigms

Channels

Producer & Consumer

Asynchronous Programming

  • Futures & poll
  • async & await

Module 7: Computer Architecture Fundamentals

Prerequisite Modules:

  • Module 1: The Abstract Computer
  • Module 2: Programming Languages (strongly recommended)

This module introduces the very basics of how computers work in hardware.

After learning this module, you should have a deeper understanding of computers and be able to code programs that utilize the hardware in an optimized way.

Topics are listed below.

CPUs

  • Pipelines
  • Memory Hierarchy
  • Branch Prediction & Speculative Execution
  • Out of order processing
  • Vector instructions & SIMD

GPUs & Accelerators

Module 8: Miscellaneous Topics in the Developer's World

Prerequisite Modules:

  • Module 2: Programming Languages (strongly recommended)
  • Module 3: Coding Properly (recommended)

This section discusses the various fields and common tools in the developer's world.

Topics are listed below.

UI & App Development

  • Declarative UI v.s. Imperative U

Game Development

  • Entity Component System (ECS)

GPU Programming

  • High-level: OpenGL
  • Low-level: Vulkan

Miscellaneous

  • Stackoverflow
  • GitHub
  • IDEs
  • LSPs
  • Hugging Face

Module 9: AI Aided Development & AI Software Development

Prerequisite Modules:

  • Module 2: Programming Languages
  • Module 3: Coding Properly (Recommended)

This module discusses how to use AI to develop better, and how to develop applications that take advantage of AI.

Topics are listed below.

Artificial Intelligence Basics

  • Deep learning fundamentals
  • Abstracting deep neural networks & AI services for developers

AI Aided Development

  • Code-completion
  • AI Code Generation (logic code, unit tests, documentation, etc.)
  • Auto internationalization
  • AI as an augmented Google

AI Software Development

A Change of Mindset: How is this different from "traditional software development"?

  • Determinism -> Non-deterministic behavior
  • Structured Data -> Natural Language
  • AI involved control flows
  • Short latency -> long-running operations
  • Error Handling & How to ensure robustness when there is AI

Paradigms & Common Practices at Present

  • AI Agents
  • Retrieval Augmented Generation (RAG) & Vector Databases
  • Prompt Engineering & Prompt templates