• The Investor's Free Lunch
  • Stanford
  • Dave Ramsey
  • Key Ideas
  • Quotes
  • More
    • The Investor's Free Lunch
    • Stanford
    • Dave Ramsey
    • Key Ideas
    • Quotes
  • The Investor's Free Lunch
  • Stanford
  • Dave Ramsey
  • Key Ideas
  • Quotes

What I Learned at Stanford

Stanford's computer science program is widely considered best-in-class, due to extremely polished courses that have been refined over the years by an all-star cast of instructors.


Over the past year I took a five-course sequence of core computer science systems courses at Stanford with the aim of improving my programming skills. Each of the courses was a hard pre-requisite for the next course in the sequence, culminating in an iOS app development course as a way to incorporate all of the concepts into one application.


The lion's share of the learning in these courses comes from completing the assignments that accompany the lectures and labs. The assignments shine as they reinforce and expand on the course learning objectives in the context of real-world coding problems. To celebrate the journey, I've ranked my 10 favorite assignments along with snapshots of the corresponding program output. Roughly 2,000 programming-hours and 30,000 lines of code later, here are the fruits of my labors.

10. Bajillion

  • Build a search engine that indexes a directory of text files


Course:  CS106A - Programming Methodology

Development Environment / Programming Language:  PyCharm / Python

Topics Covered:  file reading, string parsing, search, indexing

Bajillion search engine

9. Sand

  • Create a two-dimensional simulation of sand falling due to gravity and brownian motion


Course:  CS106A - Programming Methodology

Development Environment / Programming Language:  PyCharm / Python

Topics Covered:  nested lists, graphics, simulation

Two-dimensional simulation of sand falling

8. Huffman Coding

  • Write a program to optimally compress and decompress files 


Course:  CS106B - Programming Abstractions

Development Environment / Programming Language:  Qt Creator / C++

Topics Covered: variable length encoding, file compression/decompression, binary trees

Using Huffman coding to compress a text file

7. Tetris

  • Create an Android app of the game Tetris and implement an AI to play the game automatically


Course:  CS108 - Object-Oriented Systems Design

Development Environment / Programming Language:  Android Studio / Java

Topics Covered: implementing classes, constructors, static variables and methods, inheritance, access modifiers, artificial intelligence

Tetris Android app

6. Banking on Security

  • Reverse engineer a secure vault program provided the executable only


Course:  CS107 - Computer Organization and Systems

Development Environment / Programming Language:  Emacs / C and x86

Topics Covered: reading and tracing assembly code, translating between C and x86 assembly language, using the debugger

objdump assembly output for main function of the SecureVault executable

5. Sudoku

  • Create a program to solve Sudoku puzzles


Course:  CS108 - Object-Oriented Systems Design

Development Environment / Programming Language:  Eclipse / Java

Topics Covered: object-oriented programming, nested classes, inner classes, anonymous classes, polymorphism, recursive backtracking

Sudoku puzzle and corresponding solution

4. Threads

  • Use multithreading to efficiently crack passwords via brute-force attack


Course:  CS108 - Object-Oriented Systems Design

Development Environment / Programming Language:  Eclipse / Java

Topics Covered: multi-threading, synchronized methods, blocking queues, countdown latches, cryptographic hash functions, passwords

Cracking a password from its hash value with password length of 5 or less using 8 threads

3. Maze-Solver

  • Solve a maze using breadth-first search


Course:  CS106B - Programming Abstractions

Development Environment / Programming Language:  Qt Creator / C++

Topics Covered: classic data structures, breadth-first search algorithm, Big-O

Solve a maze using breadth-first search

2. Images

  • Use multiple images to create a new image with "clutter" removed


Course:  CS106A - Programming Methodology

Development Environment / Programming Language:  PyCharm / Python

Topics Covered:  parameters, lists, images, pixels, color distance, ethics in computing

Creating a new image with "clutter" removed

1. Thematic Memorize

  • Develop an iOS app of a customizable emoji-themed card matching game


Course:  CS193P - iOS Application Development

Development Environment / Programming Language:  Xcode / Swift

Topics Covered: MVVM, functional programming, reactive UI, animation, persistence

Memorize iOS app

Copyright © 2025 Jimmy Leopold - All Rights Reserved