Перевод статьи Уолта Шлендера «Why you learn the most when you feel like you’re struggling as a developer».
Мои навыки разработчика получали наибольшее развитие именно тогда, когда мне было трудно что-то изучить, но я не сдался. Это не всегда было просто.
Когда встречаешься со сложными проблемами в инженерии ПО, очень легко опустить руки. Порой мне хочется все бросить. В такие моменты моя рациональная часть придумывает причины, по которым мне лучше заняться чем-то более знакомым, или просто убеждает, что мне с этими задачами не справиться.
Я знаю, что я такой не один.
Я видел обсуждения на Reddit, где люди рассказывают о проблемах в учебе. Мне часто доводилось общаться с профессиональными инженерами, сомневающимися в своих способностях понять сложные идеи, которые их коллеги ловят на лету (так им кажется).
И хотя это не просто, но способность выстоять перед лицом подобных проблем очень ценная.
Постепенно я выработал несколько ментальных стратегий, которые помогают мне пережить эти трудные времена. Вот несколько из них.
1. Человек развивается как разработчик, когда тяжело работает и прикладывает усилия
Что делает разработчика хорошим? Талант или тяжелая работа? Кто-то просто рождается отличным разработчиком или все-таки всем приходится прилагать усилия?
Я думаю, узнать точный ответ на этот вопрос не получится, поэтому предпочитаю верить, что человек становится хорошим разработчиком благодаря своим стараниям.
Такая точка зрения более полезна. Она предполагает, что если я очень сильно хочу что-нибудь изучить, я смогу это сделать, если буду упорно трудиться.
Это также означает, что я должен заранее принять, что не всегда мне будет легко или интересно. Требуется тяжелый труд.
2. Делать что-то в первый раз может быть сложно – и никто не ожидает, что у вас сразу все получится хорошо
Будучи программистом, я часто переживаю, когда сталкиваюсь с чем-то, чего не понимаю. Мне кажется, что я должен это понимать.
Было время, когда я попал в компанию, где использовался git и я был окружен git-экспертами. Также была ситуация, когда я понял, что мои навыки работы с SQL оставляют желать лучшего.
В каждом из этих случаев часть меня чувствовала, что я должен иметь эти навыки на хорошем уровне. Ведь я же full-stack инженер сеньорского уровня, с годами опыта.
Но дело в том, что никакое количество опыта не может изменить реальность: я впервые изучаю эти вещи детально, и поначалу я не так уж хорош ни в одной из этих сфер.
Хотя порой новые вещи усваиваются легко, так бывает не всегда. Я считаю полезным осознавать, что от меня никто и не ждет немедленных выдающихся результатов.
Что-то вроде:
«Я никогда не писал код на Java – нечего и рассчитывать, что сразу получится. Именно поэтому я записался на эти курсы».
«Я никогда раньше не коммитил код в git-репозиторий, так откуда же мне знать, как это делается? Именно поэтому я прошу коллег о помощи».
Такой образ мыслей подавляет тот внутренний голос, который нашептывает, что я недостаточно хорош и непременно потерплю поражение. Конечно, провалы возможны, и, очевидно, я не так уж хорош. Именно поэтому я стараюсь стать лучше.
3. Работа с кодом не всегда увлекательна, но даже если задача не интересная, она все равно должна быть решена
Порой в разработке встречаются задачи, которые меня не увлекают.
Какой-нибудь кусок кода для обработки данных в моем Spark-кластере приводит к рандомным отказам. Какая-то библиотека, которая должна бы работать, – не работает, что бы я ни делал.
Такие моменты не приносят удовольствия. Честно говоря, иногда я предпочел бы заняться чем угодно, лишь бы не пытаться разобраться в происходящем.
Но дело в том, что я знаю: программирование не всегда является увлекательным занятием. Порой надо просто закатать рукава и «сделать дело».
И хотя это трудно, я обнаружил интересный факт: мы больше всего узнаем, разбираясь как раз с подобными тяжелыми случаями.
4. Встречаясь с самыми сложными проблемами, вы эффективнее всего учитесь. При этом поражение в подобных случаях тоже нормально.
Пытаясь сделать что-то, слишком тяжелое для меня, я чувствую, что на самом деле учусь.
Перед глазами встают десятки примеров.
Впервые взяв в руки книгу по программированию, я «страдал» над ней, пока, наконец, не научился писать код.
Однажды я пытался создать крупное приложение. Я бился над этим, пока не обнаружил архитектурные фреймворки и не изучил шаблоны проектирования. На этом этапе пришлось перечеркнуть месяцы программирования и начать заново, с помощью шаблонов перестроив приложение за несколько недель.
Был еще случай, когда я наконец взялся и на самом деле выучил SQL. После этого мои навыки уже позволяли работать с командой, занимавшейся наукой о данных в моей компании.
Как-то я пытался спроектировать инфраструктуру обработки данных нашей компании с использованием технологий веб-приложений. В процессе работы я изучил, что такое озера данных, ETL-конвейеры и распределенные вычислительные решения.
Список можно продолжать.
В каждом из этих случаев были свои болезненные моменты. Я выбрасывал огромное количество кода. Я испытывал разные вещи и переживал множество провалов.
Но при этом я приобрел много новых навыков и как разработчик стал лучше. А если бы эти проблемы мне не встретились, то я бы так и не узнал множество вещей.
Теперь я предпочитаю считать, что переживание стресса, напряженная работа над проблемами и некоторая нервозность это хорошо. Мне трудно – значит, я учусь.
Разум это мощный инструмент
Ваши убеждения могут помочь вам преодолеть сложности, с которыми вы неизбежно столкнетесь, совершенствуясь как разработчик. А во что верить, вы выбираете сами.
Надеюсь, эти ментальные установки (или какие-нибудь из ваших собственных) помогут вам на вашем пути. Не сдавайтесь. Идите вперед. Не понимая что-нибудь, продолжайте усердно работать и пытаться понять. И тогда сами будете удивляться своим способностям.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]