• Главная
  • О сайте
    • С нуля до работы photo

      С нуля до работы

      Блог о продвижении новичка к профессии программиста

    • Подробнее
    • Email
    • Twitter
    • Facebook
    • LinkedIn
    • Github
  • Посты
    • Все посты
    • Все теги
  • RSS
  • Проекты

Неделя#26. Ушел на базу, вернусь не сразу)

Пт, 3 Ноября 2017

Время прочтения ~4 минуты

Доброго времени суток всем!

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

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

Как я уже говорил в прошлый раз, мой опыт с прохождением тестового задания (а точнее — с его заваливанием) открыл мне глаза на то, что у меня все еще имеются достаточно большие пробелы в фундаментальных навыках. Да, я уже успел познакомиться со многими полезными инструментами и приобрел какой-никакой опыт в их использовании, я узнал как делаются сайты и попробовал сделать это сам, набил свои первые шишки, столкнулся с новыми проблемами и новыми рубежами незнания, но в целом остался доволен собой и собственным прогрессом. Однако совершенно ясно, что для работы в серьезной компании и успешного прохождения собеседований от меня требуется не только умение вертеть всякими нодами-экспрессами, но и в первую очередь серьезная базовая подготовка, что включает в себя развитое алгоритмическое мышление, некоторое представление об эффективности и способность правильно выбирать наиболее подходящие по ситуации структуры данных, знание языка и платформы и умение по-максимуму использовать ее современные возможности для решения поставленных задач.

Конечно, для того, чтобы научиться всему этому, ученые пока что не изобрели более быстрого и эффективного способа, нежели опыт и еще раз опыт. Поэтому на некоторый период времени (пока еще сам не знаю насколько) я решил повременить с дальнейшим продвижением в сторону веба и сосредоточиться именно на укреплении фундамента. Для этих целей пока что остановился на одном-единственном ресурсе, который посоветовал Кирилл: LeetCode. Здесь, в принципе, есть все, что нужно для моих целей: огромное количество задач всех уровней сложности, начиная с самых простых и известных, наподобие популярного “FizzBuzz” и переворота строки и заканчивая действительно серьезными челленджами, над которыми придется ломать голову не один день.

Кроме самих заданий, на сайте также есть достаточно большое комьюнити, все задания и решения активно обсуждаются учениками. Многие выкладывают свои собственные решения на всевозможных языках и после того, как сам справился с заданием, я обязательно иду посмотреть на то, как это сделали другие. Это позволяет во-первых познакомиться с новыми и необычными подходами, которые самому бы в жизни не пришли в голову, во вторых немного попрактиковаться в чтении кода на других языках программирования (Java, C++, Python, etc.). Ну а заодно еще и прокачиваешь навыки чтения и письменного общения на живом современном английском).

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

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

Также у каждого участника имеется свой личный профиль, куда можно зайти и посмотреть на прогресс, там же имеется всякая инфографика (пока разобрался с тем, как работает сайт, довольно сильно себе ее подпортил :((( ).

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

Из конкретных заданий особенно понравилась задача про изменение формы матрицы и про ряды клавиатуры.

На данный момент бьюсь над задачей про периметр острова. Тоже очень интересное задание, которое вначале вообще вынесло мозг))) Вчера на ночь глядя все-таки сварганил некоторое подобие решения, которое, хоть и проходит тесты, все же выглядит ужасно, отвратительно и мне вообще стыдно за то, что я являюсь его автором. Все потому, что количество проверок, которые приходится проделать для каждого элемента просто невероятно зашкаливает и даже ежу понятно, что это далеко не самый лучший и не самый эффективный вариант решения данной проблемы. Поэтому далее еще часа три просидел с ручкой и тетрадкой в попытках найти некий принцип, который помог бы упростить решение в разы. Перепробовав всевозможные варианты, я все-таки отчаялся и полез посмотреть, что пишут в обсуждениях. Один из учеников действительно предложил довольно простой и интересный паттерн, работающий для любого кейса, его конкретной реализацией на JavaScript я и занимаюсь на данный момент.

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

А пока что всем удачной недели и хорошего настроения!

Неделя#25. Первое тестовое задание. Неделя#28. Надо брать себя в руки...


алгоритмытестовые задания Share Tweet +1