The Stack: Python, Sql, Docker, Git
DIVE INTO PYTHON, SQL, GIT AND DOCKER/KUBERNETES
Here we go… (and now the intro to the stuff you're gonna learn starting out).
PYTHON — WHAT IS IT?
Python is like the golden retriever of programming languages: friendly, easy to understand, and gets along well with everyone.
Python is a high-level, interpreted programming language. It was created by Guido van Rossum and first released in 1991. One of Python's main goals is readability — it often reads like English, which makes it a great language for beginners. (And since it's close to English, us God-loving-American-Patriots will like it, because we can't accuse it of not loving America for not speaking English.) But don't trip, Python is used by beginners and experts. It's easy to learn, but an expert with years of experience can make it do tricks. (There's that golden retriever reference again.)
This leads me to a very big point:
Python is simply giving instructions. That's it.
Using Python, or any programming language for that matter, is a bit like teaching a robot how to do a task. The robot only understands very specific commands, and it can't infer what you mean. You need to tell it exactly what to do. This is what your Python code is — a list of instructions for the computer to follow.
CODING LANGUAGES: HIGH VS LOW (PART 1)
You aren't going to need to focus much on this, but it's something you should at least understand.
High-level languages like Python are designed to be easily understood by humans. They abstract away the complexities of the computer's hardware, which means you don't need to worry about things like memory management or CPU registers when you're writing Python. This comes at a cost of some control and efficiency, but it makes the language much easier to write and understand.
Low-level languages, on the other hand, are closer to the machine code that the computer's hardware understands. This means they give you more control and can be more efficient, but they're also more complex and harder to write. Assembly and C are examples of low-level languages. Their syntax is next-level impossible, so don't try to tackle them first. Fuck Assembly, but props to that dude who made Rollercoaster Tycoon with it.
So, in short, Python is like a user-friendly interface to your computer's hardware. You give it commands in a language that's easy to understand, and it translates those commands into a form that the computer can execute. It's a bit like having a translator between you and the computer. And just like a translator, Python works best when you give it clear, unambiguous instructions.
99% of your peers are going to be using some high level languages. Very few programmers use low-level languages. It's just something you should know about.
These next two slides are totally optional. When I was doing my editing, I realized this was kinda… extra. This is me over-explaining. With that said, it's good to know the concepts of "what shit does" so you can understand "why shit happens."
CODING LANGUAGE: HIGH VS LOW (PART 2)
Python is often referred to as an interpreted language, which is a bit of a simplification. In fact, it's both compiled and interpreted. That's right, Python has more plot twists than an M. Night Shyamalan movie.
How often are you going to think about this? Almost fucking never. Once again, you just need to understand this, conceptually. When you write Python, other things are happening.
Here's how it works under the hood:
When you run a Python script, the Python "compiler" first converts your wonderful source code, written in plain English, into something called "bytecode". Bytecode is a low-level platform-independent representation of your source code, and it's typically stored in .pyc files.
This compilation step is performed by Python's "interpreter", which is really more of a hybrid between a compiler and an interpreter. It's called CPython, and it's the standard and the most widely-used Python runtime.
Now, onto the interpreting part. The bytecode produced by the compilation phase is then passed to the Python Virtual Machine (PVM). Here, the bytecode gets interpreted, with the PVM executing the instructions one by one.
Python straddles the line between compilation and interpretation. It's… neither. It gets compiled to an intermediate form (bytecode), and this bytecode gets interpreted by the PVM. This blend of compiling and interpreting gives Python a balance of performance and flexibility.
It's important to note that the bytecode compilation doesn't mean Python is as fast as languages like C or Java, which are compiled to machine code. Bytecode is still an intermediate step and needs to be interpreted, so it doesn't offer the same performance benefits as machine code. But, whatever — Python's ease of use and readability more than make up for it, right? You may hear some people call Python "slow" and this is why.
SQL — WHAT IS IT?
The Pabst Blue Ribbon of the data world. It's a bit like the grandparent of programming languages. It's been around forever (since the 70s, which is basically the same thing), and it makes loud, politically incorrect declarations at Thanksgiving. Remember, SQL is declarative.
SQL, or Structured Query Language (pronounced either "sequel" or "S-Q-L", depending on how much you want to annoy your colleagues), is the go-to language for anything related to databases. Need to store data? Fetch it? Update it? Delete it? SQL's got your back.
SQL is build around CRUD — Create, Read, Update, Delete — the four basic functions of persistent storage. It's exactly what it sounds like. You can make something new, see what's there, update what is already there, or delete something.
Unlike other programming languages, SQL doesn't beat around the bush. It's declarative, which means you tell it what you want, and SQL figures out how to do it. It's like having a butler for your data. "SQL, fetch me the sales data for the last quarter, will you?"
SQL is also infamous for its syntax, full of nested queries and JOINs, which can turn into a complete nightmare if left unchecked. It's like a Christopher Nolan movie — if you don't keep up with all the twists, you're going to lose your mind. You'll understand what I mean when you get to a SQL query with multiple subqueries and joins.
One other thing: It's going to be your first understanding of cybersecurity risks, via the "SQL Injection," the annoyance of the cybersecurity world. Not sanitizing your inputs in SQL could lead to Bobby Tables (https://bobby-tables.com/) dropping your database. (If you don't know who Bobby Tables is, I suggest a quick webcomic tour of "xkcd".)
Despite all its quirks, SQL is a vital part of the data world. Love it or hate it, if you're dealing with databases, there's no escaping SQL. It's like a dog that sheds a lot — it gets everywhere, leaves traces all over your clothes (or in this case, your job), and even though it occasionally drags its dirty ass all over the carpet or eats something in the trash and vomits on the floor, you can't imagine your life without it.
DOCKER + KUBERNETES — WHAT IS IT?
Alright, let's dive into the digital equivalent of building Lego sets and herding cats: Docker and Kubernetes.
First up, Docker. Docker is like a magical shipping container for your software. You know how you sometimes say, "But it worked on my machine?" With Docker, your machine is inside that container, all the way down to the operating system. All your code, libraries, dependencies, everything's in there. It's a self-contained little world where your application lives, blissfully unaware of the chaos outside.
It doesn't matter where you run the Docker container — on your laptop, on a server, on the cloud, in Narnia — it'll behave the same way. Docker is like that chill friend who's always ready to party.
Now, onto Kubernetes, or K8s if you're into the whole brevity thing. If Docker is a shipping container, Kubernetes is the sprawling, mega-port that manages those containers. (Unlike Season 2 of The Wire, this port isn't a corrupt wasteland that seems detached from Seasons 1 and 3-5 of The Wire.)
Kubernetes is all about orchestrating and managing your containers. It can automatically scale your applications up or down, distribute load between containers, heal your apps if they crash, and generally just keep everything moving along.
BUT… Kubernetes is as complex as its name is hard to spell and pronounce. (KOO-ber-NET-EEZ) It's not exactly uhm… user-friendly, and it's made for parts smashing into each other; kinda like an Incognito window. Getting a Kubernetes cluster up and running is no small feat. And when things go wrong, it's a bit like sailing in a ship in a storm. With no navigation. Blindfolded. While the captain of the ship is doing enough cocaine to kill a small horse.
But once you've got everything set up and working, Kubernetes is an incredibly powerful tool. It takes all those Docker containers and makes sure they're doing what they're supposed to, when they're supposed to, and where they're supposed to.
So there you have it, Docker and Kubernetes. One's the shipping container of the software world, the other's the harbor master. They're a bit tricky to get the hang of, but once you do, they'll make managing your applications a whole lot easier... probably. But it's going to be extremely annoying and you'll hate it.
GIT AND GITHUB — WHAT IS IT?
Ah, Git, the lifesaver of programmers and the bane of their existence, all rolled into one.
Git is like the ultimate time machine for your code. Screwed up something so badly that your code now resembles a car wreck more than a piece of software? No problem. Just hop in your Git-powered DeLorean and go back to a time when everything was better and no one could hurt you with their mean words.
Designed by Linus Torvalds — you know, the same guy who thought it would be fun to build his own operating system (a.k.a. Linux) — Git is a distributed version control system. It's like a super-charged undo button and a time capsule for your code.
Using Git, you can save versions of your project (called commits), and switch between them as easily as changing TV channels. It's like having your own personal TARDIS, but instead of traveling through space and time, you're navigating the complex landscape of your codebase.
And the fun doesn't stop there. Git also lets you alternative realities (known as branches) where you can experiment all you want, without screwing up your main code (the master branch). Done with your experiment? Think it looks cool? You can merge it back into your main universe. Not so happy with the result? Just delete the branch. It's like that movie Glitter that Mariah Carey made. No one saw it and we pretend it never existed. It totally did exist, but Git can make it go away. (Unlike Glitter, which has not survived me bringing up how painfully bad Mariah Carey is at acting.)
But Git isn't just a playground for Mariah Carey movie fans. It also shines when it comes to collaboration. It allows multiple people to work on the same project without stepping on each other's toes. It's like a massive multiplayer online game, but instead of slaying dragons, you're squashing bugs and adding features.
Now, let's not forget the command line. Oh, the Git command line... it's like a
cryptic puzzle game that gives you the power to control time and space, if only
you can figure out the right incantations. git commit -m, git push origin master, git rebase -i HEAD~3... if that sounds like gibberish, welcome to
Git Club. The only rule of Git Club is that we don't talk about Git Club.
So that's Git — the time-traveling, universe-creating, Mariah Carey hating, collaboration-enabling superhero of the coding world.
Something wrong on this page? →
Curriculum last updated 2026-04-30