Connect with us

Обучение

5 вещей, которые я узнал после решения более 500 задач на Leetcode

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

Опубликовано

/

     
     

Любой, кто ищет работу в сфере разработки программного обеспечения, вероятно, очень хорошо знает Leetcode. На сайте собраны задачи и решения, которые задают в ходе технических собеседований в некоторых самых крупных компаниях, таких как Google, Facebook и Microsoft.

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

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

1) Важность структур данных и алгоритмов

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

Давайте будем честными, прочная основа в структурах и данных важна для каждого разработчика. Я недавно столкнулся с историей о том, как простое улучшение алгоритма позволило сократить время загрузки для GTA V на 70%, и я по опыту знаю, как эффективная реализация может обеспечить бесперебойную работу приложения даже под нагрузкой.

2) Всегда есть кто-то более знающий, чем вы

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

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

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

3) Пограничные случаи могут испортить вам жизнь

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

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

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

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

4) Упорная работа побеждает талант…

…Когда талант не работает упорно. Мне нравится эта цитата Тима Нотке, и по моему личному опыту она идеально подходит для Leetcode. Я знаю многих фантастических и очень талантливых разработчиков, которые не могут ответить на самые средние вопросы, потому что они не знают шаблонов и правильных инструментов, не могут использовать надлежащие структуры для решения такого рода вопросов.

5 вещей, которые я узнал после решения более 500 задач на Leetcode

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

У меня было еще одно подтверждение важности практики, когда я недавно переключился с Python на Java для решения вопросов. Хотя я использую Java ежедневно на работе, в этом контексте это совсем не интуитивно, и я не могу решить большинство вопросов без поиска в Google подробностей — прямо как когда я был новичком.

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

5) Планирование — неотъемлемая часть разработки программного обеспечения

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

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

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

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

Заключение

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

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

Спасибо, что дочитали до сих пор, не стесняйтесь связываться со мной в Linkedin.

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement

Популярное

Спасибо!

Теперь редакторы в курсе.