Пока я спал, в одном из чатов шло активное обсуждение по ряду вопросов, на тему которых мне бы тоже хотелось высказаться. Боюсь, что в одно сообщение всё не влезет, посему оформлю отдельным постом. Итак, поехали.
Просто я как ребенок в магазине игрушек — глаза разбегаются. Взялся за яп, а тут нужно выучить и английский, и гит и какие-то там спринги и пр. Все интересно, но как это совмещать и при этом эффективно учить непонятно
Тут я могу ответить старым анекдотом
- Софочка, что Вы будете пить: спирт, водку или самогон?
- Ой, я даже не знаю, всё такое вкусное…
Решения проблемы погони за стадом зайцев я вижу три:
первый метод прост до безобразия: вообще не напрягать себе голову какими-то целями, задачами, планами, сроками и прочими атрибутами “взрослой” разработки. А разбираться с тем, что интересно конкретно в данный момент. Интересно потрогать Spring — трогаем, научиться сводить конфликты в Git — учимся, освоить употребление перфектных времён в амереконском языке — осваиваем. Надоело — отложили на полку и вернулись когда-нибудь, когда эта тема снова стала актуальна в плане интереса. И не могу сказать, что данный метод совсем уж бесполезный. Т.к. изучение чего бы то ни было будет подпитываться живым интересом, то сил на это будет затрачиваться меньше, чем в режиме “надо”, а через это усвояемость материала может оказаться лучше. И пусть получается набор знаний, часто поверхностных, из разных областей, но рано или поздно приходит навык комбинирования этих знаний для создания чего-то нового. Из минусов данного подхода могу отметить опасность превращения в “ламера сверхширокого профиля”, когда знаешь много всего разного, но по чуть-чуть. Ещё одна опасность кроется в том, что областей знания, которые интересны, становится слишком много и мы опять возвращаемся к исходной проблеме “что пить”.
второй метод коротко можно охарактеризовать так: “полковник со шрамом поставил задачу”. Т.е. делаем только то, что актуально в данный момент. Нужно научиться клонировать Git-репозитории — учимся клонировать и ничего более, нужно перевести приложение с самописного решения на Spring — берём и делаем, нужно написать письмо/багрепорт/комментарий на амереконском языке коллегам и при этом не выглядеть полным идиотом в плане грамматики/орфографии — изыскиваем способы. Метод хорош тем, что постановка задач идёт из вне и есть некоторая ненулевая вероятность, что эта постановка будет целостной и приведёт к какому-то понятному конечному результату. Недостатков у данного метода тоже хватает. Это и опасность неправильной постановки задач, и неспособность самостоятельно ставить себе цели и достигать их, всегда будет нужен кто-то, кто возьмёт тебя за поводок и поведёт куда-то, и несовпадение конечного результата с тем, чего хотелось достичь изначально, ибо задачи ставились кем-то ещё, и этот кто-то в первую очередь преследовал свои собственные цели.
на мой взгляд самый действенный метод состоит в объединении первого и второго подходов. Т.е. мы либо сами, исходя из своих интересов, выбираем себе цель, но кто-то другой определяет для нас используемые инструменты и/или способы её достижения. Или наоборот, кто-то указывает нам цель, а как до неё добраться выбираем мы сами. Плюсом является то, что с одной стороны не теряется тот самый живой интерес, который будет поддерживать нас в освоении новых навыков, с другой стороны у нас сохраняется концентрация на каком-то наборе знаний/навыков, который необходимо получить. К сожалению, недостатки объединяемых методов тоже никуда не деваются, но, к счастью, их влияние на нас сглаживается, т.к. попасть в ситуацию, когда вот ваще абсолютно всё пошло не так — это надо обладать каким-то запредельным уровнем невезения. Хотя в своей практике я встречал подобное.
Посоветовать какой-то один метод освоения нового я не могу, они все рабочие только комбинация всех трёх даёт оптимальный результат. Внешние ограничители не дают распыляться и позволяют сохранить концентрацию на задаче, свобода выбора и наличие живого интереса позволяют закончить начатое и не выгореть в процессе. Так же можно в 100500 упомянуть про постановку целей по SMART. Для чего мы хотим освоить тот или иной навык? Просто развлечься, стоит задача на работе или мы хотим освоить новую профессию и выйти на другой уровень дохода? От ответа на этот важный вопрос и будут зависеть и сроки, и вовлечённость, и сколько времени и сил мы будем готовы потратить на получение новых знаний.
Как себя заставить?
Другой важный вопрос, который подняли в той же дискуссии: “Как себя заставить/мотивировать изучать что-то?” На мой взгляд решение имеющихся задач/достижение поставленных целей уже являются достаточными мотиваторами для освоения чего-то нового. При этом даже банального “мне интересно” бывает достаточно, хоть и не всегда. Попробую пояснить на примерах:
TeamCity Kotlin DSL. Эта технология жизненно необходима мне в работе, без неё я не смогу выполнять свои обязанности. Поэтому мне в самом начале минимально пришлось освоить Kotlin и основной набор выразительных средств TeamCity DSL, чтобы просто начать что-то делать. Сейчас же я стараюсь по мере необходимости и при наличии возможности углублять свои знания в этих областях, т.к. это позволяет мне быть эффективнее.
Kubernetes/Helm. В теории эти технологии тоже должны быть для меня жизненно необходимы, но ими занимается мой коллега и я почти их не касаюсь. Поэтому для меня достаточно весьма поверхностного понимая как и что там работает. И нет мотивации погружаться в эти технологии глубже.
Авария на Чернобыльской АЭС. Это как раз тот случай, когда мне “просто интересно”. Причём интересны мне скорее технические аспекты данного события: устройство реактора, его недостатки, возникновение и течение аварии, способы ликвидации и т.д. Поэтому, когда попадаются новые статьи на эту тему, то я выделяю время на их прочтение. Я не исключаю, что в какой-то момент я удовлетворю своё любопытство и потеряю к данной теме интерес.
Vim. Вроде бы было бы неплохо бы его освоить. И когда-то это даже было интересно, но сейчас я использую совершенно другой набор ПО и такой необходимости нет. А если не видно разницы…
Как можно видеть из примеров выше, ни в одном из случаев я не заставляю себя осваивать что-то. Либо для этого существует вполне понятная мотивация, и получение новых знаний оправдано. Либо такой мотивации нет и смысл тогда напрягаться? Ещё хотелось бы вскользь упомянуть такое явление как навязанные цели. Т.к. я работаю DevOps-инженером, то считается, что я должен хорошо знать Kubernetes. Вот только реальной потребности в глубоких знаниях по данной теме у меня на данный момент нет и без особой необходимости я их получать не намерен, ибо это будет пустой тратой времени. Важно вовремя замечать такие навязанные цели и не поддаваться их влиянию.
Если кратко подвести итого всего вышесказанного, то можно заметить, что при наличии мотивации и правильного подхода получение новых знаний может быть интересным и приятным процессом, не всегда простым, но от того не менее привлекательным. И хорошего инженера отличает способность найти для себя эту мотивацию (внутреннюю или внешнюю) и подобрать тот способ получения знаний, который лучше всего подходит для решения конкретной задачи.