Всем привет! В этой статье я расскажу вам об изучении алгоритмов, как я пришел к Codewars, и что делал неправильно.
Ремарка, codewars можно заменить на другой ресурс, но я все решаю на codewars.
Начнем с небольшой вводной информации: Я — Frontend разработчик с опытом около 4 лет, и за это время алгоритмы в чистом виде мне ни разу не пригодились, ну почти, собеседования не считаем. Получается на этом можно закрыть обсуждение с заключением, что алгоритмы для frontend не нужны, а я не могу рассуждать о более сложных материях. Спасибо за внимание.......
Ладно, получилось не смешно, но правдиво, на самом деле изучение алгоритмов по книгам, видео и черт знает чему, мне совсем не помогало, вот я узнал что есть такой способ сделать код быстрее, но понять где и как его использовать в своей работе, ну не получается. И в какой-то момент я уже начал думать что просто не мое и можно перестать пытаться, и надеяться что алгоритмы не пригодятся и дальше.
Постойте, а давайте разберемся что такое алгоритм, не сложным языком, а максимально просто, это набор каких либо действий, выполнение которых приведет к решению задачи, получается я использовал алгоритмы всю жизнь, просто не называл это так. А каким образом мы учимся эффективнее всего что-то делать? Просто делаем, потом смотрим как это же сделал кто-то другой, если у него эффективнее, переделываем по примеру, и потом это входит в привычку, мы сами не замечаем что привыкли делать какие-то вещи более эффективно, просто из-за насмотренности и опыта.
Резюмируем ошибки:
Надежда, что чтение литературы, просмотр видео и так далее как то поможет улучшить свой навык
Отсутствие практики, даже если я понимал как что-то применить, оно просто забывалось
Желание увидеть результат здесь и сейчас
А как в этом поможет codewars? Ну если заходить на него раз в неделю, решать одну задачу 8 каты (самые простые) то результата почти не будет, но если взять за привычку решать одну задачу в день, желательно разных уровней сложности, а потом смотреть несколько решений от других авторов, и попытаться понять почему это решение более эффективно, а потом еще и переделать задачу с новыми знаниями, и так у вас появится небольшое хобби, на 15–20 минут в день, которое через пару месяцев сделает из вас, гения алгоритмов, поправочка, эта привычка сделает ваш код немного эффективнее, и прокачает ваше понимание как сделать лучше и быстрее, вы лучше узнаете конструкции и возможности языка, я больше половины методов JavaScript использовал в первый раз именно при решении задач на codewars. Но есть один нюанс про который я должен сказать, для лучшего понимания что вообще происходит, и как понять какой алгоритм лучше или хуже, советую прочитать книгу «Грокаем алгоритмы», это даст вам базовые знания об алгоритмах, не умение их применять, а понимания для чего их применять, и как строятся алгоритмы. Прочтение книги уберет стеклянный потолок под котором вы можете оказаться. Если не хочется читать всю книгу, то прочтите хотя бы первые четыре главы, это около 80 страниц.
И как же сталь лучше в алгоритмах:
Читаем «Грокаем алгоритмы»
Решаем одну задачу в день на Codewars
Повышаем уровень сложности, личная рекомендация, решайте задачи 8–5 каты, более сложные задачи немного теряют связь с реальностью.
Ну и немного моих наблюдений, как все вышеперечисленное влияет на вашу карьеру. Вы лучше узнаете свой язык программирования, и научитесь использовать более сложные конструкции, которые делают ваш код быстрее и менее громоздким. Вот небольшой пример:
Задача: Вам будет предоставлен массив a и значение x. Все, что вам нужно сделать, это проверить, содержит ли указанный массив значение. Массив может содержать числа или строки. X может быть любым из них. Верните значение true, если массив содержит значение, и значение false, если нет.
Первое решение:
function check(a,x){
for (let i=0; i < a.length; i++){
if (a[i]==x){
return true
}
}
return false
}
Второе решение:
function check(a,x){
return a.includes(x);
};
Этим примером я выкопал для себя небольшую яму, так как эксперты алгоритмов могут сказать, что это и не алгоритмы вовсе, просто метод языка, где тут алгоритмы? И в какой то мере будут правы, но наша работа связанна не с придумыванием сверх сложных конструкций, а связанна с поиском оптимального решения, и алгоритмы должны помогать нам делать код проще, понятнее и быстрее, а не создавать сложные конструкции, которое уже вряд ли кто то сможет понять.
Про собеседования особо говорить нечего, если вам встретится интервьюер который даст вам решить задачу подобного типа, у вас будет дополнительный плюс в виде опыта и уверенности, но это всего лишь одна задача
Этой статьей я хотел сказать что алгоритмы это не сверх сложный монстр который подвластен только гениям оптимизации и алгоритмов, а что любой может осилить базовый уровень алгоритмов, которого хватит для большинства задач ,и для этого потребуется всего лишь немного вашего терпения и дисциплины.
panzerfaust
"Эксперты алгоритмов" рассуждают об асимптотической вычислительной сложности, а не о форме кода. Кажется, этот ключевой момент вы и упустили. Писать на фронте самописную сортировку или вращение деревьев - это конечно нонсенс. А вот оценивать О-большое - ежедневно нужная вещь.
IT-VAVILON Автор
К сожалению это правда жизни) Но речь не о сложных структурах и понимание на уровне экспертов, а про начните с простого, а дальше пойдет