Я изучаю программирование и нашел наиболее эффективный способ обучения

7

Этот текст написан в Сообществе, в нем сохранены авторский стиль и орфография

Аватар автора

Руслан Садиков

Страница автора

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

Коротко о себе, меня зовут Руслан, мне 16, с 14 лет занимаюсь программированием, с 15 начал более осознанно продвигаться по части backend-разработки на Java. Сейчас готовлюсь к прохождению собеседования на позицию junior-разработчика и для этого много повторяю теорию и изучаю что-то новое. Хочу поделиться тем, как я это делаю и почему нахожу такой подход простым и в то же время очень эффективным.

Мой способ

Программирование — это знание очень большого объёма информации и умение его применять. Перед изучением любого направления и языка всегда советуют составлять так называемый roadmap, поэтапную дорожную карту к пути становления младшим разработчиком. Сначала мы изучаем базовые вещи про программирование в целом, потом переходим к выбранному языку, дальше к библиотекам, фреймворкам, базам данных и т.д. Это все надо изучать как на теории, так и на практике. Из каждого угла мы слышим совет, что не стоит углубляться в теорию и больше уделять время практике. Действительно, без практики теория бесполезна, но и в практику без теории лезть, по моему мнению, дело очень рискованное и трудное. Можно просто потерять время впустую, пытаясь работать с вещами, не зная, как они устроены.

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

Теперь про то, как я изучаю теорию, а потом практикуюсь.

Теория

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

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

Практика

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

А что собственно писать? Вот я изучил Apache Kafka, но как мне ее применить? Я лично либо придумываю какую-то свою идею, где можно было бы использовать Kafka, либо начинаю исследовать проекты других, смотря, как люди его используют, и могу позаимствовать идею у них, опять же не занимаясь переписыванием их кода. Иногда можно обратиться к ChatGPT, который может предложить действительно интересную практику для изученной технологии.

У кого спросить совета

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

На этом в целом-то все. Безусловно, каждому свое, для кого-то, возможно, мой подход покажется слабым и не подойдет. Главное, не бояться пробовать и всегда двигаться только вперёд. Спасибо за внимание!

  • АйтишникДоМозгаКостейРазговор 2-х преподавателей: - Ну и группа мне в этом году попалась тупая! - А что так? - Представляешь себе, объясняю теорему - не понимают! Объясняю второй раз - не понимают!! В третий раз объясняю. Сам уже понял. А они не понимают... (С) Так что да, когда объясняешь выученный материал, даже самому себе, он лучше усваивается. Эффективнее может быть только объяснение кому-то другому, и чтобы этот другой еще и вопросы задавал. Удачи!2
  • Никита ЗиминАйтишникДоМозгаКостей, когда автор будет конкурировать с сотней (спасибо, что не React, иначе бы было парой тысяч) таких же стажеров, пет проект ему сильно поможет. Во-первых, это реальный опыт, на котором он набьет шишки и прокачается, во-вторых будет что показать в гите, в-третьих будет что обсудить на собеседовании. С учетом того, что в 16 лет найти работу будет околонереально, это вполне себе хороший вариант. Впрочем, я не из тех людей, кто считает, что пет проекты прямо обязательный атрибут. У меня за столько лет в IT у самого пустой гит, и я считаю это нормальным. Если я и найду время писать сторонний проект, то он пойдет в закрытый репозиторий.2
  • Я из МиссуриВо первых - у вас отличные начинания и желаю вам в них успехов! Но позвольте немного критики и советов. Я уже почти 10 лет работаю java разработчиком и учился тоже самоучкой. Не знаю, кто придумал название, вы или редакция, но адресуя тому кто придумал - больше так не делайте :) Если тут "наиболее эффективный способ", то надо писать научную статью и получать грант, иначе это просто жёлтый заголовок. Программирование - это в первую очередь глубокое понимание принципов, умение быстро найти нужную информацию и разобраться с новой. Новые технологии клепают быстрее чем кто либо может их изучать, термин "знание" тут не очень подходит. При собеседованиях, особенно на джуна, гораздо важнее не то что вы знаете, а то как вы думаете. Не все сеньеры смогут сходу ответить как конкретно работает HashMap. Но хорошего разработчика отличает то, что он понимает как может быть устроена такая структура. Я например на своём последнем собеседовании не смог точно сказать, как обрабатывается совпадение хешей, но понимания принципов мне хватило чтобы почти "заново изобрести" его. Хороший способ, по моему мнению, чтобы такое понимание получить - это всегда изучать "а какую проблему эта технология решает". Например многострадальный хибернейт, который многие (включая меня) ненавидят. Можно много читать о том как с ним работать, даже работать с ним, но так и не понимать полностью, а зачем он нужен. Поэтому - изучайте проблему. При изучении новой технологии задавайте себе вопрос - "А зачем она? Какую проблему она решает?". Поймите, возможно даже попробуйте, как решить эту же самую проблему без этой технологии? Например - а как забить гвоздь без молотка? Ну, например, камнем. Но неудобно же! Тогда изучая молоток, у вас сразу в голове появится - ага, длинная ручка для большего рычага, камень у нас на конце, чтобы увеличить точность можно взяться поближе к наконечнику.4
  • Я из МиссуриЯ, ну и ещё пару советов обо всем: Учите английский и привыкайте читать информацию на нём, самые полезные и нормальные ресурсы именно на английском. Отличная идея учебного проекта - агрегатор информации из разных источников. Найдите что вам нравится, например - компьютерные игры. Вы можете написать проект, который будет парсить несколько источников с новостями о выходе новых игр, сохранять себе и выводить в понятном виде. Тут вам и асинхронная обработка внешних данных, и работа с БД. Расширять можно как душе угодно - разбейте на микроснрвисы, чтобы один собирал данные а другой отдавал, сделайте обновления в прямом эфире. Приделайте бота в телеграм который будет вам отправлять новости. Добавьте мониторинг. Добавьте мобильное приложение. Полюбите ide, учитывая что уже изучаете Кафку, думаю уже полюбили, но для остальных изучающих кто наткнется - много уроков по необъяснимой причине предлагают сначала есть кактус и работать с блокнотом и компилятором. Пользы от этого ноль - сразу берите ide (в случае java это jetbrains). И работайте с ней. Если будут какие вопросы пишите, помогу чем смогу) ShawarmaEatOwls в тг.0
  • Руслан СадиковОгромное спасибо за советы, обязательно их учту. Название изначально было другое, редакция ее изменила. Очень понравилось, как вы описали на примере, почему важно изучать проблемы. И да, идея с агрегатором очень интересна, спасибо!2