Algorithms
Big O, sorting, searching, recursion, and the interview patterns.
Big OA FIELD GUIDE · VERIFIED NOV 2026
— the respawn guide, by Big Poppa Code
One path · 66 sessions · 342 side quests
00 / THE PATH
Each session points at its side quests. Three sessions a week suggests 22 weeks. Choose your own days.
01 / SIDE QUESTS
The library the path points into.
Big O, sorting, searching, recursion, and the interview patterns.
Big OLists, hash maps, trees, heaps, tries, and graphs.
ArrayListAlgoCasts exercises, a try-it-first gate, and two project skeletons.
Reverse stringJavaScript, then eight more languages on the same five-step path.
JavaScriptThe 45-minute framework, the numbers, and the walkthroughs.
The 45-Minute System Design InterviewAll 23 Gang of Four patterns as runnable JavaScript.
Abstract FactoryOWASP Top 10:2025, with the vulnerable line and the fix.
A01:2025 Broken Access ControlGrit, and the four moves that make a skill yours.
The Ultimate Guide to Knowing What the Heck You're Talking AboutBuild a polished portfolio with CSS, visual walkthroughs, and working examples.
Tokens and typeThe series, with a writeup under each video.
HTML, CSS, and JavaScript02 / WHICH PATTERN WHEN
31 tells. The strip filters as you type.
No tell matches that word. Try a shorter one.
03 / NAIVE VS OPTIMAL
Write a function called same, which accepts two arrays. The function should return true if every value in the array has its corresponding value squared in the second array. The frequency of values must be the same.
function same(arr1, arr2) { if (arr1.length !== arr2.length) { return false; } for (let i = 0; i < arr1.length; i++) { let correctIndex = arr2.indexOf(arr1[i] ** 2); if (correctIndex === -1) { return false; } arr2.splice(correctIndex, 1); } return true;}function goodSame(arr1, arr2) { if (arr1.length !== arr2.length) { return false; } const fc1 = arr1.reduce((acc, item, idx) => { if (acc[item]) { acc[item]++; } else { acc[item] = 1; } return acc; }, {}); const fc2 = arr2.reduce((acc, item, idx) => { if (acc[item]) { acc[item]++; } else { acc[item] = 1; } return acc; }, {}); for (const key in fc1) { if (fc1[key] !== fc2[parseInt(key, 10) ** 2]) { return false; } } return true;}Why it is faster: `indexOf` inside the loop rescans the second array every time, so the work is n × n. Counting each array once into a frequency object makes every lookup O(1), so the work is two passes.
All four pairs04 / LANGUAGES
Five steps each, then four frontend guides.
You do not need to know everything. You need to know what you are talking about.
— The Ultimate Guide to Knowing What the Heck You're Talking About · Mindset
Read the guide
Learn for free. Work with me when you’re ready.
Optional $20 thank-you · Source reviews: $197 per started 1,000 lines · Portfolio reviews: $497