Как стать автором
Поиск
Написать публикацию
Обновить
109.52
МойОфис
Экосистема офисных решений

Уже не джун, но знаний нужно всё больше. Как самостоятельно учиться сложным вещам

Время на прочтение6 мин
Количество просмотров12K
Автор оригинала: Julia Evans

Самостоятельное обучение для разработчика — процесс, который не кончается никогда. Это касается не только джунов, но и намного более опытных мидлов и сеньоров. Однако возникает вопрос: все ли мы умеем учиться правильно? Как преодолеть свою инертность и научиться понимать сложные вещи? 

Один из важных моментов — это мышление роста, которое подразумевает замену убеждения «я плох в X» на «я еще не узнал о X». Конечно, позитивный настрой помогает, но, одного его явно недостаточно, особенно на длинной дистанции. Обучение — это навык, над которым нужно упорно работать. Под катом разработчик и автор Джулия Эванс рассмотрит конкретные приемы, которые помогут вам стать более эффективным учеником. В частности — как превращать свое незнание в конкретные вопросы, которые приведут к решению задач и получению новых знаний.

*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис.


Как научиться учиться?

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

  • когда я была ребенком, то 7 лет занималась математикой по методике Kumon, которая нацелена на самостоятельное изучение предмета. Так я освоила всю программу начальной и средней школы — от умножения до алгебры и математического анализа. Думаю, это было важно, и я благодарна своей маме (она помогает детям учиться самостоятельно уже более 20 лет) за то, что она направила мою учебу в нужное русло;

  • я получила степень по фундаментальной математике, и в процессе мне было важно иметь четкое представление о том, что я понимаю, а что — нет;

  • я посещала Recurse Center — образовательное сообщество для тех, кто хочет улучшить навыки программирования, состоящее из самостоятельных учеников;

  • я разработчик, а в этой сфере, как вы знаете, постоянно узнавать что-то новое — один из важнейших навыков. :)

Вот еще пара вещей, которые, как мне кажется, могут развить умение учиться:

  • домашнее обучение или школа c большим акцентом на инициативу и самостоятельный ресерч;

  • получение PhD — конечно, если это нужно для вашей работы.

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

Но, хватит о математике. Перейдем непосредственно к тому, чему посвящена моя статья — давайте разберем некоторые навыки обучения.

Первый навык: поймите, что вы не понимаете

Я считаю этот навык одним из самых важных. Это умение трансформировать «я запутался, я не понимаю» в «у меня есть конкретный вопрос по X».

Например, когда я изучала Rust, меня очень смущали ссылки и заимствование. Мне потребовалось время, чтобы разобраться, почему случился этот затык, но в конце концов я поняла, что просто не знала, как ответить на вопросы ниже (ответы можете посмотреть в другой моей статье — What's a reference in Rust?):

  • что на самом деле означает символ & в Rust?

  • как определить, что переменная выделяется в stack, а не в heap? И всегда ли возможно это определить?

  • как избежать установки времени жизни для моих структур в Rust?

Как только я ответила на эти вопросы, то стала гораздо лучше понимать все, что касается ссылок и заимствования. Как следствие — проблемы с написанием кода в Rust уменьшились.

Первый навык (продолжение): определить, что вы не понимаете очень и очень важно, но ужасно трудно

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

  • попросить кого-то найти мою проблему за меня, а это — почти неосуществимо;

  • найти курс / статью в блоге / книгу, где кто-то уже разложил по полочкам все, что мне нужно;

  • решить не разбираться со сложными и запутанными вещами — это было бы настоящей катастрофой.

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

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

Второй навык: будьте уверены в своих знаниях

Конечно, одним определением того, что вы не понимаете дело не ограничивается. Также важно адекватно оценивать багаж ваших знаний. Например, я не знаю все о сетевых технологиях. Но в одном я уверена на 100% — существует 65 535 портов TCP. Поля src/dest портов в TCP-заголовке состоят из 16 бит (2^16 = 65 536), так что для других портов там просто нет места.

Знания, в которых я не сомневаюсь, очень важны, когда я пытаюсь разобраться в сложной проблеме. Например, представьте, что программа выводит в логе «порт 1 823 832». Это не потому, что количество портов мистическим образом увеличились, а я просто глупая и не знаю об этом. Нет! Просто в программе ошибка, и порта 1 823 832 не существует. Конечно, пример слишком детский, но мне постоянно приходится отлаживать сложные проблемы, и если бы я не была уверена в том, что знаю, мне бы пришлось бы терять время и действовать наугад.

Если и тратить в таком случае драгоценные часы, то на суперполезную вещь, а именно — взять часть информации, в которой вы уверены («всего есть 65 535 портов, так сказала Википедия») и сделать ее железобетонной («это потому, что поле порта в заголовке TCP состоит всего из 16 бит»). Ведь существует огромная разница между «я на 97 % уверен, что это правда» и «я уверен в этом на 100 % и никогда больше не должен в этом сомневаться». На то, что я знаю на 100 %, гораздо легче положиться.

Третий навык: задавайте вопросы

Речь о том, чтобы взять то, что вас смущает (например, «в чем разница между TLS 1.3 и 1.2?»), и превратить это в вопросы. Если что — вот моя статья о том, как задавать правильные вопросы.

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

  • поиск нужных групп в Slack или нужных IRC-каналов / рассылок;

  • задавать вопросы на Stack Overflow (что у меня никогда не получалось).

Четвертый навык: ресерч!

Что для этого нужно уметь делать:

  • гуглить;

  • знать, где найти самую полезную документацию в вашей области;

  • иметь или находить книги, в которых есть нужная информация. Stack Overflow — не панацея. Если у меня сложности с Linux, я часто обращаюсь к книге Michael Kerrisk The Linux Programming Interface, вместо того, чтобы лазить в сети;

  • читать исходный код — когда другие перечисленные источники не помогают.

Я не знаю ни одного хорошего руководства по методике технического ресерча. Хотя, думаю, что это было бы чертовски полезно — знания и нужная информация рассыпаны по разным источникам, каналам и носителям (мануалы, книги, рассылки и т.д.). Какая-то документация РЕАЛЬНО профессиональнее и, следовательно, полезнее другой. Было бы неплохо, чтобы в поисках можно было на что-то ориентироваться.

Пятый навык: признайте, что тупик — верный знак того, что скоро вы узнаете что-то новое

И последнее, что оказалось для меня очень важным — умение распознавать моменты, когда передо мной встают какие-то проблемы, и не расстраиваться из-за своей мнимой глупости («О нет! Я не знаю этого! Катастрофа!»), а признавать, что это НОРМАЛЬНО и означает, лишь то, что я просто собираюсь чему-то научиться!

Мне нравится учиться. Так что если наваливаются сложности, и я перестаю что-то понимать, это — хорошо, потому что означает, что у меня не будет стагнации и застоя. Вот, как это выглядит, по шагам:

  1. Я признаю, что запуталась.

  2. Четко определяю тему, с которой возникла сложность.

  3. Превращаю свое замешательство в конкретные вопросы.

  4. Спрашиваю у кого-то или изучаю вопрос сама, чтобы получить ответы.

  5. Готово — я узнала что-то новое!

Конечно, это не универсальная схема и я поступаю так не каждый раз. Иногда я просто отмечаю: «Ага, меня смущает Х. Возможно, я разберусь в этом когда-нибудь, но не сегодня». И это тоже нормально! Обучение — это проект длинною в жизнь :)

Работа над этими навыками имеет огромное значение

Я не думаю, что смогла бы сделать карьеру программиста, если бы не вкладывалась в изучение новых вещей. Почти все, из чего состоит моя рутинная работа, я узнала сама, и многое из этого — совсем недавно (в последние 2-3 года). Поэтому я без остановки стараюсь улучшать свои познавательные навыки. Вот некоторые из них, где я еще не дотягиваю до идеала, но очень этого хочу:

  • брать большой/сложный кусок документации с открытым исходным кодом и определять, какая информация в нем есть, а какой — нет;

  • эффективнее пользоваться группами в Slack/IRC с открытым исходным кодом;

  • искать полезные и надежные справочники, на которые можно опереться.

Теги:
Хабы:
Всего голосов 23: ↑21 и ↓2+21
Комментарии3

Публикации

Информация

Сайт
myoffice.ru
Дата регистрации
Дата основания
2013
Численность
1 001–5 000 человек
Местоположение
Россия
Представитель
vvanomad