Для меня основное достоинство книги «Структуры данных и алгоритмы в Java» — язык, которым автор описывает алгоритмы. Он не использует сложный академический язык, приправленный тонной высшей математики. Роберт Лафоре использует простой язык и пытается дать максимально простое объяснение, какое только возможно, каждому алгоритму.

Почему эта книга?

Эта книга — для занятых (или ленивых) студентов или программистов, которые решили повторить алгоритмы перед техническим интервью. Книгу можно просмотреть очень быстро: читаем список идей после каждой статьи, просматриваем примеры кода. Если что‑то показалось непонятным, возвращаемся к основному тексту главы.

С другой стороны, если читать книгу от корки до корки, делая все упражнения, можно добиться заметного прогресса в освоении материала. К тому же в книге есть не только текстовое описание алгоритмов и их программный код, но и Java‑приложение для демонстрации их работы.

Как я отмечал выше, ещё одна причина читать эту книгу — простой язык. И оригинал, и перевод отличаются максимально ясными объяснениями работы каждого алгоритма. И если после прочтения пары страниц Кнута вы засыпаете, эта книга для вас.

Можно что‑нибудь улучшить?

Алгоритмы — очень консервативная тема. Немногое изменилось с того момента, как книга была опубликована. При этом Java изменилась значительно:

  • в ней появились новые синтаксические конструкции;
  • в ней появились новые подходы к написанию хорошего кода;
  • обновились правила оформления кода.

Поймите меня правильно: все примеры из книги — всё ещё работающий Java‑код. Тем не менее это уже не современная Java. Я не хочу видеть подобный код в продакшене.

Почему важно использовать самые свежие подходы в коде примеров? Из‑за того, что книги, подобные этой, читают преимущественно студенты и начинающие программисты. Они будут копировать этот стиль в свои проекты.

Возможно, лучше использовать псевдокод в примерах, как это делают Кнут и Кормен. Конечно, это добавит дополнительную сложность для читающих книгу: в этом случае студенту придётся переводить псевдокод на обычный язык программирования. В любом случае это увеличит шансы, что студент научится использовать свой язык программирования правильно.

Плюсы:

  • очень простой язык;
  • хороший набор алгоритмов;
  • каждая статья заканчивается списком идей.

Минусы:

  • довольно старая;
  • странное форматирование примеров кода;
  • некоторые алгоритмы рассматриваются без примеров кода — только словесное объяснение.