хочу научиться программированию с нуля самостоятельно с чего начать

10 способов научиться программировать самостоятельно

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

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

10. Выясните, почему вы хотите программировать

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

9. Выберите правильный язык программирования

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

Язык, с которого стоит начать, зависит от причины изучения. (К примеру, если вы хотите создать приложение под iOS, вам лучше начать с изучения Swift). Если вы со всей серьёзностью отнеслись к намерению программировать, можно начать с языка C. Хотя выбрав Python, вам будет проще влиться в струю программирования.

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

8. Начните с малого… и будьте терпеливы

Независимо от выбора языка или метода обучения, вам следует начать с самого начала. Когда Дэвид Сински (David Sinsky) научился программировать за восемь недель, он, к примеру, потратил одни выходные на изучение основ Python, а другие — на Django. Взяв учебник, он удалял написанный код и снова проходил обучающий материал с нуля. Начните с основ и будьте терпеливы к себе. Взяв первый проект в программировании, разделите его на несколько этапов. И если один из способов обучения вам не подходит, не опускайте руки — попробуйте другой.

7. Попробуйте приложения для детей

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

Онлайн-курсы, чтобы начать программировать:

6. Воспользуйтесь бесплатными онлайн-тренингами

Бесплатные онлайн тренинги и проекты (Codecademy, Hour of Code и др.) могут помочь вам в написании первой программы. Учебные пособия от Khan Academy, Codecademy, Code.org и других познакомят с основами программирования и всем необходимым для создания игры, сайта или другого проекта. Найдите нужный источник в зависимости от языка программирования, воспользовавшись Bento. Это хорошая отправная точка, однако дальнейшее обучение вам нужно взять на себя.

5. Пройдите онлайн-курс

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

4. Бесплатные книги по программированию

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

Смотрите подборки книг по Python и Java на Литрес

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

3. Изучайте, играя

Иногда лучшим способом обучения являются игры. В то время, как многие учебники по программированию обучают вас программировать простые либо сложные игры, некоторые обучающие сайты сами являются играми: Code Combat и CodinGame — инструменты, используя которые вы можете весело провести время.

2. Найдите наставника или станьте им

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

1. Разберите чужой код

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

Обзорные курсы по программированию:

Источник

Как научиться программировать на любом языке

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

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Разобраться в мотивации

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

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

У программистов рутинная и механическая работа, и к этому нужно быть готовым. Правда, некоторые разработчики почему-то обижаются, когда их занятие не ассоциируют с творчеством. Тогда они находят красоту в коде: «О, вот эта реализация очень красивая». Странно это слышать, поскольку реализация либо работает, либо нет, а красота кода — от лукавого.

Приводим два экспертных мнения насчет того, является программирование творчеством или нет. Директор центра по подбору специалистов SymbioWay Даниил Пилипенко полагает, что это зависит от задачи:

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

Определиться с языком

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

Начать можно со статистики на известных порталах, в мировых рейтингах и личных топах независимых разработчиков. Мы сравнили данные за 2018 год на некоторых из них.

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

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

Практиковаться на реальных проектах

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

Если у вас пока нет работы программиста, начинайте писать свой стартап-проект. Разумеется, из этого ничего не выйдет — в 99,99% случаев так и происходит. Зато вы получите бесценный опыт и «потрогаете» программирование своими руками.

Искать работу с первых шагов

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

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

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

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

Развиваться вне рабочих задач

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

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

Изучайте блоги разработчиков — отечественные и англоязычные, — читайте статьи на «Хабре» и других ресурсах, следите за новостями фреймворка, с которым работаете.

Делать код-ревью

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

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

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

Учиться на основе последних тенденций

Старайтесь получать опыт, работая с самыми современными технологиями. Например, в случае с PHP нужно практиковаться на фреймворках, а не на LAMP — наборе программного обеспечения из Linux, Apache, MySQL и PHP. Первые сейчас популярны и быстро развиваются, а второе — пережиток прошлого.

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

Например, на событии выступает спикер из «Яндекса», рассказывая, что они стали хранить файлы иначе, чем раньше. Он не объяснит в деталях, что нужно делать, — лишь обозначит тезисы. Слушателям самостоятельно нужно вникнуть в тему и узнать, как реализовывать это.

Вот несколько широко известных профильных конференций для разработчиков:

Компании EPAM, «Яндекс», Google и другие, а также столичные вузы часто проводят бесплатные митапы для всех желающих.

Мероприятия полезны разработчикам, на них можно не только научиться новому, но и просто пообщаться, считает ведущий курса по Python в Skillbox Вадим Шандринов:

— Во-первых, можно отдохнуть и поесть пиццы. Без комментариев. Во-вторых, поговорить с другими программистами, расспросить, как они работают, поудивляться. И иногда возникает “вау”-эффект: а что, так можно было? По-новому смотришь на свои решения, переосмысливаешь их. В-третьих, на конференциях выступают спикеры, рассказывают о новинках и своих подходах к решению задач. Это очень помогает, когда хотел бы изучить новую библиотеку, но нет времени. А тут тебе всё рассказали, к тому же можно задать вопросы.

Заключение

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

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Автор в сфере IT, digital, экономики и финансов. Ведет некоммерческий проект для начинающих писателей «ЛитЦех».

Источник

Как правильно изучать программирование: метод Франклина

Главная проблема в самообучении — отсутствие системного подхода. Трудно понять, что учить в первую очередь, а что во вторую, и в каком порядке.

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

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

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

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Пишет про разработку в Skillbox. Работал главным редактором сайта «Хабрахабр», ведет корпоративные блоги.

Самообучение

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

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Самоучитель хорош тем, что быстро погружает в тему. Вы начнете кодить практически в тот день, когда открыли книжку. Но, как говорит преподаватель Джеймс Коппел из Массачусетского технологического института, есть одна проблема: эти книги ничему не учат. Главное там — длинные листинги кода, которые читатель должен воспроизвести.

Как и в конспектах университетских лекций, «код переходит со страницы книги на экран читателя, минуя мозг». Студенты, которые слушают обычные лекции, на 55% чаще проваливают экзамен, чем те, кто участвовал в обсуждении материала, пусть даже немного.

Метод Франклинa

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

Этот метод очень прост на практике.

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

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

Лекции и литература

Освоив метод Франклина, ищите информацию, которая бесплатно доступна в интернете в огромном количестве, особенно на английском языке. Вкратце план действий такой:

Образовательные ресурсы с курсами и лекциями

Учебная литература

Самоучители для начинающих

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

Программа обучения. Системный подход

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

Программа обучения «Профессия веб-разработчик» рассчитана на один год и включает в себя три модуля:

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

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

Базовые навыки PHP

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

Система платная, но зато она повышает шансы на успешный результат. А результат — это престижная, востребованная и высокооплачиваемая профессия с интересными проектами и перспективами развития.

Заключение

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

Источник

Как научится программированию с нуля или советы для «Чайников»

Программировать — это просто.

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

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

Почти все умеют использовать компьютер. Но только некоторые люди сделали следующий шаг и научились контролировать компьютер.

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

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

Хотите научится программировать но здесь стоит вопрос «как?» то для вас у меня есть пара очень простых ответов на них

Зачем уметь программировать? У каждого «зачем» может быть свое. Но без «зачем» все остальное просто бесполезно. Хорошее «зачем» это если вам интересно и хочется научиться, еще лучшее «зачем» — если нужно решить какую-то конкретную задачу.

Вы хотите начать программировать. Вы уже что-то сделали. Как минимум, вы читаете этот текст. Многие люди просто хотят научиться, и ничего с этим не делают. Но Вы уже сделали несколько шагов на пути к умению программировать.

У вас есть желание, и я надеюсь, что у вас есть и «зачем». То есть я надеюсь, что вы знаете зачем вам уметь программировать. Потому что без «зачем», дальше идти будет сложно

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

Что дальше? Теперь у вас уже есть инструмент, с помощью которого вы будете решать вашу задачу. У вас есть сама задача. Теперь нужно ее решить.

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

Очень хороший инструмент программиста — это поиск в интернете. Я использую Google И если я не знаю как мне сделать конкретную вещь, то обычно за 1-2 запроса в гугле, я нахожу как это сделать и пробую все это применить.

И если вы выбрали для себя ЯП Python то я советую вам почитать книгу Майкла Доусона «Программируем на Питоне» это очень хорошая книга для «Чайников».

Использовать компьютер, умеют 2 из 10 (а не просто в инете котиков смотреть).

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

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

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

Я продолжаю отвечать на вопросы из комментариев своих подписчиков. Задавая их вы помогаете проекту развиваться. Началось всё здесь

Немного о причинах

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

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

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

Разберем каждый случай отдельно.

Разработчик успешно прошел собеседование потому, что задачи были легкие.

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

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

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

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

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

Немного о более ранних причинах

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

Мой канал в Telegram, где я помогаю новичкам изучать веб-разработку: https://t.me/LearnRubyForPikabu

Уже 37 моих подписчиков дошли до получения работы.

Добро пожаловать всем желающим.

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

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

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

1. Вместо отказа на вакансию назовите цифру в 2-3 раза больше предлагаемой.

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

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

2. Помогайте новичкам.

3. Учите английский язык.

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

Подводя итог всему сказанному важно понимать что все люди ошибаются.

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

Мой канал в Telegram, где я помогаю новичкам: https://t.me/LearnRubyForPikabu

Уже 37 моих подписчиков дошли до получения работы.

Добро пожаловать всем желающим.

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Легла в направлении своей мечты

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

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

Я очень люблю игры, настольные, видео, и имеется у меня одна мечта — это создавать видео игры, тут хочу уточнить, что создавать я бы хотела не как геймдизайнер или левелдизайнер и не рисовать окружение, спрайты и т.д. А именно программировать их. После изучения различных движков, решила, что для меня идеально подойдёт Unity и соответственно C#. До этого изучала Python (правда поработать на нем не удалось, ну и ладно), наверное, благодаря этому многие моменты мне пока понятны. Хотя начало всегда легкое. Я не буду описывать какое сильное у меня желание попасть геймдев, просто скажу, что 11 из 10.

Что я нашла для своего обучения:

• Курс по Unity. Создание 2D платформера – буду проходить после курсов С#.

• Complete C# Unity Game Developer 2D – возьмусь после прохождения курсов описанных выше.

Нашла сайт с задачами для начинающих по C#, так как считаю, что с помощью задач, хорошо закрепляются пройденные материалы, плюс узнаёшь что-то новое.

• Unity и C# Геймдев от идеи до реализации, 2-е издание.

• Геймдизайн, как создать игру, в которую будут играть все.

• «Новый уровень!» Руководство по геймдизайну.

• Проектирование виртуальных миров. Теория и практика дизайна уровней.

• Кровь пот и пиксели – книгу уже прочитала, очень она понравилась, хорошо снимает розовые очки, что в игровой индустрии всё гладко и хорошо показывает, как много бывает кранча при создании игр.

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

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

По мимо всего этого занимаюсь английским языком, читаю Гарри Поттера на английском, плюс прохожу курс сайте inSpeak. Не скажу, что знаю английский хорошо, но техническую документацию уже понимаю процентов на 60-70. Хуже с разговорным английским. Но, надеюсь, он не так важен, как чтение документации.

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

Вроде бы всё. Через неделю поделюсь своими результатами.

Надеюсь, на вашу поддержку. Всем хорошего вечера и приятных выходных.

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Лайфхак, чем больше вы поймёте, тем меньше придётся запоминать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Вот уже на протяжении нескольких лет Тимофей, преподаватель кафедры информатики МФТИ, выкладывает свои лекции по программированию на своём Youtube канале с открытым доступом.

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Разработка системы заметок с нуля. Часть 2: REST API для RESTful API Service + JWT + Swagger

Продолжаем серию материалов про создание системы заметок. В этой части мы спроектируем и разработаем RESTful API Service на Go cо Swagger и авторизацией. Будет много кода, ещё больше рефакторинга и даже немного интеграционных тестов.

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

Подробности в видео и текстовой расшифровке под ним.

Начнём с макетов интерфейса. Нам нужно понять, какие ручки будут у нашего API и какой состав данных он должен отдавать. Макеты мы будем делать, чтобы понять, какие сущности, поля и эндпоинты нам нужны. Используем для этого онлайн-сервис NinjaMock. Он подходит, если макет надо сделать быстро и без лишних действий.

Страницу регистрации сделаем простую, с четырьмя полями: Name, Email, Password и Repeat Password. Лейблы делать не будем, обойдемся плейсходерами. Авторизацию сделаем по юзернейму и паролю.

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

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Интерфейс, который будет у нашего веб-приложения:

— Слева — список категорий любой вложенности.

— Справа — список заметок в виде карточек, который делится на два списка: прикреплённые и обычные карточки.

— Каждая карточка состоит из заголовка, который урезается, если он очень длинный.

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

— Тело заголовка — отрендеренный Markdown.

— Панель инструментов. Через неё можно изменить цвет, прикрепить или удалить заметку.

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

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

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Так будет выглядеть открытая заметка

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

Для страниц авторизации и регистрации нам нужны эндпоинты аутентификации и регистрации соответственно. В качестве аутентификации и сессий пользователя мы будем использовать JWT. Что это такое и как работает, разберём чуть позднее. Пока просто запомните эти 3 буквы.

Для страницы списка заметок нам нужны эндпоинты /api/categories для получения древовидного списка категорий и /api/notes?category_id=? для получения списка заметок текущей категории. Перемещаясь по другим категориям, мы будем отдельно запрашивать заметки для выбранной категории, а на фронтенде сделаем кэш на клиенте. В ходе работы с заметками нам нужно уметь создавать новую категорию. Это будет метод POST на URL /api/categories. Также мы будем создавать новый тег при помощи метода POST на URL /api/tags.

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Чтобы обновить заметку, используем метод PATCH на URL /api/notes/:uuid с измененными полями. Делаем PATCH, а не PUT, потому что PUT требует отправки всех полей сущности по спецификации HTTP, а PATCH как раз нужен для частичного обновления. Для отображения заметки нам ещё нужен эндпоинт /api/notes/:uuid/files с методами POST и GET. Также нам нужно скачивать файл, поэтому сделаем метод GET на URL /api/files/:uuid.

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

Структура репозитория системы

Ещё немного общей информации. Структура репозитория всей системы будет выглядеть следующим образом:

хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть фото хочу научиться программированию с нуля самостоятельно с чего начать. Смотреть картинку хочу научиться программированию с нуля самостоятельно с чего начать. Картинка про хочу научиться программированию с нуля самостоятельно с чего начать. Фото хочу научиться программированию с нуля самостоятельно с чего начать

В директории app будет исходный код сервиса (если он будет). На уровне с app будут другие директории других продуктов, которые используются с этим сервисом, например, MongoDB или ELK. Продукты, которые будут использоваться на уровне всей системы, например, Consul, будут в отдельных директориях на уровне с сервисами.

Писать будем на Go

— Идём на официальный сайт.

— Копируем ссылку до архива, скачиваем, проверяем хеш-сумму.

— Распаковываем и добавляем в переменную PATH путь до бинарников Go

— Пишем небольшой тест проверки работоспособности, собираем бинарник и запускаем.

Установка завершена, всё работает

Теперь создаём проект. Структура стандартная:

— cmd — точка входа в приложение,

— internal — внутренняя бизнес-логика приложения,

— pkg — для кода, который можно переиспользовать из проекта в проект.

Я очень люблю логировать ход работы приложения, поэтому перенесу свою обёртку над логером logrus из другого проекта. Основная функция здесь Init, которая создает логер, папку logs и в ней файл all.log со всеми логами. Кроме файла логи будут выводиться в STDOUT. Также в пакете реализована поддержка логирования в разные файлы с разным уровнем логирования, но в текущем проекте мы это использовать не будем.

APIService будет работать на сокете. Создаём роутер, затем файл с сокетом и начинаем его слушать. Также мы хотим перехватывать от системы сигналы завершения работы. Например, если кто-то пошлёт приложению сигнал SIGHUP, приложение должно корректно завершиться, закрыв все текущие соединения и сессии. Хотел перехватывать все сигналы, но линтер предупреждает, что os.Kill и SIGSTOP перехватить не получится, поэтому их удаляем из этого списка.

Теперь давайте добавим сразу стандартный handler для метрик. Я его копирую в директорию pkg, далее добавляю в роутер. Все последующие роутеры будем добавлять так же.

Далее создаём точку входа в приложение. В директории cmd создаём директорию main, а в ней — файл app.go. В нём мы создаём функцию main, в которой инициализируем и создаём логер. Роутер создаём через ключевое слово defer, чтобы метод Init у роутера вызвался только тогда, когда завершится функция main. Таким образом можно выполнять очистку ресурсов, закрытие контекстов и отложенный запуск методов. Запускаем, проверяем логи и сокет, всё работает.

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

Создадим для приложения контекст. Сделаем его синглтоном при помощи механизма sync.Once. Пока что в нём будет только конфиг. Контекст в виде синглтона создаю исключительно в учебных целях, впоследствии он будет выпилен. В большинстве случаев синглтоны — необходимое зло, в нашем проекте они не нужны. Далее создаём конфиг. Это будет YAML-файл, который мы будем парсить в структуру.

В роутере мы вытаскиваем из контекста конфиг и на основании listen.type либо создаем сокет, либо вешаем приложение на порт. Код graceful shutdown выделяем в отдельный пакет и передаём на вход список сигналов и список интерфейсов io.Close, которые надо закрывать. Запускаем приложение и проверяем наш эндпоинт heartbeat. Всё работает. Давайте и конфиг сделаем синглтоном через механизм sync.Once, чтобы потом безболезненно удалить контекст, который создавался в учебных целях.

Теперь переходим к API. Создаём эндпоинты, полученные при анализе прототипов интерфейса. Тут важно отметить, что у нас все данные привязаны к пользователю. На первый взгляд, все ручки должны начинаться с пользователя и его идентификатора /api/users/:uuid. Но у нас будет авторизация, иначе любой пользователь сможет программно запросить заметки любого другого пользователя. Авторизацию можно сделать следующим образом: Basic Auth, Digest Auth, JSON Web Token, сессии и OAuth2. У всех способов есть свои плюсы и минусы. Для этого проекта мы возьмём JSON Web Token.

Работа с JSON Web Token

JSON Web Token (JWT) — это JSON-объект, который определён в открытом стандарте RFC 7519. Он считается одним из безопасных способов передачи информации между двумя участниками. Для его создания необходимо определить заголовок (header) с общей информацией по токену, полезные данные (payload), такие как id пользователя, его роль и т.д., а также подписи (signature).

JWT использует преимущества подхода цифровой подписи JWS (Signature) и кодирования JWE (Encrypting). Подпись не даёт кому-то подделать токен без информации о секретном ключе, а кодирование защищает от прочтения данных третьими лицами. Давайте разберёмся, как они могут нам помочь для аутентификации и авторизации пользователя.

Аутентификация — процедура проверки подлинности. Мы проверяем, есть ли пользователь с полученной связкой логин-пароль в нашей системе.

Авторизация — предоставление пользователю прав на выполнение определённых действий, а также процесс проверки (подтверждения) данных прав при попытке выполнения этих действий.

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

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

Реализация JWT в нашем APIService:

— Создаём директории middleware и jwt, а также файл jwt.go.

— Описываем кастомные UserClaims и сам middlware.

— Получаем заголовок Authorization, оттуда берём токен.

— Берём секрет из конфига.

— Создаём верификатор HMAC.

— Парсим и проверяем токен.

— Анмаршалим полученные данные в модель UserClaims.

— Проверяем, что токен валидный на текущий момент.

При любой ошибке отдаём ответ с кодом 401 Unauthorized. Если ошибок не было, в контекст сохраняем ID пользователя в параметр user_id, чтобы во всех хендлерах его можно было получить. Теперь надо этот токен сгенерировать. Это будет делать хендлер авторизации с методом POST и эндпоинтом /api/auth. Он получает входные данные в виде полей username и password, которые мы описываем отдельной структурой user. Здесь также будет взаимодействие с UserService, нам надо там искать пользователя по полученным данным. Если такой пользователь есть, то создаём для него UserClaims, в которых указываем все нужные для нас данные. Определяем время жизни токена при помощи переменной ExpiresAt — берём текущее время и добавляем 15 секунд. Билдим токен и отдаём в виде JSON в параметре token. Клиента к UserService у нас пока нет, поэтому делаем заглушку.

Добавим в хендлер с heartbeat еще один тестовый хендлер, чтобы проверить работу аутентификации. Пишем небольшой тест. Для этого используем инструмент sketch, встроенный в IDE. Делаем POST-запрос на /api/auth, получаем токен и подставляем его в следующий запрос. Получаем ответ от эндпоинта /api/heartbeat, по истечении 5 секунд мы начнём получать ошибку с кодом 401 Unauthorized.

Наш токен действителен очень ограниченное время. Сейчас это 15 секунд, а будет минут 30. Но этого всё равно мало. Когда токен протухнет, пользователю необходимо будет заново авторизовываться в системе. Это сделано для того, чтобы защитить пользовательские данные. Если злоумышленник украдет токен авторизации, который будет действовать очень большой промежуток времени или вообще бессрочно, то это будет провал.

Чтобы этого избежать, прикрутим refresh-токен. Он позволит пересоздать основной токен доступа без запроса данных авторизации пользователя. Такие токены живут очень долго или вообще бессрочно. После того как только старый JWT истекает мы больше не можем обратиться к API. Тогда отправляем refresh-токен. Нам приходит новая пара токена доступа и refresh-токена.

Хранить refresh-токены на сервере мы будем в кэше. В качестве реализации возьмём FreeCache. Я использую свою обёртку над кэшем из другого проекта, которая позволяет заменить реализацию FreeCache на любую другую, так как отдает интерфейс Repository с методами, которые никак не связаны с библиотекой.

Пока рассуждал про кэш, решил зарефакторить существующий код, чтобы было удобней прокидывать объекты без dependency injection и синглтонов. Обернул хендлеры и роутер в структуры. В хендлерах сделал интерфейс с методом Register, которые регистрируют его в роутере. Все объекты теперь инициализируются в main, весь роутер переехал в мейн. Старт приложения выделили в отдельную функцию также в main-файле. Теперь, если хендлеру нужен какой-то объект, я его просто буду добавлять в конструктор структуры хендлера, а инициализировать в main. Плюс появилась возможность прокидывать всем хендлерам свой логер. Это будет удобно когда надо будет добавлять поле trace_id от Zipkin в строчку лога.

Вернемся к refresh_token. Теперь при создании токена доступа создадим refresh_token и отдадим его вместе с основным. Сделаем обработку метода PUT для эндпоинта /api/auth, а в теле запроса будем ожидать параметр refresh_token, чтобы сгенерировать новую пару токена доступа и refresh-токена. Refresh-токен мы кладём в кэш в качестве ключа. Значением будет user_id, чтобы по нему можно было запросить данные пользователя у UserService и сгенерировать новый токен доступа. Refresh-токен одноразовый, поэтому сразу после получения токена из кэша удаляем его.

Для описания нашего API будем использовать спецификацию OpenAPI 3.0 и Swagger — YAML-файл, который описывает все схемы данных и все эндпоинты. По нему очень легко ориентироваться, у него приятный интерфейс. Но описывать вручную всё очень муторно, поэтому лучше генерировать его кодом.

— Создаём эндпоинты /api/auth с методами POST и PUT для получения токена по юзернейму и паролю и по Refresh-токену соответственно.

— Добавляем схемы объектов Token и User.

— Создаём эндпоинты /api/users с методом POST для регистрации нового пользователя. Для него создаём схему CreateUser.

Понимаем, что забыли сделать хендлер для регистрации пользователя. Создаём метод Signup у хенлера Auth и структуру newUser со всеми полями для регистрации. Генерацию JWT выделяем в отдельный метод, чтобы можно было его вызывать как в Auth, так и в Signup-хендлерах. У нас всё еще нет UserService, поэтому проставляем TODO. Нам надо будет провалидировать полученные данные от пользователя и потом отправить их в UserService, чтобы он уже создал пользователя и ответил нам об успехе. Далее вызываем функцию создания пары токена доступа и refresh-токена и отдаём с кодом 201.

У нас есть подсказка в виде Swagger-файла. На его основе создаём все нужные хендлеры. Там, где вызов микросервисов, будем проставлять комментарий с TODO.

Создаём хендлер для категорий, определяем URL в константах. Далее создаём структуры. Опираемся на Swagger-файл, который создали ранее. Далее создаём сам хендлер и реализуем метод Register, который регистрирует его в роутере. Затем создаём методы с логикой работы и сразу пишем тест API на этот метод. Проверяем, находим ошибки в сваггере. Таким образом мы создаём все методы по работе с категориями: получение и создание.

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

Здесь надо обратить внимание на то, что методы создания сущности возвращают код ответа 201 и заголовок Location, в котором находится URL для получения сущности. Оттуда можно вытащить идентификатор созданной сущности.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *