Как быстро выучить сложные вещи: руководство

Какбыстровыучитьсложныевещируководство

За мои 20 + лет в качестве программного обеспечения инженер, меня постоянно просили или ожидали узнать сложные вещи. В своей книге Deep Work , говоря об экономике знаний, автор Кэл Ньюпорт пишет: «Если вы не можете учиться, вы не сможете процветать». Запускаются новые языки и платформы, к проектам предъявляются новые требования, библиотеки и фреймворки выпускают новые версии ⁠ – в программном обеспечении единственная константа – это изменения. Друг, который недавно начал новую работу, спросил: «Есть какие-нибудь советы, которые помогут мне быстро изучить этот новый ландшафт?» Когда я отправил ему несколько очень грубых мыслей, он сказал, что они «золотые», и призвал меня опубликовать их для всеобщего обозрения ⁠— Надеюсь, другие сочтут их хоть немного полезными.

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

  • Разбейте все, что вы пытаетесь изучить, на варианты использования. Начните с небольших кусков, которые займут несколько минут, и продолжайте их развивать. постепенно. «Изучение питона» – это слишком широко. Установка python, печать hey world, установка и использование зависимости, чтение из файла и т. Д. Более четко определены, и их легче узнать, когда вы закончили, что помогает закрепить прогресс.
  • Подумайте, сколько вам нужно научиться, чтобы достичь каждого. Может быть полезно объединить вещи в «нужно знать больше» и «пока пропустить подробности». Например, я не знаю, как работает управление зависимостями Python, но я могу положиться на его работу и добиться прогресса без этого знания.
  • Начни с того, что попробуй что-нибудь . Возможно, вы испугаетесь, что что-то напортачите, но, по моему опыту, компьютеры сломать довольно сложно. Используйте ментальные модели, о которых вы уже догадываетесь, как это может работать. В противном случае вы можете отвечать на сообщения об ошибках.
  • Делайте перерывы . Если вы в ритме и путешествуете, во что бы то ни стало ⁠ – держитесь в потоке. Но если вы обнаружите, что теряете пар, двигаетесь боком или перебираете старую землю, дайте своему мозгу отдохнуть. Если вы определили свои цели небольшими шагами, вы сможете уйти, чувствуя, что достигли некоторого прогресса, и дать своему мозгу время обработать то, что вы узнали.
  • Получите суть . Если вы что-то изучаете с помощью опубликованной документации, прочтите вступление, первый и последний абзацы каждого раздела / главы и первое предложение каждого абзаца, а также любые предоставленные образцы кода. Если вы запутались, вернитесь немного назад и при необходимости углубитесь.
  • Обратите внимание на призывы . Выноски и подсказки могут быть действительно полезными. Они часто предоставляются в местах, где легко ошибиться.
  • Создайте список «Прочтите позже» . Мне часто бывает любопытно, как работает связанная часть системы, но я откладываю это, если это не то, что мне нужно знать для выполнения варианта использования, на котором я сосредоточен. Я храню список чтения в своем приложении todo, но есть много решений.
  • Используйте руководства по началу работы Это мое исключение из правила «просто беги по ней». Руководства по началу работы обычно предназначены для людей, только начинающих свое обучение, и призваны дать вам только достаточно информации для выполнения одного варианта использования. Не просматривайте их ⁠ – прочтите все и следуйте приведенным примерам. Проверьте GitHub на наличие шаблонных проектов.
  • Это больше, чем просто документы . Видео, подкасты и прямые трансляции могут быть ценным способом передачи информации, если они существуют. Поэкспериментируйте с разными носителями и найдите то, что вам подходит. Работайте над просмотром / прослушиванием с двукратной скоростью, но снижайте скорость для интересных частей.

Значит, вы доверились своему чутью и только начали, но тут же наталкиваетесь на препятствие. Возможно, это команда не найдена , NullPointerException или 1186 на веб-странице. Как получить дополнительную информацию из системы?

  • CLI помощь. Большинство интерфейсов командной строки (CLI) возвращают некоторое содержимое для справки , – справка или -час. Могут быть полезные подсказки относительно аргументов и их порядка.
  • Погрузитесь в логи . Большинство систем будут записывать некоторые выходные данные либо в стандартный вывод на консоли, либо где-нибудь на диске. Чтение журналов может быть похоже на чтение истории о том, что система пытается сделать.
  • Увеличьте многословие . Если вы читали журналы и не уверены, в каком направлении идут дела, попробуйте увеличить подробность вывода / журналов. Часто можно найти полезные подсказки и новые области для исследования, которые помогут приблизиться к проблеме.
  • Ищите сообщения об ошибках. Другие могли столкнуться с той же проблемой, и вы можете найти руководство на сайте вопросов и ответов, например, на Stack Overflow, обсуждениях или форумах поддержки, или открытых проблемах в GitHub. Убедитесь, что вы цитируете сообщение об ошибке, и попробуйте удалить части, относящиеся к вашему варианту использования, по сравнению с более общими.
  • Прочтите исходный код . Если у вас есть доступ к исходному коду системы, его чтение может помочь вам понять, как система ожидает обработки вашего варианта использования. Не пытайтесь понять каждую строку, но используйте имена классов и методов в качестве сигналов для системных существительных и глаголов. Для внутренних инструментов, у которых нет хороших журналов, документации или справки, это может быть единственным вариантом. Не уверены, что это открытый код? Попробуйте поискать библиотеку в диспетчере пакетов вашего языка (npmjs.org для Node.js, pypy.org для python и т. Д.) Или попробуйте «GitHub {язык программирования} {имя пакета}» в своей любимой поисковой системе.

Совет : дайте себе временные рамки, чтобы ваше расследование не превратилось в нескончаемую экскурсию. Уменьшайте размер своего тайм-бокса по мере того, как вы чувствуете себя комфортно с системой. Если вы в чем-то новичок, уделите себе несколько часов. Если вы живете в системе несколько месяцев, уменьшите это до 15 минут.

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

  • Документация (см. RTFM)
  • Часто задаваемые вопросы
  • Форумы сообщества
  • История чата
  • Поиск

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

  • Что вы пытаетесь достичь?
  • Какого поведения вы ожидали, что вы наблюдали?
  • Что вы пробовали?
  • Каков ваш контекст выполнения? (ОС, версии, плагины и т. Д.)
  • Вот (более ранний) пример из реальной жизни: https://github.com/Kong/kong/issues/ 1186
  • Обобщайте и делитесь тем, что вы узнали – это хорошая привычка для всех работников умственного труда
  • Где Вы потратили время, которое не помогло вам приблизиться к своей цели?
  • Что бы облегчило вам повторное обучение ?
    • Пояснения к документации ? Изменения интерфейса?
    • Вы можете исправить их (внутренний или открытый исходный код) ) или предложить изменения, чтобы облегчить обучение будущих учеников?

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

А теперь иди и узнай что-нибудь новое!

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