В прошлом мой интерес часто привлекали зеленые метки и разнообразные значки в профилях у других людей, а теперь у меня самой есть такие. Вот как выглядит мой профиль на Leetcode в данный момент.
Однако, если взглянуть на статистику за 2022 год, то там не обнаружится почти ничего. Как можно видеть, произошли серьезные перемены!
Ниже вы найдете несколько уроков, которые я вынесла для себя, и ошибок, которых следует избегать, чтобы не тратить зря время и силы.
Как мне удалось преодолеть рубеж в тысячу задач?
Прорешать тысячу задач – дело непростое. В определенный момент начинаешь скучать и возникает желание приняться за исследование других областей. Тем не менее для достижения своей цели придется вложить время и труд.
Я начала писать код на первом курсе. Тогда многие среди моих однокурсников боролись за страйки на Snapchat. Тогда-то мне и пришла в голову мысль удерживать страйки на Codeforces, а впоследствии и на Leetcode. Страйки помогали мне при помощи простых цифр сохранять регулярность и не отступаться от задуманного.
Погружаться в тему. Я завела привычку: изучая новую тему, решать три-четыре задачи по ней ежедневно – это помогало лучше ее проработать. После того как мне удавалось найти рабочее решение, я обычно знакомилась и с другими подходами, чтобы понять, какой из них является оптимальным.
Отслеживать прогресс по дням. В процессе трудоустройства я стала записывать цели на день, это способствовало эффективному распределению времени. Составление ежедневных планов лучше не откладывать: оно может дать многие преимущества. Они не только помогают распоряжаться временем, но еще и позволяют отслеживать, сколько сделано за определенный день.
Планы я составляла таким образом: по прошествии некоторого времени заносила данные на Google Docs, что помогало оценивать прогресс также и по месяцам. Да, к слову, скажу сразу, прежде чем кто-то осудит: почерк у меня… в общем, я над этим работаю.
Возвращаться к замысловатым задачам. Сначала я по два-три часа билась над некоторыми задачами, которые в итоге так и оставались нерешенными. В конце концов приходилось заглядывать в решения. Затем я выстроила другую схему: если мне не удается самостоятельно справиться с задачей за полчаса, я смотрю решение. Такие задачи я заносила в специальный список, и еще раз проходилась по ним по утрам. Эта практика оказалась очень благотворной для моего продвижения в разработке.
Держаться того, что работает. Когда-то я постоянно перескакивала между разными вебсайтами, посвященными программированию. Толку от этого было мало – я решала одни и те же задачи в разных местах. В итоге ничему новому я не училась. Лучше найти одну платформу, которая вам по душе, и оставаться на ней. Для тех, кто готовится к собеседованиям, Leetcode – подходящий выбор.
Ошибки, которые я допускала в процессе обучения
Не застревать на одной задаче. Одна из самых серьезных моих ошибок – склонность уделять слишком много времени одной задаче. Если за 15-20 минут никак не удалось продвинуться, загляните в подсказки. Если по истечению часа вы все еще в тупике, ищите решение в обсуждениях.
Рассматривать разные подходы. Раньше я все силы бросала на то, чтобы прорешать как можно больше задач. Однако на собеседовании могут расспрашивать о разных методах – допустим, с применением грубой силы или метода оптимальных решений. Соответственно, при решении задачи следует делать обзор всех возможных вариантов.
Не пренебрегать состязаниями. Когда у вас появится хорошее понимание выбранного языка программирования, начинайте участвовать в состязаниях, которые проводятся раз в неделю или две. Эта привычка помогает анализировать, как меняется ваш уровень. Ну и держите в уме, что копировать чужие решения ради рейтинга не стоит. Рейтинг-то это повысит, но реальных знаний не даст.
Избегать прорешенивания однообразных задач. Это распространенная ошибка. Поначалу я десятками щелкала простые задачки как орешки. Простые задачи помогают прояснить основы, но спешка здесь не нужна. Если простые задачи уже идут легко, переходите на средний уровень сложности, а если успешно справляетесь со сложными – берите следующую тему. Помните, что качество важнее количества.
Полезные инструменты, которые ускорили мой прогресс
Leetcode Big Omega: Это расширение для Google Chrome, которое выводит тэги компаний. Когда я готовилась к собеседованию в определенной компании, то могла отбирать задачи, которые там используются. Это расширение существенно облегчило для меня подготовку.
Таймер для экрана. Я стала запускать на телефоне таймер, особенно для тех приложений, в которых просиживаю подолгу. Таймер принудительно закрывал приложение, когда дневной лимит оказывался исчерпан. Благодаря этому я экономила массу времени.
Таймер для Leetcode. С помощью этого расширения для Chrome я отслеживала, сколько времени трачу на ту или иную задачу. Это давало возможность задать временной лимит для простых, средний и сложных заданий – расширение оповещало меня, когда этот лимит превышался. Так время использовалось оптимальным образом.
Заключение
То, что я решила тысячу задач на Leetcode, само по себе не имеет значения – важно то, научилась ли я их решать в кратчайшие сроки. На этапе собеседования, посвященном написанию кода, на решение трех задач дают лишь полтора часа. Постарайтесь избегать моих ошибок и неустанно исследуйте LeetCode Discuss – там можно найти много ценных сведений.
Комментарии (11)
Politura
29.03.2024 15:20+7Контент менеджер это тот, кто ищет чужие статьи и перефразирует их для наполнения своего сайта? Вот уж не знал, что чтоб получить работу контент менеджера, надо на интервью полтора часа алгоритмические задачи решать :)
dyadyaSerezha
29.03.2024 15:20Не, она студентка, изучает программирование, как я понял, но деньги зарабатывает сейчас как контент менеджер.
Sau
29.03.2024 15:20+2Решать в среднем по 3-4 задачи в день. Решать лучше всего простые, так легче достигнуть KPI.
Scott_Leopold
29.03.2024 15:20Ещё бы аффтар (-ка?) дала разбивку задач по сложности... Если решать только лёгкие, то можно и за месяц тыщу наколотить
plFlok
29.03.2024 15:20+2Если по истечению часа вы все еще в тупике, ищите решение в обсуждениях.
Нуууу, это ж не решение. Хотя если цель - набить зелёных квадратиков, то kpi достингут
WebPeople
29.03.2024 15:20+7Вполне себе отличное решение. От того, что потратишь 2-3 дня на решение сложной задачки умнее не станешь. Знаний не прибавится. Лишь мотивацию сожжешь, когда задачка не решается. И что с ней делать, если не получается решение найти? Посчитать себя тупым и бросить все? Пропустить и идти дальше? (оставив пробел)
Лучше подглядеть решение, потом повторить его, разобрать. И несколько подобных задач порешать. В итоге и понимание, и навык и знание есть.
Georrg
29.03.2024 15:20+2Мне скучно становится через 20 задач. Вообще не понимаю зачем на это тратить столько времени)) Но каждому свое. Если потом профессионально писать алгоритмы - то что доктор прописал
CentariumV
29.03.2024 15:20+1Вот ее профиль на LeetCode
https://leetcode.com/_noname/
В гитхабе в открытые репы у нее все студенческого уровня, всякие "Internship-Project" на Js, Css. На вид ей лет где-то 20+. Я что хочу сказать - у меня в знакомых есть люди с математическим образованием, с очень хорошей подготовкой. Кто - то даже работает математиком в Microsoft. Кто - то - программистом в Apple. Тоже решают время от времени задачи на Leetcode и они и близко к таким результатам не подошли.
В свое время читал все 4 тома Кнута вместе с комбинаторикой, разбирался в его MIXX, пробовал решать задачи - научные проблемы к разделам.
Кстати некоторые из этих научных проблем потом находил на leetcode на уровне hard. Что говорит о том, что их брут - форсом чрезвычайно тяжело решить - тут нужен высокий уровень математической подготовки, надо знать подходы к решению. Величайшие математики вроде Эйлера, Дийкстры, Гаусса, Евклида их годами решали. Не такие известные, как задача коммивояжера, вроде задач на разрезание многоугольника или задачи 36 офицеров Эйлера.
А тут - 1000 задач за год, в иные дни по 21 submission. Конечно, submission это может быть и не одно решение одной задачи, но методом амортизации в разрезе всего года можно аппроксимированно предположить, что 3-4 задачи стабильно решались. Это человек без работы и личной жизни одни задачки что ли решает? Или hard за 10 мин решает?
Посмотрел последние 10 задач - отточенные все, элегантные решения, которые к тому же в оснновном бьют 99% всех остальных по памяти и run time.
Контент менеджер. Мне кажется, ей бы лучше руководство каким - нибудь отделом Google подошло. Или руководство Google.
Да, конечно, в литкоде можно и решение задачек глянуть в discussion и гуглом пользоваться и те же нейросети chatGPT использовать для решения и для самопиара. Что кстати важно для контент - менеджера. Но она же говорит, что сама решала.
Как говорил Эйнштейн - "Я не такой уж умный, я просто много решал задач. И долго не сдавался при их решении"
nemajo
...и не поехать кукухой?