Наконец-то дочитал книгу «Грокаем алгоритмы» Адитьи Бхаргавы. Шёл к этому моменту довольно долго и сейчас безумно рад, что это наконец случилось. В этой статье хочу поделиться впечатлениями, пока эмоции ещё свежие.
Книга несколько месяцев лежала у меня на столе в бумажном варианте. Читал параллельно с решением задач на LeetCode, никуда не спешил, занимался в свободное время: прочитал главу или часть главы, законспектировал ключевые моменты, сделал упражнение и отложил до следующего раза. Вникал вдумчиво, без гонки за скоростью.
Дело в том, что до этой книги алгоритмические термины для меня были набором непонятных слов. Сложность, оценка сложности, хеш-таблицы, деревья — я открывал очередную статью на эту тему и закрывал через пять минут, потому что ничего не понимал. Сейчас же все эти темы кажутся элементарными. Секрет, как раз таки, в подходе автора.
Что зашло легко
Объяснение через бытовые примеры. Возьмём коллизии в хеш-таблицах — тема, на которой спотыкается большинство новичков. Бхаргава объясняет её на фруктах: раскладываешь апельсины и бананы по ячейкам, а потом авокадо попадает в ту же ячейку, что и апельсин, — просто потому что оба слова начинаются на букву «А». После такой ассоциации термин уже не забудется.
Практика встроена в процесс. Почти любая теоретическая часть подкрепляется упражнением, и не все они про программирование. Например, в главе про динамическое программирование я сам вручную составлял таблицу для задачи о рюкзаке. Когда что-то проделываешь руками, а не просто читаешь, понимание приходит в разы быстрее.
База выстраивается системно. К концу чтения в голове появляется каркас: зачем нужна оценка сложности, как выбирать структуру данных под задачу, чем один подход к решению отличается от другого. С таким каркасом проще заходить в более сложные задачи — уже не с нуля, а с пониманием, куда копать.
Что не зашло
Некоторые темы автор даёт слишком поверхностно, и для нормального понимания приходится идти либо в интернет, либо в другие книги. На классических темах вроде сортировки, деревьев и графов книга сильна, а на более специфичных — уже не так глубоко.
Второй момент — книга не готовит напрямую к формату собеседований. Она отвечает на вопрос «как устроен алгоритм», но скорость решения и типовые паттерны, с которыми сталкиваешься на LeetCode, остаются за кадром. Для меня здесь и сработало параллельное чтение: книга объясняла «почему», а LeetCode тренировал «как быстро».
Автор, кстати, сам не скрывает эти ограничения и прямо говорит, что глубокие темы читатель сможет изучить самостоятельно после того, как получит базу. И это работает: после книги «Грокаем алгоритмы» самостоятельное чтение уже не пугает.
Кому подойдет книга
- Если вы, как и я раньше, не понимаете разницы между O(n) и O(log n) и боитесь слова «хеш-таблица».
- Если вы уже начали решать задачи на LeetCode, но чувствуете, что не хватает теоретической опоры по конкретными паттернами.
- Если вам ближе визуальное объяснение через жизненные примеры, а не сухая теория с формулами.
Книга вряд ли подойдёт, если вы уже уверенно решаете задачи среднего уровня на LeetCode и ищете более глубокий материал — тогда лучше сразу идти к книге Рода Стивенса «Алгоритмы».
Мой вердикт
Параллельное чтение и решение задач без спешки дали мне то, чего не хватало раньше, — фундамент, на который можно опираться. Я постарался не просто прочитать книгу, а прожить её на практике: конспект в тетради, упражнения из книги и задачи на LeetCode работали как единая система. Рекомендую именно такую связку тем, кто только начинает разбираться в алгоритмах.
А вы читали эту книгу или только планируете прочитать? Напишите в комментариях.