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

В данной статье не будет разбираться тема выбора сферы деятельности. Акцент сделан на том, как настроиться на обучение и организовать себя.

Предусловие

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

* В некоторых местах будут мои наблюдения и мысли, буду помечать их префиксом Философия

Если кратко:

  1. Ставим долгосрочные цели (с прицелом на ~ 5 лет), короткосрочные цели ( с прицелом на год) и составляем план их реализации

  2. Регулярно практикуемся

  3. Подбираем материал для изучения

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

  5. Учимся гуглить

  6. Заставляем себя выбираться из "зоны комфорта" и состояний "я и так все знаю"

Если подробно:

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

  1. Цены и планы

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

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

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

    Как ставить цели:

    • Цель должна быть реалистичной. Например:

      Плохой пример: Я через год хочу иметь миллион доллларов

      Хороший пример: Я через год хочу работать java-разработчиком и получать ежемесячно 200 тысяч рублей.

    • Цель должна быть описана подробно до мельчайших деталей, будто мы уже ее достигли. Например:

      Плохой пример: Я через год хочу иметь квартиру.

      Хороший пример: Я через год хочу иметь квартиру в своей собственности без обременений ипотеки. Квартира будет площадью 60 квадратных метров и находиться во Фрунзеском районе рядом с метро Купчино. Моя кухня будет в бежевых тонах.
      У меня будет игровая изолированная комната с неоновым освещением (как у про стримеров), гостинная в цвете темного дерева, большим диваном и домашним кинотеатном и спальня так же в цвете темного дерева.

    Это 2 основных принципа, которых стоит придерживаться.

    Философия
    все, что я описала, связано с фразой "Все мысли материальны". Исходя из личного опыта фраза правдива и работает.

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

    Для интересующихся нейропсихологией советую обратить внимание на серию книг автора Джо Диспенза про подсознание, а так же на книжку автора Джона Кехо Подзознание может все

    Как составлять план реализации целей:
    Для составления плана лучшим вариантом будет использовать уже готовый "Roadmap" (это не то, что продают игровые студии в 2022 году за реальные деньги)
    Roadmap - это дорожная карта, описание тех технологий, которые востребованы

    Возьмем например Roadmap для java разработчика на 2022 год

    Дорожная карта java разработчика
    Дорожная карта java разработчика

    Мы видим почти готовый план. Чтобы стать java разработчиком нам нужно выучить Синтаксис, понять что такое ООП, узнать про классы и библиотеки, познакомиться с базами данных и так далее.

  2. Практика

    Данный раздел поставлен вторым так как в программировании практика это самый важный аспект. Без практики не будет результата (для программирование это актуально).

    Тут есть ряд факторов:

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

    • Не по принуждению, а по желанию (не 'надо', а 'хочу')
      Писать код это по любви) На мой взгляд специалистами через силу не становятся. Программирование ДОЛЖНО нравиться.
      * Если на протяжении нескольких месяцов ощущаешь, что обучение всегда проходит через силу, возможно стоит рассмотреть другие сферы. Постоянно находиться в состоянии "отрицания" невозможно. Выгорание очень быстро настигнет и обучение сойдет на 0 на долгое время.

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

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

      Философия Для решения задач старалась придерживаться следующего порядка действий - проанализировать задачу, обдумать, отдать подсознанию и получить решение.

      Буквально с первых дней обучения подметила, что некоторые решения приходят ниоткуда. Потом данные ситуации стали повторяться чаще и сильно помогают и до сих пор. Фишка в том, что мозг умеет решать задачи, даже когда мы их не решаем.
      Совет: Если есть задачка, решение для которой не пришло сразу, то оставь ее, прогуляйся или займись чем-нибудь другим, отвлекись. Решение само придет чуть позже.

  3. Материал для обучения

    Для обучения (особенно для самостоятельного) нужна качественная, структурированная программа и применимая на практике.

    Источники, которыми пользуюсь:

    • Видео курсы на Udemy
      Можно подобрать курс по популярности и отзывам. На платформе есть превью видео. Кроме того, можно найти записи курсов на Youtube и ознакомиться как материал подается, как автор разговаривает и объясняет.

    • Видео курсы из пабликов
      Сейчас много материала гуляет по сети, например в телеграм. Можно найти качественный видео курс и начать обучаться по нему. Обязательно почитайте о выбранном курсе в интернете или спросите в том же источнике касательно качества и актуальности материала, у тех кто там обучается.

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

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

      Вне зависимости от того какой источник знаний выберте, не забывайте всегда конспектировать материал. Прописывать стоит не только код, но и записывать ревью пройденного материала, мысли по теме.

  4. Паблики в соцсетях

    Тут все очевидно, нужны материалы для изучения и необходимо быть в курсе нововведений, изменений.

    Паблики в телеграмм, или группы в вк, или настроенная лента новостей на Хабр, или лена на proglib и много других вариантов, где люди деляться своими мыслями, наблюдениями, советами. Ресурсы выбираем в соотвествии с той специализацией, которую изучаете.

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

    Паблики можно читать во время поездок на работу, чтобы дать пищу для ума.

  5. Поиск информации

    Еще один важный навык для работы программистом.

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

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

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

  6. Когда можно и нужно себя заставлять

    Зона комфорта

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

    Зона комфорта - враг вашего потенциала.

    Речь не идет о том, что не надо долго работать на одной работе. Нет.

    Хотя обычно переход на новую работу - это крутой стимул для развития.

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

    Почему это важно?

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

    Поэтому всегда следим за тем, чтобы было не сильно тепло.

    Я все знаю

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

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

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

Делитесь своими наблюдениями и опытом по самостоятельному, эффективному обучению.

Комментарии (16)


  1. killeralex
    26.12.2022 18:26
    +2

    Уважаемая Юлия) Какова, е честно, цель статьи? Сверить часы с самоизучающими? Предложить коучинг?

    2 В BigData от фонда Apache не хватает джавовских Camel, Flink, NiFi etc (например)

    3 Зона комфорта - враг развития. Слоган копирайтера или выпускника МГИМО. Мотивация, стартап - примерно оттуда же

    4 Hibernate это ORM для РСУБД. ORM не равно РСУБД. На mindmap тогда надо указать ветку ORM


    1. JuliWolf Автор
      26.12.2022 19:26
      -1

      цель поделиться знаниями и научиться писат. курсов у меня нет и создавать их не планирую)


  1. kichrot
    26.12.2022 18:33
    +2

    ... Ставим долгосрочные цели (с прицелом на ~ 5 лет), короткосрочные цели ( с прицелом на год) и составляем план их реализации ...

    Очень красиво. НО! :)

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

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

    Как правило подобная попытка оканчивается очень быстро, за отсутствием реальной мотивации.

    Это справедливо для любого самообразования, в любой сфере деятельности. :)


    1. JuliWolf Автор
      26.12.2022 19:29

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


      1. pharo
        26.12.2022 20:21

        Для решения задач старалась придерживаться следующего порядка действий — проанализировать задачу, обдумать, отдать подсознанию и получить решение.

        Можете привести список задач к решению в процессе освоения языка освоенных Вами и как они отбирались?
        Сделаны ли, при этом, какие то личные выводы по полученному опыту применения освоенных знаний о используемом языке?


        1. JuliWolf Автор
          27.12.2022 11:31

          У мня первым опытом была веб разработка
          по этапам:
          - база html css
          - синтаксис js
          - js es6
          - после чего делала что-то вроде заключительного учебного проекта с использованием всего, что выучила
          - vue js (тут тоже делала учебный проект для закрепления),
          - первая работа (на ней набивала знаний необходимых для работы)
          - продолжила изучать vue
          - новая работа (тут можно сказать план на год выполнился, потому что я получила планируемую зп)

          По выводам ->
          Нужно закреплять пройденный материал, учиться в пустоту по урокам без выполнения самостоятельного проекта не эффективно. И то что упоминала в статье, про реалистичность целей. Претендовать на зп 500к в месяц через год с начала обучения это не реалистично


    1. Zenitchik
      26.12.2022 21:07
      +2

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

      Это, конечно, главное, но не первоочередное. Сперва нужно изучить теорию и практику программирования - да, как мёртвый язык, на голом личном интересе. А потом - идея найдётся сама собой.

      Если этого не достаточно для "реальной мотивации" - то программист тоже получится не слишком реальный.

      И это справедливо для любого самообразования.

      UPD: А статья - действительно пустая. Прямо в духе Капитана Очевидность.


      1. JuliWolf Автор
        27.12.2022 12:48

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


        1. Zenitchik
          27.12.2022 18:55

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


  1. sshikov
    26.12.2022 19:23
    +4

    Автор, ваши планы довольно грамотные, но они наивны до безобразия. Всего один простой пример: я примерно 5 лет занимаюсь Hadoop, Spark и вот это вот все. И я до сих пор не могу сказать, что знаю огромную экосистему Hadoop и Spark хотя бы полностью, пусть местами и неглубоко. При этом у меня и до этого прилично опыта в этой индустрии, то есть и наши с вами начальные состояния несопоставимы.

    Вот вы реально думаете, что за год способны освоить Hadoop и Spark, при этом имея в плане еще десяток тем примерно такого же масштаба (например, Андроид)? Я уже не говорю, что разработка под Хадуп и разработка под Андроид как правило вообще не пересекаются.

    Урежьте осетра. Если это правда план на год — выкиньте нижнюю половину своей картинки, примерно на уровне чуть ниже паттернов. Ну и так, по мелочи — зачем вам три IDE? Чего вы хотите добиться, изучив все три? Хвастать в резюме? Так ведь никто не оценит. Как уже выше отметили, цель всего вот этого осталась не очевидной.

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


    1. JuliWolf Автор
      26.12.2022 19:31

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


      1. sshikov
        26.12.2022 19:54

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


  1. JordanCpp
    26.12.2022 21:33
    +1

    Ага, учишь, пишешь код до кровавых мазолей. Читаешь уйму полезной и не очень литературы. Ругаешься на форуме и доказываешь, что Java ещё торт. Пишешь статьи на хабре о Java и о всех кругах ада пройденных тобой, что бы стать супер эджайл сеньер nehuhri джава девелопер. А потом перекладываешь из одного json'a в другой:)


  1. Emulyator
    27.12.2022 10:31

    все, что я описала, связано с фразой "Все мысли материальны". Исходя из личного опыта фраза правдива и работает.

    И что же конкретно вы вкладываете в три слова выделенные жирным? )


  1. Mishootk
    27.12.2022 13:06

    Не увидел вывода о результате. "Написать программу" не равно "создать продукт".
    Работать на должности программиста и получать за это деньги не обозначает, что вы научились создавать продукт.


    1. JuliWolf Автор
      27.12.2022 14:27

      Цели могут быть разные, почему обязательно целью должно быть "Создать продукт" ?