Эдгар Маурисио Мохика предоставил иллюстрации для этого сообщения. Это его личный сайт.

Сейчас январь, поэтому многие из нас привержены новогодним обещаниям, и если вы занимаетесь разработкой программного обеспечения, это часто означает принятие новых технических навыков. 2018 год может стать годом, когда вы создадите свое первое веб-приложение на React, исследуете новый язык программирования, такой как Scala, или закрепите свои знания в структурах данных и алгоритмах (как я!).

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

Так что же делать? Проще говоря, я думаю, что инженеры-программисты могут многому научиться у CrossFit. Ага, этот кроссфит!

Какое отношение имеет фитнес-программа к обучению навыкам разработки программного обеспечения?

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

Механика относится к технике - вашей способности правильно выполнять наши основные движения.

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

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

Когда эта лекция окончена («И не забывайте есть овощи!»), Как насчет Последовательности?

Последовательность состоит из двух частей: 1) вы последовательны в выполнении механики движения; и 2) что вы последовательны в тренировках CrossFit.

Последовательность для наших целей означает в основном то же, что и для CrossFit: мы последовательно следуем принципам безопасности и единообразны в наших технических тренировках. Для себя я обнаружил, что изучение предмета 2–5 раз в неделю - лучшее место для моего учебного процесса. Меньше этого, и мне трудно запоминать информацию, а еще больше - обрабатывать новую информацию. Что касается всего в жизни, поиск последовательности, которая лучше всего подходит для вас, - это вопрос личных проб и ошибок.

Наконец, как насчет интенсивности?

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

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

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

  1. Чтение новых задач для ознакомления
  2. Просмотр моего репозитория на GitHub и быстрый обзор решений проблем, которые я уже сделал
  3. Решение проблем, которые я делал раньше (Примечание: это одна из задач с меньшей интенсивностью, но я обнаружил, что это, вероятно, самое важное для закрепления знаний)
  4. Сравнение моего решения с другими решениями и использование этой информации для добавления нового решения, которое мне нравится, в репозиторий GitHub.
  5. Пробовать новые проблемы в категории, с которой я знаком
  6. Попытки решить новые проблемы в областях, с которыми я не знаком

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

Хорошо, это принципы безопасности, согласованности и интенсивности. Если вы будете помнить об этом и придерживаться их, вы получите эту прекрасную Золотую пирамиду!

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

Важно отметить, что эти принципы безопасности, согласованности и интенсивности взаимно дополняют друг друга, и если вам не хватает одного или нескольких, случаются неприятности. . Вот почему блок Безопасность является самым большим и опирается на нижнюю часть пирамиды, за ним следуют Согласованность, и, наконец, Интенсивность сверху. Что произойдет, если мы не соблюдаем принцип безопасности?

Выгорание

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

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

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

Разочарование

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

Этот инженер учится устойчиво (и соблюдает Безопасность), а также активно учится, оттачивая свои навыки (следуя Интенсивности). Но даже несмотря на то, что они начали курс несколько месяцев назад, они не достигли многого. Без последовательности мы окажемся безрезультатно, только разочарование.

Часто при запуске нового проекта наступает период медового месяца. Вам просто не терпится уйти после изучения нового навыка, и вы уделяете ему время каждый день. Но через некоторое время вы попадаете в препятствие, или в жизни происходит что-то, что заставляет вас пропустить день. Один день превращается в два и так далее, пока через несколько недель вы не вернете его обратно и не сможете вспомнить, где вы были.

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

Наконец, что происходит, когда у нас есть Безопасность и Согласованность, но не хватает интенсивности?

Медленный прогресс

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

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

Таким образом, нет ничего плохого в медленном прогрессе, но вы должны знать, что если вы добавите немного интенсивности в микс, это может значительно улучшить ваши результаты. Но иногда забавно работать над чем-то медленно в течение длительного периода времени.

Приведу нетехнический пример из своей личной жизни. Мне посчастливилось прожить в Корее 6 месяцев и полностью сосредоточиться на изучении корейского языка. Я ходил на занятия, читал по-корейски, смотрел корейское телевидение, разговаривал с местными жителями в метро и даже старался думать только по-корейски. Это была очень высокая интенсивность, но дала мне отличные результаты; За это время я поднял свои знания корейского языка с нуля до среднего уровня.

В настоящее время я изменил свои приоритеты, поэтому я не изучаю корейский с таким же рвением. Тем не менее, я все еще хочу поддерживать и улучшать этот навык, время от времени изучая новые словарные слова или грамматику. Для этого я использую italki, чтобы проводить 30-минутные занятия каждую неделю. Этот Медленный прогресс отлично подходит для меня сейчас, хотя я действительно хочу повысить свою интенсивность в будущем, чтобы добиться реальной беглости.

Еще один способ поддерживать свой корейский - разговаривать со своим 8-месячным сыном только на корейском, так что, надеюсь, он это поймет. И он может выучить английский в свободное время! 😂

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

Вот и все! Безопасность, Последовательность и Интенсивность - это 3 принципа, которым я рекомендую следовать при освоении новых технических навыков. Что замечательно, вы можете применить эти принципы к любым навыкам разработки программного обеспечения, которые хотите улучшить!

Помните об этом и желаю удачи в выполнении всех ваших новогодних решений!

Спасибо Хуану Лашерасу, Дэвиду Роудсу, Расселу Косовски и доктору Дженни Морана Ким-Косовски, которые предоставили информацию и отзывы на черновики этого сообщения.