Были годные статьи об аргументированной пользе алгоритмов (например, habr.com/ru/company/geekfactor/blog/597035), тут хочется поделиться личным опытом.
На всякий случай, не стоить переоценивать пользу алгоритмов: если вы на одном уровне зп и при этом коллега крутил на всем подряд биг О нотэйшн, скорее всего софт скилы у него развиты лучше.
Что дано: фронтэнд с элементами nodejs разработки. Знаю javascript, взял java из-за общего префикса и Брюса Эккеля. Язык годный, легко читать, осознал что надо оч много писать после 175 задачек на ресурсе под именем leetcode. Попробовал язык мобилок, язык прекрасный, но не для мобилок. Swift прекрасен и будет еще прекраснее в будущем. До наступления прекрасного будущего решил юзать питон: легко и мало писать, но трудно читать — да и пофиг, так как каждый день новая задачка.
Задачку в день можно сравнить с зарядкой по утрам: тридцать отжиманий и вы на свободе — в тонусе и без посещения зала. Во время решения не хочется читать форумы, обсуждения/суждения/прогнозы на будущее — ну то есть для утренней зарядки вроде не нужен тренер-консультант, так вот и для задачки тоже.
Недостижимая цель (она же мотивация) — заработать баллов на майку leetcode (5000, по-моему). За решение задачки дня дают 10 монеток. Идея как в казино, покрываем сектор. В месяц на наш сектор делает 50 монет (и будет больше). Профит. Верхняя граница сектора на данный момент — это трехсотая задача.
Что пропущено? 1) платные задачи — зарядку проводим дома без похода в зал; 2) задачки на которые можно решить только на bash — кажется, на питон уже пора все переписать; 3) четыре красные задачки.
Задачки на leetcode бывает трех видов: зеленая, желтая и красная. Отличие красной от желто/зеленых в кол-ве логических шагов и тестов c большими данными (и тут bigdata :) (или, другими словами, красные алгоритмы должны работать оч быстро). Бывали красные задачки что-то вроде проекта — вроде и не сложно, но пишешь и пишешь, прям оч много кода. Если сравнить: желтая задачка на день, красная может легко затянуть на два (в редких случаях на неделю).
Процесс решения задачки обычно включает след шаги: 1) как это вообще можно решить 2) ага, а если мы в середине функции, что пришло на вход и что нужно вернуть. Тут хочется добавить, что мозг вообще сложно заставить решить задачу здесь и сейчас, скорее загрузить инфу утром, и к вечеру, возможно, появятся идеи. По-моему, большинство задач можно решить с помощью рекурсии и самой неоптимальной динамики, хотя если повезло найти быстрое решение без динамики — прям кайф.
Много задач на бинарный поиск, обход деревьев и списков. Задачки на строки, массивы, двойные массивы. Палиндромы (куда без них), скобки, калькуляторы (они же парсеры). Было с десяток задач на SQL (по-моему все можно решить с помощью window function). Были задачи с историей (прям кайф) которые обычно красные и кажутся на первый взгляд очень проходными. Много связанных задач.
В какой-то момент задачку оч хочется закрыть (выполнить), а вот тесты не проходят. То есть тесты на качество проходят (порядка 200 штук), а на кол-во (с большими входными данными) — нет. Алгоритм переиспользуeт компоненты связанных задачек, на бумаге выглядит чудесно, а тесты все никак. Погрешность теста в 0.3 % — пропущен какой-то локальный минимум (тут я честно позавидовал ребятам из ml). Возникает этическая проблема: харкодить или не харкодить тесты? С одной стороны, оч хочется закрыть задачку и пойти спать (что весьма неплохая идея). C другой, и думается мне, это весьма правильное решение — не харкодить, оставить задачку в нерешенных и вернуться к ней потом.
Немного статистики: решив первые 255 задачек, по версии leetcode вы будете лучше, чем 90% пользователей на желтых и красных задачках и на 84% по зеленым задачкам. Кол-во монеток приблизительно 950, рейтинг (или ранк) 146250 (есть куда плыть). Как-то так. Удачи в кодинге :)
На всякий случай, не стоить переоценивать пользу алгоритмов: если вы на одном уровне зп и при этом коллега крутил на всем подряд биг О нотэйшн, скорее всего софт скилы у него развиты лучше.
Что дано: фронтэнд с элементами nodejs разработки. Знаю javascript, взял java из-за общего префикса и Брюса Эккеля. Язык годный, легко читать, осознал что надо оч много писать после 175 задачек на ресурсе под именем leetcode. Попробовал язык мобилок, язык прекрасный, но не для мобилок. Swift прекрасен и будет еще прекраснее в будущем. До наступления прекрасного будущего решил юзать питон: легко и мало писать, но трудно читать — да и пофиг, так как каждый день новая задачка.
Задачку в день можно сравнить с зарядкой по утрам: тридцать отжиманий и вы на свободе — в тонусе и без посещения зала. Во время решения не хочется читать форумы, обсуждения/суждения/прогнозы на будущее — ну то есть для утренней зарядки вроде не нужен тренер-консультант, так вот и для задачки тоже.
Недостижимая цель (она же мотивация) — заработать баллов на майку leetcode (5000, по-моему). За решение задачки дня дают 10 монеток. Идея как в казино, покрываем сектор. В месяц на наш сектор делает 50 монет (и будет больше). Профит. Верхняя граница сектора на данный момент — это трехсотая задача.
Что пропущено? 1) платные задачи — зарядку проводим дома без похода в зал; 2) задачки на которые можно решить только на bash — кажется, на питон уже пора все переписать; 3) четыре красные задачки.
Задачки на leetcode бывает трех видов: зеленая, желтая и красная. Отличие красной от желто/зеленых в кол-ве логических шагов и тестов c большими данными (и тут bigdata :) (или, другими словами, красные алгоритмы должны работать оч быстро). Бывали красные задачки что-то вроде проекта — вроде и не сложно, но пишешь и пишешь, прям оч много кода. Если сравнить: желтая задачка на день, красная может легко затянуть на два (в редких случаях на неделю).
Процесс решения задачки обычно включает след шаги: 1) как это вообще можно решить 2) ага, а если мы в середине функции, что пришло на вход и что нужно вернуть. Тут хочется добавить, что мозг вообще сложно заставить решить задачу здесь и сейчас, скорее загрузить инфу утром, и к вечеру, возможно, появятся идеи. По-моему, большинство задач можно решить с помощью рекурсии и самой неоптимальной динамики, хотя если повезло найти быстрое решение без динамики — прям кайф.
Много задач на бинарный поиск, обход деревьев и списков. Задачки на строки, массивы, двойные массивы. Палиндромы (куда без них), скобки, калькуляторы (они же парсеры). Было с десяток задач на SQL (по-моему все можно решить с помощью window function). Были задачи с историей (прям кайф) которые обычно красные и кажутся на первый взгляд очень проходными. Много связанных задач.
В какой-то момент задачку оч хочется закрыть (выполнить), а вот тесты не проходят. То есть тесты на качество проходят (порядка 200 штук), а на кол-во (с большими входными данными) — нет. Алгоритм переиспользуeт компоненты связанных задачек, на бумаге выглядит чудесно, а тесты все никак. Погрешность теста в 0.3 % — пропущен какой-то локальный минимум (тут я честно позавидовал ребятам из ml). Возникает этическая проблема: харкодить или не харкодить тесты? С одной стороны, оч хочется закрыть задачку и пойти спать (что весьма неплохая идея). C другой, и думается мне, это весьма правильное решение — не харкодить, оставить задачку в нерешенных и вернуться к ней потом.
Немного статистики: решив первые 255 задачек, по версии leetcode вы будете лучше, чем 90% пользователей на желтых и красных задачках и на 84% по зеленым задачкам. Кол-во монеток приблизительно 950, рейтинг (или ранк) 146250 (есть куда плыть). Как-то так. Удачи в кодинге :)