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

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

YouTube

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

Некоторые ютуберы говорят для меня слишком медленно, и если содержание не слишком сложно для понимания, я ускорю видео. В настройках видео вы можете увеличить скорость видео до 2,0x от исходной скорости. Обычно я устанавливаю его на 1,25x или 1,5x и замедляю его для более сложных тем.

Я запустил свой собственный канал программирования под названием Path To Programming. Я начинаю с серии видео о проекте Budget Tracker, который я разрабатываю.

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

Середина

Около 6 месяцев назад я начал подписку на Medium. Я в основном читаю статьи о программировании. Таким образом, большинство статей, которые появляются в моей ленте, будут способствовать моему обучению. Всякий раз, когда я сижу дома, мне нравится просматривать и читать статьи по программированию. Когда я работаю с новой технологией, я буду искать ее напрямую. Мне также нравится читать статьи Dzone, Baledung и Mkyong. Я очень рекомендую эти блоги.

Подкасты

Я люблю слушать подкасты. Они являются отличным источником информации в дороге. У меня есть 45 минут в пути утром и вечером, пока я еду на работу. Я также могу использовать это время для обучения. Мое любимое занятие в поезде — слушать подкасты. Слушать подкаст о кодировании может показаться странным, но на самом деле он очень эффективен для изучения новых тенденций в индустрии программного обеспечения.

Вот все подкасты, которые я слушаю, в порядке личных предпочтений:

  1. CodeNewbie
  2. Фрагментированный
  3. Герои командной строки
  4. Время идти
  5. Реагирующий подкаст
  6. Чай разработчика
  7. Программирование
  8. Программная инженерия ежедневно
  9. если еще
  10. Здоровый разработчик программного обеспечения
  11. Говорящий Котлин
  12. Еженедельные советы разработчикам
  13. Набор инструментов программиста

Я рекомендую вам просмотреть хотя бы 6 лучших. Просмотрите эпизоды и выберите тот, который вам близок. Если вам интересна история компьютеров и программирования, ознакомьтесь с «Героями командной строки». Прослушивание этого подкаста дало мне так много информации о мире программного обеспечения, которое существовало до того, как я присоединился к индустрии.

Твиттер

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

Реддит

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

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

  • r/java
  • r/mongodb
  • r/ProgrammerHumor
  • r/programming
  • r/Kotlin
  • r/softwaregore
  • r/learnprogramming
  • r/React

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

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

Персональные проекты

Я создал веб-сайт электронной коммерции, размещенный на Heroku, с использованием Spring Boot и Thymeleaf. Я создал этот проект с членом семьи, который был заинтересован в переходе на разработку программного обеспечения. Одна из вещей, которые я узнал из этого проекта, заключалась в том, как использовать Spring Security для принудительной аутентификации с помощью веб-токена JSON (JWT) из внутреннего API Rest.

Я создал приложение для Android для системы управления персоналом. Я использовал Kotlin, Firebase, Koin, AndroidX и Mockk. Я никогда раньше не использовал ни одну из этих технологий, но смог работать над проектом, изучая то, что мне нужно, чтобы научиться создавать продукт.

Мой текущий личный проект — это приложение для отслеживания бюджета, использующее MongoDB и Spring Boot для серверной части и React для внешнего интерфейса.

Работа над проектом требовала от меня копать достаточно глубоко, чтобы все заработало. Я учился, пытаясь решить бизнес-задачи приложения. Если я не знал, как что-то сделать, я смотрел видео, читал статьи и исследовал вопросы StackOverflow, пока не мог решить стоящую передо мной проблему.

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

«Прагматичный программист» Энди и Дэйва

Первое издание Pragmatic Programmer вышло в 2000 году. В прошлом году я сделал предзаказ на второе издание Pragmatic Programmer. Я недавно закончил его и знаю, что стал лучшим разработчиком благодаря этому. Эта книга о том, как программисты должны думать и подходить к миру разработки программного обеспечения. Сценаристы призывают разработчиков быть профессионалами и мастерами своего дела. Я думаю, что буду читать эту книгу до конца своей карьеры. Вот насколько полезна эта информация.

Чистый код Роберта С. Мартина

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

Экстремальное программирование, объясненное Кентом Беком

Эту книгу мне подарили, когда я впервые пришел в компанию, в которой работаю. Мы используем экстремальное программирование (XP), поэтому требуется, чтобы новые разработчики прочитали эту книгу. Даже если вы не используете XP, полезно посмотреть, как работают другие программные дисциплины. XP — это больше, чем просто TDD и парное программирование. Существуют ценности и убеждения, которые необходимо поддерживать, чтобы быть эффективными в этой дисциплине. Кент Бек посетил нашу компанию, чтобы поговорить о программировании. Он кажется действительно хорошим человеком, которому интересно узнать о людях и программном обеспечении.

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

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

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

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

Вскрытие

Вскрытие — это собрание, на котором группа людей размышляет о серьезном сбое, произошедшем в их продукте. Мое единственное вскрытие произошло через год после начала моей карьеры, когда я был якорем в команде API, использующей базу данных MySQL в качестве источника данных.

Однажды утром наша база данных дала сбой, и мы не были готовы к тому, как с этим справиться. Мы не знали, к кому можно обратиться, чтобы решить проблему, и мы даже не были уверены в точном местонахождении нашей базы данных, чтобы сообщить этим людям, где искать. Не зная, что есть лучшие решения, мы как группа решили запустить совершенно новую базу данных и запустить процесс ETL для загрузки данных (50 миллионов записей) из нашего централизованного источника данных DB2. Этот процесс занял более 4 дней. Наше промежуточное приложение не работало все это время, что не позволяло другим командам, использующим наш API, тестировать свои новые изменения функций.

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

Я не могу написать эту статью, не отдав должное разработчикам, с которыми я работал. В моем портфолио мы ежедневно объединяем программы и часто меняем команды. Это дало мне возможность работать со многими разными разработчиками. Я всегда задаю вопросы, когда чего-то не понимаю или вижу что-то новое, что они сделали. Я почерпнул множество техник, стилей кодирования и многое другое, работая с другими разработчиками. Если вы еще не пробовали парное программирование, я рекомендую вам найти разработчика, более опытного, чем вы, и объединиться с ним над проектом. Кто знает…? Вы можете научить их чему-то новому.

StackOverflow — это веб-сайт, на который я часто натыкаюсь. Когда появляется сложная ошибка, сообщение об ошибке или библиотека, я погуглю, и в большинстве случаев есть StackOverflow с ответом. Но как часто вы отвечали на вопрос в StackOverflow? Я обнаружил, что всегда беру у сообщества, поэтому решил начать отдавать. Обычно я ищу Java, Spring, Mockito, Kotlin и JUnit. Я просматриваю вопросы, пока не нахожу тот, на который я уверен, что смогу ответить. Даже если я не знаю ответа сразу, небольшое исследование или отладка их проблемы в моей IDE обычно дает мне достаточно, чтобы помочь им. Поначалу на StackOverflow может быть сложно что-либо сделать из-за их системы ранжирования. В начале ищите действительно простые вопросы и убедитесь, что вы отвечаете первым. Со временем вам будет предоставлено больше свободы для комментариев, оценки вопросов и ответов других, а также для выполнения других действий, таких как вознаграждение за публикацию. Наблюдение за тем, как другие люди используют технологии и пишут код, помогает мне стать лучшим разработчиком. Я могу учиться на их ошибках или видеть ошибку, которую никогда раньше не видел.

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

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

Архитектура программного обеспечения

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

Системный дизайн

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

Мягкие навыки

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

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

Всякий раз, когда я вижу интересную библиотеку или фреймворк или у меня появляется идея о новом проекте для работы, я делаю заметку об этом в приложении «Заметки» на своем телефоне. Недавно я перенес этот список на доску Trello и работал с ним.

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

Что может быть лучше, чем учиться у себя, верно!?

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

Первоначально опубликовано на https://www.path-to-programming.tech 25 июля 2020 г.