Стоит ли решать задачи на Codewars? Или как я полюбил алгоритмы

Всем привет! В этой статье я расскажу вам об изучения алгоритмов, как я пришел к Codewars, и что делал неправильно.

f962ce501a0b65ec75d164c02a58adf0.jpeg

Ремарка, codewars можно заменить на другой ресурс, но я все решаю на codewars.

Начнем с небольшой вводной информации: Я — Frontend разработчик с опытом около 4 лет, и за это время алгоритмы в чистом виде мне ни разу не пригодились, ну почти, собеседования не считаем. Получается на этом можно закрыть обсуждение с заключением, что алгоритмы для frontend не нужны, а я не могу рассуждать о более сложных материях. Спасибо за внимание…

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

Постойте, а давайте разберемся что такое алгоритм, не сложным языком, а максимально просто, это набор каких либо действий, выполнение которых приведет к решению задачи, получается я использовал алгоритмы всю жизнь, просто не называл это так. А каким образом мы учимся эффективнее всего что-то делать? Просто делаем, потом смотрим как это же сделал кто-то другой, если у него эффективнее, переделываем по примеру, и потом это входит в привычку, мы сами не замечаем что привыкли делать какие-то вещи более эффективно, просто из-за насмотренности и опыта.

Резюмируем ошибки:

1) Надежда, что чтение литературы, просмотр видео и так далее как то поможет улучшить свой навык

2) Отсутствие практики, даже если я понимал как что-то применить, оно просто забывалось

3) Желание увидеть результат здесь и сейчас

А как в этом поможет codewars? Ну если заходить на него раз в неделю, решать одну задачу 8 каты (самые простые) то результата почти не будет, но если взять за привычку решать одну задачу в день, желательно разных уровней сложности, а потом смотреть несколько решений от других авторов, и попытаться понять почему это решение более эффективно, а потом еще и переделать задачу с новыми знаниями, и так у вас появится небольшое хобби, на 15–20 минут в день, которое через пару месяцев сделает из вас, гения алгоритмов, поправочка, эта привычка сделает ваш код немного эффективнее, и прокачает ваше понимание как сделать лучше и быстрее, вы лучше узнаете конструкции и возможности языка, я больше половины методов JavaScript использовал в первый раз именно при решении задач на codewars. Но есть один нюанс про который я должен сказать, для лучшего понимания что вообще происходит, и как понять какой алгоритм лучше или хуже, советую прочитать книгу «Грокаем алгоритмы», это даст вам базовые знания об алгоритмах, не умение их применять, а понимания для чего их применять, и как строятся алгоритмы. Прочтение книги уберет стеклянный потолок под котором вы можете оказаться. Если не хочется читать всю книгу, то прочтите хотя бы первые четыре главы, это около 80 страниц.

И как же сталь лучше в алгоритмах:

1) Читаем «Грокаем алгоритмы»

2) Решаем одну задачу в день на Codewars

3) Повышаем уровень сложности, личная рекомендация, решайте задачи 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);
};

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

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

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

© Habrahabr.ru