Seeing structure before technique
Learn to reduce a noisy statement to its constraints, invariants, and useful representations before reaching for an algorithm.
A practical book for programmers who know the fundamentals and want to develop the judgment, technique, and practice habits required for harder problems.
Most competitive-programming material teaches algorithms one at a time. Contest problems do not arrive that way. They arrive without labels, mix several ideas together, and force you to decide which details matter before you can write a line of code.
This book is about that middle distance: the craft between knowing standard tools and using them fluently under pressure. It is joint work with Josh Alman at Columbia University, shaped by years of competing, coaching, teaching, and writing problems.
We are writing for readers who can implement the basics but still find that unfamiliar problems feel like isolated tricks. The goal is a more connected way to think, practice, and improve.
Learn to reduce a noisy statement to its constraints, invariants, and useful representations before reaching for an algorithm.
Build reusable mental models so a lesson from one graph, string, or dynamic-programming problem changes how you approach the next.
Move from an argument to an implementation with explicit invariants, complexity checks, testing strategy, and fewer avoidable mistakes.
Use post-contest review, targeted problem selection, and deliberate repetition to make practice produce durable improvement.
Ask what information must survive from one decision to the next, what cannot change in an optimal solution, and which representation makes those facts easiest to express. Named algorithms become more useful when they are consequences of the structure you found—not guesses made from surface resemblance.
Publication details and sample material will appear here as the manuscript develops. You can also ask to receive major book updates by email.