Библиотека Frontend-разработчика, часть 4: Алгоритмы
Предисловие к статье
Frontend-разработчик в головах многих ассоциируется с разработкой, которая не требует сильных трудозатрат и хорошей математической подготовки. Если с первым еще можно поспорить, то со вторым – тут в точку. Математика на старте вряд ли пригодится разработчику интерфейсов, ибо ее просто негде использовать. Но это на старте.
Как и любой разработчик – True Frontend’eр должен расти в своей сфере, и конечно же, уходить от простой разработки интерфейсов к чему-то более сложному.
На фоне недавно нашумевшего сериала, можно выписать такой тезис – разработка, как игра в шахматы – неинтересно играть с тем, кто ниже рангом также, как и неинтересно всю жизнь делать одно и тоже одной сложности.
Всегда хочется лезть в дебри, повышать свой уровень. И там где дебри, начинается математика, структуры данных, алгоритмы. Хотите оптимизировать загрузку – это вам к алгоритмам. Хотите увеличить скорость отображения элементов на странице – необходимо обратиться к математике и алгоритмам. Возможно сортировка пузырьком элементов была лишней…
Отдельное слово хочу сказать о структурах данных – несмотря на то, что в js полный беспорядок в плане типов – всегда есть ts, где структуры данных – это основа основ. Для этого ts и был сделан. Контролировать беспорядок. Тут то вы и вспомните о классических структурах, о которых сказано в книгах ниже
Ну и напоследок – любая активность мозга в направлении алгоритмов непременно ведет к увеличению скорости выполнения задач и прокачиванию навыка писать хороший поддерживаемый код. Вы сами увидите, как после ста задач на том же leetcode вы сможете быстро подбирать зарекомендованное решение.
Следующее, что стоить отметить – собеседования. И на собеседованиях часто требуют решить какую-нибудь простецкую задачку сворованную с очных собеседований из компании с красно-белым лого. После некоторого времени алгоритмической подготовки такие задачки будут для любого разработчика проще некуда.
Это статья о том, что алгоритмы разработчику нужны. Это статья о том, что по алгоритмам есть интересные и нескучные книжки, которые помогут быстро понять основы и прокачать свои hard-skills.
Книга «Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих» – Адитья Бхаргава
Начнем с простого
Представим себе ситуацию, что вы никогда не задумывались, что в вебе есть алгоритмы, есть структуры, что DOM-дерево называется деревом, потому что это название первое, которое пришло в голову тем, кто его создал. Если так и вы совсем зеленый – эта книга нужна вам первой.
Объясню почему – структура книги очень удобна и позволяет вам не напрягать сильно голову на первых страницах в первых главах. Сложность увеличивается по мере прохождения – сложные алгоритмы объясняются на основе простых, которые вы уже наверняка прочитали. Эта книга для синхронного обучения. Не стоит сразу перепрыгивать на последнюю главу с хэш-таблицами, если вы первый день изучаете алгоритмы.
В плюсы книги можно определить иллюстрации (от того и название такое) – их действительно много. Сложные вещи объясняются на картинках, что помогает ускорить образовательный процесс.
Эта книга помогла многим моим знакомым подготовиться к собеседованию в компанию с “бело-красным лого” (в том числе и мне) – в книге изложен минимальный набор знаний и терминов, которые помогут пройти алгоритмическую секцию без особого труда.
К минусам могу отнести относительно поверхностное повествование об алгоритмах. Но нам глубина особо и не нужна.
Алгоритмы для начинающих: Теория и практика для разработчика – Панос Луридас
После того, как мы уже понимаем что такое алгоритмы – нужно переходить к чему-то более сложному и самое главное – интересному.
В книге описаны в начале все те же алгоритмы, что и в книге выше. Но тут более подробное описание, более сложная подача материала, которая не уходит в полностью сухой математический язык. Наверное, эту книгу можно назвать не просто учебником по алгоритмам, а целым пособием “Как весело провести свой вечер” или, если серьезно, мощнейшей энциклопедией по алгоритмам, которую реально интересно читать.
Тут описано все алгоритмы, которые только можно представить. Но оговорюсь – не все они нужны в обычной жизни разработчика интерфейса. Книга скорее для тех, кто хочет просто посмотреть как выглядят алгоритмы, прочитать несколько раз, написать пару строчек кода, залить в репозиторий и навсегда забыть, с приятным осознанием того, что вы теперь настоящий разработчик очень “сложных” и непонятных вещей.
Раз она такая сложная – как ее читать?
Очень просто:
-
Нашли нужную вам тему
-
Прочли теорию
-
Списали алгоритм
-
Разобрали алгоритм
-
Прочли теорию снова, потому что вы ничего не поняли
-
Снова написали алгоритм
-
git commit -m ‘i am God’ && git push origin master
-
Вы великолепны!
Этот простой рецепт помог мне быстро разобраться со многими алгоритмами. И через несколько месяцев забыть их….
Алгоритмы – С. Дасгупта, Х. Пападимитриу, У. Вазирани
Представим себе ситуацию, что вы фронтендер, который хочет понять все в алгоритмах, уйти в науку, написать новый алгоритм реактивного обновления данных vue.js, построить новую модель работы виртуального DOM и, быть может, построить новую концепцию “сайтостроения”.
Эта книга для углубленного, насколько это возможно, изучения языка. Тут вы не найдете стандартные задачки с собеседований, не найдете простое повествование – эта книга для тех, кто для себя решил найти новое хобби, кто решил познать алгоритмы криптографии и шифрования. Книга для жесткой зубрешки, которая скорее не нужна обычному фронтендеру, чем нужна.
И все таки – зачем нужны алгоритмы?
Все предельно просто – развиваться.
Алгоритмы нужны, чтобы развивать обучаемость и просто держать свой мыслительный аппарат в тонусе.
Ко всему этому можно добавить, что алгоритмы требуются в топовых компаниях, таких как яндекс, google, чтобы на этапе собеседования проверить ваши умения написать код под задачу, которую вы наверняка не знаете. В этих книгах нет решения типовых задач того же яндекса, но есть самое главное – возможность научить себя решать любые задачи, оценивать сложность не только эмпирически, но и физически. Это полезный навык – могу вас заверить.
Понимая алгоритмы – вам будет легче понять что такое архитектура (к которой мы еще вернемся). Легче решать задачи, легче придумывать “велосипеды”, что тоже, кстати полезно в процессе освоения такого большого направления разработки – Frontend – разработки
А зачем лого Leetcode на превью?
Очень просто – где оттачивать свои навыки? Конечно же на leetcode!