Это казалось нелогичным.
Как-то зимним вечером, стоя в 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.