Notes

Introductory Computer Science and Software Engineering Topics

August 3, 2025

A list of practical topics to learn as an introduction to computer science and beginner software engineering:

  • Algorithms and Data Structures (textbook) - the basics of computer science; emphasis on the data structures such as arrays, maps, and graphs
  • Programming languages to learn well:
    • Python (or some scripting language)
    • Typescript (for a well-implemented but accessible strongly-typed language)
    • Go (for a simple language with good support for parallelization)
    • SQL (widely applicable for talking to databases)
  • Programming languages to learn:
    • C (the fount of current languages)
    • Java (the most common language for backend engineering)
    • Javascript (the Lingua Franca for frontend engineering)
    • HTML (because you’re sooner or later going to need to build a website)
    • Bash (so you can improve your tools)
  • How to learn a language: write small programs for it in Leetcode, Rosalind, Advent of Code, or similar to learn the syntax. Write small projects in it to learn the language ecosystem.
  • Topics to go deeper on:
    • Unix/Linux basics - Environment variables, everything is file
    • 12-factor app - Some rules for designing backend systems
    • HTTP/JSON - How to send messages between systems like they’re websites
    • gRPC/Proto - How to send messages between systems (grown up)
    • Designing Data-Intensive Applications - A dive into architecture around storage, indexing, and processing of data
    • Code architecture - Learn how to break software down into modules with abstractions
  • Tooling:
    • IDE and/or Text editor (try Neovim) - Know and/or configure the capabilities of your text editor or terminal environment
    • Terminal - Learn CLI commands as you need them but be familiar with things like piping data from one command to another
    • Git - Version control everything. Be familiar with rebase.
    • (Optional) Set up and configure your dotfiles - Once you start version controlling your configuration, you’ll more actively customize your working environment
  • Projects (because building things is more fun than reading)
    • Build a static website
    • Build a web scraper
    • Build a CLI
    • Build a program that reads/writes data to a database
    • Build a program that reads, processes, and writes data to a file