Как заставить фронтендера учить алгоритмы
Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Читать в полной версии →
Представим, что у нас есть фронтендер. Он или она в целом довольны своей жизнью, научились штамповать формы на React и закрывать вовремя задачи, в общем — их все устраивает. Но рано или поздно наш фронтендер начинает чувствовать, что чего-то не хватает. Новости о суперспособностях ChatGPT-4 начинают волновать нашего фронтендера, и чтобы почувствовать себя увереннее, приходится задуматься о своем дальнейшем развитии. И среди прочих buzzwords особенно мозолит глаза аббревиатура DSA, она же — Data Structures and Algorithms.
Сначала наш фронтендер недоверчиво относится к такой идее. Можно же изучить что-то поинтереснее, например, новый фреймворк, удариться в fullstack, стать властелином CSS-анимаций, в конце концов. Зачем фронтендеру знать алгоритмы? В JavaScript есть sort(), есть find(), есть new Map(), да и насколько часто вам приходится по работе обходить дерево? Зачем тратить свое бесценное время на ненужный скилл?
Как бы то ни было, реальность жестока. Знание алгоритмов вам пригодится на собеседовании в любую из big tech компаний. Иногда от вас могут даже не потребовать высшее техническое образование — а вот об алгоритмах наверняка спросят. Даже если вы не собираетесь в big tech, ситуация на рынке такова, что вам придется посоперничать с обладателями Computer Science degree и попавшими под layoffs бывшими сотрудниками FAANG. Даже если вы не метите слишком высоко — разве не приятно на обычном собеседовании с уверенностью решить любую предложенную задачку? Да и в ежедневной работе иногда приходится столкнуться со сложной структурой ответа с бэкенда — и хорошо бы знать, как с ними работать.
В этом нам на помощь и приходят алгоритмы. Но встает очевидный вопрос — а как их учить? Разве это не тайное знание, доступное лишь людям с техническим складом ума? Но если вы все-таки освоили хотя бы базовый JavaScript, то наверняка и алгоритмы окажутся вам по плечу — как и в любом другом деле, упорство зачастую оказывается куда важнее таланта.
Я не считаю себя гуру алгоритмов (я не волшебник, я только учусь), но буду рада поделиться своим подходом к изучению алгоритмов и структур данных.
- Не идите на медведя с голыми руками. Если вы не знаете об алгоритмах ровным счетом ничего, не бегите первым делом щелкать задачки на Leetcode, потому что почти наверняка быстро разочаруетесь. Мои любимые источники теории — курсы с YouTube, где подробно разбирают отдельные задачи (их много, так что найдите преподавателя, который нравится именно вам), курс с Хекслета «Основы алгоритмов и структур данных», и, конечно же, книга «Грокаем алгоритмы» — у автора книги даже есть репозиторий на GitHub с примерами кода из книги на разных языках (JavaScript там тоже есть). Можно (и нужно) учиться по нескольким источникам одновременно. Главное здесь — обязательно пробуйте сами воспроизводить решения задач, иначе ничего не запомните.
- При этом не пытайтесь запоминать код. Мне понравился такой совет — попробуйте своими словами описать принцип работы алгоритма и запомнить именно его, чтобы при необходимости воспроизвести его по шагам. Думаю, если собеседующий увидит, что вы понимаете подход, но где-то упустили переменную — вас поправят, но ругать никто не станет. Некоторые даже делают Anki-карточки для запоминания алгоритмов и структур данных — хочу попробовать сделать так тоже.
- Не ограничивайтесь одной теорией, но и не практикуйтесь бездумно. Мне нравится такой roadmap от одного ютубера — он помогает постепенно перейти от простых тем к более сложным, а еще по каждой теме есть отдельный список задач. На том же Leetcode есть множество тематических списков (вот, например, по рекурсии) — как по мне, лучше увидеть несколько применений одного алгоритма и полностью в нем разобраться, чем постоянно переключаться с одной темы на другую. Даже Брюс Ли боится не того, кто изучает 10 000 различных ударов, а того, кто изучает один удар 10 000 раз!
- Если ничего не понимаете — не огорчайтесь раньше времени. Я подступаюсь к этой теме далеко не в первый раз, но могу с уверенностью сказать, что с каждым следующим подходом становится проще и проще. Если вы все понимаете с первого раза — поздравляю! Если же нет — не расстраивайтесь, однажды вы обязательно решите и эту сложную задачу тоже. Попробуйте вернуться к более простым заданиям, и тренируйтесь, пока не почувствуете себя более уверенно.
- И мой последний лайфхак, конечно же, позвать на помощь ChatGPT. Мне не очень нравится использовать его прямо в качестве учителя (все-таки учебный материал, подготовленный людьми, усваивается гораздо лучше), но вот попросить нейросеть найти ошибку в вашем коде (или даже просто подтолкнуть вас к правильному решению) — бесценно. Все-таки увидеть готовый ответ к задаче — это не так полезно, чем довести до совершенства код, написанный самостоятельно.
Вот и все. Ну и последний аргумент, чтобы убедить вас начать изучать алгоритмы: так мы не только готовимся к тому, чтобы стать незаменимым специалистом, но и снижаем риски возникновения болезни Альцгеймера.
А кто-то еще говорит — бесполезный скилл.