INFO 153B/253B: Backend Web Architecture
Kay Ashaolu - Instructor
Aishwarya Sriram - TA
Fridays: Lecture 9 am - 11 am (in person)
Mondays: Lab 9 am - 10 am (in person)
Short multiple choice quiz during lecture
Two major homework assignments building a backend web application
4 Labs (253B), 8 Labs (153B)
Group project (253B), Take home exam (153B)
INFO 253A | INFO 153A |
---|---|
Quizzes: 10% | Quizzes: 10% |
Labs: 20% | Labs: 40% |
Assignment: 30% | Assignment: 30% |
Group Project 40% | Take Home Exam: 20% |
Languages / Frameworks
Tools
Me
You
Apologies, but there will be no auditing this class this year
Course materials will be publicly available on the course website. Just note that some content may be behind a paywall that would be provided to enrolled students
We just don't really know.
We didn't know how the internet was going to take off in the 90s
We didn't know how web 2.0 was going to completely shift how we interacted with computers in the 2000s
We're at another inflection point now
What doesn't change too often is...
The fundamentals. The core ways that systems work. Ideas and thoughts that have persisted and stayed the test of time.
Examples? Guess what hasn't changed...
The data structures and algorithms we use
We can be pretty sure that no matter what happens:
- We'll be using hash tables/dictionaries
- We'll be using arrays
- We'll be using objects and functions
- We'll need to sort and order things efficiently
- We'll need to use some advanced math to achieve amazing things (like how the weights in flat file LLMs are calculated)
and so on
If you learn the true fundamentals of how to actually build things, AI becomes a tool for that purpose, and not a mystical force that build things for you
The question though is, are there really fundamentals for back end system design?
I will argue in this class that they are, it's just the information is either in people's heads, or scattered in a bunch of books
This class will be split into two parts to facilitate learning the fundamentals:
Part I: Learning by building - everyone is going to learn how to build backend systems using Python/Docker/SQLAlchemy etc...
There's power in rolling up your sleeves and you yourself building a simple backend system that you could probably ask ChatGPT to build for you now
When you build something on your own, you gain understanding that you can't get from having something build it for you.
You gain that "intuition" that comes only from doing the work yourself.
Part II: Learning through theory - As our 253B students work on their projects, and 153B students do a series of labs, the entire class is going to learn about what I call System Design Theory
This concept is an attempt to introduce a way of approaching back end systems in a technology agnostic way that utilizes seven fundamental building blocks that are used to build a variety of applications
Type | Building Block | Icon |
---|---|---|
Task | Worker | |
Task | Service | |
Storage | Key-Value Store | |
Storage | File Store | |
Storage | Queue | |
Storage | Relational Database | |
Storage | Vector Database |
Part II purpose is to show you how you've used at least five-six of those seven building blocks in what you have built yourself
And show you how those same building blocks you used can be used to build so many other applications
We will go through 15 case studies explain how these seven building blocks can be used to build these systems
This is not to say that this "System Design Theory" is made to build the "most efficient" system design ever
These system designs are not the most efficient.
The goal is to inspire your intuition for systems.
If you build your intuition, your mind will be able to make connections and utilize new tools (like AI) better for your purposes.
Isn't this how LLMs work in the first place?
I truly believe that growing intuition is the key to not just staying up to date with the latest, but being able to utilize the latest to your advantage
Having an open mind helps as well
This class aims to help you do both