Это казалось нелогичным.

Как-то зимним вечером, стоя в Barnes & Noble, я пролистал учебник под названием Беги меньше, беги быстрее.

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

Все предвзятые сомнения вскоре были отброшены.

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

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

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

Я призываю вас сделать то же самое.

Преимущества кросс-тренинга того стоят.

Новый контекст

Я начал свою практику кросс-тренинга с курса формальной логики.

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

  • правда И правда = правда
  • истина ИЛИ ложь = истина
  • истина И ложь = ложь

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

Как и курс логики, математика дает еще одну среду для развития моих навыков логического мышления. По ходу дела я улучшаю свои навыки решения проблем.

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

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

Исключительный способ решения проблем

Первый - это практика понимания проблемы, что является ключевым.

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

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

Работа над математическими задачами дает еще один объектив, позволяющий практиковаться в реальном понимании проблемы, а это полдела.

Математические задачи, как и задачи по программированию, для меня начинаются одинаково.

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

В то же время решение математических задач дает возможность практиковаться в обращении к деталям - нужным деталям в нужное время.

Это очень важный навык, которому нужно научиться.

Отличные решатели проблем обладают сверхъестественной способностью фильтровать: они, кажется, инстинктивно знают, какие детали важны, а какие - нет. Кажется, они также знают, что сейчас важно.

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

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

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

Это похоже на вождение в родном городе по сравнению с поездкой за границу; последнее заставляет задуматься немного больше.

Вот почему решение математических задач является отличной тренировкой для кросс-тренинга: оно бросит вам вызов по-новому.

Интуиция программиста

Недавно я начал изучать JavaScript и наткнулся на еще один метод перекрестного обучения: решение задач на новом языке.

Я применяю те же тактики и стратегии решения проблем, которые использую для решения проблем Python в JavaScript.

Тот же процесс, новая настройка.

Что меня удивило в этой методике кросс-тренинга, так это то, что она дала много других преимуществ.

Вопросы утилизации

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

Вот пример. Я обнаружил, что постоянно использую map (), filter () и reduce () в JavaScript.

Мне это было интересно, потому что я почти не использовал их в Python. Я знал о них, но это был редкий день, когда я решил использовать reduce () в Python.

На этой неделе я был шокирован, работая над проблемой Python, и инстинктивно обратился к функции reduce (). После нескольких недель использования его в JavaScript у меня возникла идея использовать его в Python.

Я помню, как подумал: «Здесь отлично подойдет reduce ()». И это было.

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

Вот что случилось со мной.

Перекрестное обучение в JavaScript позволило мне чувствовать себя комфортнее и увереннее, используя map (), filter () и reduce (), несмотря на язык.

Действительно, то, что вы изучаете и используете в одном контексте, вы можете применить в другом. И в процессе вы разовьете интуицию программиста.

Примите борьбу

Еще одно преимущество перекрестного обучения другому языку - это борьба.

То, что легко в Python, сложнее в JavaScript, по крайней мере, сейчас, потому что это ново. Даже самые маленькие задачи могут быть трудными.

Возьмем сортировку списка по возрастанию. Я относительно часто сортирую списки в Python, и мне не нужно слишком много думать об этом. Это удобно. Знакомо. Я делал это много раз.

Однако в первый раз, когда я отсортировал массив в порядке возрастания в JavaScript, у меня возникли проблемы.

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

В этом есть огромная ценность: это заставляет вас мыслить иначе и стратегически. В результате вы оттачиваете свои навыки решения проблем.

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

Пожинать плоды

Чтобы воспользоваться преимуществами кросс-тренинга, нужно быть последовательным.

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

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

Заметил это при запуске и при программировании. Тренировки на велосипеде дали моим ногам отдохнуть от платного бега на колени. После целого дня езды на велосипеде я был готов вернуться к бегу.

Точно так же обучение математике и JavaScript помогает программировать свежо и интересно. Это вопрос практики в новой среде и развития логического мышления по-другому.

Прежде всего, кросс-тренинг выводит вас из зоны комфорта, в которой происходит настоящее обучение и рост.

Я пишу об обучении программированию и о том, как это лучше всего делать ( amymhaddad.com).

Эта статья изначально была опубликована на сайте amymhaddad.com.