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.
Course: CS106A - Programming Methodology
Development Environment / Programming Language: PyCharm / Python
Topics Covered: file reading, string parsing, search, indexing
Bajillion search engine
Course: CS106A - Programming Methodology
Development Environment / Programming Language: PyCharm / Python
Topics Covered: nested lists, graphics, simulation
Two-dimensional simulation of sand falling
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
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
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
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
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
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
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
Course: CS193P - iOS Application Development
Development Environment / Programming Language: Xcode / Swift
Topics Covered: MVVM, functional programming, reactive UI, animation, persistence
Memorize iOS app
Copyright © 2024 Jimmy Leopold - All Rights Reserved