# How to Balance Learning New Algorithms vs Practicing Coding Problems in Interview Prep

> Master interview prep by balancing algorithm study and coding problem practice. Interleave theory and hands-on implementation for effective reinforcement.

- Repository: [John Washam/coding-interview-university](https://github.com/jwasham/coding-interview-university)
- Tags: best-practices
- Published: 2026-02-24

---

**Developers should interleave theory and practice daily by studying a concept for 30 minutes, immediately implementing it for 20 minutes, and then solving 2-3 related problems for 40 minutes, ensuring algorithms are reinforced through hands-on coding rather than passive consumption.**

The `jwasham/coding-interview-university` repository provides a self-contained study plan that explicitly rejects the "learn everything first, code later" approach. Its architecture demonstrates exactly how to balance learning new algorithms versus practicing coding problems through integrated checklists, structured daily rhythms, and companion implementation repositories that bridge the gap between understanding and application.

## The Philosophy of Interleaved Learning in [`README.md`](https://github.com/jwasham/coding-interview-university/blob/main/README.md)

The master guide in [`README.md`](https://github.com/jwasham/coding-interview-university/blob/main/README.md) explicitly instructs candidates to "Start doing coding interview questions while you're learning data structures and algorithms"【L51-L64】. This directive appears at the top of the hierarchical topic list, establishing that the repository considers passive reading without concurrent coding to be ineffective preparation.

The document organizes topics sequentially from fundamentals (arrays, linked lists) to advanced concepts (dynamic programming, system design), but embeds practice checkpoints throughout each section. Every major topic concludes with a reminder to solve problems immediately after reading the theory, preventing the common trap of marathon study sessions that never transition to implementation.

## Task Checklists: Converting Knowledge to Code

The repository enforces balance through granular task checkboxes that require immediate implementation of every concept studied. For example, the guide includes the specific directive: "Implement a vector (mutable array with automatic resizing)"【L608-L610】, turning abstract data structure theory into a concrete coding goal.

These checkboxes serve as guardrails that ensure you never progress to the next topic without having written runnable code for the current one. Marking a task complete in the README signifies both conceptual understanding and working implementation, maintaining a 1:1 ratio between topics studied and code written.

### Vector Implementation Example

The following C implementation demonstrates the checklist item for dynamic arrays, showing how theory directly translates to code:

```c
typedef struct {
    int *data;
    size_t size;
    size_t capacity;
} Vector;

void vector_init(Vector *v) {
    v->capacity = 16;
    v->size = 0;
    v->data = malloc(v->capacity * sizeof(int));
}

/* Resize when needed – O(1) amortised push */
void vector_push(Vector *v, int value) {
    if (v->size == v->capacity) {
        v->capacity *= 2;
        v->data = realloc(v->data, v->capacity * sizeof(int));
    }
    v->data[v->size++] = value;
}

```

## The Daily Rhythm: Structuring Study Sessions

The repository recommends a specific daily cadence that alternates between input (learning) and output (coding). This rhythm prevents the imbalance of spending entire days watching lectures without practicing or grinding problems without understanding underlying patterns.

A typical 2-hour session follows this structure:

1. **Warm-up (10 min)**: Review previous solutions using **Anki flashcards** for spaced repetition
2. **Learn (30 min)**: Study a new algorithm via the curated video links or textbook references in [`README.md`](https://github.com/jwasham/coding-interview-university/blob/main/README.md)
3. **Implement (20 min)**: Code the algorithm from scratch without looking at solutions, following the checklist format
4. **Practice (40 min)**: Solve 2-3 LeetCode problems that specifically require the algorithm just learned
5. **Reflect (20 min)**: Add new insights to flashcards and update the README checklist

This 30/20/40 split ensures that **60% of your time involves active coding** (implementation + problem solving) while **40% covers theory**, maintaining the balance recommended in the source material.

## External Practice Repositories and Global Accessibility

The [`README.md`](https://github.com/jwasham/coding-interview-university/blob/main/README.md) links to dedicated practice repositories including `practice-c`, `practice-cpp`, and `practice-python`【L96-L100】, providing sandbox environments where you can experiment immediately after reading a concept. These repositories contain reference implementations of vectors, linked lists, heaps, and trees that demonstrate production-quality versions of the checklist items.

The `translations/` folder extends this balanced approach globally, offering the same "learn-while-doing" guidance in dozens of languages (e.g., [`translations/README-ptbr.md`](https://github.com/jwasham/coding-interview-university/blob/main/translations/README-ptbr.md), [`translations/README-zh.md`](https://github.com/jwasham/coding-interview-university/blob/main/translations/README-zh.md)). This ensures non-English speakers access the same explicit instructions to interleave theory and practice rather than separating them into distinct phases.

## Implementation Patterns: From Pseudocode to Solutions

The repository demonstrates the balance through concrete code examples that bridge theory and LeetCode-style problems. Each section provides minimal, language-agnostic implementations that you can extend into full solutions.

### Binary Search Implementation

Following the **Binary Search** section in [`README.md`](https://github.com/jwasham/coding-interview-university/blob/main/README.md)【L1025-L1034】, the repository expects immediate implementation of the algorithm before attempting related problems:

```python
def binary_search(arr, target):
    """Iterative binary search returning index or -1."""
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid                # ✅ Implementation complete → check the box in README

        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

```

### Linked List Problem Application

After studying the linked-list knowledge section【L534-L544】, candidates apply the concepts to standard interview problems. The following Java solution for reversing a linked list demonstrates how theoretical understanding translates directly to problem-solving:

```java
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    while (head != null) {
        ListNode nxt = head.next;
        head.next = prev;
        prev = head;
        head = nxt;
    }
    return prev;                     // ✅ Problem solved → reinforces linked-list concepts
}

```

## Summary

- **Interleave daily**: Never spend a day only reading or only coding; alternate every 30-40 minutes between theory and implementation.
- **Follow the checklists**: Use the checkbox items in [`README.md`](https://github.com/jwasham/coding-interview-university/blob/main/README.md) (e.g., "Implement a vector"【L608-L610】) to enforce a 1:1 ratio between concepts studied and code written.
- **Use the 30/20/40 split**: Dedicate 30 minutes to learning, 20 minutes to implementing from scratch, and 40 minutes to solving related LeetCode problems.
- **Leverage external repos**: Reference the `practice-c`, `practice-python`, and other linked repositories【L96-L100】 to see production-quality implementations after your own attempt.
- **Maintain flashcards**: Use Anki to review solved problems, converting coding practice into spaced-repetition learning for long-term retention.

## Frequently Asked Questions

### Should I complete all data structures before starting LeetCode?

No. The [`README.md`](https://github.com/jwasham/coding-interview-university/blob/main/README.md) explicitly advises starting "doing coding interview questions while you're learning data structures and algorithms"【L51-L64】. The repository structures topics sequentially but embeds practice checkpoints throughout, ensuring you solve problems using arrays while studying arrays, not after finishing all data structures.

### How long should I spend coding versus studying each day?

The recommended daily plan suggests approximately **60% active coding** (implementation + problem solving) and **40% theory** (videos, reading). A 2-hour block breaks down into 30 minutes learning, 20 minutes implementing, and 40 minutes practicing problems, followed by 20 minutes of review and flashcard updates.

### What if I understand an algorithm conceptually but struggle to code it?

This indicates insufficient balance toward implementation. The repository addresses this through the **task checklist method**—you must write a working `binary_search` function【L1025-L1034】 or vector implementation【L608-L610】 before marking a topic complete. If stuck, study the reference implementations in the linked `practice-c` or `practice-python` repositories【L96-L100】, then attempt to recreate them from memory.

### Where can I find reference implementations for the checklist items?

The [`README.md`](https://github.com/jwasham/coding-interview-university/blob/main/README.md) links to external practice repositories including `practice-c`, `practice-cpp`, and `practice-python`【L96-L100】. These contain working implementations of vectors, linked lists, heaps, and trees that demonstrate how the checklist items look in production-quality code, allowing you to compare your implementation against reference solutions immediately after coding.