Развиваем в себе разработчика или путешествие длиною в жизнь

развиваем Полезные рекомендации для тех, кто начал или собирается развивать в себе разработчика.

Это перевод статьи Марсина Дрозд, занимающегося продвижением веб-приложений, развитием идей и поддержкой стартапов в команде Ragnarson уже несколько лет. Статья больше похожа на дневник, поэтому читать ее особенно приятно и увлекательно.

Вступление

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

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

Вы спросите: откуда же я пришел? Что ж, в этой истории нет ничего необычного для нашего сурового времени. Я работал на большие корпорации, координируя работу других техников, которые пытались починить сломанный сервер в одной точке земного шара из другой. Звучит не особо впечатляюще. Я всегда чувствовал, что меня тянет к приключениям. Когда приходилось делать что-то особенно тягомотное в конце недели, я безумно хотел создавать что-то действительно интересное и особенное. Я слышал зов мира кодинга, но я опасался, что в нем не найдется места для меня, человека без какого-либо опыта за спиной. Однако, однажды я решил воспользоваться этим шансом… Давайте начнем.

На распутье

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

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

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

К счастью, найти людей, способных дать действительно дельный совет, вполне реально. Возможно такой человек затесался среди ваших друзей. Тогда выбирайте этот путь. Но и отсутствие боевого товарища - не повод оставаться дома. Подумайте о том, что вам на самом деле интересно (веб, мобильные приложения, игры, различные математические проблемы). Это наверняка ограничит список направлений для начала путешествия и даст вам возможность рационально мыслить при выборе стартовой позиции. В таком случае, вы можете познакомиться с языками, которые вам интересны, в общих чертах. Пройдите краткий курс, поиграйте с синтаксисом. Посмотрите на сообщество (их веб-сайт, может быть, какие-то YouTube-каналы, доступные обучающие материалы). Но не слишком вдавайтесь в подробности. В каждой области количество доступных вам вариантов для изучения примерно случае равно.

Урок: Поиграв с разными вариантами, выберете одну и придерживайтесь ее.

Заложите фундамент

Возможно, это звучит очевидно, но чрезвычайно полезно сначала изучить основы, а потом погружаться глубже. Это может оказаться тяжелой задачей, ведь зачастую мы слишком нетерпеливы и хотим взобраться на самую высокую гору, а не разминаться на холмике. Мне часто кажется, что мы пропускаем темные углы, предпочитая пользоваться яркими фреймфорками, не заостряя внимания на языке, на котором они написаны. Поначалу это кажется классной идеей, но в долгосрочной перспективе это не лучшее решение. Я обнаружил, что на практике удобнее сначала выучить язык, который управляет фреймворком (вкратце: учите Ruby перед Rails, учите JavaScript перед React и так далее). Так вы поймете, как работают многие вещи по отдельности, и как они взаимодействуют друг с другом. Если вам вдруг захочется свернуть со своего пути на другой, вы во многом уже будете готовы к переходу с одного фреймворка на другой, к тому же многие умения в одном языке применимы и в других. Помимо этого, ваши знания будут расти, и когда придет время для улучшения или починки какой-то части фреймворка, познания в языке серьезно облегчат вам работу.

Вы потратите время с пользой, если используете его для изучения основных принципов программирования. Они не зависят от языка, но позволят вам увидеть картину в целом. Сюда входят: принципы Объектно-Ориентированного Программирования (ООП), функционального программирования, SQL, ключевые моменты при работе с другими людьми (этого можно добиться с помощью прочтения книг или эссе, посвященных командной разработке). Эти знания пригодятся, в какое бы путешествие вы ни отправились. Помните, что порой вам будут попадаться задачи, слишком сложные для вашего нынешнего уровня. Я и сам зачастую пытаюсь откусить кусок, который не смогу прожевать, но все равно может оказаться полезным узнать новые имена (например, паттерны дизайна), чтобы понимать, о чем говорят все остальные. Да и вы всегда можете вернуться к книге, которая показалась вам слишком сложной раньше.

Урок: Изучать языки до фреймворков и вкладываться в общие принципы.

Познайте себя

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

Важный фактор при изучении чего-то – выход из зоны комфорта. Чрезвычайно просто привыкнуть к комфорту, которое предоставляет ваше рабочее окружение, и перестать пробовать что-то другое, потому что все и так хорошо, правда? Вы уже знакомы со всем необходимым, и вас вряд ли что-то удивит. Зачем рисковать, если сейчас и так все в порядке? Ну, если вы решите жить в пузыре, то как же узнаете о том, что что-нибудь красивое может оказаться прямо за поворотом? Нужно лишь слегка сменить угол обзора и попробовать то, что увидите. К тому же, когда вы изучаете что-то и знаете это достаточно хорошо, может появиться чувство «переудовлетворенности». В программировании ничто не стоит на месте, поэтому, чтобы оставаться в тренде, важно все время выходить из зоны комфорта и пробовать что-то иное.

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

Урок: Выберете удобную для вас технику обучения и выходите из зоны комфорта.

Просто не останавливайтесь

Я уже давно в пути. Кажется, что я уже далеко от дома, но до цели еще дальше. Иногда вы отчаиваетесь, иногда устаете, особенно тогда, когда моменты удовлетворения редки и коротки. Поначалу все кажется простым, однако вскоре вы приходите к точке, в которой все внезапно усложняется, вам кажется, что вы вообще не продвигаетесь и никогда не достигнете поставленной цели. Это нормально. Другие путешественники чувствуют то же самое (я понял это на собственной шкуре). Если вы боретесь, значит, на самом деле, идете вперед. Если вы не чувствуете боли, значит не ставите перед собой достаточно сложные задачи, и единственный способ снова начать расти – сделать шаг в неизвестность.

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

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

Урок: Будьте настойчивы и не сдавайтесь.

картинка о равзитии

Нарисуйте карту

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

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

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

Запланировать перерывы тоже довольно важно. Мы не роботы (к сожалению, пока нет, но я все еще гуглю возможности встраивания кибер-глаз или кибер-рук). Попробуйте составить план наград за выполнение задач до дедлайнов (такой наградой может быть все что угодно: новая видеоигра, пара обуви или что-то еще, что будет приятно именно вам). Возможно, однажды шанс узнать что-то сам по себе станет мотивацией для обучения.

Но не переусердствуйте. Будьте с собой не слишком критичны и придерживайтесь составленной системы.

Урок: Будьте систематичны, следите за целями.

Пробуйте

Эксперименты в неизвестности не всегда заканчиваются хорошо. Вы можете найти вкуснейший плод, но есть вероятность того, что это клубникоподобный куст-убийца, поджидающий вас в засаде. К счастью, это маловероятно в программировании, поэтому пробовать что-то новое – зачастую хорошая идея. Ученые все время экспериментируют (я просто обожаю фильмы, где они взрывают целые лаборатории, случайно смешав неправильные ингредиенты), дети тоже учатся методом проб и ошибок. И вы тоже можете облегчить свое обучение с помощью него.

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

Побольше читайте книги не только о новых, но и о старых языках – это действительно полезно. Я уверен, что это написано во введении ко многим книгам, поэтому поверьте и мне, и им. Выписывайте примеры, которые они приводят. Что-то поменяйте, что-то добавьте, а потом сломайте что-нибудь. Все еще работает? Тогда подумайте, как это соотносится с тем, что вы уже успели понять. Не будьте пассивными.

Это же применимо к огромным базам кода. Попробуйте найти что-то интересное на Github (или на StackOverflow – прим. переводчика) – скачайте, дополните, посмотрите, как изменилась работа программы, и снова экспериментируйте. Так вы значительно повысите скорость обучения. Каждый путь наполнен кусочками и обрывками битв, через которые проходили и другие путники до вас. Используйте и учитесь на их опыте.

Попробуйте прочесть свой код, написанный ранее. Это может открыть вам глаза на некоторые вещи (посмотрите чудесный пост от Девида). К тому же положительные эмоции, вызванные вашим прогрессом, станут толчком для ускорения обучения.

Урок: Будьте активнее, читайте код и экспериментируйте.

Смотрите на мир с широко открытыми глазами

Когда вы попадаете в новое место, вокруг всегда происходит множество вещей. Не бойтесь их, они могут принести вам много полезного опыта. Вы скорее всего встретите других путешественников, жаждущих поделиться своими знаниями (порой они могут быть даже слишком привязаны к своему пути и будут яро доказывать, что он самый лучший). Слушайте каждого из них и старайтесь понять их точку зрения. Не критикуйте пути других. Все они одинаково важны. Это особенно верно для новичков, которые не знают, что хорошо, а что плохо. А повторять слова другого человека без хорошей базы знаний будет просто глупо. Вы просто останетесь в дураках, когда на вопрос по этой теме, вам будет нечего сказать, кроме как «так сказали на таком-то форуме».

Как только вы поймёте, в каком направлении вам идти (по моим подсчетам на это нужно потратить около года, но все зависит от самого путешественника), добавьте что-то необычное в свое расписание. В классической книге утверждают, что необходимо учить по одному новому языку каждый год. Конечно, в совершенстве овладеть каким-либо навыком за такой короткий срок довольно трудно, но изучение других путей расширит ваше видение мира программирования. Попробуйте заняться чем-нибудь из совершенно другой области, которая вам тоже интересна. Только не отвлекайтесь на это в самом начале.

Мы учимся друг у друга, выбираем лучшее и используем в своей жизни, чтобы сделать ее проще и понятнее. Слушайте как можно больше, читайте как можно больше, впитывайте окружающий мир. Будьте губкой. Познакомивший с одним путем, выберете другой. Может быть совершенно другой (например, функциональное программирование против объектно-ориентированного). Даже неудачные идеи очень поучительны (или даже более поучительные, чем удачные). Ведь летающие машины тоже когда-то казались бредом.

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

Урок: Откройтесь новому.

Уважайте старших

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

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

Но имейте уважение. Многие люди хотят поделиться своим опытом, потратить на вас свое время, а время – высшая ценность. Задавайте осмысленные вопросы, когда застрянете на какой-то проблеме, покажите, что уже попробовали. Это сохранит время обеим сторонам, поскольку ментор не будет отвечать на вопросы, с которыми вы разобрались самостоятельно. Также это покажет другим, что вы не ищете легких путей, а действительно трудитесь над решением задачи.

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

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

Урок: Уважайте людей, которые хотят вам помочь.

Поделитесь своей историей

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

Вы можете присоединяться к группам путешественников, с которыми идете по одному пути (но и те, с кем вы разминулись на развилке, будут рады видеть вас в своих рядах), вы можете делиться с ними своими страхами, радостями, успехами и неудачами. Не разорвите эту цепь. Помогите другим путешественникам своими собственными заметками, собственной информацией или практическим советом. Быть может вы спасете кому-то жизнь (я имею в виду время). К тому же вы укрепите и свои знания. Ведь для хорошего объяснения чего-то другим, нужно овладеть этим в совершенстве. Поэтому вы сразу увидите пробелы и заполните их. Помимо прочего довольно приятно слушать благодарности за решение проблемы или совет о том, каким путем пойти.

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

Если вы боитесь выступать перед большой аудиторией, попробуйте поделиться своими знаниями с мужем/женой, девушкой/парнем, собакой/рыбкой (такого опыта с кошкой у меня не было, поэтому не могу с уверенностью сказать, насколько они хорошо слушают в сравнении со спокойным партнером). Им необязательно быть такими же путешественниками, как вы. Если вы можете объяснить что-то о программировании человеку без технических знаний, вероятность того, что вы поймете этот мир действительно высоки.

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

Урок: Делитесь знаниями и опытом.

Под конец

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

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

Оригинал статьи доступен по ссылке.

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
Продуктовый аналитик
Екатеринбург, по итогам собеседования
Продуктовый аналитик в поддержку
по итогам собеседования
DevOps
Санкт-Петербург, от 150000 RUB до 400000 RUB

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ