<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Планы обучения</title>
    <description>Здесь собраны планы обучения языкам программирования, технологиям и отдельным инструментам. В разделе вы найдёте дорожные карты по разработке и пошаговые инструкции, что позволят изучить программирование в краткие сроки.</description>
    <link>https://tproger.ru/tag/plany-obuchenija</link>
    <atom:link href="https://tproger.ru/tag/plany-obuchenija/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Mon, 05 Oct 2026 00:49:34 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Планы обучения</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>МФТИ запускает школу по предпринимательскому планированию</title>
      <link>https://tproger.ru/news/mfti-zapuskaet-wkolu-po-predprinimatelskomu-planirovaniyu</link>
      <comments>https://tproger.ru/news/mfti-zapuskaet-wkolu-po-predprinimatelskomu-planirovaniyu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вика Овсянникова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/mfti-zapuskaet-wkolu-po-predprinimatelskomu-planirovaniyu</guid>
      <description><![CDATA[<p>МФТИ запускает онлайн-школу «Предпринимательское планирование» с 27 февраля. Программа повышения квалификации: бизнес-модель, стратегия роста с возможностью попасть в магистратуру в дальнейшем. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/mfti-zapuskaet-wkolu-po-predprinimatelskomu-planirovaniyu">МФТИ запускает школу по предпринимательскому планированию</a>»</p>]]></description>
      <category><![CDATA[Новости]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 20 Feb 2026 11:30:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Кафедра технологического предпринимательства МФТИ продолжает набор на программу повышения квалификации «Предпринимательское планирование: от идеи до бизнес-модели». Обучение начнется 27 февраля и продлится пять недель.</p><h2>Как устроена школа</h2><p>Программа ориентирована на широкую аудиторию, интересующуюся бизнесом: от студентов и идейных выпускников до действующих предпринимателей, топ-менеджеров и основателей стартапов, столкнувшихся с замедлением роста. Особое внимание будет уделяться практической работе над проектами вместе с экспертами и практиками МФТИ.</p><p>За пять недель участникам в формате мини-групп предстоит:</p><ul><li>Разработать бизнес-модель.</li><li>Провести фокусировку на рынке и целевой аудитории.</li><li>Сформулировать стратегию роста.</li></ul><p>Подробную программу онлайн-школы можно узнать <a href="https://tprg.ru/cPbO" rel="nofollow">на сайте</a>.</p><p>По окончании выдается удостоверение о повышении квалификации МФТИ. Кроме того, успешное прохождение школы дает возможность поступить в онлайн-магистратуру МФТИ «Технологическое предпринимательство» без экзаменов.</p><h2>Детали программы</h2><ul><li>Сроки обучения: 27 февраля — 27 марта 2026 года.</li><li>Формат: Онлайн.</li><li>Дедлайн подачи заявок: 27 февраля 2026 года (включительно). Количество мест ограничено.<br /></li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Системное изучение английского: готовый план с нуля до B1</title>
      <link>https://tproger.ru/articles/sistemnoe-izuchenie-anglijskogo--gotovyj-plan-s-nulya-do-b1</link>
      <comments>https://tproger.ru/articles/sistemnoe-izuchenie-anglijskogo--gotovyj-plan-s-nulya-do-b1?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/sistemnoe-izuchenie-anglijskogo--gotovyj-plan-s-nulya-do-b1</guid>
      <description><![CDATA[<p>Английский 2026: Пошаговый алгоритм самостоятельного обучения (от хаоса к системе за 3 месяца)
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/sistemnoe-izuchenie-anglijskogo--gotovyj-plan-s-nulya-do-b1">Системное изучение английского: готовый план с нуля до B1</a>»</p>]]></description>
      <category><![CDATA[Английский]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 28 Jan 2026 10:56:06 GMT</pubDate>
      <content:encoded><![CDATA[<p>Визуализация ниже — это не просто красивая картинка, а суть предстоящей работы. Мы меняем хаотичные "пробежки" по настроению на инженерный подход к тренировкам.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2026-01-28/1cd69547-bf82-4618-ba0f-6fa4a4aeff70.webp" alt="" /></figure><h2>Почему 9 из 10 сходят с дистанции (и как добежать до финиша)</h2><p>Давайте начистоту: проблема не в лени и не в мифическом "отсутствии способностей". Проблема в отсутствии тренировочного плана.</p><p>На практике мы постоянно наблюдаем одну и ту же картину: взрывной старт, попытка "пробежать марафон" за выходные (5 часов зубрежки), выгорание через две недели и неизбежное чувство вины. Это классический сценарий травмы, а не обучения.</p><p><b>Главные "убийцы" прогресса:</b></p><ul><li>Цель-призрак. "Хочу выучить английский" — это не цель, это мечта. У нее нет финишной черты.</li><li>Аритмия нагрузки. Героические рывки раз в неделю всегда проигрывают скучным, но ежедневным 20-минутным сессиям.</li><li>Инфошум. Попытка учить всё и сразу по десяти Telegram-каналам и трем учебникам.</li><li>Иллюзия скорости. Ожидание, что через месяц вы заговорите как носитель.</li></ul><p>Цифры подтверждают полевые наблюдения. Студенты без жесткой структуры рискуют застрять в статусе "вечно учащих" (Long-term English Learners). Системный подход повышает шансы на успех с 69% до 86% [1]. В 2026 году, когда нейросети ускоряют любые процессы, цена потери времени становится критической.</p><h2>Шаг 0: Честный аудит — Где вы сейчас?</h2><p>Нельзя построить маршрут в навигаторе, если не определена точка старта. Забудьте школьные оценки. Нам нужна объективная метрика — международная шкала CEFR.</p><p>Взгляните на эту "лестницу". Это ваша карта местности.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2026-01-28/a95d25fa-0d75-4bd4-9ffc-1faa4b2a310a.webp" alt="" /></figure><h3>Экспресс-диагностика (Check yourself)</h3><p>Будьте честны с собой. Отметьте пункты, которые действительно про вас.</p><p><b>Уровень A1-A2 (Выживание):</b></p><ul><li>[ ] Могу представиться и спросить "где метро?".</li><li>[ ] Понимаю медленную речь, если собеседник помогает жестами.</li><li>[ ] Могу написать другу: "Опаздываю, буду через 10 минут".</li><li>Вердикт: Если здесь большинство галочек — ваш выбор "План-минимум" (см. ниже).</li></ul><p><b>Уровень B1-B2 (Автономность):</b></p><ul><li>[ ] Смотрю Netflix и понимаю общий смысл без русских субтитров.</li><li>[ ] Могу поддержать разговор в баре, даже с ошибками.</li><li>[ ] Пишу рабочие письма или посты в соцсети.</li><li>Вердикт: Если узнали себя здесь — переходите к "Плану-интенсиву".</li></ul><p>Чтобы не гадать на кофейной гуще, мы рекомендуем пройти бесплатный вводный тест в Skyeng или аналогичную профессиональную диагностику. По стандартам Cambridge, для перехода на следующую ступень нужно инвестировать около 200 часов качественной практики [2].</p><h2>Шаг 1: Цель, которая не даст вам слиться (SMART 2.0)</h2><p>"Подтянуть язык" — плохая задача. Мозгу непонятно, когда она выполнена. Используйте принцип SMART, чтобы превратить мечту в техническое задание.</p><p><b>Формула успеха:</b></p><ol><li>Specific (Конкретика): Не "учить слова", а "освоить топ-1000 лексем для IT".</li><li>Measurable (Цифры): Сдать тест на уровень B1.</li><li>Achievable (Реальность): Не C1 за месяц, а A2 за квартал.</li><li>Relevant (Зачем?): Для оффера в зарубежную компанию.</li><li>Time-bound (Дедлайн): К 1 июня 2026 года.</li></ol><p><b>Пример рабочей установки:</b></p><ul><li>Было: "Хочу свободно говорить." (Мозг: "Слишком сложно, давай потом").</li><li>Стало: "К 15 мая достичь уровня B1, чтобы пройти собеседование на позицию Senior Developer." (Мозг: "Принято, работаем").</li></ul><p><b>Шаг 2: Архитектура навыков — Что именно учить?</b></p><p>Язык — это механизм из четырех шестеренок. Если одна заржавела, встанет вся машина. "Синдром собаки" (все понимаю, сказать не могу) — классический перекос в сторону потребления контента без практики.</p><h3>Грамматика и Лексика: Фундамент и Кирпичи</h3><p>Грамматика — это не свод скучных правил, а логика мышления.</p><ul><li>Метод: Интервальные повторения (Spaced Repetition). Забывать — нормально, главное — вовремя напомнить.</li><li>Инструменты: Anki, Quizlet.</li><li>Золотое правило: Учите фразы, а не отдельные слова. Контекст решает всё.</li></ul><p>Анализ данных показывает, где мы спотыкаемся чаще всего [4]:<a href="https://biglanguages.com/2020/01/20/what-does-our-data-show-about-english-learners-most-common-mistakes/" rel="nofollow"></a></p><ul><li>Капитализация (76% ошибок): Дни недели, языки и "Я" (I) в английском всегда с большой буквы. В деловой переписке игнорирование этого правила — маркер неграмотности.</li><li>Глагол 'be': Мы говорим "Я инженер", они — "Я есть инженер". Пропуск связки — типичная ошибка.</li><li>Артикли (14% ошибок): Сначала научитесь ставить их интуитивно, потребляя много контента.</li></ul><h3>Input (Загрузка) и Output (Выгрузка)</h3><p>Вы не сможете "выгрузить" (сказать/написать) то, что не "загрузили" (прочитали/услышали). Закон сохранения энергии работает и здесь.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2026-01-28/70f1b7a8-e430-4be8-8884-1aa111bf70e5.webp" alt="" /></figure><p><b>Input (Входящий поток):</b></p><ul><li>Чтение: Graded Readers (адаптированные книги). Читайте то, где понятно 70% слов. Остальное мозг достроит.</li><li>Аудирование: Подкасты фоном. Задача — привыкнуть к мелодике.</li></ul><p><b>Output (Исходящий поток):</b></p><ul><li>Говорение: Техника Shadowing (Теневой повтор). Включаете диктора и повторяете за ним с отставанием в полсекунды, копируя интонацию. Это мощнейший тренажер.</li><li>Письмо: Дневник. 3 предложения перед сном. "Сегодня я устал, но сделал отчет". Это приучает формулировать мысли.</li></ul><p>Новое в 2026: AI-спарринг. Используйте нейросети (ChatGPT, Claude) для диалогов. Попросите бота: "Act as my English teacher via voice mode, correct my mistakes instantly." Это снимает страх осуждения перед реальным разговором.</p><h2>Шаг 3: Ваш идеальный график (Недельный Спринт)</h2><p>Забудьте про "найду время вечером". Вечером вы найдете только силы лечь на диван. Секрет полиглотов — использование "мертвого времени".</p><p>Где спрятаны ваши часы обучения:</p><ul><li>Транспорт/Пробки: 20 минут Anki или подкаст.</li><li>Спортзал/Прогулка с собакой: Аудирование.</li><li>Очередь за кофе: Повторение 10 слов в приложении.</li></ul><p>Вот как выглядит реалистичный график занятого человека:</p><h3>[ГЛАВНАЯ ФИШКА] Готовые шаблоны: Бери и делай</h3><p>Мы подготовили дорожные карты. Не нужно изобретать велосипед, просто крутите педали.</p><h4>План-минимум: Elementary (A1 → A2) за 3 месяца</h4><p>Цель: Перестать бояться языка и закрыть базовые дыры.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2026-01-28/9940a3db-53e2-4c87-a9b8-786b05ab9ab2.webp" alt="" /></figure><h4>План-интенсив: Pre-Intermediate (A2 → B1) за 6 месяцев</h4><p>Цель: Понимать речь на слух и говорить полными предложениями.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2026-01-28/fbad4279-4648-4799-8e71-c72861375837.webp" alt="" /></figure><h2>Инструментарий: Джентльменский набор 2026</h2><p>Не превращайте телефон в свалку. Вам нужно всего три типа инструментов.</p><ol><li>Слова: Anki или Quizlet (интервальное повторение).</li><li>Геймификация: Duolingo или Lingualeo (поддержание привычки).</li><li>База знаний: Cambridge Dictionary (только проверенные значения).</li><li>AI-помощник: Любой чат-бот для проверки грамматики и генерации примеров.</li></ol><h2>Как не перегореть: Техника безопасности</h2><p>Мотивация — ресурс исчерпаемый. Дисциплина — вечный. Когда захочется всё бросить (примерно на 3-й неделе), используйте метод Джерри Сайнфелда.</p><p><b>Правило "Не прерывай цепочку": </b>Повесьте календарь на стену. Каждый день занятий отмечайте жирным крестом. Ваша задача — не допустить пробела. Это простейшая нейробиология: мозг борется за сохранение визуального ряда.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2026-01-28/932e64d5-e024-400c-9854-e4ef24e5a9d0.webp" alt="" /></figure><h2>Часто задаваемые вопросы (FAQ)</h2><h4>Можно ли выучить язык полностью самостоятельно?</h4><p>До уверенного B2 — да. Но учтите риск "заучивания" ошибок. Курсы (вроде Skyeng) или работа с репетитором нужны не для того, чтобы учить за вас, а чтобы корректировать технику бега и ускорять процесс (Петля обратной связи).</p><h4>Сколько времени это реально займет?</h4><p>Сколько времени это реально займет? Чудес не бывает, есть только наработанные часы. Сводные данные Госдепа США (FSI) и Cambridge [3]:</p><ul><li>A0 → A2: ~200-250 часов.</li><li>A2 → B1: +200 часов.</li><li>B1 → B2: +200 часов. В режиме "1 час в день" путь с нуля до B2 займет 1.5–2 года. Хотите быстрее? Повышайте интенсивность, а не ищите "секретные методики".</li></ul><h4>Я все понимаю, но молчу. Что делать?</h4><p>Вы "перекачали" навык чтения и недокачали говорение. Мышцы рта должны работать физически. Говорите с собой, записывайте голосовые сообщения, спорьте с нейросетью. Практика лечится только практикой.</p><h2>Заключение: Ваше действие прямо сейчас</h2><p>Чтение этой статьи не улучшило ваш английский. Результат дают только действия. У вас есть кроссовки (план) и дорога (ресурсы). Осталось сделать первый шаг.</p><p><b>Задание на сегодня:</b></p><ol><li>Сделайте скриншот таблицы с подходящим планом выше.</li><li>Впишите в календарь только первую неделю.</li><li>Поставьте будильник на завтра на 15 минут раньше.</li></ol><p>Это и есть ваш Шаг 0. Встретимся на финише!</p><p>Хотите получить пошаговый гайд по самостоятельному изучению английского языка, который поможет вам систематизировать процесс и достичь желаемого уровня без лишних затрат? <a href="https://skyeng.ru/articles/anglijskij-s-nulya/" rel="follow">Изучайте гайд</a></p><p><b>Список источников</b></p><p>[1] English Learners in Public Schools (NCES Data) — https://nces.ed.gov/programs/coe/indicator/cgf/english-learners-in-public-schools [2] Guided learning hours (Cambridge English Support) — https://support.cambridgeenglish.org/hc/en-gb/articles/202838506-Guided-learning-hours [3] Foreign Language Training (U.S. Department of State FSI) — https://www.state.gov/national-foreign-affairs-training-center/foreign-language-training [4] Data on English Learners' Most Common Mistakes — https://biglanguages.com/2020/01/20/what-does-our-data-show-about-english-learners-most-common-mistakes/"</p><p>Реклама. Рекламодатель: ОАНО ДПО «СКАЕНГ» ИНН 9709022748, erid: 2SDnjckVEB2</p>]]></content:encoded>
    </item>
    <item>
      <title>Курсы для пентестера: обучение технологии Pentest</title>
      <link>https://tproger.ru/articles/kursy-dlya-pentestera--obuchenie-tehnologii-pentest</link>
      <comments>https://tproger.ru/articles/kursy-dlya-pentestera--obuchenie-tehnologii-pentest?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анастасия Шишкина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kursy-dlya-pentestera--obuchenie-tehnologii-pentest</guid>
      <description><![CDATA[<p>Лучшие курсы по Pentest. Рейтинг вариантов онлайн-обучения с нуля, обзор обучающей программы и стоимости курсов для пентестеров.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kursy-dlya-pentestera--obuchenie-tehnologii-pentest">Курсы для пентестера: обучение технологии Pentest</a>»</p>]]></description>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Информационная безопасность: веб-пентест]]></category>
      <category><![CDATA[Кибербезопасность]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 06 Oct 2025 07:21:32 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сегодня курсы по пентесту пользуются огромным спросом — и не случайно: успешный пентестер умеет не только запускать сканеры, но и читать между строк — в исходном коде, в поведении пользователей, в социальных связях. Представьте: вы — детектив цифрового мира. Ваши улики — логи и строки кода, подозреваемые — сервисы и люди, а цель — найти уязвимость прежде, чем это сделает злоумышленник. Любопытный факт: многие мастера безопасности начинали как азартные геймеры или «тестировщики» серверов — и постепенно это любопытство выросло в профессию.</p><p>Я проанализировала около 30 программ от ведущих онлайн-школ и собрала для вас подборку из 20 лучших. Чтобы было удобнее ориентироваться, разделила материал на несколько частей: сначала вы найдете топ-10 самых сильных курсов, затем — дополнительные варианты, которые помогут выбрать именно свой, а в финале вас ждут подборки бесплатных программ обучения.</p><p><b>Бонус — в статье собраны промокоды, которые я нашла для некоторых курсов, не пропустите!</b></p><h2>ТОП-10 лучших курсов пентестера в 2026 году</h2><ol><li><a href="https://experts1.ru/NhtYel?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=1">Пентестер с нуля</a> от Skillbox — облачная среда из 12 виртуальных машин, где можно отрабатывать реальные атаки и сценарии защиты.</li><li><a href="https://experts1.ru/hjiMoU?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=2">Специалист по информационной безопасности</a> от Нетологии — три направления подготовки и отдельные модули по использованию ИИ.</li><li><a href="https://experts1.ru/uqFArv?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=3">Специалист по информационной безопасности: веб-пентест</a> от Яндекс Практикума — облачный CTF-симулятор и углубленное изучение OWASP Top 10 и API Top 10.</li><li><a href="https://experts1.ru/Hkrqat?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=4">Специалист по кибер­безопас­нос­ти с нуля</a> от Skillbox — сочетание классических инструментов пентеста с нейросетями.</li><li><a href="https://experts1.ru/zapDrQ?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=5">Специалист по информационной безопасности</a> от GeekBrains — работа на кластере из 12 виртуальных машин в VK Cloud.</li><li><a href="https://experts1.ru/jKzsmF?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=6">«Белый» хакер</a> от Skillfactory — стажировка на Standoff 365, подготовка к CTF и участию в багбаунти-программах.</li><li><a href="https://experts1.ru/tWAsml?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=7">Пентест</a> от Otus — формат live coding и подготовка к международным экзаменам CEH и OSCP.</li><li><a href="https://experts1.ru/vfdYxS?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=8">Этичный хакер</a> от Coddy School — курс для подростков с изучением Python и JavaScript.</li><li><a href="https://experts1.ru/jbxWHz?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=9">Тестирование на проникновение и анализ безопасности. Базовый уровень</a> от Акадeмии АйТи — интенсивная 9-дневная программа с лабораторными работами по сетевым атакам.</li><li><a href="https://experts1.ru/USezlw?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=10">WebSecOps</a> от Pentestit — углубленная практика по WAF, настройке Nemesida и расследованию инцидентов.</li></ol><p>Курсы обучения пентестеров подойдут тем, кто хочет получить практические навыки поиска уязвимостей и научиться мыслить как атакующий. Они будут полезны новичкам на самостоятельном обучении, желающим войти в профессию, и специалистам с опытом, которые стремятся расширить компетенции.</p><p><b>1. <a href="https://experts1.ru/NhtYel?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=1">Пентестер с нуля</a> | Skillbox</b></p><p><i>Используйте промокод kursfinder, чтобы получить скидку 50%</i></p><p><a href="https://experts1.ru/NhtYel?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=1">Применить промокод&gt;&gt;&gt; </a></p><p>Онлайн-курс обучения «Пентестер с нуля» — это прикладная программа для тех, кто хочет стать специалистом по тестированию на проникновение. Обучение построено на реальных инструментах индустрии: Nmap для сканирования сетей, Burp Suite для анализа веб-приложений, Wireshark для исследования трафика, Mimikatz и BloodHound для работы с инфраструктурой Active Directory, Hydra для атак перебором и множество утилит для тестирования приложений и баз данных.</p><p>Студентам предоставляется облачная лаборатория из 12 виртуальных машин в VK Cloud, где в безопасной среде можно отрабатывать атаки и защитные сценарии. По итогам курса выпускник не только усваивает теорию, но и приобретает практические навыки проведения полноценного пентеста: от поиска и эксплуатации уязвимостей до подготовки профессионального отчета.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/ca65c41d-2fb8-488b-b5e4-2f41ff3e5213.jpg" alt="" /></figure><ul><li>Стоимость: от 4 936 руб./мес. в рассрочку на 24 месяца</li><li>Длительность: 6 месяцев</li><li>Формат обучения: видеолекции с пожизненным доступом, практические задания, разборы от кураторов, вебинары с экспертами, общение в Telegram-чате</li><li>Сертификат: сертификат Skillbox</li></ul><p><b>Кому подойдет:</b> новичкам, которые хотят войти в сферу кибербезопасности, и специалистам, стремящимся углубить навыки в области анализа защищенности и проведения пентестов.</p><p><b>Преимущества:</b></p><ul><li>предоставляется облако с 12 виртуальными машинами для практики;</li><li>обучение проходит на реальных сценариях атак и защиты;</li><li>в курс встроен проект в портфолио;</li><li>поддержка наставников с солидным практическим бесценным опытом — от 5 лет;</li><li>видеолекции остаются в постоянном доступе;</li><li>практические задания с детальной проверкой;</li><li>HR-консультант помогает с резюме и собеседованиями;</li><li>налоговый вычет до 13% от стоимости обучения;</li><li>удобная рассрочка без процентов для всех желающих студентов;</li><li>рейтинг студентов выше 4,7 на независимых платформах.</li></ul><p><b>Недостатки:</b></p><ul><li>VirtualBox может вызывать сложности на устройствах Mac;</li><li>требуется базовое понимание системного администрирования.</li></ul><p><b>Программа обучения</b></p><ul><li>Введение в информационную безопасность и обзор процессов</li><li>Сбор информации об инфраструктуре и разведка целей</li><li>Сканирование сетевых сервисов и обнаружение уязвимостей</li><li>Проверка и эксплуатация уязвимостей в веб приложениях</li><li>Атаки на доменную инфраструктуру и работа с учетными данными</li><li>Сетевые атаки и анализ трафика с помощью Wireshark и Tcpdump</li><li>Автоматизация тестирования и написание эксплойтов на Python</li><li>Работа с инструментами Burp Suite Nmap Metasploit и другими</li><li>Практические задания на виртуальных стендах и промежуточные проекты</li><li>Финальный проект и подготовка отчета для заказчика</li></ul><p><a href="https://experts1.ru/NhtYel?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=1">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>2. <a href="https://experts1.ru/hjiMoU?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=2">Специалист по информационной безопасности</a> | Нетология</b></p><p><i>Используйте промокод kursfinder, чтобы получить скидку 7%</i></p><p><a href="https://experts1.ru/hjiMoU?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=2">Применить промокод&gt;&gt;&gt; </a></p><p>Этот курс по пентесту разработан для тех, кто хочет освоить современные технологии защиты информации и пройти профессиональную переподготовку. Программа сочетает базовую теорию с практикой на реальных кейсах и отработкой инструментов, востребованных в индустрии. Студенты учатся анализировать сетевой трафик в Wireshark, проводить брутфорс-атаки с Hydra и Medusa, находить и эксплуатировать уязвимости с помощью Nmap и Metasploit, работать с наборами Sysinternals и NirSoft, а также автоматизировать задачи через PowerShell и Bash, контейнеризовать окружения в Docker и настраивать IDS/IPS.</p><p>Отдельный блок посвящен применению машинного обучения и нейросетей для обнаружения угроз и расследования инцидентов. Сердце курса — практические проекты в виртуальных стендах и облаке Timeweb Cloud: несколько больших кейсов, где нужно пройти полный цикл — разведка, эксплуатация, постэксплуатация, эскалация привилегий и подготовка рекомендаций по устранению. В результате выпускник получает реальные рабочие навыки и готовность к задачам в Forensics, DevSecOps и веб-пентесте.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/72829f36-e2c7-430e-8c50-43a04543088d.jpg" alt="" /></figure><ul><li>Стоимость: от 3 805 руб./мес. при рассрочке на 36 месяцев или 130 200 руб. единоразово</li><li>Длительность: от 11 месяцев</li><li>Формат обучения: вебинары, лекции, воркшопы, 4 крупных проекта, 74 практических задания, доступ к материалам и мобильное приложение</li><li>Сертификат: диплом о профессиональной переподготовке установленного образца</li></ul><p><b>Кому подойдет:</b> начинающим специалистам и тем, кто хочет перейти в сферу кибербезопасности, а также практикам, которым необходимы углубленные знания и специализации в Forensics, DevSecOps или Pentest.</p><p><b>Преимущества:</b></p><ul><li>три специализации (две обязательные и одна на выбор каждому студенту);</li><li>практика с виртуальными машинами и облаком Timeweb Cloud;</li><li>применение ИИ и ML для анализа инцидентов и угроз;</li><li>более 20 вебинаров с экспертами;</li><li>доступ к мобильному приложению с офлайн-режимом;</li><li>4 проекта для портфолио;</li><li>74 практических задания с обратной связью;</li><li>поддержка наставников и специалистов из СберМаркета, Самоката и Intel;</li><li>HR-сопровождение и помощь в трудоустройстве;</li><li>возможность стажировки у партнеров программы.</li></ul><p><b>Недостатки:</b></p><ul><li>необходимы базовые знания в администрировании ОС;</li><li>сложно совмещать с учебой или работой.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы информационной безопасности и криптографии</li><li>Работа с сетями Linux и Windows</li><li>Язык Python и программные уязвимости</li><li>Статический и динамический анализ реверс инжиниринг</li><li>Тестирование на проникновение и эксплуатация уязвимостей</li><li>Администрирование систем защиты информации</li><li>Цифровая криминалистика и расследование инцидентов Forensics</li><li>DevSecOps и обеспечение безопасности разработки</li><li>Применение ML и нейросетей в кибербезопасности</li><li>Дипломный проект и защита итоговой работы</li></ul><p><a href="https://experts1.ru/hjiMoU?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=2">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>3. <a href="https://experts1.ru/uqFArv?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=3">Специалист по информационной безопасности: веб-пентест</a> | Яндекс Практикум</b></p><p><i>Купите любой курс с выгодой до 20% при оплате сразу</i></p><p><a href="https://experts1.ru/uqFArv?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=3">Получить скидку&gt;&gt;&gt; </a></p><p>Онлайн-курс «Кибербезопасность: веб-пентест» разработан специалистами из Яндекса, VK и Альфа-Банка и фокусируется на практических навыках поиска уязвимостей в веб-приложениях. Во время обучения студенты осваивают реальные инструменты пентестера — Burp Suite для анализа трафика, SQLMap для тестирования баз данных, ffuf и Dirsearch для перебора директорий, Nmap и Naabu для сканирования портов, Shodan и Censys для поиска уязвимых сервисов, а также Postman, Amass, OWASP ZAP, Fiddler, Nuclei и другие утилиты.</p><p>Для практики предусмотрен облачный CTF-симулятор Яндекса, где независимо от города можно безопасно отрабатывать атаки на авторизацию, API и бизнес-логику приложений. Отдельный модуль посвящен уязвимостям из OWASP Top 10 и API Top 10 — их подробно разбирают на примерах с демонстрацией воспроизведения и способов исправления. Курс включает лабораторные задания и командные воркшопы, что помогает плавно перейти от теории к реальным практическим навыкам.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/cd12365b-8681-4fc3-8d56-c01a6aca0f07.jpg" alt="" /></figure><ul><li>Стоимость: от 4 490 руб./мес. до 7 511 руб./мес. в рассрочку на 36 месяцев</li><li>Длительность: 4–6 месяцев</li><li>Формат обучения: вебинары, видеолекции, воркшопы, лабораторные задания, чек-листы по WAPT, индивидуальные встречи с экспертами</li><li>Сертификат: диплом о профессиональной переподготовке установленного образца</li></ul><p><b>Кому подойдет: </b>разработчикам, тестерам, системным администраторам и студентам техвузов, которые хотят освоить веб-пентест или перейти в AppSec/DevSecOps.</p><p><b>Преимущества:</b></p><ul><li>работа в облачном CTF-симуляторе, приближенном к реальным условиям;</li><li>обучение пентесту с нуля от практиков из крупных IT-компаний;</li><li>актуальная программа с регулярными обновлениями;</li><li>изучение OWASP Top 10 и API Top 10 на примерах;</li><li>практика с контейнерами и облаками (Docker, Kubernetes, Yandex Cloud, S3);</li><li>воркшопы с командной работой и обратной связью;</li><li>собственный чек-лист по всем этапам WAPT;</li><li>поддержка наставников и индивидуальные консультации;</li><li>помощь в дальнейшем трудоустройстве и карьерные советы от экспертов;</li><li>диплом о профессиональной переподготовке.</li></ul><p><b>Недостатки:</b></p><ul><li>высокая нагрузка: требуется 10–20 часов в неделю;</li><li>курс предполагает базовые знания сетей и Linux.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы веб-пентеста и вводное тестирование</li><li>Разведка в веб-приложениях Kali Linux Burp Suite OWASP ZAP Shodan Censys</li><li>Анализ защищенности и эксплуатация уязвимостей XSS CSRF SQL Injection SSRF XXE IDOR уязвимости API и др</li><li>Работа с аутентификацией и авторизацией OAuth JWT SSO MFA</li><li>Отчетность документирование и правовые аспекты</li><li>Финальный проект полный цикл веб-пентеста и подготовка рекомендаций</li><li>Дополнительные модули SSDLC Secure by Design DevSecOps контейнеризация и облака</li></ul><p><a href="https://experts1.ru/uqFArv?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=3">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>4. <a href="https://experts1.ru/Hkrqat?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=4">Специалист по кибер­безопас­нос­ти с нуля</a> | Skillbox</b></p><p><i>Используйте промокод kursfinder, чтобы получить скидку 50%</i></p><p><a href="https://experts1.ru/Hkrqat?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=4">Применить промокод&gt;&gt;&gt; </a></p><p>Курс по пентесту с нуля сочетает классическую подготовку в области защиты информационных систем с освоением нейросетевых технологий. Во время обучения студенты работают с профессиональными инструментами анализа и тестирования — Wireshark и tcpdump для исследования сетевого трафика, Burp Suite для проверки веб-приложений, Hydra и Mimikatz для атак перебором и получения учетных данных, BloodHound для анализа Active Directory, Wazuh и ELK Stack для мониторинга, а также изучают SQL, Python, PowerShell, Bash и Docker.</p><p>Для практики выделен кластер из 12 виртуальных машин в облаке VK Cloud, что позволяет моделировать атаки и защиту в условиях, приближенных к реальным. В отдельные блоки курса включено использование ChatGPT и других ИИ-инструментов для автоматизации задач, анализа логов и поиска аномалий.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/977d336d-4449-4d7a-909f-e904013f2cbf.jpg" alt="" /></figure><ul><li>Стоимость: от 5 637 руб./мес. в рассрочку на 31 месяц</li><li>Длительность: 12 месяцев</li><li>Формат обучения: видеолекции с пожизненным доступом, практические задания, CTF-симуляции, проекты для портфолио, вебинары и воркшопы, Telegram-чат с экспертами</li><li>Сертификат: удостоверение о повышении квалификации установленного образца</li></ul><p><b>Кому подойдет: </b>новичкам, которые хотят освоить профессию с нуля, и специалистам IT, стремящихся расширить знания и использовать ИИ для задач кибербезопасности.</p><p><b>Преимущества:</b></p><ul><li>pentest-обучение на кластере из 12 виртуальных машин;</li><li>практика в формате CTF и проекты для портфолио;</li><li>освоение нейросетей и их интеграции в рабочие процессы;</li><li>изучение популярных инструментов (Wireshark, Burp Suite, Hydra, BloodHound, Mimikatz и др.);</li><li>поддержка экспертов и кураторов с опытом от 5 лет;</li><li>диплом установленного образца по лицензии;</li><li>помощь HR-консультанта в трудоустройстве;</li><li>возможность налогового вычета до 13%;</li><li>рассрочка с отсрочкой первого платежа на 6 месяцев;</li><li>бонусы от VK Pay и дополнительные курсы в подарок.</li></ul><p><b>Недостатки:</b></p><ul><li>высокая нагрузка — в среднем 5 часов в неделю;</li><li>стоимость выше, чем у базовых курсов по безопасности.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы веб-пентеста и вводное тестирование</li><li>Разведка в веб-приложениях Kali Linux Burp Suite OWASP ZAP Shodan Censys</li><li>Анализ защищенности и эксплуатация уязвимостей XSS CSRF SQL Injection SSRF XXE IDOR уязвимости API и др</li><li>Работа с аутентификацией и авторизацией OAuth JWT SSO MFA</li><li>Отчетность документирование и правовые аспекты</li><li>Финальный проект полный цикл веб-пентеста и подготовка рекомендаций</li><li>Дополнительные модули SSDLC Secure by Design DevSecOps контейнеризация и облака</li></ul><p><a href="https://experts1.ru/Hkrqat?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=4">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>5. <a href="https://experts1.ru/zapDrQ?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=5">Специалист по информационной безопасности</a> | GeekBrains</b></p><p><i>Используйте промокод kursfinder, чтобы получить скидку 7%</i></p><p><a href="https://experts1.ru/zapDrQ?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=5">Применить промокод&gt;&gt;&gt; </a></p><p>Онлайн-курс сочетает базовые знания в области защиты информации с современными инструментами тестирования и анализа. В программе предусмотрена работа с системами мониторинга Wazuh и ELK Stack, утилитами для выявления уязвимостей — Mimikatz, Hydra, Burp Suite, анализаторами трафика Wireshark и TCPdump, а также средствами аудита инфраструктуры BloodHound и SonarQube. Для закрепления навыков предоставляется доступ к кластеру из 12 виртуальных машин в облаке VK Cloud, где можно моделировать реальные атаки и отрабатывать защитные сценарии.</p><p>Дополнительно курс охватывает работу с Python, PowerShell, Bash, SQL, PostgreSQL и GitLab. Практическая часть включает два проекта для портфолио: проведение тестирования на проникновение и расследование инцидента. Отдельный модуль посвящен применению нейросетей и AI для автоматизации анализа данных и поиска уязвимостей, что позволяет освоить подходы, востребованные в современной кибербезопасности.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/a33099e2-5d89-44be-93a9-ae307f1d548c.jpg" alt="" /></figure><ul><li>Стоимость: от 4 120 руб./мес. в рассрочку на 36 месяцев</li><li>Длительность: 12 месяцев</li><li>Формат обучения: видеолекции с пожизненным доступом, онлайн-занятия с экспертами, воркшопы, проекты в портфолио, практика в виртуальных стендах VK Cloud, обратная связь от кураторов</li><li>Сертификат: диплом установленного образца по лицензии</li></ul><p><b>Кому подойдет: </b>желающим освоить профессию специалиста по информационной безопасности с нуля, а также системным администраторам и IT-специалистам, стремящимся перейти в сферу киберзащиты.</p><p><b>Преимущества:</b></p><ul><li>обучение на облачных стендах из 12 виртуальных машин;</li><li>освоение инструментов для тестирования и анализа безопасности;</li><li>практика в формате CTF и лабораторных заданий;</li><li>два полноценных проекта для портфолио;</li><li>персональная поддержка кураторов и экспертов;</li><li>помощь HR-специалистов в трудоустройстве;</li><li>диплом установленного образца по лицензии;</li><li>возможность рассрочки без переплат;</li><li>налоговый вычет до 13% от стоимости.</li></ul><p><b>Недостатки:</b></p><ul><li>ограниченное количество мест в потоке;</li><li>при индивидуальных вопросах иногда приходится ждать консультации эксперта.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы администрирования Linux и Windows</li><li>Работа с сетями и защита периметра</li><li>Python и PowerShell для задач кибербезопасности</li><li>Анализ защищенности приложений и инфраструктуры</li><li>Мониторинг событий и расследование инцидентов</li><li>Использование нейросетей и AI в задачах ИБ</li><li>Тестирование на проникновение и разработка рекомендаций</li><li>Работа с современными инструментами аудита и анализа</li><li>Итоговые проекты для портфолио</li></ul><p><a href="https://experts1.ru/zapDrQ?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=5">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>6. <a href="https://experts1.ru/jKzsmF?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=6">«Белый» хакер</a> | Skillfactory</b></p><p>Онлайн-курс «Белый хакер: пентестер» предназначен для тех, кто хочет освоить профессию специалиста по киберзащите и научиться находить уязвимости в цифровых системах. Во время обучения студенты получают доступ к реальным инструментам индустрии — Burp Suite, Metasploit, Wireshark, SQLmap, Hashcat, Hydra, Kali Linux, PowerShell Empire, Mimikatz, Maltego, Airgeddon и другим — и отрабатывают навыки на специально подготовленных лабораторных стендах.</p><p>Практическая часть включает участие в CTF-соревнованиях, моделирующих реальные атаки, а также лаборатории по тестированию сайтов, сетей, операционных систем и корпоративных приложений. Программа завершается финальным проектом и стажировкой на площадке Standoff 365 от Positive Technologies, что помогает прокачать навыки багханта и войти в профессиональные рейтинги.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/fe34bc73-5e98-47b3-856e-22b3c6645b4b.jpg" alt="" /></figure><ul><li>Стоимость: от 3 997 руб./мес. в рассрочку</li><li>Длительность: 13 месяцев</li><li>Формат обучения: онлайн-видеоуроки, практические задания, воркшопы, командные и индивидуальные CTF, лаборатории, поддержка менторов и карьерного центра</li><li>Сертификат: сертификат или диплом о профессиональной переподготовке установленного образца</li></ul><p><b>Кому подойдет:</b> новичкам без опыта в ИТ, а также тестировщикам и системным администраторам, которые хотят перейти в сферу пентеста и расширить компетенции.</p><p><b>Преимущества:</b></p><ul><li>освоение востребованной профессии с нуля;</li><li>практика в CTF-симуляторах и стендах;</li><li>изучение более 15 профессиональных инструментов;</li><li>стажировка на платформе Standoff 365;</li><li>поддержка менторов и кураторов на протяжении всего курса;</li><li>карьерный центр и помощь в трудоустройстве;</li><li>возможность работать удаленно после окончания;</li><li>диплом или сертификат, признаваемый работодателями;</li><li>доступ к дополнительным курсам по нейросетям, soft skills и английскому;</li><li>гарантия возврата денег, если не удастся трудоустроиться в течение 6 месяцев.</li></ul><p><b>Недостатки:</b></p><ul><li>высокая учебная нагрузка (до 15 часов в неделю);</li><li>некоторые блоки могут быть сложны новичкам без IT-базы;</li><li>редкие технические неполадки на вебинарах.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы администрирования Linux и Windows</li><li>Python и базы данных для задач кибербезопасности</li><li>Анализ защищенности и защита приложений</li><li>Мониторинг событий и реагирование на инциденты</li><li>Атаки на веб-сайты сети ОС и корпоративные системы</li><li>Использование инструментов пентеста Burp Suite Metasploit Nmap Hydra Hashcat и др</li><li>Практикум в формате CTF и командных проектов</li><li>Стажировка на Standoff 365 и работа с багбаунти</li><li>Финальная аттестация и проект</li></ul><p><a href="https://experts1.ru/jKzsmF?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=6">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>7. <a href="https://experts1.ru/tWAsml?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=7">Пентест</a> | OTUS</b></p><p>Онлайн-курс ориентирован на практическое освоение тестирования на проникновение — здесь нет сухой теории, только реальные сценарии атак и работа с индустриальными инструментами: Nmap, Burp Suite, Metasploit, Wireshark и рядом других. Каждый модуль построен как демонстрация в формате live coding — преподаватель показывает разбор уязвимостей на настоящих сервисах, а студенты повторяют шаги на виртуальных машинах и сразу отрабатывают приемы на практике.</p><p>Курс предусматривает проектные задачи для портфолио и помогает закрепить навыки через практические упражнения: от разведки и эксплуатации уязвимостей до подготовки профессионального отчета. Программа покрывает полный цикл пентеста и дает базовую подготовку для дальнейшей сертификации и сдачи международных экзаменов, таких как CEH и OSCP.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/68b20c50-4d20-498c-bce2-5d55673156f8.jpg" alt="" /></figure><ul><li>Стоимость: 112 000 руб.</li><li>Длительность: 5 месяцев</li><li>Формат обучения: вебинары 2 раза в неделю, домашние задания с проверкой, проектная работа, доступ к материалам и записям навсегда, общение с экспертами в чате</li><li>Сертификат: сертификат OTUS и удостоверение о повышении квалификации</li></ul><p><b>Кому подойдет:</b> разработчикам, администраторам, devops-инженерам и специалистам по ИБ.</p><p><b>Преимущества:</b></p><ul><li>акцент на практическом применении знаний;</li><li>разбор уязвимостей в формате life coding;</li><li>доступ к лабораторным стендам и виртуальным машинам;</li><li>домашние задания с развернутым фидбеком;</li><li>индивидуальная проектная работа для портфолио;</li><li>поддержка преподавателей и экспертов-практиков;</li><li>карьерная помощь (разбор резюме, собеседований, база вакансий партнеров);</li><li>подготовка к сертификациям CEH и OSCP;</li><li>оптимальная нагрузка, совмещаемая с работой;</li><li>сертификат и удостоверение государственного образца.</li></ul><p><b>Недостатки:</b></p><ul><li>требуется базовое знание сетей и ОС;</li><li>обязательное вступительное тестирование перед зачислением.</li></ul><p><b>Программа обучения:</b></p><ul><li>Концептуальные основы пентеста</li><li>Сетевая безопасность</li><li>Эскалация привилегий в ОС</li><li>Active Directory</li><li>Веб-пентест</li><li>Атаки на различные векторы</li><li>Проектный модуль практика с уязвимыми сервисами</li></ul><p><a href="https://experts1.ru/tWAsml?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=7">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>8. <a href="https://experts1.ru/vfdYxS?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=8">Этичный хакер</a> | Coddy School</b></p><p>Онлайн-курс «Этичный хакер» разработан для подростков и начинающих специалистов, которые хотят познакомиться с основами информационной безопасности и методами противодействия кибератакам. Обучение проводят сертифицированные практики, которые шаг за шагом объясняют работу с Python, JavaScript, HTML, CSS, MySQL и базовыми сетевыми протоколами. В процессе занятий ученики знакомятся с реальными приемами атак, учатся моделировать фишинговые сайты, выполнять простые пентесты и применять инструменты защиты личных данных.</p><p>Особое внимание уделено практике: студенты закрепляют теорию на собственных проектах, получают первый опыт в сфере кибербезопасности и завершают обучение именным сертификатом, который станет ценным дополнением к портфолио.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/0afd507f-bdf3-4857-b9cb-c3e1d641ecba.jpg" alt="" /></figure><ul><li>Стоимость: по запросу</li><li>Длительность: от 72 часов</li><li>Формат обучения: индивидуальные и групповые занятия онлайн и офлайн, практические проекты, работа с виртуальными средами</li><li>Сертификат: именной сертификат Coddy School</li></ul><p><b>Кому подойдет:</b> подросткам 12–16 лет, а также начинающим программистам, которые хотят развивать навыки кибербезопасности.</p><p><b>Преимущества:</b></p><ul><li>обучение у практикующих специалистов по кибербезопасности;</li><li>адаптированная программа для подростков;</li><li>сочетание теории и практических заданий;</li><li>знакомство с Python, JavaScript, HTML, CSS и MySQL;</li><li>моделирование реальных атак и защита от них;</li><li>изучение принципов криптографии и хеширования;</li><li>освоение работы с Windows и Linux через командную строку;</li><li>получение навыков безопасного поведения в интернете;</li><li>возможность создания собственных проектов и защиты их на презентации;</li><li>именной сертификат по итогам обучения.</li></ul><p><b>Недостатки:</b></p><ul><li>требуется базовое знание Python;</li><li>курс рассчитан только на возраст 12–16 лет;</li><li>не подходит для продвинутых.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы этичного хакинга и социальная инженерия</li><li>Python и криптография</li><li>Хеширование и базы данных пользователей</li><li>Сетевые атаки HTML CSS и фишинговые сайты</li><li>JavaScript и защита от XSS</li><li>Работа с MySQL и защита от SQL уязвимостей</li><li>Сетевые протоколы OSI и TCP IP</li><li>Работа в командной строке Windows и Linux</li><li>VPN FTP SMB и финальный проект с презентацией</li></ul><p><a href="https://experts1.ru/vfdYxS?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=8">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>9. <a href="https://experts1.ru/jbxWHz?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=9">Тестирование на проникновение и анализ безопасности. Базовый уровень</a> | Академия АйТи</b></p><p>Курс предназначен для специалистов, стремящихся освоить практику этичного хакинга и научиться оценивать защиту корпоративных сетей и приложений. В рамках программы подробно разбираются техники поиска уязвимостей, их эксплуатация и методы противодействия атакам, а также работа с инструментами, которыми пользуются пентестеры. Слушатели учатся находить слабые места в инфраструктуре и оформлять выводы в профессиональные отчеты.</p><p>Обучение включает лабораторные работы, практические задания и семинары, что позволяет закрепить теорию на реальных кейсах и приобрести практический опыт использования инструментов тестирования. Такой подход помогает сформировать компетенции, необходимые для выполнения проверок безопасности и подготовки рекомендаций по их устранению.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/1fc32b2d-6f0e-4b94-827d-2faea010ab75.jpg" alt="" /></figure><ul><li>Стоимость: 99 000 руб.</li><li>Длительность: 9 дней (72 часа)</li><li>Формат обучения: вебинары, лабораторные занятия, практические проекты, обратная связь от преподавателей</li><li>Сертификат: удостоверение о повышении квалификации</li></ul><p><b>Кому подойдет:</b> системным администраторам, специалистам по информационной безопасности.</p><p><b>Преимущества:</b></p><ul><li>глубокое изучение методов тестирования на проникновение;</li><li>практические лабораторные задания;</li><li>пошаговое освоение инструментов аудита безопасности;</li><li>разбор реальных сценариев атак;</li><li>обучение у экспертов-практиков;</li><li>формирование навыков анализа сетей и приложений;</li><li>изучение способов противодействия современным атакам;</li><li>работа с вирусами, троянами и бэкдорами в учебной среде;</li><li>освоение принципов криптографии и SSL/TLS;</li><li>подтвержденный сертификат о повышении квалификации.</li></ul><p><b>Недостатки:</b></p><ul><li>высокая стоимость курса;</li><li>необходимы базовые знания администрирования;</li><li>программа ориентирована только на базовый уровень.</li></ul><p><b>Программа обучения:</b></p><ul><li>Введение в этичный хакинг и виды атак</li><li>Сбор информации и социальная инженерия</li><li>Сканирование сетей и перечисление сервисов</li><li>Переполнение буфера и методы защиты</li><li>DoS DDoS атаки ботнеты и противодействие</li><li>Вирусы черви трояны и бэкдоры</li><li>Использование снифферов и перехват сеансов</li><li>SQL инъекции и тестирование веб приложений</li><li>Основы криптографии SSL TLS SSH</li><li>Хакинг систем серверов приложений и сетей Wi Fi</li><li>Обход IDS Honeypot и брандмауэров</li><li>Итоговое тестирование на проникновение с практическими заданиями</li></ul><p><a href="https://experts1.ru/jbxWHz?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=9">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>10. <a href="https://experts1.ru/USezlw?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=10">WebSecOps</a> | Pentestit</b></p><p>Курс от специалистов Pentestit ориентирован на тех, кто хочет освоить практические навыки защиты веб-приложений и анализа инцидентов. Программа охватывает архитектуру веб-сервисов, разбор наиболее распространенных уязвимостей и работу с современными инструментами тестирования — Burp Suite, OWASP ZAP, sqlmap, Wapiti и другими. Отдельный блок посвящен Web Application Firewall: настройке компонентов, анализу атак и созданию собственных правил защиты.</p><p>Более 60% курса занимает практика в специализированной лаборатории, где моделируются реальные сценарии атак на веб-приложения. Такой подход позволяет участникам не только отработать применение инструментов, но и сформировать системное понимание процессов защиты и реагирования.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/94f379c1-1b85-4220-8aa8-1af30aa62eff.jpg" alt="" /></figure><ul><li>Стоимость: 78 500 руб.</li><li>Длительность: 21 день</li><li>Формат обучения: онлайн-воркшопы, видеоуроки, лабораторные задания, работа в виртуальной среде под руководством куратора</li><li>Сертификат: фирменный документ при успешной сдаче финальных практических заданий</li></ul><p><b>Кому подойдет:</b> пентестерам, специалистам по ИБ, разработчикоам, администраторам и DevOps-инженерам.</p><p><b>Преимущества:</b></p><ul><li>сочетание теории и практики (40% и 60%);</li><li>лаборатории, имитирующие реальные корпоративные системы;</li><li>обучение у специалистов с практическим опытом;</li><li>проработка уязвимостей веб-приложений;</li><li>освоение WAF и Nemesida API Firewall;</li><li>постоянная поддержка куратора;</li><li>обновление программы при каждом наборе;</li><li>индивидуальные проектные задания;</li><li>разбор сложных случаев на онлайн-сессиях;</li><li>доступ к личному кабинету, вебинарам и лабораториям.</li></ul><p><b>Недостатки:</b></p><ul><li>требуются базовые знания сетей и администрирования;</li><li>курс доступен только для слушателей старше 18 лет;</li><li>ограниченные сроки набора новых групп.</li></ul><p><b>Программа обучения:</b></p><ul><li>Архитектура веб приложений и сбор информации</li><li>SQL и NoSQL injection XSS XXE RCE SSTI CSRF</li><li>Инструменты анализа защищенности и атаки методом перебора</li><li>Статический анализ исходного кода</li><li>Работа с WAF и обход защитных механизмов</li><li>Настройка Nemesida WAF и Nemesida API Firewall</li><li>Противодействие DDoS brute force и flood атакам</li><li>Анализ атак и расследование инцидентов</li><li>Финальный проект с практическим заданием</li></ul><p><a href="https://experts1.ru/USezlw?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=10">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><h2>Еще 7 дополнительных курсов пентестера</h2><p>Я нашла еще 7 курсов по пентесту, которые могут быть полезны тем, кто хочет прокачать свои навыки в области этичного хакинга и тестирования на проникновение. Эти программы различаются по уровню сложности и направлению начиная от базового изучения уязвимостей до глубокого погружения в инструменты и методы атак, что позволяет выбрать подходящий вариант под любые цели обучения.</p><ul><li><a href="https://experts1.ru/sgQJja?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=netop">Специалист по тестированию на проникновение веб-приложений</a> от CyberED. Обучение сочетает 100 компетенций, 200+ практических заданий и 13 модулей, охватывающих разведку, эксплуатацию уязвимостей, повышение привилегий и работу с Active Directory. Программа построена на 80% практики в киберполигонах, а итогом станет цифровое резюме и диплом о профпереподготовке.</li><li><a href="https://experts1.ru/UuljiM?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=netop">Zero Security</a> от Pentestit. Курс направлен на практическое изучение уязвимостей веб-приложений и способов защиты от атак. Обучение сочетает 40% теории и 60% практики в специализированной лаборатории, где отрабатываются техники SQL-инъекций, XSS, CSRF, RCE и других атак. Особое внимание уделяется работе с инструментами Burp Suite, OWASP Zap, sqlmap и настройке WAF Nemesida для предотвращения инцидентов.</li><li><a href="https://experts1.ru/ptAyLs?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=netop">СЕН2. Тестирование на проникновение хакера и анализ безопасности</a> от Центра компьютерного обучения «Специалист» при МГТУ им.Н.Э.Баумана. Слушатели изучают последовательности атак, методы разведки, социальную инженерию, тестирование веб-приложений, беспроводных сетей, IoT и облачных решений. Практическая часть – работа в учебной лаборатории с использованием техник этичного хакинга и подготовку отчетов по результатам тестирования.</li><li><a href="https://experts1.ru/owlPZr?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=netop">Тестирование Веб-Приложений на проникновение</a> от Codeby Security School. Это практическая программа по тестированию веб-приложений на проникновение. В ней разбираются современные уязвимости, такие как SQL Injection, XSS, CSRF, SSTI и другие, а также методы повышения привилегий и активного/пассивного фаззинга. Обучение проходит с акцентом на лабораторные задания (65 учебных и 16 экзаменационных), дополненные живыми вебинарами и поддержкой опытных пентестеров.</li><li><a href="https://experts1.ru/yShsvK?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=netop">Профессиональный пентестинг</a> от МАИ. Вы изучите правовые аспекты пентестинга, научитесь готовить отчеты по проведенным тестированиям, освоите основы криптографии и защиты данных, а также получите практические навыки взаимодействия с заказчиками.</li><li><a href="https://experts1.ru/wmytTN?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=netop">Этичный Веб хакинг (web hacking) для начинающих</a> от Udemy. Это вводный онлайн-курс по этичному веб-хакингу, где разбираются самые распространенные уязвимости веб-приложений, в том числе SQL Injection, Path Traversal и Command Injection. Участники учатся устанавливать и настраивать необходимые инструменты, сканировать объекты через Burp Suite и ZAP Proxy, использовать SQLMap и получать практические навыки тестирования. Материал подается в формате видеолекций с пожизненным доступом, а по итогам выдается сертификат об окончании.</li><li><a href="https://experts1.ru/lfLjBi?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=netop">Все про пентест — Почему важна сетевая безопасность на Android</a> от bitdegree. Базовый онлайн-курс по этичному хакингу и тестированию на проникновение с использованием Android. В процессе обучения разбираются атаки на сети, методы сканирования и сбора информации, создание кейлоггеров и фишинговых приложений, а также защита от распространенных атак. Курс основан на практическом опыте специалиста по безопасности и подойдет тем, кто хочет начать карьеру в пентестинге через знакомую среду Android.</li></ul><h2>Бесплатные курсы пентестера</h2><p>Я подобрала для вас несколько бесплатных курсов по пентестингу — коротких, практичных и ориентированных на безопасное, этичное тестирование. Это отличный вариант для старта: в них обычно проходят основы.</p><ol><li><a href="https://experts1.ru/wBsOkn?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=netop">Белый хакинг — с нуля до первого пентеста</a> от Skillbox. Короткий интенсив, где показывают основы белого хакинга и кибербезопасности. За три дня можно попробовать простые приемы взлома и защиты веб-приложений, разобраться с базовыми атаками XSS и CSRF, написать первую программу на Python и понять, как работает профессия пентестера. Обучение построено на практических кейсах и подходит тем, кто хочет сделать первые шаги в этой сфере.</li><li><a href="https://experts1.ru/sUlEvr?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=netop">Основы безопасности и анонимности в сети</a> от GeekBrains. Бесплатный курс по веб-пентесту, в котором рассматриваются базовые подходы к защите данных и сохранению анонимности в интернете. За 2 урока можно узнать о причинах утечек информации, методах деанонимизации, безопасности WiFi-сетей и мобильных устройств, а также об угрозах, связанных с использованием сторонних прокси и TOR-нод. Программа подойдет как новичкам, так и тем, кто уже работает с IT-технологиями.</li><li><a href="https://experts1.ru/fEezFc?sub1=tproger-kf&amp;sub2=pentester-kursy&amp;sub4=netop">Penetration Testing</a> от Академии IT. Это базовый курс по пентесту с нуля по тестированию на проникновение и анализу безопасности, где слушатели учатся выявлять и эксплуатировать уязвимости, отражать атаки и формировать отчеты по результатам проверок. В программе рассматриваются техники сканирования, методы социальной инженерии, работа с SQL-инъекциями, переполнением буфера, вирусами и троянами. Обучение построено с упором на практику и закрепление знаний через лабораторные задания. По завершении выдается удостоверение о повышении квалификации.</li></ol><p>Курсы пентестеров — это ваш билет в мир интеллектуальной охоты на уязвимости: практика на реальных стендах, разбор кейсов и прокачка софта-пула превращают любопытство в востребованный навык. Вы получите не просто знания, а портфолио, опыт решения реальных задач и уверенность, что умеете думать как защитник и как атакующий — при этом действуя законно и этично. Если хотите быстро прокачаться — выбирайте курс с лабораториями, кейсами и возможностью стажировки: навыки, которые вы обретете, откроют двери в профессию и помогут строить карьеру в кибербезопасности.</p><p><i>Пишите в комментариях — какой формат обучения вам ближе, какие инструменты хотите освоить или какой курс из подборки вызвал наибольший интерес.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Как стать ML-инженером? От студента до Senior</title>
      <link>https://tproger.ru/articles/kak-stat-ml-inzhenerom--ot-studenta-do-senior</link>
      <comments>https://tproger.ru/articles/kak-stat-ml-inzhenerom--ot-studenta-do-senior?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Георгий Хлестов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-stat-ml-inzhenerom--ot-studenta-do-senior</guid>
      <description><![CDATA[<p>В этой статье вы узнаете кто такой ML-инженер, чем он занимается, какие направления есть в этой профессии, а также узнаете список технологий, который нужно знать для работы в профессии.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-stat-ml-inzhenerom--ot-studenta-do-senior">Как стать ML-инженером? От студента до Senior</a>»</p>]]></description>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 29 Aug 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мир машинного обучения и NLP развивается быстро, и новичку сложно понять, с чего начать. В этой статье я делюсь своим опытом, показываю, какие навыки и технологии действительно важны для ML-инженера, и как выстроить обучение эффективно.</p><p>💡 Больше практических гайдов и советов из реальной работы — в моём <a href="https://t.me/mentor_ml">Telegram-канале</a>.</p><h2>1. Кто такой ML-инженер?</h2><p>ML-инженер (Machine Learning Engineer) — это специалист на стыке программной инженерии и прикладной математики, который разрабатывает, внедряет и поддерживает решения на основе машинного обучения. В отличие от исследователей (Data Scientists или ML-исследователей), чья работа чаще сосредоточена на поиске новых моделей и экспериментах, ML-инженер отвечает за то, чтобы эти модели работали в реальных продуктах и приносили бизнесу пользу.</p><p>Можно сказать, что ML-инженер стоит на пересечении трёх областей:</p><ol><li>Программная инженерия — он пишет код, проектирует архитектуру, умеет работать с Git, Linux, Docker, CI/CD и другими инструментами разработки.</li><li>Математика и ML — он понимает, как устроены алгоритмы машинного обучения, умеет подбирать и обучать модели, анализировать метрики качества.</li><li>Доменные знания — он должен разбираться в задаче, которую решает (будь то рекомендации в e-commerce, компьютерное зрение в медицине или NLP в чат-ботах).</li></ol><p>📌 Если упрощённо, то задача ML-инженера — взять данные, построить модель, довести её до продакшена и следить за её качеством в реальной среде.</p><p>В реальной жизни работа ML-инженера включает в себя:</p><ul><li>сбор и подготовку данных;</li><li>выбор и обучение моделей;</li><li>разработку пайплайнов для обучения и инференса;</li><li>оптимизацию моделей под ограничения (скорость, память, стоимость);</li><li>интеграцию моделей в сервисы и приложения;</li><li>мониторинг качества и поддержку системы после релиза.</li></ul><p>Таким образом, ML-инженер — это не только человек, который «обучает нейросеточки», а полноценный инженер, который умеет превратить модель в работающий продукт.</p><h2>2. Какие направления есть в ML</h2><p>Машинное обучение — огромная область, и она делится на несколько направлений. Каждый ML-инженер рано или поздно выбирает, куда двигаться глубже. Давай разберём основные.</p><h2>2.1 Classic ML (Классическое машинное обучение)</h2><p>Это основа всей отрасли. Классическое ML использует алгоритмы, которые учатся на данных без нейросетей.</p><p>Примеры задач:</p><ul><li>предсказание цен на квартиры;</li><li>выявление мошенничества в банковских операциях;</li><li>классификация писем как «спам» или «не спам».</li></ul><p>Популярные алгоритмы:</p><ul><li>Линейная регрессия — предсказывает числа на основе данных;</li><li>Логистическая регрессия — предсказывает категории;</li><li>Деревья решений и случайные леса — учат сложные закономерности в данных;</li><li>Кластеризация (K-means, DBSCAN) — ищут группы похожих объектов.</li></ul><p>📌 Classic ML подходит для финансов, логистики, e-commerce и маркетинга. Вакансий стабильно много, а модели относительно просты и хорошо объяснимы.</p><h2>2.2 Computer Vision (CV — компьютерное зрение)</h2><p>Направление связано с обработкой изображений и видео. Цель — научить компьютер видеть и понимать картинки, как человек.</p><p>Примеры задач:</p><ul><li>распознавание лиц;</li><li>автоматическое вождение;</li><li>поиск товаров по фото;</li><li>анализ медицинских снимков.</li></ul><p>Технологии:</p><ul><li>CNN — нейросети для изображений;</li><li>Object Detection и Segmentation — нахождение и выделение объектов;</li><li>GANs — генерация новых изображений.</li></ul><p>⚠️ Есть нюанс: большинство вакансий в CV связано с медициной или военной сферой. В медицине сложно получить качественную разметку, а военка — область не для всех.</p><h2>2.3 Natural Language Processing (NLP — обработка текста)</h2><p>NLP учит компьютеры понимать и обрабатывать текст и речь.</p><p>Примеры задач:</p><ul><li>чат-боты и виртуальные ассистенты;</li><li>автоматический перевод текста;</li><li>анализ тональности отзывов;</li><li>извлечение ключевых сущностей из текста.</li></ul><p>Технологии:</p><ul><li>Токенизация — разбиение текста на слова или части слов;</li><li>Word Embeddings — превращение слов в числа;</li><li>Трансформеры — современные модели вроде GPT и BERT.</li></ul><p>📌 NLP сейчас особенно востребованное направление благодаря LLM (большим языковым моделям). Вакансии есть и в крупных компаниях, и в стартапах, а задачи интересные и творческие.</p><h2>2.4 RecSys, RL, Audio и другие направления</h2><p>Есть ещё несколько нишевых направлений:</p><ul><li>Recommender Systems (RecSys) — системы рекомендаций (Netflix, Amazon).</li><li>Reinforcement Learning (RL) — обучение с подкреплением, например для игр или роботов.</li><li>Audio / Speech Processing — распознавание и обработка звука (голосовые помощники, шумоподавление).</li></ul><p>⚠️ Эти направления встречаются в вакансиях редко, поэтому новичкам лучше рассматривать их как дополнительный навык, а не основное направление.</p><p>💡 Совет по выбору направления</p><p>Если выбирать между NLP и Classic ML, я советую NLP:</p><ul><li>активно развивается благодаря LLM;</li><li>вакансии есть как в крупных компаниях, так и в стартапах;</li><li>работа интереснее — можно решать сложные и творческие задачи.</li></ul><p>Таким образом, новичку стоит сосредоточиться на NLP или Classic ML, а остальные направления — изучать как дополнительный опыт.</p><h2>3. Мой личный опыт</h2><p>Я учился на направлении Прикладная математика и информатика в СПбГУ. На втором курсе у нас появился предмет «Введение в ИИ», и мне это невероятно понравилось — я понял, что хочу работать в сфере машинного обучения.</p><p>Однако путь до первой работы оказался не быстрым. На протяжении полутора лет я учил всё подряд: математику, формулы, разные направления ML. Стараясь разобраться во всём сразу, я не концентрировался на том, что действительно востребовано на рынке. В результате приглашений на собеседования почти не было.</p><p>Пару раз удавалось выполнить тестовое задание на стажировку, но из-за отсутствия опыта прохождения собеседований я их проваливал, хотя знания были.</p><p>Со временем мне удалось устроиться на работу, правда, с небольшой зарплатой и ежедневной двухчасовой дорогой в офис. Но этот опыт стал фундаментом: я учился на практике, совершенствовал навыки и, шаг за шагом, вырос до уровня Senior ML-инженера в Wildberries.</p><p>💡 Если бы у меня тогда был ментор, который показывал бы правильную траекторию обучения, я бы прошёл путь гораздо быстрее. Именно поэтому я сейчас курирую обучение начинающих ML-инженеров: мы строим план по навыкам, работаем над практикой и фокусируемся на том, что реально помогает получить работу.</p><p>Подробнее обо мне и моём подходе можно узнать через <a href="https://t.me/mentor_ml">Telegram</a>.</p><h2>4. Какие технологии нужно освоить, чтобы стать NLP developer</h2><p>Чтобы стать NLP-инженером, недостаточно просто изучать теорию машинного обучения. Важно освоить набор конкретных технологий и инструментов, которые используют компании в реальных проектах.</p><p>В этой главе мы разберём, с чего начинать, какие навыки обязательно нужны и как их применять на практике. От основ Python и математики до продвинутых моделей обработки текста — я покажу, что реально поможет вам стать востребованным специалистом.</p><h2>4.1 Python</h2><p>Python — это основной язык программирования для NLP и большинства задач машинного обучения. Он популярен из-за своей простоты, читаемости кода и огромного числа библиотек, которые позволяют быстро реализовывать идеи.</p><p>Что важно освоить:</p><ul><li>Базовый синтаксис и структуры данных: списки, словари, множества, кортежи;</li><li>Управляющие конструкции: условия (if), циклы (for, while);</li><li>Функции и модули: как писать свои функции и использовать готовые библиотеки;</li><li>Работа с файлами и данными: чтение и запись текстов, CSV, JSON;</li><li>Основы ООП (объектно-ориентированного программирования) — классы и объекты;</li><li>Популярные библиотеки для ML/NLP:numpy и pandas — для работы с числами и таблицами;matplotlib и seaborn — для визуализации данных;scikit-learn — базовые алгоритмы ML;nltk, spacy, transformers — для обработки текста и современных NLP-моделей.</li><li>numpy и pandas — для работы с числами и таблицами;</li><li>matplotlib и seaborn — для визуализации данных;</li><li>scikit-learn — базовые алгоритмы ML;</li><li>nltk, spacy, transformers — для обработки текста и современных NLP-моделей.</li></ul><p>💡 Совет: не пытайтесь сразу изучить всё. Сначала освоите базовый Python и работу с данными, а потом постепенно переходите к библиотекам для NLP. Главное — научиться быстро и чисто писать код, который реально работает с текстами.</p><h2>4.2 Основы ML и математики</h2><p>Чтобы стать NLP-инженером, важно понимать, как работают модели машинного обучения и на каких принципах они строятся. Не обязательно становиться профессором математики, но базовые знания помогут понять, что происходит «под капотом» и как улучшать модели.</p><h2>Основы ML</h2><ul><li>Что такое модель: это алгоритм, который учится на данных и делает предсказания.</li><li>Обучение модели: процесс настройки параметров модели так, чтобы она делала точные предсказания.</li><li>Тренировочные и тестовые данные: данные делятся на части — для обучения и для проверки качества модели.</li><li>Метрики качества: как мы измеряем, насколько хорошо модель решает задачу (например, точность, F1-score для классификации текста).</li><li>Переобучение (overfitting) и недообучение (underfitting): когда модель слишком точно запоминает данные или, наоборот, не учится их закономерностям.</li></ul><h2>Основы математики</h2><p>Некоторые математические концепции встречаются почти в любой ML-модели:</p><ul><li>Линейная алгебра: векторы, матрицы, операции над ними (важно для представления слов и работы с нейросетями).</li><li>Математическая статистика: среднее, дисперсия, корреляция; понимание распределений данных.</li><li>Вероятность: базовые законы, условная вероятность, понятие энтропии — особенно важно для NLP-моделей.</li><li>Градиентный спуск: способ, которым модели улучшают свои предсказания, постепенно «подстраивая» параметры.</li></ul><p>💡 Совет: не нужно заучивать все формулы наизусть. Достаточно понимать идею и смысл методов, чтобы применять их на практике. Когда появится опыт, многие детали станут понятны сами собой.</p><h2>4.3 Git, Linux, SQL</h2><p>Помимо Python и основ ML, каждый NLP-инженер должен уметь работать с базовыми инструментами разработки и данными. Не нужно быть экспертом — достаточно знать базовые операции, которые реально пригодятся в работе.</p><h2>Git</h2><p>Система контроля версий, которая позволяет отслеживать изменения в коде и работать в команде.</p><p>Что важно:</p><ul><li>создавать репозитории (git init, git clone);</li><li>коммитить изменения (git add, git commit);</li><li>отправлять код на удалённый репозиторий (git push, git pull);</li><li>откатывать изменения и проверять историю (git log, git checkout).</li></ul><h2>Linux</h2><p>Большинство серверов и рабочих сред работают на Linux. Важно уметь:</p><ul><li>перемещаться по файловой системе (cd, ls, pwd);</li><li>создавать, копировать и удалять файлы (touch, cp, rm);</li><li>запускать скрипты (python <a href="http://script.py/">script.py</a>, bash <a href="http://script.sh/">script.sh</a>);</li><li>управлять правами доступа к файлам (chmod).</li></ul><h2>SQL</h2><p>Язык запросов к базам данных. Основное, что нужно знать:</p><ul><li>выборка данных (SELECT);</li><li>фильтрация (WHERE);</li><li>сортировка (ORDER BY);</li><li>объединение таблиц (JOIN);</li><li>простые агрегатные функции (COUNT, SUM, AVG).</li></ul><p>💡 Достаточно этих базовых операций, чтобы спокойно работать с кодом, запускать модели и получать данные для анализа.</p><h2>4.4 Алгоритмы</h2><p>Важно понимать: умение писать качественный код и умение решать алгоритмические задачи — это разные навыки. Для того чтобы стать компетентным ML-инженером, нет необходимости писать сложные алгоритмы «с нуля».</p><p>Я работаю в Data Science с 2023 года, и за всё это время этот навык мне ни разу не пригодился. Практически все сложные алгоритмы уже реализованы в библиотеках, которыми мы пользуемся. А если какого-то функционала всё же не хватает, его можно реализовать с помощью нейросетей или готовых инструментов.</p><p>Если рассматривать алгоритмические задачи только как подготовку к собеседованиям, это тоже нерационально. По моему опыту, задачи на алгоритмы встречаются примерно на 3 из 10 собеседований, при этом овладение этим навыком требует колоссальных усилий и времени. Гораздо эффективнее тратить это время на изучение навыков, которые реально пригодятся в работе.</p><p>Единственное, что стоит освоить — это базовое понимание сложности алгоритмов: как оценивать скорость работы и нагрузку на память. Например, понятия</p><p>и</p><p>помогут понимать, почему один метод работает быстрее другого и как это влияет на большие объёмы данных. Для быстрого введения можно освоить основы за 10–15 минут — этого достаточно для реальной работы.</p><p>💡 Совет: сосредоточьтесь на практике с готовыми библиотеками и моделями, а не на написании сложных алгоритмов с нуля.</p><h2>NLP</h2><p>Для работы с текстом важно понимать, как устроены современные модели NLP и как использовать их на практике. Основой почти всех современных моделей является трансформер. Знание его архитектуры поможет разбираться, как модели обрабатывают текст, что такое self-attention, encoder и decoder, а также как применяются позиционные эмбеддинги.</p><p>Также стоит освоить промпт-инжиниринг — навык создания правильных запросов к LLM, чтобы получать качественные результаты, и понимать основные стратегии генерации текста:</p><ul><li>temperature — управляет «креативностью» модели;</li><li>top-k и top-p — ограничивают выбор токенов;</li><li>beam search — поиск наилучшей последовательности.</li></ul><p>На практике необходимо уметь работать с готовыми моделями и датасетами. Основные задачи включают:</p><ol><li>Классификация текста — разметка данных, обучение модели, подбор метрик, анализ результатов.</li><li>Использование LLM для разметки — создание классификатора с помощью больших моделей, улучшение результатов через оптимизацию промпта и выбор более качественных моделей.</li></ol><p>Для уверенной работы с NLP полезно понимать следующие концепции:</p><ul><li>Обработка текста и эмбеддинги: Bag-of-Words, TF-IDF, Word2Vec, современные эмбеддинги в BERT и других трансформерах.</li><li>Нормализация и токенизация: лемматизация, приведение к нижнему регистру, токенизация, BPE-токены.</li><li>Рекуррентные сети: базовые идеи RNN, LSTM, GRU и их ограничения.</li><li>Языковое моделирование и transfer learning: как предобученные модели помогают решать новые задачи.</li><li>Attention и трансформеры: self-attention, cross-attention, encoder/decoder, позиционные эмбеддинги.</li><li>Обучение и fine-tuning: pretraining, fine-tuning, LoRA, adapter tuning, RLHF.</li><li>Метрики и оценка: выбор метрик для генерации текста и классификации.</li></ul><p>💡 Совет: не нужно углубляться в математику и реализацию всех формул. Главное — понимать концепции, знать, как использовать модели и управлять их генерацией, а также уметь анализировать результаты.</p><h2>Machine Learning System Design (MLSD)</h2><p>Вопреки распространённому мнению, работа ML-инженера — это не только настройка нейросетей и борьба с loss’ом. Ключевой навык опытного специалиста — умение спроектировать систему машинного обучения под реальный бизнес. Это и есть Machine Learning System Design (MLSD).</p><p>MLSD позволяет понять, где нейросеть действительно принесёт эффект, и встроить её в продукт так, чтобы она работала стабильно и давала ценность бизнесу.</p><h2>Основные этапы MLSD</h2><ol><li>Понимание задачиПрежде чем браться за модель, нужно изучить бизнес-процесс и определить, какие задачи реально можно улучшить с помощью ML. Без этого легко создать бесполезную модель.</li><li>МетрикиОпределяем, на чем будем измерять успех — как для бизнеса, так и для самой модели. Это помогает оценивать реальный эффект от внедрения ML.</li><li>Данные и признакиРешаем, откуда брать данные, как их очищать и хранить, какие признаки создавать. На этом этапе закладываются основы качества модели и устойчивости системы.</li><li>Деплой и инференсПродумываем, как модель будет работать в продакшене: сколько задержек допустимо, сколько ресурсов требуется, какой бюджет выделен.</li><li>МониторингПосле релиза важно следить за качеством модели, отслеживать отклонения и дрейф данных, чтобы своевременно реагировать на проблемы.</li></ol><h2>Почему это важно</h2><p>MLSD — то, что отличает хорошего ML-инженера от «тюнера моделей». Опытный специалист умеет не просто обучить модель, а встроить её в реальный продукт так, чтобы она приносила пользу бизнесу, а не лежала в папке</p><p>.</p><h2>MLSD и грейды специалистов</h2><p>Разница между Junior, Middle и Senior ML-инженером часто заключается не в знании формул и архитектур, а именно в опыте проектирования решений:</p><ul><li>Junior умеет решать задачи и работать с моделями, но у него нет опыта реального MLSD.</li><li>Middle может работать самостоятельно, но иногда не хватает опыта проектирования системы под бизнес-кейс.</li><li>Senior заранее видит подводные камни, умеет встроить ML в продукт и делает так, чтобы ML действительно приносил результат.</li></ul><p>💡 Вывод: Junior и Senior могут знать одинаково много про модели, но ценность Senior в том, что он думает шире и создаёт системы, которые реально работают для бизнеса.</p><h2>Вывод</h2><p>Чтобы стать компетентным ML- или NLP-инженером, важно понимать не только модели и алгоритмы, но и системный подход к их применению. Знание Python, базовых методов машинного обучения, работы с данными, архитектуры трансформеров и основ промпт-инжиниринга создаёт фундамент. Но настоящий профессионал отличается умением проектировать ML-системы под реальные бизнес-задачи, выбирать метрики, организовывать данные и следить за качеством моделей в продакшене.</p><p>ML — это не бесконечная настройка нейросетей, а грамотное сочетание технологий, практики и системного мышления. Вкладывая усилия в эти области, вы сможете стать востребованным специалистом, способным создавать решения, которые реально работают и приносят бизнес-результат.</p><p>💡 Если хотите получать больше практических советов, гайдов и инсайтов из мира ML и NLP, обязательно подписывайтесь на мой <a href="https://t.me/mentor_ml">Telegram-канал</a> — там я регулярно делюсь опытом, примерами и актуальными подходами.</p>]]></content:encoded>
    </item>
    <item>
      <title>С чего начать карьеру в ML в 2025: инструменты, навыки, практика</title>
      <link>https://tproger.ru/articles/s-chego-nachat-kareru-v-ml-v-2025--instrumenty--navyki--praktika</link>
      <comments>https://tproger.ru/articles/s-chego-nachat-kareru-v-ml-v-2025--instrumenty--navyki--praktika?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Диана Тажетдинова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/s-chego-nachat-kareru-v-ml-v-2025--instrumenty--navyki--praktika</guid>
      <description><![CDATA[<p>Хотите войти в ML в 2025 году? Рассказываем, как не утонуть: какие инструменты нужны, на чём писать, как учиться, что тренировать, куда выкладывать и где искать задачи.

</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/s-chego-nachat-kareru-v-ml-v-2025--instrumenty--navyki--praktika">С чего начать карьеру в ML в 2025: инструменты, навыки, практика</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Нейронные сети]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Карьера]]></category>
      <category><![CDATA[Анализ данных]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 31 Jul 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Машинное обучение в 2025 году — это быстро меняющийся стек, десятки новых библиотек и постоянное ощущение, что вы не успеваете. Старт похож на вход в лабиринт: стены высокие, где-то притаились баги, а на карте нет подсказок.</p><p>В статье расскажем, с чего начать тем, кто хочет зайти в ML с практической стороны. Дадим информацию о стеке, который используется в реальных проектах и поможет собрать свой первый рабочий ML-сервис.</p><h2>Сначала выберитесь из симулятора</h2><p>Начинать сразу с нейросети — это как пытаться собрать космический корабль, когда ещё не знаешь, как держать отвёртку. Если сразу нырять в модели, как делают на многих курсах, то совсем скоро наступает эффект симулятора. Вы отлично справляетесь в учебной среде, но стоит попытаться применить всё в реальной системе, как внезапно ничего не работает. Как будто учились водить на автодроме, а потом выехали в час пик на МКАД.</p><blockquote>Если вы правда хотите зайти в ML, начните не с курсов, а с вопроса — что это вообще за область? В 2025 году машинное обучение — это десятки направлений, а не просто учим Python и запускаем GPT.</blockquote><p>Многие новички кидаются в ML, потому что это тренд. Потом сталкиваются с тем, что у них всё лагает. Чтобы избежать этого, нужна база — научиться писать нормальный код и читать чужой. Другими словами, стать крепким инженером-программистом.</p><p>Это не обязательно человек с дипломом MIT и 10 годами в FAANG. В первую очередь, это разработчик, который умеет думать системно и собирать рабочие решения.</p><p>Вот его ключевые харды:</p><ul><li>умеет строить сервисы — разбирается, как модули общаются друг с другом;</li><li>дебажит код — понимает, где и почему всё лажает;</li><li>пишет тесты, чистый код, умеет проводить код-ревью;</li><li>владеет Git и CI/CD;</li><li>понимает, как автоматизировать запуск и деплой моделей в продакшн.</li></ul><p>В реальных ML-проектах модель — это лишь одна часть системы. Чаще всего модель должна работать внутри веб-сервиса, обрабатывать реальные данные, взаимодействовать с другими модулями, логировать ошибки и масштабироваться под нагрузкой. Именно здесь вступает в игру инженер.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-07-25/c8896e8c-3ba9-4278-94e9-bcedeecfb455.jpeg" alt="" /></figure><p>По данным <a href="http://365datascience.com/career-advice/data-scientist-job-market">исследования</a> 365 Data Science, в 78% вакансий data scientist в 2023 году требовался Python, а в 2024‑м — в 57%. Python — это универсальный язык для всего ML-стека: от загрузки данных и визуализации до построения нейросетей и взаимодействия с API. Его поддерживают почти все библиотеки в ML. Легко подключить нужные инструменты, а не писать код с нуля. Например:</p><ul><li>scikit-learn — простая и понятная библиотека для классических моделей (логистическая регрессия, деревья решений).</li><li>PyTorch и TensorFlow — два основных фреймворка для работы с нейросетями. Они позволяют строить простые модели для начинающих и сложные, многослойные архитектуры для продвинутых задач.</li><li>Hugging Face Transformers — библиотека с готовыми моделями, которые умеют работать с текстом (например, перевод, суммаризация, генерация).</li><li>LangChain — инструмент, который помогает собирать ассистентов на базе языковых моделей.</li></ul><p>Если вы знаете Python, можете взять любую из этих библиотек и сразу пробовать писать код.</p><p>Чтобы комфортно работать с ML-инструментами, важно уверенно обращаться с базовыми возможностями языка. Это нужно, чтобы не спотыкаться о синтаксис и не тратить время на борьбу с окружением:</p><ul><li>Писать чистые функции и классы, использовать list comprehensions — чтобы ваш код легко могли читать другие, и он не превращался в кашу при росте проекта.</li><li>Работать с pip и виртуальными окружениями (venv, poetry) — чтобы проекты не конфликтовали между собой, а зависимости не ломались при каждом обновлении.</li><li>Читать и использовать чужой код, особенно в open source — потому что почти всё в ML строится на готовых библиотеках и чужих решениях. Понимать чужой код — значит, адаптировать, дебажить и развивать решения быстрее.</li></ul><p>C++ встречается гораздо реже — например, в проектах, связанных с оптимизацией скорости работы модели, inference на edge-устройствах или в библиотечном ядре фреймворков. Это уровень хард, где начинающим пока делать нечего.</p><h2>Что поможет выжить: теория без перегруза</h2><p>Машинное обучение — это прикладная статистика и немного линейной алгебры. Не нужно знать всё, чтобы начать. Нужно разобраться в основах, чтобы понимать, что вообще происходит в модели и почему она работает:</p><ul><li><b>Что такое модель.</b> Это формула или набор правил, которые помогают находить закономерности в данных — например, отличать спам от нормальных писем.</li><li><b>Как она учится.</b> Модель смотрит на примеры из прошлого — обучающую выборку. Она подбирает внутренние параметры и учится предсказывать результат. После этого модель нужно проверить на новых данных, чтобы понять, не переучилась ли она. Если слишком точно запомнила обучающие примеры, может угадывать, вместо того, чтобы выявлять общие закономерности. Такая модель отлично работает на старых данных, но даёт много ошибок на новых — это и называется переобучением (overfitting).</li><li><b>Почему accuracy = 99% — не всегда хорошо.</b> Допустим, у вас 99% нормальных отзывов и 1% фейков. Модель, которая всегда отвечает «всё нормально», покажет 99% точности — но не найдёт ни одного фейка. Поэтому важны другие метрики: precision — точность срабатываний, recall — насколько хорошо находит редкости, F1-score — баланс между ними.</li><li><b>Что такое трансформеры и эмбеддинги.</b> Трансформеры — архитектура нейросетей, которая хорошо работает с текстами. Эмбеддинги — способ превращать текст или объекты в набор чисел, с которыми можно работать как с векторами. Например, GPT — это трансформер с эмбеддингами.</li><li><b>Где грань между знанием и применением.</b> Вы не обязаны самостоятельно выводить формулы, но нужно понимать: модель может ошибаться. В идеале ещё хорошо бы знать, как это проверить.</li></ul><p>В комментариях дадим ссылки на бесплатные онлайн-курсы по ML, подходящие для быстрого старта.</p><h2>Как работает обученная модель — заглянем под капот ML-проектов</h2><p>Обучить модель — это только половина дела. Чтобы она действительно приносила пользу, её нужно обернуть в сервис и внедрить в продуктовую цепочку. Здесь начинается работа с инфраструктурой. Вот как это выглядит на практике:</p><ul><li><b>API </b>— кнопка «позвать модель» в сервисе. Без неё никто не сможет использовать продукт. Например, фрейм FastAPI помогает обернуть модель в веб-приложение, чтобы она принимала запросы через интернет.</li><li><b>Docker</b> — контейнер, в который вы собираете всю модель, зависимости и окружение. Благодаря этому код работает одинаково у вас на ноутбуке и у коллеги в облаке.</li><li><b>Облачные сервисы типа AWS, GCP и Kubernetes</b> — позволяют автоматически запускать и масштабировать модели в продакшене. Если у вас тысячи пользователей, система сама создаст нужное количество копий модели и будет следить, чтобы всё работало.</li><li><b>Очереди и базы данных (Kafka, Redis, PostgreSQL)</b> — позволяют обмениваться данными между частями системы. Kafka принимает потоки данных в реальном времени, Redis — быстро отдаёт часто запрашиваемое.</li><li><b>Мониторинг и логирование (OpenTelemetry, Grafana, Sentry)</b> — чтобы понимать, когда модель ломается, тормозит или начинает давать странные ответы.</li><li><b>CI/CD</b> — чтобы можно было обновлять модель и код автоматически. Например, после пуша в GitHub система сама собирает и выкатывает новую версию.</li><li><b>Хранилища артефактов (MLflow, Weights &amp; Biases)</b> — журналы экспериментов. Они позволяют отслеживать, какая модель была обучена, на каких данных, с какими параметрами и как себя вела.</li></ul><p><a href="https://wallarooai.medium.com/why-ml-models-rarely-reaches-production-and-what-you-can-do-about-it-4e40747c9e95">По данным Wallaroo.AI</a>, путь от модели до продакшена в компаниях обычно занимает от 31 до 90 дней, а иногда — больше года. Только 13% моделей доходят до боевого запуска. Всё из-за того, что инфраструктура сложнее, чем сама модель.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-07-25/da481064-f5d5-4f9c-ac2f-9f01258dc4d9.png" alt="" /><figcaption>На что уходят время и усилия при работе над ML-проектом</figcaption></figure><h2>Соберите агента из кубиков</h2><p>Многие не тренируют свои модели с нуля, а используют LLM (large language model). Это большие языковые модели, обученные на огромных объёмах текста. Они понимают человеческий язык и генерируют его сами. Для обращения к модели нужен API, как канал связи с мозгом. Вы пишете запрос, она отвечает.</p><p>Примеры популярных LLM:</p><ul><li>GPT (Open AI)</li><li>Claude (Ahtropic)</li><li>Llama (Meta*)</li><li>Gemini (Google)</li></ul><p><i>*Meta признана экстремистской организацией и запрещена в России</i></p><p>А если вы хотите, чтобы бот делал цепочку действий, нужен LangGraph. Это библиотека, которая собирает многошаговые сценарии. Например, пользователь пишет в чат: «Помоги написать жалобу в банк».</p><p>Что делает агент:</p><ol><li>Определяет суть запроса.</li><li>Запрашивает пользовательские данные.</li><li>Подставляет шаблон.</li><li>Формирует письмо.</li><li>Возвращает готовый текст.</li></ol><p>Аналогично можно строить агентов для поддержки, ассистентов, генераторов контента.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-07-25/6982b56b-cde9-470d-a433-64f698279aef.png" alt="" /><figcaption>Из чего состоит AI-агент</figcaption></figure><h2>Как не потеряться в AI-шуме</h2><p>Каждую неделю появляются десятки новых инструментов, библиотек, фреймворков. Это создаёт иллюзию: «чтобы не отстать, надо учить всё».</p><p>Чтобы не страдать от FOMO (fear of missing out) — страха пропустить что-то важное:</p><ul><li>Следите за 2–3 проверенными источниками</li><li>Не скачивайте каждый новый хайповый инструмент — спросите себя: «Я это реально буду использовать?»</li><li>Не гонитесь за громкими названиями (AutoGPT, Agentic Framework, Prompt Flow), потому что они приходят и уходят.</li></ul><p>Лучше знать, как стабильно задеплоить простую модель, чем разобраться в десятке фреймворков, которыми никто не пользуется.</p><p>Полезные источники:</p><ul><li>Блоги и сайты: OpenAI, Google DeepMind, Hugging Face, KDnuggets, The Gradient, MarkTechPost, Distill</li><li>Рассылки: The Rundown AI, TLDR AI, Ben’s Bites, The Batch, Import AI</li><li>Telegram-каналы: Chat GPT, DeepLearning_ai, Machine Learning, Data Science Info</li></ul><p>Подпишитесь на пару из каждой категории, чтобы оставаться в курсе, но не утонуть в потоке.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-07-25/f04b0cb1-cd14-4346-be21-0f55a4fee741.jpeg" alt="" /></figure><h2>Хватит читать туториалы — пора наступать на грабли</h2><p>Самый важный навык — уметь разбираться в новом. На курсах вы получаете теорию, но настоящий рост начинается, когда вы сами что-то строите.</p><p>Что можно сделать на старте:</p><ul><li>Ассистент для обработки писем с GPT + LangGraph.</li><li>Модель, которая предсказывает, когда тебе пора за кофе, по данным с ноутбука.</li><li>Классификатор отзывов на сайте + FastAPI + Docker.</li><li>Парсер, который берёт данные с сайта, и ML-модель, которая классифицирует категории.</li></ul><blockquote>Пытаться сразу охватить весь ML, особенно на старте, тяжело и вредно. Лучше выбрать конкретную область, формализовать, какие умения там нужны, и двигаться оттуда. Иначе вы рискуете знать всё понемногу, но не уметь ничего всерьёз. Даже сейчас, с появлением Foundation и Multimodal Models, нет массовых вакансий, где нужно уметь всё.</blockquote><p>Где искать задачи и проекты:</p><ul><li>GitHub. Используйте теги machine-learning, open-source, good first issue.</li><li>Kaggle, OpenML. Участвуйте в соревнованиях и совместных проектах по анализу данных.</li><li>Фриланс-биржи. На Upwork, Freelancer, PeoplePerHour, Workana часто появляются заказы на ML-разработку, обучение моделей, создание аналитических инструментов.</li></ul><ul><li>Профильные сообщества и форумы. Мониторьте Reddit, специализированные Telegram-каналы, Slack-группы.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-07-25/638f44e6-2461-49b0-857e-b8babe8be229.jpeg" alt="" /></figure><h2>С чего стоит начинать путь в ML в 2025 году</h2><ul><li>Без базовых навыков разработки всё будет ломаться и тормозить.</li><li>Python — основной язык.</li><li>На старте нужно знать, как учатся модели, какие бывают, как их проверять.</li><li>Для любой production-модели нужны API, Docker, базы, логирование.</li><li>В продукте часто используют готовые модели через OpenAI/Anthropic API, а не обучают свои.</li><li>Необязательно учить каждую новинку и читать 10 рассылок каждый день.</li><li>Пет-проекты, опенсорс и фриланс дают реальный рост.</li><li>Сейчас всё быстро меняется, важно уметь учиться и не паниковать.</li></ul><p>Читайте также:</p><ul><li><a href="https://tproger.ru/articles/7-kursov--s-kotoryh-realno-startuyut-v-it-v-2025">7 курсов, с которых реально стартуют в IT в 2025</a></li><li><a href="https://tproger.ru/articles/velikij-ii-proval--pochemu-8-iz-10-kompanij--vnedrivwih-nejroseti--ne-zarabotali-ni-centa">Великий ИИ-провал: почему 8 из 10 компаний, внедривших нейросети, не заработали ни цента</a></li><li><a href="https://tproger.ru/articles/ya-nemnogo-ustal-ot-sql-i-rewil-poprobovat-sebya-v-veb-razrabotke">История одного пет-проекта: как я утомился от SQL и создал ИИ-сервис для обучения</a></li><li><a href="https://tproger.ru/articles/deepseek-ili-claude--kakaya-nejroset-napiwet-kod--za-kotoryj-ne-stydno-">DeepSeek или Claude: какая нейросеть напишет код, за который не стыдно?</a></li><li><a href="https://tproger.ru/articles/kursy-mawinnogo-obucheniya--machine-learning-">Рейтинг курсов по Machine Learning, включая бесплатные программы по машинному обучению</a></li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Рабочий план: как изучить новый стек за 3 месяца</title>
      <link>https://tproger.ru/articles/rabochij-plan--kak-izuchit-novyj-stek-za-3-mesyaca</link>
      <comments>https://tproger.ru/articles/rabochij-plan--kak-izuchit-novyj-stek-za-3-mesyaca?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/rabochij-plan--kak-izuchit-novyj-stek-za-3-mesyaca</guid>
      <description><![CDATA[<p>Рассказываем, как изучить новый стек за 3 месяца, если вы в этом нуждаетесь. Делимся практическими рекомендациями, советами по оптимизации и лайфхаками</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/rabochij-plan--kak-izuchit-novyj-stek-za-3-mesyaca">Рабочий план: как изучить новый стек за 3 месяца</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 20 Dec 2024 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Задумались освоить новый стек за три месяца? Сразу ответим: это не так уж и сложно, если не бежать впереди бигтех-паровоза и вдумчиво подходить к процессу. Конечно, в IT всё меняется быстро, но с правильным подходом можно научиться многому, не потеряв себя в бескрайних просторах документации и мотивационных видео. В этом материале расскажем, как не сдаться в конце первого урока и применить знания на практике.</p><h2>Этап 1. От мечты к конкретике: отвечаем на вопрос «Зачем мне вообще изучать новый стек?»</h2><p>Постановка чёткой цели — это первый и, возможно, самый важный шаг в процессе обучения новому стеку. Иначе вы рискуете оказаться в ловушке бесконечных попыток «освоить все», что может привести к перегрузке информацией и потере мотивации. Важно сформулировать цель так, чтобы она была конкретной, измеримой и достижимой.</p><h3>Как правильно сформулировать цель?</h3><p>Лучший способ сделать цель конкретной и достижимой — это использовать метод SMART. Он состоит из пяти принципов:</p><ul><li><b>S (Specific) — Конкретность.</b> Цель должна быть чётко сформулирована. Вместо «Хочу изучить новый стек» напишите «Хочу освоить React для создания одностраничных приложений».</li><li><b>M (Measurable) — Измеримость.</b> Определите, как вы будете оценивать свой прогресс. Например, «Напишу два приложения на React и размещу их на GitHub».</li><li><b>A (Achievable) — Достижимость. </b>Цель должна быть реалистичной. Если вы ставите слишком амбициозные задачи (например, стать экспертом в React за месяц), вы, скорее всего, разочаруетесь. Важно, чтобы цель соответствовала вашим текущим возможностям.</li><li><b>R (Relevant) — Значимость. </b>Цель должна быть важной для вас. Прежде чем начать изучать новый стек, задайте себе вопрос: «Зачем мне это нужно? Как это повлияет на мою карьеру или личные проекты?»</li><li><b>T (Time-bound) — Время.</b> Установите временные рамки, чтобы не откладывать обучение на неопределённый срок. Например, «Я хочу изучить React в течение трёх месяцев и завершить портфолио-проект».</li></ul><p>Пример:</p><ul><li>Мечта: «Я хочу стать экспертом в web-разработке».</li><li>SMART-цель: «Я освою React за три месяца, создам два веб-приложения, размещу их на GitHub и получу отзывы от разработчиков».</li></ul><h3>Почему важно связать цель с личной мотивацией?</h3><p>Для того чтобы обучение было эффективным, важно, чтобы ваша цель была связана с реальной мотивацией, а не только с  требованиями. Подумайте о том, как освоение нового стека повлияет на вашу карьеру, профессиональные навыки или личные проекты. Например, вы можете быть мотивированы желанием:</p><ul><li>Получить повышение на текущей работе;</li><li>Перейти на новую должность, связанную с веб-разработкой;</li><li>Начать фрилансить и брать более сложные проекты;</li><li>Создать свой собственный продукт или приложение.</li></ul><p>Через 2-3 недели обучения пересмотрите свою цель и прогресс. Возможно, вам нужно скорректировать сроки или масштабы задачи, если вы столкнулись с трудностями. Регулярная проверка поможет избежать фрустрации.</p><h2>Этап 2. Манифестируем. Или по научному — создаем дорожную карту процесса</h2><p>Теперь, когда у вас есть чёткая цель, следующий шаг — создать дорожную карту. Это план, который поможет структурировать обучение, разбить его на управляемые этапы и отслеживать прогресс. Визуализация играет ключевую роль в поддержании мотивации и дисциплины, особенно когда вы изучаете новый стек за ограниченный срок. Давайте разберем, как правильно составить дорожную карту.</p><h3>Как структурировать дорожную карту?</h3><p>Чтобы дорожная карта была максимально эффективной, её стоит разбить на несколько ключевых этапов. Каждый из них будет включать конкретные задачи и подзадачи, а также сроки. Примерная структура дорожной карты может выглядеть следующим образом:</p><p><b>Основы стеков и технологий (1 месяц): </b></p><ol><li>Изучить основы языка программирования, фреймворков и библиотек (например, основы JavaScript, React или Angular);</li><li>Прочитать туториалы и документацию;</li><li>Сделать простое приложение для закрепления базовых знаний.</li></ol><p><b>Углубленное изучение технологий (1 месяц): </b></p><ol><li>Разобраться в более сложных концепциях, по типу асинхронного программирования, управления состоянием (Redux, MobX), роутинга и работы с API;</li><li>Разработать приложение среднего уровня сложности, например, задачник;</li><li>Применить полученные знания в реальных проектах (попросить проект у ментора или тимлида).</li></ol><p><b>Проектная работа и финальный результат (1 месяц):</b></p><ol><li>Создать полноценный проект с использованием всех изученных технологий (например, приложение с использованием базы данных, аутентификации и авторизации);</li><li>Протестировать и исправить ошибки;</li><li>Разместить проект на платформе.</li></ol><h3>Структурируем структуру. Разбиваем карту на подзадачи</h3><p>Каждый этап можно разбить на более мелкие и конкретные задачи, что поможет вам не перегружаться и чётко видеть, какой объём работы предстоит выполнить. Например, если в первом месяце обучения вы хотите освоить основы JavaScript, ваши подзадачи могут выглядеть так:</p><p><b>Неделя 1:</b></p><ul><li>Изучить синтаксис JavaScript;</li><li>Изучить простые функции и переменные;</li><li>Изучить типы данных и структуры.</li></ul><p><b>Неделя 2:</b></p><ol><li>Изучить работу с массивами и объектами;</li><li>Освоить циклы и условные операторы.</li></ol><p><b>Неделя 3:</b></p><ol><li>Практиковать работу с DOM;</li><li>Создать простое интерактивное приложение, например, калькулятор или список задач.</li></ol><p>Неделя 4:</p><ol><li>Изучить основы асинхронного программирования (callback-функции, промисы, async/await);</li><li>Написать программу для работы с внешним API.</li></ol><h3>Не забываем про визуальные инструменты</h3><p>Визуализируйте свою дорожную карту! Это поможет лучше отслеживать прогресс и не забывать о задачах. Можно использовать различные инструменты, например:</p><ul><li>Trello или Notion — создать доску с этапами и задачами, указать сроки, отмечать галочками;</li><li>Календарь Google — разместить важные задачи и дедлайны прямо в календаре;</li><li>Графики прогресса — использовать диаграммы или просто отмечать выполненные задачи.</li></ul><p>Простое добавление визуальных индикаторов помогает сосредоточиться на успехах и не терять мотивацию, даже когда вы сталкиваетесь с трудностями.</p><h2>Этап 3. Фильтруем информацию по нашей теме</h2><p>Интернет предлагает множество источников, но не все из них одинаково полезны или актуальны. Разберём, как правильно фильтровать информацию.</p><h3>Как понять, что источник качественный?</h3><p>Когда вы начинаете выбирать материалы для обучения, важно учитывать репутацию конкретных авторов или образовательных платформ. На что обращать внимание:</p><ul><li><b>Официальная документация</b> —  всегда лучший источник. Это не только руководство по установке, но и информация о лучших практиках, новых возможностях и подходах. Официальные документации также помогают понять, как правильно использовать инструменты и библиотеки в реальных проектах.</li><li><b>Платформы вроде Coursera, edX, LinkedIn Learning</b> предлагают курсы, созданные экспертами в своих областях. Особенно полезны те, которые предлагают профессионалы с опытом работы в реальных проектах. Выбирайте курсы с высоким рейтингом и отзывами от других студентов.</li><li><b>Блоги на Medium, Dev.to или Hashnode</b> тоже не стоит сбрасывать со счетов. Однако важно следить за автором — обратите внимание на его опыт и на то, как давно он пишет о данной технологии.</li><li><b>Книги</b> — тоже важный источник знаний, особенно если вам нужно углублённо изучить теоретическую сторону вопроса. Но не стоит забывать, что книги могут быть менее актуальными в условиях быстрого изменения технологий, поэтому сочетание книг и онлайн-ресурсов даёт лучший результат.</li></ul><h3>Как избежать перегрузки информацией?</h3><p>Слишком много информации может тормозить ваш прогресс. Чтобы избежать перегрузки, придерживайтесь нескольких важных правил:</p><ul><li>Не гонитесь за всеми новыми фичами (как бы вам ни хотелось)! Технологии развиваются очень быстро, но для нового стека важно фокусироваться на основах. Например, если вы изучаете React, не стоит сразу прыгать в сложные библиотеки или инструменты типа Redux или Next.js, пока не освоите базовые концепции.</li><li>После того как вы освоили базовые концепции, двигайтесь к более сложным материалам. Начните с книг и официальных руководств, а затем переходите к блогам и видеоурокам, чтобы закрепить полученные знания.</li></ul><h3>Инструменты для фильтрации информации</h3><p>Для того чтобы лучше ориентироваться в море информации и выбирать только полезные материалы, используйте следующие инструменты:</p><ul><li>Чтобы быть в курсе актуальных новостей и статей по теме, подпишитесь на RSS-ленты сайтов, например, Smashing Magazine или CSS-Tricks.</li><li>Если вам нужно углубиться в научные исследования или теоретические материалы, Google Scholar и ResearchGate помогут найти статьи, исследования и диссертации, которые можно использовать как научные источники. Советуем смотреть на то, чтобы у статей присутствовал DOI и высокий индекс Хирша (обязательно проверяйте, в каком сборнике или журнале публикуется статья).</li><li>На Reddit и Stack Overflow вы можете получить советы от опытных разработчиков и экспертов, а также найти обсуждения различных аспектов изучаемой технологии.</li></ul><h2>Этап 4. Учимся через практику</h2><p>Теория, безусловно, важна, но чтобы на практике освоить новый стек технологий, необходим опыт. Этот этап можно разделить на несколько стратегий, которые позволят вам учиться эффективно и с максимальной отдачей.</p><h3>Начинаем с небольших практических заданий</h3><p>Не стоит сразу погружаться в большие и сложные проекты. Начните с небольших и доступных задач, которые позволят вам постепенно внедрять новые знания на практике. Это могут быть:</p><ul><li><b>Кодинг-упражнения.</b> Задачи на Codewars, LeetCode или HackerRank помогут закрепить синтаксис. Здесь важно не только решать задачи, но и пытаться понять, какие подходы оптимальны.</li><li><b>Мини-проекты. </b>Разработка простых приложений или скриптов типа To-Do листов или калькулятора помогут закрепить основные навыки. Такие проекты не требуют сложной архитектуры, но дают понять, как использовать новый инструмент.</li><li><b>Воркшопы тоже необходимы.</b> Всегда приятно учиться среди таких же заинтересованных студентов.</li></ul><h3>Создаем реальные проекты с использованием нового стека</h3><p>Переходите к реальным задачам и проектам сразу, как только изучите основы. Это может быть как работа над проектом для собственного портфолио, так и участие в командных разработках. Примером может служить создание:</p><ul><li>Личного проекта. Если изучаете, например, новый фреймворк для фронтенд-разработки, создайте проект для себя любимого. Не важно, интернет-магазин, чат-бот, в портфолио пригодится все.</li><li>Open Source проектов. Один из лучших способов закрепить знания — это вклад в open-source проекты. Так вы и обучение ускорите, и посотрудничаете с более опытными разработчиками.</li></ul><h3>Прокачиваем навыки через ошибки</h3><p>Ошибка — не провал, а возможность для роста. Когда сталкиваетесь с проблемами, важно:</p><ul><li>Научиться эффективно отлаживать код (дебаггинг);</li><li>Искать решения в сообществах и у коллег;</li><li>Анализировать ошибки, а не ругаться на себя.</li></ul><p>Есть пару способов:</p><ul><li><b>Магия утра.</b> Делаем изучение нового стека неотъемлемой частью дня, например, утра. Выделяем определённое время, например, с 9 до 10 утра, и посвящаем этот час только новым знаниям.</li><li><b>Геймификация.</b> Превращаем обучение в игру, устанавливая для себя небольшие награды за достижение определённых целей (изучение новой концепции, завершение практического задания, решение сложной проблемы и т.д.). Можно прокачивать собственного персонажа, создать адвент-календарь или просто дарить себе конфеты.</li></ul><h2>Этап 5. ЭЭЭЭЭксперименты</h2><p>Эксперименты с инструментом помогают не только понять его функционал, но и стимулируют творческое мышление, что часто привести к неожиданным, но очень полезным открытиям.</p><h3>Исследуем возможности стека за пределами обычных задач</h3><p>Здесь важно не только научиться делать «классические» вещи в контексте стека, но и понять, как технология может быть адаптирована для решения нестандартных проблем.</p><ul><li>Например, если вы изучаете новый фреймворк для фронтенд-разработки, не ограничивайтесь только созданием простых веб-страниц. Попробуйте разработать интерактивное приложение с использованием возможностей фреймворка, которые кажутся сложными;</li><li>Используйте изучаемый инструмент в разных контекстах. Если это, например, язык программирования, попробуйте применить его не только в контексте основной области. Программирование на новом языке для решения задач в области анализа данных или даже для автоматизации своей личной жизни может открыть новые перспективы и способности стека.</li></ul><h3>Создаем маленькие проекты для тестирования новых фич</h3><p>Это может быть что угодно: от небольшой утилиты, которая автоматизирует часть вашей работы, до полноценных приложений, которые используют специфические функции нового инструмента. Важно, чтобы задачи не перегружали, но и были достаточно сложными, чтобы вы могли проверить функционал инструмента в действии:</p><ul><li>Например, если вы изучаете новый фреймворк для бэкенда, попробуйте создать API для небольшого приложения или сайта. Такой проект позволит освоить важные аспекты работы с фреймворком, при этом минимизировать риски и сложность;</li><li>Еще один способ — работать над проектами, у которых есть ограниченные ресурсы или условия. Например, можно создать приложение, которое должно работать на старых устройствах или с ограниченной памятью. Это заставит вас использовать функционал инструмента более эффективно и исследовать его возможности в условиях стресса.</li></ul><h3>Игры и челленджи для практики</h3><p>Игры и челленджи — отличный способ сделать обучение новым инструментам увлекательным и полезным. Существуют онлайн-платформы, где можно выполнять задания, решая реальные проблемы с использованием новых технологий, или участвовать в хакатонах. Это подход позволит не только развить свои навыки, но и познакомиться с сообществом, обменяться опытом и увидеть, как другие решают схожие задачи.</p><ul><li>Многие ресурсы предлагают задания или квесты, где вам нужно решить проблему с использованием нового стека технологий (например, <a href="https://www.codewars.com/join">Codewars</a>). Это может быть как простой SQL-запрос, так и полноценный проект с фреймворками. Участие в таких челленджах — отличная тренировка для закрепления знаний;</li><li>Участие в хакатонах, даже если вы не планируете выигрывать, —  отличная возможность быстро освоить новые технологии, работать с командой и решать реальные задачи. На хакатоне время ограничено, поэтому мозг точно вспомнит всю документацию.</li></ul><h3>Новые фичи и библиотеки</h3><p>Один из самых интересных аспектов работы с новым стеком — возможность исследовать новые функции, библиотеки и инструменты, которые ещё не были задействованы в вашем проекте. Так:</p><ul><li>В процессе работы с инструментом можно начать экспериментировать с дополнительными библиотеками, фреймворками или плагинами;</li><li>Попробуйте интегрировать стек с другими инструментами, которые вы уже используете. Например, если вы изучаете машинное обучение, подключите новый инструмент к базе данных или API, с которым  уже знакомы. Это поможет не только освоить новый стек, но и найти более эффективные пути решения задач.</li></ul><h2>Этап 6. Финальная оценка знаний</h2><p>После трёх месяцев интенсивного обучения новому стеку важно не только чувствовать, что вы освоили материал, но и провести системную оценку знаний и навыков. Как это сделать?</p><h3>Оцениваем достижения по заранее поставленным целям</h3><p>Пересмотрите цели, которые вы ставили на старте обучения, и проверьте, насколько успешно вы их достигли. Оцените прогресс в каждом из направлений, исходя из чётко определённых критериев.</p><ul><li>Составьте список KPI по каждому аспекту цели;</li><li>Задайте себе вопросы: «Какие задачи я могу выполнять без подсказок?», «Какие проблемы я ещё не могу решить?» или «Как быстро я могу справиться с новой задачей с использованием нового стека?».</li></ul><h3>Проходим финальные тесты или сертификацию</h3><p>Если у вас есть возможность пройти официальные тесты или сертификацию по изучаемой технологии, это отличный способ проверить свои знания на предмет их глубины и практической применимости. Многие технологические компании и образовательные платформы предлагают экзамены, которые помогут вам выявить сильные и слабые стороны.</p><h3>6.3. Получаем обратную связь от коллег или наставников</h3><p>Обратная связь от более опытных специалистов может быть ценным источником информации о том, насколько правильно и эффективно вы осваиваете новый стек. Наставники, коллеги или участники сообществ могут указать на ваши сильные стороны и подсказать, что стоит улучшить. Так:</p><ul><li>Пройдите процесс код-ревью, если работаете с программированием, или попросите наставника проверить вашу работу. Получение конструктивной критики поможет улучшить качество вашего кода и выявить слабые места;</li><li>Присоединяйтесь к форумам и онлайн-сообществам, где обсуждаются технологии, которые вы изучаете.</li></ul><h3>Документируем процесс и результаты</h3><p>Не забудьте записать, как именно вы изучали новый стек, какие методики использовали, какие ресурсы оказались наиболее полезными, а какие — не очень. Можно создать:</p><ul><li>Технический журнал;</li><li>Квартальный отчёт (прям как в компании).</li></ul><p>Путь освоения нового стека — не только карьерная возможность, но и прокачка скилла под названием «обучаемость». Этот навык поможет оставаться на пике профессионализма в любой сфере, даже не связанной с разработкой.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как стать DevOps в 2024 году</title>
      <link>https://tproger.ru/articles/kak-stat-devops-v-2024-godu</link>
      <comments>https://tproger.ru/articles/kak-stat-devops-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-stat-devops-v-2024-godu</guid>
      <description><![CDATA[<p>Узнали у senior и middle специалистов, как стать DevOps-инженером в 2024 году и какие инструменты нужно освоить.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-stat-devops-v-2024-godu">Как стать DevOps в 2024 году</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 01 Mar 2024 09:57:35 GMT</pubDate>
      <content:encoded><![CDATA[<p>Узнали у senior и middle специалистов, как стать DevOps-инженером в 2024 году и какие инструменты нужно освоить.</p><p>Вот, что они ответили.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><p>DevOps – это дисциплина на стыке разработки и администрирования серверов. Основная цель – упростить и ускорить доставку нового функционала пользователям.</p><p>DevOps-инженер строит серверную архитектуру приложения, готовит инструменты для совместной работы, связи приложений и микросервисов между собой. А еще снимает много работы с разработчиков и дает им возможность сконцентрироваться на реализации бизнес-логики.</p><p>Для того, чтобы начать карьеру DevOps-инженера, первым делом нужно изучить  основные инструменты и технологии системного администрирования. Основные инструменты: kubernetes, get, helm, gitlab, docker, docker-compose, jenkins, CI/CD. Также важно понимать  язык SQL-запросов и bash для написания скриптов автоматизации, уметь работать с сетевыми приложениями (nginx,php,python).</p><p>Если говорить про взаимодействие с другими отделами, то разработка начинается с общения с тимлидом, который объясняет основную задачу по настройке инфраструктуры приложения, что позволяет далее подумать о размещении, выделяемых ресурсах и способах сборки и развертывания.</p><p>Далее необходима коммуникация с разработчиками. Они подскажут, какие действия нужны для сборки или компиляции разработанного ими приложения, чтобы автоматизировать процесс сборки. Если же на сервере приложение не работает корректно, а локально у разработчика все хорошо, значит, нужно искать причину неполадки на этапах проектирования сервера, сборки и доставки.</p><p>При взаимодействии с тестировщиками можно узнать, какие инструменты тестирования можно добавить в процессы CI/CD, чтобы до релиза приложения получать все ошибки и необходимые сведения. Именно они первые скажут, что не так с приложением.</p><p>Для одной задачи всегда существует несколько разных подходов – это держит в тонусе и не дает заскучать. В этом для меня и заключается прелесть профессии.</p><p>DevOps — это методология, при которой специалисты разработки, тестирования и эксплуатации не ограничиваются своей зоной ответственности, а умеют работать в смежных областях. Другими словами, это и программист, который может задеплоить свой код в прод, и системный инженер, который может писать код.</p><p>Сегодня, когда говорят о DevOps-инженере, в основном имеют в виду именно системного инженера или инженера инфраструктуры, который работает по методологии DevOps.</p><p>Считается, что работа разработчика заканчивается на отправке кода в репозиторий. За весь остальной процесс, от сборки до деплоя в прод, отвечает DevOps-инженер. При необходимости в процесс еще включаются тестировщики.</p><p>Запуск и поддержка сервера CI/CD, который будет выполнять пайплайн — однозначно задача DevOps. А вот кто будет писать Dockerfile, код пайплайна, манифесты для деплоймента — пограничная область. Хорошо бы разработчику делать это самому, обращаясь за консультациями к специалисту DevOps.</p><p>DevOps стирает границы ответственности и уменьшает число блокеров, которые возникают у специалиста при движении к цели, а это, в свою очередь, сокращает Time To Market (TTM).</p><p>Правильный пайплайн начинается с того, что код проверяется на общую корректность. Может быть использован и лентер, и статический анализатор кода. Далее идет проверка на возможность этот код собрать. Затем подключаются юнит- и интеграционные тесты. Опционально добавляют этап ручного и/или автоматизированного тестирования.</p><p>Все эти шаги позволяют очень быстро обнаруживать возможные проблемы в коде и оперативно их устранять, повышая общее качество кода.</p><p>Самая большая проблема — нежелание некоторых специалистов выходить за рамки того, в чем они хорошо разбираются. Руководителям нужно поощрять выход сотрудников за границы своей ответственности, t-shaping, а также способствовать обучению новым технологиям.</p><p>В общем случае достаточно знать основы DevOps и бенефиты, которые этот подход приносит, чтобы захотеть его внедрять. И в этом направлении самое важное — популяризация, тимлиду важно донести ценности до коллег.</p><p>Очень важно оставаться в тренде, следить за новыми разработками, подходами, решениями. Я бы выделил два способа, которые дополняют друг друга: сильные коллеги и профильные конференции. С первыми все просто — нужно искать для себя команду экспертов, у которых будет чему поучиться. У нас в МойОфис, например, как раз такая. А вот конференций довольно много. Я бы выделил HighLoad++, DevOpsConf и DevOops.</p><p>В основе всего DevOps лежат Linux и Docker.</p><p>Для конфигурирования чаще всего используют Ansible. Реже — Chef и Puppet.</p><p>Для описания инфраструктуры кодом применяют Terraform, иногда добавляя к нему Terragrunt.</p><p>Когда приложение разрастается и появляется необходимость в оркестраторе, обычно берут Kubernetes, хотя в некоторых случаях целесообразнее использовать Nomad.</p><p>Для CI/CD чаще всего используются Jenkins и Gitlab CI. Реже GitHub Actions и Gitea Actions, TeamCity, Atlassian Bamboo и Drone CI.</p><p>В сфере Observability стоит посмотреть на OpenTelemetry Collector. За сбор и хранение метрик отвечают Prometheus и его аналог VictoriaMetrics. А для визуализации метрик, логов и трейсов фактически сегодня существует только одно решение — Grafana.</p><p>Лучше всего начать с книги «Проект “Феникс”», она станет довольно легким и ненавязчивым введением в тему.
В мире Ansible на слуху geerlingguy (Jeff Geerling), стоит познакомиться с его 
Ansible for DevOps, а также с Ansible-ролями, которые он написал.</p><p>По Kubernetes есть прекрасные курсы на Udemy за авторством Mumshad Mannambeth.
Но не так важна теория, как практика. Если нет DevOps задач, на которых можно потренироваться, их нужно находить самостоятельно. Автоматизировать рутину, поднимать серверы для бытовых нужд, запускать pet-проекты.</p><p>Термин DevOps состоит из
двух понятий: development
(разработка) и operations
(эксплуатация). Он обозначает как
методологию работы, так и саму профессию
— как правило, она называется
DevOps-инженер.</p><p>DevOps-подход
предполагает совместную работу
разработчиков и сисадминов, чтобы
повысить ее эффективность. Когда между
ними нет взаимодействия, это отражается
на результате: разработчики пишут код,
админы занимаются поддержкой, а в итоге
что-то зачастую не работает, возникают
проблемы. Культура DevOps
была придумана как раз для того, чтобы
этого избежать. А уже потом из нее
появилась профессия DevOps-инженера.</p><p>Ключевые
инструменты DevOps предназначены для
автоматизации этапов разработки,
тестирования и использования приложений.</p><p>Фундаментальным
элементом процессов DevOps являются системы
управления версиями программного кода
наподобие Git.
Инструменты CI/CD автоматизируют сборку
и тестирование кода. Контейнеризация
в Docker и оркестрация с K8s
позволяют упросить релизы и масштабирование
программ. С системой управления
инфраструктурой как кодом (IaC)
можно разрабатывать, менять и версионировать
инфраструктуру так же легко, как и
исходный код. В этом помогут инструменты
Ansible и Terraform. Для мониторинга и ведения
логов существуют возможности ELK Stack
(Elasticsearch, Logstash, Kibana) и Prometheus+Grafana.
С их помощью можно наблюдать за системами
в режиме реального времени.</p><p>Процесс
разработки сложно представить без
DevOps-подхода, поскольку с его помощью
координация между разработкой и
эксплуатацией становится гораздо
эффективнее, а релизный цикл ускоряется.
Развивая культуру сотрудничества,
автоматизируя процессы и внедряя
инструменты CI/CD, компания более гибко
и быстро реагирует на рыночные изменения
— а значит, создание и доработка продуктов
происходят быстрее, качество сервиса
повышается благодаря ранней диагностике
ошибок – чем меньше ошибок, тем больше
довольны пользователи. Кроме того,
внедрение DevOps-подхода
способствует культуре постоянного
развития и обучения, а рабочие процессы
становятся понятными и прозрачными.</p><p>DevOps
влияет на культуру команды разработчиков.
Во-первых, появляется стимул сотрудничать
и нести общую ответственность за качество
продукта на всех этапах разработки и
эксплуатации. Взаимосвязь между
специалистами Dev,
OPS,
QA
становится теснее, и это положительно
влияет на рабочую среду. В культуре
DevOps
важную роль играет автоматизация и
непрерывность процессов, что приводит
к снижению ошибок, минимизирует ручной
труд и позволяет программистам больше
времени уделять инновационным разработкам
и совершенствованию продукта. Кроме
того, рутинность задач снижается и за
счет автоматизации развертывания и
селфхилинга систем. Философия постоянного
обучения и экспериментов способствует
открытости и доверию в команде, а быстрая
обратная связь от пользователей позволяет
быстрее улучшать продукт. Благодаря
прозрачному и быстрому результату своей
работы растет мотивация сотрудников.</p><p>Эта профессия предполагает
глубокую и сложную специализацию и
обширную экспертизу сразу в нескольких
направлениях. Поэтому чаще всего
программист приходит в DevOps
не с нуля, а имея какой-то опыт в IT
— админа или разработчика. Если же
человек только планирует попасть в
IT-среду,
то не стоит начинать с онлайн-курсов.
На них можно выучиться, к примеру, на
тестировщика — но точно не на
DevOps-инженера.</p><p>Первое,
с чего следует начать, — это изучить
инструменты DevOps.
Также пригодится портфолио: если у
программиста еще небольшой опыт, в
качестве примера работы можно использовать
репозиторий на Github
со своим pet-проектом.
Стажировка в известной компании — тоже
неплохой способ начать карьеру в этой
среде.</p><p>Для
успешной работы в DevOps
не помешает опыт администрирования
базовых Linux-сред
и знание оркестраторов: несмотря на
популярность Kubernetes, опыт работы с
инструментами типа Docker Swarm пойдет только
на пользу. Желательно знать языки
программирования: Python,
Bash
и Go.
Конечно, не все инженеры пишут код сами,
но, если вы знаете даже какой-нибудь
язык типа Java,
это может пригодиться в работе. Важно
научиться работать с CI/СD-инструментами:
Jenkins, Teamcity, Gitlab Ci. Также пригодится
знание инструментов мониторинга: Elastic
или Loki, Prometheus, Grafana, VictoriaMetrics.
Необязательно изучать все подробно, но
владеть парой инструментов будет
нелишним.</p><p>Для
развития в DevOps
пригодятся и софт-скиллы: умение
коммуницировать, слышать людей, объяснять
сложные вещи доступным языком.</p><p>DevOps-инженеры могут
заниматься различными задачами.
Во-первых, это специалисты, которые
работают над продуктовой автоматизацией
и помогают разработчикам настраивать
продукт под разные среды, тестировать
его и проверять гипотезы. Другой тип
инженеров осуществляет поддержку
профессиональных инструментов и платформ
DevOps, которые предоставляют возможности
разработчикам и специалистам из
предыдущей категории.</p><p>В
зависимости от специализации
DevOps-инженера меняется круг его задач.
Специалист по продуктовой автоматизации
отвечает за организацию рабочих сред
на CI/CD-инструментах и настройку pipeline.
Кроме того, специалисты работают с
DevOps-платформами
— тем же Kubernetes или облачными инструментами.
В целом задачи любого инженера — работать
с различными специализированными
инструментами и обеспечивать их
устойчивую работу исходя из целей
заказчика или работодателя.</p><p>В
DevOps-культуре программисты Dev
и OPS-специалисты
работают совместно, стирая границы
между разработкой и развертыванием
кода. С использованием CI/CD-инструментов
разработка и тестирование кода происходят
быстрее, а процессы деплоя и управления
релизами заметно упрощаются. Тестировщики
внедряют автотесты в общее CI/CD-пространство,
что повышает качество продукта за счет
раннего обнаружения и устранения багов.
Специалисты по эксплуатации помогают
разрабатывать инфраструктуру как код,
тем самым облегчая управление,
восстановление и масштабирование
систем.</p><p>DevOps-подход
позволяет быстрее найти и устранить
баги, благодаря чему они реже попадают
в итоговый релиз. Внедрение систем
управления инфраструктурой как кодом
(IaC)
упрощает управление разными средами,
делает разработку прозрачнее и
минимизирует человеческие ошибки.
Качество продукта повышается и за счет
непрерывного сотрудничества команд,
которые обмениваются друг с другом
опытом и знаниями, вырабатывая единое
понимание рабочих задач и целей. В среде
DevOps
много внимания уделяется мониторингу
продукта и ведению логов, чтобы не только
быстро реагировать на недочеты, но и
превентивно их предотвращать. Культура
DevOps также подразумевает, что каждый
рабочий этап и каждый созданный продукт
— это возможность для развития, получения
опыта и, как следствие, улучшения качества
работы.</p><p>Основные
сложности при внедрении DevOps
— это сопротивление сотрудников
изменениям, технические проблемы с
интеграцией новых инструментов,
недостаток опыта и экспертизы специалистов.
Чтобы преодолеть эти сложности, систему
DevOps
стоит внедрять поэтапно, начав с наиболее
важных и критичных участков работы.
Кроме того, нужно уделить внимание
процессу обучения и поддержке сотрудников.
Команда должна понимать ценности DevOps
и развивать необходимые для работы
навыки. В этом поможет применение MVP
и POC-проектов:
на их примере можно без риска
продемонстрировать преимущества нового
подхода. Наиболее значимую роль играет
поддержка со стороны руководителей, а
постоянная обратная связь от сотрудников
позволит эффективнее адаптировать
культуру DevOps
в компании.</p><p>Профессия DevOps-инженера,
как и большинство других IT-профессий,
имеет несколько грейдов: начальный
junior, средний middle, старший senior.</p><p>Если
говорить о вертикальном развитии, то
уровень senior
является пределом — после него можно
либо уйти в менеджмент, либо заняться
менторством. В менеджменте это может
быть рост до тимлида, руководителя
направления или даже CTO.
Не всем подходит этот путь развития,
поэтому в большинстве случаев
DevOps-инженеры, достигнув уровня senior,
уходят в менторство или выбирают
горизонтальный путь роста, развиваясь
в смежных направлениях.</p><p>Для
горизонтального развития в DevOps важно
регулярно обновлять и расширять свои
знания. Это могут быть профессиональные
тренинги, онлайн-курсы, получение
специализированных сертификатов.
Инженеру полезно принимать участие в
конференциях, хакатонах и митапах. Можно
присоединиться к профессиональным
сообществам в соцсетях и платформах
вроде GitHub или Stack Overflow. Такой нетворкинг
способствует получению новых знаний и
обмену опытом с другими специалистами
DevOps.
Чтобы повысить профессиональную
репутацию и развить практические навыки,
стоит активно участвовать в проектах
open-source.
Быть в курсе лучших современных практик
поможет изучение профессиональной
литературы и экспертных блогов.</p><p>Тут сложно сказать что-то новое.
Методология DevOps - это
подход к организации разработки продукта,
при котором разработка, тестирование
и эксплуатация работают едино.</p><p>Методология
DevOps предназначена для
высокоэффективной работы, а ее важность
обусловлена следующими преимуществами:
снижение затрат на разработку, ускорение
выпуска новых версий и всестороннее
тестирование новых релизов.</p><p>Методология DevOps позволяет
сократить время Time To
Market. То есть внедрение
DevOps напрямую выгодно
бизнесу. Ускоряются выпуски новых версий
продукта с новыми фичами. При этом
достигается максимальная автоматизация
всех процессов, от сборки продукта, его
тестирования и до выкатки релиза до
конечного пользователя.</p><p>Можно рассказывать долго и много.
DevOps-инженер это универсальный,
многогранный специалист.</p><p>Из основных
задач можно выделить три группы:
управление инфраструктурой проекта,
автоматизация процессов разработки и
тестирования и сокращение времени
выпуска новых релизов.</p><p>Раньше it-специалисты
делились на системных администраторов,
сетевых инженеров, разработчиков,
тестировщиков и т.д. И при разработке
продукта они мало взаимодействовали
друг с другом. Но все поменялось после
прихода подхода DevOps. Этот
подход объединил эти отделы и помог им
совместно работать и выпускать новые
продукты.</p><p>За счет автоматизации сборки, тестирования
и выкатки релизов достигается высокое
качество итогового продукта и за счет
этого же достигается быстрая реализация
нового функционала.</p><p>Стоит выделить три основные проблемы
при внедрении DevOps, а именно
культурные, технические и организационные.
Под культурными сложностями имеется
ввиду сопротивление изменениями и
отсутствие взаимопонимания между
разработчиками и остальными специалистами.
В данном случае необходимо уделить
внимание общению и обучению, а также
созданию культуры, которая поддерживает
непрерывное улучшение и сотрудничество.
Технические проблемы могут включать в
себя отсутствие автоматизации и сложность
интеграции новых инструментов. А среди
организационных проблем можно выделить
отсутствие поддержки со стороны
руководства и нечеткость ролей. Чтобы
преодолеть эти проблемы, необходимо
обеспечить вовлеченность руководства
и четко определить роли и обязанности
каждого участника команды.</p><p>По моему личному мнению, тут опять же
все сводится к автоматизации.</p><p>С
внедрением методологии DevOps
уходит одна важна проблема. Теперь
разработчики не занимаются ручной
сборкой релизов, ручным тестирование
и выкаткой релизов. Если раньше
разработчикам приходилось собирать
свой код, идти к сисадминам, просить их
дать сервера и запустить на них продукт,
затем долго и муторно его тестировать,
то теперь все эти этапы почти полностью
автоматизированы.</p><p>В первую очередь вы должны хорошо
разбираться в среде, в которой будут
работать ваши приложения. Если это
Linux, то будет огромным
плюсом пройти хотя бы базовый курс по
Linux. Изучить работа с
терминалом, атак же изучить как происходит
запуск программ, что делать, если в логах
увидели ошибку и как диагностировать
ошибки.</p><p>Обязательно знать основы
сетей. Как работает IP,
TCP/UDP. Как
работает HTTP. Тут лично
моя рекомендация — это пройти курс
CCNA.</p><p>DevOps инженер в своей работе
использует огромное количество
инструментов, но среди них можно выделить
базовые, без знаний которых никак не
обойтись. Давайте рассмотрим их
списком.</p><p>Начнем с управления и
настройки инфраструктуры. Тут безусловное
лидерство удерживают инструменты под
названием Terraform и Ansible.
С их помощью можно удобно и быстро
разворачивать и настраивать
окружение.</p><p>Следующим в нашем списке
идет инструмент для управления исходным
кодом. Тут все просто это Git.
А будет это GitHub, GitLab
или что-то еще уже не важно. Принципы
Git везде одинаковые.</p><p>Затем
идут инструменты для непрерывной
интеграции (один из принципов DevOps).
Тут выбор больше. Это может быть Jenkins,
GitLab CI или
великий и ужасный Azure
DevOps.</p><p>Для хранения
готовых артефактов можно использовать
JFrog Artifactory,
Sonatype Nexus
или Docker Registry.</p><p>Ну
и завершая список необходимых к знанию
технологий нельзя не упомянуть про
системы управления контейнеризацией.
А именно Docker, Kubernetes и Read
Hat OpenShift.</p><p>DevOps как и любая другая it
специальность требует постоянного
обучения и развития. Будьте последовательны
в своем развитии. Изучайте смежные с
DevOps технологии. Если вы
работаете с Nexus, то изучите
еще и JFrog и это касается
всех инструментов.</p><p>Обязательно
посещайте конференции по DevOps,
нетворкинг лучше всего позволяет
оставаться на волне всех новинок!</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Дорожная карта SQL: от новичка до middle в 2026 году</title>
      <link>https://tproger.ru/articles/dorozhnaya-karta-obucheniya-sql-dlya-dostizheniya-urovnya-middle-</link>
      <comments>https://tproger.ru/articles/dorozhnaya-karta-obucheniya-sql-dlya-dostizheniya-urovnya-middle-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/dorozhnaya-karta-obucheniya-sql-dlya-dostizheniya-urovnya-middle-</guid>
      <description><![CDATA[<p>Актуальная дорожная карта изучения SQL в 2026 году: основы, SQL:2023, PostgreSQL 17, DuckDB, ИИ-инструменты. Полный план от новичка до middle с книгами.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/dorozhnaya-karta-obucheniya-sql-dlya-dostizheniya-urovnya-middle-">Дорожная карта SQL: от новичка до middle в 2026 году</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 23 Jan 2024 10:35:14 GMT</pubDate>
      <content:encoded><![CDATA[<p>Как изучить SQL с нуля в 2026 году и достичь уровня middle? Рассказываем с помощью актуальной дорожной карты по SQL — с учётом стандарта SQL:2023, PostgreSQL 17, новых инструментов и роли ИИ-ассистентов.</p><p><b>Ключевые выводы:</b>
- SQL остаётся стандартом индустрии в 2026 году: PostgreSQL занимает первое место второй год подряд (49% разработчиков по Stack Overflow 2024)
- SQL:2023 добавил нативный JSON-тип, граф-запросы SQL/PGQ и новые функции GREATEST, LEAST, ANY_VALUE
- ИИ-ассистенты (GitHub Copilot, Amazon Q) помогают писать SQL, но не заменяют понимание основ
- DuckDB стал стандартом для аналитики in-process; Neon и Supabase — для serverless PostgreSQL
- Знание SQL актуально как никогда: ИИ-инструменты требуют SQL-грамотности для проверки генерируемых запросов</p><ol><li><a href="https://tproger.ru/#1">Основы SQL</a></li><li><a href="https://tproger.ru/#2">Продвинутое использование SELECT</a></li><li><a href="https://tproger.ru/#3">Функции и операторы</a></li><li><a href="https://tproger.ru/#4">Присоединение таблиц</a></li><li><a href="https://tproger.ru/#5">Управление данными и базой</a></li><li><a href="https://tproger.ru/#6">Сложные запросы и аналитические конструкции</a></li><li><a href="https://tproger.ru/#7">Индексирование и оптимизация запросов</a></li><li><a href="https://tproger.ru/#8">Нормализация и денормализация данных</a></li><li><a href="https://tproger.ru/#9">Процедуры и функции</a></li><li><a href="https://tproger.ru/#10">Безопасность и аудит</a></li><li><a href="https://tproger.ru/#11">Резервное копирование и восстановление</a></li><li><a href="https://tproger.ru/#12">Работа с большими объемами данных (Big Data)</a></li><li><a href="https://tproger.ru/#13">Производительность и масштабируемость</a></li><li><a href="https://tproger.ru/#14">Интеграция с другими языками и платформами</a></li><li><a href="https://tproger.ru/#15">Отчетность и визуализация данных</a></li><li><a href="https://tproger.ru/#16">Разработка и тестирование SQL-запросов</a></li><li><a href="https://tproger.ru/#17">Глобализация и локализация</a></li><li><a href="https://tproger.ru/#18">Соблюдение стандартов и регулирование данных</a></li><li><a href="https://tproger.ru/#19">Инновации и тренды SQL</a></li><li><a href="https://tproger.ru/#20">Профессиональное развитие и сообщество</a></li><li><a href="https://tproger.ru/#21">ИИ и SQL: новая реальность 2025–2026</a></li><li><a href="https://tproger.ru/#22">Часто задаваемые вопросы</a></li><li><a href="https://tproger.ru/#23">Заключение и книги</a></li></ol><h2>1. Основы SQL</h2><ul><li>SELECT, INSERT, UPDATE, DELETE. Эти основные запросы необходимы для выполнения всех стандартных манипуляций с данными. Подробнее о синтаксисе и примерах использования можно почитать в <a href="https://tproger.ru/articles/sql-recap">справочнике основных команд SQL с примерами</a>.</li><li>WHERE. Отбор нужных данных — фундаментальная техника работы с базами данных.</li><li>ORDER BY и LIMIT. Важно для организации и ограничения вывода результатов запроса. Разобраться с деталями поможет статья про <a href="https://tproger.ru/articles/sql---eto-prosto--chast-vtoraya--sortiruem-">сортировку данных в SQL</a>.</li><li>Типы данных. Знание различных типов помогает оптимизировать хранение данных и повышать производительность. Стандарт SQL:2023 добавил нативный JSON-тип с упрощённым доступом через синтаксис data.key — без cast-преобразований.</li><li>NULL и его обработка. Понимание специфики NULL-значений важно для корректной работы с данными. Новая функция UNIQUE NULLS DISTINCT из SQL:2023 позволяет явно управлять уникальностью NULL.</li><li>Новинки SQL:2023. Стандарт обновился в июне 2023 года: функции GREATEST и LEAST для получения минимума/максимума из списка, ANY_VALUE для произвольного значения в группе, подчёркивания в числовых литералах для читаемости (1_000_000).</li></ul><h2>2. Продвинутое использование SELECT</h2><ul><li>Агрегатные функции. Сбор статистических данных через COUNT, SUM, AVG, MIN, MAX — ключевые навыки для анализа данных. В SQL:2023 появилась функция ANY_VALUE для получения произвольного значения группы.</li><li>GROUP BY и HAVING. Группировка данных и фильтрация групп критичны для создания сводных отчетов.</li><li>DISTINCT. Исключение дубликатов из результатов важно для получения точной информации.</li><li>ALIAS. Использование псевдонимов для колонок и таблиц упрощает чтение и написание запросов.</li><li>Вложенные запросы. Понимание подзапросов необходимо для сложных операций над данными.</li></ul><h2>3. Функции и операторы</h2><ul><li>Строковые функции. Владение функциями вроде CONCAT, SUBSTRING, REPLACE, UPPER, LOWER — важно для обработки текста.</li><li>Числовые функции и операторы. Основы математического модифицирования значений (ROUND, FLOOR). Новые GREATEST и LEAST из SQL:2023 заменяют CASE-конструкции для поиска максимума/минимума в списке.</li><li>Дата и время. Функции вроде NOW(), DAY(), MONTH(), YEAR() критичны для работы с временными рядами.</li><li>Условные операторы CASE и IF. Полезны для выполнения логических операций прямо в SQL.</li><li>Логические операторы. AND, OR, NOT, IN, BETWEEN, LIKE, IS NULL и другие — фундамент для фильтрации данных.</li></ul><h2>4. Присоединение таблиц</h2><ul><li>INNER JOIN. Для объединения связанных таблиц.</li><li>LEFT/RIGHT OUTER JOIN. Используются для присоединения всех записей из одной таблицы независимо от наличия совпадений в другой.</li><li>FULL OUTER JOIN. Объединение всех записей из всех присоединяемых таблиц.</li><li>CROSS JOIN. Понимание этого типа присоединения полезно для создания «декартового произведения» таблиц.</li><li>UNION, UNION ALL. Операции для объединения результатов двух запросов в один набор данных.</li></ul><h2>5. Управление данными и базой</h2><ul><li>Создание таблиц (CREATE TABLE). Основа для создания структуры хранения данных.</li><li>Изменение структуры таблиц (ALTER TABLE). Необходимо для динамического изменения схем данных. MySQL 9.x поддерживает атомарный DDL — операции либо выполняются полностью, либо откатываются.</li><li>Удаление таблиц (DROP TABLE). Важно для чистки и обслуживания базы данных.</li><li>Создание индексов (CREATE INDEX). Индексы жизненно важны для оптимизации производительности запросов.</li><li>Управление транзакциями (BEGIN, COMMIT, ROLLBACK). Обеспечивают контроль целостности данных при выполнении множественных операций.</li></ul><h2>6. Сложные запросы и аналитические конструкции</h2><ul><li>Оконные функции (OVER, PARTITION BY). Необходимы для выполнения сложных аналитических запросов.</li><li>CTE (WITH). Облегчает написание и восприятие сложных запросов.</li><li>PIVOT и UNPIVOT. Используются для трансформации таблиц, перестановки строк и столбцов.</li><li>Рекурсивные запросы. Важны для работы с иерархическими структурами данных.</li><li>Генераторы последовательностей (SEQUENCE). Это мощный инструмент для создания уникальных числовых рядов.</li><li>SQL/PGQ — граф-запросы (SQL:2023, часть 16). Новый синтаксис для обхода графовых структур прямо в SQL — полезен для анализа сетей, социальных графов и иерархий зависимостей.</li></ul><h2>7. Индексирование и оптимизация запросов</h2><ul><li>Типы индексов. Понимание разницы между кластеризованными и некластеризованными индексами — подробнее в статье <a href="https://tproger.ru/articles/sql-indeksy-za-10-minut">как работают SQL-индексы</a>.</li><li>Оптимизация индексов. Изучение использования индексов для ускорения запросов.</li><li>План запросов. Анализ планов запросов для понимания производительности SQL-операций.</li><li>Профилирование и мониторинг. Использование инструментов для отслеживания эффективности и узких мест запросов.</li><li>Рефакторинг запросов. Переписывание запросов для улучшения читаемости и производительности — практические советы в статье про <a href="https://tproger.ru/articles/sovety-po-optimizacii-sql-zaprosov-dlya-snizheniya-nagruzki-na-bd">оптимизацию SQL-запросов</a>.</li><li>ИИ-помощники при оптимизации. В 2025–2026 годах GitHub Copilot, Amazon Q и аналогичные ИИ-инструменты умеют предлагать оптимизации запросов. Однако понимание планов выполнения и принципов работы индексов по-прежнему необходимо — чтобы оценить правильность предложений ИИ.</li><li>PostgreSQL 17 (сентябрь 2024): улучшенный VACUUM с меньшим влиянием на производительность, инкрементальный бэкап из коробки и новая функция JSON_TABLE() для работы с JSON-данными как с реляционными таблицами.</li></ul><h2>8. Нормализация и денормализация данных</h2><ul><li>Понимание нормальных форм. Основные концепции для проектирования эффективной и логичной схемы баз данных.</li><li>Преимущества и недостатки нормализации. Изучение баланса между нормализацией и производительностью.</li><li>Техники денормализации. Когда и почему использовать денормализацию для улучшения производительности.</li><li>Проектирование схемы базы данных. Ключевой навык для определения связей и структур данных.</li><li>Аудит и диагностика. Регулярная проверка схемы и данных на соответствие лучшим практикам и стандартам.</li></ul><h2>9. Процедуры и функции</h2><ul><li>Хранимые процедуры. Создание и использование процедур для эффективной повторной работы.</li><li>Пользовательские функции. Разработка функций для повторного использования бизнес-логики.</li><li>Триггеры. Автоматизация реакций на изменения данных в базе.</li><li>Курсоры. Введение в концепцию итерации по строкам в таблице.</li><li>Обработка ошибок. Изучение техник обработки и возвращения ошибок.</li><li>JavaScript в хранимых процедурах. MySQL 9.x поддерживает выполнение JavaScript внутри хранимых процедур — новая возможность для разработчиков, привыкших к JS-экосистеме.</li></ul><h2>10. Безопасность и аудит</h2><ul><li>Управление пользователями. Создание и управление пользователями базы данных.</li><li>Роли и привилегии. Назначение прав и ролей для обеспечения безопасности доступа.</li><li>Шифрование данных. Методы и инструменты шифрования для защиты конфиденциальной информации.</li><li>SQL Injection. Понимание уязвимостей и методов защиты от SQL-инъекций.</li><li>Журналирование и аудит. Настройка систем аудита для отслеживания и анализа действий пользователей.</li></ul><h2>11. Резервное копирование и восстановление</h2><ul><li>Стратегии бэкапа. Понимание различных стратегий сохранения данных.</li><li>Резервное копирование. Настройка и внедрение регулярных бэкапов.</li><li>Восстановление. Техники восстановления данных из бэкапов при потере данных.</li><li>Планирование бэкапа. Разработка графиков и планов резервного копирования.</li><li>Автоматизация бэкапов. Использование сценариев и инструментов для автоматизации процесса.</li><li>Инкрементальный бэкап. PostgreSQL 17 добавил встроенную поддержку инкрементального резервного копирования — существенное снижение нагрузки по сравнению с полными бэкапами.</li></ul><h2>12. Работа с большими объемами данных (Big Data)</h2><ul><li>Партитирование. Использование партитирования для управления и улучшения производительности больших таблиц.</li><li>Обработка параллельных запросов. Эффективная обработка запросов в многопользовательской среде.</li><li>Data Warehouse. Основы проектирования и использования хранилищ данных для аналитики. Snowflake и Databricks показали самый быстрый рост в 2024 году (+49 позиций по DB-Engines).</li><li>DuckDB — новый стандарт in-process аналитики. Встраиваемая колоночная СУБД с SQL-интерфейсом: 37K+ звёзд на GitHub, LTS-релиз. Идеальна для аналитики прямо в Python/R без отдельного сервера.</li><li>Serverless PostgreSQL. Neon (700K+ БД, branching как в git) и Supabase (open source Firebase на PostgreSQL) делают развёртывание PostgreSQL таким же простым, как работа с облачными API.</li><li>Облачные базы данных. Изучение облачных технологий и управление базами данных в облаке.</li><li>NoSQL и векторные базы данных. Знакомство с NoSQL-решениями и понимание их применения. MySQL 9.x добавил тип VECTOR для хранения векторных embeddings — признак того, что векторный поиск встраивается прямо в реляционные СУБД.</li></ul><h2>13. Производительность и масштабируемость</h2><ul><li>Масштабирование баз данных. Изучение вертикального и горизонтального масштабирования баз данных.</li><li>Оптимизация хранения. Разбор техник и подходов для эффективного использования дискового пространства.</li><li>Мониторинг нагрузки. Работа с инструментами для мониторинга и анализа нагрузки на систему.</li><li>Пулинг соединений. Управление соединениями для оптимального использования ресурсов.</li><li>Репликация данных. Настройка репликации для повышения доступности и балансировки нагрузки.</li></ul><h2>14. Интеграция с другими языками и платформами</h2><ul><li>SQL в приложениях. Интеграция SQL-запросов в коде приложений на различных языках программирования.</li><li>API для баз данных. Разработка и использование API для взаимодействия с базами данных.</li><li>Импорт и экспорт данных. Освоение инструментов для обмена данными между системами.</li><li>ORMs (Object-Relational Mapping). Использование ORM для упрощения работы с базами данных в коде.</li><li>Web Frameworks и SQL. Интеграция баз данных с популярными веб-фреймворками.</li><li>MCP-серверы для баз данных. В 2025–2026 годах появились «агентные БД» — СУБД с MCP-интерфейсами, позволяющие ИИ-агентам напрямую работать с данными. PostgreSQL, SQLite и DuckDB имеют готовые MCP-серверы.</li></ul><h2>15. Отчетность и визуализация данных</h2><ul><li>SQL Reporting Services. Создание отчетов с использованием специализированных инструментов.</li><li>Интерактивные приложения для отчетности. Разработка приложений для динамической отчетности.</li><li>BI-инструменты. Внедрение инструментов бизнес-аналитики для визуализации и анализа данных.</li><li>Интеграция с Excel и другими инструментами. Экспорт данных в программы для дальнейшего анализа.</li><li>Автоматизация отчетов. Установка регулярной отправки отчетов заинтересованным сторонам.</li></ul><h2>16. Разработка и тестирование SQL-запросов</h2><ul><li>Unit-тестирование. Создание и выполнение тестов для проверки корректности SQL-запросов и хранимых процедур.</li><li>Тестирование производительности. Использование инструментов для тестирования и оптимизации производительности запросов.</li><li>Регрессионное тестирование. Автоматизация тестирования для обеспечения стабильности системы при изменениях.</li><li>Контроль версий для SQL-скриптов. Применение систем контроля версий для управления изменениями в базе данных.</li><li>Документирование. Создание документации для всех разработанных SQL-решений.</li></ul><h2>17. Глобализация и локализация</h2><ul><li>Поддержка многоязычных данных. Техники хранения и обработки данных на различных языках.</li><li>Работа с временными зонами. Управление данными с учетом разных часовых поясов.</li><li>Изменение схем данных для мульти-региональности. Адаптация схем данных под разные локации и стандарты.</li><li>Динамическая адаптация форматов. Применение различных форматов валют, чисел и дат в зависимости от локализации.</li><li>Оптимизация для различных региональных стандартов. Учет специфических требований и стандартов разных стран.</li></ul><h2>18. Соблюдение стандартов и регулирование данных</h2><ul><li>Законодательство о данных (например, GDPR). Понимание влияния законодательства на работу с данными.</li><li>Соответствие отраслевым стандартам. Соблюдение требований отраслевых стандартов данных и безопасности.</li><li>Роли данных в бизнес-процессах. Интеграция SQL-навыков в бизнес-процессы и их оптимизация.</li><li>Этика использования данных. Навыки ответственного использования и обработки чувствительных данных.</li><li>Жизненный цикл данных. Управление данными от их создания до удаления с соблюдением правил и политик.</li></ul><h2>19. Инновации и тренды SQL</h2><ul><li>Машинное обучение и SQL. Выявление возможностей использования SQL в машинном обучении. Snowflake Cortex и BigQuery ML позволяют запускать ML-модели прямо через SQL без переноса данных.</li><li>Векторный поиск в реляционных БД. PostgreSQL (pgvector), MySQL 9.x (тип VECTOR) и SQLite встраивают векторные индексы прямо в привычные СУБД.</li><li>Real-Time analytics. Использование SQL для анализа данных в реальном времени. ksqlDB и Apache Flink SQL позволяют писать стриминг-запросы на стандартном SQL.</li><li>Serverless и edge-базы данных. Neon, PlanetScale, Cloudflare D1 — новое поколение баз данных, работающих как API без администрирования серверов.</li><li>SQL для граф-данных. SQL:2023 Part 16 (SQL/PGQ) вводит стандартный синтаксис для запросов к графовым структурам — PostgreSQL уже начал реализацию.</li></ul><h2>20. Профессиональное развитие и сообщество</h2><ul><li>Участие в сообществах. Активное участие в SQL-сообществах и форумах для обмена знаниями.</li><li>Конференции и семинары. Посещение профильных мероприятий для расширения знаний и сети контактов.</li><li>Наставничество и участие в проектах. Найдите наставника или станьте частью проектов для обмена опытом.</li><li>Обучение и сертификация. Получение профессиональных сертификатов подтверждающих уровень знаний.</li><li>Блоггинг и написание статей. Публикация собственных материалов для обучения других и личного брендинга.</li></ul><h2>21. ИИ и SQL: новая реальность 2025–2026</h2><p>С 2024–2025 годов ИИ-ассистенты стали полноценными инструментами в арсенале SQL-разработчика. Это меняет не то, что нужно знать, а то, как быстро это можно применять.</p><ul><li>Text-to-SQL стал стандартом. GitHub Copilot, Amazon Q Developer, Snowflake Cortex — все крупные платформы интегрировали генерацию SQL по описанию на естественном языке. Аналитики могут получать запросы без знания синтаксиса.</li><li>ИИ помогает, но не заменяет. Сгенерированные запросы нужно проверять: ИИ может ошибаться в оптимизации, неправильно интерпретировать схему или создавать избыточные JOIN-ы. SQL-грамотность — это умение проверить и улучшить предложение ИИ.</li><li>Агентные базы данных. Появились MCP-серверы для PostgreSQL, SQLite, DuckDB — ИИ-агенты могут работать с БД напрямую: строить схемы, выполнять запросы, анализировать данные в автономном режиме.</li><li>Объяснение и документирование кода. ИИ хорошо объясняет сложные запросы на языке человека — полезно при ревью и онбординге новых разработчиков.</li><li>Вывод: SQL-знания актуальны. По данным Stack Overflow 2024, SQL остаётся одним из 5 самых используемых языков. ИИ ускоряет рутину, но понимание индексов, оконных функций и планов запросов по-прежнему отличает middle от junior.</li></ul><h2>22. Часто задаваемые вопросы</h2><p><b>Актуален ли SQL в 2026 году?</b></p><p>Да. По данным Stack Overflow Developer Survey 2024, SQL используют 49% разработчиков — это первое место среди баз данных второй год подряд. SQL:2023 обновил стандарт: нативный JSON, граф-запросы, новые функции. Облачные хранилища (Snowflake, BigQuery, Redshift) и аналитические инструменты (DuckDB) используют SQL как основной интерфейс.</p><p><b>Какую СУБД выбрать для старта в 2026 году?</b></p><p>PostgreSQL — лучший выбор для большинства. Единственная из топ-4 СУБД с положительным ростом (+16.66 по DB-Engines за 2024 год). Поддерживает JSON, полнотекстовый поиск, векторные расширения (pgvector), активно развивается. Для аналитики и data science стоит также изучить DuckDB — быстрый, лёгкий, работает без сервера.</p><p><b>Как ИИ влияет на профессию SQL-разработчика?</b></p><p>ИИ-ассистенты (GitHub Copilot, Amazon Q, ChatGPT) автоматизируют написание типовых запросов, но не заменяют понимание. Разработчик, знающий SQL, использует ИИ как мощный инструмент проверки и ускорения. Разработчик без знаний SQL не может оценить правильность генерируемых запросов — это риск для бизнес-данных.</p><p><b>Что изменилось в SQL с 2024 года?</b></p><p>Ключевые обновления: SQL:2023 (нативный JSON, GREATEST/LEAST, ANY_VALUE, SQL/PGQ для граф-запросов), PostgreSQL 17 (JSON_TABLE, улучшенный VACUUM, инкрементальный бэкап), MySQL 9.x (тип VECTOR, JavaScript в процедурах, атомарный DDL). DuckDB получил LTS-релиз и стал стандартом для аналитики in-process.</p><p><b>Сколько времени нужно на изучение SQL до уровня middle?</b></p><p>При регулярной практике (1–2 часа в день) базовый уровень достигается за 1–2 месяца, уровень middle — за 6–12 месяцев. Ключевые точки: освоение JOIN и подзапросов (2–4 недели), оконных функций и CTE (1–2 месяца), оптимизации и индексов (3–6 месяцев практики на реальных проектах).</p><h2>23. Заключение и книги</h2><p>SQL в 2026 году — не устаревшая технология, а развивающийся стандарт. Стандарт SQL:2023, PostgreSQL 17, DuckDB для аналитики и ИИ-ассистенты для генерации запросов — всё это расширяет возможности SQL-специалиста, а не делает его менее востребованным. Для углубленного освоения рекомендуем следующие книги.</p><ol><li><b>«SQL. Полное руководство» — Бен Форта</b><br />Комплексное введение в SQL, подходит как для новичков, так и для тех, кто хочет укрепить свои знания. Объясняет основы и продвинутые концепции, практические примеры помогут закрепить материал.</li><li><b>«Изучаем SQL» — Линн Бейли</b><br />Эта книга подходит для тех, кто хочет не просто запоминать команды, но и понимать, как формируются запросы и как работает SQL. Она написана простым языком и содержит множество упражнений.</li><li><b>«SQL. Сборник рецептов» — Энтони Молинаро</b><br />Отличный ресурс для практикующих разработчиков, содержит множество готовых решений для различных задач, связанных с SQL, что помогает углубить практические навыки.</li><li><b>«SQL для простых смертных» — Джон Виикер</b><br />Эта книга хорошо структурирована и объясняет тонкости работы с SQL на реальных примерах. Она подходит для тех, кто хочет не только научиться создавать запросы, но и понимать подходы к моделированию данных.</li><li><b>«Практический SQL» — Антони ДеБаррос</b><br />Книга сконцентрирована на практическом применении SQL и управлении данными. Включает полезные советы по оптимизации запросов и содержит задачи с реальными данными, что дает возможность отточить навыки в реальных условиях.</li></ol><p>Эти книги помогут глубже понять язык SQL, научат оптимальным способам организации данных и позволят получить навыки, необходимые для решения широкого спектра задач в сфере работы с базами данных. Если вы хотите применять SQL на практике с одной из самых популярных СУБД, рекомендуем изучить <a href="https://tproger.ru/articles/osnovy-postgresql-dlya-nachinayushhih--ot-ustanovki-do-pervyh-zaprosov-250851">руководство по основам PostgreSQL</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Без каких знаний не обойтись бэкендеру в 2024 году</title>
      <link>https://tproger.ru/articles/backend-2024</link>
      <comments>https://tproger.ru/articles/backend-2024?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/backend-2024</guid>
      <description><![CDATA[<p>Middle и senior бэкендеры — о ключевых навыках и стеке 2024: Go, Java, Python, Docker, Kafka, микросервисы. Узнай, что учить, чтобы расти в карьере!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/backend-2024">Без каких знаний не обойтись бэкендеру в 2024 году</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 18 Jan 2024 10:29:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>Изучать бэкенд с нуля и даже актуализировать уже имеющиеся знания и навыки — задачка не из простых. Мало того, что основное время уходит на работу и дом, нужно постоянно следить за трендами разработки, чтобы оставаться востребованным специалистом.</p><p>Выбрать стек для обучения тоже непросто: языков, технологий, библиотек и фреймворков столько, что глаза разбегаются.</p><p>Мы попросили middle и senior бэкендеров ответить на вопросы:</p><ol><li><a href="https://tproger.ru/#one">Что должен был уметь бэкендер в 2023 году?</a></li><li><a href="https://tproger.ru/#two">Какие тренды во бэкенде в 2024 году? Что нужно изучить, чтобы прокачаться?</a></li><li><a href="https://tproger.ru/#three">Специалистов какого стека не хватает на рынке? </a></li></ol><p>Вот, что они ответили.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><h2>Что должен был уметь бэкендер в 2023 году?</h2><p>Идеальный стек в 2023 году для бэкэнд программиста следующий:</p><ul><li>Строго типизированный язык Go или Java;</li><li>Умение работать с каким-либо из веб-серверов для выбранного языка, например, Echo/Gin для Go или Tomcat/Jetty для Java;</li><li>Базы данных – SQL (Postgres) и/или нереляционная база данных – MongoDB/DynamoDb/…</li><li>Кэши, например, Redis;</li><li>Очереди, Kafka, SQS;</li><li>Облачные провайдеры – Amazon, Azure, Google Cloud;</li><li>Также будет полезно, если есть опыт работы с слабо-типизированными языками, так как часто приходится работать с ситуациями, когда быстрое решение было написано на NodeJS или Python, а новые сервисы пишутся уже на Go или Java;</li><li>Метрики, знание как работают и умение работать со стандартными пакетами вроде prometheus;</li><li>Принципы и виды тестирования – юнит, компонентные, и интеграционные тесты.</li></ul><p>Еще одним немаловажным аспектом является знание верхнеуровневой архитектуры для того, чтобы быстро разбираться, как взаимодействуют сервисы, какой поток данных и гарантий доставки, сценариев отказа системы в целом. Здесь полезно понимать, что такое CAP теорема и о чем она, знать про optimistic и pessimistic locking, за счет чего будет масштабироваться сервис. Чем более опытен разработчик, тем вероятнее прохождение еще и интервью на дизайн систем.</p><p>Сохраняется спрос на Go разработчиков. Постепенно снижается спрос на разработку микросервисов – всё больше компаний тяготеют к монолитизации для уменьшения издержек на поддержку и инфраструктуру. Базы данных всё так же остаются актуальны. Из протоколов общения между сервисами становится всё более популярным GRPC.</p><p>Вот и прошел 2023 год, ставший для кого-то первым годом, проведенным в роли "IT-шника", а кто-то в этом году повысил свой грейд (уровень) и перешел на новые позиции а может и в новые компании. Естественно, все вышеперечисленное невозможно без упорного труда и постоянного совершенствования своих навыков.</p><p>Те кто только начал свою карьеру разработчика уже проделали большую работу, за что им мое почтение, и мне не понаслышке известно, что старт требует много усилий, времени и терпения. Но все мы рано или поздно сталкиваемся с неким плато, когда твои первые задачи перестают казаться тебе чем-то нереально сложным а к задачам старших коллег ты не знаешь как подступиться и многие новички (уровни intern/junior) сегодня задаются вопросом "Как мне продвинуться дальше по грейду? Что мне изучать чтобы открыть для себя этот новый горизонт?"</p><p>Когда мы затрагиваем переход из грейда middle в senior то тут все проще, речь идет о примерно таких же технических знаниях только с большей ответственностью, ведь senior это тоже middle, только с большим опытом реализации бизнес задач и он способен брать на себя ответственность за принятие глобальных, архитектурных решений, правильную постановку задач, декомпозицию системы и тд. Но в случае с intern/junior, речь как раз таки о совершенствовании навыков применения технологий.</p><p>Давайте заглянем в стэк. Говорить о конкретном стэке не совсем уместно, так как он может со временем меняться как и компания где вы работаете. Но если говорить об основном стэке среднестатистического back-end разработчика то сегодня это:</p><p><b>ЯП: </b></p><ul><li>Java;</li><li>Golang;</li><li>Python;</li><li>PHP;</li><li>C#.</li></ul><p><b>БД: </b></p><ul><li>Postgres;</li><li>MySQL;</li><li>Oracle.</li></ul><p><b>Кэши: </b></p><ul><li>Redis.</li></ul><p><b>Управление событиями системы: </b></p><ul><li>RabbitMQ;</li><li>Kafka.</li></ul><p><b>CI/CD: </b></p><ul><li>GitLab/Hub pipelines;</li><li>Docker;</li><li>K8s (тут на самом деле нет необходимости углубляться, но понимать верхнеуровнево что такое Node, а что Pod стоит).</li></ul><p>Также некоторые ЯП не могут обойтись без фреймворков, например Java – Spring, Python – Django, PHP – Laravel. В Golang тоже есть, но их я не встречал в проде ни разу за 3,5 года работы с этим языком.</p><p><b>Итак, на текущем уровне, intern/junior, разработчик должен владеть:</b></p><ul><li>основными навыками написания кода (типы, переменные, функции, объекты);</li><li>знать основные идиоматические конструкции того языка который он выбрал</li><li>уметь в SQL-запросы;</li><li>написать юнит-тесты;</li><li>правильно пушнуть код в репу и не запутаться в ветках;</li><li>уметь пользоваться хотя бы одним фреймворком своего ЯП.</li></ul><p>Идеальный стек бэкенд-разработчика в 2023 году включает в себя следующие технологии.</p><h3>Языки программирования</h3><ol><li>JavaScript/TypeScript (Node.js): Для разработки серверной части приложений.</li><li>Python: Для разработки веб-приложений, обработки данных, микросервисов и искусственного интеллекта.</li><li>Java/Kotlin: Для крупных приложений и масштабируемых сервисов.</li><li>Go: Используется для создания высокопроизводительных систем и сервисов.</li></ol><h3>Фреймворки и библиотеки</h3><ol><li>Nest.js (Node.js): Для построения быстрых и масштабируемых веб-приложений.</li><li>Django (Python): Для быстрой разработки и обеспечения безопасности веб-приложений.</li><li>Spring Boot (Java/Kotlin): Для создания эффективных и надежных приложений.</li></ol><h3>СУБД (Системы управления базами данных)</h3><ol><li>MongoDB: Для работы с данными в формате JSON и NoSQL базами данных.</li><li>PostgreSQL: Для реляционных баз данных, обеспечивающих согласованность и надежность данных.</li><li>Redis: Для кэширования данных и повышения производительности.</li></ol><h3>Контейнеризация и оркестрация</h3><ol><li>Docker: Для контейнеризации приложений и обеспечения их переносимости.</li><li>Kubernetes: Для управления и оркестрации контейнеризированными приложениями в масштабе.</li></ol><h3>Архитектурные паттерны</h3><ol><li>Микросервисная архитектура: Для создания модульных и легко масштабируемых систем</li><li>Git: Для контроля версий кода.</li><li>Jira, Trello или аналогичные сервисы: Для управления задачами и проектами.</li></ol><p>Но хочется отметить, что выбор технологий зависит от конкретных требований проекта и предпочтений команды разработчиков.</p><p>В 2023 году для бэкенд-разработчиков было критически важно обладать глубокими знаниями в технологиях, таких как Go (Golang), PHP, Python, JavaScript, и Ruby.</p><p>Go выделялся благодаря своей скорости и простоте использования, в то время как PHP сохранял свою популярность благодаря широкому распространению и новым обновлениям.</p><p>Python продолжал оставаться востребованным за свою универсальность и простоту синтаксиса, а JavaScript и Ruby оставались популярными за их гибкость и эффективность в веб-разработке.</p><p>Важными были также умения работы с базами данных, особенно с MySQL и PostgreSQL, а также понимание RESTful API и компетенции в области кибербезопасности.</p><h2>Какие тренды во бэкенде в 2024 году? Что нужно изучить, чтобы прокачаться?</h2><p>В тренде распределенные системы. Event-driven подход, а вместе с ним работа через очереди и деление систем на микро-сервисы, NoSQL базы данных. Так же в тренде применение AI – от векторных баз данных вроде Quadrant, до интеграции GPT API для самых различных задач.</p><p>Сохраняется спрос на Go разработчиков. Постепенно снижается спрос на разработку микросервисов – всё больше компаний тяготеют к монолитизации для уменьшения издержек на поддержку и инфраструктуру. Базы данных всё так же остаются актуальны. Из протоколов общения между сервисами становится всё более популярным GRPC.</p><p>Меня зовут Вячеслав Аксёнов, я бэкенд Java/Kotlin разработчик с опытом 5+ лет. Я отлично помню какая ситуация была на рынке в 2018 году и хорошо вижу, какая она сейчас.</p><p>Для того, чтобы понять какие навыки необходимы для начинающего и продвинутого бэкенд разработчика сейчас, необходимо понять, с чем вы будете работать.</p><p>Как правило, Java/Kotlin бэкенд разработчику приходится иметь дело с распределенными системами, в которых есть большое количество бизнес логики, базы данных, брокеры сообщений и выстраивание взаимодействия с фронтенд системами.</p><p>Давайте пойдем по-порядку.</p><h3>Языки программирования</h3><p>Прямо сейчас лидером в коммерческой крупной разработке является Java версии 1.8 и выше. Также видно, что крупные "модные" компании типа Ozon и Avito полагаются на GoLang. В компаниях поменьше очень много используется Python, NodeJS. Также в каких-то старых системах встречается PHP. Нет смысла пытаться ухватить все, если бы я сейчас начинал свой путь в разработке, я бы фокусировался на Java, либо Go как на самых перспективных вариантах.</p><h3>Работа с базами данных</h3><p>Опыт работы с различными системами управления базами данных (СУБД), такими как MySQL, PostgreSQL, MongoDB, и умение проектировать, оптимизировать и поддерживать базы данных. Как правило, достаточно знаний синтаксиса PostgreSQL или Oracle. Уметь писать SELECT/UPDATE/INSERT запросы и описывать структуры таблиц.</p><h3>API и веб-сервисы</h3><p>Создание и поддержка API для обмена данными между клиентской и серверной частями приложения, а также интеграция с внешними сервисами. Как бэкенд рахработчику вам предстоит проектировать API, который будет использоваться любыми потребителями – как фронтэнд, так и бэкенд. А также вам будет необходимо уметь их реализовывать на языке, который вы выбрали. В сфере Java/Kotlin бесспорным стандартом индустрии является фреймворк Spring.</p><h3>Архитектура приложений</h3><p>Понимание принципов построения масштабируемых и эффективных архитектур приложений, таких как микросервисы, серверы приложений и т.д.  Для применения этих знаний в работе, вы будете уже как минимум middle/senior уровня. Но даже на начинающем этапе не будет лишним собирать информацию.</p><h3>Безопасность</h3><p>Знание основных принципов безопасности при работе с данными пользователей, включая хранение паролей, защиту от атак и шифрование данных. В целом, многие из этих правил для бэкенд разработки одинаковые и не требуют много внимания для соблюдения. Но всегда будет полезно изучить как не допускать базовых SQL Injection уязвимостей.</p><h3>Работа с CI/CD платформами</h3><p>Знание основ CI/CD или то, как запустить свое приложение и какие системы используются для автоматизации этих процессов. В подавляющем большинстве сейчас в силу исторического наследия, используется Jenkins, в более новых проектах стараются использовать GitLab CI.</p><p>Также помимо так называемых Hard скилов, разработчику требуется знать и окружающую кухню для того, чтобы уверенно чувствовать себя в работе.</p><h3>Версионный контроль</h3><p>Опыт использования систем контроля версий, таких как Git, для управления кодовой базой и совместной разработки. В качестве стандарта для коммерческой разработки сейчас используется GitLab.</p><h3>Тестирование</h3><p>Навыки написания и автоматизации тестов для обеспечения надежности и стабильности серверной части приложения. Это касается как написаний unit и интеграционных тестов кодом, так и для базовой ручной проверки своего приложения. Имея эти навыки можно проще понимать то, как работают QA инженеры, а также Automated QA инженеры.</p><h3>Коммуникация и совместная работа</h3><p>Умение эффективно взаимодействовать с другими членами команды разработки, включая фронтенд-разработчиков, дизайнеров и тестировщиков. Величайшее заблуждение – что бэкенд разработчик обязательно сидит в углу, пишет код и ни с кем не общается. На самом деле, вы такой же член команды, как и все остальные. Вам необходимо уметь слышать других людей, уметь доносить свои мысли, иметь запас терпения и вежливости.</p><h3>Понимание основных принципов разработки ПО</h3><p>Знание методологий разработки, таких как Agile или Scrum, и умение следовать лучшим практикам программирования. Опять же, классикой для планирования задач сейчас является Jira+Confluence, в компаниях поменьше иногда Trello. Но любая уважающая себя компания выстраивает понятные и прозрачные процессы, а вам как бэкенд разработчику, нужно уметь этими инструментами пользоваться.</p><p>Бэкенд-разработчики играют ключевую роль в создании устойчивых и эффективных веб-приложений, обеспечивая их надежную работу на серверной стороне. В современном мире технологий, где цифровые продукты становятся неотъемлемой частью повседневной жизни, этот профессионал обладает широким спектром навыков и обязанностей.</p><p>Бэкенд-разработчики – это не только технические специалисты, но и ключевые участники команд, создающих инновационные и удобные цифровые продукты.</p><p>С учетом быстрого развития технологий и постоянных изменений в требованиях рынка, бэкенд-разработчики продолжают совершенствовать свои навыки и следить за последними тенденциями в индустрии. Их роль становится все более важной для обеспечения высокой производительности и безопасности веб-приложений, а их вклад остается неотъемлемой частью успешного цифрового мира.</p><p>По сути, продвижение к следующему уровню это процесс плавный, и он включает в себя постепенное углубление в то чем вы каждый день пользуетесь. Например, вы пишете SQL запрос, да он может работать и выполнять то, что требуется в задаче, но потом возникает ситуация что под большой нагрузкой он работает недопустимо медленно, и тут вы погружаетесь в построение правильного индекса в БД, read-through cache и прочие оптимизации. То есть, сталкиваясь с проблемами и находя решения вы обретаете опыт, попутно погружаясь в технологии с которыми уже знакомы.</p><p>Конечно, гораздо лучше оказаться в ситуации, когда возникающая угроза работоспособности не вызывает у вас панику, вы уже где-то читали об этом, или даже пробовали в pet-проекте. Поэтому я рекомендую заниматься развитием постоянно. Например, выделяя даже по 30-50 мин в день на чтение книги Мартина Клепмана про высоконагруженные приложения или Стива Макконнела про совершенный код, вы существенно продвинетесь вперед как специалист в своем деле. Клепман даст вам понимание о принципах и нюансах построения крупных распределенных систем, научит решать проблемы согласованности данных и как взаимодействуют отдельные компоненты в таких системах. Макконнелл научит правильно мыслить во время написания кода, выстроить определенный шаблон написания хорошего и тестируемого кода. Это будет хорошим фундаментом.</p><p>По углублению в тот ЯП которым вы пользуетесь и в его эко-систему, что-то кроме официальной документации предложить сложно, читать хабр тоже полезно, но при этом не забывать проверять информацию в официальной доке, не просто читая статью "по диагонали", но пробуя написать что-то, используя то что вы узнали из нее.</p><p>Также сегодня сильно продвигается микросервисная архитектура и Domain Driven Development. В этой связи, достаточным ресурсом для понимания будет <a href="https://microservices.io/index.html">Microservice Architecture</a> – кажется там есть все, для того чтобы узнать как это делается.</p><p>Кстати не стоит забывать и о коммуникативных навыках, чем дальше вы хотите расти, тем больше вам необходимо общаться в коллективе, взаимодействовать с другими командами, правильно выстраивать процессы, уточнять бизнес требования к продукту и тд. Тут мне очень помогла, в свое время, книга Роберта Мартина "Идеальный программист". Она не о технических знаниях, но вкладывает понимание обобщенного образа того самого идеального программиста, который умеет говорить нет когда это нужно, работать в команде и быть эффективным в быстро меняющейся среде.</p><h3>Тренд 1 — Микросервисная архитектура</h3><p>Тенденция к созданию масштабируемых, гибких и легко обновляемых систем на основе микросервисов продолжает развиваться. Разработчиков интересуют инструменты для управления и мониторинга микросервисных архитектур.</p><h3>Тренд 2 —  Serverless Computing</h3><p>Serverless computing, или "бессерверное" вычисление — модель облачных вычислений, в которой разработчики могут выполнять отдельные функции или части кода, не управляя инфраструктурой серверов. В этой парадигме пользователи оплачивают только фактически используемые вычислительные ресурсы во время выполнения своих функций, вместо поддержки постоянной доступности серверов.</p><h3>Тренд 3 — Графовые базы данных</h3><p>Для эффективного представления и обработки сложных связей и зависимостей в данных. Изучение технологий, таких как GraphQL, также может быть актуальным.</p><h3>Тренд 4 — Работа с большими данными и аналитика</h3><p>В связи с увеличением объемов данных, навыки работы с большими данными и инструментами аналитики продолжают оставаться востребованными.</p><h3>Тренд 5 — Контейнеризация и оркестрация</h3><p>Использование контейнеров (например, Docker) и оркестраторов (например, Kubernetes) остается важным аспектом для развертывания и масштабирования приложений.</p><p>В 2024 году мы наблюдаем акцент на развитии технологий метавселенной, интеграции AI и ML в бэкенд, а также использовании edge computing и блокчейн технологий. Особенно выделяются разработчики, владеющие NestJS и TypeScript, что позволяет обеспечить модульную архитектуру и строгую типизацию для повышения эффективности и надежности в разработке.</p><h2>Специалистов какого стека не хватает на рынке?</h2><p>В данный момент много вакансий на Go и Java.</p><p>На Golang активно переписываются множество проектов в различных стартапах а так же разрабатываются новые проекты с нуля.</p><p>Java отлично представлена в FinTech секторе – банках, страховых компаниях, торговле, многих интеграторах и так же в целом больших компаниях.</p><p>Кажется, что не хватает всех. : )</p><p>Если вы сейчас выбираете стек, я бы советовал идти в Go – быстрый вход и большое количество вакансий.</p><p>Но если у вас уже есть экспертиза и хочется чего-то нового, то я бы посмотрел в сторону Rust – в долгосрочной перспективе он может оказаться хорошей ставкой.</p><p>Сегодня на рынке очень не хватает специалистов именно такого стека:</p><ul><li>Понимание инструментов (ЯП, БД) и почему именно их используешь</li><li>Умение писать читаемый и структурированный код который можно покрыть тестами</li><li>Понимание построения распределенных систем (микро-сервисной архитектуры)</li><li>Умение понять задачу до того как приступите к ее решению, уточнять, задавать вопросы, быть легким в коммуникации.</li></ul><p>Кто-то может быть ждет что я напишу набор инструментов который надо знать чтобы продвинуться, но мое мнение – разработчик это не набор инструментов, а набор навыков и системное мышление которые позволят прийти к решению задачи любым подходящим набором инструментов.</p><p>И конечно же я не могу не порекомендовать просто быть активным в работе, брать задачи за которые еще не брался, не бояться предлагать решения, даже если они не совсем верные, после обсуждения со старшими коллегами они превратятся в верные а вы сможете принять опыт старших в процессе обсуждения. Будьте открыты и не бойтесь совершать ошибки – это ведь часть пути. Если хотите иметь то чего никогда не имели (грейд выше) – делайте то чего никогда не делали.</p><p>И всегда помните – любая большая и сложная система, это множество маленьких простых блоков правильно собранных вместе.</p><p>Я бы выделил:</p><ol><li>Go (Golang): язык программирования Go становится все более популярным в разработке высокопроизводительных и эффективных приложений. Он хорошо подходит для создания микросервисов и обработки параллельных задач.</li><li>Rust: Rust получает внимание благодаря своей производительности и высокой степени безопасности при работе с системным уровнем кодом. Он может быть использован для разработки высоконагруженных приложений.</li><li>Kotlin (с Spring Boot): Kotlin, как язык, и Spring Boot, как фреймворк, становятся популярными в мире Java-разработки. Kotlin часто используется в сочетании с Spring Boot для разработки современных и надежных приложений.</li></ol><p>Сейчас на рынке ощущается нехватка специалистов, владеющих современными технологиями, включая AI, ML, edge computing и блокчейн. Также востребованы навыки в области метавселенной и кибербезопасности. Особую ценность представляют разработчики с опытом работы с NestJS и TypeScript для создания масштабируемых веб-приложений.</p><p>Я бы порекомендовал бэкенд-разработчикам продолжать обучение и осваивать новые технологии. Важно уделять внимание изучению современных подходов в разработке, таких как работа с метавселенной, AI и ML, а также укреплять навыки в области кибербезопасности. Не менее важно освоить NestJS и TypeScript, которые открывают новые горизонты в разработке веб-приложений.</p><p>В последние годы микросервисы стали одним из актуальных архитектурных трендов в сфере разработки ПО. Amazon, Netflix, The Guardian, Twitter, PayPal, SoundCloud уже начали использовать микросервисные системы на облаке. В Китае Tencent, Baidu, Jingdong, Taobao, 360 Search также начали мигрировать к микросервисной архитектуре. Например, в системе WeChat от Tencent содержится более 3 000 микросервисов, размещенных на более чем 20 000 машинах. Онлайн-сервис системы Netflix использует более 500 микросервисов, вовлекая 5 миллиардов взаимодействий микросервисов в день. Каждая страница Amazon включает от 100 до 150 вызовов микросервисов.</p><p>Использование данного подхода предполагает построение приложений как набора маленьких, независимых сервисов, взаимодействующих друг с другом через API. Такой подход обеспечивает большую масштабируемость и гибкость, поскольку каждый сервис может быть разработан, развернут и управляем независимо.</p><p>С другой стороны, создание микросервисов позволяет легко перемещать приложения между разными средами, такими как разработка, тестирование и производство, без необходимости внесения изменений в код. Что в свою очередь увеличивает скорость и качество разработки, а также процесс доставки решения до клиента.</p><p>В совокупности это помогает улучшить эффективность разработки, так как позволяет более маленьким и направленным на определенные задачи командам работать независимо над различными частями приложения.</p><p>Таким образом можно сделать вывод, что контейнеризация и микросервисы стремительно набирают популярность как способ создания и развертывания программного обеспечения, и ожидается, что их применение будет продолжать расти в ближайшие годы.</p><p>IT специалистам я бы рекомендовал повышать компетенции развивать понимание различных технологий и инструментов для построения микросервисов. По-моему мнению знание следующих технологий поможет быть востребованным в 2024 году:</p><h3>Контейнеризация</h3><ol><li>Docker для создания, развертывания и управления контейнерами, где будут запускаться микросервисы.</li><li>Kubernetes для оркестрации и управления контейнеризированными приложениями.</li></ol><h3>Коммуникация между сервисами</h3><ol><li>RESTful API и GraphQL для определения интерфейсов, через которые микросервисы могут обмениваться данными.</li><li>RabbitMQ, Kafka для обеспечения асинхронного взаимодействия и обмена сообщениями между микросервисами.</li></ol><h3>Мониторинг и отладка</h3><ol><li>Prometheus, Grafana для мониторинга состояния и производительности микросервисов.</li><li>Elasticsearch, Logstash, Kibana для централизованного сбора, хранения и анализа логов.</li></ol><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><p>Читайте также: <a href="https://tproger.ru/articles/kak-stat-programmistom">Как стать программистом с нуля — полный гайд</a>, <a href="https://tproger.ru/articles/kak-stat-ai-inzhenerom-v-2024-godu---powagovyj-gajd">Как стать AI-инженером в 2024 году</a>, <a href="https://tproger.ru/articles/knigi-po-programmirovaniyu">37 книг для программиста</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Дорожная карта по Android-разработке с нуля</title>
      <link>https://tproger.ru/articles/kak-stat-android-razrabotchikom-s-nulja-dorozhnaja-karta</link>
      <comments>https://tproger.ru/articles/kak-stat-android-razrabotchikom-s-nulja-dorozhnaja-karta?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-stat-android-razrabotchikom-s-nulja-dorozhnaja-karta</guid>
      <description><![CDATA[<p>Рассказываем, как стать Android-разработчиком с нуля, следуя дорожной карте. Вы узнаете, что изучать и в какой последовательности.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-stat-android-razrabotchikom-s-nulja-dorozhnaja-karta">Дорожная карта по Android-разработке с нуля</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 23 Aug 2023 10:50:07 GMT</pubDate>
      <content:encoded><![CDATA[<p>Как стать разработчиком Android-приложений с нуля, с чего начать и куда развиваться — поможет понять дорожная карта:</p><figure><img src="https://media.tproger.ru/uploads/2021/01/Android-1.png" alt="" /></figure><ol><li><a href="https://tproger.ru/#part1">Java или Kotlin?</a></li><li><a href="https://tproger.ru/#part2">Начало работы</a></li><li><a href="https://tproger.ru/#part3">Система контроля версий</a></li><li><a href="https://tproger.ru/#part4">Android Architecture</a></li><li><a href="https://tproger.ru/#part5">Создание приложений</a></li><li><a href="https://tproger.ru/#part6">Продвинутая разработка</a></li><li><a href="https://tproger.ru/#part7">Заключение</a></li></ol><h2>Java или Kotlin?</h2><p>Мы уже проводили <a href="https://tproger.ru/articles/java-vs-kotlin/">сравнение Java и Kotlin</a>, в ходе которого пришли к выводу, что оба языка важны. Так, без знания Java будет сложно разобраться в Kotlin, который всё ещё использует JVM. С другой стороны, Kotlin сделал большой шаг вперёд и ориентируется именно на Android-разработку, тогда как Java используется также для бэкенда, десктоп-приложений и Big Data.</p><h2>Начало работы</h2><p><a href="https://developer.android.com/studio">Скачайте Android Studio</a> и разберитесь с данной IDE.</p><p>Теперь настало время поближе познакомиться с выбранным языком. Если вы решили со старта взяться за Kotlin, имейте в виду, что документация предполагает хотя бы базовое знание Java.</p><p>Что Kotlin, что Java являются полноценными ООП языками, поэтому освойте принципы объектно-ориентированного программирования.</p><p>Изучите структуры данных и алгоритмы, подкрепите теорию практикой.</p><p>Скачайте систему автоматической сборки <a href="https://gradle.org/install/">Gradle</a>, потому как ручная сборка проектов с указанием нужных библиотек и фреймворков — процесс трудоёмкий.</p><h2>Система контроля версий</h2><p>Если вы ещё не работали с VCS, самое время начать. Изучите возможности и основные команды Git, выберите для себя один из веб-сервисов для хостинга проектов и попрактикуйтесь на первых репозиториях.</p><h2>Android Architecture</h2><p>Различные паттерны разработки позволяют повысить качество кода, сделать его более понятным и масштабируемым. К основных паттернам относятся:</p><ul><li>MVVM (Model–View–ViewModel);</li><li>MVI (Model-View-Intent);</li><li>MVP (Model-View-Presenter).</li></ul><p>Подробнее о них можно узнать из <a href="https://habr.com/ru/post/344184/">статьи</a>.</p><h2>Создание приложений</h2><p>А здесь самое интересное.</p><p>Activity в Android — это по сути окно приложения. Простые приложения состоят из одного окна, сложные — из двух и более. Жизненный цикл Activity включает в себя шесть коллбэков:</p><ul><li>onCreate() — создание активити;</li><li>onStart() — подготовку к отображению на экране;</li><li>onResume() — отображение на экране;</li><li>onPause() — приостановку процессов;</li><li>onStop() — состояние невидимости;</li><li>onDestroy() — завершение работы.</li></ul><p>Далее изучите создание гибких интерфейсов с использованием фрагментов и начните выполнять отладку с помощью Android Studio Debugger.</p><p>Для работы с компонентами используйте такие инструменты, как Room, Navigation, WorkManager, LiveData, Data Binding. Из сторонних библиотек будут полезны Glide, Retrofit, GSON и Firebase.</p><p>Разберитесь с <a href="https://developer.android.com/reference/android/content/Intent">Intent</a> для взаимодействия между объектами Activity и объектом <a href="https://developer.android.com/reference/android/content/Context">Context</a>, который предоставляет доступ к ресурсам и другим объектам, в том числе к Activity.</p><p>Ну и как стать Android-разработчиком с нуля без практики? Следуйте инструкциям из данного видеоурока и подключитесь к NASA через API, чтобы получить доступ к фотографиям из космоса:</p><h2>Продвинутая разработка</h2><p>Продолжайте развиваться, осваивая безопасную разработку. Для тестирования подойдут фреймворки JUnit и Espresso, для управления зависимости — библиотеки Dagger и Koin. Дополнительно почитайте о параллелизме и многопоточности, узнайте, что это и как используется в создании Android-приложений.</p><h2>Заключение</h2><p>Так как же стать Android-разработчиком с нуля? Определитесь с языком программирования, научитесь работать с Android Studio, Gradle и веб-сервисом для хостинга проектов. Вам предстоит разобраться в основных паттернах и их отличиях, изучить создание гибких интерфейсов, а также подключаться к другим сервисам через API. Продвинутая разработка предполагает тестирование, управление зависимостями, работу с параллелизмом и многопоточностью.</p>]]></content:encoded>
    </item>
    <item>
      <title>Дорожная карта Python-разработчика 2023</title>
      <link>https://tproger.ru/articles/roadmap-python-razrabotchika-2023</link>
      <comments>https://tproger.ru/articles/roadmap-python-razrabotchika-2023?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Лена Капаца]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/roadmap-python-razrabotchika-2023</guid>
      <description><![CDATA[<p>Изучайте Python с нуля с нашей дорожной картой для начинающих питонистов. Пошаговый гайд для тех, кто любит структурированную информацию.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/roadmap-python-razrabotchika-2023">Дорожная карта Python-разработчика 2023</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 22 Aug 2023 07:50:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы восхищаетесь Python так же, как и я, и задумываетесь о карьере Python-разработчика, вам понадобится наша дорожная карта по Python. В августе 2023 года этот ЯП возглавил рейтинг популярнейших языков согласно <a href="https://www.tiobe.com/tiobe-index/">индексу TIOBE</a>. Помимо Машинного / Глубокого обучения в этой вселенной существует еще много прекрасных высокооплачиваемых направлений.</p><p>В этой статье вы познакомитесь с актуальными в 2023 навыками для Python Developer и производных этой профессии. Будучи сторонником практического подхода, я считаю, что лучшего способа осилить целую дорожную карту, чем постепенно пробовать каждый из инструментов, нет. Плюс с ходом времени вы поймете, каким именно разработчиком хотите стать, и некоторые продукты изучать вообще не придется. Так что эта дорожная карта Python стоит воспринимать как некий универсальный листинг для новобранца, который играется со многим и так находит для себя самое интересное.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/00961e9e-fc46-4e71-8b75-2f79b4044685-scaled.jpg" alt="" /></figure><h2>Основы Python</h2><p>Старательно сокращаемый раздел знаний во всяческих онлайн-университетах, что ловят волну и хотят набрать как можно больше студентов на раскрученные факультеты. Что ж, если вы еще не определились, каким именно разработчиком хотите стать, упор рекомендую сделать именно на эту часть. Это пригодится и на собеседовании Full Stack Python Developer, и DevOps и Data Scientist.</p><p>С годами, когда вы обретете свободу в обращении с этим языком, то будете с ощущением легкой ностальгии возвращаться к вечно актуальным основам, щелкать их как орешки. Спустя семь лет разработки я все еще открываю для себя новое с каждым новым релизом языка и практикой.</p><h2>Среды разработки</h2><p>В мире питонических IDE все довольно просто: лидерство делят VSCode и PyCharm. За ними следует вереница универсальных сред разработки вроде Sublime. Здесь скучной документации почти не будет: развлекайтесь с красочными темами, тонко настраивайте среду под себя.</p><h2>Деплой</h2><p>Условно в эту категорию можно поместить инструменты, необходимые для развертывания и поддержания ваших программ:</p><ul><li>Git для грамотного хранения версий кода (так называемое версионирование)</li><li>Docker для быстрой развертки копий программы на разных устройствах</li><li>Kubernetes для непрерывного деплоя из репозитория для нескольких устройств</li><li>Linux как типичная дешевая операционка для развертывания вашей программы</li></ul><h2>Фреймворки</h2><p>Их, безусловно, больше двух, но для старта достаточно пощупать Django и Flask. И попутно задеть ngrok – утилиту для развертывания локальных серверов, хоть ее и отнесла в предыдущую категорию.</p><h2>Сбор и хранение данных</h2><p>Поскольку информации придается огромное значение, то и инструментария для ее сбора, обработки и хранения создали много. Углубляться в специализированные хранилища Big Data не станем на сей раз, это есть в <a href="https://tproger.ru/articles/roadmap-data-science-2023/">роадмапе Data Science</a>. Но общепринятые принципы хранения понимать стоит точно. А это SQL (Structured Query Language – “структурированный язык запросов”). Уставшие от этого застоявшегося в развитии стандарта разработчики создали NoSQL, однако огромная доля сервисов сегодня все равно придерживается первого варианта.</p><h2>API</h2><p>С этим разделом знаний знакомиться было непросто. Концепция программного интерфейса стала для меня прозрачной, только когда на работе без нее стало не обойтись. Если вы когда-нибудь собирали ботов в nocode-конструкторах, то наверняка задумывались, как извлекать логи разговоров. С этим и помогает API.</p><p>К примеру, в моей компании одного из ботов держат на конструкторе Aimylogic, из которого логи отдает Aimylogic Reporter API.</p><h2>Боты</h2><p>Чат-ботов считают новой вехой в развитии интерфейсов: вместо того, чтобы бродить по веб-страницам и заполнять формы, мы можем поболтать в мессенджере с виртуальным ассистентом. Это еще и упрощает обращение с системами: диалог воспринимается проще, чем GUI с неизвестным уровнем сложности. Так что эта категория навыка плотно обосновалась в гайдах и для других языков, вроде JavaScript.</p><p>Чтобы создать своего <a href="https://tproger.ru/articles/telegram-bot-create-and-deploy/">Telegram-бота на Python</a>, вы можете использовать библиотеки вроде aiogram. Познакомившись с одной, вам будет просто освоить и следующую: все они опираются на API мессенджеров вроде Telegram.</p><h2>Тестирование</h2><p>Эту рубрику вообще легко опустить, если вы нацелились в мир Data Science. Однако в будущем это понадобится и MLOps – разработчику, непрерывно совершенствующему ПО на базе Machine Learning, так что пройтись по основам тестов стоит. Для новичков отлично подойдет библиотека selenium – наглядный инструмент для автоматизации веб-серфинга. Попробуйте собрать свой UI-тест на selenium, как в <a href="https://tproger.ru/articles/sozdajte-svoj-pervyj-ui-test-za-20-minut/">этой статье</a>, и для универсального старта этого будет предостаточно.</p><h2>Data Science</h2><p>В целом переход на должность дата-сайентиста часто рассматривается как следующая стадия развития Python-разработчика. Эта крупная ветка заслуживает отдельной дорожной карты по Data Science.</p><h2>Заключение</h2><p>Какой бы путь вы ни избрали, главное – искать любимое. Тогда можно пережить и невысокую зарплату джуниора, и сваливание на разработчика непомерного числа задач, и плохое качество ТЗ. В первые пару лет программисты часто скачут с проекта на проект, активно берутся за стартапы и некоммерческие проекты. Но называть их job hoppers (“прыгающими с работы на работу”) не стоит, ведь именно на этом этапе они решают, какую специальность выбрать, а для этого нужно перелопатить сотни страниц документации, горы тредов на StackOverflow и даже разобраться со своим внутренним запросом к себе как профессионалу. Детей в 17-18 лет перед университетом вынуждают выбрать профессию на всю жизнь, а с выбором “Каким разработчиком хочу стать?” задача точно такая же: только перепробовав, определитесь.</p>]]></content:encoded>
    </item>
    <item>
      <title>Дорожная карта Data Science 2023: пошаговый гайд</title>
      <link>https://tproger.ru/articles/roadmap-data-science-2023</link>
      <comments>https://tproger.ru/articles/roadmap-data-science-2023?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Лена Капаца]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/roadmap-data-science-2023</guid>
      <description><![CDATA[<p>Дорожная карта Data Science 2023, созданная практикующим специалистом. На диаграмме Исикавы 7 ветвей с инструментами учёного по данным.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/roadmap-data-science-2023">Дорожная карта Data Science 2023: пошаговый гайд</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 11 Aug 2023 09:25:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы только подступились к Data Science, дорожная карта – это способ сэкономить время. Так что представляю карту навыков Data Science глазами практикующего специалиста. На диаграмме Исикавы вы найдёте самые распространённые понятия и инструменты.</p><p>Вы наверняка слышали про разновидности дата-сайентистов:</p><ul><li>дата-инженеры (Data Engineer – DE);</li><li>дата-аналитики (Data Analyst – DA);</li><li>дата-сайентисты (Data Scientist – DS)</li></ul><p>Не все сферы, упомянутые на роадмапе, критически важны для всех подвидов DS, потому я подписала, каким из них тот или иной блок необходим.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/2075ded8-3e0c-48b1-82e8-369971322255-scaled.jpg" alt="" /></figure><h2>Программирование</h2><p>На дворе 2023 год, а значит, Науке о данных уже пошел уже седьмой (!) десяток, и способов решать задачи появляется с каждым годом все больше. Пока перед студентами-новичками выбор ЯП не ставят ребром: учим Python, заигрываем с R и слышим название Golang. Однако впоследствии, когда вы исчерпаете возможности первого языка, то непременно начнете копать в сторону двух остальных.</p><p>Курс “Python-разработчик” поможет вам оперативно освоиться с базовыми понятиями ЯП.</p><h2>Сбор и хранение данных</h2><p>Следующая стадия развития дата-сайентиста – работа с данными. Поскольку информация в сфере Data Science – кровь индустрии, то здесь вы встретите неимоверное количество инструментов. Среди них главенствующее положение по праву занимают SQL-подобные базы данных. В моей практике уже случилось так, что приходится обращаться сразу с двумя диалектами SQL: MySQL и BigQuery.</p><h2>Статистика и математика</h2><p>Вы уже наверняка слышали про дебаты “Нужна ли математика программисту”. Для дата-сайентиста ответ однозначный: нужна, как и статистика. Надеюсь, облегчение вам принесет тот факт, что обе эти науки можно свести к глоссарию на 50 самых важных терминов, вроде среднего арифметического и выбросов. Текущая образовательная неуниверситетская индустрия в Data Science устроена таким образом, что необходимый минимум по математике вроде обращения с матрицами, интегралов и теоремы Байеса вам преподнесут как нечто необязательное и сложное. Словно можно несколько раз просмотреть, но не “страдать” вопросом глубже. На тех технических собеседованиях, что мне доводилось побывать, даже интервьюерам не особо хотелось залезать в дебри высшей математики, больше спрашивают о владении конкретным ПО.</p><h2>Дата-инжиниринг</h2><p>Излюбленная мною часть Data Science, прекрасная смесь программирования и общения с хранилищами данных. Представьте кейс: вы собираете данные о пользовательском поведении на Kafka, храните данные в SQL-подобной базе данных вроде ClickHouse, налаживаете ETL-процессы (extract, transform, load – “извлечь, преобразовать, загрузить”) с помощью Airflow. Airflow для воспроизводимости вы держите в контейнере Docker, которым управляете с помощью командной строки. Отчеты собираете в Google Looker.</p><p>Вся сфера – это как раз тот случай, когда вы избегаете недостатков науки о данных вроде необходимости знать тервер, необходимости расчищать данные, но при этом ваши навыки очень востребованы и прекрасно оплачиваются.</p><h2>Машинное обучение</h2><p>Для многих российских IT-компаний этой стадии достичь непросто, ибо ее предваряет уж очень затратная стадия обработки, да и кадров не хватает. Ну раз уж нам довелось попасть в “созревшую” для DS организацию, то наши усилия условно можно разделить на четыре вида. Для каждой такой группы задач приведу по конкретному примеру для наглядности:</p><ul><li>Обработка естественного языка: классификация разнородного массива обращений пользователей на входящей линии</li><li>Компьютерное зрение: обработка событий камер видеонаблюдения</li><li>Рекомендательные системы: выделение похожих на покупателей клиентов с целью “дожать” их средствами маркетинга</li><li>Риск-аналитика: определение кредитного рейтинга</li></ul><h2>Бизнес-аналитика</h2><p>Как вы, наверное, заметили, в диаграмме Исикавы важна последовательность. Не случайно раздел “Бизнес-аналитики” появляется ПОСЛЕ “Машинного обучения”. На мой взгляд, глубоко осваивать инструменты визуализации данных, дашбординга стоит только после того, как вы получили доступ к реальным данным. Ну разве что краткий курс по устройству Tableau пройти до выхода на позицию.</p><h2>Глубокое обучение</h2><p>Нередко эту часть авторы роадмапов выносят в отдельное место, ибо сфера молодая, но особо требовательная. В первые несколько лет этот раздел вызывал у меня стабильный стресс: понять, что хочет объяснить автор очередного туториала по PyTorch, было весьма затруднительно. Однако за последние пару лет ситуация резко изменилась: теперь большинство студентов знают, что такое ChatGPT, а это мощная реклама Deep Learning. Реальность приведет вас к таким проектам лишь тогда, когда вы почувствуете свободу с классическим ML. А пока – заигрывайте, щупайте на здоровье модные фреймворки.</p><h2>Заключение</h2><p>Хотелось бы верить, что изучив мою дорожну карту Data Science 2023, вы сократите время освоения новой профессии. Поначалу довольно непросто выбрать, каким именно дата-сайентистом вы хотите стать. В моем случае любовь к иностранным и родному языкам стали предпосылкой к углублению в NLP: в какой-то момент я просто осознала, что принесу обществу больше пользы, если буду использовать свои природные способности к лингвистике. Надеюсь, у вас поскорее теперь наступит такой поворотный момент.</p><p>Самое клевое в роадмапах для программистов: необязательно осваивать все перечисленное, чтобы продвинуться от Junior-специалиста к Middle и выше. Спрос на DS достаточно высок, чтобы ценили даже хорошо освоенную часть карты навыков.</p>]]></content:encoded>
    </item>
    <item>
      <title>Изучение Vue.js в 2023 году: дорожная карта разработчика</title>
      <link>https://tproger.ru/articles/izuchenie-vue-js-v-2021-godu-dorozhnaja-karta-razrabotchika</link>
      <comments>https://tproger.ru/articles/izuchenie-vue-js-v-2021-godu-dorozhnaja-karta-razrabotchika?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/izuchenie-vue-js-v-2021-godu-dorozhnaja-karta-razrabotchika</guid>
      <description><![CDATA[<p>Хотите начать изучение Vue.js в 2023 году? В этом поможет дорожная карта с включёнными в неё этапами изучения и необходимыми инструментами.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/izuchenie-vue-js-v-2021-godu-dorozhnaja-karta-razrabotchika">Изучение Vue.js в 2023 году: дорожная карта разработчика</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 09 Aug 2023 13:00:14 GMT</pubDate>
      <content:encoded><![CDATA[<p>Изучение Vue.js стоит начать с того, что это популярный JavaScript-фреймворк для создания пользовательских интерфейсов. Ядро Vue включает в себя библиотеку ядра и маршрутизатор, а сам фреймворк пригоден для постепенного внедрения, в отличие от аналогов-монолитов.</p><p>Дорожная карта для изучения Vue.js в 2023:</p><figure><img src="https://media.tproger.ru/uploads/2020/12/Vue.png" alt="" /></figure><p>В первую очередь посетите русскоязычную версию <a href="https://ru.vuejs.org/v2/guide/">официального сайта Vue.js</a>: там вы найдёте ответы на большинство вопросов, которые будут возникать в ходе изучения. Далее переходите к инструментам и технологиям, которые вам потребуются для эффективной работы с фреймворком.</p><ol><li><a href="https://tproger.ru/#part1">Сборка</a></li><li><a href="https://tproger.ru/#part2">Стилизация</a></li><li><a href="https://tproger.ru/#part3">Управление состоянием</a></li><li><a href="https://tproger.ru/#part4">Проверка типов</a></li><li><a href="https://tproger.ru/#part5">API</a></li><li><a href="https://tproger.ru/#part6">Маршрутизация</a></li><li><a href="https://tproger.ru/#part7">Библиотеки утилит</a></li><li><a href="https://tproger.ru/#part8">Тестирование</a></li><li><a href="https://tproger.ru/#part9">i18n</a></li><li><a href="https://tproger.ru/#part10">Десктоп</a></li><li><a href="https://tproger.ru/#part11">Серверный рендеринг</a></li><li><a href="https://tproger.ru/#part12">Заключение</a></li></ol><h2>Сборка</h2><p>Менеджеры пакетов npm и Yarn облегчат вам жизнь, самостоятельно вычисляя комплекс операций для каждого пакета и запуская установщик пакетов с нужными параметрами. Также освойте работу инструментом сборки Vite и таск-раннерами по типу npm-scripts.</p><p>Что касается Vite, то это альтернатива Vue CLI. Вместо Webpack он использует однофайловые компоненты без шага сборки бандлов. Подробнее об этом инструменте вы узнаете из видео:</p><h2>Стилизация</h2><p>Это базис, необходимый любому фронтендеру. Углубляйте знания, изучая препроцессоры Sass/SCSS и PostCSS, фреймворк Tailwind и однофайловые компоненты.</p><h2>Управление состоянием</h2><p>Необходимо разобраться с состоянием компонентов во Vue, а также способом определения компонентов Composition API. Подробнее о том, что такое Composition API и как им пользоваться, вы узнаете из <a href="https://tproger.ru/video/composition-api-in-vue/">нашей статьи</a>.</p><h2>Проверка типов</h2><p>Предположим, приложение растёт, и риск получить баги, связанные с проверкой типов, — тоже. В некоторых случаях следует использовать TypeScript для корректной проверки типов во всём приложении, а в некоторых — PropTypes. Как это работает? Можно перечислить входные параметры с помощью объекта, в котором свойство и значение содержат информацию о типе конкретного параметра и его имени. Например:</p><p>Узнайте больше о <a href="https://ru.vuejs.org/v2/guide/components-props.html#%D0%92%D0%B0%D0%BB%D0%B8%D0%B4%D0%B0%D1%86%D0%B8%D1%8F-%D0%B2%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D1%85-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2">валидации входных параметров</a>.</p><h2>API</h2><p>Что же касается работы с API, здесь всё стандартно:</p><ul><li>GraphQL</li><li><a href="https://www.apollographql.com/docs/react/">Apollo</a></li><li><a href="https://facebook.github.io/relay/">Relay</a></li><li>REST</li><li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API">Fetch</a></li><li><a href="https://github.com/axios/axios">Axios</a></li><li><a href="https://visionmedia.github.io/superagent/">SuperAgent</a></li></ul><h2>Маршрутизация</h2><p><a href="https://router.vuejs.org/">Vue Router</a> — это официальная библиотека маршрутизации фреймворка. К её преимуществам относится модульная конфигурация маршрутизатора, удобный контроль навигации, настраиваемая прокрутка страниц, анимация переходов представлений и многое другое. Суть в том, что Vue Router добавляет текущий маршрут в каждый компонент — достаточно лишь указать this.$route внутри необходимого компонента.</p><h2>Библиотеки утилит</h2><p>Библиотека утилит OpenGL (GLU) — это графическая библиотека, которая является надстройкой над OpenGL. На самом деле, здесь намного больше вариантов для изучения, чем представлено в дорожной карте по изучению Vue.js. Среди них:</p><ul><li><a href="https://lodash.com/">Lodash</a></li><li><a href="https://github.com/iamkun/dayjs/">Day.js</a></li><li><a href="https://ramdajs.com/">Ramda</a></li><li><a href="http://numeraljs.com/">Numeral</a></li><li><a href="http://reactivex.io/">RxJS</a></li></ul><h2>Тестирование</h2><p>Разработчики Vue также являются создателями <a href="https://vue-test-utils.vuejs.org/">Vue Test Utils</a> — официальной библиотеки для модульного тестирования: советуем ознакомиться.</p><p>И хотя тестирование end-to-end не связано напрямую с Vue.js, оно также необходимо для обеспечения бесперебойной работы приложения. К популярным инструментам для E2E тестирования относятся <a href="https://cypress.io/">Cypress</a>, <a href="https://www.seleniumhq.org/">Selenium</a>, <a href="https://pptr.dev/">Puppeteer</a> и <a href="https://github.com/cucumber/cucumber-js">Cucumber.js</a>.</p><h2>i18n</h2><p>Интернационализацией в программировании называется процесс планирования и реализации продуктов и услуг так, чтобы их можно было адаптировать для пользователей из любого региона. Именно для этого и разработан <a href="https://kazupon.github.io/vue-i18n/">Vue I18n</a> — плагин, который легко интегрирует функции локализации в приложение Vue.js.</p><h2>Десктоп</h2><p><a href="https://electronjs.org/">Electron</a> — это фреймворк, разработанный GitHub, с Node.js под капотом. Нельзя сказать, что он напрямую связан с изучением Vue.js, но если планируете создавать нативные графические приложения для десктопа на Vue, обязательно обратите внимание на Electron.</p><h2>Серверный рендеринг</h2><p>Для разработки высокопроизводительных приложений на Vue потребуется разделение кода, маршрутизация на базе компонентов, серверный рендеринг и многое другое. Эти и дополнительные возможности вроде Progressive Web Applications (PWA) предоставляются прямо из коробки с минималистичным фреймворком <a href="https://nuxtjs.org/">Nuxt.js</a>.</p><h2>Заключение</h2><p>Так как же начать изучение Vue.js в 2023 году? В дорожную карту включены не только технологии, которые касаются непосредственно Vue. Вы должны уметь работать с инструментами сборки вроде менеджеров пакетов и Vite, владеть CSS на уровне архитектуры и препроцессоров, управлять состоянием, выполнять проверку типов, работать с инструментами API, маршрутизации, тестирования и библиотеками утилит. Не стоит забывать и о локализации приложения, серверном рендеринге, а также фреймворках для десктопной разработки.</p><p>Вас также могут заинтересовать другие гайды:</p><ul><li><a href="https://tproger.ru/articles/frontend-roadmap-2021/">Дорожная карта по фронтенду</a></li><li><a href="https://tproger.ru/articles/kak-stat-react-razrabotchikom-v-2021-dorozhnaja-karta/">Дорожная карта по React</a></li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Инструкция к погружению в С++ и более 10 бесплатных ресурсов для начинающих</title>
      <link>https://tproger.ru/articles/instrukciya-k-pogruzheniyu-v-s-i-bolee-10-besplatnyh-resursov-dlya-nachinayushhih</link>
      <comments>https://tproger.ru/articles/instrukciya-k-pogruzheniyu-v-s-i-bolee-10-besplatnyh-resursov-dlya-nachinayushhih?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Толстиков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/instrukciya-k-pogruzheniyu-v-s-i-bolee-10-besplatnyh-resursov-dlya-nachinayushhih</guid>
      <description><![CDATA[<p>Школа анализа данных Яндекса составила подборку из 10 бесплатных ресурсов для изучения языка программирования C++.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/instrukciya-k-pogruzheniyu-v-s-i-bolee-10-besplatnyh-resursov-dlya-nachinayushhih">Инструкция к погружению в С++ и более 10 бесплатных ресурсов для начинающих</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 05 Jun 2023 11:52:55 GMT</pubDate>
      <content:encoded><![CDATA[<p>Освоить C++ сегодня — не такая большая проблема, в интернете много учебных материалов. Но сориентироваться в них и выбрать действительно полезную информацию порой сложно, особенно новичкам, которые только начинают свой путь в программировании.</p><p>Алексей Толстиков, академический руководитель Школы анализа данных Яндекса, делится практическими рекомендациями по изучению языка, а также подборкой бесплатных ресурсов для тренировки.</p><h2>Что нужно знать</h2><p>Для того, чтобы научиться писать на С++ , обычно бывает достаточно знания любого языка программирования. Если такого опыта нет, то свой путь придется начать с изучения  основных понятий: переменные, циклы, функции, условные операторы и так далее.</p><p>Базовые знания, которые позволят новичку приступить к проектам и началу карьеры:</p><ol><li>Базовые компоненты: создание итераторов, конструкторов, шаблонов. Для этого будет полезно изучить не только базовую библиотеку STL, но и другие, которыми пользуются разработчики, например, Boost.</li><li>Структуры данных и алгоритмы: линейный поиск, двоичный поиск, быстрая сортировка, хеш-таблицы, списки, деревья.</li><li>Многопоточность: важная концепция, которая применяется, когда есть несколько задач, работающих параллельно, и несколько доступных ядер процессора.</li><li>Эффективный код: написание такого кода включает в себя тестирование и проверку на безопасность для определения проблем, которые  могут возникнуть с производительностью. Нужно понимать, как их исправить, как оптимизировать поиск, использовать память, настраивать ограничения.</li></ol><h2>C чего начать знакомство с C++</h2><p>Стратегия изучения частично зависит от профессионального бэкграунда разработчика. Но есть три универсальных совета, которые помогут как новичкам, так и более опытным специалистам.</p><h2>1. Прокачивайте логику</h2><p>Тем, кто изучает C++ на базе другого языка, освоить синтаксис будет намного легче, чем начинающим разработчикам: основные «кирпичи» те же, просто сформированы немного иначе. А вот новичкам на старте важно научиться трансформировать свои мысли в последовательность действий-команд, которую можно задать компьютеру при помощи операторов языка программирования.</p><p>Этот процесс включает два этапа:</p><ol><li>Тренировку алгоритмического мышления.</li><li>Изучение синтаксиса языка.</li></ol><p>Теорию и практику лучше осваивать параллельно — такой системный подход позволит сразу же применить абстрактные знания в решении задач, пусть и учебных. Из стартовых материалов подойдут руководства, например,<a href="https://www.labirint.ru/books/844691/"> «Язык программирования С++» от его создателя Б. Страуструпа</a>, и видео на YouTube, которые можно дополнить различными тренажерами для развития алгоритмических навыков.</p><h2>2. Совершайте ошибки</h2><p>Этот совет подойдет для изучения любого языка программирования. И новичкам, и опытным специалистам важно помнить, что С++ — очень низкоуровневый и «опасный» язык. При его использовании легко совершить базовую ошибку, которую удастся выявить только тогда, когда сервис вместо 10-ти человек начнет использовать миллион. Еще про С++ говорят, что, используя его, легко “выстрелить себе в ногу”.</p><p>Во многих языках такие ошибки проявляются быстрее и скорее исправляются разработчиками, но за это нужно платить временем работы программы. Например, в Python встроенный интерпретатор еще по ходу исполнения упадет и скажет: «Происходит не то, что ожидалось, давайте прервемся. Вот что пошло не так.», а C++ не будет до последнего реагировать на неправильную работу – это связано с термином “неопределенное поведение”. Поэтому всем, кто программирует на C++, нужно набирать практику на множестве возможных ошибок. Это не гарантирует, что в процессе кодинга реального проекта разработчик не столкнется с проблемами, но снизит вероятность локальных и глобальных программных сбоев в будущем. С опытом и насмотренностью ошибки становятся более редкими, нестандартными и даже интересными. О самых нетривиальных случаях специалисты делают доклады и выступают с ними на конференциях или пишут статьи.</p><h2>3. Пишите свой код и смотрите чужой</h2><p>Программист должен знать не только, какие ошибки встречаются, но и понимать, как предотвратить их, а если они случились — уметь оперативно исправить. Все это невозможно без практики, поэтому важно набивать руку: часами писать код, а потом столько же читать чужой. Последнее научит мыслить в обратную сторону — от команд для компьютера к пониманию, чего же хотел добиться своими действиями другой разработчик.</p><p>Практиковаться лучше не только по книжкам, но и в реальных условиях, например, можно просматривать открытые репозитории проектов в github или использовать платформы вроде <a href="https://codeforces.com/">Codeforces</a> и <a href="https://www.codewars.com/">Codewars, где объединяются люди, которые интересуются быстрым и эффективным решением задач.</a> Такие активности позволяют не только потренироваться в поиске решения, но и посмотреть, как с задачами справились другие. Если у платформы есть возможность проголосовать за понравившееся решение, то получаем классную возможность посмотреть, что другим специалистам в этой области нравится больше, что они считают более читаемым, компактным и быстрым.</p><h2>Где еще набираться опыта и закреплять теорию</h2><p>Помимо соревнований, практика может состоять из хорошо подобранных учебных задач или собственного пет-проекта, например, начать можно с калькулятора, конвертера валют, простой игры по типу «Змейки», «Сапера»  или «Тетриса».</p><p>Ниже несколько ресурсов, которые помогут закрепить теорию и поупражняться в программировании:</p><ol><li><a href="https://academy.yandex.ru/handbook/cpp">Хендбук Академии Яндекса по С++</a> — бесплатный онлайн-учебник для самостоятельного погружения в С++ для новичков, которые знакомы с основами информатики и владеют любым языком программирования на школьном уровне. Теория разбирается одновременно с тренировкой на практических задачах. Решения проверяются автоматически. А заниматься можно в своем темпе: проходить материал по порядку или выборочно по главам, чтобы освежить и закрепить конкретную тему.</li><li><a href="https://hackingcpp.com/index.html">Hacking C++</a> — наглядный справочник с картинками и инфографикой. Здесь также есть <a href="https://hackingcpp.com/cpp/beginners_guide.html">подробное руководство </a>по изучению языка для новичков.</li><li><a href="https://userver.tech/">The C++ Asynchronous Framework</a> — современный асинхронный фреймворк с открытым исходным кодом и богатым набором абстракций для быстрого и удобного создания микросервисов, сервисов и утилит.</li><li><a href="https://coderun.yandex.ru/promo">CodeRun</a> — это онлайн-тренажёр с каталогом задач для разработчиков. Эксперты Яндекса и приглашённые спецы собрали задачи с Тренировок по алгоритмам от Яндекса, Yandex Cup и многих других мероприятий. Все задания разбиты по темам и уровням сложности.</li><li><a href="https://stackoverflow.com/">Комьюнити Stack Overflow</a> — платформа, на которой собрана огромная коллекция вопросов и ответов по программированию. Участники сообщества активно делятся опытом с коллегами. Для тех, кто самостоятельно работает над своим первым проектом, такая помощь неоценима.</li><li><a href="https://en.cppreference.com/">Онлайн-документация по С++ </a>— справочник на английском по языкам C, C++ и стандартным библиотекам с подробными примерами. Для пользователей, которые предпочитают учиться на русском, есть <a href="https://ru.cppreference.com/w/">адаптированная версия</a> сайта.</li><li><a href="https://isocpp.org/">Сайт Standard C++ Foundation</a> — ресурс, на котором публикуются новости, обсуждение стандарта C++ для всех компиляторов и платформ, а также анонсы тематических конференций.</li><li><a href="http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html">Гайдлайны С++ Core Guidelines</a> — open-source проект от создателя С++ Бьярне Страуструпа и эксперта по C++ Герба Саттера. На сайте публикуются рекомендации, которые помогают разобраться с синтаксисом языка и упростить процесс написания кода.</li><li><a href="https://godbolt.org/">Онлайн-компилятор Compiler Explorer</a> — интерактивный инструмент, который позволяет набирать код в одном окне и сразу просматривать ассемблерный вывод в другом. Результатом проверки можно поделиться с друзьями и коллегами, отправив им ссылку.</li><li><a href="https://www.youtube.com/@SimpleCodeIT/playlists">#SimpleCode</a> — YouTube-канал о том, как программировать на разных языках,  в том числе и на C++. Будет полезен разработчикам с любым бэкграундом.</li><li><a href="https://www.youtube.com/user/ProgrammingKnowledge">ProgrammingKnowledge</a> — YouTube-канал для начинающих программистов. Здесь можно найти много пошаговых видеоуроков по разным языкам.</li><li><a href="https://codeforces.com/">Codeforces </a>— платформа для создания, проведения и обсуждения соревнований по программированию с элементами соцсети.</li><li><a href="https://www.codewars.com/">Сodewars</a> — огромная подборка задач на более чем 20 языках программирования. На Сodewars можно обсудить задачи с другими игроками, а также посмотреть альтернативные решения.</li></ol>]]></content:encoded>
    </item>
    <item>
      <title>Как перейти с Java на Scala</title>
      <link>https://tproger.ru/articles/kak-perejti-s-java-na-scala</link>
      <comments>https://tproger.ru/articles/kak-perejti-s-java-na-scala?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-perejti-s-java-na-scala</guid>
      <description><![CDATA[<p>Вместе с разработчиками компании «Криптонит» составили дорожную карту по изучению Scala для Java-разработчиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-perejti-s-java-na-scala">Как перейти с Java на Scala</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Scala]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 28 Mar 2023 07:00:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>Scala — редкий, местами сложный в освоении и вместе с тем высокооплачиваемый язык программирования. Он полностью совместим с Java и работает на той же виртуальной машине. Поэтому, имея опыт разработки на Java, стать «скалистом» будет проще.</p><p>Вместе с разработчиками технологической и научно-исследовательской компании «Криптонит» мы составили дорожную карту по изучению Scala. Этот роадмап подойдёт Java-разработчикам, которые хотят освоить больше связанных технологий.</p><ol><li><a href="https://tproger.ru/#part1">Зачем переходить на Scala</a></li><li><a href="https://tproger.ru/#part2">Задачи и возможности Scala</a></li><li><a href="https://tproger.ru/#part3">Чем занимается Scala-программист</a></li><li><a href="https://tproger.ru/#part5">Общие инструменты</a></li><li><a href="https://tproger.ru/#part9">Полезные материалы для изучения Scala</a></li></ol><h2>Зачем переходить на Scala</h2><p>Чтобы начать осваивать новый язык, должны быть веские причины. Особенно для Java-разработчиков, которые пишут на одном из самых востребованных языков программирования.</p><p>Scala создавался как преемник Java. Он унаследовал лучшее от предшественника и стал технически совершеннее. Scala более объектно-ориентирован, чем Java, а также обладает возможностями функционального языка. Сочетание двух подходов делает программирование на Scala гибким, повышает эффективность кода и позволяет реализовывать нестандартные решения.</p><p>В Scala есть сильные механизмы абстракции, которые позволяют легко программировать как большие, так и маленькие системы и масштабировать их. А ещё код на Scala компактнее по сравнению с Java. Выразительный синтаксис позволяет избегать багов, ускоряет написание и упрощает чтение программ.</p><p>Несмотря на свои сильные стороны, Scala не получил такого же распространения, как Java. Однако относительная нишевость языка — на руку программистам. Она компенсируется высоким уровнем средних зарплат и возможностью работать над уникальными проектами.</p><h2>Задачи и возможности Scala</h2><p>Scala — многофункциональный язык программирования, который применяется для решения различных задач. Сегодня возможности Scala используют для разработки распределённых систем, научных вычислений, мобильных и веб-приложений и приложений для анализа данных.</p><p>Писать на Scala сложнее, чем на Java. Язык требует совершенно другого подхода к архитектуре и логике построения кода. Но вместе с этим Scala имеет ряд преимуществ:</p><p>— Функциональное программирование. Scala обладает функциональными возможностями, что идеально подходит для решения сложных задач, связанных с обработкой данных и параллельным программированием.</p><p><b>— </b>Безопасность типов. Scala имеет более строгую систему типов, чем Java, что позволяет предотвращать ошибки на этапе компиляции, а не на этапе выполнения.</p><p><b>— </b>Интероперабельность с Java. Язык полностью совместим с Java, поэтому Scala-разработчики могут использовать библиотеки Java и легко взаимодействовать с Java-кодом.</p><p>— Поддержка асинхронного программирования. Различные инструменты в Scala делают язык идеальным для создания высокопроизводительных приложений.</p><p><b> — </b>Конкурентность. Scala предлагает мощную поддержку параллелизма и конкурентности, которые важны для написания высокопроизводительных приложений и сервисов. Scala-код может быть выполнен на JVM, что позволяет использовать все преимущества JVM, включая возможности управления памятью и оптимизации.</p><p><b>— </b>Масштабируемость. Scala позволяет разработчикам создавать масштабируемые приложения, которые могут обрабатывать большие объемы данных и выдерживать высокие нагрузки.</p><p>А ещё Scala — один из самых динамично развивающихся языков и постоянно внедряет новые возможности. Сейчас активно развивается следующая итерация языка — Scala 3. В ней переработали компилятор, что улучшило автоматический вывод типов и снизило многословность кода. Одновременно с этим вышел из экспериментального статуса механизм макросов, который расширил возможности автоматической генерации кода.</p><h2>Чем занимается Scala-программист</h2><p>Согласно <a href="https://survey.stackoverflow.co/2022">исследованию</a> Stack Overflow, доля Scala-разработчиков среди профессиональных программистов — около 3%. И компании активно ищут таких специалистов: в марте 2023 года только на карьерной площадке Linkedin размещено почти 34 тысячи соответствующих вакансий.</p><p>Одним из направлений, требующих знания Scala, является backend-разработка. На этой позиции от кандидатов требуют умение писать код на Scala, наличие аналитического склада мышления, умение разбираться в доменной области и логике работы системы.</p><p>Бэкендеры занимаются разработкой сервисов, связанных с бизнес-логикой системы. Например, в «Криптоните» ищут <a href="https://tprg.ru/NLZC">Scala-разработчиков</a>, которые возьмутся за реализацию серверной части веб-приложений, связанных с обработкой и отображением больших данных, а также <a href="https://tprg.ru/BeoU">начинающих «скалистов»</a>, которые будут разрабатывать отдельные компоненты приложений и проводить их автоматическое тестирование.</p><p>До того, как стал писать на Scala коммерческие проекты, я уже знал Java, JavaScript и C. Примерно в 2012 году стали много говорить о том, что Java скоро умрёт и будут новые языки. Scala назывался как один из них, и я решил попробовать. Оказалось, это интереснее, чем писать на Java. Однако у «скалистов» более высокий порог входа. Чтобы начать писать на этом языке, нужно чуть больше знаний, чем для программирования на Java. На Scala я пишу почти 10 лет. Сначала делал небольшие программы для себя. Они выполняли какие-то рутинные действия, помогая мне в основной работе. Например, я сделал редактор protobuf’а (формата сериализации структурированных данных Protocol Buffers, который по сравнению с XML обеспечивает более компактное хранение и повышает скорость обработки данных). Особенно понравилось, что в среде разработки Scala есть консоль (среда программирования REPL с интерфейсом командной строки). В ней можно писать код в интерактивном режиме и тут же его выполнять. В «Криптоните» я занимаюсь бэкендом для клиента интеллектуальной системы транскрибации голоса. Это очень перспективная тема, и её интересно реализовать на Scala. Ещё я сейчас работаю над сервисами для платформы обработки больших данных. Я выполнил оптимизацию кода и потребления вычислительных ресурсов, используя принцип разделения функционала. Получились отдельные лёгкие микросервисы.</p><p>Кроме backend-разработки, у Scala-программистов есть карьерные перспективы в обработке данных. Это направление требует широкого кругозора и понимания того, по каким принципам строятся распределённые системы. Также для работы понадобятся сильные технические навыки, знание тонкостей работы платформы JVM и облачной инфраструктуры.</p><p>Впервые о языке Scala я узнал в 2015 году. Я уже знал Java, а также успел поучаствовать на проектах с Python, Ruby и немного — с JavaScript. Мой первый проект на Scala был связан с обработкой результатов тестов в генетической лаборатории. Он состоял из двух отдельных частей: ETL (извлечение, преобразование и загрузка) огромного потока данных и backend для отображения статистики. В «Криптоните» я занимаюсь разработкой ПО для наших заказчиков: поиском и обработкой больших массивов данных, транскрибацией голосовых сообщений, а также участвую в разработке внутренних проектов — например, сервисом доступа и хранения данных.</p><p>Ещё одно направление для развития — анализ данных. На этой позиции от кандидатов требуют знание Scala, Python, SQL, умение декомпозировать сложные структуры данных на отдельные компоненты, выстраивать гипотезы на основе этих компонент и проводить математические исследования с целью доказательства или опровержения выработанных гипотез.</p><p>Scala-программисты описывают алгоритмы приведения неструктурированных данных к структурированным, находят зависимости и противоречия. Например, в «Криптоните» разрабатывают аналитические системы на базе единой платформы, которые позволяют безопасно работать с данными независимо от их формата, метода хранения и эксплуатации. Сейчас компания ищет <a href="https://tprg.ru/s3pK">тимлида</a> на этот проект.</p><p>По образованию я физик. В университете для научной работы использовал Си и MatLab. Затем на работе нужно было использовать OpenText (OScript) и писать на JavaScript, а для хобби-проектов использовал Java. Программировать на Scala предложили на собеседовании, так как вся команда писала на этом языке. Моей первой задачей, реализованной на Scala, было написание коннектора к чат-серверу. В нём использовался публичный API социальной сети «Одноклассники», чтобы передавать сообщения к чат-серверу и обратно. Требования были такими: максимально быстрая передача сообщений, возможность для масштабирования и отказоустойчивость. В итоге коннектор был реализован мной с использованием набора библиотек Akka для разработки распределённых приложений и параллельных вычислений. В «Криптоните» я занимаюсь конструктором запросов для анализа большого количества данных. У нас в компании все продукты разрабатываются в рамках единой экосистемы, поэтому необходим сервис, который может их связывать. Конечная цель этого сервиса — возможность выстраивать компоненты для анализа различного типа данных (текст, изображение, аудио) в единую цепочку для их обработки. Коллеги из лаборатории больших данных и статистики приносят нам готовые ML-модели, а мы пишем на Scala сервис для конструктора запросов, который склеивает всё это в единый продукт.</p><h2>Общие инструменты</h2><p>Напомним, что Scala-разработчику доступны все JVM-библиотеки, написанные на Java, Kotlin и других. Поэтому в статье разберём только те инструменты, которые написаны на Scala или имеющие соответствующий API.</p><h3>Основы языка</h3><p>Изучение Scala с нуля стоит начать со стандартной библиотеки языка. Она сочетает в себе изменяемые и неизменяемые структуры данных, а предоставляемые ей интерфейсы используются во всех сторонних библиотеках.</p><p>Кроме этого, на начальном этапе освоения Scala необходимо подробно изучить понятия рекурсии и лямбда-функций, которые с каждым годом начинают всё больше использоваться и в ООП-языках.</p><h3>Компиляция проектов</h3><p>Несмотря на возможность сборки Scala-проектов с помощью gradle и maven, рекомендуем освоить работу <a href="https://www.scala-sbt.org/">Scala Build Tool</a>. С помощью этого инструмента можно настраивать параметры компиляции проектов: выставлять необходимые флаги компилятора языка, разбивать проект на подмодули, осуществлять кросс-компиляцию с разными версиями библиотек и даже самого языка Scala.</p><h3>Плагины компилятора</h3><p>Scala позволяет не только гибко изменять и комбинировать программы, но и модифицировать этап компиляции проектов при помощи API для создания плагинов.</p><p>Предназначение плагинов компилятора может быть крайне разным. Например, плагины WartRemover и Scapegoat предоставляют инструменты для статического анализа кода, better-tostring изменяет поведение генерируемых по умолчанию функций, а Scala.js и Scala Native позволяют компилировать Scala-код для платформ, отличных от JVM.</p><h3>Работа с консолью</h3><p>Взаимодействовать со Scala-проектами можно не только путём их компиляции и последующего запуска, но и в интерактивном режиме при помощи Scala REPL. Эта консольная оболочка позволяет выполнять команды пользователя построчно. Использовать Scala REPL можно и на основе полноценных компилируемых проектов, и для интерпретации отдельных файлов.</p><p>Для работы с консолью также подходит Ammonite REPL. Это сторонний инструмент с бо́льшим числом возможностей по сравнению с оболочкой по умолчанию. Среди них — подсветка синтаксиса и динамическое подключение зависимостей.</p><h3>Сериализация данных</h3><p>Библиотеки для сериализации и десериализации данных применяются при синхронном взаимодействии сервисов с помощью API, при асинхронном взаимодействии с использованием очередей сообщений и при записи в файл или хранилище данных.</p><p>Хотя самый популярный формат сообщений для межсервисного взаимодействия — JSON, также активно используются Parquet, protobuf, Avro и CSV. Собрали наиболее крупные библиотеки для работы с этими форматами на Scala:</p><ul><li><a href="https://github.com/sksamuel/avro4s">avro4s</a> — библиотека для взаимодействия с форматом Avro;</li><li><a href="https://scalapb.github.io/">ScalaPB</a> — библиотека для генерации protobuf-сообщений;</li><li><a href="https://mjakubowski84.github.io/parquet4s/">parquet4s</a> — библиотека для работы с форматом Parquet;</li><li><a href="https://circe.github.io/circe/">circe</a> — одна из самых популярных библиотек для работы с JSON в функциональном стиле;</li><li><a href="https://github.com/com-lihaoyi/upickle">uJson</a> — минималистичная библиотека для работы с JSON;</li><li><a href="https://github.com/json4s/json4s">json4s</a> — корневая библиотека, предоставляющая интерфейсы для работы с различными JSON-парсерами и сериализаторами.</li></ul><h3>Тестирование</h3><p>Библиотеки для тестирования фокусируются на читаемости тестов и имеют синтаксис, близкий к обычному английскому языку.</p><p>Пример теста, написанного при помощи scalatest:</p><p>Основные фреймворки и библиотеки для тестирования:</p><ul><li><a href="https://www.scalatest.org/">scalatest</a> — фреймворк для тестирования кода, позволяющий гибко выбирать синтаксис написания тестов;</li><li><a href="https://etorreborre.github.io/specs2/">specs2</a> — альтернатива scalatest с фокусом на behavior-driven тестах;</li><li><a href="https://scalacheck.org/">scalacheck</a> — обособленная библиотека тестирования кода путём случайной генерации входных данных. Имеет интеграции с основными фреймворками для тестирования;</li><li><a href="https://scalameta.org/munit/">munit</a> — библиотека для тестирования с акцентом на читаемости ошибок в тестах;</li><li><a href="https://github.com/com-lihaoyi/utest">uTest</a> — минималистичная библиотека для тестирования.</li><li><a href="https://disneystreaming.github.io/weaver-test/">weaver test</a> — библиотека для тестирования с использованием cats-effect.</li></ul><h3>Логирование и конфигурация</h3><p>Конфигурация проектов в Scala зачастую осуществляется на основе файла application.conf, аналогично языку Java. Наиболее популярный формат конфигурации — HOCON. Он позволяет использовать переменные окружения и ссылки на другие элементы конфигурации при её описании. Для чтения конфигурации используют эти библиотеки:</p><ul><li><a href="https://github.com/lightbend/config">lightbend/config</a> — библиотека без сторонних зависимостей, реализованная на языке Java;</li><li><a href="https://pureconfig.github.io/">pureconfig</a> — Scala-библиотека с возможностью автоматической конвертации конфигурации в классы приложения.</li></ul><p>Библиотеки для логирования в основном базируются на Java-интерфейсах. Выбирать библиотеку стоит исходя из совместимости с фреймворком и уменьшения числа зависимостей, используемых в проекте. Основные библиотеки:</p><ul><li><a href="https://github.com/lightbend-labs/scala-logging">scala-logging</a> — высокопроизводительная библиотека-обёртка над slf4j интерфейсами;</li><li><a href="https://github.com/typelevel/log4cats">log4cats</a> — библиотека для логирования в функциональном стиле с интеграцией с cats-effec;</li><li><a href="https://izumi.7mind.io/logstage/index.html">LogStage</a> — оптимизированная библиотека для структурного логирования.</li></ul><h2>Полезные материалы для изучения Scala</h2><p>Чтобы обучение языку Scala было максимально эффективным, следует запастись полезными ресурсами.</p><p><b>Списки Scala-библиотек:</b></p><ul><li><a href="https://index.scala-lang.org/">Scaladex</a></li><li><a href="https://github.com/lauris/awesome-scala">Awesome Scala libraries</a></li></ul><p><b>Telegram-каналы:</b></p><ul><li><a href="https://t.me/scala_ru">Scala User Group</a> — крупнейший русскоязычный чат для обсуждения языка Scala.</li><li><a href="https://t.me/scala_learn">Scala Learning &amp; Education: Ask for Review &amp; Noob questions</a> — чат для начинающих изучать Scala.</li><li><a href="https://t.me/scala_channel_ru">Scala Nishtyaki Channel</a> — канал от создателей сообщества Scala_ru с публикациями статей, докладов и новостей из мира функционального программирования и Scala.</li></ul><p><b>Книги:</b></p><p><b>Курсы и упражнения:</b></p><ul><li><a href="https://www.coursera.org/specializations/scala">Специализация Functional Programming in Scala</a></li><li><a href="https://exercism.org/tracks/scala">Scala on Exercism</a></li><li><a href="https://www.coursera.org/learn/effective-scala">Effective Programming in Scala</a></li><li>Онлайн-книги с упражнениями от <a href="https://underscore.io/books/">Underscore</a></li></ul><h2>Работа для Scala-программистов</h2><p>Если вы готовы перейти с Java на Scala, держите подборку вакансий в «Криптоните». Компания занимается разработкой платформы частного облака с ML-технологиями для аналитики и бизнес-решений. Основной стек технологий компании: Scala, Typescript, Rust, Python, K8S, Spark, Kafka, ClickHouse, Scylla, Postgres, Vue.</p><p>Прямо сейчас «Криптонит» ищет:</p><ul><li><a href="https://tprg.ru/NLZC">Developer</a></li><li><a href="https://tprg.ru/s3pK">Team Lead</a></li><li><a href="https://tprg.ru/BeoU">Стажёр-разработчик (Серверная разработка)</a></li><li><a href="https://tprg.ru/Ml1b">Стажёр-разработчик (Data Engineering)</a></li></ul><p>Переходите по ссылке и станьте частью команды!</p><p><i>Реклама АО «Научно-производственная компания «Криптонит» LjN8KWavY</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Python для начинающих: дорожная карта в 2023 году</title>
      <link>https://tproger.ru/articles/python-roadmap-2023-ljn8jvxfj</link>
      <comments>https://tproger.ru/articles/python-roadmap-2023-ljn8jvxfj?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/python-roadmap-2023-ljn8jvxfj</guid>
      <description><![CDATA[<p>Полноценный курс Python для начинающих, который станет прекрасным самоучителем. Делаем начало программирования на Python лёгким.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/python-roadmap-2023-ljn8jvxfj">Python для начинающих: дорожная карта в 2023 году</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Основные принципы программирования]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 15 Mar 2023 07:49:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разберем обучение Python с нуля на примере дорожной карты, которую мы подготовили совместно с онлайн-университетом <a href="https://tprg.ru/Arx4">Skypro</a>. Данная статья — это полноценный гайд разработчика на Python с нуля до Junior. Он подойдет и тем, кто уже начал изучение, и тем, кто только задумывается о программировании. Если же сомневаетесь в своих силах — обратите внимание на <a href="https://tprg.ru/8RvU">курс «Python-разработчик»</a> от Skypro.</p><p>Эта статья — часть нашего <a href="https://tproger.ru/articles/python--polnyj-putevoditel-dlya-razrabotchika">полного путеводителя по Python</a>.</p><ol><li><a href="https://tproger.ru/#part1">Основы Python</a></li><li><a href="https://tproger.ru/#part2">Синтаксис Python</a></li><li><a href="https://tproger.ru/#part3">Продвинутый Python</a></li><li><a href="https://tproger.ru/#part4">Популярные библиотеки и фреймворки Python — 2023</a></li><li><a href="https://tproger.ru/#part5">Дополнительные материалы</a></li><li><a href="https://tproger.ru/#part6">Где и как изучать Python?</a></li></ol><h2>Основы Python</h2><h3>Установка Python</h3><p>Для начала перейдите на <a href="https://www.python.org/downloads/">официальный сайт Python</a> и загрузите последнюю версию Python для Windows, Linux, MacOS или другой операционной системы.</p><h4>Как установить Python на Windows</h4><p>Выберите на сайте <a href="https://www.python.org/downloads/windows/">Python для Windows</a>, скачайте и запустите загруженный файл. Если у вас на компьютере установлена более ранняя версия языка Python 2 — просто удалите ее и скачайте Python 3.</p><p>Выберите путь и установите программу:</p><figure><img src="https://media.tproger.ru/uploads/2023/03/f667de6c-fb09-4be0-9c75-7ccd2ea9ff52.jpg" alt="" /></figure><p>Проверьте, что всё работает:</p><ul><li>запустите cmd;</li><li>введите python;</li><li>если всё хорошо, командная строка выведет версию языка.</li></ul><p>По умолчанию будут установлены:</p><ol><li>Интегрированная среда разработки IDLE.</li><li>Документация.</li><li>Менеджер пакетов pip.</li><li>Стандартный набор тестов.</li><li>Python Launcher.</li></ol><h4>Как установить Python на Linux</h4><p>Для большинства сборок Linux Python идет из коробки. Проверить это можно так — откройте окно терминала и выполните команды:</p><ul><li>python — version;</li><li>python2 — version;</li><li>python3 — version.</li></ul><figure><img src="https://media.tproger.ru/uploads/2023/03/bc400058-135f-412e-a403-75a8e353adb2.png" alt="" /></figure><p>Если по какой-либо причине на вашей системе стоит старая версия, вы можете самостоятельно скомпилировать <a href="https://www.python.org/downloads/source/?roistat_visit=12724225">последнюю версию Python</a>.</p><h4>Как установить Python на MacOS</h4><p>Python также входит в сборку MacOS, и его можно запустить через терминал. Если же вы хотите установить самую последнюю версию — она доступна <a href="https://www.python.org/downloads/macos/">по ссылке</a>.</p><h3>Рабочее окружение</h3><p>Обучение языку Python начинается с настройки рабочего окружения.</p><h4>Среды разработки Python</h4><p>Вот лишь несколько наиболее популярных Python IDE:</p><ol><li><a href="https://www.jetbrains.com/pycharm/">PyCharm</a> — это IDE, разработанная компанией JetBrains. Она предоставляет интегрированную среду для разработки Python-приложений, включая поддержку Django, Flask и других фреймворков. PyCharm имеет богатый набор функций, включая отладчик, инструменты для анализа кода и удобный интерфейс.</li><li><a href="https://code.visualstudio.com/">Visual Studio Code</a> — это легкий, быстрый и невероятно гибкий редактор кода, доступный на всех платформах. Отличный выбор для программирования на Python. Многофункциональная IDE включает в себя интегрированный отладчик, рефакторинг, автодополнение кода, etc.</li><li><a href="https://www.spyder-ide.org/">Spyder</a> — IDE, которая является частью научно-вычислительной среды Anaconda. Есть множество инструментов для работы с научными вычислениями, включая визуализацию данных, анализ и т. д. Spyder имеет встроенную консоль IPython, которая облегчает отладку и выполнение кода.</li><li><a href="https://www.sublimetext.com/">Sublime Text</a> — легкий редактор кода, который может быть расширен с помощью плагинов и расширений для поддержки Python. Простой интерфейс, автодополнение кода и другие полезные функции.</li><li><a href="https://github.blog/2022-06-08-sunsetting-atom/">Atom</a> — этот простой на первый взгляд редактор обладает богатым функционалом. Данная среда написана разработчиками GitHub с использованием Electron — фреймворка для создания кросс-платформенных десктопных приложений средствами HTML, CSS и JavaScript.</li></ol><h4>Виртуальное окружение Python</h4><p>Вы можете столкнуться с тем, что вам захочется поэкспериментировать с библиотеками или модулями. Чтобы не засорять рабочее окружение, вы будете создавать отдельный проект со своими модулями под каждую задачу.</p><p>ПО для работы с виртуальным окружением можно разделить на то, что входит в стандартную библиотеку Python, и то, что не входит в нее. Наиболее популярные инструменты:</p><ul><li>Virtualenv — один из самых популярных инструментов для создания виртуальных окружений. Прост в установке и использовании.</li><li>Pyenv — тулза для изоляции версий Python. pyenv. Полезен, когда на одной машине нужно сразу несколько версий интерпретатора для тестирования.</li><li>Virtualenvwrapper — обертка для virtualenv, позволяющая хранить все изолированные окружения и управлять ими.</li><li>Venv — входит в стандартную библиотеку Python. Появился в версии Python 3 и по функционалу похож на virtualenv.</li></ul><h3>Git</h3><p>Обучение языку Python с нуля включает также изучение систем контроля версий — VCS. Именно они позволяют отслеживать и фиксировать любые изменения в коде: вы можете восстановить код в случае сбоя или откатить до более ранних версий.</p><p><a href="https://git-scm.com/">Git</a> — самая популярная VCS и мастхэв-инструмент для взаимодействия нескольких разработчиков на одном проекте. Подробнее о данной VCS вы можете почитать в нашем <a href="https://tproger.ru/translations/git-style-guide/">руководстве по командной разработке с Git</a>.</p><h3>HTTP-протоколы</h3><p>HTTP-протоколы в Python-разработке используются для создания веб-приложений и веб-сервисов, которые могут обмениваться данными с пользователем.</p><p>Для работы с HTTP-протоколами в Python используется стандартная библиотека <a href="https://docs.python.org/3/library/urllib.html">urllib</a>, которая предоставляет функции для отправки HTTP-запросов и обработки ответов.</p><p>Также для работы с HTTP-протоколами можно использовать более специализированные библиотеки, такие как requests или aiohttp:</p><ol><li>Библиотека <a href="https://pypi.org/project/requests/">requests</a> облегчает отправку HTTP-запросов и обработку ответов, предоставляя более высокоуровневый интерфейс для работы с протоколом. Она позволяет создавать сеансы, работать с куками, заголовками и параметрами запроса, а также обрабатывать различные типы ответов.</li><li>Библиотека <a href="https://docs.aiohttp.org/en/stable/">aiohttp</a> предоставляет асинхронный интерфейс для работы с HTTP-протоколами, что позволяет создавать более производительные и масштабируемые приложения. С ней можно использовать <a href="https://docs.python.org/3/library/asyncio.html">asyncio</a> для создания событийных циклов, работать с потоками и обрабатывать различные типы запросов/ответов.</li></ol><p>Знание HTTP-протоколов важно для разработчиков на Python, так как это позволяет им создавать эффективные и безопасные веб-приложения.</p><h3>Базы данных</h3><p>Даже начинающий Python-разработчик должен быть в курсе баз данных: а именно знать, <a href="https://www.oracle.com/cis/database/what-is-database/">что это такое</a> и <a href="https://tproger.ru/translations/sql-recap/">как с ними работать</a>.</p><p>Одной из главных особенностей использования баз данных в Python является наличие множества библиотек, позволяющих взаимодействовать с различными типами <a href="https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85">СУБД</a>. Вот лишь некоторые инструменты для работы с базами данных в Python:</p><ul><li>SQLAlchemy.</li><li>Django ORM.</li><li>Peewee.</li><li>Pony ORM.</li></ul><p>Разработчик может выбирать тот инструмент, который лучше всего подходит в конкретной ситуации.</p><p>Например, <a href="https://www.sqlalchemy.org/">SQLAlchemy</a> предоставляет возможность создания SQL-запросов с помощью объектов Python, что позволяет создавать сложные запросы и обращаться к базам данных, используя ORM.</p><p><a href="https://docs.djangoproject.com/en/4.1/topics/db/queries/">Django ORM</a> является частью веб-фреймворка Django и предоставляет более простой интерфейс для работы с БД, не требуя написания SQL-запросов вручную.</p><p>Кроме того, Python поддерживает работу с базами данных NoSQL, такими как <a href="https://www.mongodb.com/">MongoDB</a> и <a href="https://redis.io/">Redis</a>, что может быть полезно для работы с большими объемами данных и их обработки в режиме реального времени. Библиотеки для работы с такими БД также существуют и могут быть найдены в <a href="https://pypi.org/">PyPI</a>.</p><h2>Синтаксис Python</h2><p>Синтаксис Python простой и легкочитаемый, из-за чего данный язык может похвастаться низким порогом входа. Именно поэтому Python преобладает в программах онлайн- и офлайн-обучения.</p><p>Начните практику с наших <a href="https://tproger.ru/problems/python-3-exercises-for-beginners-geekbrains">задач по Python для начинающих</a>.</p><h3>Типы данных</h3><p>Python поддерживает различные типы данных, включая:</p><ol><li>Числовые типы: целые числа (int), числа с плавающей точкой (float), комплексные числа (complex).</li><li>Строки: последовательности символов, определенных в кавычках (str).</li><li>Булевы значения: TRUE и FALSE (bool).</li><li>Списки: упорядоченные изменяемые коллекции объектов (list).</li><li>Кортежи: упорядоченные неизменяемые коллекции объектов (tuple).</li><li>Множества: неупорядоченные коллекции уникальных элементов (set).</li><li>Словари: неупорядоченные изменяемые коллекции пар «ключ — значение» (dict).</li></ol><p>Одной из ключевых особенностей типов данных в Python является то, что переменные не требуют объявления типа явным образом. Тип переменной определяется автоматически во время выполнения программы. Кроме того, Python также поддерживает динамическую типизацию: это означает, что переменные могут изменять свой тип во время выполнения программы.</p><h3>Операторы и приоритетность операторов</h3><p>Операторы Python делятся:</p><ol><li>На арифметические операторы.</li><li>Операторы сравнения.</li><li>Операторы присваивания.</li><li>Логические операторы.</li><li>Операторы принадлежности.</li><li>Операторы тождественности.</li><li>Битовые операторы.</li></ol><p>Операторы сравнения, арифметические, условные операторы и циклы имеют стандартный синтаксис, используемый во многих других языках программирования. Подробнее об операторах Python на примерах вы можете узнать из <a href="https://www.youtube.com/watch?v=xCiUykOSe-g">данного видео</a>.</p><p>Кроме того, Пайтон разработчик с нуля должен понимать, как работает приоритетность операторов. В выражении интерпретатор Python выполняет операторы с более высоким уровнем приоритета первыми. И за исключением оператора возведения в степень (**) они выполняются слева направо.</p><p>Следующая таблица демонстрирует приоритетность — самые приоритетные операции вверху, внизу — с низким приоритетом:</p><figure><img src="https://media.tproger.ru/uploads/2023/03/4af1af3a-8e28-4b0a-9175-1e563a639594.jpg" alt="" /></figure><h3>Переменные</h3><p>Переменные предназначены для хранения данных. Название переменной в Python должно начинаться с алфавитного символа или со знака подчеркивания, может содержать алфавитно-цифровые символы и знак подчеркивания.</p><p>В Python применяется два типа наименования переменных: camelCase и underscore_notation.</p><p>Оба варианта будут верны, но учтите, что это разные переменные. Также надо учитывать регистрозависимость, поэтому переменные onlineschool и Onlineschool будут представлять разные объекты.</p><p>Закрепим, что переменные в Python объявляются без явного указания их типа, а тип переменной определяется автоматически во время выполнения программы. Плюс переменные могут изменять свой тип во время выполнения программы.</p><p><a href="https://www.w3schools.com/python/python_variables.asp">Подробнее о переменных</a></p><h3>Отступы</h3><p>Если в других языках программирования отступы в коде предназначены только для удобочитаемости, то в Python они очень важны.</p><p>Пример:</p><p>Однако в следующем случае вы получите ошибку:</p><p>Учитывайте это при написании программ.</p><h3>Логические операторы</h3><p>Язык программирования Python очень прост для обучения с нуля, ведь его синтаксис схож с синтаксисом других ЯП. Это касается и логических операторов:</p><ul><li>and — возвращает True, если оба утверждения верны;</li><li>or — возвращает True, если хоть одно из утверждений верно;</li><li>not — обратный результат, возвращает False, если результат верен.</li></ul><h3>Условия Python и операторы if-else</h3><p>Python поддерживает обычные логические условия из математики:</p><ol><li>Равно: а == b</li><li>Не равно: а != b</li><li>Меньше, чем: а &lt; b</li><li>Меньше или равно: a &lt;= b</li><li>Больше, чем: а &gt; b</li><li>Больше или равно: a &gt;= b</li></ol><p>Эти условия можно использовать несколькими способами, чаще всего в операторах if и циклах.</p><p>А вот пример использования оператора if:</p><p>В этом примере две переменные, a и b, используются как часть оператора if, чтобы проверить, больше ли b, чем a. Поскольку a = 33, b = 200, мы знаем, что 200 больше 33, поэтому выводим на экран b больше чем a.</p><p>Ключевое слово elif — это способ Python сказать: «Если предыдущие условия неверны, попробуйте это условие».</p><p>В примере a равно b, поэтому первое условие неверно, но условие elif истинно, поэтому мы выводим на экран a и b равны.</p><p>Ключевое слово else улавливает всё, что не улавливается предыдущими условиями:</p><p>В этом примере a больше, чем b, поэтому первое условие неверно, также условие elif неверно, поэтому мы переходим к другому условию и выводим на экран a больше чем b.</p><h3>Циклы</h3><p>Любой курс Питон разработчика включает изучение циклов. Циклы позволяют выполнять некоторое действие, в зависимости от соблюдения условия. В языке Python есть следующие типы циклов:</p><ul><li>while;</li><li>for.</li></ul><p>С помощью цикла while мы можем выполнять набор операторов, пока условие истинно:</p><p>Цикл for используется для перебора последовательности (то есть списка, кортежа, словаря, набора или строки). С помощью цикла for мы можем выполнить набор операторов один раз для каждого элемента в списке, кортеже, наборе и т. д. Пример использования:</p><p>Подробнее о <a href="https://tproger.ru/explain/tipy-ciklov-v-jazykah-programmirovanija-for-foreach-while-i-do-while/">циклах в программировании</a>.</p><h3>Функции</h3><p>Python также поддерживает функции, которые могут принимать аргументы и возвращать значения. Функции в Python могут быть определены как встроенные (built-in) или определены пользователем.</p><p>Обычно функция определяется с помощью инструкции def. Определим простейшую функцию:</p><p>Инструкция return говорит, что нужно вернуть значение. В нашем случае функция возвращает сумму x и y. Теперь мы можем ее вызвать:</p><p>Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произвольным числом аргументов, функции с позиционными и именованными аргументами, обязательными и необязательными.</p><h3>Классы</h3><p>Классы — это основа объектно-ориентированного программирования (ООП) в Python. Классы используются для определения объектов, которые могут иметь свойства (переменные) и методы (функции).</p><p>В Python классы создаются с помощью ключевого слова class. Вот пример простого класса Person с одним свойством (имя) и одним методом (приветствие):</p><p>В этом примере метод __init__ является конструктором класса и инициализирует свойство name. Метод say_hello выводит приветствие, используя значение свойства name. Чтобы создать экземпляр класса Person, нужно вызвать его конструктор с соответствующим аргументом.</p><p>Например, чтобы создать объект person с именем Алиса, мы можем написать следующий код:</p><p>Python-разработчик, написавший таким образом класс с нуля, может вызывать методы объекта person, например:</p><p>Классы в Python также поддерживают наследование, что позволяет создавать новые классы на основе существующих, добавлять новые свойства и методы. Кроме того, Python поддерживает множественное наследование, которое позволяет создавать классы, наследующие свойства и методы от нескольких родительских классов.</p><h3>Методы</h3><p>В Python методы — это функции, которые определены внутри класса и могут вызываться в экземплярах этого класса. Методы могут изменять состояние объекта, обращаться к его свойствам и выполнять другие операции.</p><p>Вот пример класса Rectangle, который имеет два свойства (ширина и высота) и два метода (вычисление площади и периметра):</p><p>Метод __init__ является конструктором класса и инициализирует свойства width и height. Методы area и perimeter вычисляют площадь и периметр прямоугольника, используя значения свойств width и height.</p><p>Чтобы создать экземпляр класса Rectangle, нужно вызвать его конструктор с соответствующими аргументами. Например, чтобы создать объект rect с шириной 10 и высотой 5, мы можем написать следующий код:</p><p>Теперь можно вызывать методы объекта rect, например:</p><p>Методы могут принимать аргументы, как и обычные функции. Они также могут вызывать другие методы или обращаться к другим свойствам объекта. Кроме того, Python поддерживает статические методы и методы класса, которые могут быть вызваны на классе, но не в его экземплярах.</p><h2>Продвинутый Python</h2><p>На этом обучение Python-разработчика не заканчивается. Необходимо понимать, как работает язык, а для этого важно углубиться в продвинутые аспекты разработки на нём.</p><p>Продвинутая тема для следующего шага — <a href="https://tproger.ru/translations/demystifying-decorators-in-python">декораторы в Python</a>.</p><h3>Функциональное программирование</h3><p>Функциональное программирование в Python — это подход к написанию программ, основанный на функциях высшего порядка, неизменяемости данных и отсутствии побочных эффектов.</p><p>Python поддерживает функциональное программирование, в том числе использование анонимных функций (lambda-функций), функций высшего порядка, списковых включений, генераторов, функциональных конструкций, таких как map(), reduce() и filter() и т. д.</p><p>Пример использования функции высшего порядка map(), которая применяет функцию к каждому элементу списка и возвращает новый список с результатами:</p><p>Также в Python есть поддержка генераторов, которые позволяют создавать ленивые последовательности значений. Пример использования генератора для создания бесконечной последовательности чисел Фибоначчи:</p><p>Эти функции и конструкции позволяют писать более чистый, краткий и выразительный код, который легче поддерживать и тестировать. Но функциональное программирование не всегда является лучшим выбором, особенно в случаях, когда нужно работать с изменяемыми данными или писать производительный код.</p><h3>Лямбда-функции</h3><p>Лямбда-функция в Python — это анонимная функция, которая может быть определена в одной строке кода без использования ключевого слова def. Лямбда-функция возвращает результат выражения, которое находится после оператора :.</p><p>Пример использования лямбда-функции для возведения числа в квадрат:</p><p>Лямбда-функции могут использоваться вместо именованных функций, когда нужно определить функцию внутри другой функции или передать функцию в качестве аргумента в другую функцию.</p><p>Пример использования лямбда-функции в качестве аргумента map() для возведения каждого элемента списка в квадрат:</p><p>Лямбда-функции могут быть полезны, когда нужно определить простую функцию без необходимости давать ей имя или использовать ее в других местах программы. Но если функция достаточно сложная или будет использоваться многократно, лучше определить ее с помощью ключевого слова def.</p><h3>Мапы, списки, коллекции</h3><p>Список — это упорядоченная коллекция элементов, которые могут быть изменены. Список может содержать элементы разных типов, и доступ к ним осуществляется по индексу. Например:</p><p>Коллекции — это контейнеры, которые содержат набор элементов. Они бывают двух типов: изменяемые (списки, множества, словари) и неизменяемые (кортежи, строки). Например, множество — это коллекция, которая не содержит дублей и может быть изменена:</p><p>Map — функция, которая принимает функцию и последовательность и применяет данную функцию к каждому элементу последовательности, возвращая новую последовательность с результатом. Пример:</p><h3>Ошибки и их обработка в Python</h3><p>В Python при выполнении программ могут возникать ошибки или исключения, такие как деление на ноль, попытка доступа к несуществующему индексу списка, неверное имя переменной и другие. Для этого в программах обучения на Питон разработчика с нуля предусматривается блок разбора исключений через конструкцию try-except.</p><p>Try-except позволяет «поймать» исключение и выполнить действия по его обработке, не прерывая выполнение программы. Конструкция выглядит следующим образом:</p><p>В данном примере, если при выполнении кода произойдет деление на ноль, будет вызвано исключение ZeroDivisionError, и выполнение программы перейдет к блоку except.</p><p>Также можно использовать конструкцию try-except для обработки нескольких типов исключений одновременно:</p><h3>I/O</h3><p>В Python для работы с I/O (вводом/выводом) существуют встроенные функции и модули. Например, функции print и input используются для ввода и вывода данных в консоль:</p><p>Для работы с файлами в Python есть функция open(), которая открывает файл на чтение или запись. Функция возвращает объект типа file, который позволяет производить операции с файлом:</p><p>Кроме того, в Python есть множество модулей для работы с различными форматами данных, такими как CSV, JSON, XML и другими:</p><h3>Регулярные выражения</h3><p>Регулярками называются шаблоны, которые используются для поиска соответствующего фрагмента текста и сопоставления символов. Подробнее о <a href="https://tproger.ru/translations/regular-expression-python/">регулярных выражениях в Python</a>.</p><h3>Тестирование</h3><p>Основная идея тестирования в Python заключается в том, чтобы написать тесты для каждого модуля или функции в отдельности и проверить, что они проходят успешно. Для этого используются специальные инструменты и библиотеки, которые позволяют запускать тесты автоматически и получать отчеты о результатах выполнения.</p><p>Две наиболее популярные библиотеки для тестирования на языке Python — unittest и pytest:</p><ol><li><a href="https://docs.python.org/3/library/unittest.html">Unittest</a> — это стандартный модуль тестирования в Python, с которым можно писать и запускать тесты для проверки работоспособности кода и который Python-разработчик должен знать с нуля. Он содержит множество методов и атрибутов для создания тестовых сценариев, утверждений и сбора результатов тестирования.</li><li><a href="https://docs.pytest.org/en/7.2.x/">Pytest</a> — библиотека тестирования в Python, которая обеспечивает более простой и элегантный подход к написанию тестов, чем unittest. Она предоставляет широкий спектр возможностей, включая автоматическое обнаружение и запуск тестов, улучшенный вывод результатов тестирования, множественные плагины и расширения, а также поддержку различных типов тестирования.</li></ol><h2>Популярные библиотеки и фреймворки Python — 2023</h2><h3>Data Science</h3><ul><li><a href="https://numpy.org/">NumPy</a> — библиотека для работы с массивами данных, матрицами и алгоритмами линейной алгебры.</li><li><a href="https://pandas.pydata.org/">Pandas</a> — библиотека для обработки и анализа данных, предоставляющая удобный интерфейс для работы с таблицами данных.</li><li><a href="https://matplotlib.org/">Matplotlib</a> — для визуализации данных, создания графиков, диаграмм и других типов графических представлений данных.</li><li><a href="https://scikit-learn.org/stable/">Scikit-learn</a> — содержит реализации многих алгоритмов машинного обучения, включая классификацию, регрессию, кластеризацию и другие.</li><li><a href="https://www.tensorflow.org/">TensorFlow</a> — обеспечивает мощные инструменты для создания, обучения и использования нейронных сетей.</li></ul><h3>Веб-разработка</h3><ul><li><a href="https://www.djangoproject.com/">Django</a> — высокоуровневый фреймворк для веб-разработки, обеспечивающий удобную абстракцию для создания веб-приложений, включая аутентификацию, авторизацию, работу с базами данных и многие другие функции.</li><li><a href="https://flask.palletsprojects.com/en/2.2.x/">Flask</a> — легкий и гибкий фреймворк для веб-разработки, который позволяет создавать быстрые и масштабируемые веб-приложения.</li><li><a href="https://www.sqlalchemy.org/">SQLAlchemy</a> — библиотека для работы с базами данных, обеспечивающая удобный и гибкий интерфейс для работы с различными типами баз данных.</li><li><a href="https://pypi.org/project/requests/">Requests</a> — библиотека для работы с HTTP-запросами, которая позволяет отправлять и получать данные с веб-серверов.</li><li><a href="https://pypi.org/project/beautifulsoup4/">Beautiful Soup</a> — библиотека для парсинга HTML- и XML-документов, которая обеспечивает удобный способ извлечения данных из веб-страниц.</li></ul><h3>Геймдев</h3><ul><li><a href="https://www.pygame.org/news">Pygame</a> — это библиотека для разработки 2D-игр на Python. Она содержит инструменты для управления графикой, звуком и событиями, такими как нажатия клавиш и мыши.</li><li><a href="https://www.panda3d.org/">Panda3D</a> — фреймворк для разработки 3D-игр на Python. Обеспечивает разработчикам высокую степень контроля над графикой и физикой игры, а также облегчает создание сложных 3D-сцен и объектов.</li><li><a href="https://api.arcade.academy/en/latest/">Arcade</a> — библиотека для разработки 2D-игр на Python. Предоставляет инструменты для работы с графикой, физикой и анимацией, а также поддерживает множество вспомогательных функций, таких как загрузка изображений и звуков.</li><li><a href="https://pypi.org/project/PyOpenGL/">PyOpenGL</a> — библиотека для работы с графикой OpenGL на Python. Предоставляет высокоуровневый интерфейс для создания 3D-объектов и сцен, множество инструментов для управления освещением, материалами и текстурами.</li></ul><h2>Дополнительные материалы</h2><h3>Книги</h3><h3>Подкасты</h3><ul><li><a href="https://podcast.python.ru/">https://podcast.python.ru/</a></li><li><a href="https://realpython.com/podcasts/rpp/">https://realpython.com/podcasts/rpp/</a> — для тех, кто владеет английским.</li></ul><p>Также можете посмотреть и послушать полезные подкасты от MoscowPython:</p><h3>Курсы</h3><p>Хотите быстро освоить весь базис, представленный в нашей дорожной карте? Это легко реализовать с онлайн-университетом Skypro, который выпускает уверенных разработчиков на Python. Специальный <a href="https://tprg.ru/8RvU">онлайн-курс «Python-разработчик»</a> с трудоустройством от Skypro предполагает обучение программированию на Python с нуля до профи.</p><p>Для тех, кто не хочет учиться в большой группе, предусмотрен тариф «Премиальный». Здесь будущий Python-разработчик получит индивидуальное обучение: тариф предусматривает мини-группы по пять человек.</p><p>В программу также добавлены уроки по английскому для IT-специалистов.</p><h2>Где и как изучать Python?</h2><p>Всё зависит от уровня самоорганизации. Самообучение хорошо подойдет людям с развитым тайм-менеджментом и возможностью дисциплинированно выполнять поставленные перед собой задачи без внешнего контроля.</p><p>Но у данного подхода есть существенный недостаток: ваш уровень знаний и навыков некому оценить. В этом случае можно оплачивать услуги ментора, который время от времени будет проверять ваши таски и давать советы.</p><p>Но есть ли смысл оплачивать одного специалиста, если есть возможность пройти полноценные курсы Python-разработчика, где вашим развитием будут заниматься опытные наставники?</p><p>Например, у SkyPro есть <a href="https://tprg.ru/8RvU">курс Python-разработчика</a> с нуля. За 10 месяцев вы освоите базу, познакомитесь с необходимыми инструментами на практике, создадите 7 пет-проектов для портфолио и сможете претендовать на позицию младшего разработчика. По окончанию курса вы получите диплом о профессиональной переподготовке, а карьерные консультанты помогут правильно составить резюме и подготовиться к вопросам рекрутеров на собеседованиях.</p><p>Мы же надеемся, что статья оказалась для вас полезной. Остались вопросы? Задайте их в комментариях.</p><p>Реклама ОАНО ДПО «СКАЕНГ» LjN8JvxFj</p>]]></content:encoded>
    </item>
    <item>
      <title>Что должен уметь Frontend разработчик в 2023 году (+Roadmap)</title>
      <link>https://tproger.ru/articles/chto-dolzhen-umet-frontend-razrabotchik-v-2023-godu-roadmap</link>
      <comments>https://tproger.ru/articles/chto-dolzhen-umet-frontend-razrabotchik-v-2023-godu-roadmap?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Кай Голдман]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-dolzhen-umet-frontend-razrabotchik-v-2023-godu-roadmap</guid>
      <description><![CDATA[<p>Разобрались, что должен уметь каждый фронтенд-разработчик в 2023 году на позициях стажёра, джуна, миддла и сеньора.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-dolzhen-umet-frontend-razrabotchik-v-2023-godu-roadmap">Что должен уметь Frontend разработчик в 2023 году (+Roadmap)</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 13 Feb 2023 08:19:25 GMT</pubDate>
      <content:encoded><![CDATA[<p>С каждым годом войти в IT становится всё труднее. За счёт высоких зарплат, комфортного образа жизни, амбиций, потребности в специалистах, сейчас чуть ли не каждый второй хочет стать программистом. За счёт этих факторов, рынок труда в IT перенасыщается, из-за чего потребности в навыках специалистов тоже выросли. Теперь от разработчиков даже требуют уметь программировать, я знаю, это ужасно…</p><p>Это не говорит о том, что сейчас в IT идти смысла нету, этот факт лишь говорит о том, что повысилась конкуренция. Я лично считаю, что такая ситуация наоборот благосклонно влияет на весь мир в целом, так как конкуренция порождает прогресс. А для вас это дополнительный стимул стать еще более востребованным специалистом и сильной личностью.</p><p>Подробнее о том, чем занимаются фронтенд-разработчики и сколько зарабатывают вы можете прочитать <a href="https://tproger.ru/articles/frontend-razrabotka--chem-zanimayutsya-i-skolko-zarabatyvayut-specialisty">в этой статье</a>.</p><h2>Как развиваться (Roadmap)</h2><p>Чтобы стать фронтенд-разработчиком, нужно всегда быть в курсе новейших технологий и постоянно развиваться, как и в любом направлении информационных технологий.</p><p>В связи с быстрыми темпами развития IT-технологий, каждый год появляется что-то новое, а что-то наоборот укрепляет свои позиции. В этой статье я подготовил для вас дорожную карту для развития себя, как разработчика интерфейсов. Сведения я собрал со многих источников, курсов и моих личных убеждений и опыта, как трудоустроенного Frontend разработчика.</p><h3>Beginner (Новичок)</h3><p>Сейчас мы говорим о человеке, который только начинает вливаться в IT индустрию, а конкретнее в разработку интерфейсов.Здесь важно выделить, что эти знания – максимальная база. Вы навряд-ли сможете трудоустроиться с этими знаниями, но это даст толчок в развитии.По моему опыту, новичок, как минимум, должен быть знаком со следующим перечнем технологий:</p><ol><li>Что такое TCP/IP, из каких уровней состоят и какие протоколы содержит. (В частности Ethernet, IP, UDP, TCP, HTTP1/2/3)</li><li>Что такое HTML. Базовые элементы разметки. Семантика SEO-оптимизация и доступность.</li><li>Что такое CSS. Базовые свойства стилизации. Позиционирование элементов макета. Flexbox. Grid. Адаптивность посредством составления @media запросов. Анимации и трансформации. Псевдоэлементы и псевдоклассы. Методология БЭМ.</li><li>Основы языка программирования JavaScript. Типы данных. Циклы, Условия, Работа с объектами. Функции. Прототипы и наследование. Работа с объектами. Методы массивов.</li><li>Выбрать редактор кода. Я лично из своего опыта рекомендую Visual Studio Code или WebStorm (платный).</li></ol><h3>Trainee (Стажёр)</h3><p>Если вы знакомы с понятиями описанными выше, вы можете переходить к следующему этапу – Trainee. Изучив технологии, описанные в данном разделе, вы уже имеете какой-никакой вес в IT мире и даже сможете устроиться на стажировку в IT-компанию.Стажёр должен быть знаком со следующим перечнем технологий:</p><ol><li>Уметь работать с браузерным окружением и DOM (Document Object Model). Браузерные события. Обработка ошибок (Try/Catch). Пользовательские ошибки. ООП. Модульная система. Экспорт и импорт. Динамические импорты. Web API.</li><li>Что делает JavaScript – асинхронным. Что такое Event Loop. Микро и макро задачи. Промисы. Fetch API. Синтаксический сахар – Async и Await.</li><li>Что такое DNS-зоны и домены. Cross-Origin Resource Sharing (CORS). Preflight Requests. No-CORS mode. Request &amp; Response Headers.</li><li>Что такое линтеры. Настройка ESLint и подключение плагинов. Настройка Prettier и Stylelint. Pre-commit Check.</li><li>Как работает система управления версиями (Git). Регистрация на GitHub. Коммиты. Репозитории. Форки. Merge Requests. Checkout. Ветки.</li><li>Что такое Node.js. Как работает менеджер пакетов Npm. package.json и package-lock.json. npm install, npm uninstall. Dependencies &amp; Development Dependenices. Создание своего пакета.</li><li>Что такое препроцессор. SASS и SCSS. Переменные. Импорты. Вложенность. Модули. Миксины.</li></ol><h3>Junior (Младший разработчик)</h3><p>Изучив следующий перечень технологий, по моему опыту, вы уже можете стать младшим разработчиком в IT-компании:</p><ol><li>Что такое сборщик модулей. Babel. Настройка Webpack. Правила. Модули. Плагины. DevServer. Переход к Vite.</li><li>Что такое React и какие проблемы он решает. Жизненный цикл компонентов. Особенности виртуального DOM-дерева. React компоненты. Базовые хуки и разработка собственных. React Portals. React Refs. JSX синтаксис. Props &amp; State.</li><li>Особенности FLUX архитектуры. Reducers. Actions. Хук useContext. Redux и Redux Toolkit. Redux Thunk. RTK Query. (По желанию можно изучить MobX и/или Zustand)</li><li>Что такое роут. Из чего состоит объект Location. Как манипулировать историей сессии через History. Библиотека React Router.</li><li>Как повысить эффективность стилизации. Что такое PostCSS. Плагин CSS Modules. Библиотека TailwindCSS. Что такое UI библиотека. MUI. Ant Design.</li><li>Что такое VPS/VDS. Базовые команды терминала Linux систем. Права доступа. Ununtu. Nginx. Базовая настрока веб-сервера. SSH. Ассиметричное шифрование.</li><li>Что такое CI/CD. Интеграция. Доставка. Развертывание. Структура и настройка. Пайплайны. Артефакты. Этапы. Переменные.</li></ol><h3>Middle (Средний специалист)</h3><p>Если вы изучили все предыдущие темы, по моему мнению, вы уже можете называть себя Junior Front-end Developer. Но на этом останавливаться рано. Чтобы вырасти до Middle Front-end разработчика, вам необходимо изучить следующий перечень технологий:</p><ol><li>Что такое TypeScript и какие проблемы он решает. Интерфейсы. Типы. Дженерики. Enum. Интеграция с технологиями. Типизация React-приложения.</li><li>Что такое авторизация? Идентификация. Аутентификация. Методы аутентификации. Bearer Token. JWT. Защита роутов. Протокол OAuth. Интеграция с сервисами.</li><li>Что такое оффлайн. Как работают Web &amp; Service Workers. Регистрация сервисов. Жизненный цикл Service Worker’ов. Cache API. Методы Cache API. Как кэшировать выборку запросов.</li><li>Что такое PWA (Progressive Web Application). Надежность. Быстрота. Привлекательность. Favicon. Настройка Manifest’а.</li><li>Как настроить доступность приложения. Что такое Screen Readers и Voice Over. Доступность с клавиатуры. Библиотека Focus Trap. Семантика. Анализ доступности через Lighthouse.</li><li>Как локализировать приложение. Объект navigator. Intl. Плюрализация и Интернационализация. Библиотека l18next. Localazy.</li><li>Что такое Next.js и какие проблемы он решает. Что такое SSG, SSR, ISR и в чем между ними разница. Роутинг Next.js приложения. Оптимизация. SEO.</li><li>Почему тормозят сайты. Основные метрики Web Vitals. Анализ производительности. Методы оптимизации. Tree Shaking. React.lazy и React.Suspense. Как браузер рисует страницы. Layout. Paint. Compose. Rendering Pipeline. Парсинг HTML и CSS. Объединение DOM и CSSOM. Render-дерево. Мемоизация. useMemo и useCallback. Оптимизация изображений. Houdini Paint API.</li><li>Из чего состоит тестирование приложений. Мониторинг ошибок. Sentry Service. Что такое E2E, Unit и интеграционное тестирование. Пирамида тестирования. Библиотека Jest. Таймеры Jest. Мок-функции. TDD. Тестирование React-приложения через React Testing Library. Методы поиска элементов на странице. Тестирование событий. E2E тестирование с помощью Cypress.</li></ol><h3>Senior (Старший разработчик)</h3><p>Ну и перейдём к последнему этапу. Изучив все вышеперечисленные технологии, вы уже закрепились, как уверенный разработчик интерфейсов, однако расти можно бесконечно долго. Ниже я перечислил актуальные на данный момент технологии для вашего развития:</p><p>GraphQL, Apollo, PostgreSQL, Fastify, Vue, Angular, Svelte, Remix, Astro, React Native, Relay Modern, Redux Saga, Web 3.0</p><p>Это лишь часть того, что вы можете изучить и это лишь то, что относится к Front-end разработке. После изучения всех вышеописанных технологий, вы можете идти в Full-stack разработку или же в другую специализацию в целом. Главное, чтобы вам нравилось то, чем вы занимаетесь.</p><h2>Заключение</h2><p>Как вы поняли по этой статье, путь в IT совсем не легкий и требует много времени. Этот путь отнюдь не простой и быстрый. Скорость развития зависит напрямую от вас и вашего стремления. В моём окружении есть мидлы, которым по 18-19 лет. Вы должны посвятить этому свою жизнь. Сделать работу частью себя. Вы должны получать кайф от своей работы. В любом случае, попробовать стоит, возможно в этом вы найдёте себя.</p><p>Пишите ваше мнение и вопросы в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как стать разработчиком с нуля</title>
      <link>https://tproger.ru/articles/kak-stat-programmistom</link>
      <comments>https://tproger.ru/articles/kak-stat-programmistom?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-stat-programmistom</guid>
      <description><![CDATA[<p>Пошаговый план: какой язык выбрать, что учить, как найти первую работу в IT. Разбираем все направления — от веба до Data Science. Читайте и действуйте!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-stat-programmistom">Как стать разработчиком с нуля</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Карьера]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 26 Jan 2023 08:00:30 GMT</pubDate>
      <content:encoded><![CDATA[<p>• Чтобы стать программистом, нужны как технические навыки (алгоритмы, ООП, базы данных), так и софт скиллы (английский, работа в команде)
• Выбирайте направление по интересам: веб, мобильная разработка, Data Science, геймдев или системное программирование
• Начните с одного языка и доведите его до уровня уверенного использования, прежде чем учить следующий
• Портфолио и практические проекты важнее сертификатов при трудоустройстве
• Самообучение, курсы и менторство — рабочие пути в IT, формальное образование не обязательно</p><p>Как стать программистом и с чего начать, если нет практического опыта, а представление о программировании весьма размытое? Подробно рассказываем, как стать востребованным программистом с нуля и на что обратить внимание.</p><ol><li><a href="https://tproger.ru/#part1">Кто такой программист</a></li><li><a href="https://tproger.ru/#part2">Почему вы хотите начать программировать</a></li><li><a href="https://tproger.ru/#part3">Что нужно знать, чтобы стать программистом</a></li><li><a href="https://tproger.ru/#part4">Какое направление в программировании выбрать в 2026 году</a></li><li><a href="https://tproger.ru/#part5">Десктопная разработка</a></li><li><a href="https://tproger.ru/#part6">Data Science</a></li><li><a href="https://tproger.ru/#part7">Как стать разработчиком на Андроид</a></li><li><a href="https://tproger.ru/#part8">План развития iOS разработчика</a></li><li><a href="https://tproger.ru/#part9">Как стать разработчиком игр</a></li><li><a href="https://tproger.ru/#part10">Как стать Python разработчиком</a></li><li><a href="https://tproger.ru/#part11">План развития Java-программиста</a></li><li><a href="https://tproger.ru/#part12">Бэкенд разработка — с чего начать?</a></li><li><a href="https://tproger.ru/#part13">Как стать фронтенд разработчиком</a></li><li><a href="https://tproger.ru/#part14">Full Stack разработка</a></li><li><a href="https://tproger.ru/#part15">Какой язык программирования выбрать в 2026 году</a></li><li><a href="https://tproger.ru/#part16">Где выучиться на программиста</a></li><li><a href="https://tproger.ru/#part17">Классификация разработчиков</a></li><li><a href="https://tproger.ru/#part18">Как стать Junior-разработчиком</a></li><li><a href="https://tproger.ru/#part19">Где работают программисты</a></li><li><a href="https://tproger.ru/#part20">Как найти первую работу в IT</a></li><li><a href="https://tproger.ru/#part21">Что спрашивают у Джунов на собеседовании</a></li><li><a href="https://tproger.ru/#part22">Что делать, если вам не хватает знаний до вакансии Джуниор-программиста</a></li><li><a href="https://tproger.ru/#part23">Заключение</a></li></ol><h2>1. Кто такой программист</h2><p>IT — перспективная отрасль, которая сулит хорошим специалистам <a href="https://tproger.ru/articles/developer-salary/">немаленькие зарплаты</a>. Но если деньги — единственная причина, подумайте трижды. Вам предстоит работать в офисе, дома, забывать о выходных и возможности расслабиться: все мысли в тасках и багах. А всё, что обязательно нужно знать начинающему программисту, курсы не дадут: будьте готовы доучиваться.</p><p>Программист — это специалист по разработке компьютерных программ. Под разработкой понимается продумывание архитектуры программы, её реализация, оптимизация и тестирование. Далее мы разберёмся, как стать востребованным айтишником с нуля самостоятельно.</p><h3>1.1 Чем занимается программист</h3><p>Это зависит от специфики выбранной отрасли, но в целом всё сводится к написанию и тестированию кода. Важно понимать свои обязанности и не скатываться в звание <a href="https://tproger.ru/articles/21-answers-to-weird-requests/">раба на галерах</a>.</p><h3>1.2 Можно ли стать айтишником с нуля</h3><p>Разумеется. Для этого существуют <a href="https://tproger.ru/tag/for-beginners/">материалы, ориентированные на новичков</a>: туда входят статьи, подборки книг, обучающие приложения, задачки, видеоуроки и многое другое.</p><figure><img src="https://media.tproger.ru/uploads/2023/03/768x96-1.png" alt="" /></figure><p>А вот как стать крутым программистом с нуля и с чего начать — другой вопрос. К примеру, Senior разработчика от джуна отличают годы практики и колоссальный опыт, так что только терпение и труд.</p><h2>2. Почему вы хотите начать программировать</h2><p>IT — перспективная отрасль, которая сулит хорошим специалистам немаленькие зарплаты. Но если деньги — единственная причина, подумайте трижды. Вам предстоит работать в офисе, дома, забывать о выходных и возможности расслабиться: все мысли в тасках и багах. А всё, что обязательно нужно знать начинающему программисту, курсы не дадут: будьте готовы доучиваться.</p><p>Если же вы питаете неподдельный интерес к процессу, смело ступайте на стезю разработки.</p><h2>3. Что нужно знать, чтобы стать программистом</h2><p>Чтобы стать успешным и востребованным программистом, нужно обзавестись рядом hard skills и soft skills. Первые отвечают за технические умения и знания, вторые — за качества, которые помогают эффективно работать в команде.</p><h3>3.1 Hard skills</h3><p>У каждой профессии свой набор хард скиллов. У программиста это общие технические знания (математика, информатика, алгоритмизация) и набор навыков, свойственный конкретному стеку.</p><h4>3.1.1 Основы информатики</h4><p>В такой сложнотехнической профессии понадобятся даже самые азы, а именно:</p><ul><li>какие типы данных бывают и чем они отличаются друг от друга;</li><li>понимание систем счисления — двоичной и шестнадцатеричной;</li><li><a href="https://ru.wikipedia.org/wiki/%D0%91%D1%83%D0%BB%D0%B5%D0%B2%D0%B0_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0">булева алгебра</a> и логические операторы.</li><li>понятие <a href="https://tproger.ru/tag/c-language/">языка программирования</a>.</li></ul><h4>3.1.2 Математика</h4><p>А как же стать настоящим программистом, если плохо с математикой, и <a href="https://tproger.ru/experts/2/">насколько важна математика в разработке</a>? Требования разнятся в зависимости от сферы: для веба нужна лишь базовая математика, алгоритмы и теория вероятности. Для Data Science потребуется линейная алгебра, а для геймдева — геометрия.</p><h4>3.1.3 Алгоритмы</h4><p>Это то, что нужно обязательно знать, чтобы стать программистом. Алгоритмами называют последовательность действий, которая преобразовывает входные данные в некий результат. Наверняка вы слышали об алгоритме сортировки. По сути, алгоритм — это набор инструкций для решения задачи.</p><h4>3.1.4 Структуры данных</h4><p>Выбор структуры данных определяет алгоритмы, которые можно применять к данным. Среди базовых структур — массивы, стеки, деревья, графы, множества и отображения.</p><h4>3.1.5 ООП</h4><p>Объектно-ориентированное программирование — парадигма, основанная на концепции объектов, которые содержат данные и код. Нужна ли она вам, зависит от языка программирования и выбранного стека.</p><h4>3.1.6 Системы контроля версий</h4><p>Git — наиболее популярная система контроля версий. Это инструмент для отслеживания изменений в коде, который позволяет управлять разными версиями проекта. Умение работать с Git необходимо любому разработчику.</p><h4>3.1.7 Паттерны проектирования</h4><p>Паттерны — это готовые решения для типичных задач в разработке программного обеспечения. Знание паттернов ускоряет разработку и делает код понятнее для коллег.</p><h3>3.2 Soft skills</h3><p>Soft skills — это навыки, которые позволяют эффективно работать в команде. К ним относятся:</p><ul><li><b>Английский язык</b>. Документация, зарубежные форумы вроде Stack Overflow, переписка с иностранными коллегами — без английского никуда. Изучите хотя бы технический английский. <a href="https://tproger.ru/articles/english-for-it/">Советы для IT-специалистов</a>.</li><li><b>Работа в команде.</b> Разработка — это командная игра. Чаще всего над проектом трудятся несколько специалистов, которые работают в связке.</li><li><b>Тайм-менеджмент.</b> Разработчик работает в режиме многозадачности: несколько задач одновременно, стендапы, созвоны с заказчиком, ревью кода коллег. Умение расставлять приоритеты — ключевой навык.</li><li><b>Гибкость и <a href="https://tproger.ru/explain/agile-is-simple/">agile-мышление</a>.</b> Требования к продукту меняются, и к этому нужно быть готовым.</li></ul><h4>3.2.1 Хватит ли базовой математики</h4><p>Для большинства направлений — да. Требования к математике зависят от специализации:</p><ul><li>Веб-разработка — базовая математика, логика, алгоритмы.</li><li>Data Science — линейная алгебра, математический анализ, теория вероятностей.</li><li>Геймдев — геометрия, физика, линейная алгебра.</li><li>Системное программирование — дискретная математика, теория алгоритмов.</li></ul><h4>3.2.2 Нужен ли английский</h4><p>Да. Большинство технической документации написано на английском. Вопросы на Stack Overflow, README проектов на GitHub, официальные туториалы — всё это на английском. Без базового понимания языка вы будете ограничены только русскоязычными ресурсами.</p><h2>4. Какое направление в программировании выбрать в 2026 году</h2><p>Прежде чем думать, как стать айтишником с нуля самостоятельно, стоит определиться с направлением. По данным <a href="https://insights.stackoverflow.com/survey/2020#overview">Stack Overflow Developer Survey</a>, самые популярные направления в разработке:</p><p>В опросе приняло участие 65 000 разработчиков из разных стран.</p><p>Но что насчёт России? Согласно данным «Университета 20.35» за 2020 год, в топ-10 востребованных удалённых ИТ-профессий России вошли:</p><ol><li>Java-разработчик</li><li>Аналитик данных</li><li>Разработчик на языке C#</li><li>PHP-разработчик</li><li>Специалист службы поддержки</li><li>Продуктовый аналитик</li><li>Разработчик 1С</li><li>Kotlin-разработчик</li><li>Системный администратор</li><li>Python-разработчик</li></ol><p>А вот зарплаты айтишников по специализациям за второе полугодие 2020:</p><figure><img src="https://media.tproger.ru/uploads/2021/05/545667567.jpg" alt="" /></figure><p>Проценты на диаграмме отражают разницу с предыдущим периодом, а прочерк означает, что данных для сравнения недостаточно.</p><h2>5. Десктопная разработка</h2><p>Десктопными называют приложения, которые устанавливаются на компьютер и работают под управлением ОС. Как известно, чтобы стать айтишником с нуля, сперва в любом случае нужно практиковаться на консоли и простых приложениях.</p><p>Хотите заниматься этим на серьёзном уровне? Здесь всё просто: если планируете разрабатывать под Windows — учите язык C#, под Linux — C++ или C, под macOS — Swift.</p><h3>5.1 C#</h3><p>Этот язык — основа Windows-разработки. Он используется в разработке настольных приложений (Windows Forms, WPF), игр (Unity) и серверных приложений (.NET).</p><h3>5.2 C++</h3><p>C++ применяется в системном программировании, геймдеве и разработке приложений, где важна производительность. Этот язык — ближе всего к «железу» из высокоуровневых языков.</p><h3>5.3 Java</h3><p>Java-десктоп не пользуется большой популярностью, но имеет место быть: инструментарий для разработки (IDE и другое ПО для разработчиков) часто пишется на Java. К примеру, IntelliJ IDEA.</p><h3>5.4 Python</h3><p>Для создания GUI-приложений на Python существуют библиотеки Tkinter, PyQt и wxPython. Это не самый популярный стек для десктопа, но Python как язык общего назначения справляется и с этой задачей.</p><h3>5.5 Swift</h3><p>Если ваша цель — macOS-приложения, Swift является основным языком. Он также используется для iOS-разработки.</p><h3>5.6 JavaScript</h3><p>Electron — фреймворк для создания кроссплатформенных десктопных приложений на JavaScript. Именно на нём написаны VS Code, Slack, Discord.</p><h3>5.7 .NET</h3><p>Платформа .NET от Microsoft используется для разработки Windows-приложений. <a href="https://tproger.ru/articles/razrabotka-na-c-s-nulja-v-2022-godu-dorozhnaja-karta/">Дорожная карта C# разработчика</a>.</p><h3>5.8 Ruby</h3><p>Ruby используется преимущественно в веб-разработке (Ruby on Rails), но также подходит для написания скриптов и утилит.</p><h3>5.9 Kotlin</h3><p>Kotlin Multiplatform позволяет писать код, который запускается на Android, iOS и десктопе. Технология активно развивается компанией JetBrains.</p><h2>6. Data Science</h2><p>Языки программирования Python и R — общепринятый стандарт для Data Science, так как они оба отлично подходят для работы со статистикой.</p><h3>6.1 Python</h3><p>Как стать Python программистом с нуля самостоятельно? На самом деле, не так уж сложно: у языка Пайтон простой синтаксис, много библиотек, развёрнутая и понятная документация. Но есть и минусы, такие как отсутствие удобных средств ORM и не самая высокая скорость работы.</p><p>Для Data Scientist у Python есть немало библиотек и фреймворков:</p><ul><li><a href="https://pandas.pydata.org/">Pandas</a></li><li><a href="https://pytorch.org/">PyTorch</a></li><li><a href="https://numpy.org/">NumPy</a></li><li><a href="https://www.tensorflow.org/">TensorFlow</a></li><li><a href="https://keras.io/">Keras</a></li><li><a href="https://scikit-learn.org/">Scikit-learn</a></li></ul><h3>6.2 R</h3><p>R в свою очередь характеризуется богатой ML-экосистемой, поддержкой векторных вычислений и синтаксисом, заточенным под нужды статиста. Из минусов — меньшее комьюнити и не самый простой синтаксис.</p><p>Но у языка R есть свои инструменты для Data Science:</p><ul><li>Esquisse и Ggplot2 — библиотеки для создания графиков.</li><li>Dplyr — аналог Pandas для R.</li><li>Shiny — пакет для интерактивных веб-приложений с визуализацией исследований.</li></ul><p>И это не говоря о randomForest, Caret и других библиотеках с методами машинного обучения.</p><p>Читайте также: <a href="https://tproger.ru/articles/kak-stat-ai-inzhenerom-v-2024-godu---powagovyj-gajd">Как стать AI-инженером в 2024 году — пошаговый гайд</a> и <a href="https://tproger.ru/articles/11-it-trendov-2025">11 IT-трендов 2025 года, которые изменят индустрию</a>.</p><h2>7. Как стать разработчиком на Андроид</h2><p>В 2019 году компания Google <a href="https://tproger.ru/news/first-kotlin-android/">объявила Kotlin предпочтительным языком программирования для создания Android-приложений</a>. Это спровоцировало новую волну споров по выбору языка.</p><p>Ответ таков: чтобы стать Android-разработчиком, нужны оба языка, но при этом ознакомиться с их отличительными характеристиками не помешает.</p><h3>7.1 Java</h3><ul><li>много библиотек и готовых решений;</li><li>большое комьюнити;</li><li>разные сферы применения, если вдруг надоест Android-разработка;</li><li>документация Kotlin предполагает, что вы знаете Java.</li></ul><h3>7.2 Kotlin</h3><ul><li>лаконичный синтаксис;</li><li>актуальная IDE, тесно связанная с языком разработки (Android Studio и Kotlin созданы JetBrains);</li><li>предсказуемое развитие;</li><li>перспективы.</li></ul><h2>8. План развития iOS разработчика</h2><p>А как же тогда стать разработчиком iOS? Здесь всё гораздо проще, так как основной язык всего один.</p><h3>8.1 Swift</h3><p>Этот язык программирования разработан Apple и многое заимствовал из Objective-C, а также C++.</p><p>Преимущества Swift:</p><ul><li>компактный язык программирования;</li><li>производительность приближена к C++;</li><li>тестирование кода в реальном времени со Swift Playgrounds;</li><li>постепенно распространяется на другие платформы.</li></ul><p>Подробнее — <a href="https://tproger.ru/articles/what-swift-is-good-for/">для чего подходит Swift</a>.</p><h2>9. Как стать разработчиком игр</h2><p>Разработка игр — это отдельная и очень увлекательная область. Она требует знания математики (линейная алгебра, физика), умения работать с игровыми движками (Unity, Unreal Engine) и понимания игровой механики.</p><h3>9.1 C++</h3><p>Это язык номер один в геймдеве. Unreal Engine написан на C++, и большинство крупных игровых студий используют его в работе.</p><h3>9.2 C#</h3><p>Unity использует C# как основной язык. Это делает C# вторым по значимости языком в геймдеве. Unity подходит как для инди-игр, так и для крупных проектов.</p><h3>9.3 Blueprint (Unreal Engine)</h3><p>Система визуального программирования Blueprint в Unreal Engine позволяет создавать игровую логику без написания кода. Это хорошая точка входа для начинающих геймдев-разработчиков.</p><h3>9.4 GDScript (Godot)</h3><p>Godot — бесплатный open source игровой движок. GDScript — его собственный язык, похожий на Python. Отличный выбор для начинающих разработчиков игр.</p><h3>9.5 JavaScript</h3><p>Phaser, Babylon.js, Three.js — фреймворки для разработки браузерных игр на JavaScript. Это хороший путь для тех, кто уже знает JS и хочет попробовать геймдев.</p><h3>9.6 Python</h3><p>Pygame — библиотека для создания простых 2D-игр на Python. Подходит для прототипирования и небольших проектов, но не для AAA-разработки.</p><h3>9.7 Lua</h3><p>Lua используется в качестве встроенного скриптового языка во многих игровых движках. Roblox Studio, к примеру, использует Lua как основной язык программирования.</p><h3>9.8 Rust</h3><p>Rust набирает популярность в геймдеве благодаря высокой производительности и безопасности памяти. Bevy — игровой движок на Rust.</p><h2>10. Как стать Python разработчиком</h2><p>Чтобы стать питонистом, нужно начинать с азов, таких как принципы ООП и синтаксис языка. А понимание того, как стать программистом Python, придёт с определением сферы деятельности. Основных направления для Пайтон-разработчиков два:</p><ul><li>Data Science</li><li>Веб-разработка</li></ul><p>Поскольку первое направление мы уже разобрали, сосредоточимся на веб-разработке. Что же что нужно знать Python веб-разработчику? Обратите внимание на фреймворки Django и Flask. Для эффективной работы с бэкендом достаточно одного из них, но в идеале стоит изучить оба.</p><p>Python можно использовать для создания десктопных приложений, геймдева и мобильной разработки, но наилучших показателей с этим языком можно достичь в перечисленных направлениях.</p><h2>11. План развития Java-программиста</h2><p>А как можно стать Java разработчиком, если никогда не был программистом? Базис для всех языков плюс-минус одинаков: синтаксис, переменные, условия, циклы, ООП. Для решения специфических задач нужно освоить инструмент сборки и управления проектом Maven или Gradle.</p><p>Дальше всё зависит от выбранного направления в Java:</p><ul><li>веб-разработка;</li><li>Android разработка;</li><li>программирование для десктопов;</li><li>Big Data.</li></ul><p>Все материалы по этим направлениям, инструменты и путь развития вы найдёте в <a href="https://tproger.ru/articles/java-roadmap/">дорожной карте Java-программиста</a>.</p><h2>12. Бэкенд разработка — с чего начать?</h2><p>Как стать бэкенд разработчиком? Нужно понимать, как устроены операционные системы, уметь работать с терминалом, знать стандарты POSIX и концепции построения сети, управлять вводом и выводом (I/O), процессами, а также памятью.</p><h3>12.1 Node.js</h3><p>Node.js — серверная JavaScript-платформа. Хотите разрабатывать бэкенд на JavaScript? <a href="https://tproger.ru/translations/simple-blog-node-js/">Попробуйте создать простой блог на Node.js</a>.</p><h3>12.2 PHP</h3><p>PHP по-прежнему остаётся одним из самых востребованных языков в бэкенде. WordPress, самая популярная CMS в мире, написана на PHP.</p><h3>12.3 Python (Django/Flask)</h3><p>Django — полнофункциональный фреймворк с батарейками в комплекте, Flask — минималистичный. Оба используются для создания веб-сервисов и API.</p><h3>12.4 Ruby on Rails</h3><p>Ruby on Rails — фреймворк с философией Convention over Configuration. Благодаря ему разработка идёт быстро: много вещей работают «из коробки».</p><h3>12.5 Java (Spring)</h3><p>Spring — самый популярный Java-фреймворк для корпоративной разработки. Он используется в крупных банках, финтех-компаниях и enterprise-системах.</p><h3>12.6 Go</h3><p>Go (Golang) от Google — язык для высоконагруженных систем. Используется в Kubernetes, Docker и многих других инфраструктурных проектах.</p><h3>12.7 Rust</h3><p>Rust всё активнее проникает в бэкенд-разработку. Actix-web — один из самых быстрых веб-фреймворков в мире по бенчмаркам.</p><h3>12.8 .NET (C#)</h3><p>ASP.NET Core — мощный фреймворк для серверной разработки от Microsoft. Широко используется в корпоративных приложениях на Windows-инфраструктуре.</p><p>Подробнее о карьере в серверной разработке: <a href="https://tproger.ru/articles/chto-dolzhen-znat-backend-razrabotchik">Что должен знать бэкенд-разработчик в 2024 году</a>.</p><h2>13. Как стать фронтенд разработчиком</h2><p>Итак, frontend программирование — с чего начать? Вам нужно освоить HTML, CSS и JavaScript — три кита, на которых стоит фронтенд-разработка. Подробный <a href="https://tproger.ru/curriculum/intro-to-frontend-development">план обучения для начинающих фронтенд-разработчиков</a>.</p><h3>13.1 Обучение HTML</h3><p>Разметка — это каркас сайта. Чтобы работать с фронтендом, следует хорошо понимать анатомию HTML-разметки, знать основные атрибуты и теги, обеспечивать доступность и освоить SEO хотя бы на базовом уровне.</p><p>Для лучшего понимания рекомендуем ознакомиться с <a href="https://tproger.ru/video/html5-for-beginners/?autoplay=1">видеокурсом «HTML5 для начинающих»</a>.</p><h3>13.2 Обучение CSS</h3><p>Далее идут каскадные таблицы стилей. В разрезе CSS вам нужно освоить:</p><ul><li>компоновку;</li><li>центрирование и выравнивание;</li><li>видимость элементов.</li></ul><p>Это базис. Следующим этапом можно переходить к медиа-запросам, которые позволят учитывать технические параметры разных устройств. В создании адаптивного отзывчивого дизайна помогут CSS Grid и Flexbox.</p><h3>13.3 Обучение JavaScript</h3><p>Ну и как стать эффективным фронтенд разработчиком без знания JavaScript? Именно он отвечает за функциональность сайта и возможность с ним взаимодействовать: заполнение и отправка форм, нажатие кнопок, прослушивание событий и многое другое.</p><p>Не спешите осваивать фреймворки — сперва чистый JavaScript. Это язык со слабой типизацией, а значит операция вроде 2 + "2" вместо ошибки выдаст результат 22. Так что есть с чем разбираться и без фреймворков.</p><p>Больше полезных материалов и инструментов для фронтенд-разработчика вы найдёте в <a href="https://tproger.ru/articles/frontend-roadmap-2021/">дорожной карте по фронтенду</a>.</p><h2>14. Full Stack разработка</h2><p>Эдакий гибрид frontend- и backend-разработки. Данное направление набирает популярность. Сейчас сложно найти чистых фронтендеров или бэкендеров: для взаимодействия этим специалистам нужно знать, за что отвечают их коллеги по вебу.</p><p>Фуллстек-разработчик не будет одинаково хорош в разработке серверной и клиентской части. Но как стать чистым Full Stack разработчиком, и чем вообще занимаются эти специалисты?</p><p>Хороший пример — CRM-разработчик. В его обязанности входят:</p><ul><li>Работа с базами данных клиента: создание событий, автоматизация процессов и интеграция приложений посредством API.</li><li>Настройка аналитики в формате репортов/дашбордов.</li><li>Создание простенького, но понятного интерфейса для работы с готовым продуктом.</li></ul><p>Здесь также применимы инструменты вроде Bootstrap или Angular, но без фанатизма — важно создание рабочего функционального продукта.</p><h2>15. Какой язык программирования выбрать в 2026 году</h2><p>Всё ещё не определились с языком? Для начала взгляните на <a href="https://www.tiobe.com/tiobe-index/">рейтинг TIOBE</a>:</p><p>А теперь давайте пробежимся по самым популярным языкам программирования, затронем их сильные стороны и уточним сферы применения.</p><h3>15.1 Python</h3><p>Как уже говорилось ранее, стать Python программистом с нуля самостоятельно несложно, ведь у языка низкий порог вхождения и понятный синтаксис. Пайтон рекомендуется к изучению в вузах в качестве базового языка.</p><p>Основные сферы применения Python:</p><ul><li>Data Science</li><li>Веб-разработка</li></ul><h3>15.2 JavaScript</h3><p>О сферах применения JS говорить не стоит: язык давно стал лидером в веб-разработке, сперва захватив фронтенд, а теперь и отжимая бэкенд за счёт Node.js. Если хотите разрабатывать веб-приложения, учите JavaScript.</p><h3>15.3 Java</h3><p>Java — это кроссплатформенный язык программирования, мощный обработчик и внушительная библиотека. У Java много готовых решений и исчерпывающая документация.</p><p>Основные сферы применения Java:</p><ul><li>Веб-разработка</li><li>Android разработка</li><li>Десктопная разработка</li><li>Big Data</li></ul><h3>15.4 C++</h3><p>Быстрый, универсальный и полезный в качестве фундамента язык. Да, пусть Python в разы проще, но за сложностью C++ скрываются и преимущества. Освоив «плюсы», будет легче понять Java, C# и JavaScript, в основу которых легли принципы C++.</p><p>Главные сферы применения C++:</p><ul><li>Геймдев</li><li>Интернет вещей (IoT)</li><li>Операционные системы</li><li>Ускорение существующих приложений</li></ul><h3>15.5 С#</h3><p>C# часто сравнивают с Java, и у них действительно много общего. Код на C# удобочитаемый, а синтаксический сахар обеспечивает высокую скорость разработки.</p><p>Основные сферы применения C#:</p><ul><li>Геймдев</li><li>AR/VR</li><li>Десктопная разработка</li></ul><p>По <a href="https://tproger.ru/video/csharp-for-beginners/?autoload=1">этому видеокурсу</a> вы узнаете, как стать C# разработчиком.</p><h3>15.6 PHP</h3><p>Это бессмертная классика серверной части веб-приложений. PHP бюджетен, прост в освоении и успел обрасти внушительным комьюнити. Пусть современные сайты и пишутся то на Java, то на Node.js, существует огромная база написанных на PHP веб-приложений, которые нужно поддерживать.</p><h3>15.6 Kotlin</h3><p>Здесь только Андроид. Но, как говорилось ранее, чтобы стать Android разработчиком с нуля, стоит начать с изучения Java, а только после переходить на Kotlin.</p><h3>15.7 Swift</h3><p>Если хотите писать десктопные и мобильные приложения для Apple устройств, осваивайте Swift. Это компактный и производительный язык программирования, который постоянно совершенствуется компанией Apple.</p><h3>15.8 На что обратить внимание при выборе</h3><p>На отрасль, в которой желаете развиваться. Но чтобы понять, как стать программистом и с какими трудностями придётся столкнуться, рекомендуем начать с C или C++, после которых любой другой язык освоить куда проще.</p><p>Если же вы точно определились, с чем именно хотите работать, смело выбирайте язык, который для этого подходит. Опирайтесь на рейтинги популярности, просматривайте вакансии по желаемому направлению в вашем городе, сравнивайте уровень востребованности специалистов.</p><h2>16. Где выучиться на программиста</h2><p>Чтобы ответить на вопрос, где учиться на программиста, необходимо рассмотреть все доступные варианты.</p><h3>16.1 Самостоятельная учеба</h3><p>Обилие книг, видеоуроков и сервисов вроде Scratch позволяет освоить базис, не выходя из дома. Но как выстроить план обучения, чтобы стать программистом с нуля самостоятельно? Обратитесь к стандартным программам обучения или роадмапам. Чаще всего основная программа выглядит примерно так:</p><ol><li>Знакомство с программированием.</li><li>Разнообразие IT-направлений.</li><li>Основы выбранного языка: синтаксис, объекты и классы, функции, списки и словари, условия, циклы.</li><li>Hello World.</li><li>Модульное тестирование.</li><li>Безопасность.</li></ol><h3>16.2 ВУЗ</h3><p>Это более основательный подход, и, вопреки распространённому заблуждению, «корочка» IT-специалиста действительно ценится, особенно в крупных компаниях. Если вы серьёзно настроены на карьеру в IT и думаете, как отучиться на программиста, выбирайте вузы с сильными IT-факультетами.</p><h3>16.3 Практические курсы</h3><p>К курсам можно относиться по-разному, но если у вас нет профильного образования и вы не хотите тратить несколько лет в вузе, курсы — хороший вариант. К тому же, современные курсы покрывают практически все нужды, обеспечивая обучение основам программирования и работу с реальными проектами.</p><h3>16.4 С помощью ментора</h3><p>Мы уже разобрались, как можно стать айтишником с нуля дома, но не затронули менторство. Всё потому, что оно не всегда подразумевает обучение на дому: это может быть как онлайн-репетитор, так и индивидуальные занятия оффлайн.</p><p>Ментор не только объяснит материал, но также обратит ваше внимание на ошибки, которые вы допускаете на практике. Внимание наставника не растекается по группе людей, а сосредоточено именно на вашей работе, что даёт более прицельное обучение программированию.</p><h2>17. Классификация разработчиков</h2><p>Когда люди говорят, что программисты много зарабатывают, они чаще всего подразумевают сеньоров. Давайте разберёмся, какие уровни IT-специалистов существуют и чем разнятся.</p><h3>17.1 Стажёр</h3><p>Стажёр — это вчерашний студент, который набивает шишки на практике. Обычно это низкооплачиваемые сотрудники, которых компания нанимает специально, чтобы взрастить нужного специалиста.</p><p>Стажировка может быть как оплачиваемой, так и неоплачиваемой: всё зависит от договорённости с нанимателем. Продолжительность стажировки оговаривается индивидуально. Чаще к стажёру приставляют ментора из числа штатных специалистов.</p><h3>17.2 Junior разработчик</h3><p>Как правило, чтобы стать Джуниор программистом, достаточно освоить синтаксис языка, простые задачи решать самостоятельно, а сложные — заручившись помощью более опытного коллеги. Младший разработчик получает небольшую, но стабильную зарплату.</p><h3>17.3 Middle разработчик</h3><p>У такого программиста уже есть опыт в разработке, он самостоятельно выполняет сложные задачи, но по-прежнему нуждается в ком-то, кто направит. Чаще стек технологий Мидла ограничен необходимым базисом.</p><h3>17.4 Senior разработчик</h3><p>Сеньор, или старший разработчик, уже обладает широким кругозором, знает несколько языков программирования и технологий, способен с нуля создать архитектуру проекта с учётом его будущего развития. Senior-разработчик часто выступает в роли ментора для младших коллег.</p><p>Переход между перечисленными уровнями требует не столько времени, сколько усердия со стороны самого разработчика.</p><p><a href="https://tproger.ru/experts/junior-middle-senior-developers-differences/">Подробнее об отличиях Junior, Middle и Senior разработчиков</a>.</p><h2>18. Как стать Junior-разработчиком</h2><p>Здесь опять всё упирается в выбранную отрасль: у каждой специальности свои требования. Давайте разберёмся, что нужно знать младшему программисту на примере веба и мобильной разработки.</p><h3>18.1 Frontend Junior</h3><p>Сразу оговоримся, что алгоритмы, Git, тестирование и прочий базис мы затрагивать не будем, так как это актуально для всех направлений.</p><p>Итак, что же нужно знать младшему Frontend разработчику в 2023 году?</p><ul><li>HTML5, понимать разметку, освоить базовые теги, атрибуты и вложенные элементы.</li><li>CSS3 — позиционирование, компоновка и выравнивание элементов, их видимость, отзывчивый дизайн и подходы mobile-first.</li><li>JavaScript — базовый синтаксис, DOM, методы обработки событий.</li><li>Один из фреймворков: Vue.js, React или Angular.</li><li>Работа с REST API.</li><li>Основы систем сборки (Webpack, Vite).</li><li>Базовые знания TypeScript.</li><li>Git.</li></ul><h3>18.2 Backend Junior</h3><p>К младшему бэкенд программисту иные требования. Он должен знать:</p><ul><li>Принцип работы интернета и операционной системы.</li><li>Язык серверного программирования: PHP, Java, JavaScript (Node.js), Python (Django) или другой.</li><li>Базы данных — реляционные и NoSQL.</li><li>API — REST, JSON.</li><li>Контейнеризацию (Docker basics).</li><li>Git.</li></ul><p>Плюсом будет умение установить и настроить хотя бы один из популярных веб-серверов: Nginx, Apache, Caddy или MS IIS.</p><h3>18.3 Junior iOS</h3><p>Чтобы влиться в iOS-разработку, нужно:</p><ul><li>Знать язык программирования Swift.</li><li>Иметь практический опыт работы с IDE Xcode.</li><li>Понимать сущность <a href="https://developer.apple.com/library/archive/documentation/General/Conceptual/CocoaEncyclopedia/Introduction/Introduction.html">Cocoa Touch</a>.</li><li>Уметь работать со StoryBoard.</li><li>Знать базы данных: CoreData или Realm.</li><li>Владеть паттернами проектирования: MVP, MVVM, MVC.</li></ul><h3>18.4 Junior Android</h3><p>Как уже говорилось, начать следует с выбора языка, но за основу лучше взять именно Java, а при необходимости дополнительно изучить Kotlin. Далее:</p><ul><li>Практический опыт работы с Android Studio.</li><li>Понимание Android Architecture: паттерны MVVM, MVI, MVP.</li><li>Изучение жизненного цикла Activity.</li><li>Умение создавать гибкие интерфейсы с использованием фрагментов.</li><li>Работа с Retrofit для сетевых запросов.</li><li>Базовые знания Kotlin Coroutines.</li></ul><h2>19. Где работают программисты</h2><p>Сложно ответить на вопрос, где в целом работают программисты, потому что сегодня профессия требуется чуть ли ни в любой сфере.</p><h3>19.1 Фриланс</h3><p>Как стать айтишником на фрилансе? Для этого есть немало площадок: Upwork, <a href="https://www.weblancer.net/">Weblancer</a>, <a href="https://kwork.ru/">Kwork</a>, <a href="https://www.fl.ru/">FL</a> и другие. Но будьте готовы нарабатывать портфолио и репутацию, а для этого первое время придётся браться за задачи по демпинговым ценам.</p><p>Большой плюс — знание английского и умение строить вопросы на получение исчерпывающих ответов: вы сами себе PM, тимлид и разработчик.</p><h3>19.2 Компании аутсорсеры</h3><p>Также ласково называемые галерами. А всё потому, что от сотрудников часто требуется многозадачность за зарплату одного специалиста.</p><p>Но не всё так плохо. Во-первых, аутсорсинг — это готовые задачи, которые на фрилансе нужно выбивать, доказывая свою профпригодность. Здесь же менеджеры сами договариваются и берут нужный таск. Во-вторых, корпоративная жизнь предполагает бесплатный чай/кофе, абонементы в спортзал, тимбилдинги, корпоративы и прочие плюшки.</p><h3>19.3 Стартапы и небольшие компании</h3><p>Неплохо для начинающих программистов и опасно для опытных, которые готовы ради этого бросить более крупную «рыбу». В стартапах всегда есть риски:</p><ul><li>итоговая зарплата окажется ниже обещанной;</li><li>выплачиваться будет с задержкой;</li><li>компания в любой момент может закрыться, не выдержав конкуренции.</li></ul><p>Но это хороший опыт для стажёров, которые всё ещё думают, как стать программистом, младших разработчиков и тех, кто хочет уйти от фриланса.</p><h3>19.4 Банки и энтерпрайз</h3><p>Здесь потребуется разработка, направленная на решение проблем бизнеса, а не конечных пользователей. Именно поэтому в банки и бизнес-отрасли часто набирают только Senior-программистов, так как нужно дописывать и поддерживать готовые проекты, нередко с Legacy-кодом. Зарплаты обычно выше средних на рынке.</p><h3>19.5 Продуктовые компании</h3><p>Если аутсорсинг сосредоточен на разноплановости, ограниченных сроках и бюджете, то продуктовая компания — на эффективном управлении своими решениями. Во втором случае никто не будет требовать от вас проект на вчера и ведение сложных переписок с кучей недопониманий. К тому же, вы явно будете видеть свой вклад в продукт.</p><p>Как стать разработчиком продуктовой компании? Точно так же, как и аутсорсинговой, но будьте готовы, что требования могут быть выше, ведь компания ищет программиста непосредственно для себя, а не для левого дяди.</p><p>Где ещё можно работать программистом? Это фриланс, open source и собственные проекты.</p><h2>20. Как найти первую работу в IT</h2><p>Всё чаще поднимается вопрос поиска и найма недооценённых специалистов — без диплома или соответствующего опыта работы. Исходя из этого, <a href="https://tproger.ru/articles/junior-developer-should-know">что же всё-таки нужно знать начинающему программисту</a>?</p><p>Для начала вы должны показать, что нанять вас выгодно. В этом помогут теоретическая база, опыт в других сферах, знание английского и мотивация. Можно изобразить это так:</p><figure><img src="https://media.tproger.ru/uploads/2021/05/Dotnet_3.5.png" alt="" /></figure><p>Источник — <a href="https://dataart.team/ru/news/kak-naiti-pervuyu-rabotu-v-it-plan-deistvii-dlya-nachinayushikh/">dataart.team</a></p><h3>20.1 Где брать проекты для портфолио</h3><p>Если в поисках ответа на вопрос, где можно выучиться на программиста, вы выбрали курсы, практический опыт гарантирован: курсы для разработчиков не обходятся без написания проектов. То же касается и вузов, где присутствует обязательная практика.</p><p>Сложнее будет, если вы самоучка. Но и здесь можно что-то придумать:</p><ul><li>писать небольшие программы по туториалам;</li><li>искать задания на фрилансе и выполнять их самостоятельно;</li><li>принимать участие в разработке open source проектов.</li></ul><h3>20.2 Как составить резюме, если нет опыта</h3><ol><li>Нормально назовите резюме. В названии должны быть желаемая должность и ФИО кандидата, как здесь: «Junior Java — Пупкин Иван Иванович».</li><li>Резюме может быть в формате Doc, PDF или сайта-визитки, если вы веб-разработчик.</li><li>Добавьте адекватное фото и контакты.</li><li>Укажите места, где учились и повышали квалификацию.</li><li>Не копирайте бездумно инфу из разделов, что нужно знать, чтобы стать крутым программистом: вы должны доказать эти знания на собеседовании.</li><li>Если нет опыта работы, указывайте, сколько времени практикуетесь в том или ином языке/технологии.</li></ol><p>Последний пункт в резюме программиста может выглядеть примерно так:</p><ul><li>Java — 1 year;</li><li>PHP — 0,5 years;</li><li>JavaScript — 0,5 years.</li></ul><h3>20.3 Где искать вакансии и работу</h3><p>О фриланс-сервисах мы уже говорили, потому затронем платформы по поиску работы в офисе или в ремоут-режиме. Для России и стран СНГ лучшие сайты с вакансиями для программистов это:</p><ul><li><a href="https://hh.ru/">HeadHunter</a></li><li><a href="https://career.habr.com/info/employer">Хабр Карьера</a></li><li><a href="https://tproger.ru/jobs/">Вакансии Tproger</a></li><li><a href="https://vc.ru/job">VC.ru Job</a></li></ul><h3>20.4 Как общаться с рекрутерами</h3><p>Как вы понимаете, стать хорошим программистом в обход общения с HR невозможно. На собеседовании не стесняйтесь озвучивать свои желания и вопросы. Если на всё кивать головой, как автомобильная собачка, рекрутер решит, что вы соглашаетесь со всем подряд.</p><p>Несмотря на это, нужно вести себя в меру сдержанно, демонстрировать серьёзность и говорить о своей мотивации.</p><h2>21. Что спрашивают у Джунов на собеседовании</h2><p>Огромный пласт вопросов приходится на теорию, чуть меньше занимает практика. Перед собеседованием изучите информацию о компании — обязательно спросят, почему именно она.</p><p>Будут и логические задачи. При этом ответ не обязательно должен быть верным — важно озвучивать ход мыслей, показывать, как именно вы пришли к тому или иному решению.</p><p>Из задач встречаются алгоритмы поиска и сортировки, расчёты, работа со строками и списками, оптимизация готовых решений. Держите несколько <a href="https://tproger.ru/articles/zadachi-s-sobesedovanij-dlja-programmistov/">задач с собеседований для программистов</a> под рукой — пригодится для практики.</p><p>Другие вопросы, которые могут прозвучать на собеседовании:</p><ul><li>Принципы ООП и их понимание.</li><li>Команды Git — как сделать пуш, коммит и т. д.</li><li>Основные SQL-запросы.</li></ul><p>Всё остальное будет касаться выбранного языка.</p><h2>22. Что делать, если вам не хватает знаний до вакансии Джуниор-программиста</h2><p>Трудоустроиться после первого же интервью почти нереально. Не расстраивайтесь из-за отказов, а используйте их с пользой. Как же стать востребованным айтишником быстрее? Попросите предоставить фидбек — чаще всего HR и разработчики, проводящие интервью, указывают на слабые места кандидата. Изучите <a href="https://tproger.ru/articles/zadachi-s-sobesedovanij-dlja-programmistov/">типичные задачи с собеседований для программистов</a> — это сократит путь до оффера.</p><p>Держите <a href="https://tproger.ru/tag/for-beginners/">учебные материалы и руководства для начинающих айтишников</a>.</p><h2>Часто задаваемые вопросы</h2><h3>Сколько времени нужно, чтобы стать программистом?</h3><p>При ежедневных занятиях по 2–3 часа базовый уровень для позиции джуниора можно освоить за 6–12 месяцев. Сроки зависят от выбранного направления, интенсивности занятий и предыдущего опыта.</p><h3>Можно ли стать разработчиком без высшего образования?</h3><p>Да. Большинство компаний оценивают практические навыки и портфолио, а не диплом. Онлайн-курсы, буткемпы и самообучение по документации — полноценные альтернативы.</p><h3>Какой язык программирования выбрать новичку?</h3><p>Зависит от цели. Python — универсальный выбор для Data Science, автоматизации и бэкенда. JavaScript — для веб-разработки и фронтенда. Kotlin и Swift — для мобильной разработки.</p><h3>Нужна ли математика для программирования?</h3><p>Для большинства направлений (веб, мобильная разработка) достаточно базовой математики: логика, дискретная математика, основы алгоритмов. Продвинутая математика нужна для Data Science, Computer Vision и геймдева.</p><h2>23. Заключение</h2><p>Надеемся, этот гайд ответил на вопрос, как стать программистом, дал полезные советы и материалы, а также мотивировал на покорение новых вершин.</p><p>Остались вопросы? Задайте их в комментариях.</p><p>Читайте также по теме карьеры разработчика: <a href="https://tproger.ru/articles/chto-dolzhen-znat-backend-razrabotchik">Что должен знать бэкенд-разработчик в 2024 году</a>, <a href="https://tproger.ru/articles/kak-stat-ai-inzhenerom-v-2024-godu---powagovyj-gajd">Как стать AI-инженером</a>, <a href="https://tproger.ru/articles/11-it-trendov-2025">11 IT-трендов 2025</a>, <a href="https://tproger.ru/articles/knigi-po-programmirovaniyu">37 книг для программиста</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Гайд для «джуна». Что нужно знать начинающему разработчику Java, чтобы получить работу</title>
      <link>https://tproger.ru/articles/gajd-dlja-dzhuna-chto-nuzhno-znat-nachinajushhemu-razrabotchiku-java-chtoby-poluchit-rabotu</link>
      <comments>https://tproger.ru/articles/gajd-dlja-dzhuna-chto-nuzhno-znat-nachinajushhemu-razrabotchiku-java-chtoby-poluchit-rabotu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Джанибекова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/gajd-dlja-dzhuna-chto-nuzhno-znat-nachinajushhemu-razrabotchiku-java-chtoby-poluchit-rabotu</guid>
      <description><![CDATA[<p>Рассказываем, как выучить язык программирования Java и получить первый опыт, чтобы претендовать на позицию Junior-разработчика.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/gajd-dlja-dzhuna-chto-nuzhno-znat-nachinajushhemu-razrabotchiku-java-chtoby-poluchit-rabotu">Гайд для «джуна». Что нужно знать начинающему разработчику Java, чтобы получить работу</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 26 Sep 2022 07:43:25 GMT</pubDate>
      <content:encoded><![CDATA[<p>Очень часто даже на позицию Junior-разработчика компании предпочитают набирать специалистов, уже имеющих опыт работы. Где приобрести этот опыт, как проявить компетенции на первом рабочем месте и какие скиллы, помимо кодинга, должны присутствовать в арсенале начинающего программиста — объясняет на личном примере старший Java-разработчик компании IT_One Роман Тищенко.</p><p>Я хорошо помню свою первую задачу на первой работе: удалить из базы данных колонку, которая связана с другими таблицами. С этой задачей я разбирался довольно долго, вникая в структуру базы данных и расположение таблиц. Было немного обидно — казалось, что на новичка просто переложили всю рутину. Сегодня я понимаю логику моих наставников. Когда ты получаешь какую-то общую задачу — поработать с базами данных, поменять текст, исправить опечатки и т. д. — то начинаешь понемногу разбираться в проекте, понимать, из чего он состоит. На первых порах это самое главное.</p><p>В дальнейшем у меня были разные проекты на Java: один длился два с половиной года, некоторые другие намного меньше. Оказалось, что на качество твоей работы влияет множество факторов: и твои собственные hard и soft skills, и влияние окружающих людей, с которыми ты работаешь в команде. Рассмотрим эти факторы подробнее.</p><h2>Почему Java?</h2><p>В старших классах, готовясь к олимпиаде по программированию Университета Иннополис, я наткнулся на образовательную площадку JavaRush, и она мне очень понравилась. Правда, это не избавило меня от необходимости знакомиться с другими языками вроде Pascal — но это был мощный триггер для углубленного изучения именно Java.</p><p>Наверное, не ошибусь, если порекомендую Java как универсальный язык программирования, удобный для изучения и популярный у работодателей. В доказательство приведу данные совсем свежего исследования, проведенного аналитиками платформы All Cups от VK, Фондом «Сколково» и IT_One в рамках чемпионата IT_One Cup. Java. По результатам опроса более чем 1,5 тысяч разработчиков — Java был назван наиболее востребованным языком программирования (так отметили 33% респондентов). В топ-3 также вошли Python (21%) и С++ (16%). 39% опрошенных уверены, что Java всегда будет востребован, а каждый четвертый разработчик отметил, что этот язык развивается активнее остальных.</p><h2>Код</h2><p>Долго говорить о коде мы не будем: либо вы любите Java и хотите узнать о нем больше, либо зачем вы здесь? Остановимся на том, как лучше изучать основы программирования и практиковаться. Чаще всего начинающие программисты используют для этих целей интернет-ресурсы: обучающие вроде JavaRush или профессиональные вроде Хабра, где часто публикуют материалы, полезные как раз для новичков.</p><p>Но и традиционное обучение по книгам не менее эффективно. Для понимания фундаментальных основ языка (Java Core) можно взять, например, пособия серии Head First — «Паттерны проектирования», «Изучаем Java» и другие. В них материал подается очень доходчиво, приводятся живые примеры и ставятся практические задачи для закрепления темы.</p><p>После азов стоит переходить уже к более частным вещам — например, прочитать книгу «Spring в действии» Крейга Уоллса, новое издание которой вышло в 2022 году. Правда, монография посвящена Spring 3, а актуальная версия фреймворка в Java — Spring 5. Поэтому дополнительно вам нужно будет ознакомиться с официальной документацией Spring, где подробно описана его функциональность, приведены гайды для Spring-проектов на русском и на английском языках, а также кейсы.</p><p>Но самое эффективное обучение — это, конечно, реальная практика. Для старшеклассников и студентов существуют летние школы программирования и другие виды курсов, после успешного окончания которых вы уже можете претендовать на стажировку.</p><h2>Базы данных</h2><p>Умение использовать базы данных для программиста почти так же важно, как и грамотный кодинг. На первом этапе вы просто подключаете базу данных и действуете по шаблону. Однако стоит сразу иметь в виду, что баз данных и их реализаций очень много: колоночные, реляционные, нереляционные и т. д. В одних проектах лучше применять одни, в других — другие. Для выбора БД и СУБД можно руководствоваться их основными характеристиками, выраженными в акрониме ACID (Atomicity, Consistency, Isolation, Durability). Мы смотрим, какие критерии атомарности, соласованности, изолированности, стойкости нам нужны, — и в зависимости от этого подбираем наиболее подходящую базу.</p><p>Что касается наиболее популярных СУБД — на моей практике в большинстве проектов встречались либо PostgreSQL, либо mongoDB. Скорее всего, когда вы придете к своему первому работодателю, то тоже столкнетесь с одной из них. Подготовьтесь к этому заранее.</p><h2>Бренчирование и контроль версий</h2><p>Когда ты «сам себе разработчик», у тебя одна ветка кода, ты заливаешь ее в master, и не испытываешь никаких проблем. Но когда ты приходишь в команду, то сталкиваешься с десятками веток, тысячами коммитов. Они нужны для того, чтобы разработчики не мешали друг другу и могли правильно позиционировать свой код. Чтобы такая структура не выглядела для вас как хаос, с самого начала лучше узнать у лида или старшего наставника, какая у команды стратегия бренчирования (стратегия построения веток): GitFlow, GitHub Flow, GitLab Flow, Trunk-based Development или что-то еще. Облегчает работу с версиями кода специальный программный инструмент — система контроля версий (Version Control System, VCS). В данный момент в этом сегменте ПО вне конкуренции Git, и вы уже сейчас можете смело начинать его изучать.</p><p>В большой корпоративной разработке крайне важно, какую платформу (хостинг) контроля версий использует компания. Среди разработчиков наиболее популярен GitHub, где можно найти огромное количество источников данных. Но в рамках корпоративного проекта, скорее всего, вы будете пользоваться Bitbucket или GitLab. Bitbucket напминает GitHub по функциональности, но имеет и свои преимущества: например, приватные репозитории, которые можно создавать бесплатно в большом количестве. У GitLab так же есть уникальный функционал, связанный с CI/CD-пайплайнами.</p><h2>Методология CI/CD</h2><p>CI/CD, или непрерывная интеграция и развертывание — это методология DevOps, которую необходимо знать, если в компании практикуется быстрая разработка и вывод продукта конечному пользователю. Она позволяет автоматизировать процессы тестирования и доставки новых модулей в проект. Начинающему разработчику стоит иметь представление об основных этапах CI/CD: Plan, Code, Build, Test и так далее, а также разбираться в основных инструментах, которые его поддерживают, технологиях контейнеризации (прежде всего Docker) и оркестрации.</p><h2>Soft Skills: кирпичики для карьерного роста</h2><p>По моему опыту, выработанные «гибкие навыки» программиста действительно помогают при трудоустройстве и продвижении по карьерной лестнице. Ведь если на одну и ту же должность претендуют два кандидата с примерно одинаковыми компетенциями, работодатель скорее выберет того, кто более общителен, дисциплинирован, лучше умеет брать на себя ответственность, хорошо ладит с другими людьми, самостоятельно может сгенерировать уникальное, не шаблонное решение.</p><p>Более того: именно прокаченные soft skills, а не hard skills, на мой взгляд, больше всего отличают «сеньора» от «джуна». Программист высокого уровня может брать на себя большую ответственность, умеет распределять задачи среди участников команды, развивать их навыки, а также расставлять приоритеты для собственного развития. Креативность, умение адаптироваться к новым условиям (гибкость), дисциплинированность, самостоятельность — те умения, которые вам очень понадобятся. Универсального совета по их приобретению нет — некоторые скиллы приходят с опытом, некоторые можно наработать самому. Главное — больше общайтесь и относитесь к своей профессии серьезно.</p><h2>В добрый путь</h2><p>Итак, какие основные технологии нужно знать, чтобы претендовать на место в команде Java разработчиков? Помимо кода, необходимо понимание работы с базами данных, Spring и Git, умение красиво «обернуть» свой код (здесь Docker вам в помощь). Знание Kafka — опционально, потому что если вы изучите базы данных и будете понимать, как они работают, то переход на конкретный брокер типа Kafka не составит труда.</p><p>Пожалуй, перечисленное выше — минимальный набор hard skills, с которым уже можно ходить по собеседованиям. Но по сути — чем больше технологий вы освоили, хотя бы на базовом уровне, тем легче вам будет понимать общую концепцию любого проекта разработки, встраиваться в этот процесс, находить реализации, которые лучше всего подходят для конкретного продукта.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как освоить фронтенд-разработку в 2022 году: дорожная карта</title>
      <link>https://tproger.ru/articles/frontend-roadmap-2021</link>
      <comments>https://tproger.ru/articles/frontend-roadmap-2021?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/frontend-roadmap-2021</guid>
      <description><![CDATA[<p>Пошаговая дорожная карта для начинающего фронтенд-разработчика: от HTML, CSS и JavaScript до React, TypeScript и GraphQL. Ссылки на материалы и советы от Senior-разработчика.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/frontend-roadmap-2021">Как освоить фронтенд-разработку в 2022 году: дорожная карта</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 23 Sep 2022 10:00:52 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>Главное из статьи:</b><br />- Фронтенд строится на трёх основах: HTML (каркас), CSS (стилизация) и JavaScript (логика и интерактивность)<br />- Из фреймворков обязательно освоить хотя бы один: React, Vue.js или Angular<br />- TypeScript стал стандартом индустрии — без него сложно устроиться на работу<br />- Важно знать инструменты: Git, npm/yarn, ESLint, Prettier, webpack/ESBuild<br />- Современный фронтенд требует понимания SSR, PWA, CI/CD и основ веб-безопасности<br />- GraphQL заменяет REST как основной способ работы с API на фронтенде</p><p>Как стать фронтенд-разработчиком и что изучать в 2022 году? В этом поможет разобраться дорожная карта по фронтенду:</p><figure><img src="https://media.tproger.ru/uploads/2020/11/Frontend-1.png" alt="Дорожная карта фронтенд-разработчика: технологии и порядок изучения" /></figure><p>Также мы попросили Senior Frontend-разработчика Евгения Козака поделиться опытом в области фронтенд-программирования в 2022 году, и он открыл немало интересных новинок, которые мы включили в обновлённый вариант нашей статьи.</p><ol><li><a href="https://tproger.ru/#part1">HTML</a></li><li><a href="https://tproger.ru/#part2">CSS</a></li><li><a href="https://tproger.ru/#part3">JavaScript</a></li><li><a href="https://tproger.ru/#part4">Веб-безопасность</a></li><li><a href="https://tproger.ru/#part5">Инструменты</a></li><li><a href="https://tproger.ru/#part6">Фреймворки</a></li><li><a href="https://tproger.ru/#part7">GraphQL</a></li><li><a href="https://tproger.ru/#part8">Тренды 2022 года и 2023 года</a></li><li><a href="https://tproger.ru/#part9">Заключение</a></li></ol><p>Как и прежде, фронтенд-разработка стоит на трёх китах — HTML, CSS и JavaScript, поэтому с них и начнём разбор.</p><h2>HTML</h2><p>Без понимания разметки дальше не продвинуться, ведь это каркас сайта. Вы должны изучить базовые теги и атрибуты, понимать анатомию HTML-разметки, а также быть в курсе доступности и основ SEO. Не забывайте и об HTML5 — пятой версии, которая встречается в требованиях каждой первой вакансии. Развитие HTML нельзя назвать быстрым, поэтому у вас будет большое преимущество, если вы уже знаете язык разметки.</p><p>Материалы для изучения HTML:</p><ul><li><a href="https://html5book.ru/html-html5/">Основы HTML</a></li><li><a href="http://htmlbook.ru/diveintohtml5">Книга Марка Пилгрима "Погружение в HTML5"</a></li><li><a href="https://tproger.ru/translations/script-execution-order/">Порядок выполнения скриптов в HTML</a></li><li><a href="https://tproger.ru/video/html5-for-beginners/?autoplay=1">Видеокурс "HTML5 для начинающих"</a></li></ul><h2>CSS</h2><p>Также важно научиться стилизовать элементы с помощью CSS и делать это правильно, например повторно используя стили для одинаковых элементов. Сперва освойте блочную модель и позиционирование содержимого — компоновку, выравнивание и центрирование элементов, а также их видимость. Почитайте об адаптивном и отзывчивом дизайне. Далее переходите к медиа-запросам, чтобы учитывать технические параметры различных устройств. Неплохим бонусом станет навык работы с CSS Grid и Flexbox. После углубляйте знания, изучая архитектуру и препроцессоры.</p><p>Что касается фреймворков, раньше был очень популярен Bootstrap, но сейчас многие отходят от него и используют TailwindCss. Получается что ты не пишешь CSS, а пишешь просто классы. Он очень удобен для работы в React. Также Bulma и MUI.</p><p>В общем кроме этого CSS ещё надо выучить всё, что вышло в 2022 году — там есть некоторые маленькие изменения. И нужно погрузиться в CSS фреймфорки, потому что в реальности в CSS уже мало кто пишет, даже в SASS уже не пишут в CSS.</p><p>Потому что во фронтенде это не будет например, обычный CSS, это уже будет SPA, и автоматом в топе идёт React, потом идёт Vue.js, AngularJS. И для всех них есть Tailwindcss, MUI и Bootstrap.</p><p>С CSS ситуация такая что, к сожалению, вряд ли уже придётся на нём писать, но работать с этими фреймворками (Tailwindcss/TailwindUI, Bulma, MUI) будет нужно. Их довольно легко освоить.</p><p>Материалы для изучения CSS:</p><ul><li><a href="https://html5book.ru/css-css3/">Основы CSS</a></li><li><a href="https://tproger.ru/translations/functional-css-usage/">Функциональный CSS: упрощаем работу со стилями</a></li><li><a href="https://tproger.ru/translations/css-flexbox-grid/">О CSS Grid и Flexbox простыми словами</a></li><li><a href="http://cssgridgarden.com/#ru">Игра-практика Grid Garden</a> и <a href="https://flukeout.github.io/">CSS Diner</a></li><li><a href="https://tproger.ru/translations/css-rules/">18 советов по CSS, которые сделают жизнь разработчика проще</a></li></ul><p>Чтобы получить первые практические навыки в работе с HTML и CSS, следует сверстать несколько страниц: это можно сделать как по шаблонам из приведённых статей, так и написать полностью самостоятельный проект.</p><h2>JavaScript</h2><p>Ну и как же стать фронтенд-разработчиком, не зная в 2022 году JavaScript? На "плечи" этого языка ложится функциональность сайта: действия по нажатию кнопок, заполнение форм, прослушивание событий, запуск триггеров и многое другое. Не стоит пренебрегать основами и сразу переходить к изучению "модного" фреймворка — изучайте язык постепенно.</p><p>Так, вам потребуется освоить синтаксис и базовые конструкции. Обратите внимание, что JavaScript — язык со слабой типизацией, то есть выполняет неявное преобразование типов автоматически. Это значит, что вы можете написать что-то вроде 10+"1" и не получить никакой ошибки. Напротив, результат будет строкой — 101. Вы можете почитать об этом подробнее в большом исследовании под названием <a href="https://github.com/denysdovhan/wtfjs">WTF JavaScript</a>.</p><p>Ну а мы вернёмся к дорожной карте по фронтенд-разработке. Важно освоить DOM, интерфейс для работы с HTTP-запросами и ответами Fetch API, технологию AJAX и XMLHttpRequest, ECMAScript 6+, модульный подход и веб-компоненты. Также пробегитесь по перечисленным концепциям вроде строгого режима и теневого DOM.</p><p>У JavaScript есть ESversion но в каждый год появляется всё больше нового.</p><p>Вот что актуально и важно на момент 2022 года:</p><ul><li>ES6: стрелочные функции, block scoped(const, let), Set, spread, rest, default params, for of, for in, modules, Symbol, Class, promises, includes.</li><li>ES8: padEnd, padStart, async/await. Для работы с объектами очень помогают: object.entries, object.values, object.keys.</li><li>ES9: RegEx improvements, rest, spread.</li><li>ES10: array.flat(), array.flatMap(), trimEnd(), trimStart() упрощают работу с array.</li><li>ES2020: matchAll, BigInt, Dynamic Import, Promise.all, Promise.any, Promise — finally(spinner), globalThis. Optional chaining (bill?.bank?.age).</li><li>ES2022: private variable in class; top level await: async without await in; array.at(index); Object.hasOwn(); <a href="https://github.com/tc39/proposal-regexp-match-indices">RegExp Match Indices</a>.</li></ul><p>Материалы для изучения JavaScript:</p><ul><li><a href="https://tproger.ru/articles/sem-glavnyh-knig-dlja-javascript-razrabotchika-ot-majersa-do-haverbeka/">7 главных книг для Javascript-разработчика</a></li><li><a href="https://html5book.ru/javascript-jquery/">Основы JavaScript + jQuery</a></li><li><a href="https://learn.javascript.ru/">Современный учебник JavaScript</a></li><li><a href="https://tproger.ru/books/web-programming-books-for-beginners/">Подборка книг для начинающего веб-разработчика</a></li><li><a href="https://tproger.ru/articles/top-5-js-libs-for-business-apps/">Топ-5 JavaScript-библиотек для бизнес приложений в 2020-2021</a></li></ul><h2>Веб-безопасность</h2><p>Знаете, что такое OWASP? Это открытый проект, собирающий статистику и направленный на обеспечение безопасности веб-приложений. Чтобы стать фронтенд-разработчиком в 2022 году, нужно уделять особое внимание безопасности. Хоть способов обезопасить себя и становится больше, но злоумышленники тоже не стоят на месте.</p><p>Итак, вам нужно понимать преимущества HTTPS перед HTTP, принцип работы CORS, политику защиты контента (CSP), а также регулярно следить за обновлениями на сайте <a href="https://owasp.org/">OWASP</a>.</p><p>Почитайте наши статьи о том, <a href="https://tproger.ru/translations/webapp-security/">как защитить веб-приложение</a> и какие <a href="https://tproger.ru/articles/best-kali-linux-tools/">инструменты для пентеста</a> используют специалисты в сфере ИБ.</p><h2>Инструменты</h2><p>Здесь всё просто:</p><ul><li>Освойте работу с системой контроля версий Git и выберите удобный сервис для хостинга проектов.</li><li>Пользуйтесь линтерами и форматерами для улучшения качества кода.</li><li>Для сборки используйте таскраннеры и бандлеры.</li><li>Возьмите в привычку работать с менеджерами пакетов npm и yarn.</li></ul><p>Подробнее о таскреннерах и бандлерах можно узнать из данного видео:</p><h2>Фреймворки</h2><p>3 основных фреймворка в работе с фронтендом: <a href="https://reactjs.org/">React</a>, <a href="https://angular.io/">Angular</a>, <a href="https://vuejs.org/">Vue.js</a>.</p><p>Хорошее сравнение можно найти в <a href="https://mkdev.me/posts/sravnenie-javascript-freymvorkov-vue-js-react-i-angular-2019">этой статье</a>. Для тех, кто желает освоить React с нуля, предлагаем понятную <a href="https://tproger.ru/articles/kak-stat-react-razrabotchikom-v-2021-dorozhnaja-karta/">дорожную карту по React-разработке</a>.</p><p>К 2022 году React тоже изменился:</p><ol><li>Появился <a href="https://reactjs.org/blog/2022/03/29/react-v18.html">React 18</a>: Server Side Rendering, Concurrent mode, useId.</li><li><a href="https://testing-library.com/docs/react-testing-library/intro/">React Testing Library</a>.</li><li>Стал популярен <a href="https://reactnative.dev/">React Native</a>.</li><li><a href="https://tproger.ru/articles/headless-cms-prostoe-i-bystroe-reshenie-kogda-ne-hochetsja-silno-lezt-v-kod/">Headless CMS</a> — это cms для того чтобы редактировать контент. Админка как у WordPress, только для React. Чтобы использовать бэкенд, например. Тоже стало популярно в последние годы.</li><li>Server Side Rendering — о нём тоже важно знать.</li><li>Есть <a href="https://reactjs.org/docs/hooks-intro.html">React Hooks</a>, которые нужно знать.</li></ol><p>Стоит также упомянуть о <a href="https://storybook.js.org/">Storybook.js</a>, <a href="https://jestjs.io/ru/">Jest</a> и <a href="https://www.cypress.io/">Cypress</a>.</p><p>Отдельно рекомендуем <a href="https://soundcloud.com/csssr">подкасты по новинкам в мире веб-разработки от CSSSR</a>, так как ребята часто затрагивают веб-фреймворки.</p><h2>GraphQL</h2><p>Это основной язык API-запросов фронтенд-разработчиков. Платформа Apollo в свою очередь представляет собой реализацию <a href="https://graphql.org/">GraphQL</a> для транспортировки данных из облака к UI веб-приложения, а Relay Modern — это фреймворк, использующий GraphQL и предназначенный для работы с data-driven приложениями.</p><p>Держите <a href="https://tproger.ru/translations/graphql-beginners-guide/">руководство по GraphQL для начинающих</a>.</p><h2>Тренды 2022 года и 2023 года</h2><p>В JavaScript это: S.O.L.I.D, KISS, YAGNI.</p><p>Также любой фронтендщик должен знать что такое и как работают: CI/CD, Kubernetes vs Docker, Azure Cloud Service, GitHub Actions.</p><p><b>Также нужно отметить такие моменты:</b></p><ul><li>Программист должен знать <a href="https://developer.mozilla.org/ru/docs/Web/Accessibility">Accessibility (a11y)</a>. Это делает возможным работу с сайтом для людей с ограниченными возможностями.</li><li><a href="https://developer.mozilla.org/ru/docs/Web/Progressive_web_apps">Progress Web Application</a> — этому тренду уже 2 года. Любое SPA-приложение, JavaScript-приложение должно быть PWA. Там есть гайдлайн, который надо знать.</li><li>Также для любого SPA-приложения нужно знать:  State Management — <a href="https://redux.js.org/">Redux</a>.</li><li>А также <a href="https://vuejs.org/guide/scaling-up/ssr.html">Server Side Rendering</a>.</li><li>Важно знать, что такое <a href="https://tproger.ru/translations/web-components/">Web Components</a>, так как уже как 2 года они популярны.</li><li>Важно знать что такое в JavaScript <a href="https://jamstack.wtf/">JAMStack</a>.</li><li>Программист должен знать как работают Serverless model: Amazon AWS Lambda, Azure Functions, RxJs, Web components, JAMstack, Atomic design, Component-driven development.</li><li>Должны знать <a href="https://esbuild.github.io/">ESBuild</a>. Это как webpack, но работают быстрее.</li><li>И самое крупное изменение к 2022 году это <a href="https://ru.wikipedia.org/wiki/Web_3.0">Web 3.0</a>. Это работа с metamask.</li></ul><h3>TypeScript</h3><p>TypeScript очень популярен. Это другой тренд и его надо изучать. Без этих знаний уже вряд ли будут готовы принять на работу.</p><p>Наглядно о принципах DRY, KISS, YAGNI, SOLID:</p><h2>Заключение</h2><p>Итак, чтобы стать фронтенд-разработчиком в 2022 году, следует хорошо владеть HTML, CSS и JavaScript, уметь обеспечивать безопасность веб-приложений, владеть основными инструментами, такими как Git, <a href="https://prettier.io/">Prettier</a>, <a href="https://eslint.org/">ESLint</a>, <a href="https://docs.npmjs.com/cli/v8/using-npm/scripts">npm scripts</a> и <a href="https://webpack.js.org/">webpack</a>, изучить хотя бы один из основных JavaScript-фреймворков и получить навык работы с GraphQL. Но ни в коем случае не останавливайтесь на этом. Например, всё чаще компании нанимают именно фулстек-девелоперов, поэтому рекомендуем также ознакомиться с <a href="https://tproger.ru/articles/backend-roadmap-2021/">дорожной картой по бэкенд-разработке</a> и <a href="https://tproger.ru/articles/javascript-s-nulja-dorozhnaja-karta/">роадмапом по JavaScript</a>.</p><h2>Часто задаваемые вопросы</h2><h3>Сколько времени нужно, чтобы стать фронтенд-разработчиком?</h3><p>При регулярных занятиях (3-4 часа в день) освоить базу HTML, CSS и JavaScript можно за 4-6 месяцев. Ещё 3-4 месяца уйдёт на изучение фреймворка и инструментов. Итого до уровня Junior — около 8-12 месяцев целенаправленного обучения.</p><h3>Какой JavaScript-фреймворк выбрать первым?</h3><p>React остаётся самым востребованным на рынке труда. Vue.js проще в изучении и имеет отличную документацию на русском языке. Angular лучше подходит для крупных корпоративных проектов. Для первого изучения рекомендуется React или Vue.js.</p><h3>Нужно ли учить TypeScript начинающему фронтендеру?</h3><p>Да, TypeScript стал фактическим стандартом во фронтенд-разработке. Большинство вакансий требуют знание TypeScript. Рекомендуется сначала хорошо освоить JavaScript, а затем перейти к TypeScript — переход будет естественным и несложным.</p>]]></content:encoded>
    </item>
    <item>
      <title>Разработка на C++ с нуля в 2022 году: дорожная карта</title>
      <link>https://tproger.ru/articles/razrabotka-na-c-s-nulja-v-2022-godu-dorozhnaja-karta</link>
      <comments>https://tproger.ru/articles/razrabotka-na-c-s-nulja-v-2022-godu-dorozhnaja-karta?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/razrabotka-na-c-s-nulja-v-2022-godu-dorozhnaja-karta</guid>
      <description><![CDATA[<p>Чтобы обучение программированию на языке C++ с нуля было простым и понятным, воспользуйтесь нашей дорожной картой.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/razrabotka-na-c-s-nulja-v-2022-godu-dorozhnaja-karta">Разработка на C++ с нуля в 2022 году: дорожная карта</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 01 Jul 2022 13:00:14 GMT</pubDate>
      <content:encoded><![CDATA[<p>Изучить программирование на C++ с нуля не так-то просто, и мы решили составить понятную дорожную карту, которая структурирует процесс обучения:</p><figure><img src="https://media.tproger.ru/uploads/2022/07/C-2.png" alt="" /></figure><p>Роадмап по изучению C++ включил в себя следующие блоки:</p><ol><li><a href="https://tproger.ru/#part1">Синтаксис</a></li><li><a href="https://tproger.ru/#part2">Объектно-ориентированное программирование</a></li><li><a href="https://tproger.ru/#part3">Операционные системы</a></li><li><a href="https://tproger.ru/#part4">Исключения и многопоточность</a></li><li><a href="https://tproger.ru/#part5">Фреймворки и библиотеки</a></li><li><a href="https://tproger.ru/#part6">IDE</a></li><li><a href="https://tproger.ru/#part7">Выводы</a></li></ol><p>Разберём каждый из них более подробно.</p><h2>Синтаксис</h2><p>Начнём с того, что язык С++ компилируемый, то есть трансляция кода с языка высокого уровня на инструкции машинного кода происходит не в момент выполнения, а в процессе создания исполняемого файла.</p><p>Объявление переменных в C++ стандартное, а именно:</p><p>Тип данных может быть любым, будь то int, bool или char, а переменные должны удовлетворять правилам именования переменных в C/C++. Имя переменной не должно:</p><ul><li>начинаться с цифры;</li><li>включать символы, например  /, :, *, ?, ", &lt;, &gt;, |.</li></ul><p>Всё, что начинается с символа #, в C++ называется директивами препроцессора. Каждая такая директива прописывается в отдельной строке.</p><p>Допустим, #include &lt;iostream&gt; подключает возможность работы с вводом с клавиатуры и выводом на экран. #include в C++ аналогична import в Java или Python.</p><p>При этом в C++, в отличие от многих других языков программирования, по умолчанию доступно мало всего. За исключением совсем базового набора, почти всё требует #include.</p><p>Пример использования:</p><p>using namespace std подключает пространство имён std. Без этой строки многие стандартные функции, типы, переменные и многое другое надо было бы писать с префиксом std::. Так, в примере выше мы бы писали std::cin вместо cin.</p><p>Почитайте также об <a href="https://tproger.ru/articles/cpp-pointers/">указателях в C++</a>. Из статьи вы узнаете, зачем они нужны, когда использовать и чем отличаются от обращения к объекту напрямую.</p><p>А вот ссылка в языке C++ — это тип переменной , который работает как псевдоним другого объекта или значения. Всего в языке поддерживается три типа ссылок:</p><ol><li>Ссылки на неконстантные значения.</li><li>Ссылки на константные значения.</li><li><a href="https://tproger.ru/articles/move-semantics-and-rvalue/">rvalue-ссылки</a>.</li></ol><h2>Объектно-ориентированное программирование</h2><p>Программирование на языке C++ подчиняется принципам ООП, и если вы о них не знаете, рекомендуем изучить тему с нуля и воспользоваться нашей <a href="https://tproger.ru/translations/oop-principles-cheatsheet/">шпаргалкой</a>.</p><p>Об ООП на примере плюсов хорошо рассказали в этом видео:</p><p>Всё, как и в других ООП-языках. Но что ещё важно знать?</p><ul><li><b>Конструктор </b>— специальный метод класса для инициализации элементов класса некоторыми начальными значениями.</li><li><b>Деструктор</b> — специальный метод класса для уничтожения элементов класса. Чаще всего используют, когдапри создании объекта класса,  в конструкторе был динамически выделен участок памяти, и эту память нужно очистить.</li></ul><p>Перед тем, как продолжить углубление в разработку на C++ с нуля, изучите <a href="https://docs.microsoft.com/ru-ru/cpp/cpp/operator-overloading">перегрузку операторов</a> и <a href="https://docs.microsoft.com/ru-ru/cpp/cpp/function-overloading">перегрузку функций</a>.</p><h2>Операционные системы</h2><p>К бинарным единицам в C++ относятся:</p><ol><li><b>Исполняемый файл</b>, содержащий программу, которая может быть выполнена компьютером.</li><li><b>Статическая библиотека</b> — состоит из подпрограмм, которые компилируются и линкуются с программой.</li><li><b>Динамическая библиотека </b>— состоит из подпрограмм, которые подгружаются в программу во время её выполнения.</li></ol><p>В плюсах предусмотрено статическое, автоматическое и динамическое выделение памяти. На последнем остановимся чуть подробнее.</p><p>Когда вы динамически выделяете память, то как бы просите ОС зарезервировать часть этой памяти для использования вашей программой. Если операционная система может выполнить этот запрос, то возвращается адрес этой памяти обратно в вашу программу. С этого момента и в дальнейшем ваша программа сможет использовать данную память. Когда память уже не нужна, возвращаете её обратно ОС для распределения между другими запросами.</p><p>В отличие от статического или автоматического выделения памяти, программа самостоятельно отвечает за запрос и обратный возврат динамически выделенной памяти.</p><p>Советуем изучить <a href="https://tproger.ru/translations/programming-concepts-stack-and-heap/">принципы работы со стеком и кучей</a>. Также обратите внимание на <a href="https://docs.microsoft.com/ru-ru/cpp/security/security-best-practices-for-cpp?view=msvc-170">рекомендации по безопасности для C++</a>.</p><h2>Исключения и многопоточность</h2><p>В языке C++ оператор throw сигнализирует об исключении или ошибке. Для использования этого оператора пишется ключевое слово throw и значение любого типа данных, которое нужно задействовать. Как правило, этим значением является код ошибки, описание проблемы или настраиваемый класс-исключение:</p><p>Поиск исключений реализовывается через стандартную для большинства языков программирования конструкцию try/catch. Блок try действует как наблюдатель в поисках исключений, которые были выброшены каким-либо из операторов в этом же блоке. catch, в свою очередь, используется для определения блока код, который обрабатывает исключения определённого типа данных.</p><p>Пример:</p><p>О многопоточности и соответствующих языков стандартах доступнее всего написано в <a href="https://docs.microsoft.com/ru-ru/cpp/parallel/multithreading-and-locales">документации</a>.</p><h2>Фреймворки и библиотеки</h2><p>Нет, мы не случайно перепрыгнули пункт с основными навыками, который представлен в дорожной карте по программированию на C++ с нуля. Всё, что касается систем контроля версий, оформления кода, логирования и работы с cmd, — это всё общие принципы, которые необходимо освоить для работы с любым языком программирования.</p><p>Что же касается фреймворков и библиотек, это куда более специфическая тема. Затронем наиболее интересные.</p><h3>Boost</h3><p>Это набор библиотек, которые расширяют функциональность C++. Предоставляет удобный кроссплатформенный интерфейс. <a href="https://www.boost.org/">Boost</a> по-прежнему очень популярен, хотя многое и было интегрировано в новые стандарты C++. Так, в C++20 даже есть часовые пояса, для которых ранее активно использовался Boost.</p><h3>OpenCV, ITK, VTK</h3><p>Классическое решение для реализации компьютерного зрения. Даже с использованием нейронных сетей требуется много пред- и постобработки. <a href="https://opencv.org/">OpenCV</a>, <a href="https://itk.org/">ITK</a> и <a href="https://vtk.org/">VTK</a> являются наиболее удобными библиотеками под эти задачи.</p><h3>Tensorflow и PyTorch</h3><p>Оба инструмента являются фреймворками для оценки нейронных сетей. Их также можно использовать для обучения нейронных сетей, но это редкое явление для C++. Гораздо проще обучать нейронную сеть на языке более высокого уровня (почти это Python). А вот когда у вас уже есть обученная нейронная сеть, вы можете написать оценку качества обученности модели на C++.</p><p><a href="https://www.tensorflow.org/">Tensorflow</a> и <a href="https://pytorch.org/">PyTorch</a> — мощные инструменты со своими преимуществами и недостатками. PyTorch становится популярным в научно-исследовательских кругах, тогда как Tensorflow — единственный выбор для работы со многими TPU (Tensor Processing Units, такими как Google Coral и Jetson Nano).</p><h3>pybind/pybind11</h3><p>если вам нужно привязать объекты C++ к Python, <a href="https://github.com/pybind/pybind11">это</a> самый популярный и простой способ. Доступный <a href="https://smyt.ru/blog/sozdaem-s-python-rasshireniya-s-pomshyu-pybind11/">пример использования pybind11</a> на русском языке.</p><h3>Protobuf</h3><p>Набирает популярность. <a href="https://developers.google.com/protocol-buffers/">Protobuf</a> — это механизм сериализации, основанный на двоичном коде, поэтому он быстрый и компактный. Был предложен Google как эффективная бинарная альтернатива текстовому формату XML.</p><h3>MKL и OpenBLAS</h3><p>Когда нужно реализовать математические алгоритмы с интенсивными вычислениями, которые должны работать с большим объемом данных, одна из этих библиотек просто необходима. <a href="https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl.html">MKL</a> является стандартом для среды Windows, а <a href="https://www.openblas.net/">OpenBLAS</a> более популярна, когда требуется лицензия open source.</p><p>Посмотрите<a href="https://arxiv.org/vc/arxiv/papers/1005/1005.2581v1.pdf"> сравнение CUDA и OpenCL</a>, а также держите подробный <a href="https://tproger.ru/digest/cpp-best-gui/">обзор графических библиотек C++</a>.</p><h2>IDE</h2><p>Для всего, что связано с Windows, Visual Studio по-прежнему остаётся лучшей средой разработки, наиболее популярной и даже не сравнимой с любой другой IDE при программировании на C++ для Windows.</p><p>Для остального есть Visual Studio Code: он подходит для любого языка программирования, включая C++, потому что расширяемый, легковесный и удобный в использовании.</p><p>Самое плохое в Visual Studio и некоторых других IDE в том, что они тяжёлые и порой медленные. А Visual Studio Code работает быстро и делает программирование действительно увлекательным. Хоть, надо признать, в этой среде не хватает некоторых необходимых функций для разработки на C++ под Windows.</p><h2>Выводы</h2><p>Данный материал не несёт значительной обучающей нагрузки, а лишь демонстрирует путь развития C++ разработчика, параллельно объясняя некоторые азы. Используйте эту дорожную карту, чтобы в краткие сроки обучиться программированию на C++ с нуля и успешно перейти к практическому применению полученных знаний.</p>]]></content:encoded>
    </item>
    <item>
      <title>Разработка на JavaScript с нуля в 2022 году: дорожная карта</title>
      <link>https://tproger.ru/articles/javascript-s-nulja-dorozhnaja-karta</link>
      <comments>https://tproger.ru/articles/javascript-s-nulja-dorozhnaja-karta?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/javascript-s-nulja-dorozhnaja-karta</guid>
      <description><![CDATA[<p>Чтобы обучение программированию на JavaScript с нуля было простым и понятным, воспользуйтесь нашей дорожной картой.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/javascript-s-nulja-dorozhnaja-karta">Разработка на JavaScript с нуля в 2022 году: дорожная карта</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 26 May 2022 12:28:24 GMT</pubDate>
      <content:encoded><![CDATA[<p>Чтобы сделать обучение программированию на JavaScript с нуля простым и понятным, составили для вас дорожную карту:</p><figure><img src="https://media.tproger.ru/uploads/2022/05/JavaScript.png" alt="" /></figure><p>Роадмап по изучению JavaScript разделён на следующие блоки:</p><ol><li><a href="https://tproger.ru/#part1">Основы</a></li><li><a href="https://tproger.ru/#part2">Продвинутые концепции</a></li><li><a href="https://tproger.ru/#part3">Web API</a></li><li><a href="https://tproger.ru/#part4">Инструменты</a></li><li><a href="https://tproger.ru/#part5">Выводы</a></li></ol><p>Разберём каждый из блоков более подробно.</p><h2>Основы JavaScript</h2><p>Как и любой язык программирования, JavaScript начинается с базовых знаний, таких как понимание переменных, операторов, типов данных, функций, циклов и т. д.</p><h3>Синтаксис</h3><p>JavaScript позаимствовал большую часть синтаксиса из языка Java, но влияние на него оказали и Python, Perl, Awk. Язык JavaScript чувствителен к регистру и использует кодировку символов Unicode.</p><h3>var, let и const</h3><p>Для создания переменной в JS часто используется ключевое слово let. Эта директива позволяет объявить локальную переменную, область видимости которой ограничивается блоком кода, в котором она объявлена.</p><p>А вот для var не существует блочной области видимости: глобальные переменные var доступны и за пределами блока. Также var допускает повторное объявление, тогда как для let это будет ошибкой. Попробуйте сами:</p><p>И такой вариант:</p><p>А что насчёт const? Это константа, которая подчиняется области видимости уровня блока согласно тем же правилам, что и переменные let. Но разница в том, что значение const нельзя переназначить. Пример:</p><h3>Типы данных</h3><p>Стандарт ECMAScript определяет восемь типов:</p><ul><li><b>undefined</b> — неопределённый тип;</li><li><b>boolean</b> — логический тип;</li><li><b>number</b> —<br />число;</li><li><b>bigint</b> — число произвольной длины;</li><li><b>string</b> — строка;</li><li><b>symbol </b>— символ;</li><li><b>null </b>— нулевое или пустое значение;</li><li><b>object </b>— структура для хранения данных и создания других структур с использованием ключевого слова new: new Object, new Map, new Date, etc.</li></ul><p>Подробнее о типах данных и структурах данных в JavaScript вы можете почитать <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Data_structures">здесь</a>.</p><h3>Циклы</h3><p>В JavaScript существует несколько видов циклов:</p><ol><li>for— цикл со счётчиком, использование которого в большинстве случаев подразумевает, что известно количество повторений.</li><li>while— многократное выполнение инструкций ровно до тех пор, пока истинно условие.</li><li>do ... while— то же, что и while, только здесь условие проверяется после выполнения инструкций, поэтому цикл выполняется минимум один раз.</li><li>for ... in— цикл для перебора перечисляемых свойств объекта.</li><li>for ... of— перебор итерируемых объектов, в которых реализован метод Symbol.iterator (String, Array, Set, etc.).</li></ol><p>При этом, как и в других языках программирования, в JS можно использовать инструкции break и continue.</p><h3>Функции</h3><p>Ну и чтобы обучиться программированию на JavaScript с нуля, нельзя обойти вниманием функции.</p><p>Функциям можно передавать аргументы, возвращать из них результат, присваивать их в качестве значений или свойств. Вызов функции выполняет обозначенные действия с указанными параметрами. Пример:</p><p>Выполнение этой функции выглядит так:</p><p>Подробнее о <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Functions">функциях в JavaScript</a>.</p><h2>Продвинутые концепции</h2><p>Двигаемся дальше. Понимание более сложных концепций JavaScript позволяет писать полноценные программы, лишённые спагетти-кода и разномастных костылей.</p><h3>Замыкание</h3><p>В JavaScript функции могут находиться внутри других функций. В этом случае внутренняя функция имеет доступ к переменным внешней, и механизм предоставления такого доступа называется замыканием.</p><p>Рассмотрим на примере:</p><h3>Каррирование функций</h3><p>Данная техника работы с функциями очень полезна для разработки на JavaScript с нуля. Каррирование — это трансформация функций, чтобы те принимали аргументы как func(a)(b)(c), а не в формате func(a, b, c).</p><p>Чтобы лучше понять, о чём речь, посмотрим на простой пример. Создадим вспомогательную функцию curry(func), которая выполняет каррирование func с двумя аргументами:</p><h3>Ключевое слово this</h3><p>Контекст this меняется в зависимости от его использования:</p><ol><li>Если обратиться к this в глобальной области, мы автоматически обращаемся к объекту window в браузере. В строгом режиме ("use strict"), если значение this не установлено в контексте выполнения, оно остаётся undefined.</li><li>Используя данное ключевое слово внутри объекта, мы ссылаемся на сам объект.</li><li>this во вложенных объектах может создать путаницу. Помните, что this относится к тому объекту, в методе которого используется.</li><li>Если функцию-конструктор вызвать с использованием ключевого слова new, то this в ней укажет на новый объект.</li><li>В стрелочных функциях this привязан к окружению, в котором создана функция. В глобальной же области this будет указывать на глобальный объект.</li></ol><h3>Прототипы</h3><p>В JavaScript объекты имеют специальное скрытое свойство [[Prototype]], которое либо равно null, либо ссылается на другой объект. Этот объект называется прототипом:</p><figure><img src="https://media.tproger.ru/uploads/2022/05/Javascript-prototype.jpg" alt="" /></figure><p>Если вы планируете взять отсутствующее свойство из Object, но оно отсутствует, JavaScript автоматически возьмёт это свойство из прототипа. Это прототипное наследование.</p><p>Свойство [[Prototype]] является внутренним и скрытым, но есть много способов задать его. Одним из способов задать скрытое свойство [[Prototype]] является использование __proto__:</p><h3>Наследование</h3><p>В плане наследования JavaScript работает лишь с одной сущностью: объектами. Каждый объект имеет внутреннюю ссылку на другой объект, называемый его прототипом. У объекта-прототипа также есть свой собственный прототип и так далее до тех пор, пока цепочка не завершится объектом, у которого свойство [[Prototype]] равно null.</p><h3>Итераторы и Генераторы</h3><p>Итераторы и генераторы внедряют концепцию перебора непосредственно в ядро языка и обеспечивают механизм настройки поведения for ... of циклов.</p><p>Итератором называется объект, который умеет обращаться к элементам некоторой коллекции по одному за один раз, и при может отслеживать своё текущее положение внутри обозначенной последовательности. В JavaScript итератор — это объект, который предоставляет метод next(), возвращающий следующий элемент последовательности со свойством done или value.</p><p>next() может быть вызван для поочерёдного доступа к парам ключ-значение:</p><p>Генераторы же позволяют определить алгоритм перебора, написав одну функцию, которая способна поддерживать собственное состояние. Генератор — это специальный тип функции, который работает как фабрика итераторов. Функция становится генератором, если содержит один или более yield операторов и использует function синтаксис.</p><h3>Асинхронное программрование</h3><p>При асинхронном программировании результат работы функций доступен не сразу, а через время. Так, при вызове асинхронной функции приложение продолжает работать, так как функция сразу же выполняет возврат.</p><p>Вообще, асинхронное программирование на JavaScript с нуля — это непросто, и одним разделом статьи здесь не обойтись. Чтобы разобраться, изучите <a href="https://developer.mozilla.org/ru/docs/conflicting/Learn/JavaScript/Asynchronous/Introducing">основные понятия асинхронного программирования</a> и переходите к <a href="https://developer.mozilla.org/ru/docs/Learn/JavaScript/Asynchronous/Introducing">введению в асинхронный JavaScript</a>.</p><h3>Модульная система</h3><p>По мере роста приложения его обычно разделяют на много файлов, которые и являются модулями. Модуль обычно содержит класс или библиотеку с функциями.</p><p>Долгое время в JavaScript отсутствовал синтаксис модулей на уровне языка. Это не было проблемой, потому что первые скрипты были маленькими и простыми. Но со временем это изменилось, скрипты стали куда более сложными, и было изобретено несколько вариантов организации кода в модули.</p><p>Так появились специальные библиотеки для динамической подгрузки модулей. Система модулей на уровне языка появилась в стандарте JavaScript в 2015 году и постепенно эволюционировала. На данный момент она поддерживается большинством браузеров и Node.js.</p><p>Подробнее о модульной системе читайте <a href="https://learn.javascript.ru/modules-intro">здесь</a>.</p><h2>Web API</h2><p>Для программирования на языке JavaScript понимать Web API не просто желательно, а обязательно. Сталкиваться с интерфейсом прикладного программирования (Application Programming Interfaces) в JS вы будете повсеместно.</p><ol><li><b>API браузера</b> — это такие конструкции, которые встроены в браузер и предназначенные для облегчения разработки функциональности.</li><li><b>Сторонние API</b> — конструкции, встроенные в сторонние платформы, такие как Twitter, Zendesk, Trello и т. д. С их помощью функциональность этих платформ можно использовать в своих веб-приложениях. Если API в платформе предусмотрен, к нему обязательно прилагается инструкция.</li></ol><p>Тема веб API обширна и сложна. Чтобы разобраться в вопросе, рекомендуем к прочтению <a href="https://developer.mozilla.org/ru/docs/Learn/JavaScript/Client-side_web_APIs/Introduction">введение в web APIs</a>, а также советуем посмотреть доступную лекцию:</p><h2>Инструменты для разработки на JavaScript с нуля</h2><p>Популярные линтеры и форматтеры для JavaScript:</p><ul><li><a href="https://eslint.org/">ESLint</a></li><li><a href="https://rome.tools/">Rome</a></li><li><a href="https://prettier.io/">Prettier</a></li></ul><p>Также обратите внимание на перечисленные в карте бандлеры: выбирайте инструмент, исходя из его удобства конкретно под ваши нужды.</p><p>Что же касается библиотек и фреймворков, советуем ознакомиться с нашими дорожными картами по <a href="https://tproger.ru/articles/kak-stat-react-razrabotchikom-v-2021-dorozhnaja-karta/">React</a> и <a href="https://tproger.ru/articles/izuchenie-vue-js-v-2021-godu-dorozhnaja-karta-razrabotchika/">Vue.js</a>.</p><p>А здесь лежит развёрнутый <a href="https://tproger.ru/translations/course-on-typescript/">вводный курс по TypeScript</a>.</p><h2>Выводы</h2><p>Данный материал не несёт значительной обучающей нагрузки, а лишь демонстрирует путь развития JS-разработчика, параллельно объясняя некоторые азы. Используйте эту дорожную карту, чтобы в краткие сроки обучиться программированию на JavaScript с нуля и успешно перейти к практическому применению полученных знаний.</p>]]></content:encoded>
    </item>
    <item>
      <title>План перехода на Go с другого языка программирования</title>
      <link>https://tproger.ru/articles/shift-to-golang-ozon-roadmap</link>
      <comments>https://tproger.ru/articles/shift-to-golang-ozon-roadmap?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Соловьёв]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/shift-to-golang-ozon-roadmap</guid>
      <description><![CDATA[<p>Пошаговый план изучения языка Go для разработчиков, которые решили перейти на Golang с другого языка программирования.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/shift-to-golang-ozon-roadmap">План перехода на Go с другого языка программирования</a>»</p>]]></description>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 31 Mar 2022 15:55:23 GMT</pubDate>
      <content:encoded><![CDATA[<p>Представляем дорожную карту по изучению языка Go, которая сделана совместно с экспертами <a href="https://tprg.ru/e297">курсов Route 256</a>. Этот роадмап подойдёт тем разработчикам, которые уже знают какой-то язык программирования и хотят также освоить Golang:</p><figure><img src="https://media.tproger.ru/uploads/2022/03/Dorozhnaja-karta-Go.png" alt="" /></figure><ol><li><a href="https://tproger.ru/#part1">Основы языка Go</a></li><li><a href="https://tproger.ru/#part2">Основные направления</a></li><li><a href="https://tproger.ru/#part3">Базы данных</a></li><li><a href="https://tproger.ru/#part4">Логирование</a></li><li><a href="https://tproger.ru/#part5">Тестирование</a></li><li><a href="https://tproger.ru/#part6"> Полезные материалы для изучения языка Go </a></li><li><a href="https://tproger.ru/#part7">Что дальше?</a></li></ol><h2>Основы языка Go</h2><p>В Go, как и в других языках, программы строятся из набора базовых конструкций. Поэтому, прежде чем начать программировать, необходимо познакомиться с основами языка:</p><ul><li>пакеты, переменные, функции и структуры;</li><li>порядок выполнения и обработка ошибок;</li><li>массивы, срезы и отображения;</li><li>указатели, методы и интерфейсы;</li><li>конкурентность и параллелизм;</li><li>среда выполнения: рефлексия, сборка мусора, планировщик задач.</li></ul><p>Конечно, чтобы освоить язык программирования Go, теоретической базы недостаточно. Для более глубокого понимания важно определиться с направлением, в котором вы хотите работать.</p><h2>Основные направления</h2><p>У Go-программиста есть три основных направления, каждое из которых характеризуется своей спецификой. Сюда относятся web-разработка, облачные и сетевые сервисы, а также консольные приложения.</p><h3>Web-разработка</h3><p>Go создавался, чтобы работать под большой нагрузкой, но при этом эффективно расходовать системные ресурсы, поэтому он отлично подходит для написания web-приложений.</p><p>Для начала стоит уделить внимание пакету net/http, который входит в стандартную библиотеку и имеет функциональность для написания клиентских и серверных приложений. Большинство web-фреймворков реализуют интерфейсы данного пакета. Также в стандартной библиотеке есть html-шаблонизатор, который предоставляется в пакете html/template.</p><p>Стоит упомянуть и fasthttp — это альтернатива стандартному пакету net/http, которая считается более производительной, но несовместимой с API стандартного пакета.</p><p>Стандартной библиотеки вполне достаточно для небольших web-приложений, но для разработки производственных решений удобнее использовать сторонние библиотеки. В отличии от других языков, в Go непопулярны web-фреймворки наподобие Spring, Django, Nest.js, Laravel и т.д. Чтобы сохранить производительность и простоту, в Golang используют библиотеки, не навязывающие свою парадигму, но решающие конкретные задачи. Поэтому обычно используются микрофреймворки:</p><ul><li><b>Gin</b> — микрофрейм­ворк, сохраняющий баланс между простотой написания и производительностью приложений.</li><li><b>Echo</b> — микрофрейм­ворк характеризуется быстрым HTTP-маршрутизатором и отличной документацией.</li><li><b>Fiber</b> — микрофрейм­ворк, прототипом которого стал Node.js Express, но построенный на базе fasthttp.</li></ul><p>Тем не менее<b>, </b>есть и полноценные web-фреймворки. Среди них можно отметить <b>Beego</b> — MVC фреймворк, вдохновленный Tornado, Sinatra и Flask.</p><h3>Облачные и сетевые сервисы</h3><p>Также к изучению языка Golang может подтолкнуть желание разрабатывать облачные и сетевые сервисы. Многие коммерческие сервисы изначально проектируются так, чтобы их можно было развернуть в облаке. Для них характерен ряд требований:</p><ul><li>частые релизы и быстрое развертывание;</li><li>надежность и масштабируемость.</li></ul><p>Go решает многие проблемы, с которыми сталкиваются разработчики облачных сервисов. Он быстро компилируется и экономно использует системные ресурсы. Встроенная поддержка параллелизма дает возможность создавать производительные программы, а простой синтаксис позволяет писать поддерживаемый и унифицированный код. Неудивительно, что многие проекты организации <a href="https://www.cncf.io/">CNCF</a> написаны на языке Go: Kubernetes, Prometheus, Nats, Etcd, Jaeger и другие.</p><p>В «облаках» никуда без микросервисов, поэтому здесь особенно актуальны микросервисные фреймворки. Сейчас активно развиваются:</p><ul><li><b>GoMicro</b> — предлагает поддержку авторизации/аутентификации и асинхронного взаимодействия между сервисами, а также включает protobuf-генератор кода для уменьшения бойлерплейта.</li><li><b>GoKit</b> — набор инструментов, решающих большинство инфраструктурных проблем, что позволяет разработчикам сосредоточиться на разработке бизнес-логики.</li></ul><p>Микросервисы взаимодействуют между собой через различные протоколы обмена сообщениями. Среди представителей RPC протоколов выделяется gRPC, разработанный компанией Google. В Go gRPC протокол реализуется библиотекой <a href="https://github.com/grpc/grpc-go">grpc-go</a>.</p><p>В распределенных системах для избежания частых сетевых запросов между сервисами используют брокеры сообщений. Брокеры работают в асинхронном режиме и берут на себя ответственность за хранение и доставку сообщений. Перечислим библиотеки для некоторых брокеров сообщений:</p><ul><li><b>Kafka</b>: <a href="https://github.com/segmentio/kafka-go">kafka-go</a></li><li><b>RabbitMQ</b>: <a href="https://github.com/streadway/amqp">amqp</a></li><li><b>NATS</b>: <a href="https://github.com/nats-io/nats.go">nats.go</a></li><li><b>Amazon SQS</b>: <a href="https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sqs">aws-sdk-go/sqs</a></li><li><b>Google Cloud Pub/Sub</b>: <a href="https://pkg.go.dev/cloud.google.com/go/pubsub">google-cloud-go/pubsub</a></li></ul><p>В системах с распределенной архитектурой часто сложно понять, в каком месте произошла ошибка. В этом могут помочь сервисы для сбора и отображения трейсов. В Go-сообществе особенно любим сервис Jaeger, поскольку он и сам написан на Go. Для работы с сервисом необходимо использовать библиотеку <a href="https://github.com/jaegertracing/jaeger-client-go">jaeger-client-go</a>.</p><h3>Консольные приложения</h3><p>Разработка консольных приложений на языке Go имеет ряд преимуществ. В отличие от интерпретируемых языков, как, например, Python и JavaScript, Go-программы компилируются в один исполняемый файл. Исполняемый файл включает все зависимости проекта, но при этом имеет небольшой размер.  Программы работают быстрее и отзывчивее, их удобно дистрибутировать до конечных пользователей. Если сравнивать Go с такими языками, как C и C++, то производительность программ на Go сопоставима с ними, но сборка проекта проходит значительно быстрее.</p><p>В небольших проектах для парсинга флагов командной строки можно использовать стандартную библиотеку flag, но для разработки серьезных CLI-приложений в Go широко распространены две библиотеки, которые отлично работают в связке:</p><ul><li><b>Cobra</b> — библиотека для создания современных CLI-приложений. Поддерживает автодополнение, подсказки, генерацию страницы man и алиасы для команд и флагов. Бесшовно интегрируется с библиотекой Viper.</li><li><b>Viper </b>— комплексное решение для конфигурации приложений. Работает с форматами <i>json</i>, <i>toml</i>, <i>yaml</i>, <i>hcl</i>, а ещё с <i>env</i> и <i>java-properties</i> файлами. Также поддерживает чтение из удаленных систем конфигурации (Etcd, Consul) с возможностью отслеживания изменений.</li></ul><p>Стоит отметить и библиотеку <b>GoPrompt</b>, которая позволяет создавать интерактивные CLI-приложения.</p><p>Мы разобрали три основных направления Go-программиста. Продвигаясь дальше в изучении языка Go, мы столкнемся с вопросами хранения данных, логирования приложений и тестирования. Рассмотрим их последовательно.</p><h2>Базы данных</h2><p>Одна из отличительных особенностей языка Go — это наличие общих интерфейсов для SQL-подобных баз данных. За это отвечает стандартный пакет database/sql. Он работает в связке с драйвером конкретной БД, что позволяет достаточно легко мигрировать на другие базы с минимальными изменениями в коде.</p><p>Во многих проектах можно увидеть использование стороннего пакета sqlx, расширяющего интерфейсы стандартного пакета.</p><p>SQL-подобных баз данных очень много, приведем примеры драйверов для некоторых из них:</p><ul><li><b>PostgreSQL</b>: <a href="https://github.com/jackc/pgx">pgx</a></li><li><b>MySQL</b>: <a href="https://github.com/go-sql-driver/mysql">mysql</a></li><li><b>MSSQL</b>:<a href="https://github.com/denisenkom/go-mssqldb"> go-mssqldb</a></li><li><b>SQLite</b>: <a href="https://github.com/mattn/go-sqlite3">go-sqlite3</a></li></ul><p>Не забудем и про драйверы для популярных NoSQL баз данных:</p><ul><li><b>Redis</b>: <a href="https://github.com/go-redis/redis">redis</a>, <a href="https://github.com/gomodule/redigo">redigo</a></li><li><b>MongoDB</b>: <a href="https://github.com/mongodb/mongo-go-driver">mongo-go-driver</a></li></ul><p>В Golang с осторожностью относятся к использованию ORM, поскольку многие реализации используют рефлексию. Рефлексия — это механизм определения типов данных во время выполнения программы. Поэтому использование таких ORM может сказаться на производительности приложения. Но для проектов, где не требуется держать большие нагрузки, ORM могут облегчить разработку. Приведем самые известные:<b></b></p><ul><li><b>Gorm </b>— полноценный ORM, расширяемый плагинами.</li><li><b>Ent</b> — entity-фреймворк, позволяющий генерировать модели и CRUD запросы на основе схемы, описанной в коде.</li><li><b>Beego ORM  </b>— входит в состав web-фреймворка Beego.</li></ul><p>Если в проекте нет ORM, то скорее всего он использует билдеры запросов, которые очень популярны в Go. Среди них самый известный — squirrel.</p><h2>Логирование</h2><p>Для ведения логов приложения на первых этапах можно использовать стандартный пакет log. Он достаточно прост в использовании, но не поддерживает уровни логирования и плохо подходит для ведения структурированных логов. Поэтому стоит обратить внимание на сторонние решения.</p><p>Долгое время в сообществе Go был популярен логгер <b>Logrus</b>. Он перестал активно развиваться, поэтому при разработке новых  проектов лучше использовать другие логгеры:<b></b></p><ul><li><b>Zap </b>— производительный структурированный логгер от команды  Uber.</li><li><b>ZeroLog </b>— отличается простым API и заточен для ведения логов в формате JSON.</li><li><b>Apex </b>— структурированный логгер, вдохновленный Logrus.</li></ul><h2>Тестирование</h2><p>Go выгодно выделяется встроенной поддержкой тестирования. Поэтому написание тестового кода на Go несильно отличается от написания самой программы. Каждый тестовый файл должен импортировать стандартный пакет testing, а его имя должно заканчиваться на <i>_test.go</i>. Запуск тестов выполняется единственной командой — <i>go test</i>.</p><h3>Покрытие кода</h3><p>В Go есть инструментарий для покрытия кода. Чтобы сгенерировать отчет о покрытии, необходимо запустить команду <i>go test </i>c флагом <i>-coverprofile</i>.<i></i></p><p><i></i>Для чтения отчета используется инструмент <i>go tool cover.</i></p><h3>Профилирование</h3><p>Для выявления критических частей кода часто применяется профилирование. Инструмент <i>go test </i>имеет встроенную поддержку нескольких видов профилей:</p><ul><li><b>профиль процессора</b> — определяет функции, выполнение которых требует больше всего процессорного времени.</li><li><b>профиль памяти</b> — находит инструкции, ответственные за выделение наибольшего количества памяти.</li><li><b>профиль блокировок</b> — выявляет операции, которые долгое время блокируют go-подпрограммы (горутины).</li></ul><p>Запуск сбора информации для каждого профиля выполняется с указанием соответствующего флага:</p><p>Собрав нужные профили, необходимо проанализировать их с помощью  инструмента <i>go tool pprof</i>. В основном для запуска требуется два аргумента — исполняемый файл, созданный профилем, и журнал профиля.</p><h3>Фреймворки</h3><p>В Go часто используют фреймворки для тестирования, которые хорошо работают в связке со стандартной библиотекой:</p><ul><li><b>Testify</b> — предоставляет набор удобных ассертов и имеет поддержку мокирования.</li><li><b>GoMock </b>— заточен на создание моков. Хорошо подходит для проектов с множеством  внутренних зависимостей.</li><li><b>GoDog </b> — официальный Cucumber BDD фреймворк для языка Go.</li></ul><h2>Полезные материалы для изучения языка Go</h2><h3>Книги</h3><p>Чтобы обучение Go было максимально эффективным, следует запастись полезными ресурсами.</p><h3>Подкасты</h3><ul><li><a href="https://golangshow.com/">Golang Show</a></li><li><a href="https://podlodka.io/240">Podlodka #240 – Golang</a></li><li><a href="https://www.youtube.com/watch?v=donS3Wfyiz8">Timeweb – Быть Golang-разработчиком</a></li><li><a href="https://changelog.com/gotime">Go Time</a></li></ul><h3>Конференции и лекции</h3><ul><li><a href="https://youtu.be/1V5GAYoaKRE">Введение в язык программирования Go</a></li><li><a href="https://www.youtube.com/watch?v=Uojy57I-xP0">Практики, особенности и нюансы при работе с Postgres в Go</a></li><li><a href="https://www.youtube.com/watch?v=ql-uncsqoAU&amp;t=2408s">Почему Golang такой странный</a></li><li><a href="https://www.youtube.com/watch?v=AOLPelcByBo">Как ошибиться с конкурентностью в Go</a></li></ul><h2>Что дальше?</h2><p>Можно пройти <a href="https://go.dev/tour/welcome/1">A Tour of Go</a> от разработчиков языка, на изучение хватит пары вечеров. После тура могут возникнуть вопросы, с ними поможет исчерпывающая <a href="https://go.dev/doc/">документация</a>.</p><p>Если вам больше подходит формат обучения с ментором и хочется подключиться к живому русскоязычному комьюнити, попробуйте бесплатный курс <a href="https://tprg.ru/fArd">«Продвинутая разработка микросервисов на Go»</a> от Ozon Tech.Под крылом опытных Go-разработчиков вы сделаете бота для мессенджера с gRPC, научитесь создавать распределенные приложения, поработаете с большими данными, высокими нагрузками, Machine learning и другими современными технологиями и практиками.</p><p>Ещё один способ познакомиться — подойти к изучению Go через сравнение с языком, который вы уже знаете. Например:</p><ul><li><a href="https://github.com/miguelmota/golang-for-nodejs-developers">Go для NodeJS-разработчиков</a></li><li><a href="https://golang-for-python-programmers.readthedocs.io/en/latest/">Go для Python-разработчиков</a></li><li><a href="https://pahanini.gitbooks.io/golang-for-php-developers/content/">Go для PHP-разработчиков</a></li></ul><p>Вне зависимости от способа обучения, уделите время решению небольших задач, например на <a href="https://leetcode.com/">LeetCode</a> или в решебнике <a href="https://gobyexample.com.ru/">Go в примерах</a>.</p><p>А чтобы найти подходящую библиотеку для вашей задачи, стоит заглянуть на <a href="https://github.com/avelino/awesome-go">Awesome Go</a> — структурированный список библиотек и фреймворков, поддерживаемый сообществом Go.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как освоить бэкенд-разработку в 2022 году: дорожная карта</title>
      <link>https://tproger.ru/articles/backend-roadmap-2021</link>
      <comments>https://tproger.ru/articles/backend-roadmap-2021?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/backend-roadmap-2021</guid>
      <description><![CDATA[<p>Чтобы понять, как стать бэкенд-программистом в 2022 году, обратитесь к дорожной карте, которая подкреплена материалами для изучения.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/backend-roadmap-2021">Как освоить бэкенд-разработку в 2022 году: дорожная карта</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 03 Jan 2022 08:50:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Как стать бэкенд-разработчиком, что изучать в 2022 году и в каком порядке? Мы составили дорожную карту, которая поможет в этом разобраться:</p><figure><img src="https://media.tproger.ru/uploads/2020/11/backend_roadmap.png" alt="" /></figure><ol><li><a href="https://tproger.ru/#part1">Зона ответственности</a></li><li><a href="https://tproger.ru/#part2">Операционные системы и базис</a></li><li><a href="https://tproger.ru/#part3">Выбор языка программирования</a></li><li><a href="https://tproger.ru/#part4">Базы данных</a></li><li><a href="https://tproger.ru/#part5">API</a></li><li><a href="https://tproger.ru/#part6">Веб-серверы</a></li><li><a href="https://tproger.ru/#part7">Заключение</a></li></ol><h2>Зона ответственности</h2><p>Бэкенд-разработчик отвечает за корректность работы и оптимизацию серверной логики. Грубо говоря, аутентификация, раздача прав доступа, обработка действий пользователя, работа с данными, интеграция с другими приложениями, скорость обработки запросов — всё это ложится на плечи сервера. Разумеется, фронтенд тоже не стоит на месте, и ряд функций может быть вынесен на сторону клиента. Но в этом случае следует отдавать себе отчёт в том, насколько это секьюрно для веб-приложения и его пользователей, а также не замедлит ли это сайт.</p><p>Далее мы поговорим о ключевых моментах. Более полная картина представлена в виде дорожной карты по бэкенд-разработке.</p><h2>Операционные системы и базис</h2><p>Очень важно научиться работать с терминалом, особенно если речь идёт о Linux.</p><p>Бэкенд-разработчик должен знать, как работают ОС, что такое потоки и параллелизм, понимать, концепции построения сети и стандарты POSIX, а также уметь управлять процессами, памятью, вводом и выводом (I/O).</p><p>Полезные материалы:</p><ul><li><a href="https://tproger.ru/articles/useful-linux-commands/">Работаем в терминале Linux как профи: подборка полезных команд</a></li><li><a href="http://feanor184.ru/windows/spisok-osnovnyih-komand-konsoli-dlya-admina-windows.html">Список основных команд консоли для админа Windows</a></li><li><a href="https://losst.ru/chto-takoe-posix">Что такое POSIX?</a></li><li><a href="https://tproger.ru/books/computer-networks-books/">Подборка книг по компьютерным сетям</a></li></ul><p>А также видео о том, что такое операционная система и как она работает:</p><h2>Выбор языка программирования</h2><p>Существует много споров, в которых приверженцы того или иного языка программирования доказывают его превосходство над другими в бэкенд-разработке. Но не стоит забывать, что язык — лишь инструмент, и какой выбрать — зависит от поставленной цели и уже имеющихся знаний.</p><p>Допустим, если вы уже знаете JavaScript и вообще решили освоить бэкенд после фронтенда, хорошим выбором станет Node.js: и поддерживать будет проще, и можно поиграться в фулстек. Знаете Python? Что ж, Django также предоставляет много готовых решений для серверной части. За Java стоит браться, если перед вами сложный долгоиграющий проект, а если же веб-приложение небольшое, писать для него бэкенд на Java — всё равно что шар-бабой гвозди забивать. Неизменной классикой по-прежнему остаётся PHP, ведь на этом языке действительно разработано подавляющее большинство современных сайтов.</p><p>И это далеко не все. Подробнее можете почитать в нашей статье о <a href="https://tproger.ru/translations/7-basic-languages-for-backend-development/">8 основных языках для бэкенда</a>.</p><h2>Базы данных</h2><p>Базы данных станут вашим главным ресурсом, а СУБД — новым домом. Следует понять разницу между реляционными и NoSQL СУБД, освоить нормализацию, транзакции, ORM, ACID, проблему N+1 и теорему CAP.</p><p>Материалы по работе с базами данных:</p><ul><li><a href="https://tproger.ru/translations/sql-nosql-database-models/">SQL и NoSQL: разбираемся в основных моделях баз данных</a></li><li><a href="https://tproger.ru/translations/db-scheme-design-guide/">Как спроектировать базу данных, чтобы в будущем не пришлось её переписывать</a></li><li><a href="https://tproger.ru/articles/sql-interview-questions/">27 распространённых вопросов по SQL с собеседований и ответы на них</a></li></ul><p>Также есть хорошее видео, которое наглядно объясняет нормализацию в БД:</p><h2>API</h2><p>Вам предстоит познакомиться с API как средством интеграции приложений, чтобы выполнять подключение сторонних сервисов, импорт данных, использование готовых решений для своего веб-ресурса. Зачастую сервисы, которые предоставляют доступ к своему API, описывают процесс подключения в документации. Иногда она максимально доступна, а иногда некоторые моменты приходится додумывать самостоятельно, поэтому важно не просто знать, но и понимать, как устроен API.</p><p>Посмотрите наши <a href="https://tproger.ru/tag/api/">рекомендации по использованию API популярных веб-сервисов</a> и не только.</p><h2>Веб-серверы</h2><p>Стоит научиться устанавливать и настраивать популярные веб-серверы, такие как Nginx, Apache, Caddy и MS IIS. Все они достаточно безопасны и просты в использовании.</p><p>А ещё можете почитать о том, <a href="https://tproger.ru/articles/tproger-server-setup-manual/">как самостоятельно настроить сервер для сайта</a>, используя DigitalOcean хостинг и операционную систему Ubuntu 20.04 LTS.</p><h2>Заключение</h2><p>Так как стать бэкенд-разработчиком в 2022 году? Стоит разобраться в принципах работы операционных систем, основных командах терминала, выбрать предпочтительный язык программирования, освоить работу с базами данных, API и научиться работать с  веб-серверами. А чтобы быть в курсе актуальных проблем веба, загляните в <a href="https://tproger.ru/articles/web-almanah-2021/">интересные факты из веб-альманаха 2021</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Дорожная карта по пентесту: как стать пентестером с нуля</title>
      <link>https://tproger.ru/articles/dorozhnaja-karta-po-pentestu-kak-stat-pentesterom-s-nulja</link>
      <comments>https://tproger.ru/articles/dorozhnaja-karta-po-pentestu-kak-stat-pentesterom-s-nulja?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/dorozhnaja-karta-po-pentestu-kak-stat-pentesterom-s-nulja</guid>
      <description><![CDATA[<p>Дорожная карта пентестера с нуля: какие инструменты и технологии осваивать, как искать уязвимости и в каком порядке изучать основы безопасности.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/dorozhnaja-karta-po-pentestu-kak-stat-pentesterom-s-nulja">Дорожная карта по пентесту: как стать пентестером с нуля</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Хакеры]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 07 Dec 2020 12:18:30 GMT</pubDate>
      <content:encoded><![CDATA[<p>Как стать пентестером с нуля, да и вообще, что включает в себя тестирование на проникновение? Какие инструменты следует освоить и в какой последовательности? Разобраться поможет дорожная карта от Tproger и <a href="https://is.gd/nqO3H8">HackerU</a>:</p><figure><img src="https://media.tproger.ru/uploads/2020/12/pentesting_roadmap.png" alt="" /></figure><h2>Пентестинг — что нужно знать</h2><p>Тестирование на проникновение (penetration testing, pentesting) используется для своевременного обнаружения проблем и уязвимостей в IT-системах. Для этого применяются как ручные методы тестирования, так и автоматизированные инструменты.</p><p>Пентестер имитирует действия злоумышленника, используя при этом возможные бреши в безопасности. Если защита слабая, специалист получает доступ к искомым данным и отчитывается о найденной уязвимости, чтобы та была устранена разработчиками.</p><h2>Навыки и инструменты пентестера</h2><p>Чтобы понять, как стать пентестером с нуля, предлагаем ознакомиться со схемой обучения с нуля. Дорожная карта включила в себя следующие пункты:</p><ul><li>Основы</li><li>Кибер-инфраструктура для пентестинга</li><li>Повышение кроссплатформенных привилегий</li><li>Атаки на сетевую инфраструктуру</li><li>Реверс-инжиниринг и анализ вредоносных ПО</li><li>Подготовка к экзаменам CEH и OSCP</li></ul><p>Разберём их подробнее.</p><h3>Основы</h3><p>Фактически это введение в профессию, из которого вы должны узнать о взломе веб-приложений, атаках на операционные системы и сети, а также о внешней IT-инфраструктуре.</p><p>Какой опыт здесь поможет? В качестве хорошего бэкграунда для исследования вредоносных программ подойдёт знание ассемблера. Если же вы смотрите в сторону веб-безопасности, то однозначно нужно начать с изучения веб-технологий:</p><ul><li>Основные технологии, используемые браузерами: HTML, JavaScript, HTTP, веб-сокеты, CSS, SOP, CORS, cookies, хранилища и особенности их работы.</li><li>Основные технологии разработки серверной части: PHP, фреймворки, системы управления контентом. После можно переходить к более строгим и требовательным языкам и технологиям, таким как Java, Python, Node.JS, C#, Golang и пр.</li></ul><p>Знание Linux на уровне пентестера не ограничивается установкой «хакерского» дистрибутива Kali. Управление сервисами, пользователями, правами, сетью и менеджеры пакетов — вот фундамент, который позволит понять, как UNIX-подобные операционные системы работают изнутри.</p><p>То же касается и Windows Server. Вам помогут знания о механизмах управления сетью устройств и сетевым оборудованием. Это касается работы с Active Directory, сетевыми протоколам DNS, DHCP и ARP, а также их настройки.</p><p>Отдельным блоком следует выделить корпоративные сети Cisco, их архитектуру. Хороший пентестер может быстро разобраться в настройке оборудования Cisco, маршрутизации, VLAN и Trunk портов, мониторить трафик и управлять корпоративной сетью.</p><h3>Кибер-инфраструктура для пентестинга</h3><p>На должности пентестера вам предстоит сканировать сети и анализировать сетевой трафик. В этом поможет <a href="https://www.wireshark.org/">Wireshark</a> — популярный инструмент для захвата и анализа сетевого трафика, который часто используется как в обучении, так и в реальных задачах. Также вам предстоит мониторить и обрабатывать открытые источники по принципу open-source intelligence (OSINT), работать со взломом паролей, атаками на Wi-Fi и MITM. Именно на этом этапе вы познакомитесь с методом полного перебора или брутфорсом, а также соответствующими программами вроде <a href="https://www.openwall.com/john/">John The Ripper</a>.</p><h3>Повышение кроссплатформенных привилегий</h3><p>Несмотря на столь безобидное название, под повышением привилегий подразумевается использование уязвимости программы или операционной системы, вследствие которого злоумышленник получает доступ к информации, что обычно защищена от определённой категории пользователей. Такое действие позволяет киберпреступнику получить права на выполнение несанкционированных действий.</p><p>Изменение привилегий делится на три основных типа:</p><ul><li>вертикальное повышение — имитация пользователя уровнями выше;</li><li>горизонтальное повышение — имитация пользователя того же уровня;</li><li>понижение — имитация пользователя уровнями ниже.</li></ul><p>Чтобы стать пентестером, нужно понимать, как это работает с точки зрения злоумышленника. С этой целью вам предстоит научиться изменять свои привилегии в различных операционных системах, закрепляться в них, использовать эксплойты, переполнение буфера и заменять DLL-файлы на вредоносные библиотеки.</p><h3>Атаки на сетевую инфраструктуру</h3><p>Такие атаки делятся на активные и пассивные — тип напрямую зависит от вредоносного ПО. Для обеспечения защиты от атак на сетевую инфраструктуру используются:</p><ul><li>VPN;</li><li>прокси-серверы;</li><li>файрволы;</li><li>системы сетевого мониторинга.</li></ul><p>Но это касается методов защиты конечных пользователей. В роли специалиста по пентестингу вам предстоит тестировать атаки через SMB Relay и Responder, использовать PowerShell как инструмент атак и анализа защищённости сети, проверять конфигурацию домена, захватывать и анализировать сетевой трафик.</p><h3>Реверс-инжиниринг и анализ вредоносных ПО</h3><p>Но настоящие специалисты по кибербезопасности идут ещё дальше. Они изучают и анализируют логику исполняемых файлов, исследуют результаты работы вредоносных ПО, проводят реверс-инжиниринг компилируемых исполняемых файлов и производят их отладку. Именно здесь вам пригодится язык ассемблера, C, а также отладчики OllyDbg, x64dbg и GDB.</p><h3>Подготовка к экзаменам CEH и OSCP</h3><p>Сдача экзаменов <a href="https://www.eccouncil.org/programs/certified-ethical-hacker-ceh/">CEH</a> и <a href="https://www.offensive-security.com/pwk-oscp/">OSCP</a> опциональна, но она позволит закрепить пройденный материал, получить соответствующие сертификаты и поставить жирную точку в обучении в ранге новичка, став специалистом. Вам следует понимать технические особенности формата обоих экзаменов и выстроить эффективный план подготовки.</p><h2>Дополнительные инструменты</h2><h3>Комплексные:</h3><ul><li>OWASP ZAP — опенсорсный кроссплатформенный инструмент для автоматического поиска уязвимостей веб-приложений в процессе разработки и тестирования;</li><li>Burp Suite — набор взаимосвязанных компонентов для комплексного аудита безопасности;</li><li>Metasploit — открытая платформа для создания эксплойтов под различные ОС.</li></ul><h3>Брутфорсеры:</h3><ul><li>THC-Hydra — многофункциональный брутфорс паролей;</li><li>RainbowCrack — популярный взломщик хешей;</li><li>John the Ripper — кроссплатформенный инструмент с тремя типами перебора:полным, гибридным и по словарю.</li></ul><h3>Сканеры сетей:</h3><ul><li>Nmap;</li><li>ZMap;</li><li>Masscan.</li></ul><h3>Анализаторы трафика:</h3><ul><li>Wireshark;</li><li>tcpdump;</li><li>mitmproxy.</li></ul><h2>Подборка ресурсов для изучения</h2><h3>Книги</h3><h3>Подкасты</h3><ul><li><a href="https://player.fm/series/open-web-application-security-project-owasp-portland-oregon-chapter">Open Web Application Security Project (OWASP)</a></li><li><a href="https://player.fm/series/hacked-off">Hacked Off</a></li><li><a href="https://player.fm/series/series-2558081">The AnglerPhish Podcast</a></li><li><a href="https://player.fm/series/the-infosec-osint-show-2780298">The InfoSec &amp; OSINT Show</a></li><li><a href="https://player.fm/series/getting-into-infosec">Getting Into Infosec</a></li><li><a href="https://player.fm/series/7-minute-security">7 Minute Security</a></li></ul><h3>Курсы</h3><p>Все перечисленные в роадмапе этапы включены в <a href="https://is.gd/jiMkUL">курс по кибербезопасности от HackerU</a>. Пройдите путь обучения продолжительностью в 11 месяцев и пополните ряды «белых шляп», проводя тесты на проникновение, анализируя защищённость и находя дыры в безопасности информационных систем и приложений.</p><p>Сомневаетесь? Тогда опробуйте программу на <a href="https://is.gd/emGtbJ">трёхдневном интенсиве «Pentesting: Level 0»</a>, где вы познакомитесь с типичными задачами Red Team, на практике разберётесь в типовых уязвимостях, проведёте взлом приложения с помощью эксплойта и многое другое.</p><h2>Заключение</h2><p>Хотите стать пентестером с нуля? Теперь вы знаете, как это сделать: вооружайтесь нашей дорожной картой, осваивайте полезные технологии, необходимые языки программирования, изучайте различные виды хакерских атак и полезные инструменты, читайте книги о взломе и тестировании на проникновение, слушайте тематические подкасты, становитесь сертифицированным специалистом и смело рассылайте резюме в интересующие вас компании.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как стать React-разработчиком в 2022: дорожная карта</title>
      <link>https://tproger.ru/articles/kak-stat-react-razrabotchikom-v-2021-dorozhnaja-karta</link>
      <comments>https://tproger.ru/articles/kak-stat-react-razrabotchikom-v-2021-dorozhnaja-karta?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-stat-react-razrabotchikom-v-2021-dorozhnaja-karta</guid>
      <description><![CDATA[<p>Порядок изучения React: сначала базовые HTML, CSS и JavaScript, затем Create React App и остальные must-have темы и инструменты библиотеки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-stat-react-razrabotchikom-v-2021-dorozhnaja-karta">Как стать React-разработчиком в 2022: дорожная карта</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 04 Dec 2020 13:04:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>Как стать React-разработчиком, что изучать в 2022 и в каком порядке — объясняем в формате дорожной карты:</p><figure><img src="https://media.tproger.ru/uploads/2020/12/React-1.png" alt="" /></figure><p>React — это JavaScript-библиотека для создания пользовательских интерфейсов, которая поддерживается разработчиками самых популярных ресурсов. Чтобы освоить один из наиболее популярных инструментов JavaScript, следуйте описанным ниже этапам.</p><h2>Основы</h2><p>Независимо от того, какую библиотеку или фреймворк вы выбрали для изучения, есть три кита, на которых стоит весь фронтенд: HTML, CSS и JavaScript. Подробнее о них вы узнаете из <a href="https://tproger.ru/articles/frontend-roadmap-2021/">гайда с дорожной картой фронтенд-разработчика</a>.</p><h3>Create React App</h3><p>Это набор инструментов, который позволит настроить среду разработки так, чтобы получить доступ к самым новым функциям JavaScript и легко оптимизировать приложение для прода. Вам понадобится Node 8.16.0 или Node 10.16.0+, чтобы создать проект:</p><p>Если же на вашем компьютере npm версии 5.2+,  вы можете использовать <a href="https://www.npmjs.com/package/npx">npx</a>:</p><p>Более подробную инструкцию по настройке и работе с Create React App вы найдёте в <a href="https://github.com/facebook/create-react-app">репозитории</a>.</p><h3>Компоненты</h3><p>Это функциональные элементы, которые можно многократно использовать в приложениях. Принцип работы прост: компоненты принимают props (произвольные данные) и возвращают элементы React для описания того, что будет на экране. Все приложения, написанные с использованием React, построены на базе компонентов. Основные различия между функциональными и классовыми компонентами:</p><p>В остальном из основ потребуется понимание работы препроцессора JSX, props и state, условной отрисовки и жизненного цикла компонента, знание таких хуков, как useState (состояние) и useEffect (методы жизненного цикла).</p><p>Обратите внимание на списки и ключи, где ключ является строковым атрибутом, необходимым при создании списков. А подробнее о композиции и наследовании вы можете почитать в русскоязычной документации React.</p><h2>Продвинутый уровень</h2><h3>Хуки</h3><p>На этом этапе вам следует серьёзнее подойти к изучению хуков. Начнём с того, что хуки — это то, к чему стремится команда React, отказываясь от классов. Почему же предпочтение пало на функциональные компоненты? Обычно классы нужны для работы с методами и локальными состояниями, но хуки позволяют работать с ними сразу, минуя этап написания классов.</p><p>Пример использования useState:</p><p>Пока что name — пустая переменная, но с помощью функции setName() мы можем присвоить ей необходимое значение.</p><p>Хуков довольно много, но достаточно разобраться хотя бы в основных:</p><ul><li>useCallback</li><li>useRef</li><li>useMemo</li><li>useReducer</li><li>useContext</li></ul><p>Подробнее о каждом и них и некоторых других вы можете почитать в <a href="https://ru.reactjs.org/docs/hooks-reference.html">справочнике API хуков</a>.</p><h3>Разделение кода</h3><p>Существует такое понятие, как бандлинг — определение и объединение импортированных файлов в один. Для этого чаще всего используют <a href="https://webpack.js.org/">Webpack</a>, <a href="https://rollupjs.org/">Rollup</a> или <a href="http://browserify.org/">Browserify</a>.</p><p>Вот только по мере роста приложения бандл тоже растёт, и чтобы предотвратить его чрезмерное разрастание, нужно уметь его разделять. Интересно то, что разделение также поддерживается перечисленными выше бандлерами. Принцип заключается в создании нескольких бандлов и их поэтапной загрузке по мере необходимости.</p><p>Кроме того, на продвинутом уровне вам следует подробнее почитать о <a href="https://ru.reactjs.org/docs/context.html">контексте</a>, <a href="https://ru.reactjs.org/docs/render-props.html">рендер-пропсах</a>, <a href="https://ru.reactjs.org/docs/refs-and-the-dom.html">рефах и DOM</a>. Разберитесь в React-технике HOC, которая подразумевает повторное использование логики компонента, порталах для создания DOM-узлов за пределами родительского компонента, границах ошибок и архитектуре Fiber.</p><p>Подробнее о Fiber можно узнать из данного видео:</p><h2>Экосистема</h2><h3>Routers</h3><p>Маршрутизация — важная составляющая серьёзных веб-приложений. Чтобы обеспечить их интуитивно понятное использование, следует предоставить пользователю доступ к удобной навигации. Сама библиотека маршрутизацию не поддерживает, но существуют такие популярные инструменты, как <a href="https://reactrouter.com/web/guides/quick-start">React Router</a> и <a href="https://reach.tech/router/">Reach Router</a>.</p><h3>API Calls</h3><p>Как стать React-разработчиком в 2022 году? Обзавестись полезными инструментами для API-вызовов. К таким инструментам относятся клиенты GraphQL <a href="https://www.apollographql.com/">Apollo</a> и Relay Modern, HTTP-клиент <a href="https://github.com/axios/axios">axios</a>, «едва-полифиловый» <a href="https://github.com/developit/unfetch">unfetch</a>, библиотека HTTP-запросов <a href="https://www.npmjs.com/package/superagent">superagent</a> и пакет <a href="https://github.com/ava/use-http">use-http</a> с useFetch хуком.</p><h3>Формы</h3><ul><li><a href="https://react-hook-form.com/">React Hook Form</a> — решение, позволяющее без проблем создавать и поддерживать React-формы.</li><li><a href="https://formik.org/docs/overview">Formik</a> — популярная библиотека Джареда Палмера для работы с формами.</li><li><a href="https://final-form.org/react">Final Form</a> — ещё одна библиотека, основанная на <a href="https://en.wikipedia.org/wiki/Observer_pattern">паттерне Observer</a>.</li></ul><h3>Тестирование</h3><p>Здесь всё просто: обратите внимание на такие инструменты, как <a href="https://jestjs.io/en/">Jest</a>, <a href="https://testing-library.com/docs/react-testing-library/intro/">React Testing Library</a> и <a href="https://www.cypress.io/">Cypress</a>. В основе последнего лежат тестовые библиотеки Mocha и Chai. Все эти инструменты предназначены для более быстрого и простого тестирования.</p><h3>Управление состоянием</h3><p>Одна из сложнейших задач, которые возникают при разработке приложения. Именно поэтому ежедневно появляются различные библиотеки, которые помогают в управлении состоянием. Да, этот процесс возможен и без них, но всё же не стоит предпочитать тернистый путь простому:</p><ul><li>React Context для многих разработчиков давно стал способом управления состоянием по умолчанию. Подробнее о нём вы можете узнать из нашей статьи <a href="https://tproger.ru/translations/react-context-in-5-min/">«React Context за 5 минут: что это и как использовать»</a>.</li><li>Также почитайте о <a href="https://webformyself.com/react-state-s-nulya/">React State</a> для отслеживания данных компонента.</li><li>Redux — это едва ли не самый известный менеджер состояний. Держите <a href="https://tproger.ru/translations/redux-for-beginners/">краткое руководство по Redux для начинающих</a>.</li><li><a href="https://mobx.js.org/README.html">MobX</a>— также полезная автономная библиотека для управления состоянием приложения.</li></ul><h3>Стилизация</h3><p>Есть множество способов стилизовать компоненты React, но не стоит забывать об инструментах, которые существенно облегчат эту задачу. К ним относятся:</p><ul><li><a href="https://chakra-ui.com/">Chakra UI</a></li><li><a href="https://material-ui.com/ru/">Material UI</a></li><li><a href="https://ant.design/docs/react/introduce">Ant Design</a></li><li><a href="https://styled-components.com/">Styled Components</a></li><li><a href="https://emotion.sh/docs/introduction">Emotion</a></li></ul><h2>Заключение</h2><p>Так как же стать React-разработчиком в 2022 году? Дорожная карта включила в себя основные технологии, освоив которые, вы сможете без проблем претендовать на должность React-программиста.</p><p>Если вкратце, то следует понимать важность хуков и уметь с ними работать, знать о серверном рендеринге SSR, статической генерации сайтов SSG, разделении кода, основных инструментах, а также не забывать о мобильной разработке с React Native. Владея хотя бы одним инструментом из каждого сегмента, вы сможете справляться с задачами быстрее и эффективнее.</p><p>Вас также может заинтересовать <a href="https://tproger.ru/articles/izuchenie-vue-js-v-2021-godu-dorozhnaja-karta-razrabotchika/">роадмап по Vue.js</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как стать DevOps-инженером в 2022 году: дорожная карта</title>
      <link>https://tproger.ru/articles/dorozhnaja-karta-devops-2021</link>
      <comments>https://tproger.ru/articles/dorozhnaja-karta-devops-2021?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/dorozhnaja-karta-devops-2021</guid>
      <description><![CDATA[<p>Из статьи вы узнаете, как стать DevOps-инженером, что изучать в 2022 году и в каком порядке. Вооружайтесь наглядным планом развития.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/dorozhnaja-karta-devops-2021">Как стать DevOps-инженером в 2022 году: дорожная карта</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 27 Nov 2020 12:26:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>Как стать DevOps-инженером в 2022 году и в каком направлении развиваться? Поможет понять дорожная карта:</p><figure><img src="https://media.tproger.ru/uploads/2020/11/DevOps-roadmap-1.png" alt="" /></figure><p>Чтобы разобраться в обязанностях такого специалиста, почитайте нашу статью о том, <a href="https://tproger.ru/articles/devops-engineer/">кто такой DevOps-инженер</a>.</p><p>Если нужен обновлённый и более полный план, посмотрите <a href="https://tproger.ru/articles/roadmap-devops-inzhenera-v-2026-godu--chto-uchit-i-v-kakom-poryadke">Roadmap DevOps-инженера в 2026 году: что учить и в каком порядке</a>. Это свежий хаб по теме, где шаги разложены по порядку и связаны с практическими материалами Tproger.</p><h2>Язык программирования</h2><p>Изучение хотя бы одного языка программирования из представленных обязательно. Порой нелегко отбросить мысль, что программирование нужно только разработчикам. Суть в том, что DevOps-специалисту необязательно получать профессиональные знания в области разработки, и не столь важно, какой язык программирования вы выберете. Главное, уметь использовать знание языка для автоматизации ряда процессов.</p><p>DevOps-инженеры обычно изучают Python, Ruby, Node.js, Go, Rust, C или C++.</p><h2>Операционные системы</h2><p>Данную специальность часто называют симбиозом разработчика и сисадмина. В какой-то степени это так. Что касается операционных систем, вам следует знать принципы их работы, стандарты POSIX, концепции построения сети, потоки и параллелизм, уметь работать с файловой системой, виртуализацией, сокетами, управлять памятью, процессами, вводом и выводом (I/O).</p><p>Кроме того, нужен навык работы с терминалом на разных операционных системах. Чтобы лучше понять, как стать DevOps engineer и что следует знать об ОС, загляните в открытые вакансии. Часто компании работают в Linux-среде, так что в требованиях нередко указывается опыт работы с Linux-администрированием и Bash-скриптами.</p><p><b>Полезные материалы:</b></p><ul><li><a href="https://tproger.ru/translations/vim-for-beginners/">Как отсюда выйти: шпаргалка по Vim</a></li><li><a href="https://tproger.ru/translations/powershell-tutorial/">Руководство по Windows PowerShell для начинающих</a></li><li><a href="https://tproger.ru/articles/bash-scripts-guide/">Руководство по созданию скриптов для Bash</a></li></ul><h2>Сеть, безопасность и протоколы</h2><p>Сетевые протоколы для передачи электронной почты, криптографические протоколы SSL/TLS, понимание разницы между HTTP и HTTPS, протокол передачи файлов по сети FTP, протокол удалённого управления сервером SSH, а также технология Port Forwarding.</p><p>Помимо перечисленного, следует понимать сетевую модель OSI и разбираться в её уровнях:</p><p>Также обратите внимание на <a href="https://www.saltstack.com/">SaltStack</a> — опенсорсный инструмент, использующий push-модель для выполнения команд по протоколу SSH. В нём предусмотрена поддержка шаблонов <a href="https://tproger.ru/translations/yaml-za-5-minut-sintaksis-i-osnovnye-vozmozhnosti/">YAML</a>, а также горизонтального и вертикального масштабирования.</p><h2>Инфраструктура как код</h2><p>Согласно модели IaC (Infrastructure as Code), процесс настройки инфраструктуры схож с процессом разработки ПО. Вам предстоит работать с <a href="https://tproger.ru/articles/containers-explained/">контейнеризацией</a>,  о<a href="https://www.xelent.ru/blog/chto-takoe-orkestratsiya-konteynerov/">ркестрацией контейнеров</a>, обеспечивать инфраструктуру и управлять конфигурацией с помощью специальных инструментов.</p><p>Об одном из наиболее популярных инструментариев в области контейнеризации Docker вы можете узнать из данного видео:</p><p>Всего полтора часа, которые заменят дни поиска в Google, раскуривания мануалов, проб, ошибок и походов на Stack Overflow.</p><h2>Облачные провайдеры и шаблоны проектирования для облачных сред</h2><p>Ну и как стать DevOps-инженером в 2022 году, если не знать о таких популярных провайдерах, как AWS (Amazon Web Services), Heroku, Azure, Google Cloud и DigitalOcean? Кстати, мы уже рассказывали, <a href="https://tproger.ru/articles/tproger-server-setup-manual/">как настроить сервер для сайта</a> на примере Tproger, используя DigitalOcean и Ubuntu 20.04 LTS: заходите, там интересно.</p><p>Что же касается Cloud Design Patterns, то здесь важно разбираться в проблемах, с которыми приходится сталкиваться при разработке облачных приложений:</p><ul><li><b>Доступность</b> — процент времени непрерывной работы системы, на который могут повлиять атаки, нагрузка, системные ошибки и проблемы инфраструктуры.</li><li><b>Управление данными</b> — важный элемент облачных приложений. Данные часто разбросаны по нескольким серверам, что обеспечивает лучшую производительность и доступность, но также может стать причиной ряда сложностей вроде синхронизации.</li><li><b>Проектирование и реализация</b> — это решения, которые затрагивают согласованность в создании и развёртывании, обслуживание, администрирование, повторное использование компонентов и подсистем.</li><li><b>Управление и мониторинг</b> — обязательные действия, направленные на отслеживание и контроль системы при условии, что облачные приложения выполняются удалённо, где полный контроль над инфраструктурой отсутствует.</li></ul><h2>Дополнительно</h2><p>Отдельно следует упомянуть работу с прокси, файрволом, различными веб-серверами, балансировкой нагрузки, кэшированием, а также инструментами CI/CD и мониторинга. Всё это подробнее отражено в дорожной карте.</p><h2>Заключение</h2><p>Так как стать DevOps-инженером в 2022 году? Следует знать хотя бы один язык программирования, что позволит автоматизировать процессы, разбираться в нюансах различных операционных систем и уметь работать с терминалом, знать о протоколах шифрования и передачи данных, иметь навык работы с популярными инструментами контейнеризации и оркестрации, а также разбираться в нюансах разработки облачных приложений.</p>]]></content:encoded>
    </item>
    <item>
      <title>Программирование на Java с нуля: дорожная карта разработчика</title>
      <link>https://tproger.ru/articles/java-roadmap</link>
      <comments>https://tproger.ru/articles/java-roadmap?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Ланский]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/java-roadmap</guid>
      <description><![CDATA[<p>Дорожная карта изучения Java, составленная с факультетом Java-разработки GeekBrains: синтаксис, базовые конструкции и дальнейшие направления.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/java-roadmap">Программирование на Java с нуля: дорожная карта разработчика</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 15 Sep 2020 11:50:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>Java уверенно занимает лидирующие места в списках самых популярных и востребованных языков программирования. Этот язык используется в широком спектре задач: десктопных приложениях, веб- и Android-разработке, в работе с серверами и встраиваемыми системами. Мы вместе с <a href="https://geekbrains.ru/geek_university/java?utm_source=tproger&amp;utm_medium=special&amp;utm_content=gu_java">факультетом Java-разработки GeekBrains</a> составили дорожную карту по Java, которая поможет систематизировать изучение этого языка.</p><figure><img src="https://media.tproger.ru/uploads/2020/09/Java-4.png" alt="" /></figure><ol><li><a href="https://tproger.ru/#part1">Базовые темы для изучения Java с нуля</a></li><li><a href="https://tproger.ru/#part2">Ресурсы для изучения программирования на Java по сферам разработки</a></li><li><a href="https://tproger.ru/#part3">Инструменты Java-разработчика</a></li><li><a href="https://tproger.ru/#part4">Фреймворки для разработки на Java</a></li><li><a href="https://tproger.ru/#part5">Дополнительные материалы для изучения Java</a></li><li><a href="https://tproger.ru/#part6">Что дальше?</a></li></ol><h2>Базовые темы для изучения Java с нуля</h2><p>Начать обучение Java с нуля стоит с того же, с чего начинается изучение любого языка: синтаксиса, терминологии, основных конструкций, операций, условий и циклов. Перед тем, как переходить к специфическим задачам, которые зависят от сферы программирования на Java, нужно изучить:</p><ul><li><a href="https://tproger.ru/translations/oop-principles-cheatsheet/">принципы ООП</a>;</li><li>обобщения;</li><li>рекурсию;</li><li>работу с памятью;</li><li><a href="https://tproger.ru/blogs/jvm-insides/">виртуальную машину Java</a>;</li><li>базы данных и СУБД;</li><li>многопоточность;</li><li>коллекции;</li><li>лямбда-выражения;</li><li>исключения.</li></ul><p>Не стоит забывать про Maven — инструмент сборки и управления проектом, а также про систему контроля версий Git. Кроме того, любое приложение нужно уметь тестировать и грамотно документировать.</p><p>После изучения основ вам могут понадобиться <a href="https://javarush.ru/groups/posts/496-patternih-proektirovanija-v-java">шаблоны (паттерны) проектирования</a>. Также вам может быть интересен <a href="https://netflix.github.io/">Netflix Stack</a> — набор сервисов с открытым исходным кодом для создания и поддержки приложений.</p><p>Дальнейший путь обучения программированию на Java зависит от направления, в котором вы планируете развиваться. Мы собрали необходимые для этого материалы: курсы Java, книги для различных направлений и подкасты. А ниже вы найдёте описания инструментов и фреймворков для Java-разработки.</p><h2>Ресурсы для изучения программирования на Java по сферам разработки</h2><h3>Веб-разработка</h3><p>Java программирование в веб представлено в виде сервлетов. Эта технология расширяет веб-сервер.</p><p>Сервлеты — особый тип Java-программ, который выполняется внутри <a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80_%D1%81%D0%B5%D1%80%D0%B2%D0%BB%D0%B5%D1%82%D0%BE%D0%B2">веб-контейнера</a>. Они являются промежуточным звеном между запросами клиента и сервером. Также могут пригодиться фреймворки: Spring и Netty.</p><h3>Android разработка</h3><p>Разработка приложений под Android — ключевая особенность Java. При этом речь идёт не только о смартфонах, но и о планшетах, смарт-часах, телевизорах и приставках. API Android написана на API Java, поэтому при разработке вы можете использовать всё те же инструменты, что и при нативной разработке. Если вас заинтересовало Java обучение именно в этом направлении, то рекомендуем ознакомиться с этими материалами:</p><h3>Нативная разработка</h3><p>Не стоит забывать и про программирование на Java для десктопов. Основная платформа для десктопной разработки — JavaFX.</p><h3>Big Data</h3><p>Анализ больших данных — процесс обработки большого набора данных для поиска скрытых закономерностей, трендов рынка и предпочтений клиентов. И в этом Java тоже преуспевает.</p><h2>Инструменты Java-разработчика</h2><ul><li><a href="https://junit.org/junit5/">JUnit</a> — лидер среди библиотек для модульного тестирования ПО на Java.</li><li><a href="https://spotbugs.github.io/">SpotBugs</a> — инструмент для статического анализа кода, который находит в приложении потенциальные ошибки.</li><li><a href="https://git-scm.com/">Git</a> — основная система контроля версий.</li><li><a href="https://www.yourkit.com/">YourKit</a> — профайлер для Java-приложений. Позволяет отследить утечку памяти, сравнить производительность разных вариантов кода и диагностировать иные проблемы производительности.</li><li><a href="https://logging.apache.org/log4j/2.x/">Log4j</a> — инструмент для логирования.</li><li><a href="https://www.sonarsource.com/java/">Sonar</a> или <a href="https://checkstyle.org/">Checkstyle</a> — инструменты для линтинга кода (анализа качества стиля кода).</li><li><a href="http://www.javadecompilers.com/">Java Decompiler</a> — инструмент, который восстанавливает исходный код Java из class-файлов.</li><li><a href="https://gradle.org/">Gradle</a> и <a href="https://maven.apache.org/">Maven</a> — инструменты для автоматизации проектов и облегчения процесса сборки.</li><li><a href="https://groovy-lang.org/">Groovy</a> — объектно-ориентированный язык программирования, разработанный как дополнение к Java с возможностями Python, Ruby и Smalltalk. Имеет динамическую типизацию, замыкания, встроенный синтаксис для списков и ассоциативных массивов.</li><li><a href="https://jmeter.apache.org/">JMeter</a> — инструмент нагрузочного тестирования.</li><li><a href="https://visualvm.github.io/">VisualVM</a> — визуальная интеграция инструментов командной строки JDK и лёгкие возможности профилирования.</li><li><a href="https://tomcat.apache.org/">Apache Tomcat</a> или <a href="https://www.eclipse.org/jetty/">Jetty</a> — контейнеры для сервлетов (надстройка над веб-сервером).</li></ul><h2>Фреймворки для разработки на Java</h2><h3>Spring</h3><p>Spring является одной из самых популярных платформ для Java. Преимущественно она используется для создания веб-приложений, хотя отлично справляется и с другими задачами. С ней программирование на Java становится лёгким даже в высоконагруженных приложениях.</p><p>Spring не является одним цельным фреймворком. Он представляет из себя набор модулей для решения конкретных задач. Вот некоторые из них:</p><ul><li>конфигурирование компонентов приложений и управление жизненным циклом объектов;</li><li>доступ к данным;</li><li>удалённый доступ;</li><li>управление транзакциями;</li><li>аутентификация.</li></ul><h3>Netty</h3><p>Это асинхронный событийно-ориентированный сетевой фреймворк для простой разработки высокоэффективных клиент-серверных протоколов. На сегодняшний момент его используют Apple, Google, Facebook и Twitter.</p><h3>Vaadin</h3><p>В веб-разработке Java обычно используется на серверной части. Но не в этом случае. Фреймворк Vaadin имеет две модели разработки: для сервера и для клиента. Модель работы приложений на Vaadin очень схожа с моделью работы нативных приложений Java — это существенно упрощает процесс разработки. Для генерации кода на стороне клиента фреймворк использует Google Web Toolkit.</p><h3>Grails</h3><p>Этот фреймворк создан для языка Groovy, который, в свою очередь, написан на Java. Такая иерархия надстроек отлично облегчает разработку приложений. Так что если вам нужно создать высокоэффективное приложение с низким порогом вхождения — этот фреймворк именно для вас.</p><h2>Дополнительные материалы для изучения Java</h2><h2>Что дальше?</h2><p>Конечно, что прочесть несколько книг и посмотреть видеокурсы недостаточно. Вам предстоит написать большое множество программ, ведь знания без опыта почти бесполезны. Вносите вклад в <a href="https://github.com/trending/java">open source</a> проекты, посещайте конференции и обменивайтесь опытом на форумах. Или поступайте <a href="https://geekbrains.ru/geek_university/java?utm_source=tproger&amp;utm_medium=special&amp;utm_content=gu_java">на факультет Java-разработки в GeekUniversity</a> — там вас научат всему, что необходимо, чтобы <a href="https://tproger.ru/articles/kak-stat-programmistom/">стать Java-программистом</a>, и помогут получить работу после курса.</p>]]></content:encoded>
    </item>
    <item>
      <title>Разработка на Python с нуля: роадмап программиста</title>
      <link>https://tproger.ru/articles/python-roadmap</link>
      <comments>https://tproger.ru/articles/python-roadmap?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Картофельный Повелитель]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/python-roadmap</guid>
      <description><![CDATA[<p>Пошаговый роадмап Python-разработчика: от основ синтаксиса и ООП до веб-разработки на Django, Flask и Data Science. Книги, инструменты и курсы для старта.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/python-roadmap">Разработка на Python с нуля: роадмап программиста</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 11 Aug 2020 12:44:34 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>Ключевые выводы:</b><br />- Python — один из самых популярных языков для старта в программировании благодаря простому синтаксису<br />- Дорожная карта включает базовые навыки (Git, ООП, тестирование) и специализацию (веб, Data Science)<br />- Для веб-разработки на Python используют Django и Flask, для Data Science — NumPy, Pandas, TensorFlow<br />- Практика на реальных проектах и open source — лучший способ закрепить знания</p><p>Программирование на Python с нуля: легко или не очень? По факту, изучение Python почти ничем не отличается от изучения любого другого языка. Все стандартно: установка, настройка рабочего окружения, базы данных, переменные, функции и первый «Hello World». Но дальше — круче, ведь в ход идут разделение на сферы применения, синхронное и асинхронное программирование, тестирование и сопутствующие инструменты, часто индивидуальные для каждого языка.</p><h2>Дорожная карта Python</h2><p>Чтобы окончательно не запутаться, нужно все структурировать. Именно поэтому мы совместно с <a href="https://geekbrains.ru/geek_university/python?utm_source=tproger&amp;utm_medium=special&amp;utm_content=gu_python">Факультетом Python-разработки GeekUniversity</a> составили дорожную карту, которая поможет в изучении Python с нуля.</p><figure><img src="https://media.tproger.ru/uploads/2020/08/pyRoadmap-scaled.jpg" alt="Дорожная карта Python-разработчика с основными навыками и направлениями" /></figure><h2>Что нужно знать Python-разработчику?</h2><p>Пласт базовых знаний и навыков включает в себя:</p><ul><li>основные навыки пользования терминалом;</li><li>понимание принципа работы <a href="https://tproger.ru/articles/python-ide">IDE</a>;</li><li>навыки работы с Git;</li><li>менеджер пакетов pip;</li><li>базы данных (ORM, CRUD-операции);</li><li>принципы ООП;</li><li><a href="https://tproger.ru/translations/python-data-types">синтаксис языка Python</a>;</li><li><a href="https://tproger.ru/translations/python-sorting">алгоритмы и структуры данных</a>;</li><li>составление документации;</li><li>модульное тестирование.</li></ul><p>Разумеется, недостаточно реализовать вывод «Hello World», чтобы разобраться в языке программирования Python, но для более глубокого понимания сперва стоит определиться с направлением, в котором вы хотите работать. Исходя из этого, подбираются дополнительные инструменты для изучения.</p><h3>Веб-разработка</h3><p>Здесь особенно популярны такие Python-фреймворки, как Django и Flask: с их помощью можно быстро создать логику бэкенда. Для начала работы хватит и одного, но не помешает знать несколько, понимать, в каких случаях они используются, где предпочесть Django, а с какой задачей лучше справится Flask, Tornado или Pyramid.</p><p>Для построения веб-приложений также пригодится знание протоколов, HTML, CSS и JavaScript.</p><h3>Django 2 в примерах</h3><p>Django — популярный Python-фреймворк для написания веб-приложений. Многие начинающие разработчики выбирают его из-за относительной простоты и легкости в развитии. Однако это совсем не означает, что фреймворк не справится с профессиональными высоконагруженными системами.</p><p>В рамках этого курса вы поэтапно изучите процесс создания полноценного приложения на Django. Помимо работы с основными компонентами фреймворка, вы научитесь грамотно подбирать и интегрировать сторонние библиотеки. Эта книга лишена непонятных, скучных и абстрактных задач — в ней только то, что вам действительно пригодится на практике.</p><p>В процессе обучения вы получите не только знания о принципах работы Django, но и опыт в разработке веб-приложений, которые в перспективе планируется расширять дополнительными инструментами.</p><p>Полезно как для начинающих разработчиков, так и для специалистов.</p><h3>Разработка веб-приложений с использованием Flask на языке Python</h3><p>В данном издании вы изучите Python-фреймворк Flask. Он относится к категории микрофреймворков — простых каркасов для веб-приложений, обладающих только базовыми возможностями. Благодаря пошаговым примерам вы сможете создать полноценное веб-приложение для социального блогинга.</p><p>Благодаря этой книге вы освоите возможности фреймворка и ознакомитесь с различными прикладными технологиями, такими как взаимодействие веб-служб и миграции баз данных.</p><p>На фоне других Flask выделяется полной свободой в разработке. Если вы уже имеете опыт работы с Python, то изучение этого фреймворка не составит никакого труда.</p><h3>Data Science</h3><p>Основы программирования на Python в разрезе Data Science следует продолжить изучением таких библиотек и фреймворков:</p><ul><li><a href="https://numpy.org/">NumPy</a></li><li><a href="https://www.tensorflow.org/">TensorFlow</a></li><li><a href="https://keras.io/">Keras</a></li><li><a href="https://pandas.pydata.org/">Pandas</a></li><li><a href="https://pytorch.org/">PyTorch</a></li><li><a href="https://matplotlib.org/">Matplotlib</a></li><li><a href="https://scikit-learn.org/stable/">scikit-learn</a></li></ul><p>Для погружения в Machine Learning на Python, обучение стоит начать с основных разделов, а именно:</p><ul><li>обучение с учителем;</li><li>обучение без учителя;</li><li>обучение с подкреплением.</li></ul><h2>Книги по теме</h2><h3>Крупномасштабное машинное обучение вместе с Python</h3><p>Хороша та книга, которая учит использовать мощные алгоритмы в машинном обучении без интеграции затратных решений или массивных вычислительных систем. Данное издание как раз об этом.</p><p>Благодаря этой книге вы познакомитесь с Scikit-Learn и научитесь работать с нейросетями с помощью библиотек Theano, TensorFlow и H2O. В процессе вы рассмотрите классификационные и регрессионные деревья, а также способы обучения нейросетей без учителя.</p><p>В книге рассмотрены принципы машинного обучения в модели MapReduce на Hadoop и Spark.</p><h3>Python для сложных задач. Наука о данных и машинное обучение</h3><p>В данной книге описаны самые различные вычислительные методы и статистические алгоритмы. Без их использования невозможна какая-либо интенсивная обработка данных и проведение исследований.</p><p>Данное пособие будет полезно тем читателям, которые уже имеют какой-либо опыт в программировании и хотят научиться правильно использовать Python в Data Science. Например, как преобразовывать определенный формат данных в файл скрипта? Как сформировать и отфильтровать эти данные и работать с ними? Как благодаря полученной информации проанализировать ситуацию, составить статистическую модель и организовать машинное обучение.</p><h3>Другие направления</h3><p>Хоть это и не включено в дорожную карту, но можно изучать Python для программирования игр, написания десктопных и мобильных приложений. Однако, несмотря на наличие соответствующих для этого инструментов, язык наиболее востребован именно в Data Science и бэкенд-разработке.</p><h2>Основные инструменты Python-разработчика</h2><p>Изучение основ Питона не может быть полноценным без набора полезных инструментов под рукой. Мы собрали небольшой список и разделили его на категории.</p><h3>Базовые</h3><ul><li><a href="https://pypi.org/project/pip/">Pip</a> — популярный менеджер пакетов в Python, с помощью которого можно устанавливать и управлять программными пакетами.</li><li><a href="https://github.com/pypa/pipenv">Pipenv</a> — инструмент для управления виртуальным окружением в Python.</li><li><a href="https://pypi.org/project/setuptools/">Setuptools</a> — целый набор инструментов для создания пакетов в Python.</li><li><a href="https://virtualenv.pypa.io/en/latest/">Virtualenv</a> — инструмент для создания виртуального окружения с пакетами.</li></ul><h3>Документация</h3><ul><li><a href="http://www.sphinx-doc.org/en/master/">Sphinx</a> — генератор документации, который изначально создавался для работы с Python, но впоследствии стал инструментом общего пользования.</li><li><a href="http://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html">autodoc</a> — расширение Sphinx для создания reStructuredText файлов из исходного кода.</li></ul><h3>Тестирование</h3><ul><li><a href="https://docs.pytest.org/en/stable/">py.test</a> — платформа для тестирования на Python со множеством функций. Инструмент автоматически находит тесты, запускает их и выводит отчеты.</li><li><a href="https://www.selenium.dev/documentation/en/webdriver/">Selenium WebDriver</a> — в тандеме с другими инструментами позволяет эффективно тестировать веб-приложений.</li><li><a href="https://docs.python.org/3/library/unittest.html">unittest</a> — модуль инструментов с настройкой используемых данных, управлением комплектами и наборами тестов, возможностью запускать тесты в графическом или текстовом режиме.</li></ul><h3>Прочие</h3><ul><li><a href="https://github.com/PyCQA/flake8">flake8</a> и <a href="https://www.sonarlint.org/">SonarLint</a> — популярные линтеры.</li><li><a href="https://github.com/pyenv/pyenv">pyenv</a> — менеджер версий Python.</li><li><a href="http://mypy-lang.org/">Mypy</a> — статический анализатор типов.</li></ul><h2>Дополнительные материалы для программирования на Python с нуля</h2><p>Чтобы обучение языку Python с нуля было максимально эффективным, следует запастись полезными ресурсами.</p><h3>Книги</h3><h4>Изучаем Python. Программирование игр, визуализация данных, веб-приложения</h4><p>Эта книга представляет из себя курс, который за короткое время даст вам все необходимые базовые знания о геймдеве, разработке веб-приложений и визуализации данных. Сначала вы узнаете об основных принципах программирования: циклы, ветвления, <a href="https://tproger.ru/articles/spiski-v-python-osnovy-i-metody/">списки</a>, классы, словари. Вы научитесь грамотно разрабатывать программы и проводить тестирование кода.</p><p>Далее вы сразу сможете применить полученные знания в 3 крупных проектах: шутер с динамической сложностью, обработка и визуализация большого объема данных, и веб-приложение на Django, гарантирующее пользователям конфиденциальность.</p><h4>Изучаем программирование на Python</h4><p>Возможно, вам уже надоели однотипные и непонятные руководства по программированию. Если да, то рекомендуем к прочтению эту книгу. Она рассчитана на начинающих разработчиков.</p><p>В процессе вы создадите полноценное веб-приложение и научитесь управлять базами данных, отслеживать и обрабатывать исключения, а также использовать контекстные менеджеры. Вы научитесь пользоваться <a href="https://tproger.ru/translations/demystifying-decorators-in-python">декораторами</a> и генераторами.</p><h4>Python 3 и PyQt 5. Разработка приложений</h4><p>В этой книге рассказывается о Python 3: функции, типы данных, операторы и принципы ООП. Также из нее вы узнаете о прикладных возможностях языка: <a href="https://tproger.ru/translations/regular-expression-python">регулярные выражения</a>, популярные инструменты стандартной библиотеки и работа с файлами. Тут вы ознакомитесь с системой SQLite, узнаете о способах доступа к базам данных и методах получения информации из них.</p><p>Много моментов посвящено модулю PyQt 5, который позволяет без лишнего труда разрабатывать приложения с графической оболочкой на Python.</p><p>Также в книге рассказывается обо всех необходимых интерфейсных компонентах: кнопки, панели, меню, текстовые поля и многое другое. Тут вы узнаете, как грамотно работать с многопоточностью и обрабатывать события.</p><h3>Курсы Python</h3><p>Отличным подспорьем для программирования на Python с основ станут видеолекции:</p><p>Но курсы программирования на Python этим не ограничиваются. Освоить базу из представленной дорожной карты Python можно в <a href="https://geekbrains.ru/geek_university/python?utm_source=tproger&amp;utm_medium=special&amp;utm_content=gu_python">онлайн-университете GeekBrains</a>, где помимо теории есть возможность прокачать и практические навыки: создать интернет-магазин, сетевой чат, поработать в команде и получить фидбек от опытных разработчиков.</p><h3>Подкасты</h3><ul><li>38 попугаев</li><li><a href="https://www.youtube.com/watch?v=60DgfVTDZJ0">Python Junior подкаст</a></li><li><a href="https://podcast.python.ru/">Moscow Python Podcast</a></li></ul><h2>Что дальше?</h2><p>Не останавливайтесь на достигнутом, ведь изучение Python с нуля — задача непростая, несмотря на всю легкость языка. Как только знания станут уверенными, переходите к использованию теории на практике. В этом поможет игра <a href="http://www.pythonchallenge.com/">Python Challenge</a>, где нужно решать задачки с помощью написания небольших программ: с каждым пройденным этапом будет увеличиваться сложность. Также вы можете поучаствовать в работе над любым <a href="https://github.com/trending/python">open source проектом</a>.</p><p>Изучайте теорию, закрепляйте практикой и переходите к реальным задачам.</p><h2>Часто задаваемые вопросы</h2><h3>Сложно ли изучить Python с нуля?</h3><p>Python считается одним из самых простых языков программирования для начинающих. Его синтаксис читается почти как английский текст, а обширная стандартная библиотека позволяет решать задачи без установки дополнительных пакетов. Большинство новичков могут написать первую работающую программу уже через несколько часов изучения.</p><h3>Сколько времени нужно, чтобы выучить Python?</h3><p>Для освоения базового синтаксиса и написания простых скриптов достаточно 2–4 недель при ежедневных занятиях по 1–2 часа. Для уверенного владения языком и выбранной специализацией (веб-разработка, Data Science) потребуется от 6 месяцев до года практики на реальных проектах.</p><h3>Какое направление Python самое востребованное?</h3><p>По данным рынка труда, наиболее востребованы Python-разработчики в области бэкенд-разработки (Django, FastAPI) и Data Science/Machine Learning. Оба направления предлагают высокие зарплаты и большое количество вакансий. Выбор зависит от ваших интересов: если нравится работа с данными — идите в DS, если нравится создавать веб-сервисы — в бэкенд.</p><h3>Нужно ли знать математику для Python?</h3><p>Для веб-разработки на Python глубокие знания математики не требуются — достаточно базовой логики и алгебры. Для Data Science и Machine Learning потребуется понимание линейной алгебры, теории вероятностей и математической статистики. Однако начать изучение Python можно и без серьезной математической подготовки, углубляя знания по мере необходимости.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как стать экспертом в Data Science: пошаговый план обучения</title>
      <link>https://tproger.ru/curriculum/data-science-expert-plan</link>
      <comments>https://tproger.ru/curriculum/data-science-expert-plan?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Туренко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/data-science-expert-plan</guid>
      <description><![CDATA[<p>Смотрим на последние тренды в Data Science и раскладываем по полочкам этапы обучения: от выбора языка и библиотек до машинного обучения и нейронных сетей.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/data-science-expert-plan">Как стать экспертом в Data Science: пошаговый план обучения</a>»</p>]]></description>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 27 Jun 2019 10:34:40 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мало кто может предсказывать события до ста процентов верно. Но дата-сайнтисты научились. А мы нашли последние тренды Data Science и составили план для тех, кто хочет глубоко изучить эту область.</p><h2>Выбор языка</h2><p>Сейчас в науке о данных используются два основных языка: Python и R. Язык R применяется для сложных финансовых анализов и научных исследований, потому его глубокое изучение можно отложить на потом.</p><p>На начальном этапе можно остановиться на изучении основ:</p><ul><li>нюансы работы RStudio;</li><li>библиотеки Rcmdr, rattle и Deducer;</li><li>типы данных контейнеров, векторы и первичные типы данных;</li><li>factors, структуры и матрицы.</li></ul><p>Быстро разобраться в теории языка R поможет сайт <a href="https://www.statmethods.net/">Quick-R</a>.</p><p>Python популярен больше: на нём проще научиться писать код и для него написано множество пакетов визуализации данных, машинного обучения, обработки естественного языка и сложного анализа данных.</p><p>Что важно освоить в Python:</p><ul><li>функции, классы, объекты;</li><li>структуры данных;</li><li>базовые алгоритмы и библиотеки;</li><li>качественную отладку и тестирование кода;</li><li>Jupyter Notebook;</li><li>Git.</li></ul><p>Чтобы освоить базовые понятия Python, у вас уйдёт примерно 4-6 недель при условии, что вы будете тратить на изучение 2-3 часа в день.</p><h2>Библиотеки для Python</h2><h3>NumPy</h3><p>NumPy — библиотека научных вычислений. От неё зависит почти каждый пакет Python для Data Science или Machine Learning: SciPy (Scientific Python), Matplotlib, Scikit-learn.</p><p>NumPy помогает выполнять математические и логические операции: например, в ней содержатся полезные функции для n-массивов и матриц. А ещё библиотека поддерживает многомерные массивы и высокоуровневые математические функции для работы с ними.</p><p>Зачем нужно знать математику? Почему компьютер не может сам всё посчитать?</p><p>Часто методы машинного обучения используют матрицы для хранения и обработки входных данных. Матрицы, векторные пространства и линейные уравнения — всё это линейная алгебра.</p><p>Чтобы понимать, как работают методы машинного обучения, нужно хорошо знать математику. Поэтому будет лучше пройти весь курс алгебры целиком: самостоятельно или с наставниками.</p><p>Кроме того, математика и математический анализ важны для оптимизации процессов. Зная их, проще улучшать быстроту и точность работы моделей машинного обучения.</p><p>Что важно освоить:</p><ul><li>основу линейной алгебры: линейные комбинации, зависимость и независимость, векторные точки и векторное произведение, матричные преобразования, матричное умножение,</li><li>обратные функции;</li><li>массивы;</li><li>обработку математических выражений и статических данных;<br />визуализации через Matplotlib, Seaborn или Plotly.</li></ul><p>Где можно подтянуть знания по NumPy: <a href="https://www.numpy.org/devdocs/user/quickstart.html">официальная документация</a>.</p><p>Где можно подтянуть знания по алгебре: <a href="https://ocw.mit.edu/ans7870/resources/Strang/Edited/Calculus/Calculus.pdf">Calculus (глава 11)</a>.</p><h3>Pandas</h3><p>Pandas — библиотека с открытым исходным кодом, построенная на NumPy. Она позволяет выполнять быстрый анализ, очистку и подготовку данных. Такой своеобразный Excel для Python.<br />Библиотека хорошо умеет работать с данными из разных источников: листов Excel, файлов CSV, SQL, веб-страниц.</p><p>Что важно освоить:</p><ul><li>чтение и запись множества различных форматов данных;</li><li>выбор подмножеств данных;</li><li>поиск и заполнение недостающих данных;</li><li>применение операций к независимым группам в данных;</li><li>преобразование данных в разные формы;</li><li>объединение нескольких наборов данных вместе;</li><li>расширенную функциональность временных рядов.</li></ul><p>Где можно подтянуть знания по Pandas: <a href="https://pandas.pydata.org/pandas-docs/stable/getting_started/tutorials.html">Pydata</a>.</p><h2>Базы данных и сбор информации</h2><p>Если вы уже знакомы с Python, Pandas и NumPy, можете приступать к изучению работы с базами данных и парсингу информации.</p><h3>SQL</h3><p>Несмотря на то, что <a href="https://ru.wikipedia.org/wiki/NoSQL">NoSQL</a> и <a href="https://ru.wikipedia.org/wiki/Hadoop">Hadoop</a> уже пустили корни в науку о данных, важно уметь писать и выполнять сложные запросы на SQL.</p><p>Часто необработанные данные — от электронных медицинских карт до истории транзакций клиентов — находятся в организованных коллекциях таблиц, которые называются реляционными базами данных. Чтобы быть хорошим специалистом по данным, нужно знать, как обрабатывать и извлекать данные из этих баз данных.</p><p>Нужно научиться:</p><ul><li>добавлять, удалять и извлекать данные из баз данных;</li><li>выполнять аналитические функции и преобразовывать структуры баз данных;</li><li>PostgreSQL;</li><li>MySQL;</li><li>SQL Server.</li></ul><h3>Парсинг информации</h3><p>Важно:</p><ul><li>уметь использовать методы find и find_all в парсинге страниц с помощью <a href="https://www.crummy.com/software/BeautifulSoup/bs4/doc/">Beautiful Soup</a>;</li><li>понять, как работает перебор элементов и сохранение переменных в Python;</li><li>работать с get-запросами и взаимодействовать с API.</li></ul><h2>Алгоритмы</h2><p>Быть программистом без знания алгоритмов страшно, а Data Scientist’ом — опасно. Так что если вы уже освоили Python, Pandas, NumPy, SQL и API, пора учиться применять эти технологии для исследований.</p><p>Скорость работы хорошего специалиста часто зависит от трёх факторов: от поставленного вопроса, объёма данных и выбранного алгоритма.</p><p>Потому на этом этапе важно понять алгоритмы и структуры данных Беллмана-Форда, Дейкстры, двоичного поиска (и двоичные деревья как инструмент), поиска в глубину и ширину.</p><p>Подтянуть знания поможет Tproger (<a href="https://tproger.ru/tag/algorithms/">алгоритмы</a>, <a href="https://tproger.ru/tag/algos-and-data-structs/">структуры данных</a>).</p><h2>Машинное обучение и нейронные сети</h2><p>Пора применять полученные навыки к решению реальных задач. До этого этапа важно знать математику: поиск, очистку и подготовку данных, построение моделей с точки зрения математики и статистики, их оптимизацию средствами матанализа — вот это всё.</p><p>Реальные задачи чаще всего решаются с помощью серьёзных библиотек вроде <a href="https://www.tensorflow.org/">TensorFlow</a> и <a href="https://keras.io/">Keras</a>.</p><p>Нужно освоить:</p><ul><li>предобработку данных,</li><li>линейную и логистическую регрессию,</li><li>кластеризацию и обучение без учителей,</li><li>анализ временных рядов,</li><li>деревья принятия решений,</li><li>рекомендательные системы.</li></ul><h2>Заключение</h2><p>Стать экспертом в Data Science непросто: приходится изучать множество инструментов и быть гибким, чтобы вовремя узнавать о трендах.</p>]]></content:encoded>
    </item>
    <item>
      <title>Data Engineer: учебное пособие для прохождения собеседования</title>
      <link>https://tproger.ru/curriculum/data-engineer-interview-guide</link>
      <comments>https://tproger.ru/curriculum/data-engineer-interview-guide?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Туренко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/data-engineer-interview-guide</guid>
      <description><![CDATA[<p>Детальный план обучения профессии инженера данных: задачи разного уровня сложности, видеоуроки, курсы и чек-лист для отслеживания прогресса подготовки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/data-engineer-interview-guide">Data Engineer: учебное пособие для прохождения собеседования</a>»</p>]]></description>
      <category><![CDATA[Собеседование]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 07 Jun 2019 09:43:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>Собеседование на любую техническую должность, как правило, требует подготовки и занимает немало времени. И не всегда понятно, что нужно конкретно изучать инженеру данных. Некоторые позиции требуют Hadoop, другие — SQL, а третьи — понимания статистики.</p><p>В материале собрано много ресурсов для подготовки, благодаря которым можно пройти собеседования в крупных технологических компаниях.</p><p>Вы также можете использовать <a href="https://docs.google.com/spreadsheets/d/1GOO4s1NcxCR8a44F0XnsErz5rYDxNbHAHznu4pJMRkw/edit#gid=0">чек-лист</a>, который поможет отслеживать прогресс и ничего не забыть.</p><h2>SQL</h2><p>Почти неизбежно, что вам, как инженеру данных, зададут вопросы по SQL.</p><p>Типичные вопросы:</p><ul><li>объединение с фильтрацией;</li><li>последовательные объединения;</li><li>формирование подзапросов.</li></ul><h3>Базовые задачи на знание SQL</h3><p>Эти первые несколько проблем помогут вам на разных концепциях понять, какой у вас уровень.</p><h4>Комплексные запросы</h4><p><a href="https://leetcode.com/problems/human-traffic-of-stadium/">Задача</a>: В городе X построен новый стадион. Каждый день его посещает много людей, и статистика сохраняется в виде следующих столбцов: id, дата посещения, количество людей.</p><p>Напишите запрос, чтобы отобразить записи, которые имеют 3 или более последовательных строк и количество человек более 100 (включительно).</p><p><a href="https://leetcode.com/problems/department-top-three-salaries/">Задача</a>: В таблице находится список сотрудников.</p><figure><img src="https://media.tproger.ru/uploads/2019/06/DS-dev-pic-1.jpg" alt="" /></figure><p>У каждого сотрудника есть идентификатор, а также столбец для идентификатора отдела. Напишите SQL-запрос, чтобы найти сотрудников, которые получают три самые высокие зарплаты в каждом отделе.</p><p>Дополнительно: Таблица содержит все отделы компании:</p><figure><img src="https://media.tproger.ru/uploads/2019/06/DS-dev-pic-2.jpg" alt="" /></figure><p>Для приведённых выше таблиц ваш запрос SQL должен возвращать следующие строки (порядок строк не имеет значения).</p><figure><img src="https://media.tproger.ru/uploads/2019/06/DS-dev-pic-3.jpg" alt="" /></figure><p><a href="https://leetcode.com/problems/rising-temperature/">Задача</a>: Для заданной таблицы напишите SQL-запрос, чтобы найти идентификаторы всех дат с более высокой температурой по сравнению с предыдущими датами.</p><figure><img src="https://media.tproger.ru/uploads/2019/06/DS-dev-pic-4.jpg" alt="" /></figure><p>Например, верните следующие идентификаторы для приведённой выше таблицы:</p><figure><img src="https://media.tproger.ru/uploads/2019/06/DS-dev-pic-5.jpg" alt="" /></figure><h4>Aggregation</h4><p><a href="https://leetcode.com/problems/trips-and-users/">Задача</a>: таблица Trips содержит все поездки такси. Каждая поездка имеет уникальный идентификатор, в то время как Client_Id и Driver_Id являются внешними ключами для Users Id в таблицеUsers. Статус является типом ENUM («завершено», «отменено водителем», «отменено клиентом»).</p><p>Напишите SQL запрос, чтобы найти число отменённых заявок среди незаблокированных пользователей с 1 по 3 октября 2013 года.</p><h4>Расширенные объединения (Advanced Join)</h4><p><a href="https://leetcode.com/problems/exchange-seats/">Задача</a>: Мэри — учитель в средней школе, и у неё есть таблица seat, в которой записаны имена учеников с их соответствующими местами.</p><p>Столбец ID является неизменным. Мэри хочет поменять местами соседствующих студентов.</p><p>Можете ли вы написать запрос SQL для вывода результата Мэри?</p><h4>Простые объединения (Simple Joins)</h4><p><a href="https://www.hackerrank.com/challenges/the-report/problem">Задача</a>: Кетти даёт Еве задание создать отчёт, содержащий три столбца: Имя, Оценка и Отметка. Кетти не нужны имена тех учеников, которые получили оценку ниже 8. Отчёт должен быть составлен в порядке убывания по классам — более высокие оценки вводятся первыми. Если у двух и более учеников одинаковые оценки (8–10), упорядочите их по алфавиту. Наконец, если оценка ниже 8, используйте «NULL» в качестве имени и перечислите их по оценкам в порядке убывания. Если у двух и более учеников одинаковые оценки (1–7), упорядочите учеников по их оценкам в порядке возрастания.</p><p>Напишите запрос, чтобы помочь Еве.</p><h4>Ранжирование количества строк и аналитические функции</h4><p><a href="https://leetcode.com/problems/nth-highest-salary/">Задача</a>: написать запрос SQL, чтобы получить n-ую самую высокую зарплату из таблицы Employee:</p><figure><img src="https://media.tproger.ru/uploads/2019/06/DS-dev-pic-6.jpg" alt="" /></figure><figure><img src="https://media.tproger.ru/uploads/2019/06/DS-dev-pic-7.jpg" alt="" /></figure><h4>Сложные запросы Self Join</h4><p><a href="https://www.hackerrank.com/challenges/symmetric-pairs/problem">Задача</a>: Приведена таблица, содержащая два столбца: X и Y.</p><p>Две пары (X 1 , Y 1) и (X 2 , Y 2) называются симметричными парами, если X 1 = Y 2 и X 2 = Y 1.</p><p>Напишите запрос для вывода всех таких симметричных пар в порядке возрастания величины X.</p><h3>Дополнительно</h3><p>Если вам нужно больше задач SQL:</p><ul><li><a href="https://www.hackerrank.com/challenges/occupations/problem">Задача о профессиях</a>;</li><li><a href="https://www.hackerrank.com/challenges/harry-potter-and-wands/problem">Задача об инвентаре Олливандера</a>;</li><li><a href="https://www.hackerrank.com/challenges/placements/problem">Задача о местах размещения</a>.</li></ul><p>Вы также можете посмотреть обучающие видео (на английском языке):</p><ul><li><a href="https://www.youtube.com/watch?time_continue=3&amp;v=uAWWhEA57bE">6 частых вопросов по SQL запросам на собеседовании</a>;</li><li><a href="https://www.youtube.com/watch?v=QFj-hZi8MKk">Изучение ROW_NUMBER и аналитических функций</a>;</li><li><a href="https://www.youtube.com/watch?v=G3kYPzLWtpo&amp;t=4s">Усовершенствованная реализация аналитических функций по расчёту промежуточного итога</a>;</li><li><a href="https://www.youtube.com/watch?v=XecU6Ieyu-4&amp;t=54s">Расширенная реализация аналитических функций Median</a>;</li><li><a href="https://www.youtube.com/watch?v=2-1XQHAgDsM&amp;list=PL6EDEB03D20332309">Написание основных запросов. SQL Server</a>.</li></ul><h3>Решение SQL задач после просмотра обучающих видео</h3><p>Как только вы закончите смотреть видео по SQL, посмотрите задачи ниже. Если остались пробелы, запишите темы, в которых вы ещё слабы, и больше работайте над ними.</p><ul><li><a href="https://www.hackerrank.com/challenges/binary-search-tree-1/problem">Структуры данных: бинарные деревья</a>;</li><li><a href="https://leetcode.com/problems/big-countries/">Большие страны</a>;</li><li><a href="https://leetcode.com/problems/exchange-seats/">Обмен мест</a>;</li><li><a href="https://www.hackerrank.com/challenges/weather-observation-station-18/problem">Станция наблюдения за погодой 18</a>;</li><li><a href="https://www.hackerrank.com/challenges/challenges/problem">Задача по кодированию</a>;</li><li><a href="https://www.hackerrank.com/challenges/print-prime-numbers/problem">Вывод простых чисел</a>;</li><li><a href="https://data36.com/sql-interview-questions-tech-screening-data-analysts/">Вопросы по SQL при собеседовании: 3 упражнения для технического интервью</a>.</li></ul><h3>Базы данных, ETL и хранилища данных</h3><figure><img src="https://media.tproger.ru/uploads/2019/06/DS-dev-pic-8.jpg" alt="" /></figure><p>Чтобы разобраться с вопросами по проектированию баз данных, ETL и хранилищ данных, посмотрите несколько видеороликов. А также рассмотрите несколько концепций баз данных, которые вы могли бы попробовать разработать самостоятельно.</p><p>Видео:</p><ul><li><a href="https://www.youtube.com/watch?v=I_rxqSJAj6U">Проектирование традиционной реляционной базы данных</a>;</li><li><a href="https://www.youtube.com/watch?v=--OJpdPeH80">Проектирование хранилища данных</a>;</li><li><a href="https://www.youtube.com/watch?v=sLhInuwdwcc">Рекомендации по SQL – Разработка ETL</a>.</li></ul><h3>Самостоятельная практика и возникающие проблемы</h3><p>Перечислим несколько бизнес-систем, которые вы можете попытаться разработать. Сначала рекомендуется создать реляционную базу данных, а затем подумать о том, как бы вы разработали ETL и DW, которые полагаются на неё:</p><ul><li>Приложение для знакомств;</li><li>Прокат велосипедов;</li><li>Приложения Music Streaming;</li><li>Сайта поиска работы;</li><li>Веб-сайта Udemy.</li></ul><p>Эти несколько вариантов помогут вам получить более чёткое представление о том, что вы можете практиковать в моделировании и проектировании. Прежде чем начинать, подумайте о том, как пользователи взаимодействуют с этими приложениями.</p><h2>Задачи по программированию</h2><p>Инженеры данных обычно используют несколько языков, и Python среди них наиболее распространённый. Если требуется много работать с Hadoop, то хорошо подойдёт Java, а если вы работаете в Windows, то также Powershell.</p><p>Обычно вопросы бывают двух типов: прикладные и по алгоритмам и структурам данных.</p><h3>Алгоритмы и структуры данных</h3><p>Задачи перед подготовкой:</p><ul><li><a href="https://leetcode.com/problems/sum-of-even-numbers-after-queries/">Сумма чётных чисел после выполнения запросов</a>;</li><li><a href="https://leetcode.com/problems/robot-return-to-origin/">Возвращение робота в исходную точку</a>;</li><li><a href="https://leetcode.com/problems/n-repeated-element-in-size-2n-array/">N-повторный элемент в массиве размера 2N</a>;</li><li><a href="https://leetcode.com/problems/balanced-binary-tree/">Сбалансированное бинарное дерево</a>;</li><li><a href="https://leetcode.com/problems/longest-substring-without-repeating-characters/">Самая длинная подстрока без повторяющихся символов</a>;</li><li><a href="https://leetcode.com/problems/remove-nth-node-from-end-of-list/">Удалить N-й узел из конца списка</a>;</li><li><a href="https://leetcode.com/problems/merge-k-sorted-lists/">Объединение k отсортированных списков</a>;</li><li><a href="https://leetcode.com/problems/next-permutation/">Следующая перестановка (next_permutation)</a>.</li></ul><p>Теперь, когда вы решили эти задачи, давайте начнём рассмотрение других концепций по следующим видео.</p><h4>Структуры данных</h4><ul><li><a href="https://www.youtube.com/watch?v=bum_19loj9A">Структуры данных и алгоритмы – Что такое структуры данных?</a></li><li><a href="https://www.youtube.com/watch?v=njTh_OwMljA&amp;feature=youtu.be">Структуры данных: связные списки</a>.</li><li><a href="https://www.youtube.com/watch?v=oSWTXtMglKE&amp;feature=youtu.be">Структуры данных: деревья</a>.</li><li><a href="https://www.youtube.com/watch?v=t0Cq6tVNRBA&amp;feature=youtu.be">Структуры данных: кучи</a>.</li><li><a href="https://www.youtube.com/watch?v=shs0KM3wKv8&amp;feature=youtu.be">Структуры данных: хеш-таблицы</a>.</li><li><a href="https://www.youtube.com/watch?v=wjI1WNcIntg&amp;feature=youtu.be">Структуры данных: стеки и очереди</a>.</li><li><a href="https://www.youtube.com/watch?v=DuDz6B4cqVc&amp;feature=youtu.be">Структуры данных: ускоренный курс по информатике</a>.</li><li><a href="https://www.youtube.com/watch?v=zIjfhVPRZCg">Структуры данных: Trie</a>.</li></ul><h4>Big O</h4><p><a href="https://www.youtube.com/watch?v=D6xkbGLQesk">Введение в анализ сложности алгоритмов</a></p><p>Ещё варианты прохождения интервью:</p><ul><li><a href="https://www.youtube.com/watch?v=5o-kdjv7FD0">Вопрос на собеседовании Amazon Coding – проблема рекурсивной лестницы</a>;</li><li><a href="https://www.youtube.com/watch?v=7HgsS8bRvjo">Google Coding Interview — проблема универсального дерева значений</a>;</li><li><a href="https://www.youtube.com/watch?v=GJdiM-muYqc">Google Coding Interview: первый повторяющийся символ</a>.</li></ul><h4>Задачи после изучения</h4><p>Как только вы закончили с видео, попробуйте свои силы в решении задач. Следите за тем, насколько уверенно вы себя чувствовали, работая над ними.</p><ul><li><a href="https://www.hackerrank.com/challenges/bigger-is-greater/problem">Bigger Is Greater (largeIsGreater)</a>;</li><li><a href="https://leetcode.com/problems/zigzag-conversion/">Преобразование зигзага. (ZigZag Conversion)</a>;</li><li><a href="https://leetcode.com/problems/reverse-integer/">Реверсирование цифр целого числа</a>;</li><li><a href="https://leetcode.com/problems/combination-sum-ii/">Combination Sum II</a>;</li><li><a href="https://leetcode.com/problems/multiply-strings/">Умножение строк</a>;</li><li><a href="https://www.hackerrank.com/challenges/larrys-array/problem">Массив Ларри</a>;</li><li><a href="https://www.hackerrank.com/challenges/short-palindrome/problem">Короткий палиндром</a>;</li><li><a href="https://leetcode.com/problems/valid-number/">Валидное число</a>.</li></ul><p>Если вы всё ещё чувствуете, что нуждаетесь в помощи, подумайте о прохождении курса по алгоритмам и структурам данных.</p><h3>Задачи оперативного программирования</h3><p>Будет полезно знать, как использовать массивы и словари. Вот некоторые задачи, которые отлично подходят для подготовки.</p><ul><li><a href="https://www.hackerrank.com/challenges/kangaroo/problem">Задача с кенгуру</a>;<br /><a href="https://media.tproger.ru/uploads/2019/06/DS-dev-pic-10.jpg"></a></li><li><a href="https://www.hackerrank.com/challenges/breaking-best-and-worst-records/problem">Побить рекорды</a>;</li><li><a href="https://www.hackerrank.com/challenges/find-a-string/problem">Найти строку</a>;</li><li><a href="https://www.hackerrank.com/challenges/itertools-permutations/problem">itertools.permutations ()</a>;</li><li><a href="https://www.hackerrank.com/challenges/no-idea/problem">Без понятия!</a></li><li><a href="https://www.hackerrank.com/challenges/day-of-the-programmer/problem">День программиста</a>;</li><li><a href="https://www.hackerrank.com/challenges/climbing-the-leaderboard/problem">Таблица лидеров</a>;</li><li><a href="https://www.hackerrank.com/challenges/word-order/problem">Порядок слов</a>;</li><li><a href="https://www.hackerrank.com/challenges/sherlock-and-squares/problem">Шерлок Холмс и Квадраты чисел</a>;</li><li><a href="https://www.hackerrank.com/challenges/equality-in-a-array/problem">Выровнять массив</a> (функция equalize Array);</li><li><a href="https://www.hackerrank.com/challenges/apple-and-orange/problem">Яблоки и апельсины</a>;</li><li><a href="https://tproger.ru/tag/python/">Python. Больше практики.</a></li></ul><figure><img src="https://media.tproger.ru/uploads/2019/06/DS-dev-pic-11.jpg" alt="" /></figure><h2>Проектирование систем</h2><p>Вопросы по проектированию систем встречаются не так часто. Тем не менее, лучше быть к ним готовым.</p><p>Потратив некоторое время на просмотр видео, вы будете готовы ко всему, что интервьюер может попросить вас сделать:</p><ul><li><a href="https://www.youtube.com/watch?v=fMZMm_0ZhK4">Крошечный URL</a>;</li><li><a href="https://www.youtube.com/watch?v=DSGsa0pu8-k&amp;feature=youtu.be">Проектирование автостоянки</a>;</li><li><a href="https://www.youtube.com/watch?v=vvhC64hQZMk">Whats App</a>;</li><li><a href="https://www.youtube.com/watch?v=umWABit-wbk&amp;feature=youtu.be">Uber design</a>;</li><li><a href="https://www.youtube.com/watch?v=QmX2NPkJTKg">Instagram</a>;</li><li><a href="https://www.youtube.com/watch?v=xQnIN9bW0og">Tinder</a>.</li></ul><h2>Курсы</h2><p>Если вы разобрали все задачи и посмотрели видеоролики, но по-прежнему не чувствуете уверенности, подумайте о прохождении курсов. Они, скорее всего, будут охватывать те же понятия, что и видео, однако полезно услышать одну и ту же информацию из нескольких источников.</p><p>Англоязычные курсы на Udemy:</p><ul><li>Bootcamp «Интервью программиста»: алгоритмы + структуры данных.</li><li>Концепции хранилища данных: от базовых до расширенных.</li><li>Структуры данных и алгоритмы Bootcamp.</li></ul><h2>Заключение</h2><p>Надеемся, что этот обзор поможет вам подготовиться к собеседованию на должность Data Engineer. Если вам нужен контрольный список, вы можете найти его <a href="https://docs.google.com/spreadsheets/d/1GOO4s1NcxCR8a44F0XnsErz5rYDxNbHAHznu4pJMRkw/edit#gid=0">здесь</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Arduino: выбор платы, подключение и первая программа</title>
      <link>https://tproger.ru/curriculum/arduino-quick-start</link>
      <comments>https://tproger.ru/curriculum/arduino-quick-start?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Туренко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/arduino-quick-start</guid>
      <description><![CDATA[<p>Электронная платформа с открытым исходным кодом на микроконтроллерах семейства AVR: из чего состоят платы, как их выбирать и как начать с ними работать.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/arduino-quick-start">Arduino: выбор платы, подключение и первая программа</a>»</p>]]></description>
      <category><![CDATA[Hardware]]></category>
      <category><![CDATA[Arduino]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 20 Mar 2019 10:35:30 GMT</pubDate>
      <content:encoded><![CDATA[<p>Arduino — это электронная платформа с открытым исходным кодом, которая позволяет взаимодействовать с окружающим миром. Благодаря ей можно создать всё, что придёт в голову — от простых электронных игрушек и автоматизации быта до электронной начинки боевого робота для состязаний, управляемого силой мысли (без шуток).</p><h2>Из чего состоит Arduino?</h2><p>На аппаратном уровне это серия смонтированных плат, мозгом которых являются <a href="https://arduinoplus.ru/avr/">микроконтроллеры семейства AVR</a>. Подробнее о том, <a href="https://tproger.ru/explain/difference-between-mc-and-mpu/">чем микроконтроллер отличается от микропроцессора</a>.</p><p>Платы имеют на борту всё необходимое для комфортной работы, но их функциональности часто бывает недостаточно. Чтобы сделать свой проект более интерактивным, можно использовать различные модули и платы расширений, совместимые с платформой Arduino. Сюда входят датчики (температуры, освещения, влаги, газа/дыма, атмосферного давления), устройства ввода (клавиатуры, джойстики, сенсорные панели) и вывода (сегментные индикаторы, LCD/TFT дисплеи, светодиодные матрицы).</p><p>На программном уровне платформа Arduino представляет собой бесплатную среду разработки Arduino IDE. Микроконтроллеры надо программировать на языке C++, с некоторыми отличиями и облегчениями, созданными для быстрой адаптации начинающих. Компиляцию программного кода и прошивку микроконтроллера среда разработки берёт на себя.</p><p>Существует также <a href="http://s4a.cat/">s4a.cat</a> — сервис, базирующийся на <a href="https://scratch.mit.edu/">Scratch</a>, позволяющий более наглядно вести разработку на Arduino. Он подойдёт для обучения детей, а также если вы разово хотите создать простое устройство без изучения языка программирования Arduino и различных документаций. Для остальных же случаев лучше придерживаться традиционного процесса разработки.</p><h2>Нужно ли уметь паять?</h2><p>Знания в области электромонтажа приветствуются, но совсем не обязательны. Простые устройства на базе Arduino часто выполняются в виде макета. Для этого используется беспаечная макетная плата (англ. breadboard), на которой происходит коммутация модулей с платой Arduino с помощью перемычек.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/1e8ac772-fb47-4029-afa9-0de4c4466dc3.jpg" alt="" /><figcaption>Макетная плата на 400 отверстий (имеются шины питания по бокам). Источник: https://www.instructables.com/id/Acrylic-Arduino-Prototyping-Stand/</figcaption></figure><p>Также существуют наборы, в которые входят сразу плата Arduino (оригинальная или от стороннего производителя), макетная плата, перемычки и различные радиоэлементы, датчики, модули. Например, такой:</p><figure><img src="https://media.tproger.ru/uploads/2023/08/678561c8-8fde-4919-8a25-d74b4fa726b9.jpg" alt="" /><figcaption>Набор для изучения Arduino. Источник</figcaption></figure><h2>Какие бывают платы</h2><h3>По производителю</h3><p>Существуют как <a href="https://store.arduino.cc/">официальные версии плат Arduino</a>, так и платы от сторонних производителей. Оригинальные платы отличаются высоким качеством продукта, но и цена тоже выше. Они производятся только в Италии и США, о чём свидетельствует надпись на самой плате.</p><p>На примере самой популярной платы Arduino UNO:</p><ul><li>Оригинальная плата. Поставляется только в фирменной коробке, имеет логотип компании, на портах платы — маркировка. Цена от производителя 20 €.</li></ul><figure><img src="https://media.tproger.ru/uploads/2023/08/a26b5a2e-2627-46a6-b2a5-5456d0756b58.jpg" alt="" /><figcaption>Оригинальная плата Arduino UNO. Источник: https://store.arduino.cc/arduino-uno-rev3</figcaption></figure><ul><li>Плата от стороннего производителя. Качество хуже, однако цена начинается от 150 рублей. Качество платы может отразиться на её работоспособности в дальнейшем. Хоть это и редкость, но плата и вовсе может не работать «из коробки» — всё зависит от добросовестности изготовителя и продавца. Для работы с подобными платами требуется драйвер CH340, который находится в свободном доступе. Во всём остальном процесс разработки идентичен процессу разработки на оригинальных платах.</li></ul><figure><img src="https://media.tproger.ru/uploads/2023/08/25c3d0e9-cfb8-4080-8bd3-21b50809eb51.jpg" alt="" /><figcaption>Плата Arudino UNO от стороннего производителя. Источник: https://ht.azurewebsites.net/p/956/arduino-uno-smd-clone-board</figcaption></figure><h3>По назначению</h3><p>У платы UNO достаточно портов для реализации большинства проектов. Однако иногда возможностей UNO может быть недостаточно, а иногда — избыточно. По этой причине как оригинальный, так и сторонние производители выпускают большое количество плат, различающихся характеристиками микроконтроллера, количеством портов и функциональным назначением.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/1eb8d40d-d9f3-441d-97b3-1d7afe148760.jpg" alt="" /><figcaption>Различные платы Arduino. Источник: https://arduinoplus.ru/populyarnie-kontrollery-arduino/</figcaption></figure><p>Самые популярные из них:</p><ul><li>Arduino Nano — различие с UNO только в конструктивном исполнении. Nano меньше.</li><li>Arduino Mega — плата на базе мощного микроконтроллера. Имеет большое количество портов.</li><li>Arduino Micro — имеет встроенную поддержку USB-соединения, а потому может использоваться как HID-устройство (клавиатура, мышь, MIDI-устройство).</li><li>Arduino Ethernet — имеет возможность подключения к сети через Ethernet-провод. На плате также расположен слот для microSD карточки.</li><li>Arduino Mini — по характеристикам немного уступает UNO. Преимуществом платы является её миниатюрное исполнение.</li><li>Arduino Due — плата на базе 32-разрядного ARM микроконтроллера. Имеет преимущество в производительности по сравнению с остальными.</li><li>Arduino LilyPad — форм-фактор позволяет использовать плату в предметах одежды и текстиля.</li><li>Arduino Yún — «нужно было ставить линукс…». Имеет поддержку дистрибутива Linux, встроенную поддержку Ethernet и Wi-Fi, слот для microSD. Как и Micro, имеет встроенную поддержку USB-соединения.</li></ul><h2>Установка ПО</h2><p>После выбора необходимой платы нужно установить бесплатную среду разработки Arduino IDE, которую можно найти на официальном сайте, а также, по необходимости, драйвер CH340.</p><p>Недавно открылась облачная платформа Arduino Create, которая покрывает большинство этапов разработки (от идеи до сборки). Вам не нужно ничего устанавливать на свой компьютер, всё необходимое платформа берёт на себя. В первую очередь — онлайн редактор кода.</p><p>В Arduino Create имеется доступ к обучающим материалам, проектам. Вы сможете общаться с профессионалами и помогать новичкам.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/38a83b00-1814-4474-a323-a304b31dba39.png" alt="" /><figcaption>Среда разработки Arduino IDE</figcaption></figure><h2>Особенности программирования на платформе Arduino</h2><h3>Термины</h3><p>Программный код для Arduino принято называть скетчами (англ. sketches). У скетчей есть два основных метода: setup() и loop(). Первый метод автоматически вызывается после включения/сброса микроконтроллера. В нём происходит инициализация портов и различных модулей, систем. Метод loop() вызывается в бесконечном цикле на протяжении всей работы микроконтроллера.</p><p>Порты — неотъемлемая часть любого микроконтроллера. Через них происходит взаимодействие микроконтроллера с внешними устройствами. С программной стороны порты называются пинами. Любой пин может работать в режиме входа (для дальнейшего считывания напряжения с него) или в режиме выхода (для дальнейшей установки напряжения на нём).</p><p>Любой пин работает с двумя логическими состояниями: LOW и HIGH, что эквивалентно логическому нулю и единице соответственно. У некоторых портов есть встроенный <a href="https://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE-%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C">АЦП</a>, что позволяет считывать аналоговый сигнал со входа (например, значение переменного резистора). Также некоторые пины могут работать в режиме <a href="https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%80%D0%BE%D1%82%D0%BD%D0%BE-%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%D0%BD%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F">ШИМ</a> (англ. PWM), что позволяет устанавливать аналоговое напряжение на выходе. Обычно функциональные возможности пина указываются на маркировке самой платы.</p><h3>Основные функции</h3><p>Для базовой работы с платой в библиотеке Arduino есть следующие функции:</p><ul><li>pinMode(PIN, type) — указывает назначение конкретного пина PIN (значение type INPUT — вход, OUTPUT — выход);</li><li>digitalWrite(PIN, state) — устанавливает логическое состояние на выходе PIN (state LOW — 0, HIGH — 1);</li><li>digitalRead(PIN) — возвращает логическое состояние со входа PIN (LOW — 0, HIGH — 1);</li><li>analogWrite(PIN, state) — устанавливает аналоговое напряжение на выходе PIN (state в пределах от 0 до 255);</li><li>analogRead(PIN) — возвращает значение аналогового уровня сигнала со входа PIN (пределы зависят от разрядности встроенного АЦП. Обычно разрядность составляет 10 бит, следовательно, возвращаемое значение лежит в пределах от 0 до 1023);</li><li>delay(ms) — приостанавливает исполнение скетча на заданное количество миллисекунд;</li><li>millis() — возвращает количество миллисекунд после момента запуска микроконтроллера.</li></ul><p>В остальном процесс программирования на Arduino такой же, как на стандартном C++.</p><h2>Пишем первую программу</h2><p>Вместо всем привычных Hello World’ов в Arduino принято запускать скетч Blink, который можно найти в Файл→Примеры→01.Basics→Blink. Там же можно найти множество других учебных скетчей на разные темы.</p><p>Почти на всех платах размещён светодиод, номер пина которого содержится в переменной LED_BUILTIN. Его можно использовать в отладочных целях. В следующем скетче будет рассмотрен пример управления таким светодиодом.</p><p>Рассмотрим скетч Blink:</p><h3>Прошивка</h3><p>После написания необходимо «залить» скетч на микроконтроллер. Как уже говорилось, платформа Arduino берёт весь процесс прошивки микроконтроллера на себя — вам лишь необходимо подключить плату к компьютеру.</p><p>Перед прошивкой микроконтроллера нужно выбрать вашу плату из списка в IDE. Делается это во вкладке Инструменты→Плата. Большинство существующих плат уже там есть, но при необходимости можно добавлять другие через Менеджер Плат.</p><p>После этого нужно подключить плату Arduino к любому USB-порту вашего компьютера и выбрать соответствующий порт во вкладке Инструменты→Порт.</p><p>Теперь можно приступать к прошивке микроконтроллера. Для этого достаточно нажать кнопку Загрузка, либо зайти на вкладку Скетч→Загрузка. После нажатия начнётся компиляция кода, и в случае отсутствия ошибок компиляции начнётся прошивка микроконтроллера. Если все этапы выполнены правильно, на плате замигает светодиод с периодом и интервалом в 1 сек.</p><h2>Обмен данными с компьютером</h2><p>У всех плат Arduino есть возможность обмена информацией с компьютером. Обмен происходит по USB-кабелю — никаких дополнительных «плюшек» не требуется. Нам нужен класс Serial, который содержит все необходимые функции. Перед работой с классом необходимо инициализировать последовательный порт, указав при этом скорость передачи данных (по умолчанию она равна 9600). Для отправки текстовых данных в классе Serial существуют небезызвестные методы print() и println(). Рассмотрим следующий скетч:</p><p>В Arduino IDE есть Монитор порта. Запустить его можно через Инструменты→Монитор порта. После его открытия убедитесь, что Монитор работает на той же скорости, которую вы указали при инициализации последовательного порта в скетче. Это можно сделать в нижней панели Монитора. Если всё правильно настроено, то ежесекундно в Мониторе должна появляться новая строка «T for Tproger». Обмен данными с компьютером можно использовать для отладки вашего устройства.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/5b91847e-2dcc-46bf-a00e-e0eb040f6737.jpg" alt="" /></figure><p>Информацию на стороне компьютера можно не только получать, но и отправлять. Для этого рассмотрим следующий скетч:</p><p>Прошиваем микроконтроллер и возвращаемся в Монитор порта. Вводим в верхнее поле 1 и нажимаем Отправить. После этого на плате должен загореться светодиод. Выключаем светодиод, отправив с Монитора 0. Если же отправить символ T, в ответ мы должны получить строку «proger».</p><p>Таким способом можно пересылать информацию с компьютера на Arduino и обратно. Подобным образом можно реализовать <a href="http://geekmatic.in.ua/arduino_software_uart">связь между двумя Arduino</a>.</p><h2>А как подключать модули?</h2><p>Для работы с датчиками и модулями их изготовители создают специальные библиотеки. Они служат для простой интеграции модулей в вашу систему. Подключение библиотеки возможно с zip файла или с помощью Менеджера Библиотек.</p><p>Однако большое количество датчиков являются бинарными, т. е. считывать информацию с них можно простой функцией digitalRead().</p><h2>Что изучить дальше?</h2><ul><li><a href="http://arduino.ru/Reference">Синтаксис библиотеки Arduino</a>.</li><li><a href="http://robotday.ru/2015/04/12/%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%8B-%D0%B8-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B-%D0%B2-arduino/">Для более сложных архитектур может пригодиться ООП</a>.</li><li><a href="https://create.arduino.cc/projecthub">Примеры проектов</a>.</li><li><a href="https://svaring.com/soldering/platy/maketnaja-plata-bez-pajki">Работа на макетной плате</a>.</li><li><a href="http://electrik.info/microcontroller/1447-samye-populyarnye-datchiki-dlya-arduino.html">Основные модули и датчики</a>.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Хочу научиться программировать на PHP. С чего начать?</title>
      <link>https://tproger.ru/curriculum/php-beginner</link>
      <comments>https://tproger.ru/curriculum/php-beginner?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Наташа Маркова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/php-beginner</guid>
      <description><![CDATA[<p>Подборка курсов, книг и ключевых тем языка для изучения PHP с нуля, а также путь до успешного прохождения первого собеседования.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/php-beginner">Хочу научиться программировать на PHP. С чего начать?</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 23 Feb 2019 10:19:15 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рассказываем, что делать, если вы хотите изучить PHP с нуля: <a href="https://tproger.ru/articles/kak-stat-programmistom/">с чего начать путь программиста</a>, как продолжить и успешно пройти первое собеседование.</p><h2>Зачем учить PHP?</h2><p>Среди главных преимуществ языка:</p><ul><li>простота и низкий порог вхождения;</li><li>эффективность для решения задач веб-разработки;</li><li>множество удобных фреймворков;</li><li>востребованность навыков: на рынке есть много вакансий как для Junior PHP-разработчиков, так и для опытных Senior’ов;</li><li>возможность использования в изолированной среде;</li><li>большое количество материалов для изучения языка, активное сообщество.</li></ul><p>С другой стороны, язык часто критикуют за несогласованный синтаксис функций, отсутствие обратной совместимости между версиями, многопоточности и поддержки многобайтовых кодировок в ядре.</p><h2>Что учить?</h2><ul><li><a href="http://php720.com/">основы языка: синтаксис, типы данных, переменные, функции, константы, массивы, объекты, выражения</a>;</li><li><a href="https://ru.hexlet.io/courses/html">основы HTML, CSS и веб-дизайна</a>;</li><li>реляционные <a href="https://tproger.ru/tag/db/">БД</a>;</li><li><a href="https://tproger.ru/tag/linux/">Linux</a>, <a href="https://habr.com/ru/post/215117/">HTTP</a>, <a href="https://nginx.org/ru/docs/beginners_guide.html">Nginx</a>, Apache;</li><li><a href="https://wiki.rookee.ru/ftp/">FTP</a>, <a href="https://tproger.ru/curriculum/git-guide/">Git</a> и другие инструменты;</li><li><a href="https://tproger.ru/translations/design-patterns-for-beginners/">шаблоны проектирования</a>;</li><li><a href="https://ru.wikipedia.org/wiki/Список_ORM-библиотек#PHP">Object-relational mapping (ORM)</a>;</li><li><a href="https://www.internet-technologies.ru/articles/shablon-proektirovaniya-mvc-i-php-chast-1.html">Model-View-Controller (MVC)</a>;</li><li><a href="https://tproger.ru/translations/web-frameworks-how-to-get-started/">фреймворки и микрофреймворки</a>;</li><li><a href="https://tproger.ru/tag/testing/">тестирование</a>;</li><li>средства виртуализации: <a href="https://iamdroid.net/ru/blog/vagrant">Vagrant</a>, <a href="https://tproger.ru/translations/docker-concepts/">Docker</a>.</li></ul><h2>Где писать код?</h2><h3>IDE</h3><p>Попробуйте каждую среду разработки и поймёте, с какой платформой вам комфортнее всего работать:</p><ul><li><a href="https://www.jetbrains.com/phpstorm/">PHPStorm</a>;</li><li><a href="https://netbeans.org/">Netbeans</a>;</li><li><a href="http://www.aptana.com/">Aptana Studio</a>;</li><li><a href="https://www.eclipse.org/">Eclipse</a>.</li></ul><h3>Редакторы кода для PHP-проектов</h3><ul><li><a href="https://www.sublimetext.com/">Sublime Text</a>;</li><li><a href="https://code.visualstudio.com/">Visual Studio Code</a>;</li><li><a href="https://atom.io/">Atom</a>;</li><li><a href="https://panic.com/coda/">Coda</a>;</li><li><a href="http://www.jedit.org/">jEdit</a>;</li><li><a href="http://www.pnotepad.org/">Programmer’s Notepad</a>;</li><li><a href="https://www.activestate.com/products/komodo-ide/downloads/edit/">Komodo Edit</a>.</li></ul><h2>Где учить?</h2><h3>Учебники</h3><p>Ещё книги по PHP — в <a href="https://tproger.ru/books/php-books/">нашей подборке</a>.</p><h3>Онлайн-курсы</h3><ul><li><a href="https://ru.hexlet.io/professions/php">Хекслет</a>;</li><li><a href="https://geekbrains.ru/geek_university/web">Geekbrains и Mail.ru</a>;</li><li>FructCode;</li><li>PHP UP.</li></ul><h2>Всё выучил, что дальше?</h2><ul><li>Проходите <a href="https://tproger.ru/quiz/php-test/">тесты на знание PHP</a>.</li><li>Попробуйте найти заказчика на небольшой простой сайт. Если не найдёте — сделайте «для себя». Экспериментируйте с кодом, добавляйте эффекты, спрашивайте советы на профильных форумах. Купите домен и арендуйте хостинг, опубликуйте сайт. Расскажите о нём на тех же форумах и попросите оценить.</li><li>Следите за вакансиями PHP-программистов на Хантиме, hh.ru, <a href="https://tproger.ru/jobs/?category=1498">у нас на Tproger</a> и других ресурсах. Решайте тестовые задачи, <a href="https://tproger.ru/tag/job-interview/">ходите на собеседования</a>.</li><li>Найдите наставника. Идеально, если вы будете учиться под руководством опытного программиста с хорошими коммуникативными навыками. Им может быть ваш первый работодатель, знакомый с форума, преподаватель курса PHP. Взамен предлагайте небольшую скидку на свои услуги. Так вы быстрее освоитесь в профессии и заведёте полезные связи. А ещё со временем такое сотрудничество может вылиться в какой-то большой проект.</li><li>Посещайте конференции, хакатоны, курсы, вебинары, конкурсы. Найти подходящее событие для программистов можно <a href="https://tproger.ru/events/">у нас</a>.</li></ul><h2>А ещё?</h2><p>Не заставляйте себя всё время сидеть за изучением скучной теории, не пытайтесь писать код, если он «не идёт». Лучше учитесь, развлекаясь. Например, читайте наши материалы:</p><ul><li><a href="https://tproger.ru/translations/20-tips-for-php-prof/">20 вещей, которые отличают PHP-программиста от обезьянки</a></li><li><a href="https://tproger.ru/problems/">Задачи для программистов, ответы на задания различной сложности</a></li></ul><p>И играйте в <a href="https://tproger.ru/digest/learn-to-code-while-playing-games/">игры для программистов</a>. Для изучения PHP обратите внимание на <a href="https://www.codingame.com/">CodinGame</a> и <a href="https://www.codewars.com/">CodeWars</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Кто такой DevOps и как им стать: план обучения</title>
      <link>https://tproger.ru/curriculum/devops</link>
      <comments>https://tproger.ru/curriculum/devops?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/devops</guid>
      <description><![CDATA[<p>Узнайте, кто такой DevOps-инженер и что он должен знать. Пошаговый план из 17 шагов для перехода в DevOps с нуля — от Linux до Kubernetes и Docker.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/devops">Кто такой DevOps и как им стать: план обучения</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Системное администрирование]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 01 Feb 2019 14:00:20 GMT</pubDate>
      <content:encoded><![CDATA[<p>• DevOps — это культура и методология, объединяющая команды разработки и эксплуатации для ускорения доставки кода в продакшн
• Для входа в профессию нужна база: системное администрирование (Linux), сети (TCP/IP, HTTP), основы программирования и работа с БД
• Практический план из 17 шагов — от написания простого API до настройки CI/CD с Docker и Kubernetes
• Главное качество DevOps-инженера — широкий кругозор и постоянное изучение новых технологий</p><p>Кто такой DevOps-инженер, чем занимается и как им стать — рассказывает Василий Озёров, руководитель международной команды Fevlake и SVP of Infrastructure в Airpush Inc.</p><p>Если нужен более свежий и детальный маршрут обучения, посмотрите <a href="https://tproger.ru/articles/roadmap-devops-inzhenera-v-2026-godu--chto-uchit-i-v-kakom-poryadke">Roadmap DevOps-инженера в 2026 году: что учить и в каком порядке</a>. Там путь разобран слоями: от Linux, Git и Docker до Kubernetes, наблюдаемости, безопасности и GitOps.</p><ol><li><a href="https://tproger.ru/#part1">Что такое DevOps?</a></li><li><a href="https://tproger.ru/#part2">Что должен знать DevOps-инженер?</a></li><li><a href="https://tproger.ru/#part3">Как стать специалистом в DevOps?</a></li><li><a href="https://tproger.ru/#part4">Заключение</a></li><li><a href="https://tproger.ru/#faq">Часто задаваемые вопросы</a></li></ol><p>В этой статье я постараюсь рассказать о том, что требуется ИТ-специалисту, чтобы стать DevOps-инженером. Но сначала несколько слов о себе, чтобы познакомиться поближе. Меня зовут Василий, работаю SVP of Infrastructure в одной из рекламных компаний, владею собственным бизнесом и на досуге пишу в свой канал <a href="https://t.me/drunkdevops">Хмельной DevOps</a>.</p><p>С Unix системами я познакомился в далеком 2005 году, ещё будучи учеником лицея. О да, те незабываемые ночи, проведенные за установкой FreeBSD и компиляцией KDE из исходников. К слову, именно благодаря этому я и нашел свою первую работу, где разрабатывал небольшие проекты на QT/C++, занимался настройкой Cisco, а также поднимал почтовые сервера.</p><p>И вот, наконец, я попал в геймдев компанию, где и начал свою карьеру DevOps-специалиста. Активное взаимодействие разработчиков и команды эксплуатации погрузили меня в доселе невиданный мир. До этого момента путь кода от разработчика на продакшн виделся мне огромной черной бездной, в которой было невозможно ничего разглядеть.</p><p>Но, окунувшись в неё с головой, я понял, что все не так уж и страшно. Я увидел, как приложения собираются, как тестируются, как уходят в продакшн, где их видит весь интернет. Давайте приподнимем завесу тайны и посмотрим, как же стать успешным DevOps-инженером.</p><h2>Что такое DevOps?</h2><p>DevOps — это сокращение от Development Operations, и, на самом деле, это не название профессии. Это культура, методика, если угодно. DevOps-движение возникло в 2008 году и было призвано решить накопившиеся проблемы. Очень много компаний видели проблему во взаимодействиях команд разработки и эксплуатации.</p><p>Разработчики считали, что если код запустился у них локально, то нет проблем — можно запускать в продакшен. Если всё же проблемы возникали, то со стороны команды эксплуатации звучало: «Да это проблемы с кодом, пусть разработчики разбираются». Из-за такого подхода релизы продуктов постоянно затягивались и зачастую страдало качество конечного продукта. Сильно накладывало отпечаток ещё и то, что за один релиз выкатывалось очень много изменений и было очень трудно разобраться, что же породило проблемы на продакшене.</p><p>DevOps был призван решить эти проблемы. Он должен был стать связующим звеном между командой разработки и командой эксплуатации. Условно, в DevOps культуре можно выделить несколько ролей, которые очень хорошо соотносятся с профессиями:</p><ul><li>Build Engineer — человек, отвечающий за сборку кода. Подтягивание зависимостей, разбор конфликтов в коде — это все про него.</li><li>Release Engineer — отвечает за доставку кода от разработки в продакшн. Какая ветка пойдет в тестирование, какой билд попадет на продакшн, релиз-инженер занимается именно этим.</li><li>Automation Engineer — инженер по автоматизации. Автоматизирует все, что движется. А что не движется, двигает и тоже автоматизирует. Автоматическая сборка при пуше в гит, прогон тестов, деплой на staging, деплой в продакшн — это все его задачи. Ключевая роль в DevOps подходе.</li></ul><p>В целом можно выделить ещё несколько ролей. Например, Security Engineer, который будет отвечать за прогон security-тестов и изучение уязвимостей в используемых компонентах.</p><p>В реальном мире все (или почти все) эти роли по отдельности обычно совмещает какой-нибудь другой человек. К примеру, роль билд-инженера можно отдать в руки разработчика. Да и автоматизация настройки серверов обычно отдается системным администраторам. А DevOps-специалисту остаётся проработать и автоматизировать процесс сборки и доставки кода от разработчика в продакшн.</p><h2>Что должен знать DevOps-инженер?</h2><p>Строго говоря, никаких специальных требований к DevOps-студенту не предъявляется, но вход в профессию будет намного легче, если вы с порога обладаете некоторыми навыками.</p><h3>Senior System Administrator</h3><p>Или хотя бы Middle. Идея в том, что вы должны на хорошем уровне разбираться в среде, в которой будут работать ваши приложения. Как они стартуют (<a href="https://en.wikipedia.org/wiki/Init">init</a>, <a href="https://www.freedesktop.org/wiki/Software/systemd/">systemd</a>), что делать, если вы видите ошибку <a href="https://stackoverflow.com/a/3107592">too many open files</a>, использовать или не использовать <a href="https://www.linux.com/news/all-about-linux-swap-space">swap</a>. Все это очень сильно пригодится, когда вы будете запускать реальные проекты.</p><p>С чего начать:</p><ol><li>Пройдите базовый <a href="https://www.edx.org/course/introduction-linux-linuxfoundationx-lfs101x-1">курс</a> по Linux.</li><li>Я учился по сайту <a href="https://www.lissyara.su/">lissyara.su</a>, речь тут идет больше о FreeBSD, но, изучив все статьи, получится хорошо расширить свой кругозор по часто используемом софту.</li><li>Самое главное во время обучения devops — с головой окунуться в происходящее. Этому очень способствуют тематические <a href="http://sysadmins.ru">форумы</a> и телеграмм-каналы.</li></ol><h3>Networking — CCNA</h3><p>Очень важная <a href="https://www.cisco.com/c/en/us/training-events/training-certifications/certifications/associate/ccna-routing-switching.html">вещь</a>, хотя про это забывают многие разработчики. Я считаю, что нельзя писать онлайн-сервисы, не понимая, как работает сеть. Никто не говорит, что надо заучивать семь уровней модели <a href="https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_OSI">OSI</a>, но точно потребуется знать, как работает <a href="https://en.wikipedia.org/wiki/Internet_Protocol">IP</a>, <a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol">TCP</a>/<a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">UDP</a> и, конечно, протокол уровня приложения — например, <a href="https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">HTTP</a>, <a href="https://en.wikipedia.org/wiki/HTTP/2">HTTP/2</a>. Это сохранит вам кучу нервов выискивая причины ошибки Connection Refused.</p><p>С чего начать:</p><ol><li>Запишитесь на курс CCNA.</li><li>Установите себе <a href="https://www.gns3.com">GNS 3</a> и прокачивайтесь в настройке сетевого оборудования.</li></ol><h3>Junior Developer</h3><p>Да-да. Вы должны представлять, как пишется код, что такое <a href="https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">ООП</a>, что такое <a href="https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F">потоки</a> и ещё кучу разных вещей. В общем, чем больше у вас знаний в этом пункте, тем легче вам будет собрать и выкатить приложение.</p><p>Многие могут не согласиться со мной, аргументируя это тем, что код должен писать разработчик. Но, простите, если вы не понимаете, как создаётся программный продукт, то как вы будете автоматизировать его сборку, тестирование и депплой? Сможете ли вы заметить узкое место в архитектурном решении до того, как оно попадет на продакшн?</p><p>Чтобы ответить на эти вопросы, devops должен немного углубиться в основные понятия. С чего начать:</p><ol><li>Изучить основные типы используемых данных.</li><li>Посмотреть на основные применяемые <a href="https://tproger.ru/tag/algorithms/">алгоритмы</a>.</li><li>Почитать про <a href="https://tproger.ru/tag/design-patterns/">паттерны программирования</a>.</li><li>Пройти простой курс по любому языку программирования, например, у golang есть неплохой интерактивный <a href="https://tour.golang.org/welcome/1">онлайн-туториал</a>.</li></ol><h3>Junior DBA</h3><p>На самом деле это входит в предыдущий пункт, но я все же решил его вынести отдельно. Поскольку все текущие проекты в любом случае используют базы данных, было бы неплохо уметь писать SQL запросы, использовать <a href="https://www.postgresql.org/docs/current/static/sql-explain.html">explain</a> и понимать, как работают и зачем нужны <a href="https://www.essentialsql.com/what-is-a-database-index/">index</a>’ы. Ну и до кучи посмотреть на популярные <a href="http://nosql-database.org">NoSQL</a> решения.</p><p>С чего начать:</p><ol><li>Самое простое — это пройти какой-нибудь курс, например от <a href="https://www.enterprisedb.com/free-postgres-training">Enterprise DB</a>.</li><li>Если курс не хочется,то открываем документацию по <a href="https://www.postgresql.org/docs/10/static/index.html">PostgreSQL</a>, устанавливаем базу, создаем таблички и изучаем основные команды, такие как select, insert, join. Смотрим на execution plan запроса, создаем индексы, а также бэкапим, восстанавливаем и настраиваем репликацию.</li></ol><p>Судя по моей личной статистике, чаще всего в DevOps приходят люди из эксплуатации, поскольку у разработчиков обычно не прокачан первый скилл из списка. Но я знаю два случая из жизни, когда senior developers становились DevOps, потому что им надоело, как работает эксплуатация. И, к слову, помимо технических навыков вам точно потребуются некоторые софт скилы. Как минимум вы будете очень много общаться со всеми заинтересованными сторонами. Также вы будете продвигать новые идеи и технологии, что потребует от вас умения ясно и четко доносить свои мысли и умение спорить. Про стрессоустойчивость писать не буду, но терпение вам точно понадобится, поскольку внедрить новую крутую технологию зачастую невозможно в течение одного дня.</p><h2>Как стать DevOps-инженером?</h2><p>Вообще DevOps-инженер — это больше про опыт, нежели про знание конкретного софта. Девопс-ребята постоянно учатся, изучают и тестируют новые проекты и технологии. Они должны постоянно задавать себе вопрос: улучшит ли эта технология наш проект? Что лучше выбрать в качестве языка: Ruby, Python, Go или написать на чистых плюсах? А как мы будем доставлять изменения в продакшен, чтобы не поломать работающие системы?</p><p>Главное, что надо понимать, — DevOps-специалист обладает действительно хорошим кругозором. Чтобы его расширить необходимо постоянно заниматься самообучением. Ниже я привел примерные шаги, которые помогут вам вырасти из, например, системного администратора в DevOps-инженера. Запомните: список всего лишь указывает направление, оттачивать навыки придётся вам самим.</p><ol><li>Сразу напишем небольшое приложение. Язык выбираем абсолютно любой. Приложение будет отдавать информацию о пользователях через HTTP. По сути, простенькое API.</li><li>Теперь давайте добавим работу с базой: пусть наши пользователи хранятся в базе. Идеально структуру базы хранить рядом с кодом и научиться прогонять миграции при новых изменениях. Таким образом ваше приложение само синхронизирует базу до нужной структуры.</li><li>Регистрируемся на GitHub/Bitbucket и закидываем весь исходный код нашего приложения туда.</li><li>На своей машине поднимаем <a href="https://jenkins.io">Jenkins</a>/<a href="https://www.jetbrains.com/teamcity/specials/teamcity/teamcity.html">TeamCity</a> и настраиваем автоматическую сборку приложения из нашего репозитория по кнопке.</li><li>Усложняем задачу. Настроим <a href="https://developer.github.com/webhooks/">webhooks</a> на GitHub/Bitbucket, которые будут автоматически запускать сборку на Jenkins/TeamCity.</li><li>Добавим тестов в Jenkins: как минимум можно прогонять линтер по нашему коду или набросать unit-тесты.</li><li>Переключимся на настройку dev окружения. Берём в руки <a href="https://www.ansible.com">Ansible</a>, <a href="https://www.chef.io/chef/">Chef</a>, <a href="https://puppet.com">Puppet</a> или <a href="https://www.saltstack.com/">SaltStack</a> и настраиваем виртуалку с нуля: создаем пользователей, устанавливаем необходимые библиотеки и зависимости.</li><li>Подводим все это дело под <a href="https://www.vagrantup.com/">Vagrant</a>: виртуалка должна автоматически подниматься и настраиваться. Это важный этап в девопс.</li><li>Подключаем vagrant к Jenkins с помощью соответствующего <a href="https://wiki.jenkins.io/display/JENKINS/Vagrant-plugin">плагина</a>: при пуше в <a href="http://git-scm.com">Git</a> наше приложение собирается, и поднимается виртуальное окружение с помощью Vagrant + Configuration System Management.</li><li>Ищем best practices по деплою приложений на языке, который вы выбрали. Можно заворачивать всё в <a href="https://wiki.debian.org/HowToPackageForDebian">deb</a>-пакеты, можно деплоить Ruby с помощью <a href="http://capistranorb.com">Capistrano</a>. Главное — выбрать решение.</li><li>Выбор сделан, реализуем его и конфигурируем Jenkins, чтобы после пуша в репозиторий, Jenkins, помимо сборки приложения и развертывания окружения, выкладывал и запускал наш код.</li><li>Добавляем <a href="http://softwaretestingfundamentals.com/smoke-testing/">смоук-тесты</a>: после запуска Jenkins должен запросить список пользователей у нашего API и убедиться, что получает ответ.</li><li>Добавляем мониторинг нашего проекта: изучаем <a href="https://www.influxdata.com/time-series-database/">time series базы</a>, настраиваем <a href="https://prometheus.io">prometheus</a>, <a href="https://grafana.com">grafana</a>, автоматически подключаем новый инстанс нашего приложения к мониторингу.</li><li>Улучшаем мониторинг: интегрируемся со <a href="https://slack.com/">Slack</a> и <a href="https://www.pagerduty.com">PagerDuty</a>, чтобы получать нотификации.</li><li>Читаем про Docker, пишем <a href="https://docs.docker.com/develop/develop-images/dockerfile_best-practices/">Dockerfile</a> и оборачиваем наше приложение.</li><li>Изучаем увлекательные статьи про настройку систем оркестрации <a href="https://docs.docker.com/engine/swarm/">Swarm</a>, <a href="https://kubernetes.io">Kubernetes</a>, <a href="https://github.com/rancher/cattle">Rancher Cattle</a>. Следуем рекомендациям и поднимаем кластер.</li><li>Меняем Jenkins: собираем Docker-образ, прогоняем тесты, запускаем собранный докер на кластере Kubernetes, проводим smoke-тесты, вводим наше приложение в балансировку.</li></ol><p>Разобрались, как стать DevOps-инженером? Смотрите также, какие инструменты используются в DevOps.</p><p>Главной целью всех этих шагов является получение опыта работы с различными технологиями. Я уже говорил, что самое главное для DevOps-специалиста — это кругозор, так что берем эти же 17 пунктов и в каждом из них меняем технологию на новую. Писали приложение на Go? Теперь пишем на Ruby. Использовали Jenkins? Берём TeamCity. Поднимали Kubernetes? Настраиваем swarm. Таким нехитрым образом через несколько месяцев вы заранее сможете понять, что лучше использовать в конкретной ситуации, а это — самое главное качество грамотного и успешного DevOps.</p><h2>Часто задаваемые вопросы</h2><h3>Можно ли стать DevOps-инженером без опыта в разработке?</h3><p>Да, большинство DevOps-специалистов приходят из системного администрирования, а не из разработки. Однако базовое понимание кода, алгоритмов и паттернов программирования значительно упростит работу. Достаточно пройти вводный курс по любому языку (Python, Go, Ruby) и разобраться с основами ООП и работой с API.</p><h3>Сколько времени нужно, чтобы стать DevOps-инженером с нуля?</h3><p>При системном подходе и ежедневной практике — от 6 до 12 месяцев до уровня Junior DevOps. За это время можно освоить Linux, сети, CI/CD-инструменты (Jenkins, GitLab CI), контейнеризацию (Docker) и основы оркестрации (Kubernetes). Полноценным Middle-специалистом обычно становятся через 2–3 года реальной работы.</p><h3>Какие инструменты DevOps самые востребованные?</h3><p>В число наиболее востребованных инструментов входят: Git (контроль версий), Jenkins или GitLab CI (CI/CD), Docker и Kubernetes (контейнеризация и оркестрация), Ansible или Terraform (инфраструктура как код), Prometheus и Grafana (мониторинг). Конкретный стек зависит от компании, но эти инструменты покрывают большинство вакансий.</p><h3>Чем DevOps-инженер отличается от системного администратора?</h3><p>Системный администратор фокусируется на поддержке инфраструктуры и серверов, тогда как DevOps-инженер отвечает за весь цикл доставки кода — от сборки до деплоя в продакшн. DevOps-специалист автоматизирует процессы, выстраивает CI/CD-пайплайны и является связующим звеном между командами разработки и эксплуатации.</p><h2>Заключение</h2><p>Да, стать DevOps-инженером с нуля не так-то просто, серебряной пули не существует. Не существует её и в любой другой области. Всегда придётся изучать, читать, пробовать. Но после 10-ой итерации вы войдёте во вкус. Вы не будете пропускать ни одной интересной софтинки, станете изучать и пробовать всё новое и неизведанное. А новое и неизведанное — это всегда круто. Кто бы там что ни говорил, дерзайте!</p>]]></content:encoded>
    </item>
    <item>
      <title>Как выучить Git с нуля</title>
      <link>https://tproger.ru/curriculum/git-guide</link>
      <comments>https://tproger.ru/curriculum/git-guide?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Наташа Маркова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/git-guide</guid>
      <description><![CDATA[<p>Если вы хотите выучить систему git, но не знаете, с чего начать, эта статья будет хорошим стартом. В ней подобраны лучшие источники для изучения git.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/git-guide">Как выучить Git с нуля</a>»</p>]]></description>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 02 Oct 2018 15:43:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рассказываем, зачем осваивать распределенную систему управления версиями Git  и как это сделать с нуля. Также полезно понять <a href="https://tproger.ru/translations/difference-between-git-and-github">разницу между Git и GitHub</a>.</p><h2>Чем Git отличается от других систем контроля версий?</h2><h3>Хранение информации</h3><p>CVS, Subversion, Perforce и другие централизованные платформы хранят информацию как список изменений для файлов. В отличие от них, Git считает данные набором слепков небольшой файловой системы. Углублённый разбор -- в нашем <a href="https://tproger.ru/articles/git-polnyj-putevoditel-ot-pervogo-kommita-do-prodvinutyh-wor">полном путеводителе по Git</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/34561/2023-12-25/e3c134d6-8e86-4927-9e7e-d8f73c1848b3.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/34561/2023-12-25/abd6e454-e648-4135-bcb4-d1b2864b5dcd.png" alt="" /></figure><p>Среди других особенностей:</p><ul><li>в отличие от централизованных систем, для большинства операций Git использует только локальные файлы и ресурсы, что дает возможность работать без доступа к Сети;</li><li>перед сохранением файла Git вычисляет контрольную сумму с помощью SHA-1 хеша, и она становится его индексом.</li></ul><h2>Как пользоваться?</h2><p>Сначала нужно <a href="https://git-scm.com/downloads">установить</a> Git, затем настроить её. Укажите:</p><ul><li>имя пользователя:<br />$ git config --global user.name "tproger";</li><li>адрес электронной почты:<br />$ git config --global user.email tproger@example.com;</li><li>текстовый редактор для работы. Например, если стандартный редактор вас не устраивает и вы выбрали Emacs:<br />$ git config --global core.editor emacs;</li><li>встроенную утилиту сравнения. Например, если вы хотите использовать vimdiff $ git config --global merge.tool vimdiff.</li></ul><p>Затем проверьте настройки: git config --list.</p><h2>Как работать с кодом?</h2><p>Используйте сервисы для хостинга проектов и совместной разработки. Обычно в них есть контроль доступа, багтрекинг, управление задачами, вики для каждого проекта и развитое сообщество, в котором можно спросить совет. Начать можно с нашей <a href="https://tproger.ru/translations/beginner-git-cheatsheet">шпаргалки по Git для начинающих</a>.</p><p>Среди самых популярных платформ:</p><ul><li><a href="https://github.com/">GitHub</a>;</li><li><a href="https://about.gitlab.com/">Gitlab</a>;</li><li><a href="https://bitbucket.org/">Bitbucket</a>;</li><li><a href="https://gogs.io/">Gogs</a>;</li><li><a href="https://sourceforge.net/">SourceForge</a>.</li></ul><h2>Что учить дальше?</h2><ul><li>Работа с репозиториями: <a href="https://git-scm.com/book/ru/v2/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-Git-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F">создание</a>, <a href="https://git-scm.com/book/ru/v2/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D1%8C-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9-%D0%B2-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9">запись изменений</a>, <a href="https://git-scm.com/book/ru/v2/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80-%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D0%B8-%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D1%82%D0%BE%D0%B2">просмотр истории коммитов</a>, <a href="https://git-scm.com/book/ru/v2/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%9E%D1%82%D0%BC%D0%B5%D0%BD%D0%B0-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9">отмена изменений</a>, <a href="https://git-scm.com/book/ru/v2/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D1%83%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F%D0%BC%D0%B8">работа с удалёнными репозиториями</a> и <a href="https://git-scm.com/book/ru/v2/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D0%BC%D0%B5%D1%82%D0%BA%D0%B0%D0%BC%D0%B8">метками</a>.</li><li><a href="https://git-scm.com/book/ru/v2/%D0%92%D0%B5%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-Git-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-%D0%B2%D0%B5%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B8-%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D1%8F">Ветвление и слияние</a>.</li><li>Git на сервере: <a href="https://git-scm.com/book/ru/v2/Git-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-Git-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5">настройка</a>, <a href="https://git-scm.com/book/ru/v2/Git-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B">работа с протоколами</a>, <a href="https://git-scm.com/book/ru/v2/Git-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D0%B3%D0%BE-SSH-%D0%BA%D0%BB%D1%8E%D1%87%D0%B0">генерирование открытого SSH-ключа</a>, <a href="https://git-scm.com/book/ru/v2/Git-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-GitWeb">GitWeb</a>, <a href="https://git-scm.com/book/ru/v2/Git-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-Gitosis">Gitosis</a>, <a href="https://git-scm.com/book/ru/v2/Git-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-Gitolite">Gitolite</a>, <a href="https://git-scm.com/book/ru/v2/Git-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-Git-%D0%B4%D0%B5%D0%BC%D0%BE%D0%BD">Git-демон</a>, <a href="https://git-scm.com/book/ru/v2/Git-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-Git-%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3">Git-хостинг</a>.</li><li><a href="https://git-scm.com/book/ru/v2/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B-Git">Инструменты Git</a>.</li></ul><h2>Где учить?</h2><ul><li><a href="https://git-scm.com/book/ru/v2/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git">Документация Git</a>;</li><li><a href="https://githowto.com/">Git How To</a>;</li><li><a href="https://geekbrains.ru/courses/66">Geekbrains</a>;</li><li><a href="https://ru.hexlet.io/courses/intro_to_git">Hexlet</a>;</li><li><a href="https://www.youtube.com/watch?list=PLY4rE9dstrJyTdVJpv7FibSaXB4BHPInb&amp;v=PEKN8NtBDQ0">LoftBlog</a>;</li><li><a href="https://learngitbranching.js.org/">интерактивное онлайн-руководство</a>;</li><li><a href="https://tproger.ru/video/git-for-beginners-3/">Devcolibri;</a></li><li><a href="https://tproger.ru/tag/git/">Tproger</a>.</li></ul><p>Немного интерактива:</p><ul><li><a href="https://explainshell.com/">сайт</a> с поиском любых shell команд, включая команды Git;</li><li><a href="https://learngitbranching.js.org">Learn Git Branching</a> — онлайн-руководство, которое учит использовать git в игровом стиле;</li><li><a href="https://try.github.io/levels/1/challenges/1">Try Git</a> для экспериментов с виртуальным репозиторием.</li></ul><h2>Все выучил, что дальше?</h2><p>Когда вы освоили основные операции:</p><ul><li>проходите тесты;</li><li>изучайте <a href="http://www.vikingcodeschool.com/web-development-basics/git-calisthenics">сайт с упражнениями по Git</a>;</li><li>осваивайте <a href="https://git.wiki.kernel.org/index.php/Main_Page">энциклопедию по Git</a>: здесь есть руководства, шпаргалки и сообщество, в котором можно задавать вопросы.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Хочу научиться программировать на Python: инструкция для продолжающих</title>
      <link>https://tproger.ru/curriculum/python-how-to-learn-2</link>
      <comments>https://tproger.ru/curriculum/python-how-to-learn-2?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Наташа Маркова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/python-how-to-learn-2</guid>
      <description><![CDATA[<p>Что изучать после основ языка Python, где получать практику и как находить идеи для собственного проекта — ориентиры для продолжающих.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/python-how-to-learn-2">Хочу научиться программировать на Python: инструкция для продолжающих</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Для продолжающих]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 25 Aug 2018 14:56:10 GMT</pubDate>
      <content:encoded><![CDATA[<p>В прошлой <a href="https://tproger.ru/articles/python-how-to-learn/">статье</a> мы рассказали, как изучать Питон с нуля. В этом материале рассказываем, что делать, когда вы изучили азы и решаете простые задачи.</p><h2>Что учить?</h2><p>В первую очередь:</p><ul><li><a href="https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513">алгоритмы и структуры данных</a>;</li><li><a href="https://www.insight-it.ru/">архитектуры информационных систем</a>;</li><li><a href="https://devpractice.ru/python-lesson-15-iterators-and-generators/">генераторы и итераторы</a>;</li><li>дескрипторы;</li><li><a href="https://pythonworld.ru/osnovy/rabota-s-modulyami-sozdanie-podklyuchenie-instrukciyami-import-i-from.html">работа с модулями</a>;</li><li><a href="https://tproger.ru/translations/oop-principles-cheatsheet/">основные принципы</a> объектно-ориентированного программирования (<a href="https://tproger.ru/translations/imperative-declarative-programming-concepts/">императивный и декларативный стили</a>, <a href="https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BC%D1%8B%D0%BA%D0%B0%D0%BD%D0%B8%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)">замыкания</a> и <a href="https://tproger.ru/translations/programming-concepts-introspection-reflection/">интроспекция</a>, <a href="https://tproger.ru/translations/asynchronous-programming-in-python/">асинхронная концепция программирования</a>);</li><li><a href="https://habr.com/post/158895/">кодировки</a>;</li><li><a href="https://tproger.ru/video/operating-systems/">операционные системы</a> (потоки, процессы, сокеты, стек протоколов TCP/IP);</li><li>основы работы в <a href="https://tproger.ru/video/linux-for-beginners/">Linux</a> (работа в sh, типы виртуализации, настройка виртуальных машин через <a href="https://eax.me/vagrant/">vagrant</a> или подобные инструменты, работа с GIT);</li><li>сетевой протокол прикладного уровня <a href="http://xgu.ru/wiki/SSH">SSH</a>;</li><li>протокол прикладного уровня передачи данных <a href="https://habr.com/post/215117/">HTTP</a>;</li><li>форматы данных <a href="https://www.ibm.com/developerworks/ru/library/x-newxml/index.html">XML</a>, <a href="https://ru.wikipedia.org/wiki/HTML">HTML</a>, <a href="https://www.json.org/json-ru.html">JSON</a>;</li><li>стандарт <a href="https://lectureswww.readthedocs.io/5.web.server/wsgi.html">WSGI</a>;</li><li>SQL, базы данных (например, <a href="https://postgrespro.ru/docs/postgresql/9.6/">PostgreSQL</a>, MySQL, а также INSERT, UPDATE, SELECT, JOIN, CRUD, GROUP BY для <a href="https://ruseller.com/lessons.php?id=1664">реляционных баз</a>);</li><li>принципы работы с <a href="https://habr.com/post/152477/">NoSQL</a> (например, <a href="https://metanit.com/nosql/mongodb/">MongoDB</a>);</li><li>веб-сервер и почтовый прокси-сервер <a href="http://nginx.org/ru/docs/beginners_guide.html">nginx</a>;</li><li>способ синхронизации потоков GIL;</li><li>менеджеры пакетов (например, <a href="https://ru.wikipedia.org/wiki/Pip_(%D0%BC%D0%B5%D0%BD%D0%B5%D0%B4%D0%B6%D0%B5%D1%80_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%B2)">pip</a>);</li><li>понимание традиционных методологий разработки, например, <a href="http://www.pmoffice.by/blog/agile/agile-approach.html">Agile (Scrum)</a>.</li></ul><p>Фреймворки:</p><ul><li>асинхронные (<a href="https://www.komtet.ru/lib/plangs/python/tornado-veb-freimvork-realnogo-vremeni">Tornado</a>, <a href="http://www.gevent.org/">gevent</a>, <a href="https://habr.com/post/242541/">aiohttp</a>, <a href="https://habr.com/post/269347/">Celery</a>);</li><li>синхронные (<a href="https://lectureswww.readthedocs.io/6.www.sync/3.framework/pyramid/">Pyramid</a>, <a href="https://habr.com/post/320360/">Flask</a>, <a href="https://tutorial.djangogirls.org/ru/django/">Django</a>);</li><li>тестирование (<a href="http://python-lab.ru/documentation/27/stdlib/doctest.html">doctest</a>, <a href="https://eax.me/pytest/">py.test</a>, <a href="https://ru.wikipedia.org/wiki/Selenium">Selenium</a>, <a href="https://wiki.python.org/moin/PyUnit">unittest/pyUnit</a>).</li></ul><h2>А также</h2><p>Учитесь читать чужой код</p><p>Иногда быстрее и проще написать собственный код, чем переписывать чужой, но такой навык имеет преимущества. Вы сможете перенять интересные идеи и подходы для своих проектов, учитесь находить ошибки. Сюда же — code review. Главное — изучайте хороший код. Такие есть на <a href="https://github.com/">GitHub</a>: создайте профиль, изучайте проекты, присоединяйтесь к ним.</p><p>Учитесь делать рефакторинг</p><p>Рефакторинг поможет найти ошибки в коде, упростить его и сделать понятным для других.</p><p>Подтяните английский язык до уровня понимания технической литературы</p><p>Он нужен как минимум для чтения документации, книг, задач и общения с другими разработчиками.</p><p>Изучайте инструменты для оптимизации кода</p><p>Первая пятерка — в <a href="https://tproger.ru/digest/five-ways-to-boost-python/">нашем материале</a>. Также полезно читать о <a href="https://tproger.ru/translations/nifty-python-tricks/">хитрых приемах на Python</a> и применять их на практике.</p><p>Ищите библиотеки</p><p>Изучить все пакеты вряд ли получится, но некоторые знать полезно. Некоторые из них мы собрали в <a href="https://tproger.ru/translations/10-python-libraries-you-might-not-know/">статье</a>.</p><h2>Где учить?</h2><p>Продвинутый уровень требует поиска материалов из разных источников. Онлайн-курсы по большей части полезны для начинающих, хотя есть пара вариантов для продолжающих: курс от <a href="https://geekbrains.ru/courses/115">Geekbrains</a> на русском языке и <a href="https://tproger.ru/video/advanced-python/">Python3 Advanced Tutorial</a> на английском. Еще несколько хороших книг — в <a href="https://tproger.ru/books/free-python-books/">подборке Tproger</a>.</p><h2>Все выучил, что делать дальше?</h2><p>Например, решать задачи. <a href="https://tproger.ru/translations/mosaic-from-random-images/">Создайте мозаику из случайных изображений</a>, <a href="https://tproger.ru/problems/python-challenge-level-one/">расшифруйте строку</a>, <a href="https://tproger.ru/translations/python-command-line-tools-with-click/">создайте инструменты командной строки</a>. Еще задания — в нашей <a href="https://tproger.ru/digest/competitive-programming-practice/">подборке</a> и на сайтах <a href="https://checkio.org/">checkio.org</a>, <a href="https://www.codingame.com/">codingame.com</a> и <a href="https://www.codewars.com/">codewars.com</a>.</p><p>Попробуйте создать собственный проект — здесь вы найдете<a href="http://www.dreamincode.net/forums/topic/78802-martyr2s-mega-project-ideas-list/"> список из более чем 100 идей</a>. А здесь — <a href="http://inventwithpython.com/blog/2012/02/20/i-need-practice-programming-49-ideas-for-game-clones-to-code/"> список из 49 клонов игр</a>, которые напишете самостоятельно. Дальше можно <a href="https://tproger.ru/translations/python-developer-interview-guide/">готовиться</a> к собеседованию на позицию Python-разработчика.</p>]]></content:encoded>
    </item>
    <item>
      <title>План обучения для специалиста по Data Science</title>
      <link>https://tproger.ru/curriculum/data-scientist-curriculum</link>
      <comments>https://tproger.ru/curriculum/data-scientist-curriculum?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Туренко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/data-scientist-curriculum</guid>
      <description><![CDATA[<p>Детальный маршрут для тех, кто хочет войти в Data Science, но не понимает, с чего начать: порядок тем и шагов освоения специальности.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/data-scientist-curriculum">План обучения для специалиста по Data Science</a>»</p>]]></description>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 17 Aug 2018 16:31:15 GMT</pubDate>
      <content:encoded><![CDATA[<p>Благодаря Data Science мы можем контролировать взлёты и посадки в самых больших аэропортах, можем анализировать и прогнозировать появление эпидемий без врачей. Благодаря не только современной технике, но и тем обученным программам, которые в ней установлены, доктора могут практически безошибочно ставить сложные диагнозы в некоторых отраслях медицины. Более того, у нас даже есть беспилотный транспорт и с каждым годом он лучше и умнее! Предлагаем вам не оставаться в стороне от такой интересной и перспективной науки и стать на сторону её развития.</p><p>Примечание У нас есть планы обучения и по <a href="https://tproger.ru/curriculum/">другим специальностям</a>.</p><p>Базовый (связующий модуль)</p><ol><li>CS50 — курс Гарварда по программированию. Рассматривается построение алгоритмов, поиск наиболее эффективных методов решения проблемы. Также присутствует практика на языках C, Python и JavaScript;</li><li><a href="https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/">Математика и информатика</a>;Зачем программисту нужна информатика?</li><li>Освоение программирования по программе <a href="https://www.udacity.com/course/intro-to-programming-nanodegree--nd000">«Nanodegree — Learn to Code»</a> от Udacity.</li></ol><p>Зачем нужен этот модуль?</p><p>Если вы пришли в программирование из другой специальности или же были верстальщиком или веб-дизайнером, то этот модуль поможет расширить границы ваших познаний в программировании.</p><h3>Ядро науки о данных</h3><p>Программа дополнительного образования от Udacity <a href="https://www.udacity.com/course/data-analyst-nanodegree--nd002">«DataAnalyst»</a> (платно и на английском).</p><p>Если у вас есть желание подстроить программу образования под себя, то это будет бесплатно. Предлагаем следующую последовательность бесплатных курсов, входящих в программу выше:</p><ol><li><a href="https://www.udacity.com/course/intro-to-inferential-statistics--ud201">Введение в инференциальную статистику</a>;</li><li><a href="https://www.udacity.com/course/intro-to-descriptive-statistics--ud827">Введение в описательную статистику</a>;</li><li><a href="https://www.udacity.com/course/intro-to-data-analysis--ud170">Введение в аналитическую обработку данных</a> (с применением NumPy и Pandas);</li><li><a href="https://www.udacity.com/course/data-wrangling-with-mongodb--ud032">Введение в первичную обработку данных</a>;</li><li><a href="https://www.udacity.com/course/sql-for-data-analysis--ud198">SQL для аналитической обработки данных</a>;</li><li><a href="https://www.udacity.com/course/data-wrangling-with-mongodb--ud032">MongoDB для аналитической обработки данных</a> (при возможности и желании можно изучить <a href="https://www.udacity.com/course/data-analysis-with-r--ud651">аналитическую обработку данных с помощью языка R.</a>);</li><li><a href="https://www.udacity.com/course/intro-to-machine-learning--ud120">Введение в Машинное обучение</a>;</li><li><a href="https://www.udacity.com/course/data-visualization-and-d3js--ud507">Визуализация данных и работа с D3.js</a>;</li><li><a href="https://www.udacity.com/course/ab-testing--ud257">A/B тестирование</a>.</li></ol><p>Дополнительные курсы на русском языке</p><ul><li><a href="https://stepik.org/course/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-%D0%B1%D0%B0%D0%B7%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-551/">Введение в базы данных</a> (при возможности и желании можно изучить анализ данных в R [<a href="https://stepik.org/course/%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2-R-129/">первая</a> и <a href="https://stepik.org/course/%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2-R-%D0%A7%D0%B0%D1%81%D1%82%D1%8C-2-724">вторая</a> части]);</li><li><a href="https://stepik.org/course/%D0%9F%D0%BE%D0%B3%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-%D0%A1%D0%A3%D0%91%D0%94-157/">СУБД</a>;</li><li><a href="https://tproger.ru/tag/algos-and-data-structs/">Алгоритмы и структуры данных</a>;</li><li>Методы обработки больших данных.</li></ul><h3>Машинное обучение</h3><ol><li><a href="https://www.class-central.com/mooc/835/coursera-machine-learning">Введение в машинное обучение</a>;</li><li><a href="https://www.class-central.com/mooc/6679/kadenze-creative-applications-of-deep-learning-with-tensorflow">Обучение работе с TensorFlow с применением в реальных приложениях</a>;</li><li><a href="https://www.class-central.com/mooc/2965/edx-cs190-1x-scalable-machine-learning">Машинное обучение и масштабирование</a>;</li><li><a href="https://www.class-central.com/course/coursera-neural-networks-for-machine-learning-398">Нейронные сети и машинное обучение</a>.</li></ol><h3>Разработка программного обеспечения</h3><p>Python</p><ol><li><a href="https://www.udacity.com/course/software-testing--cs258">Тестирование</a> и <a href="https://www.udacity.com/course/software-debugging--cs259">отладка</a>;</li><li><a href="https://www.udacity.com/course/software-debugging--cs259">Использование Git и GitHub для контроля версий</a>;</li><li><a href="https://tproger.ru/translations/reactive-web-apps-with-python/">Создание реактивных аналитических веб-приложений на Python</a> (статья).</li></ol><p>R</p><p><a href="https://www.coursera.org/specializations/r">Разработка программного обеспечения на R</a> (ниже перечислены отдельные курсы, входящие в состав программы по обучению разработке программного обеспечения на языке R).</p><ol><li><a href="https://www.coursera.org/learn/r-programming-environment">Программное окружение и R</a>;</li><li><a href="https://www.coursera.org/learn/advanced-r">Продвинутый уровень написания программ на R</a>;</li><li><a href="https://www.coursera.org/learn/r-packages">Сборка пакетов на R</a>;</li><li><a href="https://www.coursera.org/learn/r-data-visualization">Сборка инструментов визуализации данных</a>.</li></ol><h3>Дополнительные материалы</h3><ol><li><a href="https://www.udacity.com/course/intro-to-hadoop-and-mapreduce--ud617">Введенние в Hadoop и MapReduce</a>;</li><li><a href="https://www.class-central.com/mooc/4343/coursera-using-python-to-access-web-data">Python как инструмент доступа к веб-данным</a>.</li></ol><p>Не обязательно пытаться освоить всё и сразу. Есть мнение, что для Data Scientist’a достаточно знать только Python, а без R можно обойтись. Другие считают наоборот. В любом случае, пробуйте, выбирайте то, что вам ближе и у вас несомненно всё получится.</p><p>Чтение по теме: <a href="https://tproger.ru/translations/how-to-build-a-data-science-portfolio/">Как создать Data Science портфолио</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Хочу научиться программировать на Python. С чего начать?</title>
      <link>https://tproger.ru/curriculum/python-how-to-learn</link>
      <comments>https://tproger.ru/curriculum/python-how-to-learn?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/python-how-to-learn</guid>
      <description><![CDATA[<p>Пошаговый гайд для новичков: как выучить Python с нуля, какой синтаксис изучать, какую IDE выбрать. Лучшие курсы, книги и задачи для практики — начните сегодня!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/python-how-to-learn">Хочу научиться программировать на Python. С чего начать?</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 27 Jul 2018 20:16:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>• Python — один из самых популярных языков для старта в программировании благодаря простому синтаксису
• Начните с основ: переменные, циклы, функции, затем переходите к модулям и ООП
• Для практики используйте IDE (PyCharm, VS Code) и систему контроля версий Git
• Закрепляйте знания на задачах: Project Euler, CheckiO, тесты на Tproger</p><p>Рассказываем, как действовать, если вы решили освоить Python 3 с нуля: что учить в первую очередь, где брать знания и что делать дальше?</p><h2>Зачем учить Python?</h2><p>Python имеет ряд преимуществ:</p><ul><li>высокая популярность языка и использование в большом количестве проектов;</li><li>сравнительно простой, но в то же время строгий синтаксис;</li><li>множество доступных сред разработки, сервисов и фреймворков;</li><li>средства для работы с электронной почтой, протоколами Интернета, базами данных и другие инструменты в стандартной библиотеке языка;</li><li>востребованность Python-разработчиков на рынке труда.</li></ul><p>Среди главных особенностей — динамическая типизация, проблемы с совместимостью версий, а также низкая скорость выполнения кода по сравнению с другими языками программирования. Если вы учите Python не первым языком, синтаксис может показаться вам непривычным.</p><p>Python для создания продуктов используют такие корпорации, как Google, Dropbox, Mozilla, Yandex, Red Hat, Microsoft, Intel и другие.</p><h2>Что учить?</h2><h3>Синтаксис</h3><p>В первую очередь:</p><ul><li>операции с целыми и вещественными числами;</li><li><a href="https://tproger.ru/translations/python-data-types/">типы данных</a>;</li><li>переменные, ветвления, стандартный ввод/вывод;</li><li>логические операции, операции сравнения;</li><li>условия: if, else, elif;</li><li>блоки, отступы;</li><li>строки и символы;</li><li>циклы while, for;</li><li>операторы break, continue;</li><li>установка и подключение модулей;</li><li>списки;</li><li>функции;</li><li><a href="https://tproger.ru/explain/python-dictionaries/">словари</a>;</li><li>интерпретатор: установка, запуск скрипта;</li><li>файловый ввод/вывод.</li></ul><h3>Дополнительно</h3><ul><li>Python в одной картинке;</li><li><a href="https://github.com/kamranahmedse/developer-roadmap">Карта развития разработчика;</a></li><li><a href="https://awesome-python.com/">Подборка Awesome Python.</a></li><li><a href="https://tproger.ru/articles/10-paketov-python-kotorye-dolzhen-znat-kazhdyj-razrabotchik">10 пакетов Python, которые должен знать каждый разработчик</a>.</li><li><a href="https://tproger.ru/articles/30-bibliotek-python-kotorye-stoit-znat-v-2024-godu">30 библиотек Python, которые стоит знать</a>.</li><li><a href="https://tproger.ru/translations/top-10-python-bibliotek-dlja-data-science/">Подборка Python-библиотек для Data science</a>.</li></ul><h3>IDE и редакторы кода</h3><p>Писать в IDLE или Python Shell удобно только простой код, но для проектов лучше найти интегрированную среду разработки (IDE) или редактор кода. IDE включает в себя редактор с подсветкой синтаксиса и автодополнением, инструменты сборки, выполнения и отладки и другие функции. В большинстве редакторов есть подсветка синтаксиса и форматирование, выполнение и отладка кода. Как правило, этот инструмент работает быстрее IDE, но имеет меньше функций. Среди самых популярных платформ — <a href="https://www.jetbrains.com/pycharm/">PyCharm</a>, <a href="https://wingware.com/">Wing IDE</a>, <a href="https://www.activestate.com/komodo-ide">Komodo</a> и другие. Больше вариантов — в нашем <a href="https://tproger.ru/translations/python-ide/">обзоре</a>.</p><h3>Git</h3><p>С распределенной системой управления версиями (<a href="https://git-scm.com/">Git</a>) нужно познакомиться в начале обучения. Среди основных навыков — создание и перемещение файлов в каталогах, инициализация Git-репозитория и создание коммитов, а также настройка репозиториев в <a href="https://github.com/">GitHub</a>.</p><h2>Где учить?</h2><p>Попробуйте каждый из инструментов. После пары первых уроков будет ясно, подходит он вам или нет.</p><h3>Учебники</h3><p>Другие хорошие книги по Python — в нашей <a href="https://tproger.ru/books/free-python-books/">подборке</a>.</p><h3>Онлайн-курсы на русском языке</h3><ul><li><a href="https://stepik.org/course/67/">Stepik</a>;</li><li><a href="https://geekbrains.ru/courses/105">Geekbrains</a>;</li><li><a href="http://pythontutor.ru">Питонтьютор</a>;</li><li>Курс от Mail.Ru Group и МФТИ;</li></ul><h3>Онлайн-курсы на английском языке</h3><ul><li><a href="https://www.codecademy.com/ru/tracks/python">Codecademy</a>;</li><li><a href="https://www.jetbrains.com/pycharm-edu/">PyCharm Edu от JetBrains</a>;</li></ul><p>О том, как еще учить Python — в нашей <a href="https://tproger.ru/digest/python-materials/">статье</a>.</p><h2>Все выучил, что дальше?</h2><p>Когда вы научились составлять простые программы, надо постараться понять, в какую сторону вы хотите двигаться. Для этого начните решать задания:</p><ul><li><a href="https://tproger.ru/quiz/python-style-quiz/">тест</a> на читабельность кода и <a href="https://tproger.ru/quiz/python-beginner/">тест</a> на знание языка;</li><li>проект Эйлера на <a href="https://projecteuler.net/">английском</a> и <a href="http://euler.jakumo.org/">русском</a> учит составлять правильные алгоритмы;</li><li><a href="http://www.checkio.org/">игра</a> с заданиями по уровням со встроенной средой программирования;</li><li><a href="http://www.pythonchallenge.com/">квест</a>, в котором нужно составить алгоритм, чтобы понять, как перейти к следующему шагу;</li><li>напишите <a href="https://tproger.ru/articles/kak-napisat-prostoj-kalkulyator-na-python--poshagovoe-rukovodstvo">простой калькулятор на Python</a> — отличный первый проект для закрепления основ;</li><li>попробуйте <a href="https://tproger.ru/articles/15-prostyh-igr-na-python-dlya-detej-i-nachinayuschih">15 простых игр на Python</a> — от «Угадай число» до «Крестики-нолики».</li></ul><p>Когда освоите основы, открываются новые направления: <a href="https://tproger.ru/articles/nejroset-na-python-za-10-minut--prostoj-gajd-dlya-nachinayuschih">создание нейросетей на Python</a>, работа с API — например, <a href="https://tproger.ru/articles/chto-takoe-rest-api-prostymi-slovami--principy--metody-i-primery">что такое REST API</a>, — и деплой приложений через <a href="https://tproger.ru/articles/chto-takoe-docker-prostymi-slovami--kontejnery--obrazy-i-docker-c">Docker</a>.</p><h2>Часто задаваемые вопросы</h2><h3>Сколько времени нужно, чтобы выучить Python с нуля?</h3><p>При регулярных занятиях по 1–2 часа в день основы Python можно освоить за 2–3 месяца. Для уверенного владения языком и готовности к первым проектам потребуется от 6 месяцев до года. Скорость зависит от наличия опыта в программировании и интенсивности практики.</p><h3>Можно ли выучить Python без знания математики?</h3><p>Да. Для веб-разработки, автоматизации и написания скриптов глубокие знания математики не требуются. Математика понадобится, если вы планируете заниматься Data Science, машинным обучением или алгоритмическим программированием.</p><h3>Какую версию Python выбрать для изучения?</h3><p>Учите Python 3 — это актуальная версия языка. Python 2 официально не поддерживается с 2020 года. Все современные библиотеки, фреймворки и курсы ориентированы на Python 3.</p>]]></content:encoded>
    </item>
    <item>
      <title>Хочу стать frontend разработчиком: базовые знания и план обучения</title>
      <link>https://tproger.ru/curriculum/intro-to-frontend-development</link>
      <comments>https://tproger.ru/curriculum/intro-to-frontend-development?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Роман Латкин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/intro-to-frontend-development</guid>
      <description><![CDATA[<p>Полный гайд по изучению фронтенд-разработки: от HTML, CSS и JavaScript до React, Vue.js и SSR. Пошаговый план обучения, инструменты, фреймворки и лучшие практики для начинающих.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/intro-to-frontend-development">Хочу стать frontend разработчиком: базовые знания и план обучения</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 20 Apr 2018 12:30:29 GMT</pubDate>
      <content:encoded><![CDATA[<p>Итак, друзья, вы решили встать на путь программирования? Жму руку, это решение изменит вашу жизнь. Это всегда интересная и востребованная работа на стыке интеллекта и творчества, работа о том, как принести пользу людям, сделать мир чуточку лучше. Возможности реализации в ней бесконечны.</p><p><b>Кратко о главном:</b> фронтенд строится на трёх технологиях — HTML, CSS и JavaScript. Начните с основ вёрстки, затем освойте CSS-фреймворки (Bootstrap), далее изучите JavaScript и один из современных фреймворков (React или Vue.js). Ключевые инструменты в арсенале фронтендера — препроцессоры (Stylus, SASS), сборщики (Webpack), менеджеры пакетов (npm, Yarn) и система контроля версий Git. Следуйте пошаговому плану из 10 пунктов в конце статьи.</p><p>В программировании много разных областей: веб-разработка, мобильная, десктопные приложения, разработка ОС, драйверов для железа. Веб-разработка — одна из самых интересных и востребованных областей. К её плюсам можно отнести то, что ваш продукт лежит в Интернете, и чтобы его увидеть, достаточно набрать адрес в браузере любого устройства, не нужно ничего качать и устанавливать. К тому же, с помощью современных инструментов, зная веб, можно разрабатывать сразу и мобильные, и десктопные приложения. Веб состоит из frontend (то, что видит клиент в браузере) и backend (серверная часть, занимается хранением, обработкой и выдачей данных). Я предлагаю начать знакомство с вебом именно с фронтенда.</p><p>Да, кстати, меня зовут Роман Латкин, я почти 10 лет варюсь в веб-разработке. Когда я начинал, всё было одновременно просто и сложно. Просто, потому что для построения приложения много знать было не нужно: вот HTML, немного CSS, чуть-чуть JavaScript — и готово. Сложно, потому что разработка велась через боль. Сейчас множество этой боли вылечено с помощью громадной экосистемы инструментов, но она очень пугает новичков, они не знают, как подступиться к фронтенду, с какой стороны подойти. Мне повезло, я наблюдал развитие фронтенда почти с начала, и у меня в голове всё неплохо уложилось. И я хочу в помощь начинающим разработчикам передать это понимание. Надеюсь, после прочтения этой статьи, вы будете чётко знать, каким путём идти, куда копать и по какому плану развиваться.</p><ol><li><a href="https://tproger.ru/#1">Три составляющих фронтенда</a></li><li><a href="https://tproger.ru/#2">Первые сайты</a></li><li><a href="https://tproger.ru/#3">jQuery</a></li><li><a href="https://tproger.ru/#4">MVC</a></li><li><a href="https://tproger.ru/#5">Процессоры и сборщики</a>CSSJavaScriptHTMLМенеджеры пакетовМенеджеры задач</li><li><a href="https://tproger.ru/#11">Компонентная архитектура</a>ReactУправление состояниемVue.jsИзоморфные приложения, SSR</li><li><a href="https://tproger.ru/#16">CSS-фреймворки, адаптивность</a>КроссбраузерностьМетодологии</li><li><a href="https://tproger.ru/#19">В путь!</a></li></ol><h2>Три составляющих фронтенда</h2><p>Весь фронтенд состоит из трёх составляющих: HTML (содержание и разметка), JavaScript (логика) и CSS (внешний вид, позиционирование). HTML описывает содержание страницы и выглядит примерно так: &lt;table&gt;&lt;/table&gt;. CSS описывает стили и выглядит вот так: table { background: #ccc; }. JavaScript — язык программирования, описывает логику приложения, а также обращается к элементам HTML, изменяя структуру и содержание страницы (пример кода: var count = 5; count = count + 5; console.log(count) // 10).</p><p>Если вам придётся как-нибудь вручную использовать эти средства, чтобы сделать более-менее сложный проект, то вам предстоит испытать много боли. К счастью, мир развивается, сложные вещи упрощаются, люди придумывают всё новые и новые инструменты и технологии, которые делают этот созидательный процесс более приятным и быстрым.</p><p>Любой процесс познания можно представить в виде буквы «Т», где горизонтальная линия — широкое понимание, вертикальная — глубокое. У идеального специалиста буква Т большая и красивая, равномерная. Если она вытянута в одну сторону, она некрасива, уродлива; такой специалист мало полезен в боевых делах. Он может либо глубоко разбираться в чём-то одном, но чуть шаг в сторону, и он непригоден; либо поверхностно разбираться во всём, но при этом ничего не уметь. В первую очередь необходимо максимально развить широкую составляющую, чем мы сейчас и займёмся — постараемся максимально широко охватить все аспекты фронтенда, не углубляясь. А потом вы займётесь углублением, которое останется вам на самостоятельную работу.</p><p>Чтобы хорошо представлять причины текущего положения вещей, нужно хотя бы чуть-чуть знать историю пути развития фронтенда, да и вообще веб-приложений в целом. Инструментов сейчас столько, что не только новичок, сам чёрт ногу сломит. Поэтому, чтобы в этом всём хорошо ориентироваться, начнём именно с истории, с короткой экскурсии, как всё начиналось, а затем плавно перейдём к современным подходам.</p><h2>Первые сайты</h2><p>Вначале люди писали на чистом HTML, рисовали внешний вид на чистом CSS, делали логику на чистом JavaScript. Типичное старомодное приложение — это когда серверная логика генерирует HTML (отвечая на запрос посетителя, сервер берёт данные из базы данных и вставляет их в HTML) и отдаёт его вместе со статическими файлами стилей и клиентской логики на JavaScript, которой в то время (около 10 лет назад) было немного. При совершении перехода на другую страницу весь этот процесс повторялся. То есть раньше как такового разделения на фронтенд и бэкенд не было, было одно цельное приложение, которое одновременно и работало с базой данных, и генерировало HTML.</p><h2>jQuery</h2><p>Писать на чистом JavaScript надоедало и появился хороший инструмент — <a href="https://jquery.com/">jQuery</a>, который с помощью удобного синтаксиса позволял обращаться к элементам страницы и выполнять с ними какие-то действия. Появлялись различные плагины, готовые решения, стало проще и интереснее.</p><p>Чтение по теме: <a href="https://tproger.ru/articles/jquery-cheatsheet/">Краткая шпаргалка по jQuery</a></p><p>Но приложения развивались, объём клиентской логики рос, и постепенно всё это превращалось в большую лапшу. Чтобы её распутать, нужна была какая-то форма, архитектура.</p><h2>MVC</h2><p>Умные Парни попробовали перенести на фронтенд архитектурный шаблон с серверной части — MVC (модель-представление-контроллер). Этот шаблон диктует правило, что есть модель, которая описывает данные. Например, модель пользователя, модель фильма, модель отзыва. Есть контроллер, который обрабатывает запросы, например «показать по такому-то адресу страницу со списком фильмов». И есть представление, которое отвечает за отображение данных в HTML, в которое контроллер передаёт готовые данные, полученные из базы данных/API.</p><p>Здесь началась история single page application, SPA — приложений, которые загружаются один раз, а затем при переходе по страницам обращаются к серверу за данными по API. Этот подход называется <a href="https://ru.wikipedia.org/wiki/AJAX">AJAX</a>. Вместо того, чтобы генерировать HTML на стороне сервера, сервер отдаёт клиентскую логику приложения один раз. Переходя на другую страницу, например с главной страницы на страницу поиска отелей, приложение запрашивает с сервера данные в чистом виде (к примеру, информацию об отелях), без тегов HTML (как правило в формате <a href="https://learn.javascript.ru/json">JSON</a>), и самостоятельно генерирует представление.</p><p>Шаблон MVC на фронтенде был хорош, прекрасно работал, но было излишне сложно. <a href="https://angularjs.org/">Angular</a>, Backbone — представители этой вехи истории. Они, к слову, живут и сейчас, но я в них глубоко не разбирался.</p><h2>Процессоры и сборщики</h2><p>Приложения начали расти в размере, и тут пришло время рассказать о сборщиках, препроцессорах и пакетных менеджерах. Постараюсь вкратце по ним пробежаться, несмотря на то, что они заслуживают отдельной статьи.</p><p>В вебе важна скорость, поэтому нельзя просто так отдавать посетителю большие файлы, они будут идти по сети слишком долго. Поэтому все ресурсы <a href="https://learn.javascript.ru/minification">сжимаются</a> с помощью разных минификаторов. JavaScript чаще всего с помощью <a href="https://www.npmjs.com/package/uglify-js">uglify</a> (он удаляет пробелы, делает названия переменных короче и ещё много чего интересного). В CSS удаляются пробелы и могут ещё объединяться некоторые свойства. И всё это собирается в один или несколько файлов вместо 10-20, один файл скачать гораздо быстрее, и на сервер нагрузка меньше.</p><h3>CSS</h3><p>Что касается CSS, появлялись так называемые <a href="http://fb.ru/article/320296/preprotsessor-css-obzor-vyibor-primenenie">препроцессоры</a>. Они расширяют синтаксис CSS, добавляют туда кучу разных возможностей — вложенные блоки, переменные, циклы. Даже просто отсутствие точек с запятой очень помогает и ускоряет написание кода?.</p><p>Препроцессор — это такая программа, которая запускается и компилирует этот сахарный синтаксис в чистый CSS. Использование препроцессоров позволяет избежать повторного использования кода, выстраивает архитектуру, и по сути превращает язык описания стилей в язык программирования. Изучите какой-либо инструмент, и вы поймете. Я для себя сейчас выбрал <a href="http://stylus-lang.com/">Stylus</a>; есть ещё несколько, например — <a href="http://lesscss.org/">LESS</a>, <a href="https://sass-scss.ru/">SASS</a>.</p><p>Чуть позже придумали <a href="https://habrahabr.ru/post/235929/">постпроцессоры</a>. Они, в отличие от препроцессоров, обрабатывают уже готовый CSS, модифицируя его: например, добавляя дополнительные свойства к уже существующим, или изменяя названия классов, делая их уникальными, чтобы ничего не сломалось. Их чаще всего используют для поддержки кроссбраузерности, о которой мы ещё поговорим ниже. <a href="http://postcss.org/">PostCSS</a> — вот этот самый постпроцессор, он ещё обладает большой <a href="https://www.postcss.parts/">библиотекой плагинов</a>, упрощающих жизнь.</p><h3>JavaScript</h3><p>Насчёт JavaScript: исторически так сложилось, что этот язык изначально был слишком простой и сейчас постоянно развивается, обрастая новыми инструментами. Основная его версия, которая работает во всех современных браузерах, называется <a href="http://es5.javascript.ru/">ES5</a>. В 2015-м году появился усовершенствованный стандарт JavaScript <a href="http://learn.javascript.ru/es-modern">ES2015</a>, или ES6, который даёт много новых инструментов упрощённого описания логики. Только он не работает в старых браузерах, поэтому используют препроцессор <a href="http://babeljs.io/">Babel</a> для компиляции его в ES5. То есть код пишется с помощью современного синтаксиса ES6, а для работы в браузере сразу компилируется в ES5.</p><p>Есть ещё разные способы писать нормальный код, которые сводятся к тому же: код пишется на своём «особом» языке (как в случае с ES6), а потом транслируется в JavaScript. Вот некоторые из этих «особых» языков программирования:</p><ul><li><a href="http://www.typescriptlang.org/">TypeScript</a> — он добавляет к JavaScript множество инструментов из серьёзного программирования — классы, интерфейсы, модули и др., а также упорядочивает типы переменных. Он больше для того, чтобы писать массивную логику, пользуясь приёмами строгой типизации, и подходит скорее для отдельных крупных логических модулей;</li><li><a href="http://coffeescript.org/">CoffeeScript</a> — делает код намного более удобным, понятным, человечным;</li><li>и ещё много разных — <a href="https://www.dartlang.org/">Dart</a>, <a href="http://elm-lang.org/">Elm</a>, я их глубоко не изучал.</li></ul><h3>HTML</h3><p>Для упрощения написания HTML, чтобы не ломать пальцы о теги, стали использовать препроцессоры HTML. Они позволяют, например, вместо громоздкой конструкции &lt;a href="#"&gt;Ссылка&lt;/a&gt; с кучей угловых скобочек писать просто a(href="#") Ссылка, а потом компилировать это всё в HTML. Очень рекомендую сразу же освоить <a href="https://pugjs.org/api/getting-started.html">Pug</a>, сокращающий объем написанного практически вдвое.</p><p>Чтобы удобно вставлять динамические данные в HTML, отделяя данные от разметки, придумали <a href="https://habrahabr.ru/post/219873/">шаблонизаторы</a>. Например, в разметке пишется &lt;h1&gt;{{ title }}&lt;/h1&gt;, запускается шаблонизатор со значением переменной title, и это значение подставляется вместо фигурных скобочек. Теги отдельно, контент отдельно. Можно удобно вставлять динамический контент с помощью циклов и условий — например, передавать массивы объектов и выводить их в таблице.</p><h3>Менеджеры пакетов</h3><p>Чтобы не изобретать велосипеды, разработчики давно научились делиться между собой готовыми участками кода, модулями. Во фронтенде для этого активно используется менеджер зависимостей npm. На <a href="http://npmjs.com/">npmjs.com</a> можно найти огромное количество модулей, плагинов, библиотек на все случаи жизни. Прежде чем писать что-то своё, поищите там.</p><p>Позже появился усовершенствованный менеджер зависимостей <a href="https://yarnpkg.com/lang/en/">Yarn</a>, он делает всё быстрее и стабильнее, не буду сейчас углубляться, почему.</p><h3>Менеджеры задач</h3><p>Для того, чтобы централизованно управлять всем этим зоопарком, появлялись менеджеры задач. Они позволяют в одном месте описать все процессы и этапы сборки приложения. Это <a href="https://gruntjs.com/">Grunt</a>, <a href="https://gulpjs.com/">Gulp</a>, <a href="https://webpack.js.org/">Webpack</a>. Последний — наиболее подходящий для сборки веб-приложения. Он может взять на себя много забот, легко и просто компилировать все ресурсы, будь то скрипты, стили, разметка, картинки — в любом формате (Stylus, Less, Sass, ES6, TypeScript, jpg, png) из любых исходников — в единые бандлы, сборки файлов js, CSS, HTML, которые будут работать в браузере.</p><p>Чтение по теме: <a href="https://tproger.ru/translations/webpack-basics/">Webpack — основы настройки проекта на JavaScript и Sass</a></p><h2>Компонентная архитектура</h2><p>Итак, можно продолжить: сложное начали упрощать, и в ходе упрощения, большого упрощения, Умные Парни решили — всё есть компонент. Кнопка — это компонент, шапка — компонент, выбор города — компонент. Страница — тоже компонент. Компонент может содержать в себе другие компоненты. Получилось крайне просто: такая концепция, как оказалось, пришлась как родная к построению клиентских приложений.</p><p>Что такое компонент? Это самостоятельный и независимый участок разметки со своей логикой и стилями. У компонента есть свое текущее состояние. Открыто ли меню, активна ли вкладка, и т.п. Состояние всего приложения можно представить как дерево состояний различных компонентов.</p><p>Разметка HTML зависит от текущего состояния, изменилось состояние — изменилась разметка. Это реализуется с помощью технологии <a href="https://habrahabr.ru/post/256965/">Virtual Dom</a> — когда DOM (дерево HTML-элементов страницы) рассчитывается сначала виртуально и в конце расчёта отображается в реальном DOM, в разметке. За счёт этой идеи достигли более высокой производительности приложений, ведь одна из самых тяжёлых частей работы браузера — операции с DOM (работа с деревом объектов HTML).</p><p>Здесь важно ввести ещё одно понятие — реактивные приложения. Это, упрощённо говоря, когда вместо прямого изменения DOM/Virtual Dom при изменении данных, вводится объект состояния, модель данных, и на её изменения подписывается обработчик, который уже меняет DOM. То есть чтобы что-то поменять в представлении, HTML (например, таблица со списком пользователей), нам достаточно изменить свойство модели (добавить в массив нового пользователя), всё остальное произойдет само (пользователь появится в html-таблице). Вы, наверное, замечали, что некоторые сайты медленно работают, а другие молниеносны. Скорее всего, первый на jQuery и работает с реальным DOM, второй — на одном из реактивных инструментов, с которыми мы познакомимся далее.</p><h3>React</h3><p>Итак, эти концепции (Virtual Dom, компоненты, реактивность) улеглись в новом инструменте создания клиентских приложений от Facebook — <a href="https://reactjs.org/">React</a>. На текущий момент он является одним из лидеров индустрии, наиболее часто используемым во фронтенде. Он обладает развитой экосистемой — можно найти огромное количество готовых компонентов и дополнений.</p><h3>Управление состоянием</h3><p>Но между компонентами нужно было наладить связь, им нужно общаться между собой. Нажали на кнопку — изменился цвет. Можно строить эту взаимосвязь напрямую, но это быстро может превратиться в кашу. Тут придумали шаблон централизованного управления состоянием, когда есть одно место, где хранится состояние всего приложения в текущий момент времени. Это, сильно упрощая, такой <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Working_with_Objects">JavaScript-объект со свойствами</a>. Это состояние изменяется с помощью вызова действий и мутаций, но не будем сейчас так углубляться. Паттерн называется <a href="https://habrahabr.ru/post/246959/">Flux</a>. Самая популярная имплементация управления состоянием для React — <a href="https://redux.js.org/">Redux</a>.</p><p><a href="https://reactjs.org/">React</a>, хоть он и обрёл большую популярность и развитую экосистему, на практике оказался слишком голый, сложный, многословный. Для того, чтобы сделать простую форму, нужно много-много лишнего кода написать и кучу дополнений поставить. Для того, чтобы создать простое приложение, нужно ещё много чего установить, и вариантов для простых вещей очень много, легко можно потеряться — экосистема хоть и огромная, но в ней сложно ориентироваться; внешне одинаковые приложения могут быть совсем по-разному устроены внутри. А концепция <a href="http://websketches.ru/react-docs/introducing-jsx">JSX</a> — переплетение кода и разметки, выглядит не столь удачно, сложно потом понимать, что же такое хотел сказать автор кода, сложно менять разметку.</p><h3>Vue.js</h3><p>Тут появился <a href="https://ru.vuejs.org/">Vue.js</a> — гибкий, эффективный и простой в освоении веб-фреймворк, который несёт в себе всё те же концепции, но они в нём выглядят гораздо удачнее. Он объединил в себе всё лучшее из Angular и React, более чётко ответил на вопрос «что есть что». Из коробки Vue содержит уже большое количество инструментов и возможностей, которые в несколько строк позволяют писать объёмную логику. Разработка значительно упростилась.</p><p>Vue принёс ещё несколько интересных концепций, как, например, однофайловые компоненты — файлы, которые содержат в себе сразу логику, разметку и стили, и они там не переплетаются, как в случае с React и JSX. Vue из коробки позволяет использовать любые препроцессоры, которые очень органично вписываются в однофайловые компоненты. И имеет множество готовых встроенных решений, даже свою имплементацию Flux. Vue обладает <a href="https://ru.vuejs.org/v2/guide/">отличной документацией</a> на русском языке, которая научит вас лучшей практике во фронтенде, от сборки приложения до автотестов.</p><h3>Изоморфные приложения, SSR</h3><p>В разговоре об одностраничных приложениях мы упустили одну важную деталь: когда поисковый робот обращается к одностраничному приложению, он ничего не видит — только пустую страницу с тегами body без контента. В старомодных приложениях сервер обратился бы к базе данных, сгенерировал представление и отдал бы готовый HTML с текстом страницы. В случае с одностраничным приложением сервер отдаёт пустую страницу, которая лишь после инициализации подтягивает данные и показывает представление, чего конечно же поисковый робот не сделает. Таким образом, использовать одностраничные приложения для сайтов, ориентированных на контент, SEO, недопустимо.</p><p>Это недопущение обходилось множеством хаков и костылей, пока не появилась концепция SSR — <a href="https://ssr.vuejs.org/ru/">Server-Side Rendering</a>. Умные Парни научили весь JavaScript, который работал в браузере, выполняться на сервере с помощью <a href="https://nodejs.org/en/">NodeJS</a> (технология создания серверных приложений с помощью браузерного языка JavaScript). Это, конечно, ввело свои ограничения, но жить стало легче. Теперь можно было написать логику один раз на одном языке, и она сразу же работала и на сервере (при первом обращении посетителя/робота генерировался HTML с контентом страницы) и в браузере (последующие переходы посетителя). Это и называется изоморфное, универсальное приложение.</p><p>Схема простая: при первом заходе посетитель отправляет запрос на сервер NodeJS, который обращается к API-серверу, берёт данные в виде <a href="https://learn.javascript.ru/json">JSON</a> и отрисовывает их в HTML, возвращая посетителю. Дальше уже приложение живёт в браузере, при последующих переходах по страницам оно напрямую обращается к API-серверу за данными и уже непосредственно в браузере отрисовывает представление.</p><p>В React имплементация этой схемы делается разными и сложными путями. В качестве готовых решений есть для этого, например, фреймворк <a href="https://learnnextjs.com/">Next.js</a>. В документации Vue есть <a href="https://ru.vuejs.org/v2/guide/ssr.html">целый раздел</a>, посвященный SSR. Там указан фреймворк <a href="https://ru.nuxtjs.org/">Nuxt</a> — Vue + SSR. С его помощью можно довольно легко писать такие универсальные приложения.</p><h2>CSS-фреймворки, адаптивность</h2><p>Теперь мы сменим тему на попроще и поговорим о вёрстке.</p><p>Исторически, чтобы создать сетку страницы, её каркас, в первые времена верстальщики использовали <a href="http://htmlbook.ru/content/tablichnaya-verstka">таблицы</a>. Потом начали использовать блоки, или контейнеры, появилась <a href="http://fb.ru/article/146135/blochnaya-verstka-tegov-div-html">контейнерная вёрстка</a>. Положение блоков устанавливалось с помощью свойства позиционирования float: right/left.</p><p>В настоящее время всё упрощается, уже почти все браузеры поддерживают <a href="http://html5.by/blog/flexbox/">Flexbox</a> и <a href="https://habrahabr.ru/post/325760/">CSS Grid</a> — современные удобные способы верстать сетку страницы. Их умелое сочетание позволяет в несколько свойств добиваться таких положений контейнеров, над которыми пришлось бы старыми методами изрядно попотеть, позволяя с лёгкостью выполнить практически любые дизайнерские изыски.</p><p>Чтение по теме: <a href="https://tproger.ru/translations/css-flexbox-grid/">Flexbox и Grid — знакомство с CSS-вёрсткой</a></p><p><a href="https://tproger.ru/translations/responsive-web-design-tips/">Адаптивность</a> — это способность страницы выглядеть одинаково хорошо на всех устройствах, будь то ноутбук, планшет или мобильный телефон. Адаптивность достигается с помощью <a href="https://html5book.ru/css3-mediazaprosy/">медиа-запросов</a> — блоков условий в CSS, при каких разрешениях экрана какие CSS-свойства должны работать. Её можно также добиться с помощью умелого применения flexbox-контейнеров.</p><p>Все веб-приложения в основном типичны, состоят из строк, колонок, таблиц, кнопок и других UI-элементов. Чтобы не писать их каждый раз, в помощь сайтостроителям создавались CSS-фреймворки, где вся разметка уже продумана — достаточно применить нужный класс. Они содержат в себе множество готовых UI-элементов. Самый популярный — конечно же <a href="http://getbootstrap.com/">Bootstrap</a>, сейчас уже 4-я версия. Есть ещё <a href="https://bulma.io/">Bulma</a>, тоже довольно хороший. И ещё множество менее популярных. Обычно в CSS-фреймворках адаптивность идёт из коробки, важно лишь правильно пользоваться предлагаемыми инструментами. CSS-фреймворки станут отличной основой практически в любом вашем веб-приложении и хорошим началом освоения навыков правильной вёрстки. Их стоит использовать, когда нужны типичные элементы пользовательского интерфейса, адаптивность, а это 99% кейсов в вебе.</p><h3>Кроссбраузерность</h3><p>Это слово означает способность сайта отображаться одинаково в разных браузерах. Как правило, CSS-фреймворки берут эту заботу на себя, но я вкратце расскажу, как это достигается. Для начала нужно обнулить все свойства стандартных элементов (разные браузеры отображают стандартные элементы — списки, таблицы и др. по-разному). В CSS-фреймворках для этого часто можно увидеть специальный файлик — <a href="https://meyerweb.com/eric/tools/css/reset/">reset.css</a>. Следующее — исторически так сложилось, что браузеры развивались по-разному, и теперь некоторые CSS-свойства нужно прописывать специально для каждого браузера, используя <a href="https://itchief.ru/lessons/html-and-css/css-browser-prefixes">префиксы</a> — -webkit, -moz. Эту работу можно делать автоматически с помощью вышеупомянутого <a href="http://postcss.org/">PostCSS</a> и его <a href="https://github.com/postcss/autoprefixer">autoprefixer</a>.</p><h3>Методологии</h3><p>Чтобы вёрстка не превратилась в суп, ничего внезапно не ехало, всё было чётко и красиво — существуют специальные подходы, сборники правил о том, как называть тот или иной класс. Они очень вписываются в компонентную архитектуру, надо сказать, с них она и началась. Правило то же — всё есть компонент, или по-другому «блок». У блока есть свои элементы, мини-блоки, из которых и состоит блок. Изменяют отображение блока модификаторы, применяя к нему то или иное свойство. Изучите <a href="https://ru.bem.info/methodology/quick-start/">БЭМ</a> от Яндекса или <a href="http://suitcss.github.io/">SUIT CSS</a>, прежде чем начинать заниматься верстанием.</p><h2>В путь!</h2><p>Надеюсь, к концу статьи у вас уже сложилось более-менее полное и широкое понимание всех аспектов фронтенда. Теперь вам остаётся лишь его углублять, следуя шаг за шагом. Предложу вам план этих шагов, как стать профессиональным фронтендером:</p><ol><li>Изучите основы вёрстки — HTML, CSS. Хватит только основ — остальное наработается в процессе решения задач. Сразу для работы поставьте себе редактор <a href="https://code.visualstudio.com">VS Code</a>. Отдельное внимание уделите навыкам работы с <a href="http://html5.by/blog/flexbox/">Flexbox</a> и <a href="https://habrahabr.ru/post/325760/">CSS grid</a>.</li><li>Изучите <a href="http://getbootstrap.com">Bootstrap</a> или <a href="http://bulma.io">bulma.io</a>. Попробуйте создать каркас простого сайта с их помощью; изучите их исходники, они дадут вам хорошее понимание правильной архитектуры проекта. Примерно уже здесь, а лучше как можно раньше, пробуйте собирать какие-нибудь проектики, решать какие-нибудь задачки, нарабатывайте практику.</li><li>Изучите <a href="https://learn.javascript.ru/first-steps">JavaScript</a>. Да, тут тоже хватит только основ. Пробегитесь по синтаксису ES6, чтобы примерно его понимать. Попробуйте разобрать, как реализованы те или иные UI-компоненты в вышеупомянутых CSS-фреймворках.</li><li>Изучите основы <a href="https://git-scm.com/book/ru/v2">Git</a>. Это система контроля версий, и она уже на данном этапе хорошо вам послужит, позволит фиксировать поэтапно изменения в коде и хранить их.</li><li>Изучите <a href="https://ru.bem.info/methodology/quick-start/">BEM</a>/<a href="http://suitcss.github.io">SuitCSS</a>, что больше понравится.</li><li>Поймите синтаксис <a href="http://stylus-lang.com">Stylus</a> и <a href="https://pugjs.org/api/getting-started.html">Pug</a>.</li><li>Начните изучать документацию к <a href="http://ru.vuejs.org">Vue.js</a>. Она предельно понятна и на русском языке. В процессе изучения вы узнаете множество смежных вещей — компонентная архитектура, сборка с помощью webpack, работа с API, SSR, flux, автотестирование.</li><li>Пробегитесь по библиотеке <a href="http://lodash.com">lodash</a> — она вам очень поможет при написании кода на JavaScript, для более лаконичного кода без велосипедов.</li><li>Изучите автотестирование фронтенда. Это важный пункт, если вы сразу его освоите, облегчите себе дальнейшую жизнь. Не откладывайте его на потом. Рекомендую такие инструменты, как <a href="https://facebook.github.io/jest/">Jest</a> и <a href="https://devexpress.github.io/testcafe/">TestCafe</a>. В Vue.js есть <a href="http://vue-test-utils.vuejs.org/ru/guides/getting-started.html">хороший инструментарий</a> для автотестов из коробки.</li><li>Создайте собственное приложение, используя полученные знания. Придумайте идею или возьмите ту, что у вас давно сидит в голове; не просто так вы ведь решили стать программистом! В дополнение изучите транслируемые в JavaScript языки — <a href="http://www.typescriptlang.org">TypeScript</a>, <a href="http://coffeescript.org/">CoffeeScript</a>.</li></ol><p>Готово! Дальше только практика, вернее, она должна была начаться с первого пункта, а сейчас достигнуть своего апогея. Теперь вы мастер фронтенда! Хотя кто знает, может, к тому времени опять выйдет в свет какой-нибудь инструмент, который всё перевернёт во фронтенде, и придётся полностью менять свои понимания?</p><p>Глубоко в каждой теме не закапывайтесь, не старайтесь всё сразу запомнить. Главное — помнить, где и что посмотреть. Никогда не будет лишним повторить основы. Полезно общаться в комьюнити и желательно иметь живого, пусть даже удалённого, наставника, который поможет направить в случае застоя. Помните, что лучшее понимание приходит в процессе решения задач.</p><h2>Часто задаваемые вопросы</h2><h3>С какого языка лучше начать изучение фронтенда?</h3><p>Начинать стоит с HTML и CSS — это основа любой веб-страницы. HTML отвечает за структуру и содержание, CSS — за визуальное оформление. Когда освоите базовую вёрстку, переходите к JavaScript — он отвечает за логику и интерактивность. Эти три технологии составляют фундамент фронтенд-разработки.</p><h3>React или Vue.js — что выбрать новичку?</h3><p>Для начинающих Vue.js часто проще в освоении: он имеет отличную документацию на русском языке, содержит больше инструментов из коробки и чётко разделяет логику, разметку и стили. React обладает более обширной экосистемой и чаще встречается в вакансиях, но требует установки множества дополнительных библиотек. Оба фреймворка востребованы на рынке.</p><h3>Нужно ли изучать jQuery в 2026 году?</h3><p>jQuery сыграла важную роль в истории фронтенда, но в современной разработке её заменили нативные возможности JavaScript (ES6+) и компонентные фреймворки (React, Vue.js). Изучать jQuery с нуля не стоит, но полезно знать о её существовании — вы можете встретить её в поддержке старых проектов.</p><h3>Сколько времени нужно, чтобы стать frontend-разработчиком?</h3><p>При системном подходе и ежедневной практике базовый уровень (HTML, CSS, JavaScript, один фреймворк) можно освоить за 6-12 месяцев. Однако фронтенд постоянно развивается, и профессиональный рост продолжается всю карьеру. Главное — не пытаться выучить всё сразу, а двигаться по плану, закрепляя знания на практических проектах.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как разобраться в Computer Science самостоятельно</title>
      <link>https://tproger.ru/curriculum/computer-science-step-by-step</link>
      <comments>https://tproger.ru/curriculum/computer-science-step-by-step?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/computer-science-step-by-step</guid>
      <description><![CDATA[<p>Как изучить Computer Science самостоятельно: 9 дисциплин — программирование, алгоритмы, ОС, сети, базы данных. Лучшие книги и бесплатные курсы MIT и Беркли.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/computer-science-step-by-step">Как разобраться в Computer Science самостоятельно</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Для продолжающих]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 08 Mar 2018 13:44:12 GMT</pubDate>
      <content:encoded><![CDATA[<p>Для большинства программистов Computer Science — факультет в зарубежных вузах, целиком и полностью посвящённый программированию, математике и всему, что связано с разработкой программного обеспечения. К счастью, в современном мире необязательно инвестировать тысячи долларов и 4 года своей жизни в образование, ведь существует бесчисленное множество онлайн-курсов, книг и других ресурсов для изучения компьютерных наук.</p><p>Приводить сотни всевозможных материалов для программистов-самоучек мы не будем, а лишь попытаемся ответить на два главных вопроса:</p><ul><li>Какие дисциплины следует изучать и почему?</li><li>Какие из доступных ресурсов, книг, серий лекций для конкретной дисциплины имеет смысл посмотреть?</li></ul><p>В качестве ответа приведём список материалов, опубликованный Озаном Онай (Ozan Onay) и Майлзом Бёрном (Myles Byrne) — инструкторами в школе компьютерных наук Брэдфилда в Сан-Франциско. Данная подборка литературы и курсов основана на личном опыте обучения сотен программистов-самоучек.</p><p><b>Ключевые выводы:</b><br />— Computer Science — это фундамент, который отличает высокооплачиваемых инженеров от тех, кто просто знает инструменты<br />— Девять ключевых дисциплин: программирование, архитектура ЭВМ, алгоритмы, математика, ОС, сети, базы данных, компиляторы, распределённые системы<br />— Для каждой дисциплины есть одна лучшая книга и одна лучшая серия лекций — не нужно перебирать сотни ресурсов<br />— Практика через проекты (написать компилятор, HTTP-сервер, БД) важнее, чем просто чтение теории<br />— Порядок изучения не строг, но архитектуру ЭВМ лучше освоить до операционных систем и баз данных</p><h2>Зачем изучать компьютерные науки?</h2><p>Существует два типа программистов: те, кто владеют компьютерными науками достаточно хорошо, чтобы совершать инновации, и те, кто вроде как что-то могут благодаря знанию пары-тройки высокоуровневых инструментов.</p><p>И те и другие называют себя программистами или инженерами программного обеспечения и имеют примерно одинаковые доходы в начале своей карьеры. Однако первые в итоге становятся более высокооплачиваемыми специалистами. Причём абсолютно неважно, работают они над известными, дорогими и большими коммерческими проектами или над инновационными open-source проектами различной сложности. Они становятся лидерами в своей области и привносят нечто большее и более качественное на рынок.</p><p>Они углубленно изучают компьютерные науки, читая книги, слушая лекции, практикуясь или же упорно поглощая материал на личном опыте в своей карьере. Вторые же обычно остаются на дне, изучая различные инструменты и технологии для своей работы, а не то, на чём эти технологии основаны. Для них причиной для изучения чего-то нового является появление новых инструментов и, следовательно, устаревание старых.</p><p>На данный момент число людей в индустрии постоянно растёт, а число выпускников с факультета компьютерных наук остаётся неизменным. Перенасыщение рынка инженерами второго типа в итоге приводит оных к безработице или к сравнительно дешевому трудоустройству. Вне зависимости от ваших стремлений: хотите вы стать инженером первого типа или просто ищете способ заработать немного денег, изучение Computer Science — единственный надёжный путь для этого. Подробнее о том, <a href="https://tproger.ru/translations/google-guide-to-programming/">как стать хорошим программистом</a>, рассказывает Google в своём руководстве.</p><h2>Дисциплины</h2><h3>Программирование</h3><p><b>Лучшая книга:</b></p><p><b>Лучшая серия лекций:</b> <a href="https://www.youtube.com/watch?v=4leZ1Ca4f0g&amp;list=PLhMnuBfGeCDNgVzLPxF9o5UNKG1b-LFY9">Brian Harvey's Berkeley CS 61A</a></p><p>Львиная доля студентов Computer Science начинают с «вводных курсов» по программированию. Однако такие курсы будут полезны не только новичкам, но и вполне себе специалистам, которые по какой-либо причине пропустили некоторые базовые для программирования вещи.</p><p>Мы рекомендуем взять во внимание классическую <a href="http://newstar.rinet.ru/~goga/sicp/sicp.pdf">«Структуру и интерпретацию компьютерных программ»</a>. Прочтите как минимум три главы приведенной выше книги, выполняя упражнения для практики. Для тех, кому данная книга кажется слишком сложной, рекомендуется «How to design programs». Тем же, кому она наоборот кажется слишком лёгкой, следует обратить внимание на <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.102.7366&amp;rep=rep1&amp;type=pdf">«Concepts, Techniques, and Models of Computer Programming»</a>.</p><p>Можно также послушать <a href="https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/">лекции</a> университета MIT по данной теме. Как альтернативу мы рекомендуем прослушать <a href="https://archive.org/details/ucberkeley-webcast-PL3E89002AA9B9879E?sort=titleSorter">лекции Брайана Харви</a> из университета Беркли, особенно, если для вас это в новинку.</p><p>Для дополнительной практики возьмите на заметку ресурс <a href="http://exercism.io/">Exercism</a>: на нём можно найти сотни интересных задачек по программированию, которые помогут вам в освоении синтаксиса разных языков программирования и прокачают ваше логическое мышление, которое необходимо программисту, как воздух.</p><h3>Архитектура ЭВМ</h3><p><b>Лучшая книга:</b></p><p><b>Лучшая серия лекций:</b> <a href="https://www.youtube.com/watch?v=2WDdFEMC7a4&amp;list=PLPj7zH6RMqHs-hypGyogmEIgJSSWgFJ1w">Berkeley CS 61C</a></p><p>Архитектура ЭВМ, также иногда называемая «компьютерными системами» или «организацией компьютера» — достаточно важная тема, описывающая работу аппаратного слоя, который лежит на уровень ниже, чем слой программного обеспечения. Пожалуй, самая недооцененная область среди инженеров-самоучек.</p><p><a href="http://f.javier.io/rep/books/The%20Elements%20of%20Computing%20Systems.pdf">The elements of Computing Systems</a> — амбициозная книга, которая даёт понимание того, как работает компьютер. Каждая глава — строение одной маленькой детали большой системы: от написания логики на HGL (языке описания аппаратуры) через центральный процессор к созданию тетриса.</p><p>Мы рекомендуем прочесть как минимум первые 6 глав книги и завершить указанный в ней проект. Это поможет лучше понять отношения между архитектурой компьютера и программным обеспечением, которое на ней работает.</p><p>Не ищите простого объяснения сложных вещей в этой книге — автор заходит издалека. Если конкретнее, то в книге, например, почти полностью отсутствуют два очень важных концепта в современной архитектуре ЭВМ — вычислительный конвейер и иерархия памяти.</p><p>Как только вы почувствуете себя в своей тарелке, читая эту книгу, смело переходите на <a href="http://ac.aua.am/Arm/Public/2017-Spring-Computer-Organization/Textbooks/ComputerOrganizationAndDesign5thEdition2014.pdf">Computer Organization And Design</a>, отличный текст, который стал своего рода классикой. Также обратите внимание на курс <a href="http://inst.eecs.berkeley.edu/~cs61c/sp15/">CS61C</a>, лекции которого доступны онлайн.</p><h3>Алгоритмы и структуры данных</h3><p><b>Лучшая книга:</b></p><p><b>Лучшая серия лекций:</b> <a href="https://www.youtube.com/user/StevenSkiena">Лекции Стивена Скиены</a></p><p>Мы полностью согласны с народной мудростью, которая гласит, что знание алгоритмов и структур данных — один из важнейших аспектов изучения компьютерных наук. К тому же, это отличный способ потренироваться в способности решать разного рода задачи, которые пригодятся в любой области компьютерных наук.</p><p>Есть сотни книг для изучения алгоритмов, но наш фаворит — «Алгоритмы Руководство по разработке» от Стивена Скиены. Наш выбор пал именно на неё, потому что автор определенно любит то, что он делает и хочет донести свои знания до читателя.</p><p>Для тех же, кто предпочитает лекции в формате видео, Скиена предлагает свой <a href="http://www3.cs.stonybrook.edu/~algorith/video-lectures/">онлайн-курс</a>. Также следует обратить внимание на курс Тима Рафгардена, доступного на Lagunita (сервис от университета Стэнфорда) или на <a href="https://www.coursera.org/specializations/algorithms">Coursera</a>. Материал обоих авторов очень полезен и информативен и кому из них уделить внимание — решать вам.</p><p>Мы практикуемся, решая задачи на <a href="https://leetcode.com/">Leetcode</a>, потому что их задачи кажутся нам наиболее интересными. К тому же у каждой задачи есть ветка обсуждения и прикрепленное решение для самопроверки. Стоит отметить, что подобного рода задачи могут являться вопросами на интервью — взгляните на нашу подборку <a href="https://tproger.ru/articles/problems/">123 задачи с IT-собеседований с разбором решений</a>. Для проверки своего знания алгоритмов решите 100 случайных задач на Leetcode.</p><p>В завершение, мы настоятельно рекомендуем <a href="https://notendur.hi.is/hei2/teaching/Polya_HowToSolveIt.pdf">How to solve it</a> — великолепный материал для практики решения задач. Подходит как тем, кто изучает компьютерные науки, так и математикам.</p><h3>Математика для компьютерных наук</h3><p><b>Лучшая книга: </b></p><p><b>Лучшая серия лекций: </b><a href="https://www.youtube.com/watch?v=L3LMbpZIKhQ">Tom Leighton's MIT 6.042J </a></p><p>В каком-то смысле компьютерные науки — это лишь область прикладной математики. Пока некоторые программисты пытаются и возможно преуспевают в попытках оставаться вдали от математики, мы рекомендуем не уподобляться им и изучать её. Ведь знание математики даст вам значительную фору по сравнению с другими программистами, которые математику игнорируют.</p><p>В основе большая часть математики для компьютерных наук — дискретная математика, где слово «дискретная» — прямая противоположность слову «непрерывная» и, грубо говоря, является сборником интересных тем в прикладной математике, за пределами математического анализа. Немного расплывчато, согласны. Впрочем, это не так важно: можно поставить себе цель изучить базовую логику, комбинаторику, теорию вероятности, теорию графов, основы криптографии. Линейная алгебра не менее прочего заслуживает вашего внимания, особенно для изучения компьютерной графики или машинного обучения.</p><p>Хорошим началом изучения дискретной математики является <a href="http://www.cs.elte.hu/~lovasz/dmbook.ps">сборник лекций от László Lovász</a>. Профессор проделал хорошую работу, чтобы сделать математику понятной и интуитивной, так что его работы куда больше подойдут новичкам, чем формальные математические тексты.</p><p>Для большего погружения советуем <a href="https://courses.csail.mit.edu/6.042/spring17/mcs.pdf">Mathematics for Computer Science</a> — записи с лекций по одноименному курсу MIT, которые по объёму тянут на полноценную книгу. Видео данных лекций, кстати, тоже в <a href="https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/video-lectures/">свободном доступе</a>.</p><p>Для линейной алгебры мы предлагаем начать с плейлиста Основы линейной алгебры.</p><h3>Операционные системы</h3><p><b>Лучшая книга: </b></p><p><b>Лучшая серия лекций: </b><a href="https://www.youtube.com/watch?v=feAOZuID1HM&amp;list=PLggtecHMfYHA7j2rF7nZFgnepu_uPuYws">Berkeley CS 162</a></p><p>Operating System Concepts и <a href="http://www.ece.sunysb.edu/~yang/333slides/MOS-3e-04.pdf">Modern Operating Systems</a> — классика в вопросе операционных систем. Обе довольно часто подвергались критике в основном за то, что не являются 1000-страничными быстроустаревающими энциклопедиями, новое издание которых приходится покупать каждые пару лет.</p><p>Существует ещё одна книга по операционным системам, которую мы также очень рекомендуем к ознакомлению. <a href="http://pages.cs.wisc.edu/~remzi/OSTEP/">Three Easy Pieces</a>: структура повествования книги делает её легкой к восприятию, а задания помогут закрепить полученные знания.</p><p>После прочтения указанных выше книг имеет смысл пройтись по конкретным операционным системам и прочесть следующее: <a href="http://www.lemis.com/grog/Documentation/Lions/book.pdf">A commentary on the unix operating system</a>, The design and implementation of the freeBSD operating systems и Mac OS internals.</p><p>Идеальный способ закрепить полученные знания — это прочесть код небольшого ядра и внести в него свои изменения. Как вариант можно взять XV6 — современную реализацию 6 версии Unix для архитектуры x86, написанную на ANSI C. В приведённой выше Three Easy Pieces есть раздел с заданиями с XV6, полный интересных идей для потенциальных проектов.</p><h3>Компьютерные сети</h3><p><b>Лучшая книга: </b></p><p><b>Лучшая серия лекции: </b><a href="https://www.youtube.com/watch?v=nh970YyKRDA&amp;list=PLvFG2xYBrYAQCyz4Wx3NPoYJOFjvU7g2Z">Stanford CS 144</a></p><p>Учитывая то, что львиная доля работы у программистов целиком и полностью опирается на веб-сервера, компьютерные сети — одна из самых важных областей компьютерных наук. Программисты-самоучки, которые методично изучают компьютерные сети, хвастают тем, что гораздо лучше многих понимают термины, концепты, протоколы, которыми постоянно окружены в своей карьере.</p><p>Наш фаворит в этом вопросе — <a href="https://files.ttuwiki.org/Computer_Networking_second_edition_rus.pdf">Computer Networking: A Top-Down Approach</a>. Небольшие проекты и задания для практики на протяжении всего материала весьма интересны и стоят вашего внимания. Также следует обратить внимание на <a href="http://www-net.cs.umass.edu/wireshark-labs/">Wireshark labs</a>, любезно предоставленные автором книги.</p><p>Для тех же, кто предпочитает просмотр лекций чтению книг, мы рекомендуем серию лекций от университета Стэнфорд <a href="https://www.youtube.com/watch?v=nh970YyKRDA&amp;list=PLvFG2xYBrYAQCyz4Wx3NPoYJOFjvU7g2Z">Stanford CS 144</a>.</p><p>Небольшие проекты, как ни странно, более полезны для освоения компьютерных сетей, нежели задачки. Некоторые из них — HTTP сервер, чат-приложение на UDP, <a href="https://jvns.ca/blog/2014/08/12/what-happens-if-you-write-a-tcp-stack-in-python/">мини TCP stack</a> или же распределённая таблица хэшей и т.д.</p><h3>Базы данных</h3><p><b>Лучшая книга: </b></p><p><b>Лучшая серия лекций: </b><a href="https://www.youtube.com/watch?v=IZmWm9YP_kg&amp;list=PLItyOfErSadfnXtWkFX5yA7PQ8j8ZpORE">Joe Hellerstein's Berkeley CS 186</a></p><p>Изучение баз данных требует куда большего упорства, чем нужно для других тем, так как базы данных —относительно новая область компьютерных наук (с 1970-ых). Её основы скрыты от нас по вполне себе понятным коммерческим причинам. К тому же многие потенциальные авторы книг по базам данных предпочли сами стать разработчиками и основали свои компании.</p><p>Учитывая приведенные выше обстоятельства, мы настоятельно рекомендуем новичкам избегать книжек и начинать прямиком с записей <a href="https://archive.org/details/UCBerkeley_Course_Computer_Science_186">CS186 весны 2015</a> от Джо Геллерштейна из университета Беркли. После данного курса уже можно переходить к книжкам.</p><p>Одна из них — это <a href="http://db.cs.berkeley.edu/papers/fntdb07-architecture.pdf">Architecture of a Database System</a> от того же профессора из того же университета. Книга даст читателю углубленный взгляд на реляционные базы данных и послужит отличным скелетом для будущих знаний в этой области.</p><p><a href="http://www.redbook.io/">Readings in Database Systems</a>, также известная как красная книга по базам данных (никто не вымирает), представляет собой сборник публикаций по данной теме. Для тех, кто осилил CS186, эта книга может стать следующей остановкой.</p><p>Если вы настаиваете на том, чтобы начинать изучение баз данных по книжкам, то советуем обратить внимание на <a href="http://pages.cs.wisc.edu/~dbbook/openAccess/thirdEdition/solutions/ans3ed-oddonly.pdf">Database management systems</a>.</p><p>Сложно закрепить знания в этой области без практики. Студенты CS186 работают над дополнениями для Spark, однако лучшей практикой для начинающих будет всё же написание своей реляционной базы данных с нуля. Скорее всего, она поначалу не будет богата уникальными особенностями, но значительно укрепит ваше понимание темы.</p><p>Под конец, моделирование данных — один из самых пренебрегаемых аспектов в изучении баз данных. Здесь нашим фаворитом является <a href="https://www.amazon.com/Data-Reality-Perspective-Perceiving-Information/dp/1935504215">Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World</a>.</p><h3>Языки и компиляторы</h3><p><b>Лучшая книга: </b></p><p><b>Лучшая серия лекций: </b><a href="https://www.youtube.com/watch?v=sm0QQO-WZlM&amp;list=PLFB9EC7B8FE963EB8">Alex Aiken's course on Lagunita</a></p><p>Большинство программистов изучают языки программирования, в то время как специалисты компьютерных наук пытаются понять, как эти языки работают. Эти знания позволяют им опережать своих коллег по карьерной лестнице и быстрее схватывать новый материал. Не случайно в <a href="https://tproger.ru/articles/junior-middle-senior-developers-differences/">отличиях junior, middle и senior разработчиков</a> знание основ CS называется одним из ключевых факторов роста.</p><p>Классикой в данном вопросе является <a href="http://www.informatik.uni-bremen.de/agbkb/lehre/ccfl/Material/ALSUdragonbook.pdf">Compilers: Principles, Techniques and Tools</a>. К сожалению, этот материал больше подходит учителям, нежели самоучкам. Однако книга отлично подойдёт для непоследовательного чтения, для выхватывания отдельных кусков из материала и изучения по ним. К тому же, если у вас будет учитель, это лишь ускорит ваше обучение.</p><p>Если же вы решите учиться по данной книге без учителя, то настоятельно рекомендуем обратить внимание на <a href="https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about">серию лекций от Алекса Айкена</a> из Стэнфордского университета.</p><p>Потенциальной альтернативой этой книге может стать Language Implementation Patterns. Она написана с упором на инженеров, которые собираются практиковаться на языках вроде DSL.</p><p>В качестве проекта для закрепления материала можно написать свой компилятор для простенького языка вроде <a href="https://en.wikipedia.org/wiki/Cool_(programming_language)">COOL</a>. Те, кому данный проект кажется невыполнимым, могут начать с чего-то вроде <a href="https://github.com/kanaka/mal">Make a Lisp</a>.</p><h3>Распределённые системы</h3><p><b>Лучшая книга: </b></p><p>Число компьютеров и их разнообразие увеличилось за последние несколько десятков лет. Если раньше крупные компании закупали огромные сервера для обеспечения работы каких-либо программ, то сегодня нам кажется очевидным тот факт, что даже самые незначительные программы работают на нескольких компьютерах одновременно. Распределённые системы — наука о том, как это обеспечить.</p><p>Книга, которую мы хотим посоветовать, — Distributed Systems, третье издание которой служит прекрасным дополнением всем предыдущим. Учитывая то, что распределенные системы — область, которая достаточно часто меняется, нет уникальной книги, которая проведёт вас по этому тернистому пути. Приведённая же выше книга, по нашему мнению, наиболее близка к этому идеалу.</p><p>Можно также обратить внимание на серию лекций <a href="https://www.youtube.com/watch?v=hBWfjkGKRas&amp;list=PLkcQbKbegkMqiWf7nF8apfMRL4P4sw8UL">MIT 6.824</a>, но, к сожалению, качество записи звука оставляет желать лучшего.</p><p>Не имеет значения, какую книгу или сторонний ресурс вы выбрали для изучения распределённых систем, погружение в эту область компьютерных наук требует от студента чтения большого количества литературы. <a href="http://dsrg.pdos.csail.mit.edu/papers/">Здесь</a> вы можете найти список полезных книг.</p><h2>Часто задаваемые вопросы</h2><h3>Что насчет искусственного интеллекта и графики?</h3><p>Мы постарались ограничить наш материал списком дисциплин, которым, как нам кажется, любой практикующий инженер должен владеть вне зависимости от специальности и индустрии. С таким фундаментом знаний вы сможете гораздо быстрее схватывать новый материал из книг или сторонних ресурсов. Что касается ИИ и графики, вот наш список рекомендуемых материалов:</p><ul><li>ИИ: пройдите <a href="http://ai.berkeley.edu/home.html">введение в ИИ от университета Беркли</a> и выполните проект Pacman. Прочтите великолепную книгу от Рассела и Новрига Artificial Intelligence: A Modern Approach;</li><li>Машинное обучение: пройдите <a href="https://ru.coursera.org/learn/machine-learning">этот</a> курс на Coursera и убедитесь, что действительно понимаете смысл повествования и основы машинного обучения, прежде чем переходить на Deep Learning;</li><li>Графика: ознакомьтесь с серией лекций из университета Беркли <a href="https://cs184.eecs.berkeley.edu">CS184</a> и прочтите книгу Computer Graphics: Principles and Practice.</li></ul><h3>Насколько важно строго следовать порядку, приведённому в статье?</h3><p>На самом деле, все 9 дисциплин достаточно часто пересекаются. К примеру, возьмите дискретную математику и алгоритмы: изучение математики поможет вам в освоении алгоритмов. Знание алгоритмов, в свою очередь, даст стимул погрузиться в дискретную математику. В идеальном сценарии программист достаточно часто повторяет данный материал в своей карьере.</p><p>По существу наша последовательность сконструирована таким образом, чтобы помочь вам начать. Если у вас есть непреодолимое желание следовать другой последовательности, мы не настаиваем. Однако мы считаем, что освоить архитектуру ЭВМ нужно перед освоением операционных систем и баз данных, а компьютерные сети и операционные системы перед распределёнными системами.</p><h3>Что общего у данного списка с Open Source Society или FreeCodeCamp?</h3><p>Первый содержит слишком много дисциплин для изучения, предлагает не самые лучшие материалы для большинства из них и не даёт понять, какие аспекты конкретной дисциплины наиболее ценны. Мы же попытались ограничить наш материал списком дисциплин, которые должен знать каждый инженер, вне зависимости от специальности.</p><p>Касательно FreeCodeCamp, данный ресурс сконцентрирован на программировании, а не на компьютерных науках.</p><h3>А где же язык X?</h3><p>Изучение конкретного языка программирования — совершенно другая плоскость, нежели изучение компьютерных наук. Изучение языка программирования — задача наиболее простая и менее ценная. Если вы уже знаете пару-тройку языков, то советуем просто следовать нашему списку дисциплин, оставляя языки на потом. Если вы знаете программирование в целом достаточно хорошо и знаете, как работают компиляторы, вам потребуется не больше недели, чтобы выучить новый язык программирования.</p><h3>Почему вы до сих пор рекомендуете книжку с драконами (Compilers: Principles, Techniques and Tools)?</h3><p>Потому что книжка с драконами до сих пор является полным и актуальным источником информации по компиляторам. Проблема в том, что никто и предположить не мог, что в итоге книга окажется инструкцией для преподавателей по составлению учебной программы. Вы же можете воспользоваться этим для составления своей собственной программы или следуя программе какого-либо преподавателя.</p><h3>Сколько времени нужно, чтобы освоить Computer Science самостоятельно?</h3><p>При занятиях по 10-20 часов в неделю полное прохождение всех девяти дисциплин займёт от 1 до 2 лет. Однако важно понимать, что Computer Science — это не спринт, а марафон. Многие инженеры продолжают углублять свои знания на протяжении всей карьеры. Начните с программирования и алгоритмов — это даст наиболее быструю отдачу.</p><h3>Можно ли изучить Computer Science без знания английского языка?</h3><p>Часть рекомендованных книг переведена на русский, но большинство качественных лекций и курсов доступны только на английском. Знание английского на уровне чтения технической литературы — практически обязательное условие для серьёзного изучения компьютерных наук. Если ваш английский пока слабый, начните с переведённых книг и параллельно подтягивайте язык.</p><h3>Нужно ли высшее образование, если я изучу всё из этого списка?</h3><p>Формальный диплом по-прежнему важен для некоторых компаний и позиций, особенно в крупных корпорациях и при иммиграции. Однако знания из этого списка полностью покрывают программу бакалавриата по Computer Science в ведущих университетах. Если вы можете подтвердить свои знания на практике — через проекты, вклад в open-source или успешные собеседования — многие работодатели примут это наравне с дипломом. Посмотрите, <a href="https://tproger.ru/articles/junior-developer-should-know/">что должен знать Junior-разработчик</a>, чтобы понять, с чего стоит начать путь в профессию.</p>]]></content:encoded>
    </item>
    <item>
      <title>Хочу стать веб-разработчиком: подробный план по изучению JavaScript</title>
      <link>https://tproger.ru/curriculum/javascript-curriculum</link>
      <comments>https://tproger.ru/curriculum/javascript-curriculum?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Иван Бирюков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/curriculum/javascript-curriculum</guid>
      <description><![CDATA[<p>Учебный план охватывает основы JavaScript, Git, алгоритмы и структуры данных, а также Node.js, Electron, NativeScript и React Native.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/curriculum/javascript-curriculum">Хочу стать веб-разработчиком: подробный план по изучению JavaScript</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <category><![CDATA[Планы обучения]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 19 Jun 2017 09:20:21 GMT</pubDate>
      <content:encoded><![CDATA[<p>Веб-разработка — одно из самых простых и оттого популярных направлений среди начинающих программистов. Для работы достаточно любого текстового редактора и браузера, не нужно изучать алгоритмы на продвинутом уровне, результат каждого этапа написания программы нагляден — в общем, преимуществ много. Ключевым навыком в контексте веб-разработки считается знание JavaScript.</p><p>Сейчас JavaScript очень быстро развивается, а потому при изучении языка легко запутаться. Мы предлагаем вашему вниманию учебный план с удобной структурой, который охватывает все необходимые аспекты JavaScript и смежных технологий.</p><h2>Почему JavaScript?</h2><p>Стоит отметить открытость языка — компании, обычно соперничающие друг с другом, сотрудничают с целью развития JavaScript. Язык очень гибок и подойдёт сторонникам как объектно-ориентированного, так и функционального подхода. Огромное количество библиотек и фреймворков позволяет с лёгкостью решать любые типы задач, а серверная платформа Node.js даёт возможность использовать язык не только в браузере, но и в консоли. Вы даже можете писать настольные и мобильные приложения: первые — при помощи фреймворка Electron, а вторые — на NativeScript или React Native.</p><h2>Основы</h2><p>Сперва необходимо изучить основные понятия JavaScript, веб-разработки и программирования в целом:</p><ul><li>объектно-ориентированный JS — конструкторы и фабрики, наследование;</li><li>функциональный JS — функции высшего порядка, замыкания, рекурсия;</li><li>спецификации тестов Jasmine;</li><li>основы HTML, CSS и jQuery.</li></ul><h3>Git</h3><p>Git — необходимый разработчикам инструмент, поэтому <a href="https://geekbrains.ru/courses/66?utm_medium=adv_post&amp;utm_source=tproger.ru&amp;utm_campaign=19.06.17&amp;utm_term=izuchenie_javascript&amp;utm_content=courses_66">познакомиться</a> с ним нужно как можно раньше. Вот основные навыки, которыми вы должны обладать:</p><ul><li>создание и перемещение файлов в каталогах;</li><li>инициализация и коммиты в Git;</li><li>настройка репозиториев в GitHub.</li></ul><h3>Алгоритмы и структуры данных</h3><p>Затем стоит изучить алгоритмы (в частности, понятие сложности алгоритмов), а также базовые структуры данных: связные списки, очереди, стеки, двоичные деревья поиска и хэш-таблицы. В этом вам поможет <a href="https://tproger.ru/tag/algos-and-data-structs/">наша серия статей</a>.</p><h2>Бэкенд</h2><h3>Node.js</h3><p>10 лет назад JavaScript можно было использовать только для фронтенд-разработки. Теперь благодаря Node.js одним «фронтом» дело не ограничивается. Node — это просто среда для выполнения JS-кода на стороне сервера, поэтому вам не придётся изучать новый синтаксис, но понадобится импортировать и экспортировать файлы, разбивать код на модули и использовать менеджер пакетов npm.</p><h3>Серверы, HTTP, Express.js</h3><p>После изучения Node стоит продолжить знакомство с бэкенд-разработкой и разобраться в серверах и маршрутизации. Можно начать с портов и протоколов с акцентом на HTTP, а потом заняться Express — Node-библиотекой для обработки запросов.</p><h3>Асинхронный JavaScript</h3><p><a href="https://tproger.ru/translations/asynchronous-javascript/">Асинхронность</a> является одной из отличительных фич JavaScript, хотя и создаёт некий раскол среди разработчиков: некоторые её любят, а некоторые — ненавидят. Вам стоит понимать плюсы и минусы этой технологии. Начните со стека вызовов, цикла событий и коллбеков, а затем перейдите к изучению <a href="https://tproger.ru/translations/meet-the-promises/">промисов</a>.</p><h3>Базы данных, схемы, модели и ORM</h3><p>Базы данных — один из важнейших элементов веб-разработки. Если вашему приложению нужно загружать или хранить какие-либо данные, не теряющиеся при обновлении страницы, придётся использовать БД. Нужно научиться различать реляционные и нереляционные базы данных и разобраться в типах связей. Затем <a href="https://tproger.ru/video/sql-introduction/">изучить SQL</a> и познакомиться с разными <a href="https://tproger.ru/translations/sqlite-mysql-postgresql-comparison/">системами управления баз данных</a>. Умение работать с ORM тоже не будет лишним.</p><h2>Фронтенд</h2><h3>HTML и CSS</h3><p>HTML и CSS — это основа основ для любого веб-разработчика. Вам не обязательно знать их в совершенстве, но разбираться в них вы должны. Также можно изучить какую-нибудь популярную библиотеку (например, Bootstrap) и CSS-препроцессор вроде Sass — он поможет сделать CSS похожим на обычный код. Для упрощения работы с HTML можно выбрать один из популярных шаблонизаторов, например, pug.</p><h3>jQuery и манипуляция DOM</h3><p>Создав внешний облик страницы при помощи HTML и CSS, вы будете использовать <a href="https://tproger.ru/translations/event-emitter-javascript/">трансляторы событий</a> и библиотеку jQuery для управления DOM. Многие считают, что jQuery бесполезна и её скоро заменят Angular и React, но она безумно популярна, и поэтому её стоит знать. Кроме того, однажды вы попадёте в ситуацию, когда забивать гвозди React-микроскопом вам будет неудобно, и тогда на помощь вам придёт лёгкая jQuery.</p><h3>Инструменты разработчика Chrome</h3><p>Было бы непростительно обделить вниманием <a href="https://learn.javascript.ru/devtools">инструменты Chrome</a>, которые дают огромное количество возможностей. С ними вы сможете изучать элементы DOM, производить отладку через консоль, отслеживать маршруты и многое другое. В <a href="https://tproger.ru/translations/chrome-command-line-api-cheatsheet/">нашей статье</a> описаны несколько удобных возможностей консоли Chrome, которые упростят выполнение рутинных задач.</p><h3>AJAX</h3><p>Если вы хотите, чтобы приложение не перезагружало страницы после каждой операции с базой данных, вам точно понадобится AJAX — он отправляет фоновые асинхронные HTTP-запросы, ответы на которые обновляют лишь часть отображения. Работать с AJAX можно через jQuery при помощи метода .ajax.</p><h2>Продвинутые темы</h2><h3>Разработка через тестирование</h3><p><a href="https://tproger.ru/articles/why-test-driven-development/">Test-Driven Development</a>, или TDD — это такая техника разработки, при которой создание ПО разбивается на множество небольших циклов: сначала пишутся тесты, которые покрывают желаемое изменение, затем пишется код, который эти тесты проходит. После этого производится рефакторинг кода, при необходимости пишутся новые тесты. Если какие-то тесты участок кода не проходит, это исправляется.</p><p>В случае с JavaScript советуем обратить внимание на фреймворки Jasmine, Chai и Mocha. Кстати, на нашем сайте есть <a href="https://tproger.ru/translations/frontend-testing-1/">цикл статей</a>, посвящённый тестированию фронтенда — может пригодиться.</p><h3>Веб-сокеты</h3><p>Этой теме стоит уделить особое внимание, поскольку <a href="https://tproger.ru/translations/what-are-web-sockets/">веб-сокеты</a> очень полезны. Протокол WebSocket, в отличие от HTTP, позволяет работать с двунаправленным потоком данных, что делает эту технологию уникальной. Самой распространённой реализацией является библиотека socket.io — разобраться с ней и применить полученные навыки на практике поможет <a href="https://tproger.ru/translations/multiplayer-browser-game-1/">наше руководство</a> по созданию многопользовательской браузерной игры.</p><h3>ES6, Babel, Webpack</h3><p>Сейчас основным стандартом является ES6 (ES2015), но уже принят ES2016, а ES2017 находится в разработке, поэтому нужно всегда быть в курсе обновлений и использовать их. Проблемы совместимости решаются всего парой инструментов:</p><ul><li>Babel — компилирует ES6-код (скоро появится поддержка ES2016) в ES5, который поддерживается всеми браузерами. Он даже умеет компилировать JSX/React-компоненты, что делает его незаменимым для любого веб-разработчика;</li><li>Webpack — собирает все ваши исходные файлы (картинки, шрифты, таблицы стилей, JS-файлы и т.д.) в единый граф зависимостей. Он не пригодится при создании маленьких приложений, но при работе с React его помощь неоценима.</li></ul><h3>React и Redux</h3><p>React — библиотека для создания пользовательских интерфейсов. Она была создана компанией Facebook в 2013 году и достаточно быстро стала популярной среди разработчиков. Вам стоит прочитать <a href="https://tproger.ru/translations/9-useful-tips-react/">эти 9 советов</a>, а затем разобрать <a href="https://tproger.ru/translations/react-basic-weather-app/">написание простого приложения</a>, чтобы понять, как работает React и для чего он нужен. React пригодится не только для фронтенд-разработки: Facebook выпустила варианты фреймворка для мобильной (React Native) и VR-разработки (React VR).</p><p>Redux — контейнер предсказуемых состояний, обычно используемый в связке с React. Его можно использовать для сокращения кода благодаря модульности. Особенно полезен в многопользовательских приложениях, работающих в режиме реального времени, например, в играх.</p><h3>Аутентификация, сессии, cookies</h3><p>Вам также стоит разобраться, как приложения взаимодействуют с пользователями, обрабатывают вход в учётную запись и выход из неё, выдают привилегии. Для отслеживания личности пользователя в течение сессии используются cookies — небольшие текстовые файлы, передаваемые сервером браузеру в ответе на HTTP-запрос. А для обеспечения связи базы данных и страничек авторизации можно использовать библиотеку express-session.</p><h3>Веб-безопасность</h3><p>И, наконец, стоит обратить внимание на безопасность. Важно <a href="https://habrahabr.ru/company/pentestit/blog/279787/">изучить</a> как методы атак, так и способы защиты от них.</p>]]></content:encoded>
    </item>
  </channel>
</rss>