About the course

Why the data structures & algorithms are taught in Go

You already understand a hash map. The gap that costs you the interview is the one between understanding it and writing a correct one, fast, while someone watches. Go closes that gap better than Python does. Here's why.

Python is a wonderful language and a leaky teacher

Python earns its popularity by doing the work for you — which is exactly what you don't want while you're learning the work.

  • The library is the algorithm. bisect, heapq, collections.deque, functools.lru_cache. You import the answer. You can pass a screen without ever having written a binary search or sifted a heap.
  • One type wears four hats. A Python list is a dynamic array, a stack, a queue (a slow one), and a deque. Nothing on the page tells you which operation costs what.
  • The machine is hidden. Slices copy silently. Integers never overflow. Recursion depth is invisible until it throws. You can't reason about a cost you can't see.

None of that is bad Python. It's bad pedagogy: you can't learn to build what the language already built for you.

What Go puts back on the page

Go is verbose on purpose, and for learning that's a feature.

  • A slice is {pointer, length, capacity}. You watch it grow, and you see the exact moment two slices share memory.
  • A map is visibly a hash map. You write the comparison function for your own heap. The structure and its cost are right there.
  • mid := lo + (hi-lo)/2. You think about overflow because the type is int, not "number."
  • Explicit types, returns, and errors. Every step of the mechanism is a line you wrote — and it's still garbage-collected and readable. You're seeing the machine, not fighting malloc.

One example: binary search

In Python you tend to write this:

search.py
1import bisect
2
3def search(nums, target):
4 i = bisect.bisect_left(nums, target)
5 return i if i < len(nums) and nums[i] == target else -1

Which is fine — until the interviewer says "now return the first index whose value is ≥ target and even." You're starting from zero, because you never wrote the search once.

In Go you write the invariant yourself:

search.go
1// first index i where nums[i] >= target (nums sorted ascending)
2func lowerBound(nums []int, target int) int {
3 lo, hi := 0, len(nums) // half-open range [lo, hi)
4 for lo < hi {
5 mid := lo + (hi-lo)/2 // can't overflow
6 if nums[mid] < target {
7 lo = mid + 1
8 } else {
9 hi = mid
10 }
11 }
12 return lo
13}

Now "first even ≥ target," "last index < target," "search a rotated array," "find a peak" — they're the same six lines with the comparison changed, because you own the six lines.

A bug Python hides
GO
1row := grid[2] // a view into grid, not a copy
2row[0] = 9 // grid[2][0] is now 9 as well

Python's grid[2][:] would have copied. Go makes you learn that slices alias — a real interview gotcha and a real source of production bugs. Better to meet it on a whiteboard than in an incident.

This isn't "Go beats Python"

The course author writes Python for a living. The point is that Go is the better whiteboard: build each structure once in a language that shows its work, and you'll write it more correctly in every language afterward. That's the foundation the rest of the course — reading a problem and knowing which structure it wants — stands on.

Want the translation table itself? Python → Go for coding interviews: the cheat sheet →