Тоже считаю, что решение первой попавшейся задачи дает крайне мало профита в последнее время
Кажется, что просто не хватает какой-то глобальной цели и плана
Иначе так можно и застрять на каком-то уровне
Основная проблема в том, что на такой дистанции обучение без плана, я бы сказал, что даже невозможно.
И тут либо самому жестко запариваться и создавать этот план или искать какие-то левые курсы по алгоритмам. У Яндекса что-то такое есть, но даже не думал пробовать пока
Взят самый популярный пример в разделе Kotlin. Это просто пример и не претендует на максимальную производительность. Это решение такого же обычного человека
Цепные вызовы и правда стабильно хуже в производительности, но позволяет меня задумываться о деталях, а отдаваться реализации конкретной функции
Плюс такие функции являются чистыми, что дает больше уверенности и претендует на тестируемость
Все зависит от вашей цели. Если нужна производительность - придется писать обычный код
За дейлики так и не удалось получить: откровенно не хотелось копировать чужие решения, а чаще всего каждый месяц в дейли попадается такая задача, которую хрен решишь самостоятельно
Если говорить про "правильный" способ, то конечно надо знать основные моменты всех базовых алгоритмов, чтобы при решении понимать в какую сторону копать
Но на практике, конечно, знать все невозможно, поэтому часто приходится разбирать алгоритм в процессе решения конкретной задачи
На самом деле, меня иногда сильно удивляет производительность работы "коробочных" функций
Даже использование базовых функций map, sumOf, reduce и т.п. накладывает какой-то отпечаток на производительность. Несмотря на то, что алгоритм идентичен, "модное" решение практически всегда будет заметно проигрывать в скорости и памяти.
Аналогично и со стримами java, насколько я знаю
По-хорошему надо покопаться в кишках реализации и выяснить в чем все-таки дело, но это уже совсем другая история)
Стал обращать внимание на последовательность вызовов - если можно изменить их очередность и кол-во обрабатываемых данных сократиться.
Аналогично с алг. сложностью - чаще использовать set, map и иногда деревья (их редко). Т.е. мозг начал обращать внимание на вещи, которые большинство пропустит мимо.
Заметно подрос уровень владением языка - для чего раньше придумывался велосипед, сейчас я знаю как сделать функциями из коробки (группировки, окна и т.п.). Это может и просто с опытом прийти, но многим проще писать по старинке как привыкли, а тут будет небольшой толчок.
Как и писал в статье, очень это специфический инструмент обучения, но мне почему-то зашло (не во всех аспектах)
Согласен. Учить что-то на литкоде - довольно сомнительное удовольствие с невнятным результатом. По-хорошему это инструмент чисто для практики, но так вышло, что через "игру" и "соревнования" это интереснее делать, поэтому способ в какой-то степени рабочий.
По сложности тоже согласен. Не самый удачный пример выбрал все-таки. Постараюсь поправить этот момент
Информация
В рейтинге
1 143-й
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Код был вставлен только для примера в "познаниях" языка и не более, не принимайте близко к сердцу. Каждая задача требует своего подхода
Статья является скорее ретроспективой и рефлексией - это просто мои мысли по поводу проделанного пути.
А вы, в свою очередь, можете прокомментировать его со взглядом извне
Как правило, в большинстве задачек литкода бывают достаточно объемные тест кейсы
Частенько по лимиту памяти или времени падает. Приходится придумывать что-то
Есть похожий механизм - Sequence
В некоторых кейсах он может дать буст, но это вообще не панацея
Зависит от цепочки вызовов сильно, поэтому достаточно специфичный инструмент и особо не ориентировался бы на него
Получается полноценное обучение прям, а не по 15 минут в день на литкод потратить
Нужно собираться с мыслями и конкретно тратить время) Не каждый готов к такому
Согласен с вами
Тоже считаю, что решение первой попавшейся задачи дает крайне мало профита в последнее время
Кажется, что просто не хватает какой-то глобальной цели и плана
Иначе так можно и застрять на каком-то уровне
Основная проблема в том, что на такой дистанции обучение без плана, я бы сказал, что даже невозможно.
И тут либо самому жестко запариваться и создавать этот план или искать какие-то левые курсы по алгоритмам. У Яндекса что-то такое есть, но даже не думал пробовать пока
Для меня это даже сейчас звучит как что-то нереальное
Кажется, люди этим всю жизнь занимаются, либо реально гении
На easy/medium задачи уходит не так много времени, как может показаться (до часа максимум, а иной раз можно и за минуту решить, если совсем легкая)
Это как раз мой основной поинт, почему не трогаю hard - экономия времени
Вполне логичный подход
Так и надо делать кмк
Многим просто хочется в моменте утвердить свои скиллы, поэтому останавливаются чисто на практике, хотя это малоэффективный подход
Больной человек!) В хорошем смысле)
Я довольно часто натыкаюсь на дейли, которые не могу решить
Из-за этого так ни одной медальки за месяц и не получил
Ваша выдержка и скилл алгоритмов явно на несколько уровней выше
Код без цепочки вызовов - не мой
Взят самый популярный пример в разделе Kotlin. Это просто пример и не претендует на максимальную производительность. Это решение такого же обычного человека
Цепные вызовы и правда стабильно хуже в производительности, но позволяет меня задумываться о деталях, а отдаваться реализации конкретной функции
Плюс такие функции являются чистыми, что дает больше уверенности и претендует на тестируемость
Все зависит от вашей цели. Если нужна производительность - придется писать обычный код
Конечно
Не сказать, что много, сейчас в районе 5т монеток
Ачивки в основном за дни активности дают
За дейлики так и не удалось получить: откровенно не хотелось копировать чужие решения, а чаще всего каждый месяц в дейли попадается такая задача, которую хрен решишь самостоятельно
Суть одинаковая, но codewars имеет больше уровней сложности, из-за чего можно более точно под себя подобрать.
Плюс слышал, что тесты там сложнее пройти и они мене щадящие
Сам давно туда не заходил, Литкод просто показался больше юзер френдли, поэтому остановился на нем
Абсолютно согласен
Последнее время стараюсь больше внимания уделять medium задачам
Но вообще, как и написал в статье, т.к. цели решать любой алгоритм у меня нет, то и стремления повышать уровень тоже не хватает
Вероятно, после нового года перестану заниматься этим, т.к., как отметили комментаторы выше, смысла в этом мало.
На Easy и Medium чувствую себя +- комфортно, но на Hard уже нужно реально тратить время, а не под чаек посидеть
Тоже замечал такое
Иногда кажется, что литкод просто рандомное число выдает в этот результат
Больше зависит от человека, который решает
Если говорить про "правильный" способ, то конечно надо знать основные моменты всех базовых алгоритмов, чтобы при решении понимать в какую сторону копать
Но на практике, конечно, знать все невозможно, поэтому часто приходится разбирать алгоритм в процессе решения конкретной задачи
Там был комментарий к предыдущему примеру
По памяти абсолютно правы, это главная проблема коробочных функций, как по мне
Код получается "чистым", но производительность и память явно страдают
В идеале, нащупать эту грань между велосипедом и переизбытком синтаксического сахара. Это и есть наша работа)
На самом деле, меня иногда сильно удивляет производительность работы "коробочных" функций
Даже использование базовых функций
map,sumOf,reduceи т.п. накладывает какой-то отпечаток на производительность. Несмотря на то, что алгоритм идентичен, "модное" решение практически всегда будет заметно проигрывать в скорости и памяти.Аналогично и со стримами java, насколько я знаю
По-хорошему надо покопаться в кишках реализации и выяснить в чем все-таки дело, но это уже совсем другая история)
Именно так это и ощущалось!)
На самом деле, примеров не так уж и много
Для себя отметил такие вещи:
Стал обращать внимание на последовательность вызовов - если можно изменить их очередность и кол-во обрабатываемых данных сократиться.
Аналогично с алг. сложностью - чаще использовать set, map и иногда деревья (их редко). Т.е. мозг начал обращать внимание на вещи, которые большинство пропустит мимо.
Заметно подрос уровень владением языка - для чего раньше придумывался велосипед, сейчас я знаю как сделать функциями из коробки (группировки, окна и т.п.). Это может и просто с опытом прийти, но многим проще писать по старинке как привыкли, а тут будет небольшой толчок.
Как и писал в статье, очень это специфический инструмент обучения, но мне почему-то зашло (не во всех аспектах)
Согласен. Учить что-то на литкоде - довольно сомнительное удовольствие с невнятным результатом. По-хорошему это инструмент чисто для практики, но так вышло, что через "игру" и "соревнования" это интереснее делать, поэтому способ в какой-то степени рабочий.
По сложности тоже согласен. Не самый удачный пример выбрал все-таки. Постараюсь поправить этот момент