Database Tutorial #19: ORMs vs Raw SQL — Prisma, SQLAlchemy, GORM

An ORM (Object-Relational Mapper) lets you work with your database using your programming language instead of SQL. It reduces boilerplate and prevents SQL injection. But ORMs also add abstraction — and abstraction can hide performance problems. When to Use an ORM vs Raw SQL Use an ORM when: You do standard CRUD (create, read, update, delete) You want type safety and IDE autocomplete You want schema migrations integrated with your code You are building fast and the query complexity is low Use raw SQL when: ...

August 9, 2026 · 5 min

Build Docker from Scratch in Go — Part 3: Cgroups, Networking, and a CLI

In Part 1, you isolated processes with Linux namespaces. In Part 2, you added filesystem isolation with pivot_root and OverlayFS. Now it is time to finish the container runtime. In this final part, you will: Add cgroups to limit memory and CPU Set up virtual ethernet pairs for container networking Build a CLI with Cobra Run the final container and compare it with Docker Cgroups: Resource Limits Namespaces control what a process can see. Cgroups control what a process can use. Without cgroups, a container could use all the memory on the host and crash everything. ...

July 25, 2026 · 14 min

Build Docker from Scratch in Go — Part 2: Filesystem Isolation with chroot and OverlayFS

In Part 1, you built a process with isolated namespaces. It has its own hostname, its own process tree, and its own network stack. But it still shares the host’s filesystem. That is dangerous. The containerized process can read /etc/shadow, write to /usr/bin, or delete anything on the host. We need to give the container its own filesystem. In this part, you will: Understand chroot and pivot_root Download and set up a minimal root filesystem Implement pivot_root in Go Add OverlayFS for layered filesystems (just like Docker images) Mount /proc inside the isolated filesystem Preparing a Root Filesystem A container needs a root filesystem — a directory that contains everything a Linux system needs: /bin, /lib, /etc, /proc, and so on. ...

July 25, 2026 · 11 min

Build Docker from Scratch in Go — Part 1: Linux Namespaces and Process Isolation

Containers are not virtual machines. They are just Linux processes with extra isolation. In this series, you will build a mini Docker from scratch in Go. No frameworks. No libraries. Just Go and Linux system calls. By the end of this three-part series, you will have a working container runtime that can: Isolate processes with Linux namespaces Create a separate filesystem with OverlayFS Limit resources with cgroups Set up networking with virtual ethernet pairs Run commands through a CLI In this first part, you will learn what containers really are and how to isolate processes using Linux namespaces. ...

July 24, 2026 · 11 min

Backend Developer Roadmap 2026 — Complete Guide

Backend development is the engine behind every app and website. In 2026, the backend landscape is more exciting than ever. New frameworks, better tooling, and AI assistants make it faster to build production-ready APIs. This roadmap covers everything you need to become a backend developer. It includes language choices, databases, deployment, and a realistic timeline. Follow the stages in order for the best results. Why Backend Development in 2026? Every mobile app, website, and service needs a backend. The demand is constant and growing. Here is what makes 2026 special: ...

July 22, 2026 · 10 min

Rust vs Go 2026 — Performance vs Simplicity

Rust and Go are two of the fastest-growing programming languages. Both were designed to solve real problems with existing languages. But they made very different tradeoffs. Go chose simplicity. Fast compilation, easy concurrency, minimal syntax. Ship code quickly. Rust chose safety and performance. Zero-cost abstractions, memory safety without garbage collection, fearless concurrency. Ship correct code. This guide compares them in depth so you can choose the right tool for your project. ...

July 15, 2026 · 9 min

Build a URL Shortener with Claude — Go + Redis + Docker

After a full-stack blog, a weather dashboard, a desktop app, and a mobile app, we close Part 2 with something different: a backend microservice in Go. Go is interesting for vibe coding because the language is simple and opinionated. There is usually one way to do things. Claude should have an easier time generating idiomatic Go than, say, idiomatic Rust. Let us find out. Total time: 2 hours 14 minutes. 6 prompts. Go’s simplicity made this the fastest Part 2 project. ...

July 1, 2026 · 23 min