Обложка: 6 способов больше узнать про алгоритмы

6 способов больше узнать про алгоритмы

25
Николай Субоч
Николай Субоч

старший разработчик Яндекс.Поиска и автор курса «Алгоритмы для разработчиков» в Яндекс.Практикуме

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

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

Многие компании, среди которых Яндекс, Google, Facebook, проверяют знание алгоритмов на своих собеседованиях, — это своеобразный негласный стандарт. Вы должны хорошо ориентироваться в особенностях алгоритмов, быстро предлагать разные способы решения задач и понимать, какое решение предпочтительнее использовать.

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

Книги Роберта Седжвика

Роберт Седжвик написал две отличные книги: «Алгоритмы на C++. Фундаментальные алгоритмы и структуры данных» и «Алгоритмы на Java» (в соавторстве с Кевином Уэйном). Седжвик, легендарный человек в мире технологий, был членом совета директоров Adobe Systems, работал во многих исследовательских институтах, где в буквальном смысле слова разрабатывались основы современных технологий. В их числе — знаменитая лаборатория Xerox PARC, где были придуманы современные графические интерфейсы, которыми в своё время вдохновился Стив Джобс.

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

Книга Томаса Кормена «Алгоритмы: построение и анализ»

«Алгоритмы: построение и анализ» написана Томасом Корменом, Чарльзом Лейзерсоном, Рональдом Ривестом и Клиффордом Штайном. Каждый из авторов — легендарный IT-деятель. Эта книга тоже считается классикой. Она хорошо структурирована, каждая глава самодостаточна и раскрывает тот или иной аспект алгоритмов. При этом их суть описана простым и доступным языком с большим количеством примеров, но не в ущерб глубине изложения. Благодаря этому книгу можно читать с любым уровнем подготовки.

Материал практически любого хорошего онлайн-курса по алгоритмам будет пересекаться с этими книгами.

Книги переведены на русский и изданы в России, найти их не составит труда.

Школа анализа данных Яндекса

 

Я учился в Школе анализа данных и могу порекомендовать курсы Максима Бабенко «Алгоритмы и структуры данных» и «Алгоритмы во внешней памяти». Максим умеет доступно объяснять самый сложный материал так, чтобы вы действительно поняли суть.

Большая ценность обучения именно в Школе анализа данных — это чувство причастности к чему-то большему. Именно такое ощущение появляется от хорошего образовательного заведения. Это может показаться неважным, но на самом деле это ощущение кардинально повышает эффективность и качество обучения. И Школа анализа данных обладает такими свойствами в полной мере. В ШАД работают отличные лекторы и чувствуется поддержка в течение всего курса. Поэтому, если у вас есть такая возможность, получить здесь образование точно стоит. Обучение бесплатное, но попасть в ШАД не так просто: нужно пройти серьезный отбор.

Ресурсы для обучения

Курс «Специализация: Искусство разработки на современном C++» 

Этот курс мы создавали вместе с коллегами — разработчиками из Яндекса и других компаний. Здесь мы делимся своим многолетним опытом в части создания больших проектов на языке C++ и рассказываем в том числе про внутреннее устройство стандартных структур данных в языке С++. Фокус здесь не на теории, а на решении проблем, с которыми в реальной жизни сталкиваются большинство разработчиков. Мы постарались сделать лекции лёгкими и доступными, подкрепив их большим количеством практических задач. В конце каждого спринта вам предлагается серьёзная задача, для решения которой нужно применить весь изученный материал.

Codeforces

Codeforces — российский проект, который много лет поддерживает Павел Дуров. Во многом это российское олимпиадное программирование, переведённое в онлайн-формат. Здесь постоянно проводятся соревнования с солидными денежными призами, одержать победу в которых крайне непросто. Однако, если вам удастся занять призовое место, то это явно станет хорошей строчкой в вашем портфолио.

Ценность сайта — в том, что он позволяет вам сразу почувствовать себя внутри индустрии, внутри комьюнити, которое говорит на профессиональном языке. Можно сразу понять, лежит ли у вас душа к такой работе. Здесь можно изучать таблицы лидеров, чтобы понять, как и почему работа других людей получает высокую оценку, и что надо сделать, чтобы получить такую же.

LeetCode

LeetCode — это сайт-тренажер для решения разных задач в области программирования. Среди плюсов — удобный и продуманный интерфейс, который позволяет вам сосредоточиться на работе. Также, после решения задачи вы можете посмотреть, как с ней работали другие люди и насколько быстрее других вы справились с ней. Удобно сравнить свой реальный уровень с другими разработчиками. На сайте размещено почти 2 тысячи задач, поддерживаются 14 языков программирования.

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

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации

Что думаете?