<?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/>
    <link>https://tproger.ru/tag/frameworks</link>
    <atom:link href="https://tproger.ru/tag/frameworks/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Fri, 23 Oct 2026 17:28:55 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/articles/kak-vybrat-frejmvork-dlya-ii-agentov</link>
      <comments>https://tproger.ru/articles/kak-vybrat-frejmvork-dlya-ii-agentov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-vybrat-frejmvork-dlya-ii-agentov</guid>
      <description><![CDATA[<p>LangChain, LlamaIndex, CrewAI и AutoGen — не конкуренты, а инструменты для разных задач. Разбираем, какой фреймворк выбрать для ИИ-агентов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-vybrat-frejmvork-dlya-ii-agentov">Как выбрать фреймворк для ИИ-агентов</a>»</p>]]></description>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 24 Aug 2026 07:05:13 GMT</pubDate>
      <content:encoded><![CDATA[<p>LangChain, LlamaIndex, CrewAI и AutoGen регулярно попадают в один список «топ фреймворков для ИИ-агентов», и из-за этого выглядят как конкуренты. На практике они отвечают на разные запросы. LangChain нужен, чтобы собрать собственную логику агента, LlamaIndex хорошо подходит для поиска по данным, CrewAI помогает организовать работу агентов по ролям, а AutoGen помогает выстроить между ними диалог.</p><h2>Поиск по документам</h2><p>LlamaIndex создан для работы с документами: он помогает разбивать их на фрагменты, индексировать содержимое и находить нужный контекст перед запросом к модели. В библиотеке уже есть компоненты для этих этапов, поэтому базовый поиск по документам можно собрать без большого объёма собственного кода.</p><p>Для поиска можно использовать гибридный подход, который объединяет семантический поиск с поиском по ключевым словам. Он пригодится, когда в запросе есть точный термин, название или аббревиатура и важно найти конкретное совпадение.</p><p>В LangChain RAG можно собрать как один из сценариев работы с данными. В LlamaIndex это центральная задача, вокруг которой выстроена вся архитектура,  поэтому его удобно использовать для внутренних баз знаний, технической документации и договоров, когда ответ должен опираться на конкретный фрагмент исходного документа и сопровождаться ссылкой на источник.</p><h2>Сложная логика и состояние</h2><p>В сложном процессе следующий шаг может зависеть от результата предыдущего: агент получает новые данные, меняет маршрут выполнения и при необходимости возвращается к нужному этапу. Для подобных сценариев подходит LangGraph, отдельная библиотека команды LangChain. Процесс в нём описывается как граф с узлами, переходами и сохранённым состоянием: узлы выполняют отдельные операции, переходы задают маршрут, а разработчик определяет условия для перехода между этапами.</p><p>Например, при проверке заявки агент может обнаружить, что информации недостаточно, отправить её на дополнительный сбор данных, получить обновлённую информацию и снова запустить проверку. В LangGraph разработчик сам описывает логику этих переходов и решает, в какой момент процесс должен двигаться дальше или возвращаться к предыдущему шагу.</p><p>К модели LangGraph нужно привыкнуть: сначала граф с узлами, переходами и состоянием может напоминать схему метро, которую нарисовали в три часа ночи. По мере работы с графом становится проще видеть весь маршрут агента и понимать, что произойдёт после каждого шага.</p><p>Экосистема LangChain включает более 1000 интеграций и большую базу документации, поэтому подключение инструментов и сервисов во многих случаях можно собрать из готовых компонентов. LangChain отвечает за компоненты для работы с моделями и инструментами, а LangGraph помогает управлять состоянием и переходами между этапами процесса.</p><h2>Разделение работы между ролями</h2><p>Представим редакцию, где несколько сотрудников вместе готовят материал. Один собирает факты, другой проверяет информацию, после чего редактор готовит финальную версию. CrewAI переносит подобную организацию работы на агентов: для каждого участника задаются роль и задача, а фреймворк управляет их взаимодействием в рамках общего процесса.</p><p>В CrewAI процесс строится вокруг задач и их исполнителей, поэтому разработчику достаточно описать обязанности агентов и порядок выполнения работы. Фреймворк берёт на себя координацию между участниками и передачу результатов от одной задачи к следующей.</p><p>Примечательно, что CrewAI появился позже LangChain и LlamaIndex, поэтому у него меньше накопленных примеров продакшн-использования. Для систем с высокими требованиями к предсказуемости стоит протестировать выбранную конфигурацию на собственных данных и сценариях до запуска в продакшн.</p><h2>Диалог между агентами</h2><p>AutoGen строит взаимодействие между агентами через сообщения. Они передают друг другу результаты, вызывают инструменты и могут выполнять код в изолированной песочнице. У фреймворка была тесная интеграция с Azure OpenAI, а AutoGen Studio позволял собирать агентные сценарии через визуальный интерфейс без кода.</p><p>Именно вокруг этой модели Microsoft развивала AutoGen до перехода на новый SDK. 3 апреля 2026 года компания выпустила Agent Framework 1.0, объединив в нём наработки AutoGen и Semantic Kernel. AutoGen перешёл в режим поддержки: новых функций в него добавлять не будут, а обновления будут включать исправления ошибок и патчи безопасности. Для новых проектов Microsoft рекомендует Agent Framework.</p><p>При этом сама идея AutoGen сохранилась в новой платформе. Диалог между агентами вошёл в Agent Framework вместе с другими концепциями AutoGen, поэтому разработчики по-прежнему могут строить процессы вокруг обмена сообщениями. Меняется основной SDK, который Microsoft развивает для этого подхода.</p><p>У диалоговой архитектуры есть практический нюанс, который стоит учитывать при проектировании системы: каждое новое сообщение добавляет вызов модели и расход токенов. В простом сценарии это увеличивает стоимость выполнения, поэтому архитектура особенно хорошо раскрывается там, где агентам действительно нужно обсуждать результаты и проверять решения друг друга. Например, несколько агентов могут по очереди анализировать код, задавать вопросы к найденным проблемам и разбирать спорные места.</p><h2>Можно ли сочетать фреймворки</h2><p>Границы между сценариями редко бывают жёсткими. В одном проекте LlamaIndex может отвечать за поиск по данным, а LangGraph — за выполнение процесса: инструменты LlamaIndex подключают внутрь CrewAI-команды или LangGraph-графа как обычный инструмент для поиска, оставляя LlamaIndex индексацию, а LangGraph или CrewAI — общую логику. LangGraph всё чаще выступает низкоуровневым движком, поверх которого строят более специализированные надстройки.</p><h2>Как выбрать модель</h2><p>Все четыре фреймворка подключают языковые модели через API, поэтому провайдера можно выбирать отдельно от архитектуры агента. В LangChain для этого используются интеграции вроде ChatOpenAI, в LlamaIndex есть адаптер OpenAILike, а CrewAI и AutoGen позволяют указать адрес совместимого API через настройки модели. При смене эндпойнта основная логика агента может остаться прежней, поскольку меняются параметры подключения к модели.</p><p>Например, в LangChain модель можно подключить через OpenAI-совместимый API:</p><p>RouterAI даёт доступ к GPT, Claude, Gemini и другим моделям через один ключ с оплатой в рублях — CrewAI, AutoGen и LlamaIndex принимают тот же base_url через собственные параметры конфигурации LLM.</p><h2>Итог</h2><p>Форма задачи определяет выбор раньше, чем популярность инструмента на GitHub: поиск по данным — LlamaIndex, ветвящаяся логика с состоянием — LangGraph, роли внутри команды — CrewAI, спор между агентами — AutoGen. Модель и провайдер при этом выбираются отдельно от архитектуры агента.</p><h2>Источники и фактура</h2><ul><li><a href="https://reference.langchain.com/python/langchain">LangChain vs LangGraph — официальная документация</a></li><li><a href="https://reference.langchain.com/python/integrations/">Integrations overview — LangChain Reference</a></li><li><a href="https://devblogs.microsoft.com/agent-framework/microsoft-agent-framework-version-1-0/">Microsoft Agent Framework Version 1.0 — официальный анонс</a></li><li><a href="https://developers.llamaindex.ai/python/framework-api-reference/llms/openai_like/">LlamaIndex OpenAILike — документация</a></li><li><a href="https://www.turing.com/resources/ai-agent-frameworks">LlamaIndex + CrewAI интеграция — сравнение фреймворков</a></li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Zero на Three.js: инженерный разбор интерактивного сайта</title>
      <link>https://tproger.ru/articles/zero-na-three-js-inzhenernyj-razbor-interaktivnogo-sajta</link>
      <comments>https://tproger.ru/articles/zero-na-three-js-inzhenernyj-razbor-interaktivnogo-sajta?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/zero-na-three-js-inzhenernyj-razbor-interaktivnogo-sajta</guid>
      <description><![CDATA[<p>Разбираем, как BUNQ LABS сделала zero.university: виртуальный скролл, шейдеры, KTX2/DRACO, адаптивное качество и загрузка текстур без фризов. Проверьте техники.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/zero-na-three-js-inzhenernyj-razbor-interaktivnogo-sajta">Zero на Three.js: инженерный разбор интерактивного сайта</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Лучшая практика]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 28 Jul 2026 04:19:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Представьте, что вы заходите на сайт, а он не пускает. Нет кнопки «войти» — только поле, где нужно нарисовать ноль. Как только круг замыкается, из линии расходится инеевый узор, и сайт начинает рассказывать историю. Это не декоративная заглушка: так работает <a href="https://zero.university/">zero.university</a> — кейс, где первый жест пользователя сразу задаёт тон всему повествованию.</p><p><b>Zero</b> — иммерсивный лендинг индийского стартапа Zero University, который предлагает альтернативу классическому университетскому пути. Сайт превращает скролл в шестиактную историю: традиционное образование, разбитое стекло, горящие деньги, уничтоженные сертификаты, тоннель из логотипа ZERO и, наконец, интерактивная карта города с офисами реальных компаний. Цель — не просто показать красивую картинку, а провести пользователя через аргумент: диплом перестаёт быть гарантией, а навыки открывают дорогу в индустрию.</p><p>Проект разрабатывала студия <b>BUNQ LABS</b> четыре месяца. Исходные ассеты занимали больше гигабайта: несжатые Blender-сцены, 8K-текстуры и запечённые анимации. Финальная сборка уместилась в 10 МБ и держит 60 FPS даже на бюджетном Android. Команда опубликовала технический разбор на Codrops, а мы выделили решения, которые можно перенести в свои WebGL-проекты.</p><ul><li>Первый жест как ворота: распознавание нуля — это простая проверка угла, округлости и замкнутости, а не нейросеть.</li><li>Виртуальный скролл заменяет нативный: одно число управляет загрузкой, анимацией, шейдерами и текстом.</li><li>Ассеты важнее рендера: DRACO, KTX2/ETC1S, атласы и собственный превьювер сжали гигабайты до мегабайтов.</li><li>Текстурные загрузки — главный источник фризов; декодинг в воркере и очередь по requestIdleCallback решают проблему.</li><li>Адаптивное качество по frame time позволяет не гадать о мощности устройства.</li><li>Мобильная точность шейдеров: mediump на Adreno и Mali — это реальный 16-битный float, и его недостаточно для сложных эффектов.</li></ul><p>Разбираем, как это устроено изнутри, и что из этого можно взять в свою работу.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-07-28/00e5f2ad-8fc7-49b9-88da-322a34a6bef1.webp" alt="Шесть этапов интерактивного повествования zero.university: от традиционного образования до интерактивной карты города." /><figcaption>Схема повествования: шесть этапов и пять «ворот», через которые проходит пользователь. Источник: Codrops / BUNQ LABS</figcaption></figure><h2>Сюжет из шести этапов и пяти ворот</h2><p>Интерактивный нарратив строится вокруг пяти «ворот» — точек, где скролл останавливается и ждёт действия пользователя. Сначала нужно нарисовать ноль, затем удерживать касание, чтобы разбить стекло, потом — чтобы запуститься сквозь тоннель. Каждый жест связан с сюжетным поворотом: обещание университетского пути буквально трескается, за ним появляется статистика безработицы, диплом превращается в горящую бумагу, сертификаты рвутся на полосы.</p><h3>От обещания к свободе</h3><p>Шесть этапов идут от иллюзии контролируемого пути к интерактивной карте, где пользователь сам выбирает, куда смотреть. Финальный экран — город с башней Zero University в центре. Можно приближать, панорамировать и открывать карточки ролей, сценариев и инструментов. Это не просто финал: после того как сайт вёл пользователя за руку, он отдаёт управление обратно.</p><h2>Архитектура: один скролл управляет всем</h2><p>Одно из главных архитектурных решений — отказ от нативного скролла браузера. Нет ScrollTrigger, нет огромного прокручиваемого DOM. Вместо этого события колёсика и тача обновляют виртуальное значение скролла, которое плавно догоняет цель. Всё остальное — загрузка ассетов, анимации, тайминги шейдеров, текст и оверлеи — читают это единственное число.</p><p>Проект разбит на девять таких сегментов; загрузчик одновременно выполняет роль первых ворот. Каждый сегмент самодостаточен: у него свой жизненный цикл, свои объекты и своя утилизация. Это упростило поддержку и отладку. Переход к любому этапу воспроизводит жизненные циклы всех предыдущих сегментов, поэтому состояние всегда консистентно — как будто пользователь дошёл до этого места естественным скроллом.</p><h2>Конвейер 3D-ассетов: как уместить 1 ГБ в 10 МБ</h2><p>Большую часть четырёх месяцев ушла не на код, а на подготовку ассетов. Исходники пришли из Blender: несжатая геометрия, 8K-текстуры, запечённые анимации — всё вместе больше гигабайта. Первый месяц команда тратила на то, чтобы выбрать формат для каждого типа ресурсов.</p><h3>DRACO и KTX2</h3><p>Вся геометрия отправляется со сжатием DRACO, декодеры для которого хостятся локально в public/vendor/. Урок команда усвоила на собственном опыте: замедление на gstatic и unpkg привело к тому, что все сжатые ассеты перестали декодироваться, хотя сами файлы лежали на ихних серверах. Если декодер зависит от чужого CDN, весь пайплайн зависит от него.</p><p>Самый большой выигрыш дали текстуры. PNG может быть маленьким на диске, но в видеопамять он загружается распакованным. Текстура 2048² занимает около 16 МБ VRAM независимо от размера файла. Формат KTX2 со сжатием ETC1S остаётся сжатым на GPU, занимает меньше памяти и загружается быстрее.</p><h3>Собственный превьювер компрессии</h3><p>С KTX2 есть проблема: ETC1S — lossy, и локально его не посмотреть обычным просмотрщиком. Чтобы не гадать с настройками, команда сделала внутренний дашборд: сжатая и несжатая версия каждой картинки и видео рядом. Так можно было подобрать степень сжатия индивидуально — усилить там, где артефакты не заметны, сохранить качество для ключевых объектов и отключить мипмапы, где они не нужны. Инструмент простой, но редко встречается в WebGL-пайплайнах, хотя экономит огромное количество времени и памяти.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-07-28/3a57d9e3-14e7-4f55-8aad-78cee34f1da3.webp" alt="Внутренний дашборд команды для сравнения сжатой и несжатой версии каждого ассета." /><figcaption>Превьювер компрессии: сжатая и несжатая версии текстур и видео рядом. Источник: Codrops / BUNQ LABS</figcaption></figure><h3>Атласы вместо дюжин картинок</h3><p>Похожие текстуры собрали в общие атласы. Например, все текстуры рук уместили в один атлас 4×4, а каждая mesh сдвигала UV-координаты, чтобы взять свой кусок. Спрайты текста, сертификаты, бумажные обрывки, облака, монеты и осколки стекла тоже ушли в атласы. Больше 50 отдельных изображений превратились примерно в дюжину атласов, а большинство градиентных фонов заменили несколькими строками GLSL. Ранние сборки весили 35–40 МБ, финальная — меньше 10 МБ. При этом интерактивная карта мира вынесена в отдельную группу загрузки, чтобы не блокировать открытие сайта.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-07-28/e1686dcf-b13a-494e-94b3-0e32f0eb880a.webp" alt="Атлас текстур рук 4×4: каждая mesh сдвигает UV-координаты, чтобы взять свой кусок." /><figcaption>Атлас рук: все текстуры рук упакованы в одну текстуру 4×4. Источник: Codrops / BUNQ LABS</figcaption></figure><h2>Текстурные загрузки: главный источник фризов</h2><p>Уменьшить скачивание — только половина дела. Сжатые текстуры всё равно нужно загрузить в GPU на главном потоке, и крупная текстура легко блокирует рендер на 50 мс — достаточно, чтобы потерять несколько кадров. Если эта загрузка случается впервые во время скролла, подёргивание заметно сразу. Сайт может хорошо показывать себя в бенчмарках и при этом чувствоваться вязким.</p><ul><li>Декодировать вне главного потока — через createImageBitmap(). Тогда во время рендера остаётся только загрузка в GPU.</li><li>Загружать в GPU в простое — декодированные текстуры ставят в очередь и выгружаются по requestIdleCallback, пока есть запас времени.</li><li>Разбивать большие атласы на плитки 256² и загружать по одной на кадр, чтобы не выбиваться из бюджета кадра.</li></ul><p>Когда известно, что следующий этап вот-вот появится — после загрузчика или во время перехода между воротами — очередь сбрасывается синхронно. Все нужные текстуры уже в видеопамяти, прежде чем они появятся на экране.</p><h2>Адаптивное качество по реальному frame time</h2><p>Невозможно заранее знать, на каком устройстве откроется сайт. Рендерер поэтому постоянно измеряет время кадра по скользящему окну и динамически меняет уровень качества. Если рендеринг замедляется — понижается tier. Если производительность стабильно высокая — tier снова растёт. Задержка между переключениями не даёт постоянно метаться у границы.</p><p>Уровни качества влияют только на визуальную полировку: devicePixelRatio, количество сэмплов размытия, геометрию монет, разрешение текста. Сама история остаётся неизменной и на флагмане, и на бюджетном телефоне. Для особо тяжёлых моментов — например, разбитие стекла — рендерер временно понижает пиксельное соотношение и отключает размытие и иней, прячет затраты внутри самого жеста.</p><h2>Шейдеры под каждый эффект</h2><p>Каждый ключевой момент использует собственный шейдер. ИИ помогал сгенерировать первые версии, но все финальные шейдеры переписывались и дорабатывались вручную. Вот несколько приёмов, которые стоит запомнить.</p><h3>Постпроцессинг из нескольких проходов</h3><p>Кадр собирается из цепочки проходов: основная 3D-сцена, процедурный фон, преломление стекла, иней и след от жеста, глубина резкости, foreground с зернистостью и тональной картой, отложенный текст, и в конце — разбитое стекло. Стеклянный, текстовый и шейдер разбития инициализируются лениво и прогреваются в простое, чтобы не попадать на критический путь загрузчика.</p><h3>Иней из нарисованного нуля</h3><p>Эффект инея строится на ping-pong-буфере из четырёх проходов: горизонталь, вертикаль и две диагонали. Каждый проход распространяет нарисованный штрих, захватывая самые яркие соседние пиксели и создавая восьмиугольный паттерн роста. Яркость текстуры льда модулирует шаг распространения, край получается кристаллическим. После замыкания контура центр масс штриха становится точкой отсчёта для радиального таяния.</p><h3>Освещение без источников света</h3><p>Реалтаймовое освещение скинненной меши рук было бы слишком дорогим, а свет должен был точно совпадать с оригинальным артом. Поэтому освещение запекли в текстуры и смешивают между ними. Используются два слота: один содержит текущий ключевой кадр, другой — следующий. По мере проигрывания анимации новый слот плавно вытесняет старый.</p><p>Перед смешиванием альфа предумножается, чтобы вокруг прозрачных краёв рук не появлялись тёмные ореолы. Обе текстуры освещения лежат в одном атласе, поэтому переключение между ключами требует только обновления двух UV-смещений и коэффициента смешивания.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-07-28/cb760b51-b0f4-4804-aff6-58ce015d2fda.webp" alt="Две запечённые текстуры освещения рук внутри одного атласа для плавного переключения." /><figcaption>Запечённое освещение рук: два ключевых кадра в одном атласе смешиваются по прогрессу анимации. Источник: Codrops / BUNQ LABS</figcaption></figure><h3>Горящие деньги</h3><p>Эффект сгорания использует noise-driven distance field. Фронт горения проходит по купюре, слегка опережая точку дискарда. Перед ним появляется тонкий HDR-ободок углей, затем обугленная поверхность. FBM — самая дорогая часть шейдера, поэтому фрагменты отсекаются как можно раньше, если они ещё не достигли порога горения.</p><h3>Рвущиеся сертификаты</h3><p>Каждая вершина хранит индекс полосы, к которой принадлежит фрагмент диплома. Фронт разрыва движется слева направо, и каждая полоса отделяется и падает независимо со своим вращением. Нормали для освещения строятся аналитически из той же волновой функции, которая анимирует меш, поэтому normal map не нужен.</p><h3>Тоннель ZERO</h3><p>Тоннель получается выдавливанием поперечного сечения из логотипа ZERO. Импульс яркости распространяется по мировой координате Z, поэтому эффект остаётся бесшовным, даже когда секции тоннеля повторяются.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-07-28/bfbebb17-dc15-4bbb-b00c-a1fb7f98c13f.webp" alt="Тоннель ZERO, полученный выдавливанием сечения логотипа." /><figcaption>Тоннель ZERO: импульс яркости распространяется по мировой координате Z, сохраняя бесшовность. Источник: Codrops / BUNQ LABS</figcaption></figure><h3>Текст, который приходит в фокус</h3><p>Нарративный текст появляется не мгновенно, а проявляется через семиотводное гексагональное размытие. Радиус размытия зависит от прогресса появления, поэтому буквы будто фокусируются. Проход выполняется в отложенном текстовом проходе и полностью пропускается, когда текст не виден.</p><h3>Точность на мобильных</h3><p>Одна из самых неприятных находок возникла на реальных мобильных GPU. Несколько шейдеров пришлось явно перевести на highp float, потому что на Adreno и Mali mediump — это настоящий 16-битный float. На десктопе ошибок не было, а на телефоне полосы диплома двигались одинаково, а эффект горения покрывался бэндами. Вывод: тестировать на реальных мобильных устройствах нужно с первых дней, а не перед релизом.</p><h2>Дизайн взаимодействий</h2><p>Исходный материал от заказчика состоял из картинок и видео, поэтому поведение каждых ворот проектировали с нуля. Большинство используют общую систему «нажми и удерживай». Общий конфиг задаёт момент появления подсказки и длительность удержания, а каждые ворота реализуют визуал через собственные хуки.</p><p>Пока пользователь удерживает касание, кадр постепенно смещается в тёмно-красный. Когда стекло разбивается, цвет возвращается примерно за 200 мс — это создаёт ощущение, что осколки выбивают темноту. Проверили вариант в 400 мс: он ощущался заметно слабее. Звук разбития привязан к первому отрисованному кадру, а не к таймеру: на медленных устройствах таймер может сыграть раньше анимации, и эффект рассинхронится.</p><h2>Финальная награда — интерактивный мир</h2><p>Последняя последовательность запуска выносит пользователя в открытое небо. Облака расступаются, открывая город с башней Zero University в центре, над которой появляется ореол — финальные ворота. Камера приземляется в интерактивную карту, где можно панорамировать, зумить и открывать карточки с ролями, сценариями и инструментами. Плашка Join Beta превращается в форму waitlist. После того как сайт вёл пользователя через историю, он отдаёт ему контроль — и просит остаться.</p><h2>FAQ</h2><h2>Выводы</h2><p>Самый важный урок проекта — подготовка ассетов и загрузка в GPU заслуживают не меньше внимания, чем сам рендеринг. Инструменты вроде превьювера компрессии, локальных декодеров, очереди загрузки и адаптивного менеджера качества редко выглядят героически, но именно они превратили гигабайт исходников в 10-мегабайтный сайт, который не тормозит на дешёвом телефоне.</p><blockquote>ИИ генерировала первые версии кода и прототип, который выиграл нам проект, за 48 часов. Но полировка — сотни мелких решений, тестирование на реальных устройствах и инженерная интуиция — осталась за людьми.</blockquote><p><b>Источник:</b> технический разбор команды BUNQ LABS на <a href="https://tympanus.net/codrops/2026/07/17/zero-the-engineering-behind-a-defiant-interactive-narrative/">Codrops</a>.<br />Попробуйте открыть <a href="https://zero.university/">zero.university</a> на десктопе и на бюджетном смартфоне — и сравните, где заметнее компромиссы качества.</p>]]></content:encoded>
    </item>
    <item>
      <title>ИИ-агент собрал сам себя: эксперимент с LangChain4j и уроки для Java-разработчиков</title>
      <link>https://tproger.ru/articles/ii-agent-sobral-sam-sebya-eksperiment-s-langchain4j-i-uroki-dlya</link>
      <comments>https://tproger.ru/articles/ii-agent-sobral-sam-sebya-eksperiment-s-langchain4j-i-uroki-dlya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ii-agent-sobral-sam-sebya-eksperiment-s-langchain4j-i-uroki-dlya</guid>
      <description><![CDATA[<p>LLM по документации LangChain4j собрала клона себя — мультиагентного кодера. Он починил баги, прошёл 11 тестов и показал, почему workflow быстрее supervisor.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ii-agent-sobral-sam-sebya-eksperiment-s-langchain4j-i-uroki-dlya">ИИ-агент собрал сам себя: эксперимент с LangChain4j и уроки для Java-разработчиков</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 25 Jul 2026 06:50:22 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы строите агентные системы на Java, вот факт, о котором стоит знать: LLM уже способна по одной документации фреймворка спроектировать и написать мультиагентную систему — по сути, клона самой себя. Инженеры Red Hat Кевин Дюбуа и Марио Фуско провели такой мета-эксперимент с <b>LangChain4j</b>, и получившийся «самособранный» агент не только запустился, но и починил реальные баги в коде, прогнав все 11 тестов. Заодно выяснилось, что детерминированный workflow решает ту же задачу <b>втрое быстрее</b> автономного супервизора — два минуты против шести с лишним.</p><p><b>LangChain4j</b> — это Java-фреймворк для приложений на базе больших языковых моделей, аналог LangChain из мира Python. Его модуль <b>langchain4j-agentic</b> позволяет описывать агентные системы декларативно: прямо в Java-интерфейсах, через аннотации. Эксперимент Дюбуа и Фуско проверял две вещи сразу: достаточно ли «читаем» API фреймворка, чтобы модель использовала его без подсказок, и как ведут себя два главных паттерна агентных систем — <b>supervisor</b> и <b>workflow</b> — на одной и той же задаче отладки кода.</p><p>ИИ-ассистент по документации LangChain4j сам спроектировал и реализовал мультиагентного кодера — клона самого себя: супервизор плюс четыре субагента.</p><p>Собранная система починила все баги в тестовом классе Calculator: 11 тестов из 11 зелёные, сборка Maven успешна.</p><p>Модель gpt-4o провалила задачу, уйдя в цикл вызовов инструментов (сработал лимит в 100 вызовов), а более свежая gpt-5-mini справилась.</p><p>Жёсткий workflow-паттерн выполнил ту же задачу за 2 минуты против 6+ минут у supervisor-паттерна: автономная координация через LLM стоит дорого.</p><p>Новый интерфейс MonitoredAgent (langchain4j-agentic 1.12.2-beta22) показывает топологию системы и трейс вызовов агентов.</p><h2>Вайбкодинг агента: промпт, который собрал агента</h2><p>Идея эксперимента предельно проста: отдать код-ассистенту документацию и исходники LangChain4j и попросить собрать на их основе клона самого себя. Дословно промпт звучал так: «Изучи API и возможности агентного фреймворка LangChain4j по его документации и исходному коду и спроектируй на его основе агентного кодера, который будет клоном тебя самого».</p><p>Через несколько минут размышлений ассистент выбрал <b>supervisor-паттерн</b>: главный агент-координатор, который сам решает, какого субагента вызвать и с какими аргументами. Архитектура получилась такой — обратите внимание, вся система описывается одним аннотированным интерфейсом:</p><p>Ассистент спроектировал и написал четырёх субагентов, а также инструменты для каждого из них. Если вы пользовались «взрослыми» код-ассистентами, схема покажется знакомой — это ровно те четыре роли, которые такие инструменты исполняют внутри:</p><ul><li><b>ExplorerAgent</b> — изучает кодовую базу (получил инструмент обхода файловой системы);</li><li><b>PlannerAgent</b> — составляет план изменений;</li><li><b>ImplementerAgent</b> — пишет и правит код (получил редактор кода);</li><li><b>ExecutorAgent</b> — компилирует и запускает результат.</li></ul><p>Отдельно интересно, что модель воспроизвела собственное внутреннее устройство «сходу», без объяснений: похоже, современные LLM действительно имеют высокоуровневое представление о том, как устроены они сами, и умеют переводить его в рабочий дизайн агентной системы.</p><h2>Проверка боем: агент чинит баги в Calculator</h2><p>Чтобы испытать собранную систему, авторы пошли от обратного: попросили ассистента написать класс Calculator с четырьмя методами, в каждом из которых спрятан классический баг. Набор получился показательный — такие ошибки джуны делают постоянно:</p><ul><li>в методе sum() выход за границу списка: цикл до i &lt;= size();</li><li>в average() целочисленное деление вместо дробного;</li><li>в max() стартовое значение 0 — ломается на списке из отрицательных чисел;</li><li>в factorial() цикл до i &lt; n — факториал недосчитан на один множитель.</li></ul><p>Дальше ассистент сгенерировал интеграционный тест: скопировать проект с багами во временную папку и натравить на него агентного кодера:</p><h3>Первая попытка: gpt-4o уходит в цикл</h3><p>Первый прогон делали на <b>gpt-4o</b> — это модель по умолчанию в LangChain4j, и она поддерживает вызов инструментов. Результат: через несколько минут система упала с ошибкой. LLM застряла в цикле вызовов инструментов, и фреймворк прервал её на лимите в <b>100 последовательных вызовов</b>:</p><p><b>Полезно знать:</b> лимит в 100 вызовов инструментов подряд — дефолт LangChain4j. Он настраивается методом <b>maxToolCallingRoundTrips()</b> в AiServices, но дефолт вполне разумный: здоровому агенту столько вызовов не нужно, а беззащитный цикл сожжёт бюджет на токены.</p><h3>Вторая попытка: gpt-5-mini чинит всё</h3><p>Авторы уже сталкивались с таким поведением у старых моделей, поэтому просто заменили модель на <b>gpt-5-mini</b> — и тот же самый агентный дизайн отработал чисто. Система нашла все четыре бага, переписала методы (for-each вместо индексного цикла, приведение к (double) в среднем, инициализация максимума первым элементом, включительная граница в факториале) и отчиталась:</p><ul><li><b>mvn package</b> — BUILD SUCCESS;</li><li><b>mvn test</b> — 11 тестов, 0 падений, 0 ошибок;</li><li>финальный вердикт агента: «All tests in CalculatorTest.java pass (11/11)».</li></ul><p>Это важный практический вывод, который часто недооценивают: <b>агентная архитектура неотделима от модели, на которой она работает</b>. Один и тот же дизайн на одной модели захлёбывается в tool-calling цикле, а на другой решает задачу. Прежде чем переписывать оркестрацию, попробуйте сменить модель.</p><h2>Смотрим под капот: MonitoredAgent</h2><p>Когда один ИИ собирает другого ИИ, вопрос «а что там внутри происходит» перестаёт быть риторическим. В версии <b>1.12.2-beta22</b> модуля langchain4j-agentic появился интерфейс MonitoredAgent: достаточно унаследовать от него корневой интерфейс системы, и фреймворк сам зарегистрирует монитор — можно распечатать отчёт о вызовах агентов и топологию системы:</p><p>По такому отчёту видно, какой агент когда вызывался и как система фактически связана в граф — без ручного сбора листенеров и регистрации AgentMonitor.</p><h2>Supervisor против workflow: автономия или скорость</h2><p>Автономность супервизора имеет скрытую цену: каждый шаг координации — это дополнительный вызов LLM, который «придумывает», кого вызвать дальше и с какими аргументами. Чтобы измерить эту цену, авторы попросили ассистента перепроектировать систему в детерминированном виде — только на workflow-паттернах LangChain4j.</p><p>Получилась строгая последовательность из пяти шагов: те же четыре роли плюс отдельный <b>SummarizerAgent</b>, который забрал у супервизора функцию финального отчёта. Шаги планирования и исполнения оформлены как циклы с самопроверкой:</p><p>Цикл исполнения устроен как связка «исполнитель → оценщик → рефактор»: итерации продолжаются, пока оценка качества не достигнет <b>0.8</b>, но не дольше <b>5 итераций</b> — защита от бесконечного сжигания токенов:</p><p>Та же задача с багами в Calculator — тот же результат: все тесты зелёные, финальная оценка качества 0.8. Но по времени картина разительно другая: <b>две минуты у workflow против более чем шести у supervisor</b>. Втрое быстрее — при большем числе агентов в системе. Вся разница — устранение координационных вызовов LLM: в workflow каждый следующий шаг известен заранее и «мнения» модели на этот счёт не требуется.</p><p>Это не означает, что supervisor не нужен. Выбор зависит от природы задачи:</p><ul><li><b>Workflow</b> — когда задача раскладывается на предсказуемые этапы и важны скорость, стоимость и воспроизводимость. Детерминированная последовательность, циклы самопроверки — и никаких сюрпризов.</li><li><b>Supervisor</b> — когда маршрут по шагам заранее неизвестен и важнее гибкость: главный агент на лету решает, кого вызывать. Платите за это временем и токенами.</li></ul><h2>Что это значит на практике</h2><p>Эксперимент Дюбуа и Фуско красиво подтверждает рекомендации, которые Anthropic <a href="https://www.anthropic.com/engineering/building-effective-agents">сформулировала в гайде по эффективным агентам</a>: начинайте с простейшего детерминированного пайплайна и добавляйте автономность только там, где без неё никак. Каждый «свободный» шаг координации — это лишний вызов модели: и по деньгам, и по латентности, и по шансу уйти в цикл. Замер в статье (3x на одной тривиальной задаче) — хорошая иллюстрация того, во что это превращается в проде.</p><p>Второй урок — про «вайбкодинг» агентных систем. То, что LLM собрала рабочую мультиагентную систему по документации, говорит больше о качестве API LangChain4j, чем о магии моделей: аннотации @SupervisorAgent, @SequenceAgent и @LoopAgent читаются как обычный декларативный дизайн, и модели это по зубам. Для Java-команд это практический повод присмотреться к фреймворку: порог входа в агентные системы здесь заметно ниже, чем кажется.</p><p>И третье: отлаживайте агентов как распределённую систему. Трейс вызовов и топология из MonitoredAgent — это тот же распределённый трейсинг, к которому вы привыкли в микросервисах, только спаны здесь — вызовы LLM. Без него вы не узнаете, что система половину бюджета потратила на «размышления» супервизора.</p><h2>Выводы</h2><blockquote>Выбирайте workflow, когда критичны скорость, предсказуемость и цена выполнения. Выбирайте supervisor, когда автономность и гибкость важнее скорости — но помните, что свобода координации оплачивается токенами и временем.</blockquote><p>Самособирающийся агент — пока эксперимент, а не продакшн-практика. Но три вывода из него применимы уже сегодня. Первый: хорошо спроектированный декларативный API читаем не только для людей, но и для моделей — и это становится критерием качества фреймворка. Второй: детерминированный workflow на предсказуемых задачах даёт троекратный выигрыш во времени — автономию стоит включать точечно. Третий: агентная система наследует слабости своей модели, поэтому мониторинг и лимиты вызовов — не опция, а необходимость.</p><p><b>Источники:</b> оригинальная статья — <a href="https://www.infoq.com/articles/self-building-agent-langchain4j/">The Self-Building Agent: A LangChain4j Experiment</a> (InfoQ); код эксперимента — <a href="https://github.com/mariofusco/langchain4j-agentic-coder">репозиторий langchain4j-agentic-coder</a>; документация — <a href="https://github.com/langchain4j/langchain4j/blob/main/docs/docs/tutorials/agents.md">Agentic Systems в LangChain4j</a>.</p><p>Если строите агентные системы на Java — возьмите репозиторий, прогоните тест на своей модели и сравните supervisor с workflow на своих задачах. Цифры могут удивить.</p>]]></content:encoded>
    </item>
    <item>
      <title>Production-safe агентный цикл: как не дать ИИ сжечь бюджет</title>
      <link>https://tproger.ru/articles/production-safe-agentnyj-cikl-kak-ne-dat-ii-szhech-byudzhet</link>
      <comments>https://tproger.ru/articles/production-safe-agentnyj-cikl-kak-ne-dat-ii-szhech-byudzhet?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/production-safe-agentnyj-cikl-kak-ne-dat-ii-szhech-byudzhet</guid>
      <description><![CDATA[<p>Как построить production-safe агентный цикл на Python, чтобы ИИ не сжигал бюджет в бесконечных итерациях. Разбираем circuit breaker, ledger и human attestation.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/production-safe-agentnyj-cikl-kak-ne-dat-ii-szhech-byudzhet">Production-safe агентный цикл: как не дать ИИ сжечь бюджет</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 17 Jun 2026 09:45:21 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если ваш ИИ-агент работает круглосуточно и не может остановиться — это не автономность, а биллинговая авария, которая уже идёт. В июле 2025 года рекурсивный агентный цикл в Claude Code сжёг от 16 000 до 50 000 долларов за пять часов. Агенты не падают и не выдают ошибку: они делают ровно то, что им сказали, — пока кто-то не скажет остановиться.</p><p>Через четыре месяца четырёхагентный пайплайн на LangChain крутился одиннадцать дней и стоил 47 000 долларов. Никто не заметил, пока не пришёл счёт. Тот же паттерн: цикл работал корректно, но у него не было условия выхода.</p><p>Проблема не в моделях, а в отсутствии условия остановки. В этой статье разберём, как собрать минимальный, но production-ready каркас агентного цикла: спецификацию до запуска, предохранитель по токенам и ходам, неизменяемый аудит и поверхность для человеческого согласования. Полный код и 80 тестов с 100% покрытием доступны в <a href="https://github.com/dannwaneri/production-safe-agent-loop">репозитории автора оригинала</a>.</p><p>Агентные циклы сжигают бюджет не из-за плохих моделей, а из-за нечёткого условия остановки.</p><p>Спецификация должна отвечать на три вопроса: что делает, что не делает и что значит «готово» — в одном предложении.</p><p>Circuit breaker режет цикл по жёстким потолкам: число ходов и суммарные токены. Проверка — до вызова модели, а не после.</p><p>Ledger в SQLite фиксирует каждый ход: хеш входа, дельту токенов, время, результат. Это аудит, а не лог для отладки.</p><p>Review surface даёт поверхность для обязательной человеческой аттестации и формирует аудиторскую квитанцию frame_hash, которую вызывающий код может использовать как условие передачи результата в прод.</p><h2>Что такое агентный цикл и почему он уходит в бесконечность</h2><p>Агентный цикл — это конструкция вида while True, внутри которой языковая модель получает задачу, вызывает инструменты, анализирует результат и решает, продолжать или закончить. Такие циклы лежат в основе оркестраторов вроде LangGraph, CrewAI и AutoGen, а также внутри coding-агентов. Если только начинаете разбираться с LLM, полезно сначала понять, <a href="https://tproger.ru/articles/chto-takoe-llm-dlya-nachinayushhih">как устроены большие языковые модели</a>, а для практики — заглянуть в <a href="https://tproger.ru/articles/python-dlya-nachinayushhih">основы Python</a>.</p><p>Цикл уходит в бесконечность не потому, что модель «глупая», а потому, что никто не определил, что значит «готово». Модель видит неоднозначность и пытается быть полезной: перефразирует вызов инструмента, запускает верифицирующего агента, тот находит «проблему», срабатывает корректирующий агент — и так далее. На дашбордах всё выглядит активно: растёт число вызовов инструментов, completion rate держится высоким, а бюджет течёт в пустоту.</p><p><b>Почему дорожает каждая итерация:</b><br />Агент не начинает с чистого листа. Он каждый раз перечитывает всё предыдущее окно контекста — все неудачные попытки, все промежуточные выводы. Итерация 1 стоит 100 токенов, итерация 10 — уже тысячи. Вы платите за каждый провал снова и снова.</p><h2>Почему компании сначала платят за чатбота, а потом за агентный рабочий процесс</h2><p>Gartner фиксирует разрыв в потреблении токенов между пилотными чатботами и production-агентными рабочими процессами в 5–30 раз. А отчёт FinOps Foundation за 2026 год говорит, что 73% компаний превысили изначальный бюджет на ИИ. Цифры взяты из <a href="https://www.freecodecamp.org/news/how-to-build-a-production-safe-agent-loop-from-exit-conditions-to-audit-trails/">оригинального туториала</a>; полные отчёты Gartner и FinOps Foundation доступны по платным подпискам. Причина разрыва — в неправильном масштабировании: команда планировала стоимость чатбота (~0,04 USD за взаимодействие), а в прод ушёл мультиагентный оркестр (~1,20 USD за взаимодействие, до 70x на сложных задачах).</p><blockquote>A loop that runs without an exit condition isn't autonomous. It's a billing event waiting to happen.</blockquote><h2>Пять примитивов, которые ловят большинство отказов</h2><p>Автор оригинального туториала предлагает не монолитный фреймворк, а пять независимых Python-модулей, которые можно встроить в любой проект. Вместе они покрывают три уровня риска: дисциплину до запуска, принудительную остановку во время работы и доказательства после.</p><ol><li><b>Spec writer</b> — заставляет ответить на три вопроса до первого вызова модели.</li><li><b>Circuit breaker</b> — режет цикл, если превышены потолки по ходам или токенам.</li><li><b>Ledger</b> — ведёт append-only журнал каждого хода в SQLite.</li><li><b>Agent loop</b> — связывает три компонента в единый цикл.</li><li><b>Review surface</b> — собирает пятиэлементный фрейм и требует человеческой аттестации перед выдачей результата.</li></ol><h2>Фаза 1. Определить «готово» до первой строчки кода</h2><p>Самая дорогая ошибка в разработке агентов — не выбор модели, а начало кодинга до того, как команда может одним предложением описать условие завершения. «Агент проверит сайт» — не подходит. «Агент обходит целевой URL, извлекает все теги &lt;title&gt; и &lt;meta name="description"&gt;, помечает отсутствующие или слишком длинные и останавливается» — подходит.</p><p>Spec writer интерактивно запрашивает три поля, сохраняет их значения в SQLite и возвращает неизменяемый SpecResult(frozen=True). Полученный session_id связывает спецификацию, строки журнала и итоговый результат в одну трассируемую сессию.</p><p><b>Почему frozen=True:</b><br />Спецификация — это обязательство, а не черновик. frozen=True запрещает переприсваивать поля объекта SpecResult, поэтому код цикла не может «подвинуть» условие завершения посреди запуска.</p><h2>Фаза 2. Принудить «готово» на лету</h2><p>Circuit breaker задаёт два жёстких потолка: turn_limit — максимальное число обращений к модели, и token_limit — суммарное число токенов за всю сессию. Каждый потолок — «строго больше»: если лимит 5 ходов, пятый ещё разрешён, шестой выбросит исключение.</p><p>Ключевое правило: breaker.check() вызывается до запроса к модели, а не после. Постфактум проверка бессмысленна: токены уже сожжены. Исключение, а не код возврата, — чтобы нельзя было промолчать.</p><h3>Как подобрать лимиты для продакшена</h3><p>Демонстрационные значения 5 ходов / 15 000 токенов слишком жёсткие для реальных задач. Для продакшена автор предлагает настроить лимиты под свой бюджет; в туториале приведён пример breaker = CircuitBreaker(turn_limit=10, token_limit=50000). Если одна сессия должна стоить не дороже 1 USD, а средний ход — 0,10 USD, получается порядка 10 ходов. Конкретный token_limit выбирается исходя из прайсинга модели и среднего размера контекста: чем длиннее история диалога, тем раньше сработает потолок.</p><ul><li>Стартуйте с жёсткими лимитами и разрешайте рост только по метрикам, не по интуиции.</li><li>Отдельно лимитируйте retry-политику: каждый повторный запрос увеличивает и turn_count, и объём контекста.</li><li>Не смешивайте лимит токенов с лимитом выходных токенов модели; circuit breaker считает сумму input + output.</li></ul><h2>Фаза 3. Записывать всё, что нельзя подделать</h2><p>Circuit breaker защищает бюджет. Ledger защищает понимание того, что произошло. Это не лог для отладки, а журнал аудита: каждая строка — один ход, append-only, без обновлений и удалений.</p><p>Три решения стоит взять на заметку. Во-первых, вместо исходного текста сохраняется SHA-256 хеш входа: так не утекают персональные данные, а одинаковые входы разных запусков можно сравнивать. Во-вторых, pass_fail хранится как INTEGER (1/0), потому что у SQLite нет булева типа. В-третьих, временная метка — datetime.now(timezone.utc).isoformat(), так как datetime.utcnow() объявлен устаревшим в Python 3.12.</p><h2>Фаза 4. Цикл, который уважает границы</h2><p>Agent loop — единственный компонент, который обращается к языковой модели. Всё остальное работает локально: проверка потолков, запись в журнал, оценка условия выхода.</p><p>Анатомия одного хода простая и строгая: сначала breaker.check(), потом вызов модели, потом ledger.write(), потом проверка stop_reason. Если модель вернула end_turn — возвращаем результат. Если нет — добавляем сообщение continue и идём на следующий круг.</p><p>Этот вариант цикла — минимальный текстовый. Если агент использует инструменты, в Anthropic API stop_reason может быть tool_use: тогда нужно выполнить инструмент, вернуть его результат в messages и только потом решать, продолжать или завершать.</p><p>Системный промпт обязательно включает все три поля спецификации, а не только done_looks_like. Модели нужна негативная область — то, что агент делать не должен (what_it_does_not), — не меньше, чем позитивная: иначе она начнёт «добавлять ценность» за рамками задачи.</p><h2>Фаза 5. Поверхность согласования: цикл бежит к человеку</h2><p>Circuit breaker и ledger решают технические проблемы, но не отвечают на вопрос: «Соответствует ли результат тому, что обещали?» Именно здесь ошибки проходят в прод: вывод выглядит аккуратным, дашборд зелёный, ревьюер ставит галочку.</p><p>Review surface собирает пятиэлементный фрейм из SQLite и требует явной аттестации:</p><ol><li><b>Исходное обещание</b> — три поля спецификации.</li><li><b>Критерий приёмки</b> — поле done_looks_like как явный бенчмарк.</li><li><b>Diff</b> — вход первого хода, выход последнего, число ходов, токены, сработал ли breaker.</li><li><b>Доказательства</b> — все строки ledger за сессию.</li><li><b>Неразрешённые допущения</b> — строки с breach_reason и failed-ходами.</li></ol><p>После согласования ревьюер вызывает attest(). Функция собирает пятиэлементный фрейм в каноническом порядке и считает от него SHA-256 — получается frame_hash. Это аудиторская квитанция: она доказывает, что ревьюер видел именно этот фрейм, а не краткое резюме.</p><h2>Практический пример: SEO-аудит по расписанию</h2><p>Автор приводит пример SEO-аудита. SEO-аудит имеет естественный ритм: обход, выявление проблем, исправление, ожидание переиндексации. Запускать агента 24/7 бессмысленно — он будет сжигать токены в паузах между событиями. Честная архитектура — cron-задача, которая запускает цикл по расписанию.</p><p><b>Пример упрощён:</b><br />В production-варианте стоит проверять URL (допустимые схемы и хосты) и оборачивать requests.get в try/except requests.RequestException, чтобы агент не падал при недоступности сайта.</p><p>Cron-строка выглядит так:</p><p>Агент выполняет работу, записывает ходы в ledger, и если circuit breaker сработал — результат уходит на человеческую проверку, а не в прод.</p><h2>Провайдер-независимость через адаптер</h2><p>Цикл работает с любым клиентом, удовлетворяющим протоколу LLMClient. По умолчанию используется Anthropic, но через адаптер можно подключить OpenAI, Gemini, Ollama, локальные модели или собственный сервер. В репозитории автора показан иллюстративный пример адаптера для OpenAI. Главное — привести ответ к форме, которую ожидает AgentLoop: usage.input_tokens, usage.output_tokens, content[0].text, stop_reason.</p><h2>Выводы: дисциплина дороже модели</h2><p>Большинство аварий с агентными циклами предотвращаются не интеллектом модели, а чёткими границами. Спецификация до запуска, жёсткие потолки ресурсов, неизменяемый аудит и человеческое согласование — это минимальный набор примитивов, который отделяет автономного агента от неконтролируемого биллингового события.</p><p>Для российских команд это означает, что внедрять LLM-агентов без бюджетных предохранителей — всё равно что запускать бесконечный цикл с доступом к корпоративной карте. Начните с пяти модулей, описанных выше, прогоните их на тестовом дубле модели и только после этого открывайте доступ к реальным API.</p><blockquote>Define what done looks like before you start. That's the job, and always has been.</blockquote><p>Полный код и 80 тестов с 100% покрытием доступны в репозитории автора оригинала: <a href="https://github.com/dannwaneri/production-safe-agent-loop">github.com/dannwaneri/production-safe-agent-loop</a>.</p><p><b>Источник:</b> <a href="https://www.freecodecamp.org/news/how-to-build-a-production-safe-agent-loop-from-exit-conditions-to-audit-trails/">How to Build a Production-Safe Agent Loop — From Exit Conditions to Audit Trails</a>, freeCodeCamp.</p>]]></content:encoded>
    </item>
    <item>
      <title>Чистое API на Node.js: практическое руководство</title>
      <link>https://tproger.ru/articles/chistoe-api-na-node-js-prakticheskij-gajd</link>
      <comments>https://tproger.ru/articles/chistoe-api-na-node-js-prakticheskij-gajd?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chistoe-api-na-node-js-prakticheskij-gajd</guid>
      <description><![CDATA[<p>Как построить поддерживаемое REST API на Node.js: слои, Zod, единые ошибки, версионирование и Swagger. Проверьте свою архитектуру.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chistoe-api-na-node-js-prakticheskij-gajd">Чистое API на Node.js: практическое руководство</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 16 Jun 2026 11:00:21 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если ваше Node.js-приложение начиналось с одного server.js, а через полгода превратилось в лабиринт маршрутов, где бизнес-логика растворилась в обработчиках Express — эта статья для вас. Чистое API проектируется не ради красоты, а чтобы команда могла добавлять конечные точки, не боясь сломать соседние.</p><p>Разберём минимальный, но готовый к продакшену скелет: разделение слоёв, валидацию входных данных, централизованную обработку ошибок, версионирование, ограничение частоты запросов и автоматическую документацию. Все принципы применимы и к Express, и к Fastify, и к NestJS.</p><p>Чистое API — это прежде всего разделение ответственности: роутер знает маршруты, контроллер переводит HTTP в вызовы сервиса, сервис отвечает за бизнес-логику, а схема проверяет входные данные. Такой подход делает код предсказуемым при любом масштабе.</p><p>Чистое API — это, прежде всего, разделение ответственности: роутеры, контроллеры, сервисы и валидация живут в разных слоях.</p><p>Валидация с помощью Zod выполняется на границе — до того, как запрос попадёт в бизнес-логику.</p><p>Централизованный обработчик ошибок — единственное место, где исключения превращаются в HTTP-ответы.</p><p>Стоит закладывать версионирование и документацию OpenAPI с первого дня: позже это обойдётся дороже.</p><p>Fastify и NestJS дают те же архитектурные идеи из коробки, но логика слоёв от этого не меняется.</p><h2>Что мы будем строить</h2><p>Возьмём намеренно простой домен — каталог товаров. Нам важна не бизнес-логика, а структура. К концу у нас будет REST API с единым форматом ответов, валидацией, версионированием по пути /api/v1, ограничением частоты запросов и интерактивной документацией Swagger.</p><h2>Структура проекта</h2><p>Прежде чем писать код, договоримся, где что лежит. Каждая фича — отдельная папка, а не рассыпанный по проекту набор файлов.</p><ul><li>api/v1/ — все маршруты версионированы с первого дня. Добавить v2 позже можно новой папкой, а не рефакторингом.</li><li>products/ — фичевая папка владеет роутером, контроллером, сервисом и схемой.</li><li>middleware/ — сквозная функциональность: защита, логирование, лимиты.</li><li>lib/ — утилиты без привязки к фреймворку.</li></ul><h2>Разделяем ответственность</h2><p>Самая частая ошибка в Express-приложениях — бизнес-логика внутри обработчика маршрута. Там же появляется валидация, работа с базой данных и формирование ответа. При росте проекта такой файл становится опасным для изменений.</p><h3>Роутер знает только «куда идти»</h3><h3>Промежуточный обработчик валидации</h3><p>Промежуточный обработчик validateRequest проверяет body, params и query до попадания в контроллер. Если данные не проходят проверку, ошибка передаётся в централизованный обработчик.</p><h3>Контроллер переводит HTTP в вызовы сервиса</h3><p>Контроллер не знает, где хранятся товары. Его задача — извлечь параметры из запроса, вызвать сервис и вернуть ответ. Всё остальное передаётся в централизованный обработчик ошибок через next(error).</p><h3>Сервис содержит бизнес-логику</h3><p>Сервис не зависит от HTTP. Когда придёт время заменить хранилище в памяти на настоящую базу данных, потребуется поправить только этот файл.</p><h2>Валидация на границе с Zod</h2><p>Любое API, принимающее внешние данные, должно их проверять. Без валидации один некорректный запрос способен превратиться в ошибку времени выполнения, некорректную запись в базе или уязвимость.</p><p>Zod даёт две вещи сразу: проверку во время выполнения и типы TypeScript, выведенные из одной схемы. Промежуточный обработчик validateRequest проверяет body, params и query до того, как запрос попадёт в контроллер. Если данные невалидны, дальше они не идут.</p><h2>Единый обработчик ошибок</h2><p>Разбросанная обработка ошибок — один из главных источников хаоса: где-то возвращается { error: '...' }, где-то { message: '...' }, а где-то случайно отдаётся HTML-страница. Решение — один обработчик, через который проходят все исключения.</p><p>Теперь клиент всегда получает предсказуемую форму ответа, а добавление логирования или отправки ошибок в мониторинг — однострочное изменение в одном месте.</p><h2>Единый формат ответов</h2><p>Успешный ответ всегда выглядит как { success: true, data: ... }, а ошибка — как { success: false, error: { code, message, details } }. Фронтенд или сторонний интегратор знает, чего ожидать от любого эндпоинта.</p><h2>Версионирование API</h2><p>Версионировать API с первого дня стоит недорого. Добавить версию позже — значит ломать существующих клиентов или городить сложную миграцию.</p><p>Новая версия — новая папка src/api/v2/ и новый префикс. Старые клиенты продолжают работать на /api/v1.</p><h2>Ограничение частоты запросов</h2><p>Rate limiting защищает API от случайных и намеренных перегрузок. Настроить его в Express помогает пакет express-rate-limit.</p><p>Глобальный лимит распространяется на все запросы; операции, которые изменяют данные, ограничены жёстче. Ответ тоже соответствует единому формату ошибки.</p><h2>Документация OpenAPI и Swagger</h2><p>API без документации годится только для автора. С помощью swagger-jsdoc и swagger-ui-express можно получить интерактивную документацию прямо из JSDoc-комментариев в роутерах.</p><p><b>Совет:</b><br />Держите описания эндпоинтов в одном файле с маршрутами, а glob в swagger.ts настройте на файлы, доступные во время работы приложения. Лучше генерировать спецификацию на этапе сборки, чем полагаться на исходники TypeScript.</p><h2>Fastify и NestJS: альтернативы Express</h2><p>Всё, что мы разобрали, работает и в Express. Но если вы начинаете проект с нуля, стоит взглянуть на альтернативы.</p><ul><li>Fastify — быстрее Express в бенчмарках (порой в два раза), имеет встроенный логгер Pino и валидацию по схеме. Разделение слоёв остаётся на совести разработчика.</li><li>NestJS — популярен в крупных компаниях: слои модулей, контроллеров и сервисов навязаны архитектурой, что упрощает введение новых разработчиков в проект.</li><li>Express — остаётся лучшим выбором, если вы присоединяетесь к существующему проекту или команда уже знает экосистему.</li></ul><p>Архитектурные принципы — разделение слоёв, единый формат ошибок, валидация на границе — не зависят от фреймворка. Меняется только синтаксис.</p><h2>FAQ</h2><h3>Минимальный набор для старта</h3><p>Для самостоятельного запуска понадобятся базовые зависимости и алиасы путей в tsconfig.json. Объявите @/* на папку src, и примеры заработают без ручных правок импортов.</p><h2>Выводы</h2><blockquote>Чистая структура API — это не переусложнение. Это минимум, при котором бэкенд можно поддерживать нескольким людям.</blockquote><p>Мы собрали минимальный, но масштабируемый каркас: папки по фичам, разделённые слои, валидацию на границе, централизованную обработку ошибок, единый формат ответов, версионирование, лимиты и автоматическую документацию. Ни один из этих шагов сложный сам по себе. Их ценность — в сочетании и в том, чтобы сделать всё это до того, как код разрастётся.</p><p>Если начинаете новый Node.js-проект, не откладывайте структуру «на потом». А в существующем — попробуйте вынести валидацию в схему и собрать ошибки в одном обработчике. Потом всегда дороже.</p><h2>Источники</h2><p>Идеи и примеры в статье основаны на материале Gavin Cettolo «<a href="https://dev.to/gavincettolo/clean-api-design-in-nodejs-a-practical-guide-3a32">Clean API Design in Node.js: A Practical Guide</a>» (dev.to).</p>]]></content:encoded>
    </item>
    <item>
      <title>Python: полный путеводитель для разработчика</title>
      <link>https://tproger.ru/articles/python--polnyj-putevoditel-dlya-razrabotchika</link>
      <comments>https://tproger.ru/articles/python--polnyj-putevoditel-dlya-razrabotchika?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Картофельный Повелитель]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/python--polnyj-putevoditel-dlya-razrabotchika</guid>
      <description><![CDATA[<p>Структурированный гайд по Python: синтаксис, ООП, Django/FastAPI, Data Science, asyncio и GIL. Примеры кода и ссылки на углублённые материалы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/python--polnyj-putevoditel-dlya-razrabotchika">Python: полный путеводитель для разработчика</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 02 Apr 2026 11:17:39 GMT</pubDate>
      <content:encoded><![CDATA[<p>Python — высокоуровневый интерпретируемый язык программирования общего назначения, который уверенно входит в тройку самых популярных языков программирования в мире. По данным индекса <a href="https://www.tiobe.com/tiobe-index/">TIOBE</a> на начало 2026 года, он стабильно удерживает первое место, а <a href="https://survey.stackoverflow.co/2024/">Stack Overflow Developer Survey</a> подтверждает: Python остаётся одним из самых желанных языков для изучения. Причина — универсальность: веб-приложения, нейросети, автоматизация, анализ данных, боты и управление инфраструктурой. Чистый синтаксис, читаемый код и гигантская экосистема библиотек позволяют писать рабочие программы уже после нескольких часов знакомства с языком.</p><p>В октябре 2025 года вышел Python 3.14 с экспериментальным JIT-компилятором и поддержкой шаблонных T-строк — язык продолжает ускоряться, не жертвуя простотой. Экосистема тоже не стоит на месте: FastAPI стал стандартом для высокопроизводительных API, а инструменты вроде Ruff и uv радикально ускорили рабочий процесс разработчика. Python Package Index (<a href="https://pypi.org/">PyPI</a>) насчитывает более 600 000 пакетов — для любой задачи, скорее всего, уже существует готовое решение.</p><p>Этот путеводитель — не энциклопедия и не учебник. Это навигационный хаб: мы кратко разберём каждую важную область Python и дадим ссылки на подробные материалы Tproger, где каждая тема раскрыта в деталях. Неважно, только начинаете вы знакомство с языком или уже пишете на нём продакшен-код — здесь вы найдёте структурированную карту для дальнейшего роста. Мы охватим основы синтаксиса, продвинутые концепции, три главных веб-фреймворка, Data Science, последние нововведения в Python 3.14 и карьерные перспективы.</p><p>— Python — язык №1 по TIOBE 2026, более 600 000 пакетов в PyPI</p><p>— Основы языка: динамическая типизация, duck typing, встроенные коллекции (list, tuple, dict, set и другие)</p><p>— Три главных веб-фреймворка: Django (full-stack), Flask (микро), FastAPI (async API)</p><p>— Python 3.14: экспериментальный JIT-компилятор и шаблонные T-строки</p><p>— Медианная зарплата middle Python-разработчика: 250 000—350 000 руб./мес.</p><p>— Функции: замыкания, LEGB, *args/**kwargs, лямбды</p><p>— ООП: классы, наследование, @property, магические методы</p><p>— GIL, threading, asyncio и multiprocessing — когда что использовать</p><p>— Тестирование с pytest, работа с файлами через pathlib</p><h2>Основы языка: с чего начинается Python</h2><p>Python — язык с динамической типизацией и строгим контролем отступов. Если в C++ или Java фигурные скобки определяют блоки кода, то в Python эту роль играют пробелы. Поначалу это непривычно, но на практике делает код единообразным и читаемым — у вас просто нет возможности написать нечитаемую «лапшу». Философия Python описана в «Дзен Python» (<a href="https://peps.python.org/pep-0020/">PEP 20</a>): «Красивое лучше уродливого», «Явное лучше неявного», «Простое лучше сложного». Эти принципы пронизывают весь язык и его стандартную библиотеку.</p><p>Базовые типы данных в Python — это числа (int, float, complex), строки (str), булевы значения (bool), а также коллекции: списки (list), кортежи (tuple), множества (set) и словари (dict). Каждый тип имеет свои особенности. Например, целые числа в Python не ограничены размером: можно спокойно работать с числами в тысячи разрядов без переполнения — попробуйте сделать это в C или Java. Строки неизменяемы, а словари с Python 3.7 гарантированно сохраняют порядок вставки. Множества предоставляют проверку принадлежности элемента за O(1), а операции объединения, пересечения и разности выполняются за линейное время, что делает их незаменимыми для задач на поиск уникальных элементов.</p><p>Одна из ключевых концепций — duck typing: «если объект ходит как утка и крякает как утка, то это утка». Python не проверяет тип объекта заранее — он проверяет, поддерживает ли объект нужную операцию. Это даёт гибкость, но требует дисциплины. Современный Python активно использует аннотации типов (type hints), которые помогают IDE и линтерам находить ошибки ещё до запуска кода. Начиная с Python 3.10 появился оператор match/case (паттерн-матчинг), а в 3.12 — улучшенные дженерики и type aliases, которые делают типизацию ещё удобнее.</p><p>Переменные в Python — это не ячейки памяти, а метки (имена), привязанные к объектам. Понимание этого механизма — ключ к предсказуемой работе с мутабельными типами вроде списков и словарей. Когда вы пишете a = b для списка, вы не копируете данные — обе переменные указывают на один и тот же объект в памяти. Отсюда классические ловушки с изменяемыми аргументами по умолчанию и «неожиданным» изменением данных. Для создания независимой копии нужно использовать срез [:], метод copy() или модуль copy для глубокого копирования.</p><p>Управляющие конструкции в Python минималистичны и выразительны. Условия записываются через if/elif/else, циклы — через for и while. Конструкция for в Python ближе к foreach из других языков: она итерирует по элементам коллекции, а не по индексам. Функция range() генерирует последовательности чисел для случаев, когда нужен числовой цикл. Важно освоить и обработку исключений (try/except/finally) — Python использует исключения не только для ошибок, но и как механизм управления потоком, например StopIteration для завершения итерации.</p><p>Подробнее о типах данных и их поведении — в <a href="https://tproger.ru/translations/python-data-types">нашем гайде по основным типам данных</a>. А если хотите системно пройти все базовые концепции от установки до первого проекта — загляните в <a href="https://tproger.ru/articles/podrobnoe-opisanie-jazyka-python-dlja-nachinajushhih">подробное описание языка для начинающих</a>.</p><h2>Функции в Python</h2><p>Функции — основной инструмент структурирования кода в Python. Ключевое слово def создаёт функцию, return возвращает результат. Python поддерживает позиционные и именованные аргументы, значения по умолчанию, а также распаковку через *args (кортеж позиционных) и **kwargs (словарь именованных). Это позволяет создавать гибкие интерфейсы: от простых утилит до сложных API-обёрток.</p><p>Анонимные функции lambda удобны для коротких выражений — например, в качестве ключа сортировки: sorted(users, key=lambda u: u.age). Однако злоупотреблять ими не стоит: если лямбда не помещается в одну строку, лучше написать обычную функцию с понятным именем.</p><p>Python использует правило LEGB для поиска переменных: Local → Enclosing → Global → Built-in. Это объясняет, почему переменная внутри функции «затеняет» глобальную, и почему для изменения глобальной переменной нужно объявление global. Замыкания (closures) — функции, захватывающие переменные из объемлющей области видимости — лежат в основе декораторов, фабричных функций и callback-паттернов.</p><p>Функции в Python — объекты первого класса: их можно передавать как аргументы, возвращать из других функций и сохранять в структурах данных. Это фундамент для функционального стиля программирования, который активно используется вместе с map(), filter() и functools.</p><h2>ООП в Python</h2><p>Python — мультипарадигменный язык, но ООП в нём реализовано глубоко и последовательно. Классы создаются ключевым словом class, конструктор определяется методом __init__, а первый параметр каждого метода — self, ссылка на текущий экземпляр. В отличие от Java или C#, где this подразумевается неявно, Python требует явного указания — это осознанный выбор в пользу читаемости.</p><p>Python поддерживает множественное наследование через механизм MRO (Method Resolution Order) — алгоритм C3-линеаризации определяет порядок обхода родительских классов. Полиморфизм реализуется через duck typing: нет необходимости в интерфейсах — достаточно, чтобы объект имел нужные методы. Для формальных контрактов есть модуль abc с абстрактными базовыми классами и декоратором @abstractmethod.</p><p>Инкапсуляция в Python — скорее соглашение, чем принуждение. Префикс _ обозначает «приватный» атрибут, __ — активирует механизм name mangling, но ни то ни другое не запрещает доступ. Для контролируемого доступа к атрибутам используют декоратор @property, который превращает метод в вычисляемое свойство с геттером, сеттером и делетером.</p><p>Магические методы (dunder-методы) — мощный механизм, позволяющий объектам вести себя как встроенные типы. __str__ и __repr__ управляют строковым представлением, __eq__ и __hash__ — сравнением, __len__ и __getitem__ — доступом к элементам. Подробный разбор синтаксиса и концепций Python — в <a href="https://tproger.ru/articles/podrobnoe-opisanie-jazyka-python-dlja-nachinajushhih">нашем подробном описании языка для начинающих</a>.</p><h2>Модули и пакеты Python</h2><p>Модульная система Python проста: любой .py-файл — это модуль, а директория с __init__.py — пакет. Импорт осуществляется через import и from ... import. Python ищет модули по путям из sys.path, куда автоматически входят текущая директория, стандартная библиотека и директория site-packages с установленными пакетами.</p><p>Для управления зависимостями экосистема предлагает несколько инструментов. Классический pip + venv решает базовые задачи: создание изолированного окружения и установка пакетов из PyPI. Poetry добавляет управление зависимостями через pyproject.toml, lock-файлы и публикацию пакетов. Новый uv — написанный на Rust менеджер пакетов — работает в 10—100 раз быстрее pip и активно набирает популярность.</p><p>Стандартная библиотека Python (batteries included) — одна из самых богатых: от работы с сетью (http, socket) до сериализации (json, pickle), регулярных выражений (re) и параллелизма (threading, multiprocessing). Полный список из более чем 200 модулей доступен в <a href="https://tproger.ru/translations/10-python-libraries-you-might-not-know">нашей подборке полезных Python-библиотек</a>.</p><h2>Практика: задачи для начинающих</h2><p>Главная ошибка при изучении программирования — читать теорию неделями, не написав ни строчки кода. Python хорош тем, что позволяет начать практиковаться с первого дня: интерактивный интерпретатор (REPL), быстрая обратная связь и понятные сообщения об ошибках снижают барьер входа до минимума. Откройте терминал, напишите python3 — и вы уже можете экспериментировать.</p><p>Начинайте с простых задач: обработка строк, работа со списками, базовые циклы и условия. Затем переходите к задачам на функции, рекурсию и работу с файлами. Важно не просто решать задачу, а разбирать чужие решения — так вы быстрее освоите идиоматический Python. Один грамотно решённый пример научит вас большему, чем десять страниц документации. Обращайте внимание на то, как опытные разработчики используют встроенные функции (enumerate, zip, map), срезы списков и словарные включения — это и есть «питонический» стиль.</p><p>Хорошая практика — вести собственный файл с решениями и заметками. Возвращаясь к задачам через неделю, вы увидите, как вырос ваш уровень. Платформы вроде LeetCode, Codewars и HackerRank предлагают задачи с автоматической проверкой, но начинать лучше с задач, адаптированных под русскоязычную аудиторию. Ещё один совет: не гонитесь за количеством. Пять задач, решённых вдумчиво с разбором альтернативных подходов, ценнее пятидесяти, решённых механически копированием паттернов.</p><p>Мы собрали <a href="https://tproger.ru/problems/python-3-exercises-for-beginners-geekbrains">подборку задач для начинающих</a> — от элементарных до задач средней сложности. Каждая задача тренирует конкретный навык: работу с коллекциями, строковыми операциями, логикой ветвления. Рекомендуем решать их последовательно — сложность нарастает постепенно, и к концу подборки вы будете уверенно владеть основами языка.</p><h2>Продвинутые концепции Python</h2><p>Когда основы освоены, приходит время познакомиться с инструментами, которые отличают код новичка от кода опытного разработчика. В Python таких инструментов много, но есть пять ключевых концепций, без которых сложно писать по-настоящему качественный код: декораторы, генераторы, comprehensions, контекст-менеджеры и механизм *args/**kwargs. Именно владение этими инструментами отличает junior-разработчика от middle — и именно их чаще всего спрашивают на собеседованиях.</p><h3>Декораторы</h3><p>Декоратор — это функция, которая принимает другую функцию и возвращает её модифицированную версию. Звучит абстрактно, но на практике декораторы встречаются повсеместно: @property, @staticmethod, @login_required в Django, @app.route() во Flask. Они позволяют добавлять поведение без изменения исходного кода функции — логирование, кэширование, проверку прав доступа, валидацию аргументов, замер времени выполнения.</p><p>Под капотом декоратор — это обычный паттерн: функция, принимающая функцию и возвращающая функцию. Но синтаксический сахар с символом @ делает код лаконичным и выразительным. Декораторы можно параметризовать, складывать стопкой (применять несколько к одной функции) и даже применять к целым классам. Стандартная библиотека Python включает полезные декораторы: @functools.lru_cache для кэширования результатов, @functools.wraps для сохранения метаданных обёрнутой функции.</p><p>Декораторы — одна из тех тем, которые кажутся сложными ровно до момента, пока не разберёшься. Подробный разбор с примерами — в статье <a href="https://tproger.ru/translations/demystifying-decorators-in-python">«Декораторы в Python: понять и полюбить»</a>.</p><h3>Генераторы и comprehensions</h3><p>Генераторы — это функции с ключевым словом yield, которые возвращают данные лениво, по одному элементу за раз. Вместо того чтобы создавать в памяти список из миллиона элементов, генератор выдаёт их по запросу. Это критически важно при обработке больших файлов, потоков данных и результатов SQL-запросов. Генератор занимает фиксированный объём памяти независимо от количества элементов — хоть миллион, хоть миллиард.</p><p>Comprehensions (списковые, словарные и множественные включения) — это питонический способ создания коллекций в одну строку. Вместо цикла из трёх строк вы пишете выразительную конструкцию: [x ** 2 for x in range(10) if x % 2 == 0]. Они быстрее эквивалентных циклов (Python оптимизирует их на уровне байткода) и читаются проще — если не злоупотреблять вложенностью. Словарные включения {k: v for k, v in pairs} и множественные {x for x in items} работают по тому же принципу.</p><h3>Контекст-менеджеры и *args/**kwargs</h3><p>Конструкция with в Python — это контекст-менеджер, который гарантирует корректное освобождение ресурсов: закрытие файлов, соединений с базой, снятие блокировок. Вместо try/finally вы пишете with open('file.txt') as f: — и ресурс освобождается автоматически, даже если произошла ошибка. Можно создавать собственные контекст-менеджеры через методы __enter__/__exit__ или декоратор @contextmanager из модуля contextlib — это проще, чем кажется.</p><p>*args и **kwargs позволяют создавать функции с переменным числом аргументов. Это основа для написания гибких API, декораторов и обёрток. Понимание того, как Python распаковывает аргументы, открывает путь к элегантным решениям: передача параметров из словаря в функцию одной строкой, объединение конфигураций, создание универсальных обёрток. В комбинации с аннотациями типов (ParamSpec, Concatenate) этот механизм стал ещё мощнее в последних версиях Python.</p><p>Отдельного внимания заслуживает работа с памятью. Python скрывает от разработчика ручное управление памятью, но понимание того, сколько весят разные типы данных и как работает сборщик мусора, помогает писать эффективный код. Например, пустой список в Python занимает 56 байт, а каждый элемент добавляет 8 байт на указатель плюс размер самого объекта. Для числовых задач это означает, что NumPy-массив может быть в 10 раз компактнее обычного списка. Детальный разбор — в статье о <a href="https://tproger.ru/articles/raspredelenie-pamjati-v-python-skolko-i-v-kakih-sluchajah-zanimajut-tipy-dannyh">распределении памяти в Python</a>.</p><h3>Dataclasses и NamedTuple</h3><p>Модуль dataclasses (Python 3.7+) решает классическую проблему: написание классов, которые в основном хранят данные. Декоратор @dataclass автоматически генерирует __init__, __repr__, __eq__ и другие методы. С параметром frozen=True класс становится неизменяемым — удобно для конфигураций и DTO.</p><p>NamedTuple — ещё более лёгкая альтернатива: именованный кортеж занимает меньше памяти, чем dataclass, и автоматически поддерживает распаковку и итерацию. Выбор между ними прост: нужна изменяемость или наследование — dataclass, нужна компактность и совместимость с кортежами — NamedTuple.</p><h2>Многопоточность, асинхронность и GIL</h2><p>GIL (Global Interpreter Lock) — глобальная блокировка интерпретатора CPython, которая гарантирует, что в каждый момент времени только один поток выполняет байткод Python. Это упрощает реализацию интерпретатора и работу с памятью, но ограничивает параллелизм CPU-задач. Важно: GIL не мешает I/O-параллелизму — потоки освобождают блокировку при ожидании сети, диска или sleep.</p><p>Модуль threading подходит для I/O-bound задач: параллельные HTTP-запросы, чтение файлов, работа с базами данных. Для CPU-bound вычислений (обработка изображений, математические расчёты) используйте multiprocessing — он создаёт отдельные процессы, каждый со своим GIL. Пул concurrent.futures.ProcessPoolExecutor упрощает распределение задач по ядрам.</p><p>Модуль asyncio — стандарт для асинхронного программирования в Python. Конструкции async def и await позволяют писать неблокирующий код, который выглядит почти как синхронный. Один поток обрабатывает тысячи соединений — именно поэтому FastAPI и другие ASGI-фреймворки работают быстрее классических WSGI-аналогов.</p><p>Когда что использовать? threading — для I/O-операций с умеренной нагрузкой. asyncio — для высоконагруженных I/O-сценариев (веб-серверы, парсеры). multiprocessing — для CPU-bound задач. На практике они часто комбинируются: например, asyncio для сетевого ввода-вывода и ProcessPool для тяжёлых вычислений внутри одного приложения.</p><p>Важная новость: <a href="https://peps.python.org/pep-0703/">PEP 703</a> предлагает сделать GIL опциональным (free-threaded Python). Экспериментальная сборка без GIL уже доступна в Python 3.13+ через специальную сборку python3.14t (free-threaded build). В Python 3.14 этот режим стал официально поддерживаемым (<a href="https://peps.python.org/pep-0779/">PEP 779</a>). Если эксперимент окажется успешным, в будущих версиях Python сможет полноценно использовать все ядра процессора без обходных путей через multiprocessing.</p><h2>Тестирование в Python</h2><p>Тестирование — не роскошь, а базовая гигиена разработки. В Python стандартом де-факто является pytest — фреймворк, который сочетает простоту написания тестов с мощной системой расширений. Обычные функции с assert — это уже тесты. Не нужны классы, наследование от TestCase и специальные методы.</p><p>Фикстуры (@pytest.fixture) управляют подготовкой и очисткой тестового окружения: подключение к базе данных, создание тестового клиента, временные файлы. Параметризация (@pytest.mark.parametrize) позволяет прогнать один тест с десятками наборов входных данных без дублирования кода.</p><p>Для изоляции внешних зависимостей используйте unittest.mock — встроенный модуль, который позволяет подменять HTTP-запросы, обращения к базе данных и вызовы внешних сервисов. В связке с pytest это покрывает 95% потребностей в тестировании. TDD (Test-Driven Development) — подход, при котором тест пишется раньше кода. Его необязательно практиковать всегда, но для сложной бизнес-логики он существенно снижает количество регрессий.</p><h2>Работа с файлами и данными</h2><p>Python предоставляет удобные инструменты для работы с файлами любых форматов. Конструкция with open(...) гарантирует корректное закрытие файла даже при ошибке. Модуль pathlib (Python 3.4+) — современная замена os.path: объектно-ориентированные пути, кроссплатформенная совместимость и цепочки вызовов.</p><p>Для структурированных данных стандартная библиотека предлагает модули json, csv и configparser. Для YAML понадобится сторонний пакет PyYAML. Работа с Excel-файлами — через openpyxl или pandas. Для больших объёмов данных используйте потоковое чтение: csv.reader или json.JSONDecoder().raw_decode() вместо загрузки всего файла в память.</p><p>Для работы с распределением памяти и внутренним устройством типов данных Python — рекомендуем нашу <a href="https://tproger.ru/articles/raspredelenie-pamjati-v-python-skolko-i-v-kakih-sluchajah-zanimajut-tipy-dannyh">статью о распределении памяти в Python</a>: сколько и в каких случаях занимают типы данных.</p><h2>Веб-разработка на Python</h2><p>Python — один из ключевых языков для серверной веб-разработки. Три фреймворка покрывают практически все сценарии: Django — для полнофункциональных приложений, Flask — для микросервисов и лёгких проектов, FastAPI — для высокопроизводительных API. Каждый из них занимает свою нишу, и выбор зависит от масштаба проекта, требований к производительности и опыта команды. Разберём сильные и слабые стороны каждого, чтобы вы могли сделать осознанный выбор.</p><h3>Django: всё включено</h3><p>Django — это «батарейки в комплекте». ORM, админ-панель, система аутентификации, шаблонизатор, миграции базы данных, защита от CSRF и XSS, формы с валидацией, кэширование, интернационализация — всё работает из коробки и не требует сторонних зависимостей. Это делает Django идеальным выбором для крупных проектов: интернет-магазинов, SaaS-платформ, CRM-систем, внутренних корпоративных порталов. Instagram, Mozilla, Disqus, Pinterest — все они используют Django в продакшене.</p><p>Главное преимущество Django — зрелость. Фреймворку больше 20 лет, он имеет огромное сообщество, тысячи готовых пакетов (django-rest-framework, django-allauth, celery) и предсказуемый цикл релизов. Django ORM позволяет работать с базой данных через Python-объекты, не написав ни строчки SQL, а система миграций автоматически отслеживает изменения в моделях. Обратная сторона — Django навязывает свою архитектуру. Если вам нужен только REST API без шаблонов и админки, значительная часть фреймворка будет «мёртвым грузом».</p><h3>Flask: минималистичный и гибкий</h3><p>Flask — противоположность Django. Микрофреймворк даёт маршрутизацию, обработку запросов и систему расширений — остальное вы выбираете сами. Нужна ORM? Подключите SQLAlchemy. Нужна авторизация? Flask-Login. Хотите WebSocket? Flask-SocketIO. Такой подход идеален для микросервисов, прототипов и проектов, где полный контроль над стеком важнее скорости старта. Flask часто выбирают для внутренних сервисов, API-шлюзов и проектов, которые начинаются маленькими, но могут вырасти.</p><p>Flask отлично сочетается с фронтенд-фреймворками. Например, в статье <a href="https://tproger.ru/translations/developing-app-with-flask-and-vue-js">«Пишем одностраничное приложение с Flask и Vue.js»</a> мы показываем, как построить SPA с Flask-бэкендом — от настройки проекта до деплоя. Это типичный современный стек: Python на сервере, JavaScript-фреймворк на клиенте.</p><h3>FastAPI: скорость и типизация</h3><p>FastAPI — самый молодой из тройки, но уже ставший стандартом для создания API. Он построен на Starlette (ASGI) и Pydantic, поддерживает async/await из коробки и автоматически генерирует документацию OpenAPI (Swagger UI и ReDoc) прямо из аннотаций типов в коде. FastAPI — один из самых быстрых Python-фреймворков благодаря Starlette и uvicorn. Валидация данных через Pydantic-модели ловит ошибки ещё до обработки запроса, а type hints превращаются в живую документацию API. Dependency injection встроен в ядро фреймворка, что упрощает тестирование и переиспользование кода.</p><p>Но скорость — не всё. FastAPI требует понимания асинхронного программирования, а экосистема пока уступает Django и Flask по количеству готовых решений. Для простого CRUD-приложения с админкой Django справится быстрее; для прототипа с нестандартной архитектурой Flask даст больше свободы. О подводных камнях и ситуациях, когда FastAPI — не лучший выбор, мы подробно рассказываем в статье <a href="https://tproger.ru/articles/pochemu-ne-stoit-vybirat-fastapi-samyj-bystryj-frejmvork-na-python">«Почему не стоит выбирать FastAPI»</a> — честный разбор, который поможет принять взвешенное решение.</p><h3>Какой фреймворк выбрать</h3><ul><li>Полноценное веб-приложение с админкой и авторизацией — Django</li><li>Микросервис или прототип с полным контролем над стеком — Flask</li><li>Высокопроизводительный REST/GraphQL API с автодокументацией — FastAPI</li><li>Не уверены — начните с Django: у него самый пологий путь от нуля до продакшена</li></ul><p>На практике многие команды используют несколько фреймворков одновременно: Django для основного приложения, FastAPI для высоконагруженных микросервисов, Flask для внутренних инструментов. Python позволяет комбинировать. Общий навык для всех трёх фреймворков — понимание HTTP-протокола, REST-архитектуры, работы с базами данных и основ безопасности (CORS, CSRF, XSS, SQL-инъекции). Освоив эти концепции на одном фреймворке, вы легко перейдёте на другой.</p><h2>Python для Data Science</h2><p>Если веб-разработка — давняя территория Python, то Data Science — его новая сверхдержава. По данным <a href="https://www.jetbrains.com/lp/devecosystem-2024/python/">JetBrains Developer Ecosystem Survey</a>, Python — самый изучаемый язык программирования и основной инструмент дата-аналитиков и дата-инженеров. R, Julia, Scala — у каждого есть свои преимущества, но ни один не предлагает такую же широту экосистемы. Причина — уникальный набор библиотек, который покрывает весь pipeline работы с данными: от загрузки и очистки до визуализации и развёртывания моделей в продакшен.</p><p>NumPy — фундамент всего стека. Библиотека предоставляет многомерные массивы и математические операции, работающие на порядки быстрее чистого Python — за счёт реализации на C. Умножение матрицы 1000x1000 в NumPy выполняется за миллисекунды, в то время как наивная реализация на чистом Python займёт минуты. Pandas строится поверх NumPy и предлагает удобные таблицы (DataFrame), позволяя загружать, фильтровать, группировать и агрегировать данные в несколько строк кода. Данные из CSV, Excel, SQL, JSON — Pandas читает практически всё.</p><p>Для машинного обучения стандартом остаётся scikit-learn — библиотека с десятками алгоритмов классификации, регрессии и кластеризации. Её главная сила — единый интерфейс: fit(), predict(), score() работают одинаково для любого алгоритма, будь то случайный лес, SVM или градиентный бустинг. Это позволяет быстро сравнивать модели, менять алгоритмы одной строкой и строить пайплайны предобработки данных.</p><p>Для глубокого обучения Python предлагает PyTorch и TensorFlow — два гиганта, на которых построены GPT, Stable Diffusion и другие модели, изменившие индустрию. PyTorch доминирует в исследованиях благодаря динамическим вычислительным графам, а TensorFlow остаётся популярным в продакшене благодаря TensorFlow Serving и TFLite. Визуализация данных — matplotlib для статичных графиков, seaborn для статистических визуализаций и plotly для интерактивных дашбордов. Jupyter Notebook объединяет всё это в единую среду, где код, графики и текст живут рядом.</p><p>Разобраться в ключевых библиотеках поможет наш <a href="https://tproger.ru/translations/top-10-python-bibliotek-dlja-data-science">топ-10 Python-библиотек для Data Science</a>. А если хотите расширить инструментарий за пределы стандартного набора — загляните в подборку <a href="https://tproger.ru/translations/10-python-libraries-you-might-not-know">10 полезных библиотек, о которых вы могли не слышать</a>: там есть настоящие жемчужины для отладки, профилирования и работы с данными.</p><p>Для управления окружениями в Data Science часто используют conda (Anaconda/Miniconda) — он умеет устанавливать не только Python-пакеты, но и системные зависимости вроде CUDA для GPU-вычислений.</p><h2>Практические инструменты Python</h2><p>Помимо веб-разработки и Data Science, Python — незаменимый инструмент для повседневных задач: интеграция с внешними сервисами, извлечение данных из веб-страниц и обработка текста.</p><h3>Работа с API</h3><p>Библиотека requests — стандарт для синхронных HTTP-запросов: лаконичный API, автоматическая сериализация JSON и управление сессиями. Для асинхронных задач и HTTP/2 используйте httpx — он совместим с requests по интерфейсу, но поддерживает async/await.</p><h3>Веб-скрапинг</h3><p>Для извлечения данных из HTML-страниц Python предлагает несколько уровней инструментов. BeautifulSoup — простой парсер для статических страниц: выборка по CSS-селекторам и тегам. Scrapy — полноценный фреймворк для масштабного скрапинга с очередями, ротацией прокси и экспортом данных. Selenium и Playwright — для страниц, где контент рендерится JavaScript'ом.</p><h3>Регулярные выражения</h3><p>Модуль re — мощный инструмент для поиска и трансформации текста по шаблонам. Основные функции: re.findall() для извлечения всех совпадений, re.sub() для замены и re.compile() для предкомпиляции часто используемых паттернов.</p><p>Совет: для сложных паттернов используйте сырые строки (r"...") — они избавляют от двойного экранирования обратных слэшей. А для задач, выходящих за рамки регулярных выражений (парсинг HTML, XML), всегда предпочитайте специализированные парсеры.</p><h2>Что нового в Python 3.14</h2><p>Python 3.14 (<a href="https://docs.python.org/3/whatsnew/3.14.html">что нового</a>) (да, «пи»-релиз — разработчики не упустили возможность пошутить), выпущенный в октябре 2025 года, стал одним из самых значительных релизов за последние годы. Главные нововведения направлены на производительность — область, где Python традиционно уступал компилируемым языкам. Но 3.14 меняет правила игры.</p><p>Экспериментальный JIT-компилятор (<a href="https://peps.python.org/pep-0744/">PEP 744</a>) — пожалуй, главная новость. Он компилирует часто выполняемые участки кода (так называемые «горячие пути») в машинные инструкции прямо во время работы программы. На реальных приложениях это даёт эффект варьируется: от замедления на 10% до ускорения на 20% в зависимости от нагрузки — на некоторых задачах JIT пока замедляет код без каких-либо изменений в коде. JIT пока отключён по умолчанию (в официальных сборках для macOS и Windows JIT уже включён в бинарники — активируется переменной окружения PYTHON_JIT=1), но уже работает стабильно на большинстве платформ. Это первый шаг к тому, чтобы Python перестал считаться «медленным языком».</p><p>Внутренняя архитектура интерпретатора переработана: новый tail-call диспетчер опкодов (на уровне C, не Python-функций) даёт прирост 3—5% на стандартном benchmark suite. Важно: это не оптимизация хвостовой рекурсии в Python-коде — RecursionError при превышении глубины стека по-прежнему возможен.</p><p>T-строки (<a href="https://peps.python.org/pep-0750/">PEP 750</a>) — новый синтаксис шаблонных строк с префиксом t"...". В отличие от f-строк, T-строки не выполняют подстановку сразу, а возвращают объект Template, который можно обработать — экранировать специальные символы, валидировать параметры, преобразовать значения. Это отличное решение для безопасной генерации HTML и SQL без риска инъекций.</p><p>Среди других улучшений — ускоренные операции со словарями (до 40% быстрее в некоторых сценариях), оптимизированная работа сборщика мусора и улучшенные сообщения об ошибках, которые теперь подсказывают возможные причины проблемы. Обновлён синтаксис обработки исключений (<a href="https://peps.python.org/pep-0758/">PEP 758</a>): теперь можно писать except ValueError, TypeError: без скобок (без as — с as по-прежнему нужны скобки: except (ValueError, TypeError) as e:). Также завершён переход на отложенное вычисление аннотаций типов (<a href="https://peps.python.org/pep-0649/">PEP 649</a>/749) — аннотации больше не вычисляются при импорте модуля, что ускоряет запуск. Python продолжает развиваться, сохраняя обратную совместимость и фокус на удобстве разработчика.</p><h2>Куда двигаться дальше</h2><p>Python открывает множество карьерных путей, и выбор зависит от ваших интересов и склонностей. Вот основные направления, в каждом из которых Python — ключевой или один из основных инструментов:</p><ol><li><b>Backend-разработчик</b> — Django, Flask или FastAPI, базы данных (PostgreSQL, Redis), REST API, очереди задач (Celery), контейнеризация (Docker, Kubernetes)</li><li><b>Data Scientist / ML-инженер</b> — pandas, scikit-learn, PyTorch, работа с данными, статистика, построение и деплой моделей</li><li><b>DevOps / SRE</b> — автоматизация инфраструктуры (Ansible, Terraform), скрипты мониторинга, CI/CD пайплайны, облачные провайдеры (AWS, GCP)</li><li><b>ИИ-инженер</b> — LLM, промпт-инжиниринг, RAG-системы, fine-tuning, LangChain, работа с API нейросетей (OpenAI, Anthropic, Mistral)</li><li><b>Автоматизатор / QA-инженер</b> — Selenium, Playwright, pytest, автоматизация тестирования, нагрузочное тестирование (Locust)</li></ol><p>Независимо от выбранного направления, есть навыки, которые пригодятся везде: Git для контроля версий, SQL для работы с базами данных, Docker для контейнеризации, Linux для понимания серверной среды. Python-разработчик в 2026 году — это не просто человек, который знает синтаксис языка, а специалист, владеющий инструментарием вокруг него. Также стоит освоить виртуальные окружения (venv, poetry, uv), линтеры (ruff, mypy) и основы CI/CD — это ожидается от любого профессионального разработчика. Для управления версиями Python-проектов пригодится наш <a href="https://tproger.ru/articles/git-polnyj-putevoditel-ot-pervogo-kommita-do-prodvinutyh-wor">путеводитель по Git</a>.</p><p>Рынок труда подтверждает спрос: по данным <a href="https://hh.ru/">hh.ru</a>, количество вакансий с Python стабильно растёт на 15—20% в год, а медианная зарплата Python-разработчика уровня middle составляет 250 000—350 000 рублей в месяц. Специалисты на стыке Python и Data Science / ML зарабатывают ещё больше. Язык востребован не только в IT-компаниях: банки, телеком, ритейл, промышленность — Python нужен везде, где есть данные и автоматизация.</p><p>Отдельно стоит упомянуть растущий спрос на ИИ-инженеров. С развитием больших языковых моделей Python стал основным языком для интеграции ИИ в продукты: построение RAG-систем, создание агентов, fine-tuning моделей — всё это делается на Python. Библиотеки LangChain, LlamaIndex, Hugging Face Transformers формируют новую экосистему, которая растёт быстрее любого другого направления в IT.</p><p>Если вы в начале пути — начните со структурированной <a href="https://tproger.ru/articles/python-roadmap-2023-ljn8jvxfj">дорожной карты изучения Python</a>. Она поможет не потеряться в обилии материалов и выстроить последовательный план обучения от основ до профессионального уровня. А затем возвращайтесь к этому путеводителю — здесь вы всегда найдёте ссылки на углублённые материалы по каждой теме. Мы регулярно обновляем наши гайды, чтобы они оставались актуальными — так что добавляйте страницу в закладки.</p>]]></content:encoded>
    </item>
    <item>
      <title>Cloudflare запустила EmDash — open-source CMS на TypeScript, которая решает главную проблему WordPress</title>
      <link>https://tproger.ru/news/cloudflare-zapustila-emdash---open-source-cms-na-typescript--kot</link>
      <comments>https://tproger.ru/news/cloudflare-zapustila-emdash---open-source-cms-na-typescript--kot?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/cloudflare-zapustila-emdash---open-source-cms-na-typescript--kot</guid>
      <description><![CDATA[<p>Cloudflare выпустила EmDash — open-source CMS на TypeScript с песочницей для плагинов, MCP-сервером для ИИ-агентов и миграцией с WordPress. Разбираем архитектуру.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/cloudflare-zapustila-emdash---open-source-cms-na-typescript--kot">Cloudflare запустила EmDash — open-source CMS на TypeScript, которая решает главную проблему WordPress</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[WordPress]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 02 Apr 2026 10:18:14 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы хоть раз обновляли WordPress-плагин и молились, чтобы сайт не упал — Cloudflare сделала кое-что для вас.</p><p><a href="https://blog.cloudflare.com/emdash-wordpress/">EmDash</a> — это новая open-source CMS (система управления контентом) на TypeScript от Cloudflare, которую компания <a href="https://blog.cloudflare.com/emdash-wordpress/">называет</a> «духовным наследником WordPress». Главная идея: плагины работают в изолированных песочницах и не могут навредить сайту, даже если содержат уязвимости.</p><ul><li>Cloudflare выпустила EmDash v0.1.0 — open-source CMS на TypeScript с MIT-лицензией</li><li>Каждый плагин запускается в изолированной песочнице (Dynamic Workers) и декларирует нужные разрешения в манифесте</li><li>96% уязвимостей WordPress-сайтов приходится на плагины — EmDash решает эту проблему архитектурно</li><li>Под капотом — Astro, serverless-архитектура, Portable Text вместо HTML, встроенный MCP-сервер для ИИ-агентов</li><li>Проект создан за 2 месяца с помощью ИИ-агентов, доступен на GitHub (3200+ звёзд за сутки)</li></ul><p>WordPress исполнится 23 года в этом году (основан в 2003 году). Платформа <a href="https://w3techs.com/technologies/details/cm-wordpress">обслуживает</a> более 40% всех сайтов в интернете, но её архитектура родом из эпохи, когда AWS EC2 ещё не существовал. Плагинная система WordPress — главное преимущество и главная боль одновременно.</p><h2>Почему безопасность плагинов WordPress — нерешаемая проблема</h2><p>В WordPress плагин — это PHP-скрипт, который встраивается напрямую в ядро и получает полный доступ к базе данных и файловой системе. Нет изоляции, нет ограничений. Установить плагин — значит полностью ему довериться.</p><p>Статистика <a href="https://www.wordfence.com/">Wordfence</a> и других ИБ-компаний неутешительна:</p><ul><li><b>96% уязвимостей</b> WordPress-сайтов происходят из плагинов</li><li>В 2025 году нашли больше критических уязвимостей в экосистеме WordPress, чем за два предыдущих года вместе</li><li>Очередь ревью в маркетплейсе WordPress.org — <b>800+ плагинов</b>, ожидание — минимум 2 недели</li></ul><p>WordPress не может решить эту проблему, не переписав архитектуру с нуля. Cloudflare решила это сделать.</p><h2>Как EmDash изолирует плагины</h2><p>В EmDash каждый плагин запускается в собственном изолированном воркере (<a href="https://developers.cloudflare.com/workers/">Dynamic Worker</a> — легковесная v8-песочница, запускающаяся за миллисекунды). Вместо полного доступа ко всему, плагин <b>декларирует</b> в манифесте, какие возможности ему нужны:</p><p>Этот плагин запрашивает ровно два разрешения: чтение контента и отправку email. <b>Ничего другого он сделать не может</b> — ни обратиться к внешнему серверу, ни прочитать файловую систему, ни получить доступ к базе данных напрямую.</p><p>Модель напоминает OAuth: при установке плагина вы видите, какие именно разрешения он запрашивает, и принимаете осознанное решение. Администратор может задать политики — какие capabilities допустимы для каких ролей.</p><h2>Архитектура и стек</h2><p>EmDash построен на современном стеке:</p><ul><li><b>TypeScript</b> — весь код, включая плагины и темы</li><li><b>Astro</b> — фреймворк для контентных сайтов, рендеринг тем</li><li><b>Portable Text</b> — структурированный JSON вместо HTML, контент не привязан к DOM</li><li><b>Serverless</b> — масштабируется до нуля, работает на Cloudflare Workers или любом Node.js-сервере</li><li><b>Passkeys</b> — аутентификация без паролей по умолчанию (WebAuthn)</li><li><b>MIT-лицензия</b> — без ограничений GPL, плагины могут иметь любую лицензию</li></ul><h3>Хранение и совместимость</h3><p>На Cloudflare EmDash использует D1 (база данных), R2 (файлы), Workers (вычисления). Но абстракции портируемы: можно запустить на SQLite, PostgreSQL, AWS S3 или локальном файловом хранилище. Команда для развёртывания:</p><h2>ИИ-нативная CMS: MCP, CLI, Agent Skills</h2><p>EmDash <a href="https://github.com/emdash-cms/emdash">спроектирован</a> для работы с ИИ-агентами:</p><ul><li><b>Встроенный MCP-сервер</b> — Claude, ChatGPT и другие ИИ-инструменты могут управлять сайтом напрямую через Model Context Protocol</li><li><b>Agent Skills</b> — файлы-инструкции для ИИ-агентов: как писать плагины, портировать темы с WordPress, работать со схемами контента</li><li><b>CLI</b> — программное управление контентом, медиа, схемами</li></ul><p>По сути, рутинную работу — миграцию контента, создание плагинов, адаптацию тем — можно поручить ИИ-агенту, и EmDash даст ему весь необходимый контекст.</p><h2>Встроенная монетизация через x402</h2><p>Каждый сайт на EmDash поддерживает стандарт <a href="https://x402.org">x402</a> — нативные интернет-платежи. Клиент (например, ИИ-агент) отправляет HTTP-запрос, получает ответ 402 Payment Required и оплачивает доступ к контенту на лету. Настроить монетизацию можно без единой строчки кода — указать, какой контент платный, и привязать кошелёк.</p><h2>Миграция с WordPress</h2><p>EmDash поддерживает импорт существующих WordPress-сайтов:</p><ol><li>Экспорт WXR-файла (WordPress eXtended RSS) из WordPress-админки</li><li>Или установка плагина EmDash Exporter, который создаёт защищённый endpoint для миграции</li><li>Автоматический перенос постов, страниц, медиафайлов и таксономий</li></ol><p>Кастомные типы контента (которые в WordPress требуют Advanced Custom Fields) в EmDash задаются через визуальный конструктор схем в админке.</p><h2>Что стоит учесть</h2><p>EmDash находится в статусе <b>бета-превью (v0.1.0)</b>. Несколько моментов:</p><ul><li>Проект молодой — 62 коммита, 4 контрибьютора, 34 релиза</li><li>Песочница для плагинов через Dynamic Workers требует платного аккаунта Cloudflare (от $5/мес), но EmDash запускается и без неё — плагины будут работать в safe mode без изоляции</li><li>Экосистема плагинов и тем ещё не сформировалась — на старте доступны формы, встраивания, SEO, аудит-лог</li><li>Привязка к инфраструктуре Cloudflare — можно запустить на Node.js, но максимальную производительность даёт именно Cloudflare</li></ul><h2>Выводы</h2><blockquote>WordPress — триумф open source, который дал возможность публиковаться миллионам. Но экосистеме нужен вариант, который даёт ту же свободу и доступность, решая при этом проблемы, которые WordPress не может решить.</blockquote><p>EmDash — амбициозная заявка Cloudflare на рынок CMS. За 24 часа после анонса проект набрал более 3200 звёзд на <a href="https://github.com/emdash-cms/emdash">GitHub</a> и 600+ баллов на Hacker News. Продакшн-готовности пока нет — это бета. Но идея изолированных плагинов с декларативными разрешениями решает реальную проблему, которая мучает WordPress-экосистему десятилетиями.</p><p>Попробовать EmDash можно в <a href="https://emdash.dev/playground">онлайн-песочнице</a> или развернуть локально через CLI.</p>]]></content:encoded>
    </item>
    <item>
      <title>Сравнение golang веб-фреймворков 2026 года: топ-5 лучших вариантов</title>
      <link>https://tproger.ru/potoksoznaniya/sravnenie-golang-veb-frejmvorkov-2026-goda--top-5-luchwih-variant</link>
      <comments>https://tproger.ru/potoksoznaniya/sravnenie-golang-veb-frejmvorkov-2026-goda--top-5-luchwih-variant?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Картофельный Повелитель]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/potoksoznaniya/sravnenie-golang-veb-frejmvorkov-2026-goda--top-5-luchwih-variant</guid>
      <description><![CDATA[<p>Сравнение веб‑фреймворков 2026 года: разбираем топ‑5 вариантов на Go — Gin, Fiber, Echo, Chi и Beego. Анализируем производительность, потребление памяти, поддержку асинхронности, удобство маршрутизации и экосистему. Помогаем выбрать оптимальный фреймворк под ваш проект: от MVP до enterprise.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/potoksoznaniya/sravnenie-golang-veb-frejmvorkov-2026-goda--top-5-luchwih-variant">Сравнение golang веб-фреймворков 2026 года: топ-5 лучших вариантов</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>Fri, 20 Feb 2026 15:11:28 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Почему стоит выбрать Go для веб-разработки?</h2><p>Go стал очень популярным языком для бэкенд-API, потому что он предоставляет:</p><ul><li>Очень высокая производительность (компилируемый язык)</li><li>Простой параллелизм с помощью горутин</li><li>Простое развертывание (один бинарный файл)</li><li>Отлично подходит для микросервисов и облачных приложений</li></ul><p>Такие крупные компании, как Google, Uber, Twitch, Dropbox, активно используют Go для серверных сервисов.</p><h2>5 лучших веб-фреймворков Go в 2026 году</h2><h2>Gin — безопасный выбор по умолчанию</h2><p><i></i><i>Сайт </i>→ <a href="https://gin-gonic.com/" rel="nofollow">https://gin-gonic.com/</a></p><p><i>GitHub </i>→ <a href="https://github.com/gin-gonic/gin" rel="nofollow">https://github.com/gin-gonic/gin</a></p><p><b>Gin</b> — пожалуй, самый популярный фреймворк на Go на сегодняшний день. Если вы не знаете, что выбрать, выбирайте Gin.</p><p><b>Скорость изучения:</b> 1–2 дня</p><p><b>Идея для бенчмарка: </b>~50–70 тыс. запросов в секунду</p><p><b>Преимущества</b> 👍</p><p>• Очень прост в настройке</p><p>• Огромное сообщество и промежуточное ПО</p><p>• Стабилен и проверен в реальных условиях</p><p>• Работает со стандартной экосистемой net/http</p><p><b>Недостатки</b> 👎</p><p>• Непредвзятость → большие проекты могут стать запутанными</p><p>• Отсутствие встроенной системы внедрения зависимостей</p><p>• Некоторым не нравится стиль с использованием контекста</p><h2>Fiber — стиль Express.js для Go</h2><p><i>Сайт</i> → <a href="https://gofiber.io/" rel="nofollow">https://gofiber.io/</a></p><p><i>GitHub</i> → <a href="https://github.com/gofiber/fiber" rel="nofollow">https://github.com/gofiber/fiber</a></p><p><b>Fiber</b> похож на Express.js, но написан на Go. Если вы знакомы с Node.js, он вам понравится.</p><p><b>Скорость обучения</b>: 1 день</p><p><b>Идея бенчмарка:</b> ~70–110 тыс. запросов в секунду</p><p><b>Преимущества</b> 👍</p><p>• Чрезвычайно быстрый</p><p>• Очень удобен для разработчиков на Node</p><p>• Множество встроенных функций</p><p>• Чистый и простой синтаксис</p><p><b>Недостатки</b> 👎</p><p>• Использует fasthttp вместо net/http</p><p>• Некоторые библиотеки Go не работают</p><p>• Отладка может быть затруднена</p><p>• Экосистема меньше, чем у Gin</p><h2>Echo — чистый и продуманный фреймворк</h2><p><i></i><i>Сайт</i>→ <a href="https://echo.labstack.com/" rel="nofollow">https://echo.labstack.com/</a></p><p><i>GitHub</i> → <a href="https://github.com/labstack/echo" rel="nofollow">https://github.com/labstack/echo</a></p><p><b>Echo</b> — это сбалансированный фреймворк. Не слишком маленький, не слишком большой.</p><p><b>Скорость изучения:</b> 2–3 дня</p><p><b>Идея бенчмарка:</b> ~50–65 тыс. запросов в секунду</p><p><b>Преимущества</b> 👍</p><p>• Чистая структура</p><p>• Встроенная система проверки и промежуточное ПО</p><p>• Хорошая документация</p><p>• Развитая и стабильная</p><p><b>Компромиссы</b> 👎</p><p>• Экосистема меньше, чем у Gin</p><p>• Для некоторых расширенных функций требуются дополнительные библиотеки</p><p>• Не такой быстрый, как Fiber</p><h2>Chi — легковесный маршрутизатор для чистой архитектуры</h2><p><i>Сайт</i> → <a href="https://go-chi.io/" rel="nofollow">https://go-chi.io/</a></p><p><i>GitHub</i> → <a href="https://github.com/go-chi/chi" rel="nofollow">https://github.com/go-chi/chi</a></p><p><a href="https://github.com/go-chi/chi" rel="nofollow"></a><b>Chi</b> — это не полноценный фреймворк. Это маршрутизатор, который используется во многих серьезных микросервисах.</p><p>Время обучения: несколько часов</p><p>Идея бенчмарка: ~45–60 тыс. запросов в секунду</p><p>Преимущества 👍</p><p>• Очень легкий</p><p>• Использует стандартную сеть/http</p><p>• Идеально подходит для чистой архитектуры</p><p>• Простое тестирование</p><p>Компромиссы 👎</p><p>• Не подходит для новичков</p><p>• Все нужно создавать самостоятельно</p><p>• Нет встроенной объектно-реляционной модели или вспомогательных инструментов</p><p>• Медленное начало работы над небольшими проектами</p><h2>Beego — полноценный MVC-фреймворк</h2><p><i>Сайт</i> → <a href="https://beego.vip/" rel="nofollow">https://beego.vip/</a></p><p><i>GitHub</i> → <a href="https://github.com/beego/beego" rel="nofollow">https://github.com/beego/beego</a></p><p><b>Beego</b> похож на Django. В нем есть ORM, интерфейс командной строки, сессии, шаблоны.</p><p><b>Скорость освоения:</b> 1–2 недели</p><p><b>Идея бенчмарка:</b> ~20–40 тыс. запросов в секунду</p><p><b>Преимущества</b> 👍</p><p>• Все встроено</p><p>• Быстрая разработка монолитных приложений</p><p>• Хорошие инструменты командной строки</p><p>• Встроенная объектно-реляционная модель и шаблоны</p><p><b>Компромиссы</b> 👎</p><p>• Более низкая производительность</p><p>• Больше весит по сравнению с Gin или Fiber</p><p>• Сегодня сообщество меньше</p><p>• Не подходит для микросервисов</p><h2>Откуда взяты эти показатели производительности</h2><p>Приведенные выше цифры не случайны. Вы можете проверить их здесь:</p><p>👉 <a href="https://www.techempower.com/benchmarks/" rel="nofollow">https://www.techempower.com/benchmarks/</a></p><p>Это самый надежный бенчмарк в сфере бэкенд-разработки. Он тестирует фреймворки на одном и том же оборудовании с одинаковой нагрузкой.</p><p><b>Но помните</b> ⚠️</p><p>Реальная производительность зависит от:</p><p>• использования базы данных</p><p>• ведения журналов</p><p>• аутентификации</p><p>• размера полезной нагрузки</p><p>• TLS</p><p>• аппаратного обеспечения</p><p><i>Поэтому всегда проводите собственное тестирование.</i></p><h2>Мои рекомендации на 2026 год:</h2><p>- Если вы новичок → начните с Gin</p><p>- Если вам нужна максимальная производительность → попробуйте Fiber</p><p>- Если вам нужна сбалансированная структура → используйте Echo</p><p>- Если вам нравится чистая архитектура → используйте Chi</p><p>- Если вам нужен полноценный MVC → используйте Beego</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-02-20/854421c7-0f72-43e3-b742-2ca15d690417.webp" alt="" /></figure><p>Помните, что идеального фреймворка не существует. Выберите тот, который подходит вашей команде и проекту.</p><p><a href="https://dev.to/mahdi0shamlou/go-web-frameworks-comparison-2026-top-5-picks-gin-fiber-echo-chi-beego-mahdi-shamlo-57d4">Перевод статьи</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Обновление urllib3 доказало — DeprecationWarning мертв. Python-экосистема его просто не видит</title>
      <link>https://tproger.ru/news/obnovlenie-urllib3-dokazalo---deprecationwarning-mertv--python-ekosistema-ego-prosto-ne-vidit</link>
      <comments>https://tproger.ru/news/obnovlenie-urllib3-dokazalo---deprecationwarning-mertv--python-ekosistema-ego-prosto-ne-vidit?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/obnovlenie-urllib3-dokazalo---deprecationwarning-mertv--python-ekosistema-ego-prosto-ne-vidit</guid>
      <description><![CDATA[<p>urllib3 показал, что DeprecationWarning не работает: Python игнорирует устаревшие API, из-за чего ломаются даже крупные проекты</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/obnovlenie-urllib3-dokazalo---deprecationwarning-mertv--python-ekosistema-ego-prosto-ne-vidit">Обновление urllib3 доказало — DeprecationWarning мертв. Python-экосистема его просто не видит</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 12 Dec 2025 06:44:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разработчик <i>Сэт Ларсон</i> <a href="https://sethmlarson.dev/deprecations-via-warnings-dont-work-for-python-libraries">рассказал</a> о неожиданном эффекте, с которым столкнулась команда <b>urllib3</b> — одной из самых популярных библиотек в Python-экосистеме.</p><p>В версии <b>urllib3 2.6.0</b> разработчики удалили несколько API, которые считались проблемными еще с 2019 года и были официально помечены как устаревшие с 2022-го.</p><p>Все было сделано «по правилам»: предупреждения в документации, changelog, отдельные сообщения через DeprecationWarning при каждом использовании устаревших методов.</p><p>Казалось, что сигнал более чем <b>очевидный</b>. Но на практике это не сработало.</p><p>После релиза выяснилось, что удаление API стало сюрпризом даже для активно поддерживаемых проектов — зависимых библиотек и крупных клиентов.</p><h2>Почему предупреждения никто не заметил</h2><p>Ключевая проблема в том, что <b>DeprecationWarning в Python по умолчанию отключен</b>. Он находится в списке предупреждений, которые интерпретатор просто игнорирует, если разработчик явно не включил их показ.</p><p>В итоге ситуация выглядела так: API годами «кричал» о своей устарелости, но его никто не слышал.</p><p>Когда методы удалили, пользователи и сопровождающие популярных библиотек — Kubernetes-клиента, Fastly, Airflow — столкнулись с поломками и неожиданными ошибками.</p><p>По словам Ларсона, обратная связь была однозначной: разработчики не видели предупреждений и не понимали, что API вот-вот исчезнет. В результате команде urllib3 пришлось <b>срочно вернуть удаленные методы обратно</b> и выпустить исправляющий релиз.</p><h2>Предупреждение есть, эффекта нет</h2><p>Вывод автора жесткий: <b>DeprecationWarning в текущем виде не работает для Python-библиотек</b>. Он формально существует, но экосистема его просто не воспринимает как сигнал к действию.</p><p>Парадокс в том, что сам механизм warnings в Python удобный и встроенный прямо в язык. Но именно DeprecationWarning оказался слишком «вежливым» — он не мешает, не ломает код и потому остается незамеченным.</p><h2>Какие есть варианты выхода</h2><p>Ларсон рассматривает несколько возможных путей:</p><ul><li>создавать собственные предупреждения на базе UserWarning, которые не игнорируются по умолчанию;</li><li>отказаться от длительных периодов устаревания и делать более частые мажорные релизы по SemVer, как это принято в криптографических библиотеках;</li><li>менять культуру работы с предупреждениями в Python — но это долгий и малореалистичный путь.</li></ul><h2>Что это значит для экосистемы</h2><p>История с urllib3 показала: даже в зрелой и массовой экосистеме стандартные механизмы могут перестать выполнять свою функцию. DeprecationWarning задумывался как мягкий способ предупредить пользователей, но на практике он стал «мертвым письмом».</p><p>Для разработчиков библиотек это тревожный сигнал: если вы полагаетесь только на стандартные предупреждения, велика вероятность, что их просто никто не увидит — до тех пор, пока API не исчезнет и все не сломается.</p>]]></content:encoded>
    </item>
    <item>
      <title>11 топовых библиотек и фреймворков для Java в 2025 году</title>
      <link>https://tproger.ru/articles/11-topovyh-bibliotek-i-frejmvorkov-dlya-java-v-2025-godu</link>
      <comments>https://tproger.ru/articles/11-topovyh-bibliotek-i-frejmvorkov-dlya-java-v-2025-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/11-topovyh-bibliotek-i-frejmvorkov-dlya-java-v-2025-godu</guid>
      <description><![CDATA[<p>Топ библиотек и фреймворков Java 2025: Spring Boot, Hibernate, JUnit, Micronaut, Quarkus. Практические советы от Senior и Lead разработчиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/11-topovyh-bibliotek-i-frejmvorkov-dlya-java-v-2025-godu">11 топовых библиотек и фреймворков для Java в 2025 году</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>Fri, 17 Oct 2025 12:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Java-разработчики поделились списком инструментов, которые реально используют в работе. Подборка понравится:</p><ul><li><b>джунам</b>, которые выбирают первый стек технологий;</li><li><b>мидлам</b>, которые хотят сравнить свой опыт с коллегами;</li><li><b>сеньорам</b>, которые подбирают инструменты под новый проект.</li></ul><p>Вы узнаете — какие библиотеки и фреймворки выручают Java-разработчиков в 2025 году. <a href="https://www.linkedin.com/in/kazakov-i/">Игорь Казаков</a>, <a href="https://t.me/three_monitors">Константин Шибков</a> и <a href="http://@vad2604">Вадим Федосеев</a> рассказали, почему джависты предпочитают конкретный инструмент, для каких задач он удобен и на что обращать внимание при выборе.</p><h2>Чем фреймворк отличается от библиотеки?</h2><p><b>Библиотека </b>работает как набор инструментов.</p><p>Хотите парсить JSON? Подключаете Jackson. Нужно логирование? Добавляете SLF4J. Вы решаете, когда и как использовать код библиотеки.</p><p><b>Фреймворк </b>задаёт структуру приложения.</p><p>К примеру, <a href="https://tproger.ru/articles/pishem-java-veb-prilozhenie-na-sovremennom-steke-s-nulja-do-mikroservisnoj-arhitektury-chast-1">Spring Boot</a> — он запускает ваше приложение, создаёт контекст, инжектит зависимости. Хотите вы или нет, но придётся писать контроллеры, сервисы и репозитории по правилам фреймворка.</p><p>Некоторые фреймворки можно использовать как библиотеки. Например, Hibernate — с ним работают как с библиотекой для маппинга объектов или как с полноценным фреймворком с управлением сессиями и жизненным циклом. Выбор зависит от задачи и предпочтений команды.</p><h2>На что смотрят профи, когда выбирают Java-фреймворк?</h2><blockquote>Фреймворк должен сопровождаться хорошей документацией, без этого самый крутой функционал превращается в головную боль. На втором месте — стабильность. Очень расстраивает, когда сделал 90% фичи, а потом всё встало из-за нерешённого бага в библиотеке.</blockquote><p><i>Игорь Казаков, Lead Software Engineer (Java)</i>, при выборе инструмента оценивает:</p><ul><li>Производительность. Следующие преимущества будут неактуальными, если инструмент плохо оптимизирован.</li><li>Документацию. Её наличие экономит массу времени и новичкам, и продвинутым пользователям.</li><li>Поддержку. Важно, чтобы команда разработки инструмента следила за его актуальностью и совместимостью, держала вопросы безопасности на высоком уровне.</li><li>Сообщество. Даже с блестящей документацией важно комьюнити, готовое поделиться опытом.</li></ul><p>Отдельно он подчёркивает модульность и обратную совместимость — никто не хочет переписывать половину проекта после обновления версии.</p><p><i>Константин Шибков, Java-разработчик</i>, ждёт от фреймворка следующее:</p><blockquote>Жду от идеального фреймворка регулярные релизы с поддержкой новых технологий и версий языка, простое подключение модулей и понятный путь при миграции до новых мажорных версий. Идеальный фреймворк закрывает 80% типовых задач без бойлерплейта и лишней магии. Заложенная безопасность, готовая россыпь метрик его работы, обратная связь с командой разработки — это обязательные элементы отличного инструмента.</blockquote><h2>1. Spring Boot</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-10-17/e711de5d-2767-4915-ab26-23cea62d42c7.jpg" alt="" /></figure><p>Spring — это целая экосистема фреймворков. Spring Boot — один из его фреймворков. При работе с SB вы используете «стартеры», которые автоматически создают бины для компонентов Spring.</p><p>Фреймворк определяет, какие библиотеки вы используете, и самостоятельно их настраивает. Если подключите базу данных, Spring Boot создаст пул соединений, добавите веб-зависимость — получите встроенный Tomcat-сервер. Любую автоматическую настройку можно переопределить.</p><p>Spring Boot выбирают для разработки:</p><ul><li>REST API и микросервисов,</li><li>веб-приложений с шаблонизаторами,</li><li>консольных утилит и планировщиков задач,</li><li>интеграций с внешними системами.</li></ul><blockquote>Spring Boot — самый распространённый фундамент любого бекэнд приложения. В большинстве вакансий я вижу именно SB. Фреймворк отлично сочетает рабочие библиотеки, хорошо описан и даёт достаточно контроля.</blockquote><blockquote>Новичкам советую начать именно со Spring Boot. Даже если проект в итоге не потребует всего функционала, вы получите отличное понимание современных практик Java-разработки, а также сможете быстро написать приложение без копания в тоннах документации и бесконечных отладок кода.</blockquote><h2>2. Hibernate</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-10-17/48d60d2f-d161-485b-acf2-97b0705c74e4.jpg" alt="" /></figure><p>Фреймворк связывает Java-объекты с таблицами в базе данных. Вместо написания SQL-запросов вы работаете с обычными классами и методами.</p><blockquote>Hibernate — зрелая ORM, реализующая стандарт JPA. Используется в большинстве видимых мною проектов с реляционными БД. Снимает с разработчика много рутины и позволяет в достаточной мере оптимизировать работу с базами.</blockquote><p>Инструмент рекомендуют для разработки типичных бизнес-приложений с CRUD-операциями. Hibernate автоматически генерирует SQL, управляет транзакциями и кеширует данные. Вы пишете user.save() — фреймворк сам создаёт INSERT-запрос и выполняет его.</p><blockquote>Иногда складывается обманчивое впечатление, когда запуск простого приложения на фреймворке — это задача 5 минут. Hibernate достаточно прост для создания CRUD приложения. Но когда нужны сложные связи между таблицами, особые типы данных или непростые выборки данных, в этих случаях фреймворк начинает «давить» на разработчика ограничениями и неявными правилами, которые были скрыты в угоду удобства.</blockquote><h2>3. Jackson</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-10-17/432d1347-d269-4360-8964-d147957a9870.jpg" alt="" /></figure><p>Библиотека превращает Java-объекты в JSON и обратно. Работает через аннотации — вешаете @JsonProperty на поле, и Jackson понимает, как его назвать в JSON.</p><p>Нужно игнорировать какое-то поле? Добавили @JsonIgnore и забыли. При этом Jackson умеет работать даже без аннотаций — просто смотрит на геттеры и сеттеры вашего класса.</p><blockquote>Jackson стабилен, гибок и незаменим в работе с JSON.</blockquote><p>Базовый модуль работает с JSON, но можно подключить дополнительные: для XML, YAML, CSV. Один и тот же код сериализует объекты в разные форматы. Ещё Jackson дружит с Java 8+ фичами через отдельный модуль.</p><p>Библиотека пригодится, когда пишете REST API, работаете с конфигурационными файлами или интегрируетесь с внешними сервисами. <b>Spring Boot использует Jackson по умолчанию</b> — все @RestController автоматически отдают JSON через него.</p><h2>4. JUnit</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-10-17/8074073c-9c4b-4fb9-9a45-9a237cd0e176.jpg" alt="" /></figure><p>Больше 20 лет JUnit лидирует среди фреймворков для тестирования Java-приложений. Разработчики выбирают его за простоту и скорость написания тестов — достаточно поставить аннотацию @Test над методом, и он превращается в полноценный тест.</p><blockquote>JUnit — это модульные тесты через простую аннотационную модель, интеграция с IDE и средами сборки.</blockquote><p>Фреймворк выручает при рефакторинге старого кода. Написали тесты на существующую логику — можете менять реализацию. Тесты покажут, если что-то сломалось.</p><p>JUnit 5 добавил параметризованные тесты: один тестовый метод проверяет сразу десяток разных входных данных.</p><blockquote>К Spring Boot обязательно беру JUnit + AssertJ, Mockito и Testcontainers — вместе они обеспечивают реалистичные интеграционные тесты и быстрый фидбек в CI.</blockquote><h2>5. MapStruct</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-10-17/26bfd959-19c8-4f80-8bb3-2e7f17f51164.jpg" alt="" /></figure><p>Библиотека генерирует код маппинга между Java-объектами во время компиляции. Вместо ручного переписывания полей из одного объекта в другой, вы пишете простой интерфейс с аннотациями — MapStruct создаёт реализацию автоматически.</p><blockquote>Не представляю быструю реализацию мапперов без MapStruct. Библиотека избавляет от сотен строк шаблонного кода и ошибок при преобразовании DTO&lt; -&gt;Entity.</blockquote><blockquote>MapStruct изящно решает рутинную задачу преобразования объектов без магии и просадок производительности.</blockquote><h2>6. Lombok</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-10-17/21424b29-2056-4c29-8a55-f4678b9d651c.jpg" alt="" /></figure><p>Библиотека автоматически генерирует повторяющийся код через аннотации. Вместо того, чтобы писать геттеры, сеттеры, конструкторы и методы equals/hashCode руками, вы просто ставите аннотацию @Data над классом.</p><blockquote>Lombok экономит время: помогает писать код чище.</blockquote><p>Библиотека встраивается в процесс сборки и добавляет нужные методы в байт-код. Новые разработчики в команде могут удивиться, откуда берутся методы, которых нет в исходниках. Зато вы экономите время на рутине и концентрируетесь на бизнес-логике.</p><blockquote>Jackson и Lombok — стандарт для энтерпрайза, без них не обходится ни один проект. Lombok не идеален, но сильно сокращает шаблонный код и делает DTO более читаемыми, позволяет сосредоточиться на бизнес-логике.</blockquote><h2>7. Testcontainers</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-10-17/ae215712-368b-4f9c-9afc-b8f4ca0baa33.jpg" alt="" /></figure><p>Testcontainers решает классическую проблему: как протестировать код, который работает с базой данных или внешними сервисами? Библиотека запускает настоящие Docker-контейнеры прямо из тестов — PostgreSQL, Redis, Kafka, что угодно. Тесты получают реальное окружение вместо заглушек и моков.</p><p>Контейнеры живут ровно столько, сколько выполняются тесты. Запустил тест — поднялась база, прошёл тест — контейнер удалился.</p><p>Testcontainers выручает при:</p><ul><li>интеграционном тестировании с реальными базами данных,</li><li>проверке миграций и SQL-запросов,</li><li>тестировании микросервисов с брокерами сообщений,</li><li>работе с NoSQL-хранилищами.</li></ul><blockquote>JUnit 5 с Jupiter API — стандарт для тестирования. Особенно в связке с Testcontainers — это очень важный инструмент.</blockquote><h2>8. Micronaut</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-10-17/a588e1f2-1bfb-4398-b45e-9bb28caf5a82.jpg" alt="" /></figure><p>Фреймворк компилирует магию dependency injection на этапе сборки, а не во время запуска приложения. Ваш сервис стартует за 1-2 секунды вместо привычных 10-30 секунд у Spring Boot. Типичное приложение съедает 50-100 МБ вместо нескольких сотен.</p><p>Фреймворк рекомендуют в трёх случаях:</p><ul><li>Пишете микросервисы и устали ждать перезапуска при каждом изменении.</li><li>Разворачиваете приложения в AWS Lambda, Google Cloud Functions.</li><li>Платите за облачные ресурсы и хотите сэкономить на железе.</li></ul><p>Micronaut поддерживает реактивное программирование из коробки, дружит с GraalVM и компилируется в нативные образы. При этом синтаксис остаётся знакомым — те же аннотации @Controller, @Service, @Repository, что и в Spring.</p><h2>9. Quarkus</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-10-17/dd181c07-0c3d-4223-9d15-d6f4627ea7d7.jpg" alt="" /></figure><p>Фреймворк компилирует код в нативные исполняемые файлы через GraalVM. Ещё Quarkus работает с микросервисами и облачными платформами.</p><p>Quarkus потребляет в 10 раз меньше памяти по сравнению с традиционными Java-приложениями. Разработчики пишут обычный Java-код, а фреймворк самостоятельно оптимизирует его под контейнеры и Kubernetes.</p><blockquote>Некоторые компании используют Quarkus как более быструю и легкую альтернативу Spring Boot. Однако мне показалось, что вакансий с ним на рынке СНГ в разы меньше, чем на SB.</blockquote><blockquote>Quarkus и Micronaut хороши для небольших проектов и там, где важен быстрый старт приложения. Но пока они проигрывают Spring Boot в зрелости и глубине интеграций для большинства enterprise-сценариев.</blockquote><h2>10. MyBatis</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-10-17/ca5295e9-ed69-4ff3-a51c-769a1e6dcf60.jpg" alt="" /></figure><p>Фреймворк соединяет Java-объекты с БД через SQL-запросы. В отличие от Hibernate, где SQL генерируется автоматически, здесь вы пишете запросы сами и размещаете их в XML-файлах или аннотациях.</p><blockquote>MyBatis выбираю для маппинга запросов, когда планируется сложная бизнес-логика.</blockquote><p>Фреймворк не навязывает архитектуру приложения и легко встраивается в существующий код.</p><h2>11. Guava</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-10-17/81a806a8-8980-4fe0-a1ee-7cbc5ec3412c.jpg" alt="" /></figure><p>Библиотека Google Guava закрывает пробелы стандартной Java. Это набор утилит, который экономит время на рутине. Валидация параметров, работа с Optional до Java 8, удобные билдеры для коллекций — библиотека решает десятки мелких задач, с которыми сталкивается каждый разработчик.</p><blockquote>Новичкам всегда советую брать самые популярные инструменты, которыми пользуются большинство компаний. В Java не так много фреймворков, поэтому по умолчанию рекомендую Spring Boot, Hibernate, JUnit. Это тот опыт, который нужен для большинства вакансий. Изучив перечисленные инструменты, можно попробовать менее популярные инструменты и уже на личном опыте оценить их пользу.</blockquote><p>🙄<i> После публикации заметили, что забыли упомянуть один не менее популярный фреймворк. Делитесь догадками в комментариях — какой инструмент незаслуженно остался на страницах черновика?</i></p>]]></content:encoded>
    </item>
    <item>
      <title>SolidJS и Qwik: фронтенд нового поколения</title>
      <link>https://tproger.ru/articles/solidjs-i-qwik--frontend-novogo-pokoleniya</link>
      <comments>https://tproger.ru/articles/solidjs-i-qwik--frontend-novogo-pokoleniya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/solidjs-i-qwik--frontend-novogo-pokoleniya</guid>
      <description><![CDATA[<p>Обзор SolidJS и Qwik — плюсы и минусы фреймворков. Сравнение SolidJS и Qwik, практические рекомендации по переходу и тенденция отказа от React/Vue.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/solidjs-i-qwik--frontend-novogo-pokoleniya">SolidJS и Qwik: фронтенд нового поколения</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 03 Sep 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>Помните, когда впервые попробовали React/Vue после JS и jQuery?</b> Тот момент, когда всё встало на свои места, и вы поняли — вот оно, будущее фронтенда. В 2025 году разработчики <a href="https://www.reddit.com/r/solidjs/comments/1m4hlzj/im_really_impressed_with_solid/">испытывают</a> похожие чувства с SolidJS и Qwik.</p><h2>Последний рубеж React и Vue</h2><p><b>Согласны, что VDOM превратился в бюрократическую прослойку?</b> Изменили состояние в одном месте — получите полный пересчёт дерева компонентов. Фреймворки заставляют загружать всё сразу, тащат багаж служебного кода. И пока этот код не загрузится, пользователь смотрит на белый экран.</p><p>SSR <a href="https://tproger.ru/translations/rendering-on-the-web">ускоряет</a> загрузку страницы: сервер рендерит HTML, пользователь видит контент и пытается с ним взаимодействовать. Но пока JavaScript не загрузится, ничего не заработает.</p><p>Потом JS наконец подгружается и начинает гидратацию. По сути, он заново создаёт в памяти то же дерево компонентов, которое сервер уже отрендерил в HTML. Выполняется двойная работа. Кстати, в это время пользователь тыкает неработающие кнопки — дотерпит ли он до полной загрузки?</p><p>Системные проблемы не исправить очередным хуком или новой версией фреймворка, поэтому появление SolidJS и Qwik — было вопросом времени.</p><blockquote>Поиск новых решений — здоровый признак развития фронтенда. В конце концов, и Vue был создан потому, что Эвану Ю не хватало облегченной альтернативы AngularJS. Большая тройка фреймворков решает огромный спектр задач, имеет колоссальную поддержку сообщества, но их нельзя назвать идеальным инструментом на все случаи жизни.</blockquote><h2>Обзор SolidJS</h2><p>SolidJS во многом похож на React. Самое интересное — его подход к обновлению интерфейса:</p><ul><li><b>Отсутствие виртуального DOM</b> — Solid напрямую обновляет только те DOM-узлы, которые действительно изменились.</li><li><b>Компоненты как функции инициализации</b> — каждый компонент вызывается только один раз для настройки реактивности.</li><li><b>Сигналы вместо хуков</b> — состояние управляется через createSignal(), который возвращает геттер/сеттер пару.</li></ul><p>Например, когда срабатывает счётчик, Solid не перерисовывает весь компонент. Он точечно обновляет только текст внутри &lt;p&gt;, где используется count():</p><h3>Преимущества SolidJS</h3><p>👍 <b>Производительность и размер бандла</b></p><p>Благодаря отсутствию виртуального DOM и мелкозернистым обновлениям, приложения <a href="https://www.reddit.com/r/reactjs/comments/tsx8hw/solidjs_devex_compared_to_react/?tl=ru">работают</a> быстрее аналогов на React.</p><p>👍 <b>Простота освоения</b></p><p>Синтаксис SolidJS похож на React. Функциональные компоненты, JSX, концепции вроде Suspense и Error Boundaries — всё это есть в Solid. Изучение основ <a href="https://www.reddit.com/r/solidjs/comments/1len1pf/comment/myi8qci/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button">займёт</a> 1-2 дня, если есть опыт с MobX/effector/RxJS.</p><p>👍 <b>Стабильность</b></p><p>Фреймворк находится на стабильной версии 1.x. Это означает отсутствие кардинальных изменений API, в отличие, например, от ситуации со Svelte, где сосуществуют версии 4 и 5 с разными подходами.</p><p>👍 <b>Совместимость с React</b></p><p>SolidJS совместим с экосистемой React. Можно переиспользовать дизайн-системы и компоненты в legacy-приложениях.</p><p>👍 <b>Удобное управление состоянием</b></p><p>Функционал сигналов и сторов покрывают 90% потребностей в управлении состоянием без необходимости подключать внешние библиотеки.</p><h3>Минусы SolidJS</h3><p>👎 <b>Ограниченная экосистема</b></p><p>Выбор готовых компонентов и библиотек значительно меньше, чем у React. Команды тратят больше времени на создание компонентов с нуля: тяжко при работе с таблицами, гридами, формами, валидацией.</p><p>👎 <b>Кривая обучения</b></p><p>Несмотря на знакомый синтаксис, модель реактивности SolidJS отличается от React. Разработчики должны усвоить следующие принципы:</p><ul><li>Избегать условных конструкций непосредственно в компонентах.</li><li>Не деструктурировать пропсы и сторы, чтобы сохранить реактивность.</li><li>Не использовать асинхронный код внутри createEffect.</li></ul><p>👎 <b>Проблемы с инструментарием</b></p><p>Возникают сложности с настройкой компилятора в нестандартных окружениях — монорепозиториях, при запуске тестов или интеграции с другими инструментами. DevTools не дотягивает до аналога у React.</p><p>👎 <b>SolidStart всё ещё развивается</b></p><p>SSR-решение SolidStart пока не достигло зрелости Next.js или Nuxt. Разработчики <a href="https://www.reddit.com/r/solidjs/comments/1len1pf/comment/myml5tt/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button">сообщают</a> о проблемах с гидратацией и других сложностях при работе с серверным рендерингом.</p><h2>Обзор Qwik</h2><p>Qwik — это проект Мишко Хевери (создателя Angular). Идея фреймворка заключается в возможности возобновить работу приложения на клиенте без повторного выполнения кода, который уже был выполнен на сервере.</p><p>В Qwik радикально решили проблему гидратации — полностью отказались от неё. Время до интерактивности (TTI) падает в разы. Пользователь может кликать на кнопки сразу после загрузки HTML, без ожидания разогрева всего приложения.</p><p>Qwik автоматически разбивает код на мелкие чанки и загружает их только при необходимости. Символ $ в коде указывает на границы ленивой загрузки.</p><h3>Плюсы Qwik</h3><p>👍 <b>Мгновенная загрузка</b></p><p>Практически нулевой JavaScript при первоначальной загрузке, следовательно отличные показатели Core Web Vitals.</p><p>👍 <b>Автоматическая оптимизация</b></p><p>Оптимизация на уровне компилятора, умная предзагрузка критических ресурсов. Не нужно думать о разделении кода — Qwik делает это автоматически.</p><p>👍 <b>Знакомый синтаксис</b></p><p>👍 <b>Спасибо за SEO</b></p><p>Быстрая загрузка улучшает ранжирование за счёт полноценного SSR из коробки.</p><h3>Минусы Qwik</h3><p>👎 <b>Молодая экосистема</b></p><p>Ограниченное количество библиотек, мало готовых решений и компонентов. Небольшое сообщество разработчиков (если сравнивать с React/Vue).</p><p>👎 <b>Кривая обучения</b></p><p>Придётся изучать новые концепции. Из-за ленивой загрузки усложняется отладка.</p><blockquote>Qwik — это радикально новая ментальная модель. У фреймворка высокий порог входа: вас ждёт переобучение команды и сложности ручной оптимизации. Чтобы Qwik работал идеально, разработчик должен вручную указывать, что можно лениво загружать, а что нет.</blockquote><p>👎 <b>Сложность интеграции</b></p><p>Трудно интегрировать существующие React/Vue компоненты и ограниченная поддержка сторонних библиотек. Скорее всего, придётся с нуля переписывать код существующего проекта.</p><h2>Экосистема и готовность к продакшену</h2><p>Если сравнивать с React, то экосистема — самое слабое место обоих фреймворков.</p><p>SolidJS имеет SolidStart — метафреймворк с роутингом, SSR и серверными функциями. <a href="https://docs.solidjs.com/quick-start">Документация</a> качественная, сообщество активное. Большинство React-библиотек можно адаптировать без особых проблем, для популярных UI-китов есть готовые порты.</p><p>Qwik развивается в связке с <a href="https://qwik.dev/docs/qwikcity/">Qwik City</a>, который покрывает типовые задачи веб-разработки. <a href="https://www.builder.io/m/qwik">Builder.io</a> активно инвестирует в экосистему, регулярно выходят обновления и новые интеграции.</p><p>Риски есть, но они управляемые. Меньший размер сообщества означает меньше готовых решений и ответов на Stack Overflow. Если не боитесь изучать новое, то выигрыш в производительности перевесит неудобства.</p><h2>Сравнение SolidJS и Qwik</h2><p>SolidJS повышает производительность обновлений. Если данные меняются часто и непредсказуемо — графики, мониторинги, редакторы — Solid даст максимальную отзывчивость.</p><p>Qwik повышает производительность загрузки. Если бизнес зависит от первого впечатления, Qwik обеспечит мгновенный старт.</p><p><b>Медиа</b>, <b>блоги</b> с жёсткими требованиями к TTFB/TTI/INP будут лучше работать на Qwik. Пользователи смогут читать и скроллить без задержки. Интерактив добавляется дозированно — это лучшая стартовая стоимость.</p><p><b>E-commerce</b>, <b>каталоги </b>с SEO и карточками рекомендуется разрабатывать на Qwik. Особенно если на главной тяжёлые модули, а клиенты приходят с поисковиков. Вы выигрываете у конкурентов буквально на первом взаимодействии.</p><p><b>Сложный SPA</b> или <b>дашборд </b>с живыми виджетами и апдейтами будет лучше работать на SolidJS. Точечная реактивность упростит жизнь и снизит цену апдейтов. Solid сияет в проектах, где происходят сотни мелких изменений в секунду.</p><blockquote>Solid хорош для аналогов десктопных приложений в браузере — Figma, Miro. Здесь приложение загружается один раз, а потом работает долго и должно быть максимально отзывчивым. Также Solid будет хорош там, где важна плавность анимаций.</blockquote><p><b>Лэндинги</b>, <b>мобильные приложения</b>, <b>визитки</b> — здесь Solid даст сверхбыструю реактивность и облегчит сборку.</p><p>Оба фреймворка умеют SSR/SSG и стриминг. Solid снижает стоимость обновлений, Qwik — стоимость старта. Для LCP/TTI/INP в контентных сценариях выигрывает Qwik. Для интенсивных интерактивных сценариев Solid удерживает FPS и снижает CPU.</p><p>Оба дружат с серверными платформами. SolidStart имеет адаптеры для Vercel/Netlify, Qwik City — тоже.</p><blockquote>Выбирайте Solid.js, если вы создаете сервис, куда пользователь заходит надолго, и ему важна отзывчивость после загрузки. Выбирайте Qwik, если вы создаете сайт, куда пользователь приходит за контентом, и важно показать ему этот контент мгновенно.</blockquote><p>Немного выводов:</p><ul><li>Solidjs быстрее Qwik при рендеринге. Qwik быстрее Solidjs при загрузке страниц.</li><li>У Solidjs документация лучше, чем у Qwik.</li><li>С нуля код на Qwik писать проще и быстрее, чем на SolidJS.</li><li>Typescript в SolidJS может быть головной болью, в Qwik об этом можно не беспокоиться.</li></ul><h2>Практические рекомендации по переходу на SolidJS и Qwik</h2><ol><li><b>Начните с аудита текущих проблем</b>. Посмотрите метрики сайта: сколько времени занимает гидратация? Тормозят ли обновления интерфейса? Где именно проблема — на старте или в процессе работы?</li><li><b>Выберите изолированную часть проекта</b>. Возьмите один виджет, одну страницу, один компонент и реализуйте его на новом фреймворке. Измерьте разницу в производительности и удобстве разработки.</li><li><b>Если проблема в медленной загрузке</b> — попробуйте Qwik. Соберите прототип лендинга или каталога, включите SSG с resumability и протестируйте на медленном соединении.</li><li><b>Если проблема в тормозах интерфейса</b> — попробуйте Solid. Перепишите самый страдальный компонент с частыми обновлениями, уберите мемоизации и посмотрите на результат.</li></ol><p>Оба фреймворка собираются через Vite, имеют TypeScript из коробки и хорошую интеграцию с популярными инструментами. Стоимость эксперимента низкая, а потенциальная выгода высокая.</p><h2>Тенденция отказа от React/Vue</h2><blockquote>Компании и разработчики не столько отказываются от популярных решений, сколько перестают использовать их для всех задач подряд. Раньше выбора практически не было, и эти фреймворки были молотком, для которого любая задача — гвоздь.</blockquote><p><i>А вы что думаете? Готовы попробовать модные фреймворки SolidJS и Qwik в следующем проекте?</i></p>]]></content:encoded>
    </item>
    <item>
      <title>ТОП 60 лучших инструментов для разработки ПО в 2025</title>
      <link>https://tproger.ru/articles/top-60-luchwih-instrumentov-dlya-razrabotki-po-v-2025</link>
      <comments>https://tproger.ru/articles/top-60-luchwih-instrumentov-dlya-razrabotki-po-v-2025?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Владислав Устинов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-60-luchwih-instrumentov-dlya-razrabotki-po-v-2025</guid>
      <description><![CDATA[<p>ТОП лучших инструментов для разработки ПО в 2025. Показываем новые и хорошо забытые старые инструменты для программистов. Рассматриваем преимущества и основные нюансы ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-60-luchwih-instrumentov-dlya-razrabotki-po-v-2025">ТОП 60 лучших инструментов для разработки ПО в 2025</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Для продвинутых]]></category>
      <category><![CDATA[Финтех]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Low-code]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 27 Mar 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Лучшие IDE и редакторы кода</h2><h3>Visual Studio Code. Лидер среди редакторов кода</h3><p>Бесплатный, <a href="https://code.visualstudio.com/">универсальный IDE</a> от Microsoft. Поддерживает все языки программирования и Git. Главная особенность — тысячи расширений. Заточен под разработку программных продуктов небольшой и средней сложности, отлично подходит для начинающих разработчиков.</p><h3>JetBrains IntelliJ IDEA / WebStorm / PyCharm — лучшие IDE для Java, JS, Python</h3><p>Несколько продуктов в виде <a href="https://jetbrains.com/">профессиональных IDE</a> для конкретных языков: Java, JavaScript, Python. Здесь есть умный анализ кода, который находит ошибки для запуска, много конкретных плюшек для Java, JavaScript, Python. Отлично подходит для больших проектов и тех, кто занимается командной разработкой.</p><h4>Neovim — для любителей Vim с мощными плагинами</h4><p>Текстовый <a href="https://neovim.io/">редактор</a> на базе VIM для тех, кто любит минимализм, но при этом не готов жертвовать функциональностью. Работает с терминалом на любых устройствах. У него открытый исходный код, никаких платных версий. Neovim очень гибкий в плане кастомизации, поддерживается большим сообществом, для него есть много расширений.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/cace6d8b-58f5-4eee-aa09-e9821c07d545.png" alt="" /><figcaption>Сравнительная таблица редакторов кода</figcaption></figure><h2>Системы контроля версий</h2><h3>Git + GitHub / GitLab / Bitbucket</h3><p>Git — бесплатный инструмент, который помогает следить за изменениями в коде и работать над проектом вместе с командой. <a href="https://github.com/">GitHub</a> добавляет удобную автоматизацию (Actions) и популярен для открытых проектов. <a href="https://gitlab.com/">GitLab</a> хорош для закрытых задач благодаря встроенным инструментам и приватности. Bitbucket легко дружит с JIRA для командной работы. Базовые версии бесплатны, платные — от 3 до 19$ в месяц. GitHub выбирают для опенсорса, GitLab — для секретных проектов, а <a href="https://bitbucket.org/">Bitbucket</a> — для тех, кто уже использует JIRA.</p><h3>Git Kraken</h3><p>Удобный <a href="https://gitkraken.com/">интерфейс</a> для работы с Git, где все изменения показаны в виде дерева. Помогает разбираться с конфликтами в коде и видеть историю. Бесплатен для личных проектов, командная версия — 5$ в месяц. Отличный выбор для новичков и тех, кто любит визуальные подсказки.</p><h3>Лучшие CLI-утилиты для Git</h3><p><a href="https://git-scm.com/">Набор помощников</a>, которые упрощают разработку с Git через терминал. Например, git-extras работает с рутинными задачами, tig показывает историю изменений, а git-flow помогает организовать ветки кода. Всё бесплатное и работает без интернета. Подходит тем, кто хочет ускорить работу и не боится командной строки.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/7586e996-ef0c-4dfe-b9ef-7a4fcef9dc23.jpg" alt="" /><figcaption>Сравнительная таблица систем контроля версий</figcaption></figure><h2>Инструменты для CI/CD</h2><h3>GitHub Actions, GitLab CI/CD — встроенные пайплайны</h3><p><a href="https://github.com/features/actions">GitHub Actions</a> помогает автоматизировать сборку и запуск кода — например, чтобы тесты проходили сами после каждого изменения. Бесплатно до 2 тыс. минут для открытых проектов. <a href="https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/">GitLab CI/CD</a> встроен в GitLab и делает то же самое с 400 бесплатными минутами, плюс больше контроля над процессом. Оба работают прямо с вашим кодом, без лишних программ. GitHub Actions проще для новичков, GitLab CI/CD — для тех, кому важна приватность. Отлично для команд, которые уже сидят на этих платформах.</p><h3>Jenkins, CircleCI, Travis CI — обзор популярных решений</h3><p><a href="https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/">Jenkins </a>— бесплатный инструмент с открытым кодом, где можно настроить всё под себя. Нужен свой сервер, зато без ограничений. <a href="https://circleci.com/">CircleCI</a> ускоряет автоматизацию, но стоит от 15$ в месяц. <a href="https://travis-ci.org/">Travis CI</a> дружит с GitHub: бесплатно для открытых проектов, от 69$ для закрытых. Jenkins берут для сложных задач, CircleCI — для скорости, а Travis — для простых опенсорс-проектов.</p><h3>ArgoCD и FluxCD — CI/CD для Kubernetes</h3><p>GitOps-инструменты для Kubernetes. <a href="https://argoproj.github.io/argo-cd/">ArgoCD</a> синхронизирует код с кластерами через GUI и поддерживает откаты ошибок. <a href="https://fluxcd.io/">FluxCD</a> легче настраивается и автоматически обновляет образы. Оба бесплатны и работают с Helm. ArgoCD предпочтительнее для команд с опытом в Kubernetes, FluxCD — для небольших проектов с минимальными настройками.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/498113e7-48ec-4dc5-98bc-d5f1264160d8.png" alt="" /><figcaption>Сравнительная таблица инструментов для CI/CD</figcaption></figure><h2>Средства тестирования</h2><h3>Selenium, Cypress — тестирование фронтенда</h3><p><a href="https://selenium.dev/">Selenium</a> — инструмент для автоматизации браузеров через WebDriver. Поддерживает все языки программирования, но требует дополнительных библиотек. <a href="https://cypress.io/">Cypress</a> — современное решение на JavaScript с упором на простоту и стабильность тестов. Выполняет тесты в том же цикле событий, что и приложение. Selenium универсальнее, Cypress быстрее и интуитивнее для фронтенд-разработчиков.</p><h3>JUnit, PyTest, Mocha — тестирование кода</h3><p>Набор инструментов для тестирования кода. <a href="https://junit.org/">JUnit</a> — популярный выбор для Java, особенно в больших компаниях, где используют Spring; он простой и надёжный для старта. <a href="https://pytest.org/">PyTest</a> делает тестирование на Python удобным и понятным, без лишних сложностей. <a href="https://mochajs.org/">Mocha</a> (часто с Chai) подходит для JavaScript: гибкий, лёгкий, и отлично работает с проектами на фронтенде или бэкенде. Все три встраиваются в автоматизацию и хороши для новичков, которые хотят проверять код без головной боли.</p><h3>Postman, Newman — API-тестирование</h3><p><a href="https://postman.com/">Postman</a> — удобный инструмент, который начинался как способ тестировать API, а теперь помогает создавать запросы, проверять их и даже автоматизировать работу. Newman — его версия для командной строки, чтобы запускать тесты без интерфейса, например, вместе с другими автоматическими задачами. Оба бесплатны для базовых вещей, а командные функции стоят от 12$ в месяц. Postman подойдёт новичкам для ручной проверки API или создания прототипов, а Newman — для автоматического тестирования API в проекте.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/9f2f8ca0-a2f1-4062-bddd-7c4b0763c3a3.png" alt="" /><figcaption>Сравнительная таблица средств тестирования</figcaption></figure><h2>DevOps и контейнеризация</h2><h3>Docker и Podman — контейнеры в 2025 году</h3><p><a href="https://docker.com/">Docker</a> — стандарт контейнеризации в 2025 году. Упаковывает код с зависимостями в переносимые образы. Бесплатен для локальной работы, командная разработка обойдется в 5$ в месяц. Ограничен в РФ из-за санкций. <a href="https://podman.io/">Podman</a> — безопасная альтернатива без центрального домена, полностью совместим с Docker-командами. Поддерживает rootless-режим и работу с systemd, но имеет меньше обучающих материалов.</p><h3>Kubernetes — главный инструмент оркестрации</h3><p><a href="https://kubernetes.io/">Платформа </a>для оркестрации контейнеров, незаменима для микросервисной архитектуры. Бесплатная, работает локально через Minikube или в облаке (от 10$). Управляет десятками контейнеров через YAML-манифесты, обеспечивает масштабирование и обновление без простоев. Требует опыта и мощного железа, но остаётся лидером для продакшн-окружений.</p><h3>Terraform и Pulumi — инфраструктура как код</h3><p><a href="https://terraform.io/">Terraform</a> — бесплатное программное обеспечение, помогает настроить инфраструктуру (серверы, сети, кластеры) через код. Работает локально без платы, а облачная версия стоит от 20$. Подходит для любых облаков и нравится тем, кто хочет держать всё под контролем. <a href="https://pulumi.com/">Pulumi</a> делает то же самое, но вместо специального языка использует привычные JavaScript, TypeScript или Python. Удобнее для тех, кто уже умеет программировать, хотя сообщество поменьше. Оба хороши для новичков, которые хотят проще управлять инфраструктурой.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/6c143f5f-f054-4d81-a69f-62e3ab183eb2.png" alt="" /><figcaption>Сравнительная таблица инструментов для DevOps и контейнеризации</figcaption></figure><h2>Базы данных и инструменты для работы с ними</h2><h3>PostgreSQL, MySQL, MongoDB — что выбрать?</h3><p><a href="https://postgresql.org/">PostgreSQL</a> — мощная бесплатная база данных с открытым кодом, которая подходит для анализа и обработки данных в сложных проектах. Она работает с разными типами данных, вроде SQL и JSON, и не берёт денег за локальное использование (облако — от 10$). У неё есть полезные дополнения, которые помогают справляться с большими нагрузками. Отличный выбор для бэкенда или аналитики, где запросы посложнее.</p><p><a href="https://mysql.com/">MySQL</a> — простая и быстрая база данных, которая хорошо подходит для небольших и средних проектов. Есть бесплатная версия. Легко работает с языками вроде PHP, Python и Node.js, а начать с нее может любой новичок. У MySQL огромное сообщество, где можно найти готовые ответы. По сравнению с PostgreSQL, слабее в сложных задачах, но для старта — отличный выбор.</p><p><a href="https://mongodb.com/">MongoDB</a> — бесплатная NoSQL-база данных, которая хранит данные в виде JSON-документов, а не таблиц. Облачная версия Atlas стоит от 9$. Она гибкая — не нужно перестраивать структуру, если что-то меняется и запускается одной командой. По сравнению с SQL-базами хуже справляется с транзакциями, зато идеально подходит для быстрых прототипов и стартапов, где требования часто меняются.</p><h3>Prisma и TypeORM — работа с БД в коде</h3><p><a href="https://prisma.io/">Prisma</a> —  удобный инструмент для работы с базами данных в JavaScript и TypeScript. Поддерживает PostgreSQL, MySQL и MongoDB, помогая быстро писать код для бэкенда. Автодополнение упрощает жизнь, но на сложных задачах может немного тормозить. Отличный выбор для небольших команд, которые делают бэкенд на Node.js.</p><p><a href="https://typeorm.io/">TypeORM</a> — бесплатный инструмент с открытым кодом для работы с базами данных в JavaScript и TypeScript. Легко дружит с NestJS и Express, помогая связать код с базой. Подходит для средних проектов, где требования могут меняться. Документация не всегда полная, а некоторые функции работают не идеально, но для гибких задач на JS/TS — хороший выбор.</p><h3>DBeaver, TablePlus — удобные GUI-клиенты</h3><p><a href="https://dbeaver.io/">DBeaver</a> — удобный интерфейс для работы с более чем 80 базами данных. Бесплатная версия (Community) доступна всем, платная (Enterprise) — от 11$ в месяц. Есть редактор для запросов с подсказками, возможность видеть структуру базы и выгружать данные. Программа ресурсоёмкая и не работает в РФ без средств обхода. Подходит разработчикам и аналитикам, которые не хотят использовать командную строку.</p><p><a href="https://tableplus.com/">TablePlus</a> — лёгкий и удобный интерфейс для работы с более чем 10 базами данных. Бесплатная версия позволяет подключаться к двум базам, а полная стоит 59$ единоразово. Интерфейс простой, данные можно выгружать, а старт занимает пару минут. В России для покупки платной версии нужны посредники. Подходит для тех, кто хочет быстро подключиться к базам без лишних наворотов.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/9c0927d4-8ef2-4f05-b63d-3ca5cf30b007.png" alt="" /><figcaption>Сравнительная таблица инструментов для работы с базами данных</figcaption></figure><h2>Фреймворки и библиотеки</h2><h3>React, Vue, Angular, Svelte — выбор фронтенд-разработчиков</h3><p><a href="https://reactjs.org/">React</a> — бесплатная библиотека для создания динамичных интерфейсов, например, сайтов, которые быстро реагируют на действия пользователя. Она с открытым кодом и включает в себя популярные инструменты вроде Redux и Next.js. У неё огромное сообщество, что даёт гибкость, но новичкам может быть непросто разобраться. Подходит для больших проектов, где команда готова потратить время на обучение.</p><p><a href="https://angular.io/">Angular</a> — фронтенд-фреймворк от Google для создания продуктов со сложными интерактивными интерфейсами. Бесплатный, с открытым кодом, идёт с TypeScript из коробки, что упрощает работу с большими проектами. Встроенные инструменты вроде Angular CLI ускоряют старт, а двусторонняя привязка данных (two-way binding) экономит время на синхронизации. Сообщество большое, документация подробная, но новичкам может быть тяжело из-за обилия концепций. Подходит для тех, кто работает в команде и создает корпоративные приложения, где важны структура и масштабируемость.</p><p><a href="https://vuejs.org/">Vue</a> — фронтенд-фреймворк с простым и понятным кодом, который помогает быстро создавать интерфейсы. Он лёгкий (всего 20 КБ), включает удобные инструменты вроде Vuex, Pinia и Nuxt для разных задач. Начать с ним проще, чем с React, хотя библиотек поменьше. Отлично подходит для быстрой разработки веб-продуктов.</p><p><a href="https://svelte.dev/">Svelte</a> — современный фреймворк, который превращает код в быстрый JavaScript. Он простой, не требует лишних сложностей и работает быстрее многих других. Есть SvelteKit для дополнительных возможностей. Код получается компактным, но сообщество и экосистема пока небольшие. Подходит для стартапов и приложений, где важна скорость.</p><h3>Node.js, Deno, Bun — что актуально в бэкенде</h3><p><a href="https://nodejs.org/">Node.js</a> — классика серверного JavaScript. Он быстро обрабатывает запросы и имеет огромный набор готовых решений через NPM, плюс Express для создания API. С его помощью разрабатывают приложения, где всё обновляется в реальном времени, например, чаты. Экосистема большая, но для задач с высокой нагрузкой процессор может быть слабоват. Отличный выбор для API и реалтайм-проектов.</p><p><a href="https://deno.land/">Deno</a> — безопасная альтернатива Node.js. TypeScript из коробки, изолированный доступ, встроенный пакетный менеджер, Web API. Безопасность по умолчанию, но меньше экосистема. Для современного бэкенда с акцентом на безопасность.</p><p><a href="https://deno.land/">Bun</a> — сверхбыстрый JavaScript-рантайм, в 3—5 раз быстрее чем аналогичные продукты от конкурентов. Встроенные пакетный менеджер и тест-раннер, поддержка TS и NPM. Скоростной, но молодой проект с багами. Для экспериментов и микросервисов.</p><h3>Spring Boot, Django, FastAPI — лучшие серверные фреймворки</h3><p><a href="https://spring.io/projects/spring-boot">Spring Boot</a> — java-фреймворк для масштабируемых проектов. Автоконфигурация, REST API, JPA, Security, встроенный Tomcat. Spring Cloud для микросервисов. Промышленный стандарт, но требует знания Java и ресурсов. Подходит тем, кто создает enterprise-приложения.</p><p><a href="https://djangoproject.com/">Django</a> — мощный Python-фреймворк, который даёт всё нужное для разработки: от работы с базами до защиты и создания API. Он ускоряет процесс и делает проекты безопасными. Подходит для сайтов и приложений на Python, но для маленьких независимых сервисов может быть сложноват. Хороший выбор для быстрого старта.</p><p><a href="https://fastapi.tiangolo.com/">FastAPI</a> — современный Python-фреймворк для разработки быстрых API. Он простой, автоматически генерирует документацию к коду и работает шустро. Подходит для задач, требующих высокой производительности, и поддерживает асинхронные запросы, что делает его подходящим для работы с реальным временем (real-time). Админки тут нет, а для работы с реалтайм-функциями лучше иметь небольшой опыт. Отличный выбор для лёгких API и микросервисов на Python.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-03-28/9079cb50-8bf6-4539-9278-78a527c0e152.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-03-28/b6d908c7-27a6-4f7d-8a0c-484739dc954a.png" alt="" /></figure><h2>Приложения с инструментами для командной работы</h2><h4>Slack, Discord, Mattermost — коммуникация в командах</h4><p><a href="https://slack.com/">Slack</a> — стандарт для командного общения. Бесплатно можно чатиться с историей сообщений за 90 дней, а платная версия стоит от 7$ в месяц за пользователя. Есть каналы для разных проектов и удобная связь с GitHub, JIRA или Google Drive. Настройка лёгкая, можно даже общаться с клиентами, но в России платные функции недоступны без обхода блокировок. Подходит командам, которые любят чаты и хотят всё держать в одном месте.</p><p><a href="https://discord.com/">Discord</a> — платформа для общения и сообществ. Базовое использование бесплатно, Nitro от $10/месяц. Текстовые и голосовые каналы, боты для модерации, стриминг и шеринг экрана. Отличное качество звука, но мало деловых интеграций. Доступен в виде веб-версии и приложения для всех основных платформ. Подходит для удалённых команд с частыми созвонами.</p><p><a href="https://mattermost.com/">Mattermost</a> — бесплатный мессенджер с открытым кодом для безопасного общения. Можно установить на свой сервер, облачная версия — от 10$ в месяц. Похож на Slack, но данные хранятся у вас, и есть плагины для связи с другими сервисами. Настройка требует усилий, зато приватность на высоте. Для компаний, которым важно держать всё под контролем.</p><h3>Notion, Confluence, Obsidian — управление документацией</h3><p>Notion — гибкий инструмент для хранения документации. Бесплатно до 5 гостей, безлимит — от 8$ в месяц. Можно делать заметки, таблицы и доски задач в одном месте. Удобно для стартапов, работает на всех устройствах, но большие проекты могут тормозить. Есть версии приложения под Android, Windows и IOS. Подходит для команд, которым нужна вся информация в одном месте.</p><p><a href="https://atlassian.com/software/confluence">Confluence</a> — корпоративная платформа для документации от Atlassian, стоит от 6$ в месяц за пользователя, бесплатной версии нет. Хорошо дружит с JIRA и помогает организовать записи по проектам. В России оплата через посредников. Для больших команд с чёткими процессами.</p><p><a href="https://obsidian.md/">Obsidian</a> — бесплатное ПО для заметок. Работает локально, синхронизация — от 4$ в месяц, но тратить на неё средства не обязательно, можно настроить через сторонние плагины. Данные хранятся у вас, есть плагины для допфункций. Не подходит для командной работы. Хорош для личных записей и аналитики.</p><h3>JIRA, ClickUp, Trello — управление задачами</h3><p><a href="https://atlassian.com/software/jira">JIRA</a> — Инструмент для управления задачами, стоит от 7$ в месяц за пользователя, бесплатной версии нет. Подходит для планирования с досками и отчётами, но новичкам может быть сложно. Для профессиональных команд, которые работают по Agile.</p><p><a href="https://clickup.com/">ClickUp</a> — универсальный сервис для выполнения задач с бесплатной версией до 100 МБ, полная — от 7$ в месяц. Есть доски, списки и автоматизация. Прост вначале, но функций так много, что можно запутаться. Для команд, которым нужен гибкий инструмент без сложностей JIRA.</p><p><a href="https://trello.com/">Trello </a>— простая система для задач с досками. Бесплатно до 10 досок, дальше — от 5$ в месяц с автоматизацией. Перетаскивайте карточки от «Сделать» к «Готово». Легко и наглядно, но для больших процессов не подходит. Для маленьких команд и простых проектов.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/a6fe1500-5047-4ecb-b2ac-132232f06b06.png" alt="" /><figcaption>Сравнительная таблица сервисов для организации командной работы ч1</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/80e997f8-01d0-4764-bbf2-275469101b42.png" alt="" /><figcaption>Сравнительная таблица сервисов для организации командной работы ч2</figcaption></figure><h2>Новые и перспективные инструменты для разработки</h2><h3>AI-кодогенераторы: GitHub Copilot, Codeium, ChatGPT API, Cursor AI, Claude Code, Claude API, Cloud Code от Google</h3><p>GitHub Copilot — ИИ-помощник, который подсказывает код и проверяет его. Бесплатно для студентов и открытых проектов, иначе — 10$ в месяц. Работает с кучей языков в популярных редакторах, ускоряя работу. Не работает в РФ. Подходит всем, кто хочет писать код быстрее.</p><p><a href="https://codeium.com/">Codeium</a> — бесплатная альтернатива Copilot, где безопасность на первом месте. Для бизнеса — от 15$ в месяц. Помогает с кодом и тестами, данные обрабатываются локально. Отличный выбор для команд, которым важна конфиденциальность.</p><p><a href="https://openai.com/api/">ChatGPT API</a> — инструмент от OpenAI для создания своих ИИ-помощников. Стоит недорого, доступен в России и понимает много языков. Может писать код, объяснять ошибки, но нужно уметь его подключать. Для тех, кто готов копаться в настройках.</p><p><a href="https://cursor.sh/">Cursor AI</a> — редактор кода с ИИ, похожий на VS Code, но умнее. Подсказывает код, исправляет ошибки и ускоряет работу. Под капотом разные ИИ-продукты от Open AI, Google, Antropic. Простой и быстрый, идеален для новичков, которые хотят писать код без лишней головной боли.</p><p><a href="https://www.anthropic.com/claude">Claude Code</a> — терминальный помощник от Anthropic для автоматизации кодирования. Необычный подход к разработке в сравнении с конкурентами. Работает через командную строку, ищет код, правит файлы и пушит в GitHub. Бесплатен в preview, безопасен. Подходит тем, кто хочет ускорить рутину и не боится терминала.</p><p><a href="https://www.anthropic.com/api">Claude API (3.7 Sonnet)</a> — лучший ИИ для кодинга по мнению автора статьи. Версия 3.7 Sonnet пишет код, чинит баги и думает над задачами. Во многих сценариях превосходит Chat GPT. Стоит от 3$ за миллион токенов, не работает в России. Для тех, кто хочет мощный ИИ в своём проекте, но готов разобраться с подключением.</p><p><a href="https://cloud.google.com/code">Cloud Code от Google</a> —  плагин для VS Code от Google, чтобы писать код для их облака. Помогает с настройкой серверов и приложений, вроде Kubernetes. Бесплатен с аккаунтом Google Cloud. Подходит новичкам, которые начинают с облачных проектов и хотят всё делать в одном месте.</p><h2>Инструменты Low-Code / No-Code для ускорения разработки</h2><p><a href="https://www.bettyblocks.com/">Betty Blocks</a> — Low-Code платформа для создания своего программного продукта. Всё делается через визуальный редактор с готовыми шаблонами, плюс есть упор на безопасность. Её используют большие компании вроде Clifford Chance. Подходит для сложных задач, стоит от 1050$ в месяц, не очень дружелюбна для новичков. В основном для корпораций с хорошим бюджетом.</p><p><a href="https://bubble.io/">Bubble</a> — No-Code инструмент для разработки веб-приложений. Можно перетаскивать элементы, использовать шаблоны. Есть бесплатный тариф. Легко начать, но большие проекты могут тормозить. Отличный выбор для стартапов и одиночек, которым нужен прототип.</p><p><a href="https://zapier.com/interfaces">Zapier</a> —  No-Code для автоматизации. Соединяет 7000+ приложений через простой конструктор, стоит от 19.99$ в месяц. Удобно для экономии времени, но дополнительные настройки могут поднять цену. Для тех, кто хочет объединить разные сервисы.</p><p><a href="https://softr.io/">Softr</a> —  No-Code платформа с привязкой к Airtable. Шаблоны простые, настройка быстрая, цена от 49$ в месяц. Дружелюбный для новичков, есть поддержка, но сложные приложения не потянет. Подходит фаундерам и менеджерам без технических навыков.</p><p><a href="https://www.glideapps.com/">Glide</a> — No-Code для разработки приложений из таблиц, вроде CRM или дашбордов. Стоит от 69$ в месяц, быстро собирается. Удобно для малого бизнеса, но для продвинутых задач слабоват. Хорош для простых нужд.</p><p><a href="https://www.caspio.com/">Caspio </a>— Low-Code с ИИ, в котором создают облачные приложения. Большой акцент на защите данных, цена от 100$ за пользователя в месяц. Подходит для больших систем, но стартапам будет не по карману. Для профессионалов, которым важна безопасность.</p><p><a href="https://www.uipath.com/">UiPath RPA</a> — Low-Code для автоматизации рутины. Упрощает разработку благодаря ИИ. Цена индивидуальная, зависит от запроса. Хорошо подходит для ниш со здравоохранением и финансами. Настройка сложная и недешёвая. Понадобится отраслям, где много повторяющихся задач.</p><p><a href="https://www.outsystems.com/">OutSystems</a> — Low-Code для корпоративных проектов. Поддерживает визуальную разработку ПО для крупных систем. Цена индивидуальная. Для разработчиков и больших компаний.</p><h2>Лучшие новые технологии, которые могут выстрелить в 2025 году</h2><h3>BlueQubit</h3><p><a href="https://bluequbit.io/">Квантовый инструмент</a> для разработчиков. Даёт доступ к вычислениям через облако, помогает решать задачи вроде шифрования или моделирования, с которыми обычные компьютеры не справляются. Дорогой и сложный в освоении. Подходит исследователям и компаниям с большими бюджетами.</p><h4>Блокчейн: Polkadot, Solana, Truffle</h4><p>Платформы для приложений без центра управления. <a href="https://polkadot.network/">Polkadot</a> и <a href="https://solana.com/">Solana</a> делают их быстрыми и масштабируемыми, <a href="https://www.trufflesuite.com/">Truffle</a> упрощает работу с кодом. Безопасно и прозрачно для финансов или логистики, но нужен опыт. Хорош для финтеха и стартапов, которые смотрят на Web3.</p><h4>Edge-вычисления: Apache Edgent, Azure IoT Edge</h4><p>Обработка данных прямо там, где они появляются. <a href="https://github.com/apache/incubator-retired-edgent">Edgent</a> — лёгкий и простой, <a href="https://azure.microsoft.com/en-us/services/iot-edge/">Azure IoT Edge</a> — для умных устройств. Быстро работает, например, для беспилотных машин, но настройка требует времени. Для разработчиков IoT и небольших сервисов.</p><h4>IoT: Arduino, Raspberry Pi</h4><p>Популярные платформы для разработки умных устройств. Они поддерживают современные технологии для связи (например, Wi-Fi, Bluetooth) и обеспечивают базовые механизмы защиты данных. <a href="https://www.arduino.cc/">Arduino</a> и <a href="https://www.raspberrypi.org/">Raspberry Pi</a> доступны по цене, гибки в настройке и отлично подходят для проектов умного дома. Однако для сложных систем с высокой нагрузкой они могут быть недостаточно мощными. Эти платформы идеальны для энтузиастов, хоббистов и небольших IoT-проектов.</p><h4>Кибербезопасность: SAST, DAST</h4><p>Инструменты для защиты кода. <a href="https://www.sonarqube.org/">SAST</a> ищет ошибки до запуска, <a href="https://www.zaproxy.org/">DAST</a> — во время работы с помощью ИИ. Спасают от атак и нужны в продакшене, но требуют частых обновлений. Для всех, кто работает с данными.</p><p>Вот такой топ лучших инструментов получился, а что вы добавили бы в эту подборку? Или может быть убрали бы из неё? Давайте составим свою подборку в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Основы SwiftUI для iOS-разработчиков</title>
      <link>https://tproger.ru/articles/osnovy-swiftui-dlya-ios-razrabotchikov</link>
      <comments>https://tproger.ru/articles/osnovy-swiftui-dlya-ios-razrabotchikov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/osnovy-swiftui-dlya-ios-razrabotchikov</guid>
      <description><![CDATA[<p>Что такое SwiftUI. Показываем преимущества и особенности работы с SwiftUI для iOS-разработчиков. Рассматриваем пошаговую инструкцию и основные нюансы ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/osnovy-swiftui-dlya-ios-razrabotchikov">Основы SwiftUI для iOS-разработчиков</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 13 Mar 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>SwiftUI — фреймворк на языке <a href="https://tproger.ru/articles/what-swift-is-good-for">Swift</a> для декларативной верстки интерфейсов в экосистеме Apple. <a href="https://tproger.ru/translations/imperative-declarative-programming-concepts">Декларативный подход</a> заключается в описании результата (что получить). Его противоположность — императивный подход (как получить).</p><p><b>Императивный подход</b>:</p><p><i>«Встань. Подойди к выключателю. Нажми на нижнюю часть клавиши. Возвращайся обратно и садись».</i></p><p><b>Декларативный подход</b>:</p><p><i>«Выключи свет».</i></p><p>Вот так фреймворк сокращает сроки разработки под iOS.</p><p>До SwiftUI использовали набор UIKit. Он устраивал разработчиков, но создание UI-элементов занимало много времени. В новых проектах на SwiftUI продолжают обращаться к набору компонентов — фреймворк пока не покрывает всех возможностей UIKit.</p><p>В статье рассказываем про SwiftUI для начинающих iOS-разработчиков. Вы узнаете, как создавать интерфейс, работать с состоянием объектов, анимировать приложение и как интегрировать UIKit в проект.</p><h2>Начало работы со SwiftUI</h2><p>Приложения под iOS пишут в <a href="https://developer.apple.com/xcode/">IDE Xcode</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-03-11/152d8b54-b313-4d7b-b956-9e0323e745d0.jpg" alt="" /><figcaption>Выбор нового проекта в Xcode</figcaption></figure><p>Создаем новый проект для платформы iOS, выбираем приложение «App». На следующей странице нужно придумать название проекта, ввести идентификатор (в качестве «заглушки» можно написать com.example).</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-03-11/eb9e8052-d9d7-44b1-9ad8-0e20105e3499.jpg" alt="" /><figcaption>Настройка нового проекта в Xcode</figcaption></figure><p>Далее убедимся, что в поле «Interface» выбран SwiftUI и язык программирования — Swift.</p><p>После заполнения информации о проекте Xcode создаст базовую структуру приложения.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-03-11/7e6be5c7-00c5-4d49-8d76-12434196f2c8.jpg" alt="" /><figcaption>Так выглядит приложение в Xcode, которое по умолчанию создается с новым проектом SwiftUI</figcaption></figure><p>Основной файл проекта, с которым будем работать, называется ContentView.swift. По умолчанию Xcode создает в нем шаблон приложения «Hello, world!».</p><p>Чтобы изменить текст, нужно обновить строку внутри Text, и в превью справа отобразится обновленный экран. Симулятор iOS-устройства запускать не обязательно.</p><p>Компоненты в SwiftUI должны соответствовать протоколу View. Он определяет, как выглядят и ведут себя элементы интерфейса.</p><p>По правилам протокола View, разработчик должен реализовать одно обязательное свойство — body. Оно описывает содержимое и иерархию представления на экране.</p><h2>Компонентный подход</h2><p>При разработке на SwiftUI лучше разбивать интерфейс на небольшие части — <b>компоненты</b>. Из них строится дизайн приложения. Например, кнопка, список, карточка с информацией — все это можно представить как отдельные компоненты.</p><p>Преимущество подхода в том, что можно создавать небольшие части приложения и  переиспользовать их. Каждый компонент отвечает за небольшой кусочек работы и имеет свои настройки.</p><p>Например, одна кнопка может быть синей, а другая — красной, но обе работают одинаково.</p><h3>Основные компоненты iOS SwiftUI</h3><p>Чтобы добавить на экран приложения текст, нужно создать компонент Text, для картинки — Image, для кнопки — Button и т. д.</p><h4>Текст</h4><p>Элемент поддерживает модификаторы для стилизации. Можно изменить шрифт, цвет или добавить отступы:</p><h4>Картинки</h4><p>Изображения в SwiftUI подключаются из ассетов проекта или системных иконок SF Symbols:</p><p>С помощью модификаторов можно изменять размеры, пропорции и стили изображения.</p><h4>Кнопки</h4><p>С кнопками сложнее: нужно определить текст в качестве содержимого и замыкание с действием.</p><h4>Поле ввода и переключатели</h4><p>Требуют привязки текста свойством @State:</p><p>TextField можно дополнить плейсхолдером, который исчезает при вводе текста. К нему также применимы модификаторы изменения стиля и обработки событий.</p><p>Переключатели тоже работают через привязку к @State:</p><h4>Списки</h4><p>Бывают статическими и динамическими.</p><p>Если планируете добавлять новые элементы в список, выбирайте динамическую структуру:</p><h3>Создание пользовательского интерфейса</h3><p>Чтобы расставлять элементы по своим местам, в SwiftUI применяют <b>контейнеры</b>:</p><ul><li>HStack,</li><li>VStack,</li><li>ZStack.</li></ul><p>HStack располагает элементы горизонтально, VStack — вертикально, а ZStack накладывает компоненты друг на друга.</p><p>Собрать полноценное приложение получится, только если комбинировать контейнеры:</p><h3>Работа с состоянием</h3><p>Создадим приложение-счетчик. Его значение будет отображаться на основном экране, а изменяться на другом.</p><p>Локальное состояние хранится в <b>@State</b>. На первом экране для отображения и изменения счетчика его достаточно:</p><p>Передадим значение переменной count во вложенное представление с помощью <b>@Binding</b>. Теперь дочерний экран сможет напрямую менять состояние основного:</p><p>Если функция с более сложной логикой нужна на нескольких экранах, лучше использовать <b>@StateObject</b>.</p><p>Глобальное состояние, доступное любому экрану, нужно прописывать в <b>@EnvironmentObject</b>. Например, настройку темы:</p><h3>Анимации и взаимодействие</h3><p>Первым рассмотрим метод <b>withAnimation</b> на примере простой задачи: нужно скрывать и показывать элемент. С анимацией это выглядит так:</p><p>Плавное появление и исчезновение элементов удобнее реализовывать через модификатор <b>.transition</b>. Еще можно применять встроенные анимации через <b>.animation</b>. Они автоматически привязываются к изменениям состояния.</p><p>Поведение компонентов SwiftUI можно настроить на жесты пользователя. Например, перемещение объекта через <b>DragGesture</b> и реакции на нажатия через <b>TapGesture</b>.</p><h3>Работа с навигацией</h3><p>Переходы между экранами в приложении реализуют через <b>NavigationView</b> и <b>NavigationLink</b>.</p><p>Контейнер NavigationView добавляет кнопку для перехода и навигационный заголовок:</p><p>Здесь каждая строка в списке — это интерактивная ссылка, а destination — содержимое следующего экрана.</p><p>Если нужно переключаться между вкладками, то лучше использовать <b>TabView</b>. Это как папки на рабочем столе: каждая вкладка ведет к отдельному разделу:</p><p>Каждая вкладка содержит свой экран. TabItem задает иконку из библиотеки SF Symbols и текст для таба.</p><h2>Интеграция с UIKit</h2><p>SwiftUI отлично справляется с созданием интерфейсов, но иногда возникает ситуация, когда нужного элемента в нем просто нет. Тогда разработчики обращаются к <b>UIViewRepresentable</b>. Он «оборачивает» UIKit-компонент и делает его частью SwiftUI-интерфейса.</p><p>Например, так можно добавить индикатор активности из набора UIKit:</p><p>Теперь этот индикатор можно встроить в SwiftUI:</p><p>Обратная задача: внедрить SwiftUI в существующий UIKit-проект. Здесь поможет класс UIHostingController. Он берет View из SwiftUI и превращает его в контроллер, который можно добавить в UIKit. Класс <b>UIHostingController</b> используют, чтобы постепенно адаптировать старый код.</p><p>Мы познакомились с базовыми концепциями фреймворка и разобрали примеры простых элементов. Посмотрели на компонентный подход, работу с состоянием, анимациями, навигацией и интеграцией с UIKit. Но это лишь верхушка айсберга. Чтобы стать iOS-разработчиком, нужно знать нюансы SwiftUI, экспериментировать с реальными проектами, пробовать связанные инструменты.</p><p>Если хотите узнать, какие фреймворки и библиотеки учить, чтобы быстрее найти первую работу, <a href="https://tproger.ru/articles/uchimsya-ios-razrabotke--chto-dolzhen-znat-lyuboj-razrab-v-2024-godu">читайте ответы middle и senior разработчиков</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Тим О’Райли: ИИ не убьёт программирование, но полностью его изменит</title>
      <link>https://tproger.ru/news/tim-o-rajli--ii-ne-ubyot-programmirovanie--no-polnostyu-ego-izmenit</link>
      <comments>https://tproger.ru/news/tim-o-rajli--ii-ne-ubyot-programmirovanie--no-polnostyu-ego-izmenit?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/tim-o-rajli--ii-ne-ubyot-programmirovanie--no-polnostyu-ego-izmenit</guid>
      <description><![CDATA[<p>Тим О’Райли: ИИ не заменит программистов, но изменит их работу. Кодинг станет абстрактнее, а ценность инженеров вырастет</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/tim-o-rajli--ii-ne-ubyot-programmirovanie--no-polnostyu-ego-izmenit">Тим О’Райли: ИИ не убьёт программирование, но полностью его изменит</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[PHP]]></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, 13 Feb 2025 02:06:22 GMT</pubDate>
      <content:encoded><![CDATA[<p>Тим О’Райли, создатель O’Reilly Media и идеолог <b>Веб 2.0</b>, <a href="https://www.oreilly.com/radar/the-end-of-programming-as-we-know-it/">выступил</a> с развернутым мнением о будущем программирования.</p><p>Он уверен: <b>разработчики никуда не исчезнут</b>, но их работа <b>станет совсем другой</b>.</p><p>Сегодня индустрия переживает <b>очередную революцию</b> — теперь под давлением <b>ИИ генераторов кода</b>. Многие задаются вопросом: <b>не заменит ли искусственный интеллект программистов?</b></p><p>О’Райли уверен: <b>нет</b>. Но привычный подход к разработке уйдет в прошлое.</p><h2>Как менялась работа программистов?</h2><p>Технологии программирования <b>развиваются волнами</b>.</p><ul><li><b>В 1940-х</b> инженеры вручную соединяли физические цепи, чтобы задать алгоритм.</li><li><b>В 1950-х</b> появились первые языки низкого уровня — разработчики писали код <b>на ассемблере</b>.</li><li><b>В 1960-х–1980-х</b> на смену им пришли языки вроде <b>Fortran, COBOL, C</b> — более абстрактные, но всё ещё сложные.</li><li><b>В 1990-х</b> программисты начали работать с <b>интерпретируемыми языками</b>, такими как JavaScript, Python, PHP.</li><li><b>В 2000-х</b> мир покорили <b>фреймворки и библиотеки</b>, упрощающие работу с кодом.</li><li><b>В 2010-х</b> активно развивалась <b>облачная инфраструктура</b> и <b>интернет-экосистемы API</b>.</li></ul><p>Каждый раз разработчики боялись, что <b>их навыки станут ненужными</b>. Но вместо этого <b>количество программистов только росло</b>.</p><p>Сейчас мы <b>вступаем в эпоху ИИ-помощников</b>. И снова слышны разговоры: <b>«Теперь код будут писать боты!»</b></p><h2>Чем ИИ отличается от прошлых революций?</h2><p>Ранее автоматизация <b>убирала рутину, но не сам процесс кодинга</b>. Например, программистам больше не нужно вручную управлять памятью или писать драйверы для каждой новой мышки.</p><p>Сейчас же ИИ предлагает <b>принципиально новый уровень абстракции</b>:</p><ul><li>Можно <b>не писать код</b>, а просто описывать задачу словами.</li><li>Можно получать <b>прототипы за секунды</b>, а не вручную разрабатывать архитектуру.</li><li>Можно делегировать <b>генерацию, тестирование и даже исправление багов</b>.</li></ul><p>Но здесь есть важный нюанс: <b>ИИ пока не заменяет инженеров, а лишь ускоряет их работу</b>.</p><blockquote>ИИ делает программистов в 10 раз продуктивнее. Но если возможностей для программирования станет в 20 раз больше, нам всё равно понадобятся люди</blockquote><h2>Что ждёт программистов дальше?</h2><p>О’Райли считает, что программисты <b>не исчезнут</b>, но их работа изменится.</p><ul><li><b>Новые роли.</b> Разработчики будут не столько писать код, сколько <b>управлять ИИ-системами</b>, став своего рода менеджерами цифровых сотрудников.</li><li><b>Другие навыки.</b> Важно будет не просто знать язык программирования, а <b>уметь правильно ставить задачи ИИ</b>.</li><li><b>Рост требований.</b> Простой код смогут писать и новички с помощью нейросетей, но <b>ценность приобретут архитекторы и инженеры высокоуровневых систем</b>.</li></ul><blockquote>Если ИИ автоматизирует 70% рутинных задач, то останется 30%, с которыми справятся только профессионалы</blockquote><h2>Вывод: программирование не умирает, а эволюционирует</h2><p>ИИ не сделает людей ненужными. Он <b>размоет границы между программистами и пользователями</b>, даст новые инструменты, но потребность в инженерах <b>никуда не денется</b>.</p><p>О’Райли считает, что мы сейчас <b>в начале новой технологической эры</b>. И те, кто <b>быстро адаптируются</b>, будут в выигрыше.</p>]]></content:encoded>
    </item>
    <item>
      <title>10 библиотек JavaScript, которые можно забыть в 2025 году</title>
      <link>https://tproger.ru/articles/10-bibliotek-javascript--kotorye-mozhno-zabyt-v-2025-godu</link>
      <comments>https://tproger.ru/articles/10-bibliotek-javascript--kotorye-mozhno-zabyt-v-2025-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/10-bibliotek-javascript--kotorye-mozhno-zabyt-v-2025-godu</guid>
      <description><![CDATA[<p>Неактуальные библиотеки и фреймворки JavaScript, о которых можно забыть в 2025 году. Более современные и производительные аналоги. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/10-bibliotek-javascript--kotorye-mozhno-zabyt-v-2025-godu">10 библиотек JavaScript, которые можно забыть в 2025 году</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[jQuery]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 05 Feb 2025 10:01:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Многие разработчики, как и люди других профессий, придерживаются консервативных взглядов. Они считают, что если технология старая, но еще работает, нет смысла менять ее на новую. Такие программисты продолжают пользоваться неактуальными библиотеками для написания кода, не обращая внимания на современные тренды.</p><p>Это в корне неправильный подход. Устаревшие фреймворки и библиотеки не отвечают текущим требованиям к производительности, масштабируемости и адаптивности. Они не успевают за новейшими парадигмами и функциями, что неизбежно отражается на качестве создаваемых продуктов.</p><p>В нашем обзоре — 10 библиотек JavaScript, которым в 2025 году пора сказать «До свидания». Для каждого продукта из антирейтинга мы подобрали альтернативные варианты.</p><h2>Фреймворки, которые утратили актуальность в 2025 году</h2><h3>jQuery</h3><p>Это одна из первых библиотек JavaScript, которая из-за инерционного мышления все еще входит в некоторые списки самых популярных инструментов разработки. Пользователи ценят jQuery за кроссбраузерную поддержку, лаконичный синтаксис и простые алгоритмы взаимодействия с DOM.</p><p>Почему прогеры продолжают пользоваться библиотекой? Чисто технически jQuery присутствует во множестве сайтов, сделанных 10-15 лет назад (тогда этот код стал альтернативой VanillaJS). Библиотека создавалась, чтобы сделать язык более гибким и удобным в разработке.</p><p>Сегодня многие преимущества jQuery утратили свою актуальность — например, создание кода, работающего на всех браузерах. Теперь платформы стандартизированы, что делает кроссбраузерные решения библиотеки ненужными.</p><p>Кроме того, современные нативные API JavaScript серьезно улучшились — для подавляющего большинства задач, которые раньше выполнял jQuery, достаточно ванильного JS. Новейшие методики обеспечивают все манипуляции с DOM и взаимодействие веб -страницы с сервером (AJAX-запросы), поэтому необходимость в библиотеке отпадает.</p><p>В 2025 пришло время отпустить jQuery — его применение сейчас может привести к замедлению загрузки веб-страниц и приложений, а уж этого бы нам точно не хотелось.</p><h4>Чем заменить</h4><p>Нативного API JavaScript в ряде случаев будет достаточно для разработки, а для всех остальных ситуаций есть новые версии высокопроизводительных фреймворков React, Vue и Angular.</p><h3>Lodash</h3><p>Когда-то эта универсальная библиотека утилит считалась почти обязательной для каждого проекта на JavaScript. Здесь есть String — функция преобразования для обрезки и переноса в верхний регистр; Object — утилита для  расширения и слияния; Array — для сжатия и изменения; многие другие фичи, включая глубокое клонирование объектов и манипуляции с массивами данных.</p><p>Библиотека Lodash помогала программистам писать более компактный, чистый и простой в обслуживании и поддержке код, конвертировать данные в различные форматы, выполнять математические операции. В настоящее для большинства таких операций утилиты не требуются.</p><h4>Чем заменить</h4><p>Сегодня многие функции, представленные в Lodash, есть в новой спецификации JavaScript E56. Оператор spread (…), методы Array (map, reduce, filter и прочие) решают те же задачи, которые некогда решал Lodash. В число главных недостатков библиотеки входит также ее большой вес — импорт всего одной функции увеличивает накладные расходы проекта.</p><h3>Moment.js</h3><p>Долгое время эта библиотека была основным инструментом для работы с датами. Ее сильными сторонами были:</p><ul><li>способность анализировать, проверять, актуализировать и отображать текущие метки времени;</li><li>работать с календарными датами;</li><li>определять длительность различных процессов;</li><li>поддерживать часовые пояса и т.д.</li></ul><p>Сейчас эта библиотека стала слишком тяжелой — даже в мини-формате она занимает 66 КБ, что излишне нагружает устройства, отражается на производительности и быстрой работе UX-функций. Есть более легкие пакеты с теми же функциями.</p><h4>Чем заменить</h4><p>Современная альтернатива — date-fns — набор функций для работы с датами на JavaScript, который не входит в библиотеки и работает независимо. Предусматривает модульный импорт — вы можете взять из пакета только то, что требуется для работы, тем самым снижая нагрузку.</p><p>Ещё один вариант — Luxon — новая библиотека для работы с датами, созданная командой Moment. Этот инструмент изначально позиционировался как замена предыдущему продукту компании как более мощное, современное и удобное средство. Здесь работа с часовыми поясами реализована без дополнительных расширений, применяется современный подход к написанию кода.</p><p>Кроме того, JavaScript Temporal API позволяет работать с датами и временем напрямую, не используя сторонние библиотеки. Поэтому любое из указанных трех решений делает применение Moment.js избыточным и ненужным.</p><h3>RequireJS</h3><p>Долгое время библиотека была для JavaScript-разработчиков основным инструментом для управления зависимостями. Технология асинхронного определения модулей (AMD) обеспечивала эффективную асинхронную загрузку файлов. Модульный принцип не использовался в других библиотеках и инструментах, что создавало ощущение эксклюзива.</p><p>Это был самый эффективный способ взаимодействия с зависимостями, особенно ценный в работе с большими приложениями. Совместимость со всеми популярными браузерами, включая Firefox, Safari, Chrome, Opera, а также веб-продуктами на Node, была еще одной сильной стороной библиотеки.</p><p>С появлением модулей в ES6 RequireJS утратила статус уникального инструмента. В новой спецификации JavaScript реализован нативный способ определения и импорта модулей. Такой подход делает синтаксис более интуитивным, ускоряет и упрощает разработку.</p><p>При этом RequireJS в сравнении с более свежими аналогами слишком сложен в настройке и применении. Он требует от прогеров ручной настройки загрузчика и управления путями зависимостей, что повышает риск ошибок и отнимает кучу времени. Современные загрузчики более расторопные и автоматизированные.</p><h4>Чем заменить</h4><p>Помимо ES6, с модулями успешно работает сборщик Webpack, компилируя их в единый файл. Это еще более эффективный инструмент, совместимый с TypeScript и Node.js. При запуске программа обрабатывает модули, выстраивает граф зависимостей между ними и на его основе генерирует общий файл.</p><p>У этого бендлера есть дополнительные продвинутые возможности — например, разделение кода, горячая замена модулей в реальном времени, а также операция tree shaking (встряхивание дерева), то есть удаление мертвого кода из продукта. Webpack делает работу с зависимостями более рациональной и полностью заменяет тяжелый и устаревший RequireJS.</p><h3>Backbone.js</h3><p>Одна из первых библиотек JS (выпущена в 2010), основанная на шаблоне проектирования Model-View-Controller. Предназначена, в основном, для разработки пользовательских интерфейсов и структурирования веб-приложений.</p><p>Некогда  Backbone.js считался легковесным и функциональным инструментом, который упрощал работу с кодом, улучшал синхронизацию приложения с сервером и позволял создавать эффективный клиентский код.</p><p>Со временем у фреймворка стали проявляться ограничения. Например, отсутствие механизма двусторонней привязки данных. Такая опция есть у многих современных библиотек, поэтому разработчикам не приходится при каждом обновлении или изменении модели вручную настраивать DOM и множить шаблонный код. Все прогеры в курсе, что ручные операции существенно повышают риск ошибок.</p><p>Кроме того, в Backbone.js нет собственного шаблонизатора, что вынуждает применять другие библиотеки типа Handlebars.js.</p><h4>Чем заменить</h4><p>Достойных вариантов замены достаточно. Это React с его архитектурой, основанной на компонентах, и виртуальным DOM. Это и Vue.js с двусторонней привязкой данных и гибкой архитектурой. Это также универсальный Angular с теми же функциями.</p><h3>Modernizr</h3><p>Библиотека обнаружения особенностей HTML5 и CSS3 в браузере пользователя. В свое время была крайне полезной и обеспечивала работу приложений в разных браузерах.</p><p>С появлением транпислеров (программ, которые переводят части кода с одного языка программирования на другой) необходимость в Modernizr существенно снизилась. Более того, использование этого инструмента чревато увеличением расходов на приложения. Разработчикам приходится задействовать множество тестов на обнаружение функций, что замедляет загрузку.</p><h4>Чем заменить</h4><p>Компилятор (транспилер) JavaScript Babel успешно решает задачу преобразования современного кода в формат, совместимый со старыми версиями браузеров. Кроме того, Babel — полифил, то есть способен заполнять пробелы в скрипте с целью добавления новых функций.</p><h3>MooTools</h3><p>Объектно-ориентированный фреймворк, некогда популярный и безальтернативный. MooTools содержит комплект утилит для работы с DOM, событиями и AJAX-запросами. Сильными сторонами библиотеки был объектно-ориентированный подход и лаконичный синтаксис. Разрабы, предпочитающие писать элегантный и ясный код, были от MooTools в восторге.</p><p>Однако постепенно все преимущества фреймворка нивелировались — сообщество так и не дождалось существенных обновлений и перешло на более прогрессивные инструменты. В сравнении с ними MooTools занимает много места, что негативно сказывается на приложениях, где важна производительность (а сегодня она важна везде).</p><h4>Чем заменить</h4><p>В современной версии Vanilla JavaScript реализована большая часть функций, представленных в MooTools, в том числе методы для работы с DOM и для обработки событий.</p><p>Что касается полноценных библиотек, то MooTools без проблем заменят React или Vue.js. Это простые в освоении и использовании прогрессивные фреймворки для разработки пользовательских интерфейсов.</p><h3>Script.aculo.us</h3><p>Библиотека визуальных эффектов и методов управления пользовательским интерфейсом. Была популярна у разработчиков, работающих с анимацией и интерактивными опциями в приложениях. Сильные стороны Script.aculo.us — простота в применении, обширный ассортимент возможностей — перетаскивание, сортировка, слайдеры и т.д.</p><p>Отсутствие значительных обновлений и большой вес были факторами, которые ослабили позиции Script.aculo.us в сообществе. Если в 2025 году в мире еще остались программисты, которые пользуются этой библиотекой, им точно пора осваивать новые инструменты.</p><h4>Чем заменить</h4><p>GreenSock — более мощная, быстрая и универсальная библиотека анимации с огромным выбором эффектов и элементов управления. Работает на стороне клиента и сервера, совместима со всеми браузерами.</p><p>Anime.js — еще один гибкий и адаптивный инструмент. Подходит новичкам, поскольку его просто настраивать и легко использовать.</p><h3>Underscore.js</h3><p>Библиотека утилит, которая годами удерживала лидирующие позиции в разработке на  JavaScript. Эксперты называли ее «швейцарским ножом разработчика» за большой выбор функций и массу возможностей.</p><p>Однако с этим инструментом произошло то же, что и другими библиотеками утилит. Большинство функций, которые были представлены в Underscore.js, теперь реализованы в ES6.</p><h4>Чем заменить</h4><p>Новая спецификация JavaScript E56+ поддерживает методы функционального программирования, позволяет манипулировать объектами и массивами данных. Таким образом, все функции Underscore.js доступны непосредственно на JavaScript без всяких посредников. Вывод — переносите код на E56+, он станет чище и проще в поддержке.</p><h3>Axios</h3><p>Библиотека для отправки запросов HTTP из браузера или Node.js. Поддерживает множество методов запросов (Get, Put, Delete и другие), загрузку и отправку файлов. Сильные стороны — удобный интерфейс, поддержка Promise API (способ организации асинхронного кода).</p><p>Несмотря на популярность Axios и его относительную свежесть, эта библиотека стремительно теряет позиции, поскольку появились новые инструменты с более расширенным функционалом.</p><h4>Чем заменить</h4><p>Fetch API превосходит конкурента по простоте и гибкости. Он выполняет те же задачи, но оснащен дополнительными функциями — потоковой передачей, отменой запросов, улучшенной обработкой ошибок.</p><p>Замена устаревших библиотек новыми — не только погоня за трендами и стремление к прогрессу, но и возможность создавать более производительные, легкие и экономичные веб-страницы и приложения.</p><p>В эпоху, когда быстродействие, лаконичность и оптимизация ценятся как разработчиками, так и юзерами, использование наиболее эффективных инструментов становится ключевым конкурентным преимуществом поставщиков цифровых продуктов.</p><p>Делитесь в комментариях, на какие библиотеки перешли! Ну а если хотите детальнее разобраться во всех аспектах Java и JavaScript, заходите в наш <a href="https://t.me/+b_gDXaX2fMIwODky">тг-канал</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Топовые инструменты для фронтенд-разработки в 2025 году</title>
      <link>https://tproger.ru/articles/topovye-instrumenty-dlya-frontend-razrabotki-v-2025-godu</link>
      <comments>https://tproger.ru/articles/topovye-instrumenty-dlya-frontend-razrabotki-v-2025-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/topovye-instrumenty-dlya-frontend-razrabotki-v-2025-godu</guid>
      <description><![CDATA[<p>Инструменты для фронтенд-разработки. Показываем актуальный инструментарий для frontend в 2025 году. Рассматриваем тренды для фронтендеров ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/topovye-instrumenty-dlya-frontend-razrabotki-v-2025-godu">Топовые инструменты для фронтенд-разработки в 2025 году</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Adobe]]></category>
      <category><![CDATA[Redux]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 03 Feb 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Специальные инструменты для разработки фронтенда существенно упрощают работу программистов, ускоряют процесс, помогают создавать привлекательные интерфейсы сайтов и решают множество других прикладных задач.</p><p>Мы собрали топ самых эффективных инструментов для фронтенда в 2025 году. Актуальная информация о фреймворках, библиотеках, средствах сборки, проверки и отладки будет полезна как начинающим, так и опытным прогерам.</p><h2>Фреймворки и библиотеки для разработки интерфейсов</h2><p>Создание фронтенда, то есть клиентской части программного продукта — неотъемлемый этап разработки сайтов и приложений. Фронтендеры работают с с HTML, CSS, JavaScript, а также используют многочисленные библиотеки с готовыми решениями. Даже новички в курсе, что без фреймворков проекты сегодня не пишутся — это долго, тяжело и непродуктивно. Ниже — наиболее эффективные фреймворки для разработки UI.</p><h3>React.js</h3><p>Созданная Джорданом Валке, ведущим программистом самой известной в мире соцсети, библиотека React остается лидером в сфере разработки инфраструктуры на JavaScript UI. На <a href="http://react.js">React.js</a> написаны такие проекты, как Skype, PayPal, Airbnb, Dropbox и многие другие.</p><p>Популярность библиотеки объясняется вполне объективными причинами:</p><ul><li>Обширное комьюнити. Только на GitHub вы найдете больше 110 тыс. публикаций с тегом «react». Библиотекой пользуются во всем мире, а тысячи профессиональных программистов постоянно обновляют инструменты и актуализируют данные. Если у разработчика появится вопрос, он обязательно найдет на него ответ в сообществе.</li><li>Технологический бэкграунд. Библиотеку создали профи из FB для себя — такие проекты делаются максимально качественно и надежно. Тот факт, что технологии доверяют крупнейшие мировые корпорации, говорит сам за себя.</li><li>Активное взаимодействие с TypeScript. Этот инструмент представляет собой продвинутую версию JS, который со временем стал слишком тяжелым в плане кода. TypeScript лишен многих недостатков Java, поэтому активно применяется в React.js. В общем, в 2025 году фреймворк точно не умрет.</li><li>Версионность. В React, в отличие от Angular или Vue, код, написанный даже несколько лет назад, без проблем запустится на новейшей версии. А если там есть неактуальный элемент, программа сама подскажет, как его исправить.</li></ul><p>В React 19 появились новые, еще более мощные компоненты, повышающие производительность и пользовательский опыт:</p><ul><li>Улучшенная поддержка Server Components, с которой более удобно работать с серверным рендерингом и загружать контент в больших проектах;</li><li>Новый API — Actions, который делает более простой и продуктивной работу с формами и интерактивными элементами;</li><li>Директивы preload и preinit обеспечивают предварительную загрузку важных ресурсов, что ускоряет работу приложений;</li><li>Новый канал релизов React Canaries позволяет протестировать некоторые опции React еще до их официального выпуска.</li></ul><p>Улучшения произошли и в экосистеме React. Упрощается работа с Redux — библиотекой, которую все чаще используют в связке с React. Инструменты для работы с таблицами и интерфейсами React Table 8 более доступны и производительные.</p><h3>Vue.js</h3><p>Еще один мощный, но при этом простой и гибкий в применении инструмент для фронтенд-разработчиков — <a href="http://vue.js">Vue.js</a>. Согласно экспертным прогнозам, он сохранит свои позиции в топе-3 фреймворков для JavaScript в 2025 году.</p><p>Относительно недавно создатели Vue радикально обновили движок и архитектуру. При этом доля TypeScript кода в репозитории приближается к 99%, что расценивается профессиональными прогерами крайне позитивно.</p><p>Команда разработчиков Vue.js, возглавляемая Эваном Ю, в свое время заявила, что фреймворк станет самым простым и удобным инструментом из всех существующих. По мнению экспертов, их слова полностью подтвердились.</p><p>В числе главных преимуществ фреймворка:</p><ul><li>Подходит для новичков. Для освоения достаточно знания HTML, CSS, JavaScript;</li><li>Небольшой вес. Размер новой заархивированной библиотеки runtime меньше 10 kb;</li><li>В пакет входит виртуальный DOM — объектная модель документа;</li><li>Активное крутое сообщество. Профессионалы помогут, если у разработчика возникнут проблемы.</li></ul><p>Количество полноценных приложений, сделанных на Vue.js, превышает 36 тысяч. Это число постоянно растет, и в 2025 году тренд обязательно продлится. В экосистему внедряются новые технологии, например, Vapor Mode, — инструмент, открывающий новые горизонты для разработки высокопроизводительного софта.</p><p>Подход, заданный Composition API, позволяет создавать компоненты через импорт функций вместо обновления опций. На выходе получаем более чистую архитектуру, что особенно важно для продуктов со сложной логикой.</p><p>Появление высокоуровнего фреймворка Nuxt 4 принесет важные улучшения в плане производительности и гибкости разработки. Поддержка Vue 3.3+ в Nuxt 4 улучшает работу с анимацией и межкомпонентные переходы. Пользовательский интерфейс становится более динамичным и плавным.</p><p>На фреймворке Vue созданы сайты Ozon, Zoom, Chess (сайт для шахматистов с посещаемостью 20 млн пользователей в месяц), Livestorm — платформа для запуска вебинаров, и многие другие ресурсы.</p><h3>Angular</h3><p>Этому мощному фреймворку доверяет Google, что уже говорит само за себя. Множество десктопных и мобильных приложений создано на <a href="https://angularjs.org/">AngularJS</a> — это крутой инструмент с минимальным риском критических ошибок. На сайте фреймворка создатели призывают разработчиков сосредоточиться на приложениях, а код Angular берет на себя.</p><p>И хотя профи считают этот фреймворк более сложным в освоении, чем Vue и React, его функциональность оправдывает все трудности учебного процесса. В 2025 году эволюция Angular продолжится: его последние версии показывают существенные изменения в подходах к реактивности ПО и управлению состоянием.</p><p>Новые решения, на которые стоит обратить внимание:</p><ul><li>К числу ключевых нововведений фреймворка относится технология Signals, которая делает взаимодействие с реактивными данными более простым. «Сигналы» актуальны в том случае, когда требуется синхронное обновление UI и оптимизация производительности приложения.</li><li>В Angular 19 компоненты Standalone стали новым стандартом. Теперь они могут использоваться без добавления в модуль. Такое решение упрощает архитектуру приложений и делает подход к коду более прямолинейным.</li><li>Внедрение зависимостей (DI, Dependency Injection) дополнено новой функцией inject() — она заменяет стандартный конструктор, что также упрощает код и делает его более гибким.</li><li>Автоматическая миграция продуктов к новому API — еще один шаг к упрощению и сокращению кода. Это напрямую отражается на производительности современных приложений, в первую очередь, на больших и логически сложных.</li></ul><p>Прежние плюсы  Angular остались неизменными — расширяемость, взаимодействие с другими фреймворками и инструментами, множество надстроек и дополнений — Auto Validate, Complete, Grid и т.д.</p><p>На фреймворке написан сайт британской газеты The Guardian, интерактивные элементы PayPal, самый посещаемый сайт мониторинга погоды Weather.com, фронтенд музыкального ресурса VEVO и многие другие продукты.</p><h3>Svelte</h3><p>В свое время фреймворк предложил принципиально новый подход к разработке пользовательских интерфейсов. Концепция создателей <a href="https://svelte.dev/">Svelte</a> — делать больше с минимальными затратами. Некоторые разработчики считают Svelte больше компилятором, чем фреймворком, что по сути соответствует действительности.</p><p>В чем основные фишки Svelte:</p><ul><li>При меньшем весе проекты более производительны — им не требуется виртуальный DOM;</li><li>Фреймворк прост в освоении, поэтому подходит начинающим разработчикам;</li><li>Опытные прогеры обращают внимание на быстроту и стабильность инструмента;</li><li>Анимации в Svelte доступны прямо из коробки — сторонние библиотеки не требуются.</li></ul><p>На текущем этапе этот фреймворк рано ставить на одну ступень с React и Vue, но его рейтинг на GitHub постоянно повышается, и в 2025 году растущий тренд точно сохранится.</p><p>Фронтенд-разработкой с фреймворком Svetle пользовались такие компании, как Spotify, Ikea, Finance.yahoo, Music.apple и многие другие.</p><h3>Solid.js</h3><p>Минималистичный фреймворк, который по производительности и быстроте превосходит все остальные фреймворки из топа. <a href="https://www.solidjs.com/">Solid</a> напоминает React, но вместо виртуального DOM использует компиляцию. Проект без проблем компилируется в JavaScript-код, что обеспечивает быстрый рендеринг страницы (трансформацию кода в картинку для пользователя).</p><p>В чем плюсы:</p><ul><li>Тонкая реактивность обеспечивает оптимизацию рендеринга в реальном времени;</li><li>Есть бесшовная интеграция со всеми актуальными библиотеками на JS;</li><li>Компоненты фреймворка — стандартные JavaScript-функции: они выполняются однократно для настройки представления, после чего автоматически обновляют интерфейс.</li></ul><p>Solid.js, по состоянию на 2025, — идеальный инструмент для одностраничных приложений и продуктов с максимальной интерактивностью (чат-ботов, мессенджеров, панелей управления).</p><p>Фреймворк используют такие ресурсы, как 1c.ru, криптовалютная биржа Ape.pro, маркетплейс Майнкрафт Waypoint Studios и другие.</p><h2>Инструменты для сборки и разработки</h2><p>По мнению большинства экспертов, в 2025 году ведущим трендом в сборке и разработке на JavaScript будет работа с универсальными мета-инструментами, совместимыми с любыми фреймворками.</p><p>Топ наиболее эффективных инструментов этого направления:</p><ul><li><a href="https://vite.dev/">Vite</a>. Локальный сервер разработки от Эвана Ю. В новой версии Vita 6 возможности существенно расширились, в том числе в плане поддержки других фреймворков, помимо Vue. Благодаря модульной архитектуре и новой системе плагинов, улучшилась кастомизация сборки (процесс внесения изменений). С Vite можно использовать несколько фреймворков в одном проекте — для сложных приложений это актуальная опция. Обновления в реальном времени происходят быстро и стабильно.</li><li><a href="https://webpack.js.org/">Webpack</a>. Сборщик модулей, который компилирует части кода в единый файл. Работает с JavaScript и TypeScript. Несмотря на появление новых инструментов сборки, в 2025 году Webpack останется обязательным инструментом, особенно для работы с масштабными проектами. Он оптимизирует размер и скорость загрузки ресурсов, эффективно выстраивает процессы разработки, в том числе HMR — горячую замену модулей. Плюс обеспечивает совместимость продуктов с различными версиями браузеров.</li><li><a href="https://parceljs.org/">Parcel</a>. Главная фишка этого инструмента в том, что его не нужно настраивать и конфигурировать — это делается автоматически. Parcel применяет воркеры — скрипты для многоядерной компиляции, и содержит кэш файловых систем для ускоренной сборки. Есть поддержка из коробки JS, CSS, HTML, поэтому соответствующие плагины не требуются. Модули, которые меняются в процессе разработки, обновляются автоматически.</li></ul><h2>Тестирование и отладка</h2><p>В 2025 году в тестировании и отладке продуктов наиболее востребованы следующие инструменты:</p><ul><li><a href="https://jestjs.io/ru/">Jest</a>. Самый популярный фреймворк для тестирования кода на JavaScript. Работает с синхронным и асинхронным кодом, интегрируется с React и Vue. В числе основных плюсов — простая настройка и удобное применение. Подходит для проверки и отладки сложных приложений.</li><li><a href="https://www.cypress.io/">Cypress</a>. Инструмент для автоматизации тестирования, который подходит новичкам. Использует тест end-to-end, покрывая весь путь пользователя, и внедряется в CI/CD — процессы непрерывной доставки и развертывания. Благодаря подробной документации подходит для новичков.</li><li><a href="https://testing-library.com/docs/react-testing-library/intro">React Testing Library</a>. Библиотека эффективных инструментов для тестирования пользовательских интерфейсов UI. RTL позволяет абстрагироваться от внутренней логики компонентов и проверяет состояние реального DOM, то есть имитирует действия пользователей, руководствуясь только данными браузера.</li><li><a href="https://storybook.js.org/">Storybook</a>. Позиционируется как максимально простое средство тестирования и разработки. Создает изолированную программную среду для ускоренного и эффективного процесса.</li></ul><h2>Инструменты для контроля версий</h2><p>Актуальные в 2025 средства для контроля созданных разработчиками версий:</p><ul><li><a href="https://git-scm.com/">Git</a>. Распределенная VCS (система управления версиями) отслеживает изменения в исходном коде и файлах в совместных проектах. Позволяет править и контролировать версии в процессе разработки. Обладает расширенными возможностями работы с репозиториями.</li><li><a href="https://github.com/gitlabhq">GitHub/GitLab</a>. Службы управления репозиториями, которые используются и для управления изменениями в опенсорс-проектах. Оба репозитория обладают полным набором инструментов для контроля и интеграций, обеспечивая эффективную совместную разработку и неограниченное сотрудничество. Обладают встроенными опциями безопасности, которые разработчики могут в любой момент активировать.</li><li><a href="https://bitbucket.org/product">Bitbucket</a>. Аналог GitHub с бесплатным доступом к контролю команды до пяти разработчиков. Подходит для написания частных проектов, обладает гибкостью, совместим со множеством других инструментов, в том числе с Jira, — средой для управления проектами.  Интеллектуальный семантический поиск JQL сканирует код по запросу пользователя.</li></ul><h2>CSS-процессоры и CSS-фреймворки</h2><p>Инструменты для первичной трансляции кода, актуальные в 2025 году:</p><ul><li><a href="http://sass-lang.com/">Sass</a>. Препроцессор упрощает написание кода, исключая одинаковые участки или заменяя ключевые элементы синтаксиса одним знаком. Sass считается самым надежным языком расширений CSS, содержит средства импорта и множество других функций.</li><li><a href="http://lesscss.org/">Less</a>. Этот препроцессор поддерживает CSS и позволяет разработчикам применять его методы для улучшения и дополнения веб-приложений. В Less встроены логические, строковые, математические функции, а также функции списков.</li><li><a href="https://getbootstrap.com/">Bootstrap</a>. Классический фреймворк для ускоренной верстки со множеством встроенных компонентов. Более 20% всех сайтов в мире создано с его помощью. Автоматически выстраивает адаптивную сетку на базе Flex-модели, создает изображения, поставляется с панелями навигации и другими компонентами.</li><li><a href="https://tailwindcss.com/">Tailwind CSS</a>. Фреймворк, который пользователи называют прогрессивной версией Bootstrap. Содержит обширный каталог утилитарных классов и инструментов для прототипирования, стилизации сайтов и приложений. Легко настраивается, работает с собственными служебными шаблонами, создает сложные адаптивные макеты, в том числе с ориентацией под мобильные устройства.</li></ul><h2>Инструменты для работы с API и серверной логикой</h2><p>Эффективная работа с API обеспечивает надежность при обработке информации в приложениях.</p><p>В 2025 году топ таких инструментов выглядит следующим образом:</p><ul><li><a href="https://graphql.org/">GraphQL</a>. Язык, описывающий взаимодействие клиента с сервером.  Рассматривается как альтернатива стандартного инструмента REST. В сравнении с последним, более удобен в применении, содержит обширный инструментарий.</li><li><a href="https://www.apollographql.com/docs/react">Apollo Client</a>. Язык запросов, созданный разработчиками FB. Интегрируется с GraphQL и React для управления состоянием приложения. Предоставляет эффективные инструменты в виде поддержки кэширования, управления состоянием и исправления ошибок. Интегрируется с библиотекой Redux и другими фреймворками.</li><li><a href="https://axios-http.com/ru/docs/intro">Axios</a>. JS-библиотека для работы с HTTP-запросами, а по сути — клиент для работы в браузере и с платформой Node.js. Помогает настроить взаимодействие между frontend и backend.</li></ul><h2>UI и UX-дизайн</h2><p>Интерфейсу и комфорту пользователя современные сайты и приложения уделяют максимум внимания. На кривые и неудобные ресурсы посетители просто не приходят — зачем, если есть лаконичные и функциональные продукты, отвечающие актуальным трендам цифрового дизайна.</p><p>Эти инструменты сохраняют свою актуальность в 2025 году:</p><ul><li><a href="https://www.figma.com/">Figma</a>. Графический редактор, который остается самым популярным инструментом для проектирования интерфейсов, прототипирования и тестирования. Также это среда взаимодействия команды разработчиков, доступная непосредственно в браузере. Содержит удобные инструменты, может работать в режиме многозадачности.</li><li><a href="https://helpx.adobe.com/ru/xd/get-started.html">Adobe XD</a>. ПО для работы с интерфейсами, анимированием, прототипами сайтов, сервисов и приложений от лидера индустрии. Основной инструмент UX-дизайнеров, желающих создавать юзабельные и современные макеты и делиться результатами работы с командой. Содержит многочисленные инструменты для рисования, создания 3D-эффектов, добавления интерактивных функций и анимации.</li><li><a href="https://www.sketch.com/">Sketch</a>. Выбор многих профессионалов индустрии UI/UX дизайна. Упрощает разработку интерфейсов благодаря множеству встроенных полезных функций — артбордов, редакторов, поддержкой командной работы в режиме онлайн. Работает только с macOS.</li></ul><p>При выборе фреймворков и инструментов фронтам стоит руководствоваться удобством и простотой использования, соответствием собственному профессиональному уровню, языковой поддержкой, ценой, а также спецификой создаваемого продукта.</p><p>Вспомогательные инструменты ускоряют и упрощают разработку, снижают риск ошибок и работают на результат — запуск привлекательных, быстрых и функциональных веб-продуктов и приложений.</p><p><i>Рассказывайте в комментариях, какими фреймворками и библиотеками пользуетесь вы. А если хотите найти большей полезной информации про фронтенд — вам </i><a href="https://t.me/+BDTRdPNEOY00ZjE6">сюда</a><i>.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>React обновил руководство по установке: теперь рекомендуются сторонние фреймворки</title>
      <link>https://tproger.ru/news/--react-obnovil-rukovodstvo-po-ustanovke--teper-rekomenduyutsya-storonnie-frejmvorki</link>
      <comments>https://tproger.ru/news/--react-obnovil-rukovodstvo-po-ustanovke--teper-rekomenduyutsya-storonnie-frejmvorki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/--react-obnovil-rukovodstvo-po-ustanovke--teper-rekomenduyutsya-storonnie-frejmvorki</guid>
      <description><![CDATA[<p>React обновил руководство: вместо ручной настройки теперь рекомендуются Next.js, Gatsby и Expo для упрощения разработки и фокусировки на логике</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/--react-obnovil-rukovodstvo-po-ustanovke--teper-rekomenduyutsya-storonnie-frejmvorki">React обновил руководство по установке: теперь рекомендуются сторонние фреймворки</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 18 Dec 2024 03:20:19 GMT</pubDate>
      <content:encoded><![CDATA[<p>В <a href="https://react.dev/learn/start-a-new-react-project">официальной документации</a> React обновлена инструкция по созданию новых проектов.</p><p>Теперь вместо описания самостоятельной настройки окружения, разработчикам предлагается использовать популярные фреймворки, такие как Next.js, Gatsby и Expo.</p><h2>Причины обновления</h2><p>Команда React отмечает, что современные фреймворки решают общие задачи, возникающие при разработке приложений: маршрутизация, сборка, серверные технологии и другие.</p><p>Использование готовых решений позволяет разработчикам сосредоточиться на логике приложения, не тратя время на настройку инфраструктуры.</p><figure><img src="https://media.tproger.ru/user-uploads/98945/2024-12-18/2d3eb0b2-a32d-4fd3-8154-a459cf1bf310.jpeg" alt="" /></figure><h2>Рекомендованные фреймворки</h2><ul><li><b>Next.js:</b> предлагает обновлённый API для создания полноценных приложений с серверными компонентами и асинхронной загрузкой данных.</li><li><b>Gatsby:</b> позволяет создавать статические сайты с использованием React, обеспечивая быструю загрузку и оптимизацию.</li><li><b>Expo:</b> предназначен для разработки нативных приложений на базе React Native, облегчая создание кроссплатформенных решений.</li></ul><h2>Реакция сообщества</h2><p>Обновление документации вызвало дискуссии среди разработчиков.</p><p>Некоторые приветствуют переход к фреймворкам, упрощающим разработку и поддержку приложений. Другие выражают обеспокоенность из-за необходимости изучения дополнительных инструментов и возможной потери гибкости при настройке проектов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как парсить данные на Python: BeautifulSoup и Scrapy</title>
      <link>https://tproger.ru/articles/osnovy-parsinga-dannyh-na-python--beautifulsoup-i-scrapy</link>
      <comments>https://tproger.ru/articles/osnovy-parsinga-dannyh-na-python--beautifulsoup-i-scrapy?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/osnovy-parsinga-dannyh-na-python--beautifulsoup-i-scrapy</guid>
      <description><![CDATA[<p>Парсинг сайтов на Python с BeautifulSoup и Scrapy: примеры кода, сравнение инструментов, динамический контент и советы по обходу блокировок. Читайте на Tproger.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/osnovy-parsinga-dannyh-na-python--beautifulsoup-i-scrapy">Как парсить данные на Python: BeautifulSoup и Scrapy</a>»</p>]]></description>
      <category><![CDATA[Парсинг]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 08 Dec 2024 08:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Парсинг сайтов на Python автоматизирует сбор информации с сайтов — от цен конкурентов до контактов потенциальных клиентов. <b>Парсинг данных (web scraping)</b> — автоматизированный процесс извлечения информации с веб-страниц с помощью кода. Для этого используются две основные библиотеки: BeautifulSoup подходит для простых задач и небольших проектов, а Scrapy — для масштабного парсинга данных. Эта статья — часть нашего <a href="https://tproger.ru/articles/python--polnyj-putevoditel-dlya-razrabotchika">полного путеводителя по Python</a>.</p><p>Чтобы использовать эти инструменты, вспомним основы HTML, DOM-дерева и принципы работы динамических страниц.</p><p>BeautifulSoup — простая библиотека для парсинга HTML на Python: подходит для небольших задач, статических страниц и быстрых скриптов.</p><p>Scrapy — полноценный асинхронный фреймворк для масштабного парсинга: встроенные pipelines, управление прокси, ротация User-Agent и экспорт в JSON/CSV/XML.</p><p>Для динамических сайтов с JavaScript ни BeautifulSoup, ни Scrapy не работают напрямую — нужен Selenium или Playwright, имитирующий браузер.</p><p>Если сайт предоставляет API — всегда предпочитайте его парсингу: меньше нагрузка на сервер, структурированные данные, официальная документация.</p><p>Соблюдайте этику парсинга: уважайте robots.txt, делайте задержки между запросами 1–3 секунды и собирайте только те данные, которые действительно нужны.</p><h2>Основные понятия парсинга данных</h2><p><b>HTML-документ</b> — это текстовый файл с расширением .html. Он содержит набор элементов для отображения страницы в браузере.</p><p>Структура HTML-документа состоит из двух частей: <b>заголовка (head)</b> и <b>тела (body)</b>. Весь документ обрамляется корневым тегом html.</p><p>Заголовок содержит метаданные, стили, скрипты, заголовок страницы. В теле документа находятся теги и основной контент, который отображается в окне браузера.</p><p><b>DOM-дерево</b> — это представление HTML-документа в виде древовидной структуры объектов. Каждый элемент HTML становится узлом этого дерева. Благодаря DOM можно взаимодействовать с элементами страницы через JavaScript:</p><ul><li>получать доступ к содержимому,</li><li>изменять состояние тегов,</li><li>добавлять или удалять элементы.</li></ul><p>Корневой элемент DOM-дерева — тег html. От него идет разветвление на head и body — его прямых потомков. Остальные элементы образуют более глубокие уровни вложенности.</p><p><a href="https://software.hixie.ch/utilities/js/live-dom-viewer/">Тут</a> можно посмотреть, как выглядит DOM-дерево для определенного фрагмента кода.</p><p><b>Статические страницы</b> содержат фиксированный HTML. Его код не меняется после загрузки. По этой причине статические страницы проще парсить. Достаточно отправить HTTP-запрос и будет получен весь HTML-документ, из которого можно извлечь целевые теги. С этой задачей успешно справляются любые библиотеки для парсинга: Requests, BeautifulSoup, Urllib3 и другие.</p><p><b>Динамические страницы</b> формируют контент с помощью JavaScript после загрузки основного HTML. Контент может подгружаться через API, изменяться при взаимодействии пользователя или обновляться автоматически.</p><p>Простой HTTP-запрос не парсит динамически загруженные сайты. Для этого нужны инструменты, эмулирующие работу браузера. Например, <a href="https://tproger.ru/articles/selenium-pishem-parser-dlya-menyayushhegosya-sajta">Selenium WebDriver</a>. Он запускает браузер, выполняет JavaScript-код и парсит финальное DOM-дерево с динамическим контентом.</p><h2>Этические и юридические аспекты парсинга данных</h2><p>Парсинг не запрещен законодательством. Если ваша программа не выводит из строя сайты и не вредит бизнесу, то шансы на судебные иски стремятся к нулю.</p><p><b>Что можно делать</b>:</p><ul><li>Собирать информацию, которая находится в открытом доступе.</li><li>Парсить данные, не нагружая сайт и не мешая его работе.</li></ul><p><b>Чего нельзя делать</b>:</p><ul><li>Воровать закрытую информацию компаний.</li><li>Собирать личные данные пользователей (телефоны, адреса, паспортные данные).</li><li>Намеренно вредить работе сайта большим количеством запросов.</li></ul><p>Перед сбором данных задавайте себе простой вопрос: «Мне понравится, если кто-то соберет эту информацию обо мне?» Подумайте также о том, приносит ли ваш парсинг пользу другим людям или вы делаете это только ради собственной выгоды.</p><p>Если закон разрешает какие-то действия, это не значит, что их правильно делать с моральной точки зрения. Например, технически возможно собрать все комментарии человека в соцсетях, но будет ли это этично по отношению к нему?</p><p>Cобирайте только те данные, которые действительно нужны для вашей задачи. Не нужно сохранять личную информацию людей просто потому, что вы можете это сделать.</p><p>Если собираете данные временно, например, чтобы найти фальшивые отзывы на Яндекс Картах, а потом сразу удаляете личную информацию — это более приемлемо, чем создание постоянной базы данных о людях для продажи рекламодателям.</p><h2>BeautifulSoup: простой и удобный инструмент для парсинга</h2><p><b>BeautifulSoup</b> — это библиотека Python для извлечения данных из HTML и XML. Следуйте пошаговому руководству, чтобы установить BeautifulSoup.</p><p>Откройте терминал и выполните команду:</p><p>Установите парсер lxml:</p><p>Также понадобится библиотека requests для выполнения HTTP-запросов:</p><p>Самый простой парсер на BeautifulSoup:</p><h2>Основные функции и методы библиотеки</h2><p>Найти первый абзац:</p><p>Найти все абзацы:</p><p>Один элемент с классом 'content':</p><p>Все элементы с классом 'content':</p><p>Поиск ссылки по href:</p><p>Поиск по нескольким атрибутам:</p><p>Найти все абзацы с определенным классом:</p><p>Найти все ссылки внутри div с определенным id:</p><h2>Плюсы BeautifulSoup</h2><ul><li>Простой синтаксис, поэтому библиотекой пользуются даже начинающие разработчики.</li><li>Гибкий поиск элементов ищет теги по имени, классу, id, атрибутам. Можно комбинировать условия поиска и использовать CSS-селекторы.</li><li>Автоматическое исправление невалидного HTML. BeautifulSoup пытается восстановить неправильную структуру документа, что полезно при работе с некачественной версткой.</li><li>Низкие требования к ресурсам компьютера по сравнению с браузерными решениями вроде Selenium.</li></ul><h2>Недостатки BeautifulSoup</h2><ul><li>Нет поддержки JavaScript. Библиотека работает только со статическим HTML и не может обрабатывать динамически загружаемый контент.</li><li>Ограниченная производительность при работе с большими документами. Для парсинга крупных файлов лучше использовать потоковые парсеры.</li><li>Отсутствие встроенной поддержки асинхронности. Для параллельной обработки нескольких страниц требуются дополнительные библиотеки asyncio и aiohttp</li></ul><p>BeautifulSoup не подходит для парсинга сайтов с динамической загрузкой контента, высоконагруженных проектов. Для этих целей выбирайте фреймворк Scrapy.</p><h2>Scrapy: мощный фреймворк для парсинга больших объемов данных</h2><p><b>Scrapy </b>— это фреймворк для парсинга сайтов, построенный на асинхронной архитектуре. Рассмотрим его основные компоненты.</p><p><b>Пауки (Spiders) </b>— это классы, которые определяют как парсить конкретный сайт. В пауке указываются начальные URL-адреса, правила извлечения данных и переходов между страницами. Паук обходит страницы сайта и извлекает информацию с помощью CSS-селекторов или XPath-выражений.</p><p><b>Элементы (Items)</b> — это контейнеры для хранения извлеченных данных. Они похожи на словари Python, но предоставляют дополнительную валидацию полей. Items определяют структуру данных, которые будут собраны пауком.</p><p><b>Каналы обработки (Pipelines)</b> — это компоненты для обработки извлеченных данных. Каждый элемент проходит через цепочку pipeline-обработчиков. В pipeline можно выполнять очистку данных, удалять дубликаты, сохранять информацию в базу данных.</p><p>Парсинг HTML на Scrapy выглядит так:</p><ol><li>Паук отправляет запрос к сайту.</li><li>Получает ответ и извлекает данные.</li><li>Создает элементы с данными.</li><li>Передает элементы в pipeline.</li><li>Pipeline обрабатывает и сохраняет данные.</li></ol><h2>Установка и настройка Scrapy</h2><p>Откройте терминал и выполните команду::</p><p>Создайте новый проект:</p><p>Эта команда создаст структуру каталогов — файлы настроек и шаблоны пауков.</p><p>Файл settings.py содержит основные настройки проекта. Базовые параметры, которые требуют настройки:</p><ul><li>USER_AGENT = 'Mozilla/5.0...' (идентификация парсера).</li><li>ROBOTSTXT_OBEY = True (соблюдение правил robots.txt).</li><li>CONCURRENT_REQUESTS = 16 (количество одновременных запросов).</li><li>DOWNLOAD_DELAY = 1 (задержка между запросами).</li><li>COOKIES_ENABLED = False (использование cookies).</li></ul><p>Для создания нового паука используйте команду:</p><p>Пример простого паука:</p><p>Запуск паука выполняется командой:</p><p>Для сохранения результатов в файл:</p><p>Для обработки данных перед сохранением используется pipelines.py:</p><p>Активация pipeline происходит в settings.py:</p><h2>Плюсы Scrapy</h2><ul><li>Обрабатывает запросы асинхронно.</li><li>Автоматически управляет порядком обработки URL и перераспределяет нагрузку.</li><li>Легко добавлять прокси-серверы, ротацию User-Agent, обработку ошибок.</li><li>Встроенная поддержка экспорта в JSON, CSV, XML.</li></ul><h2>Недостатки Scrapy</h2><ul><li>Сложность отладки асинхронного кода.</li><li>Ограниченная поддержка JavaScript.</li></ul><h2>Сравнение BeautifulSoup и Scrapy</h2><p>Выбор инструмента зависит от масштаба задачи. Для извлечения данных с нескольких страниц достаточно BeautifulSoup. Для создания поискового робота или регулярного парсинга больших объемов данных оптимальным выбором будет Scrapy.</p><p><b>Парсинг на Python BeautifulSoup лучше подходит для</b>:</p><ul><li>Парсинга отдельных страниц.</li><li>Небольших скриптов.</li><li>Интеграции в существующие проекты.</li></ul><p>BeautifulSoup дает разработчику полную свободу в организации кода и выборе дополнительных инструментов, но ограничивается только базовыми функциями извлечения данных.</p><p><b>Scrapy эффективнее для</b>:</p><ul><li>Парсинга интернет-магазинов с тысячами товаров.</li><li>Регулярного мониторинга цен конкурентов.</li><li>Полноценных парсинг-проектов со сложной логикой обработки.</li></ul><p>Фреймворк используют для масштабного сбора данных. Python Scrapy имеет встроенные механизмы для работы с прокси, управления cookies, организации очередей запросов и конвейерной обработки данных.</p><h2>Продвинутые техники парсинга</h2><p>Динамически загружаемый контент — это проблема при парсинге. Чтобы выгрузить целевой контент со страницы, нужно имитировать действия пользователя. Для этого часто используют <b>Selenium.</b> Библиотека управляет браузером — загружает страницы, выполняет JavaScript и получает доступ к DOM после его изменения.</p><p>При обработке динамического контента учитывайте задержки. JavaScript выполняется асинхронно, поэтому Selenium должен дождаться полной загрузки элементов, прежде чем пытаться с ними взаимодействовать.</p><p>Пример ожидания:</p><p>Еще можно использовать time.sleep, но это менее эффективно — задержка фиксирована и не зависит от скорости загрузки страницы.</p><p>Если контент загружается через AJAX, можно использовать execute_script для проверки состояния загрузки. Например, можно проверить значение переменной JavaScript, которая отслеживает состояние загрузки.</p><p>Когда контент загружается поэтапно, приходится комбинировать ожидания, execute_script и циклы для обработки всех частей динамического контента.</p><h2>Работа с API</h2><p>Многие сайты предоставляют API для получения данных. Это предпочтительный способ парсинга на Python. Сбор данных через API:</p><ul><li>не нагружает сервер излишними запросами;</li><li>предоставляет данные в структурированном виде;</li><li>обычно имеет официальную документацию.</li></ul><p>Для работы с API в Python есть библиотека requests.</p><p>Большинство API имеют ограничения на количество запросов. Для их соблюдения нужно добавлять задержки.</p><h2>Использование прокси и обход блокировок</h2><p>Прокси помогают обходить блокировки, которые сайты применяют для защиты от парсинга — не всем нравится, когда их контент собирают в базы. Если сайт блокирует ваш IP-адрес из-за частых запросов, использование прокси позволит продолжить работу под другим IP.</p><p>В Python для работы с прокси нужно импортировать библиотеки requests и urllib. Достаточно указать адрес прокси в параметрах запроса.</p><p>Пример использования прокси с requests:</p><p>Ваш парсер останется незамеченным, если выполнять подмену User-Agent, ставить задержки между запросами, настроить автоматическое распознавание капчи.</p><p>Если сайт предоставляет API, лучше делать запросы через него — это наиболее безопасный и эффективный способ.</p><h2>Рекомендации по парсингу данных</h2><p>Структура проекта способствует его поддержке, расширению и повторному использованию. Делите большие парсеры на отдельные компоненты по функциональности — один модуль для авторизации, другой для навигации по страницам, третий для извлечения тегов.</p><p>Файлы, полученные при парсинге, также требуют правильной организации хранения и обработки. Выбор формата зависит от объема и структуры данных:</p><ul><li>JSON подходит для иерархических данных и удобен для дальнейшей обработки в Python.</li><li>CSV эффективен для табличных данных и открывается в Excel.</li></ul><p>Для больших объемов информации используйте БД — SQLite для небольших проектов, PostgreSQL для масштабных. Создавайте промежуточное хранилище перед финальной записью — это защитит от потери информации при сбоях. Для Data Science — <a href="https://tproger.ru/translations/top-10-python-bibliotek-dlja-data-science">отдельная подборка топ-10 библиотек</a>.</p><p>Задержки между запросами — обязательный элемент парсинга. Базовая рекомендация — выдерживайте паузу 1-3 секунды между запросами. Для высоконагруженных сайтов увеличивайте интервал до 5-10 секунд.</p><p>Дополнительные советы по созданию парсера:</p><ul><li>Реализуйте систему логирования для отслеживания ошибок и прогресса.</li><li>Обрабатывайте сетевые ошибки, делайте повторные попытки с экспоненциальной выдержкой.</li><li>Используйте прокси, User Agent для распределения нагрузки и маскировки запросов.</li><li>Проверяйте работоспособность парсера перед запуском, так как структура сайтов может меняться.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>React — всё? Стоит ли переходить на Svelte и SolidJS</title>
      <link>https://tproger.ru/articles/sravnitelnyj-analiz-svelte-i-solidjs--stoit-li-perehodit-s-react</link>
      <comments>https://tproger.ru/articles/sravnitelnyj-analiz-svelte-i-solidjs--stoit-li-perehodit-s-react?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Владислав Устинов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/sravnitelnyj-analiz-svelte-i-solidjs--stoit-li-perehodit-s-react</guid>
      <description><![CDATA[<p>В этой статье мы сравниваем три популярных фреймворка для разработки — React, Svelte и SolidJS. Рассматриваем их производительность, удобство разработки, реактивность и особенности, чтобы выбрать лучший инструмент для создания веб-интерфейсов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/sravnitelnyj-analiz-svelte-i-solidjs--stoit-li-perehodit-s-react">React — всё? Стоит ли переходить на Svelte и SolidJS</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Веб-дизайн]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 03 Dec 2024 15:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>React вышел в бородатые времена, когда работа с DOM в сложных проектах была той еще пыткой. Код пестрил событиями и коллбеками, интерфейсы часто содержали повторяющие элементы, но стандартного способа их использовать не было, а синхронизация фронтенда с данными часто приводила к куче ошибок.</p><p>Такой код сложно поддерживать: DOM рендерился со скоростью улитки, а засунуть много интерактивных элементов на одну страницу было равносильно самоубийству.</p><p>React решил эти проблемы. Разработчики получили виртуальный DOM, который ускорял отрисовку веб-страниц. Благодаря компонентам стало удобнее верстать сайты и веб-приложения, а реактивность помогла эффективнее внедрять интерактивные элементы. Да, рeact действительно крутой, однако он не лишён недостатков в сравнении с некоторыми более новыми фреймворками.</p><p>При написании статьи консультировался с Денисом Черновым, ведущим разработчиком платформенной команды Спортмастера (а то я чуть не убил Реакт), а также Мишей Родштейном, руководителем разработки в Дизайн-бюро «Интуиция», и Александром Гузенко, руководителем фронтенд-разработки отдела R&amp;D в крупной европейской компании (к сожалению, под NDA).</p><h2>Почему разработчики ищут замену React?</h2><h3>Спорный JSX</h3><p>В обзорных статьях и видео React часто критикуют за JSX код. JSX — это плод любви HTML и JS, который выглядит как HTML, но таковым не является. У нас в JSX коде смешивается логика и верстка. В итоге получаем кашу.</p><p><b>Пример JSX кода:</b></p><p>Такой код немного хуже читается, чем обычные решения на HTML + JS, и может сбивать с толку новичков. Но стоит сделать ремарку, что некоторым разработчикам он нравится.</p><h3>Виртуальный DOM как устаревший подход к оптимизации</h3><p>DOM — еще одна крутая фишка React, которая со временем стала недостатком на фоне других фреймворков. Когда пользователь взаимодействует с интерактивным элементом, на его стороне сперва рендерится виртуальный DOM, после чего он сравнивается с главным DOM и перезаписывает данные на сервере.</p><p>Этот костыль был создан, чтобы ускорять обновление интерфейсов на стороне клиента, но сейчас есть другие, куда более шустрые подходы. Например, в тех же Svelte и SolidJS виртуальный DOM уже не нужен из-за компиляции, но это так, спойлеры.</p><h3>Зависимость от сторонних библиотек</h3><p>Изначально React вышел в свет как библиотека. Он быстро стал популярным, оброс сторонними библиотеками, кто-то его даже называет фреймворком. Но фреймворком его можно считать с большой натяжкой, поскольку при разработке часто приходится устанавливать сторонние библиотеки, а это увеличивает размер проекта и усложняет его поддержку.</p><p>В итоге мы получаем крутой инструмент, но с недостатками в виде не самого чистого кода, весомого бандла, зависимости от сторонних библиотек, трудностей в поддержке и не самой быстрой реализации рендеринга DOM.</p><h2>Краткое знакомство с Svelte и SolidJS</h2><h3>Что такое Svelte: основные принципы, чем выделяется</h3><h4>Производительность из-за компиляции</h4><p>Философия Svelte сводится к тому, чтобы получать больше за счет меньшего. Как и в случае с React, Svelte не совсем фреймворк. Разработчики позиционируют его как компилятор, и это именно так.</p><p>Благодаря компиляции кода, проекты на Svelte получаются более производительными и меньше весят. Здесь не нужны костыли в виде виртуального DOM.</p><h4>Отсутствие JSX-кода и модифицированный HTML</h4><p>Код в Svelte пишется на HTML, CSS и JS, причем HTML здесь модифицированный. Например, при верстке мы можем использовать директивы:</p><ul><li><b>bind</b>: для двустороннего связывания данных (например, &lt;input bind:value={name} /&gt;).</li><li><b>on</b>: для добавления обработчиков событий (например, &lt;button on:click={handleClick}&gt;).</li><li><b>class</b>: для условного добавления классов (например, &lt;div class:active={isActive}&gt;).</li></ul><p>Вот пример простого кода — он создает интерактивный интерфейс, который реагирует на ввод пользователя и переключение состояния:<br /></p><p>Значение в поле ввода связано с переменной name при помощи bind:value. Когда пользователь вводит текст, значение name обновляется, и это изменение отражается в приветствии ниже.</p><h4>Инкапсуляция стилей</h4><p>В Svelte поддерживается инкапсуляция стилей на уровне самого компилятора. Если мы определяем стили внутри компонента, то они будут работать только в рамках него.</p><p><b>Например:</b></p><p>Svelte при компиляции присваивает атрибутам внутри элемента идентификатор — так он реализует инкапсуляцию стилей.</p><p>Вот пример идентификатора для тега «p»:</p><p>А вот  для стилей:</p><p>Если нам нужно, чтобы стиль был глобальным, то нужно использовать :global:</p><h4>Анимации из коробки</h4><p>Если в react анимации и переходы можно подключить только через сторонние библиотеки, то в Svelte они уже доступны из коробки.</p><p>Здесь есть:</p><ul><li><b>fade </b>— плавное появление/исчезновение элемента за счет изменения прозрачности.</li><li><b>fly </b>— плавное перемещение элемента с одного места в другое (можно указать направление и расстояние).</li><li><b>scale</b> — изменение размера элемента, создаёт эффект увеличения или уменьшения.</li><li><b>slide </b>— плавное скольжение элемента с одного края экрана в другой (например, слева или сверху).</li><li><b>draw </b>— анимация, которая используется для рисования элементов, например, для SVG-изображений.</li><li><b>blur </b>— плавное размытие элемента, создаёт эффект фокусировки/размытия.</li></ul><p><b>Пример анимации с использованием fly:</b></p><p>В этом примере элемент будет плавно перемещаться по горизонтальной оси (ось X), когда он появляется на экране.</p><p>По умолчанию анимации в Svelte работают локально, внутри компонента, как и стили. Но их можно сделать глобальными при помощи директивы :global:</p><p>Встроенные анимации в Svelte — это удобно. Благодаря компиляции они работают быстрее, чем в React, и нам не надо для этого использовать сторонние библиотеки. Хотя такая опция тоже остается.</p><h3>SolidJS: чем уникален, ключевые особенности</h3><h4>Компиляция вместо VDOM</h4><p>SolidJS похож на React. Тут тоже есть компоненты, реактивность и JSX. Но в отличие от своего старшего собрата он не поддерживает VDOM. Это здесь просто не нужно по той же причине, что и в Svelte. SolidJS более эффективно компилирует проект в чистый JS-код. В итоге страница рендерится быстрее, чем при работе в React с его виртуальным DOM.</p><h4>Гранулярная реактивность</h4><p>Реактивность в SolidJS работает при помощи сигналов. Сигналы хранят в себе данные и отслеживают их изменения. Если данные меняются, то происходит рендер только тех участков компонентов, с которыми эти сигналы связаны. Сам компонент целиком не рендерится в DOM, только его часть.</p><p>Пример кода с сигналами:</p><p>Здесь мы перерисовываем только элемент с данными внутри кнопки, а не саму кнопку. Так мы избегаем избыточной отрисовки лишних элементов интерфейса и оптимизируем производительность.</p><h4>Реактивные хранилища</h4><p>Реактивные хранилища напоминают сигналы, но на максималках. Если сигналы хранят и отслеживают единичные значения, то в хранилищах могут быть другие сигналы, массивы, объекты, обычные переменные, коллекции и состояния.</p><p><b>Пример создания реактивного хранилища:</b></p><p>При помощи реактивных хранилищ нам будет удобнее управлять состоянием и синхронизацией данных в приложении.</p><h2>Сравнение: Svelte, SolidJS и React</h2><p><b>Производительность</b></p><h4>Проблемы реактивности в React</h4><p>Реактивность в React реализована таким образом, что у нас обновляется не весь DOM, а только конкретный компонент через виртуальный DOM. В свое время это было прорывным решением. Если пользователь кликнул по кнопке, то у него изменялся не весь сайт, а только эта кнопка.</p><p>С выходом SolidJS и Svelte появились более производительные решения рендеринга интерактивных элементов. Всё благодаря компиляции кода без VDOM. Из-за такой реализации работы с DOM SolidJS и Svelte показывают большую производительность в бенчмарках.</p><h4>Сравниваем производительность SolidJS, Svelte и React в бенчмарках</h4><p>Для сравнения фреймворков я взял результаты тестов из бенчмарка <a href="https://krausest.github.io/js-framework-benchmark/2024/table_chrome_130.0.6723.58.html#eyJmcmFtZXdvcmtzIjpbImtleWVkL3JlYWN0LWhvb2tzIiwia2V5ZWQvc29saWQiLCJrZXllZC9zdHJ2ZS1yZWFjdGl2aXR5Il0sImJlbmNobWFya3MiOlsiMDFfcnVuMWsiLCIwMl9yZXBsYWNlMWsiLCIwM191cGRhdGUxMHRoMWtfeDE2IiwiMDRfc2VsZWN0MWsiLCIwNV9zd2FwMWsiLCIwNl9yZW1vdmUtb25lLTFrIiwiMDdfY3JlYXRlMTBrIiwiMDhfY3JlYXRlMWstYWZ0ZXIxa194MiIsIjA5X2NsZWFyMWtfeDgiLCIyMV9yZWFkeS1tZW1vcnkiLCIyMl9ydW4tbWVtb3J5IiwiMjNfdXBkYXRlNS1tZW1vcnkiLCIyNV9ydW4tY2xlYXItbWVtb3J5IiwiMjZfcnVuLTEway1tZW1vcnkiLCI0MV9zaXplLXVuY29tcHJlc3NlZCIsIjQyX3NpemUtY29tcHJlc3NlZCIsIjQzX2ZpcnN0LXBhaW50Il0sImRpc3BsYXlNb2RlIjoxfQ==">js-framework-benchmark results</a> для Chrome 130.0.6723.58. Использовались следующие версии фреймворков:</p><ul><li>Solid 1.8.15</li><li>Svelte 5.0.5</li><li>React 18.2.0</li></ul><p>Результаты тестов записаны в миллисекундах. В качестве режима отображения выбрано медианное значение. Когда мы видим запись 38.8 ± 0.2, она означает, что есть погрешность в 0.2 миллисекунды и разброс может быть от 38.6 до 39.</p><h4>Общая производительность</h4><figure><img src="https://media.tproger.ru/user-uploads/105039/2024-11-27/c2f9823e-1be6-43a7-902b-a7036fd0f2c1.png" alt="Тесты производительности" /><figcaption>Тесты производительности</figcaption></figure><p>Видно, что SolidJS — самый производительный из всей троицы. Следом идет Svelte с незначительным отставанием. React гораздо более медленный, в некоторых тестах он многократно уступает другим фреймворкам.</p><p>Несмотря на такое существенное превосходство Solid и Svelte над React в производительности, стоит учитывать, что речь идет о миллисекундах. В большинстве проектов такая разница будет не очень заметной.</p><p><b>Работа с памятью</b></p><figure><img src="https://media.tproger.ru/user-uploads/105039/2024-11-27/4d76187c-7cd6-4ddc-9033-759b61cd651f.png" alt="Тесты работы с памятью" /><figcaption>Тесты работы с памятью</figcaption></figure><p>React во всех случаях занимает память ощутимо больше, чем Svelte и SolidJS. Svelte незначительно, но уступает Solid.</p><p>Как и в случае с производительностью стоит отметить, что современные устройства вряд ли будут испытывать недостаток памяти при взаимодействии с решениями на этих фреймворках. Исключением могут быть кейсы, когда клиент использует плохое интернет-соединение.</p><p><b>Удобство разработки</b></p><h4>Простота синтаксиса</h4><p>Новичкам удобнее всего будет работать в Svelte. Там используется хоть и модифицированный, но более понятный HTML, CSS и JS. Благодаря этому код выглядит чище и проще.</p><p>Еще одно преимущество Svelte — декларативный подход к разработке. Мы просто прописываем, что хотим показать в интерфейсе, а все манипуляции выполняются под капотом.</p><p>Вот пример кода на Svelte, который создает простой счетчик:</p><p>Такой код выглядит минималистичным, его легко читать и поддерживать.</p><p>А вот реализация на JSX в React:</p><p>Этот код более массивный, для реактивности приходится использовать useState и вручную вызывать функцию setCount, чтобы обновить интерфейса.</p><p>Теперь сравним с реализацией в SolidJS:</p><p>Здесь реактивность работает из коробки, поэтому код выглядит чуть более удобным, чем в React. Но JSX синтаксис по-прежнему проигрывает в массивности и читаемости.</p><p>Svelte более удобный для разработки с точки зрения поддержки, читаемости чем React или Solid. К нему будет проще привыкнуть чем к фреймворкам где используют JSX. SolidJS более компромиссное решение. Здесь все под капотом, поэтому код немного лаконичнее, чем в React, но менее гибкий.</p><h4>Менеджер состояний</h4><p>В React управление состоянием традиционно строится на хуках, таких как useState и useReducer.</p><p>React обновляет компоненты при изменении состояния, используя виртуальный DOM, чтобы определить минимально необходимые изменения в реальном DOM. Это эффективно, но не идеально, так как виртуальный DOM требует дополнительных вычислений.</p><p>Переменные в компоненте Svelte до 5-ой версии автоматически становились реактивными. Но с пятой версии мы можем гибко управлять реактивностью при помощи специальных функций — рун.</p><p>Рассмотрим более подробно код из предыдущего примера со Svelte:</p><p>Здесь мы используем руну state(). Она хранит данные, которые автоматически обновляют интерфейс.</p><p>SolidJS использует fine-grained reactivity, подобно Svelte, но с еще более детальным контролем. SolidJS отслеживает зависимости на уровне отдельных переменных, обновляя только те части DOM, которые зависят от изменения переменной.</p><p>В этом примере Solid перерисовывает только текст внутри кнопки, а не всю кнопку при изменении данных:</p><p>SolidJS более тонко работает с состояниями и реактивностью, чем Svelte и React. Зато в последних есть возможность более гибко их настраивать.</p><p>Экосистема, документация и трудоустройство</p><h4>Зрелость React против развивающихся экосистем</h4><p>React гораздо популярнее, чем SolidJS и Svelte. По данным <a href="https://www.statista.com/statistics/1124699/worldwide-developer-survey-most-used-frameworks-web/">Statista</a>, React используют 39.5% веб-разработчиков. По своей популярности он уступает только NodeJS с его 40.8% (судя по данным, опрашиваемые могли выбрать несколько вариантов ответов). Для сравнения у Svelte 6.5%, а у SolidJS — 1.2%.</p><p>На React кодят больше. Это значит, что под него проще найти учебные материалы и получить ответы на вопросы на форумах. А у работодателей — более широкий пул кандидатов.</p><p>Аналогичная ситуация с библиотеками. Под React проще найти решение, чем под Svelte или Solid. Последние, конечно, тоже развиваются, но в плане размеров комьюнити и числа поддерживаемых библиотек им еще далеко до React.</p><p>Документация ко всем трём фреймворкам переведена на русский. В целом при подготовке статьи и сборе материалов чувствовалось, что о React есть много информации на русском, о Svelte меньше, а про SolidJS — в разы меньше.</p><h4>Трудоустройство</h4><p>На момент написания статьи React <a href="https://hh.ru/search/vacancy?L_save_area=true&amp;text=react&amp;excluded_text=&amp;salary=&amp;currency_code=RUR&amp;experience=doesNotMatter&amp;order_by=relevance&amp;search_period=0&amp;items_on_page=50&amp;hhtmFrom=vacancy_search_filter">упоминают </a>в 2669 вакансиях на hh.ru. Сотрудников без опыта рассматривают в 128 вакансиях. Кстати, в 270 вакансиях зачем-то хотят высшее образование :)</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2024-11-27/3f92c49a-d2ff-4823-a2ac-3bc3c7763c85.png" alt="Разброс вакансий React по требуемому опыту" /><figcaption>Разброс вакансий React по требуемому опыту</figcaption></figure><p>На Svelte нашлось только 43 <a href="https://hh.ru/search/vacancy?L_save_area=true&amp;text=Svelte&amp;excluded_text=&amp;salary=&amp;currency_code=RUR&amp;experience=doesNotMatter&amp;order_by=relevance&amp;search_period=0&amp;items_on_page=50&amp;hhtmFrom=vacancy_search_filter">вакансии </a>и ни одной без опыта.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2024-11-27/ceccbc0a-7ba2-458b-abf4-f8dc21188c0b.png" alt="Разброс вакансий Svelte по требуемому опыту" /><figcaption>Разброс вакансий Svelte по требуемому опыту</figcaption></figure><p>По запросу «SolidJS» нашлось 508 <a href="https://hh.ru/search/vacancy?L_save_area=true&amp;text=solid+JS&amp;excluded_text=&amp;salary=&amp;currency_code=RUR&amp;experience=doesNotMatter&amp;order_by=relevance&amp;search_period=0&amp;items_on_page=50&amp;hhtmFrom=vacancy_search_filter">вакансий</a>. Но многие из них точно не целевые и подразумевают не этот фреймворк. Пример нецелевой <a href="https://hh.ru/vacancy/110418894?query=solid+JS&amp;hhtmFrom=vacancy_search_list">вакансии</a>:</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2024-11-27/9ef89eae-d054-4d06-a4ac-cf44e3cdf4a7.png" alt="Вакансии Solid" /><figcaption>Вакансии Solid</figcaption></figure><p>Скорее всего, под SolidJS реальных вакансий будет примерно столько же, как и под Svelte, если не меньше.</p><h2>Ключевые преимущества для разных задач</h2><h3>Svelte лучше подходит для небольших проектов</h3><p>Хорошо подойдет для малых и средних проектов благодаря лаконичному коду и производительности.</p><h3>SolidJS отличный выбор для высоконагруженных интерфейсов</h3><p>Благодаря более точечной реактивности и компилируемости отлично подходит для проектов с высоко нагруженными интерфейсами.</p><p>Например, в дашбордах, графиках или редакторах (аналогичных Figma) SolidJS быстро реагирует на изменения данных, сохраняет плавность интерфейса даже под большой нагрузкой.</p><h3>React — по-прежнему оптимальное решение, но не всегда лучшее</h3><p>React все ещё подходит для большинства проектов, просто разработка на нем может быть дольше и сложнее из-за JSX. Также его не стоит использовать для проектов, которые предполагают работу в регионах с плохим интернет-соединением или слабым железом.</p><h2>Мнения экспертов</h2><blockquote>Большинство старых проектов Бюро сделаны на экспрессе + разный JS на фронте. Такой стек сложно поддерживать и развивать. Поэтому мы начали делать новые проекты на Свелт. Задача была как можно плавнее перевести ребят с разными навыками на современный стек. В итоге проекты на Свелт запускаются гораздо проще и работают в разы быстрее. Это всех подкупает.<br /><br />С одной стороны, кайф: все, кто верстают — стали верстать быстрее и проще. С другой стороны, разработчики привыкли к одним паттернам, а в Свелт они другие, и приходится это «ломать».<br /><br />Что касается действующих проектов, я не вижу смысла переезжать на Свелт с Реакта. Вообще не вижу смысла «на скаку» менять фреймворк. У нас был переезд проекта на Свелт, продлился год, и это было непросто. Но мы уткнулись в ограничения старой системы, и нам нужно было их решать.<br /><br />Смена фреймворка — слишком большой слом налаженных процессов. Это всегда очень больно и долго, и, как правило, того не стоит.</blockquote><blockquote>И Svelte, и SolidJS обгоняют React по скорости и весят меньше. В частности, не последнюю роль в этом играет отсутствие Virtual DOM. Но для меня это важно только как часть кругозора. Если у вас в приложении наблюдаются проблемы с производительностью на React, с огромной долей вероятности в этом виноват плохой код, а не сама библиотека. Да, Реакт практически обязывает тащить за собой кучу дополнительных библиотек на все случаи жизни, которые также могут быть проблемой в производительности. Но в целом разница в скорости в пару десятков миллисекунд незаметна. Если у компании/команды есть экспертиза в React и его экосистеме — переходить на другие инструменты без сильной причины (просто для более красивых циферок) не вижу смысла.<br /><br />Совсем другое дело, когда вы заранее знаете, что ваше приложение обещает быть тяжелым с точки зрения нагрузки или у конечных пользователей слабое железо (например, если вы выпускаете приложение на рынки Африки или Индии, для вас это актуально, тем более если им будут пользоваться с мобильных устройств). Но и здесь я бы не стал слепо отказываться от React’a — у него всё же есть много совместимых библиотек, легче найти решение проблемы. А вот с другими инструментами дела могут обстоять иначе, и не факт, что в лучшую сторону. Да, вы можете получить выигрыш в циферках производительности и веса сборки, но можно наступить на много граблей во время разработки, что сведет все преимущества на нет.<br /><br />В целом я считаю важным периодически осваивать новые фреймворки и библиотеки, такие как Svelte и SolidJS. У них есть свои преимущества, и о них важно знать. Так, в моменты, когда стоит реализовать именно эти преимущества, вы сможете проявить себя, предложив новый инструмент. Более того, это позволяет поддерживать свой кругозор, как специалиста, и осваивать новые подходы. Рано или поздно эти знания могут пригодиться и в проектах на том же самом React или в любом другом решении. Просто знать, что можно и как разрабатывать — сильно повышает экспертизу разработчика!</blockquote><h2>Стоит ли уходить с React?</h2><p>Зависит от проекта и ваших личных планов. Новичкам лучше оставаться на React — под него заточено большинство вакансий. Проект под SolidJS или Svelte будет найти сложнее, а на React уже написано много решений, которые надо поддерживать.</p><p>Для более опытных разработчиков Svelte будет лаконичным выбором, если они работают с небольшими проектами, но, опять же, React здесь тоже сгодится. SolidJS подойдет для создания веб-приложений и сайтов с высоконагруженными интерфейсами.</p><p>Тем, кто работает над новыми крупными проектами или поддерживает старые, лучше остаться на React. У него большое комьюнити и много библиотек. Да, он уступает другим библиотекам в производительности, но это отставание в большинстве проектов не будет критичным.</p><p>А какие фреймворками для разработки интерфейсов используете вы?</p>]]></content:encoded>
    </item>
    <item>
      <title>Python в Data Science: топовые библиотеки и фреймворки, которые будут популярны в 2025</title>
      <link>https://tproger.ru/articles/python-v-data-science--biblioteki-i-frejmvorki--kotorye-budut-populyarny-v-2025</link>
      <comments>https://tproger.ru/articles/python-v-data-science--biblioteki-i-frejmvorki--kotorye-budut-populyarny-v-2025?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/python-v-data-science--biblioteki-i-frejmvorki--kotorye-budut-populyarny-v-2025</guid>
      <description><![CDATA[<p>Python в Data Science. Показываем основные библиотеки и фреймворки, которые будут популярны в 2025. Рассматриваем преимущества и недостатки ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/python-v-data-science--biblioteki-i-frejmvorki--kotorye-budut-populyarny-v-2025">Python в Data Science: топовые библиотеки и фреймворки, которые будут популярны в 2025</a>»</p>]]></description>
      <category><![CDATA[Big Data]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 03 Dec 2024 10:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Python  в сфере Data Science остается топ-1 языком — это основная технология для для обработки данных, машинного обучения и разработки аналитических моделей. Например, в машинном обучении Питон <a href="https://medium.com/@byanalytixlabs/master-python-for-data-science-a-comprehensive-guide-for-beginners-62c87913eb4f">используют</a> 69% разработчиков. И в 2025 году году этот тренд будет только расти благодаря как развитию существующих инструментов, так и созданию новых.</p><p>Разработчики выбирают Python для аналитики данных и машинного обучения из-за его гибкости, универсальности, низкого порога входа и силы комьюнити. Он позволяет интегрироваться с практически любой технологией, а также поддерживает мощные библиотеки, такие как Pandas, NumPy и Scikit-Learn. А еще язык постоянно развивается — не так давно разработчики <a href="https://tproger.ru/articles/retro--kakie-novye-tehnologii-poyavilis-dlya-programmistov-i-razrabotchikov">выкатили</a> новую версию 3.13, в которой сильно улучшилась производительность. Ниже рассказываем о топовых фреймворках и библиотеках, которые будут популярны в 2025 году.</p><h2>Библиотеки для сложных вычислений</h2><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-11-28/d1d38bd4-0b83-4bfe-ace7-35b37a68b695.png" alt="Python в Data Science" /></figure><h3>NumPy и SciPy</h3><p>NumPy стала основой для большинства других библиотек, включая TensorFlow и PyTorch. Он используется для работы с массивами и числовыми данными. В машинном обучении почти каждый проект основан на эффективных математических функциях NumPy и точных операциях с массивами. И в плане векторов и многопоточности эта библиотека незаменима — на ней все держится.</p><p>Например, NVIDIA <a href="https://www.nvidia.com/en-us/glossary/numpy/">разрабатывает</a> CUDA — платформу параллельных вычислений и модель программирования для работы на графических процессорах NVIDIA. CUDA Array Interface стандартизирует формат передачи массивов GPU между библиотеками без копирования данных. Так, CuPy реализует массивы NumPy на GPU NVIDIA с использованием CUDA, а Numba компилирует Python-код для GPU с прямой поддержкой массивов NumPy. Apache MXNet использует NDArray — аналог NumPy для GPU, ускоряющий работу моделей глубокого обучения. Это к слову о том, что NumPy уже стала стандартом.</p><p>Поверх NumPy можно использовать SciPy — она расширяет способности базовой модели для статистики и моделирования.</p><h3>Pandas</h3><p>Pandas — еще один базовый инструмент для работы с данными в Python, который остается в топе благодаря производительности (Панды отлично справляются с огромным количеством данных). Она, кстати, тоже используется поверх NumPy.</p><p>Возможно, в будущем мы увидим улучшение поддержки многопоточности и оптимизацию для работы с большими наборами данных — это сделает библиотеку ещё актуальнее.</p><p>Панды используют для подготовки данных во многих проектах — от финансового анализа до биоинформатики. Например, в здравоохранении с помощью Pandas анализируют электронные медицинские записи и прогнозируют эпидемии.</p><h3>Dask</h3><p>Dask используется для распределённых вычислений и параллельной обработки больших массивов данных. Он является топовым дополнением к Pandas в случаях, когда объемы данных превышают возможности оперативной памяти. В будущем всё больше компаний будут применять связку Pandas + Dask, чтобы масштабировать свои аналитические системы.</p><h3>JAX</h3><p>Новая селебрити в вычислениях от Google! JAX активно набирает популярность за счет своей способности ускорять численные расчеты и различать собственные функции Python и NumPy. Ожидается, что к 2025 году JAX будет активно применяться для статистического моделирования и разработки новых алгоритмов.</p><h2>Топовые фреймворки для Machine и Deep Learning</h2><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-11-28/5f929938-1acb-4401-b59d-142dd7e0ae6c.png" alt="Библиотеки и фреймворки для Python в Data Science" /></figure><h3>TensorFlow — базовая база</h3><p>TensorFlow от Google остается основным инструментом в машинном обучении благодаря своей мощной экосистеме, включающей компоненты для обучения, развертывания и мониторинга моделей. Сейчас он выделяется улучшенной интеграцией с облачными платформами (особенно с Google Cloud) и поддержкой edge-устройств — это упрощает развертывание моделей в разных средах.</p><p>Так, TensorFlow Lite позволяет запускать модели на мобильных устройствах, IoT-устройствах и микроконтроллерах — инструмент используют в приложениях для распознавания речи и обработки изображений в реальном времени, в том числе и на смартфонах. А в TensorFlow Extended (TFX) есть фичи для построения масштабируемых пайплайнов, таких как автоматическая настройка моделей (TensorFlow Model Analysis) и эффективное развертывание (TensorFlow Serving). Это особенно полезно для продакшн-сред.</p><h3>PyTorch</h3><p>PyTorch стал любимчиком в среде разработчиков из-за удобства динамических вычислительных графов и pythonic-подхода, что упрощает отладку и разработку. PyTorch известен тем, что предоставляет две из самых высокоуровневых функций — тензорные вычисления с мощным графическим ускорением и поддержку построения глубоких нейронных сетей на ленточной системе autograd.</p><h3>Keras</h3><p>Сейчас Keras максимально интегрирован с TensorFlow, поэтому порог входа в машинное и глубокое обучение становится все ниже. Его высокоуровневый API позволяет разработчикам создавать прототипы сложных нейронных сетей с минимальным количеством кода, сохраняя при этом возможность выполнять операции более низкого уровня.</p><h3>Scikit-learn</h3><p>Scikit-learn сохраняет статус универсального инструмента для классического машинного обучения. Простота использования, стабильный API и широкая документация делают его максимально подходящим для задач от классификации до сложных пайплайнов, с акцентом на интеграцию с фреймворками глубокого обучения. В последних обновлениях улучшилась поддержка многопоточности и ускорений на основе Cython, а значит, работа с большим наборами данных идет быстрее.</p><h3>FastAI</h3><p>Фреймворк основан на PyTorch и продолжает демократизировать глубокое обучение. Действительно инновационный трендовый инструмент, особенно в области компьютерного зрения и NLP-задач.</p><h3>PyCharet</h3><p>Эта low-code библиотека превратилась в большое комплексное решение для автоматизации задач AutoML. Подходит для тестирования гипотез или базовых моделей, которые можно улучшать по мере необходимости, а еще крута в прототипировании.</p><h3>Ray</h3><p>Это унифицированный фреймворк для распределенных вычислений. То, что нужно в машинном обучении.</p><h2>Библиотеки для визуализации данных</h2><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-11-28/ba7c9de0-a6b3-43dc-9670-47669dcbd026.png" alt="" /><figcaption>Визуализация с помощью Matplotlib</figcaption></figure><h3>Matplotlib</h3><p>Основная библиотека для создания статических графиков. Отлично подходит для базовой визуализации, такой как линейные графики, столбчатые диаграммы, гистограммы и так далее.</p><h3>Seaborn</h3><p>Построена поверх Matplotlib и предлагает более стильные и готовые к использованию графики. Удобна для работы с табличными данными (например, из pandas DataFrame).</p><p>Подходит для визуализации распределений, тепловых карт, корреляций.</p><h3>Plotly</h3><p>Интерактивная библиотека, поддерживающая 2D и 3D-графики. Удобна для создания сложных визуализаций, которые можно использовать в веб-приложениях. Поддерживает интеграцию с Jupyter Notebook.</p><h3>Bokeh</h3><p>Еще одна интерактивная библиотека, подходящая для работы с большими наборами данных. Отлично работает с динамическими и веб-графиками.</p><h3>Altair</h3><p>Легкая и интуитивная библиотека, построенная на основе декларативных спецификаций. Удобна для быстрого создания сложных интерактивных графиков.</p><h3>Yellowbrick</h3><p>Расширяет возможности scikit-learn для визуализации моделей, метрик и диагностик. Включает визуализацию обучения, важности признаков и другие функции.</p><h3>Mayavi</h3><p>Для 3D-графики, особенно в научных и технических приложениях. Подходит для визуализации поверхностей, полей данных.</p><h3>TensorBoard</h3><p>Инструмент от Google для визуализации экспериментов TensorFlow. Удобен для анализа потерь, градиентов и обучения.</p><h2>Библиотеки для NLP</h2><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-11-28/d82c39be-4384-44b5-8b74-978b442234eb.png" alt="" /></figure><h3>Hugging Face Transformers</h3><p>Библиотека Transformers произвела революцию в обработке естественного языка, сделав современные модели доступными для всех. Здесь и BERT, и GPT — в общем, благодаря ей внедрение инновационных технологий стало доступно как никогда.</p><h3>NLTK и spaCy</h3><p>NLTK предоставляет комплексные образовательные ресурсы и исследовательскую платформу, а spaCy фокусируется на производительности. Если применять их вместе, то  библиотеки закроют весь пул потребностей в NLP — от академических исследований до промышленного применения.</p><h2>Библиотеки для работы с медицинскими данными</h2><p>Да-да, биотехнологии сейчас как никогда в тренде. И Python в них, можно сказать, впереди планеты всей. С помощью библиотек и фреймворков исследователи и разработчики могут анализировать сигналы мозга, строить прогнозы для пациентов и использовать AI для улучшения медицинской диагностики. Ниже — о них.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-12-03/88f305c7-09f7-4aae-a0f2-8b5151d70702.png" alt="" /><figcaption>0</figcaption></figure><h3>MNE</h3><p>MNE — это незаменимый инструмент для работы с сигналами мозга, такими как магнитоэнцефалография (MEG) и электроэнцефалография (EEG). Он позволяет не только обрабатывать, но и визуализировать сложные временные ряды. Анализ данных мозга стал проще: загружаем файл, настраиваем фильтры и видим всё в наглядных графиках. Отличный выбор для нейрофизиологов и исследователей.</p><h3>Nilearn</h3><p>Nilearn делает анализ данных нейровизуализации, таких как fMRI, доступным даже для новичков. Построение тепловых карт активности мозга, изучение соединений и интеграция с машинным обучением через scikit-learn — всё это в одной библиотеке. Инструмент помогает мостить путь от простого анализа до сложных моделей ИИ.</p><h3>MONAI</h3><p>Если нужно внедрить глубокое обучение в медицинскую визуализацию, то MONAI — ваш выбор. Построенная на базе PyTorch, эта библиотека идеально подходит для задач сегментации и классификации медицинских изображений. Поддержка форматов DICOM и NIfTI и совместимость с ускорением на GPU делают её незаменимой для медицинских исследований и стартапов.</p><h3>NiBabel</h3><p>Когда нужно работать с нейровизуализационными данными и понимать все эти сложные форматы (NIfTI, MINC, Analyze), на помощь приходит NiBabel. Она помогает легко конвертировать и анализировать данные перед дальнейшей обработкой в Nilearn или MNE. Простота использования и мощный функционал — за это её любят исследователи.</p><h3>Lifelines</h3><p>Клинические исследования и прогнозирование событий, например, рецидивов или смертности, невозможны без анализа выживаемости. Lifelines предоставляет мощные инструменты для построения каплан-майеровских графиков и моделей Кокса. Простота синтаксиса и визуализация наглядных графиков делают её популярной среди медиков и биостатистиков.</p><p>Python в сфере Data Science популярен не просто так. Его применяют в реальных задачах — от анализа поведения пользователей до прогнозирования эпидемий. Инструменты Python делают сложные задачи проще и помогают бизнесу, науке и технологиям развиваться быстрее.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как распознавать лица с помощью библиотеки FAISS</title>
      <link>https://tproger.ru/articles/raspoznavanie-lic-ispolzuya-bibliote-faiss</link>
      <comments>https://tproger.ru/articles/raspoznavanie-lic-ispolzuya-bibliote-faiss?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Исмаил Каранкин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/raspoznavanie-lic-ispolzuya-bibliote-faiss</guid>
      <description><![CDATA[<p>Сейчас технология распознавания лиц — одна из важнейших в самых разных областях. В статье расскажу о фреймворках и библиотеках, предназначенных именно для этого. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/raspoznavanie-lic-ispolzuya-bibliote-faiss">Как распознавать лица с помощью библиотеки FAISS</a>»</p>]]></description>
      <category><![CDATA[Распознавание]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 24 Nov 2024 08:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>В эпоху тотальной цифровизации и автоматизации задача распознавания лиц (face detection) стала одной из наиболее важных и актуальных задач машинного обучения, имеющей множество практических применений:</p><ul><li>Поиск преступника по записям с уличных камер;</li><li>Сигнал о том, что на частную территорию зашёл незнакомый человек;</li><li>Упрощение проверок на входе в организацию с пропускным режимом;</li><li>Оплата услуг с помощью FaceID и многое другое.</li></ul><p>Одной из проблем, возникающих при решении задачи face detection, является то, что лицо текущего человека нужно сравнивать со слишком большим количеством других лиц, что в случае неоптимальной реализации требует огромного количества машинных ресурсов.</p><p>Решению этой проблемы и посвящена статья.</p><h2>Постановка задачи</h2><p>Дана база фотографий, каждая из которых содержит лица одного или более человек (около 20 тысяч фотографий; пример приведён на рис. 1). На вход поступает новая фотография. Необходимо:</p><ol><li>Определить, является ли эта новая фотография дубликатом одной из фотографий, находящихся в базе, и если является — вывести информацию о совпадающей фотографии;</li><li>Если не является, то вывести одну или несколько наиболее похожих на неё фотографий из базы, а затем добавить эту новую фотографию в базу.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-11-24/106f9b04-97de-4c62-b17a-fb22bfac2d28.png" alt="" /><figcaption>Рисунок 1. Пример фотографии из базы</figcaption></figure><p>Фотографии считаются похожими, если похожи лица изображённых на них людей. На обработку каждой новой фотографии должно тратиться не более нескольких секунд машинного времени.</p><h2>Этапы решения поставленной задачи.</h2><p>Оптимизация хранения фотографий в базе. Выбор метода распознавания лиц.</p><p>Выбор метода поиска наиболее похожих лиц. Построение общего пайплайна.</p><h3>1. Оптимизация хранения фотографий в базе.</h3><p>Поскольку фотография хорошего качества может иметь размер вплоть до 10 мегабайт, 20 тысяч подобных фотографий могут занять до 200 гигабайт, и тогда даже попиксельное сравнение новой фотографии со всеми имеющимися в базе с целью поиска дубликата будет занимать как минимум несколько минут (не говоря уже о поиске похожих). Кроме того, разные фотографии имеют разную длину и ширину, что неудобно для сравнения.</p><p>Таким образом, необходимо каждой фотографии (а точнее — каждому лицу на фотографии) поставить в соответствие вектор чисел фиксированной длины. Эта длина не должна быть слишком маленькой (иначе большая часть информации на фотографии будет потеряна), но и не должна быть слишком большой (иначе сравнивать будет по-прежнему долго).</p><h3>2. Выбор метода распознавания лиц</h3><p>К счастью, существует достаточно много алгоритмов face detection, которые делают в точности то, что нам нужно:</p><ul><li>Определяют, где именно на фотографии находятся лица;</li><li>Для каждого из лиц возвращают вектор фичей, причём все эти векторы одинаковой длины.</li></ul><p>Одной из лучших современных библиотек для распознавания лиц является <a href="https://insightface.ai/">InsightFace</a>, которая получила много наград на соревнованиях по face detection. Поскольку эта библиотека является свободной и реализована на языке Python, было принято решение использовать именно её.</p><p>Реализация этой библиотеки по умолчанию возвращает 512 параметров для каждого лица, что полностью удовлетворяет требованиям, поставленным в предыдущем пункте: хранение такого количества параметров для 20 тысяч фотографий займёт около 200 мегабайт, что в тысячу раз меньше, чем при хранении самих фотографий. Файл такого размера легко помещается в оперативную память и может быть считан полностью за 1-2 секунды.</p><h3>3. Выбор метода поиска наиболее похожих лиц</h3><p>Тем не менее остаётся проблема с производительностью при поиске похожих, но не совпадающих лиц. Чтобы найти наиболее похожую фотографию (а тем более — несколько наиболее похожих), необходимо сравнить вектор фичей каждого из лиц на новой фотографии со всеми векторами из базы (на рис. 2 нужно сравнить каждый «зелёный» вектор с каждым «красным»):</p><figure><img src="https://media.tproger.ru/user-uploads/109120/2024-11-21/60331601-dabb-4498-a25b-1891d559a5ab.png" alt="" /><figcaption>Рисунок 2. Иллюстрация сравнения векторов фичей в базе и на новой фотографии</figcaption></figure><p>При этом для каждой пары сравниваемых векторов необходимо посчитать метрику близости (например, евклидово или косинусное расстояние), что также является достаточно затратной операцией.</p><p>Таким образом, хотя при 20 тысячах фотографий, имея достаточно быстрый компьютер, мы сможем выполнить все сравнения за несколько секунд, такое решение будет плохо масштабируемым: при 200 тысячах фотографий нам придётся выполнять сравнение уже в 10 раз дольше, а при 1 миллионе — дольше в 50 раз, что уже неприемлемо.</p><p>Кроме того, нам нужно найти лишь одну или несколько наиболее похожих фотографий, а не отранжировать их все по убыванию похожести, поэтому бóльшая часть вычислений будет лишней, так что должен существовать способ делать это более оптимально.</p><p>И действительно — существуют библиотеки эффективного поиска похожих векторов. Одной из наиболее популярных и простых в использовании является библиотека <a href="https://ai.meta.com/tools/faiss/">FAISS</a> (Facebook AI Similarity Search, принадлежит компании Meta, запрещенной на территории РФ). Её суть заключается в создании индекса (оптимизированной таблицы) из всех имеющихся векторов, а затем приближённого поиска в ней нового вектора.</p><p>Хотя библиотека <a href="https://github.com/google-research/google-research/tree/master/scann">scann</a> от компании Google работает в 2-3 раза быстрее, она требует намного больше предварительных настроек, так что её использование станет оправданным лишь при существенном увеличении датасета. Поэтому в данном случае выбор был сделан в сторону FAISS.</p><h3>4. Построение общего пайплайна</h3><p>При постановке задачи нам была дана база с фотографиями, поэтому итоговая реализация алгоритма должна содержать следующие шаги:</p><ol><li>Определение лиц на фотографиях и получение их фичей;</li><li>Конвертация фотографий из базы в таблицу с векторами фичей;</li><li>Построение индекса и нахождение похожих фотографий;</li><li>Добавление новой фотографии в базу.</li></ol><p>Приведём примерную реализацию каждого из этих пунктов на языке Python с учётом того, что база фотографий представляет собой папку с файлами.</p><p>1) <b>Определение лиц на фотографиях и получение их фичей.</b> Этот шаг полностью основан на алгоритме FaceAnalysis библиотеки insightface, при этом все фотографии предварительно преобразуются в матрицы размера 640 * 640 *3 (то есть квадратные фотографии размера 640 * 640 пикселей в RGB-формате).</p><p>Подготовка алгоритма FaceAnalysis:</p><figure><img src="https://media.tproger.ru/user-uploads/109120/2024-11-21/5a04e643-802d-4b97-8709-f04528a08b58.png" alt="" /><figcaption><br /></figcaption></figure><p><b>2)</b> <b>Конвертация фотографий из базы в таблицу с векторами фичей.</b> Теперь нужно применить функцию, приведённую в шаге 1, ко всем фотографиям из заданной папки и записать её в таблицу (в данном случае это будет локальный csv-файл).</p><p>Функция получения таблицы с фичами из всех фотографий в папке:</p><p>Пример использования функции:</p><p>Если найденное минимальное расстояние по фичам оказалось равным нулю, то это значит, что мы нашли дубликат.</p><p>3) <b>Добавление новой фотографии в базу.</b> Мы можем выбирать, что делать с фотографией, которая оказалась дубликатом — добавлять в базу или игнорировать. Если же новая фотография не является дубликатом, то мы добавляем её в базу в любом случае.</p><p>Пример тестирования программы на новой фотографии, содержащей два лица:</p><figure><img src="https://media.tproger.ru/user-uploads/109120/2024-11-21/f4e47bfb-a874-4e51-a5b2-40f8c5240ae5.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/109120/2024-11-21/2cd1f075-9399-4ff2-bcc1-8c9120ba19f4.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/109120/2024-11-21/246fb397-b085-4dd8-9175-88f1bf5804a4.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/109120/2024-11-21/9a646670-a7b4-4763-afc6-446e9f0de85b.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/109120/2024-11-21/d9246107-e4b9-430c-af5a-179a402d58d6.png" alt="" /></figure><h2>Заключение.</h2><p>Рассмотренное решение удовлетворяет всем требованиям поставленной задачи, однако его реализация имеет пространство для дальнейшей оптимизации, в частности:</p><ul><li>Стоит использовать графический процессор вместо CPU; тогда версию FAISS можно будет заменить на faiss-gpu для быстродействия;</li><li>Локальные таблицы стоит заменить на распределённую базу данных; это значительно улучшит масштабируемость, а добавление новой фотографии не потребует считывания и затем сохранения всего файла;</li><li>Извлечение фичей из фотографий стоит делать не по одной, а батчами по нескольку десятков фотографий - это существенно ускорит первый, самый долгий этап решения задачи.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Лучшие инструменты для тестирования на проникновение: от Metasploit до Burp Suite</title>
      <link>https://tproger.ru/articles/luchwie-instrumenty-dlya-testirovaniya-na-proniknovenie--ot-metasploit-do-burp-suite</link>
      <comments>https://tproger.ru/articles/luchwie-instrumenty-dlya-testirovaniya-na-proniknovenie--ot-metasploit-do-burp-suite?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/luchwie-instrumenty-dlya-testirovaniya-na-proniknovenie--ot-metasploit-do-burp-suite</guid>
      <description><![CDATA[<p>Лучшие инструменты для тестирования на проникновение. Показываем основные фреймворки. Рассматриваем преимущества и недостатки ✔ Tproger
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/luchwie-instrumenty-dlya-testirovaniya-na-proniknovenie--ot-metasploit-do-burp-suite">Лучшие инструменты для тестирования на проникновение: от Metasploit до Burp Suite</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, 22 Nov 2024 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Полноценная защита веб-приложений и инфраструктуры от проникновения со стороны — критически важная характеристика любого программного продукта. Тестирование систем, то есть из испытание на прочность и степень защищенности от взлома, проводится разными методами. Есть десятки разнообразных инструментов, которые имитируют хакерские атаки, чтобы обнаружить уязвимости в приложении или сети еще до того, как этим займутся злоумышленники.</p><p>Разработчики проводят испытания на возможность взлома, чтобы узнать, насколько программные ресурсы защищены от стороннего доступа. В этом случае тестировщики становятся «белыми хакерами» и собирают как можно больше сведений о статусе системы. В зависимости от результатов исследования специалисты внедряют новые решения или оставляют всё как есть, удовлетворенные уровнем защиты.</p><p>Обеспечить безопасность всех критически важных элементов системы не так просто. В протекции нуждаются операционные системы, драйверы, сети, базы данных, фреймворки и библиотеки, а также, собственно, код. Тестирование этих компонентов в ручном режиме потребует колоссальных затрат средств и времени. По этой причине организации применяют специальные инструменты для тестирования веб-приложений и других продуктов.</p><p>В статье расскажем о топовых системах для проведения испытаний — об их возможностях, преимуществах, ограничениях и сценариях использования.</p><h2>Metasploit Framework</h2><p>Многофункциональный фреймворк для сканирования сетей и серверов с целью выявления слабых мест в системе безопасности. Инструмент имеет открытый исходный код, что идет ему только на пользу — программы постоянно совершенствуется, добавляются новые функции.</p><p>Эксперты считают Metasploit одним из самых мощных инструментов в деле защиты веб-приложений и других продуктов. У него множество функций, подробная документация и свободный доступ к скачиванию на официальном сайте фреймворка.</p><p>Metasploit создан сообществом разработчиков в сотрудничестве с компанией Rapid7. Фреймворк помогает специалистам по безопасности не просто находить существующие уязвимости, но и выявлять потенциальные угрозы, тем самым работая на опережение.</p><p>Основные преимущества фреймворка:</p><ul><li><b>Обширная библиотека. </b>Состоит из 1600 эксплойтов (программ, использующих уязвимости), сканеров, слушателей (модулей для сбора данных), кодеров, декодеров и сотен других компонентов для проверки безопасности.</li><li><b>Автоматизированные инструменты для пентеста.</b> Используются в процессе разработки и после релиза — с их помощью специалисты решают оборонительные и наступательные задачи.</li><li><b>Наличие Мастера проверки уязвимостей.</b> Он распределяет проблемы безопасности системы в приоритетном порядке, устанавливая очередность устранения этих уязвимостей.</li><li><b>Универсальность.</b> Подходит для любых программных продуктов, сетей и элементов инфраструктуры.</li><li><b>Доступность. </b>У фреймворка простая структура управления и понятный интерфейс, а его рабочая версия доступна в бесплатном режиме.</li></ul><p>Метасплойт создает планы атак и самостоятельно их реализует. Они имитирует попытки взлома системы и быстро находит слабые места. При этом инструменты фреймворка сами оценивают, насколько опасны найденные уязвимости и как ими могут воспользоваться злоумышленники для проникновения в систему.</p><h2>Nmap</h2><p>Утилита (сканер) для быстрого и простого исследования сетей и тестирования безопасности. Обнаруживает активные устройства и вредоносные программы. Инструмент называют сетевым картографом  — он действительно картирует сеть, после чего анализирует ответы.</p><p>С помощью Nmap специалисты по безопасности проверяют компоненты операционных систем и запущенные службы, находят открытые порты, тестируют брандмауэры и оценивают потенциальные угрозы.</p><p>Ключевые преимущества утилиты:</p><ul><li><b>Универсальность. </b>Nmap работает с разными операционными системами — Windows, Linux, macOS.</li><li><b>Совместимость с другими средствами.</b> Инструмент можно использовать в сочетании с фреймворком Metasploit, чтобы автоматизировать выявление уязвимостей.</li><li><b>Гибкость и возможность тонкой настройки.</b> Возможность быстрого или более медленного, но детального сканирования. В числе интересных фич — наличие скрипта для проверки узлов на присутствие сетевого червя Stuxnet.</li><li><b>Подробная документация. </b>Есть справочное руководство на русском языке и полезные статьи по работе с инструментом.</li><li><b>Возможность масштабирования.</b> Утилита подходит для тестирования любых сетей, в том числе обширных с тысячами машин.</li></ul><p>Nmap поучал статус «Продукта безопасности года» от профессиональных журналов и сообществ, что говорит о востребованности сканера и его качественных характеристиках.</p><p>Инструмент прост для установки, доступен в версиях с понятным графическим интерфейсом и командной строкой. Базовая версия бесплатна, но в ней отсутствует ряд важных опций.</p><h2>Burp Suite</h2><p>Этот высокоэффективный программный комплекс представляет собой набор утилит и используется для тестирования безопасности. Инструмент разработан PortSwigger, доступен в бесплатной и платной версиях. Один из наиболее востребованных вариантов применения — перехват трафика, в том числе HTTP-запросов.</p><p>В числе плюсов Burp Suite:</p><ul><li><b>Многофункциональность. </b>Фреймворк активно используется специалистами по безопасности, пентестерами, разработчиками для выявления уязвимостей и потенциально слабых мест в приложениях или API.</li><li><b>Модульная структура. </b>Состоит из отдельных элементов — сканера, прокси-сервера, ретранслятора, секвенсора. При имитации атак модули работают совместно,  выполняя различные тестировочные задачи.</li><li><b>Возможность работы в связке.</b> Используется в комбинации с Metasploit и Nmap для решения масштабных задач на безопасность продуктов.</li></ul><p>Интегрированная платформа применяется для тестирования в ручном и автоматическом режимах и взаимодействует со всеми популярными ОС.</p><p>Применить Burp Suite для базовых проверок довольно просто:</p><ol><li>Пользователь открывает панель управления и выбирает опцию New scan.</li><li>В поле для URL вводит адрес тестируемого сайта и нажимает Ок.</li><li>Утилита создает карту сайта, далее сканер начинает поиск уязвимостей.</li><li>Актуальный список проблемных точек появляется в окне Issue activity.</li><li>После выбора проблемы тестировщик получает доступ к вкладкам, где содержится детальное описание уязвимостей и рекомендуемые способы их устранения.</li></ol><p>Burp выпускается в трех редакциях — корпоративной, профессиональной и бесплатной. Версия Community Edition — отличный вариант для начинающих тестировщиков.</p><h2>Wireshark</h2><p>Инструмент с открытым исходным кодом, используемый для анализа сетевых протоколов, выявления аномалий и возможных атак. Применяется в различных ОС для захвата текущего сетевого трафика, чтобы исследовать его на проблемы с безопасностью. Проект, запущенный еще в 1998 году, развивают эксперты по технологиям безопасности со всего мира.</p><p>Проверять и фильтровать сетевые пакеты можно в режиме реального времени, что позволяет сконцентрироваться на исследовании статуса конкретного трафика.</p><p>Базовые возможности и преимущества Wireshark:</p><ul><li>углубленная проверка сотен протоколов безопасности и постоянные обновления;</li><li>перехват трафика в онлайн-режиме и автономный анализ данных;</li><li>мультиплатформенность — работа на всех ОС, включая Windows, Linux, FreeBSD и многих других;</li><li>сетевые данные можно анализировать с помощью графического интерфейса;</li><li>содержит наиболее мощные и подробные фильтры отображения среди анализаторов трафика.</li></ul><p>Wireshark — бесплатный анализатор, относительно простой в освоении и управлении. Это эффективное решение для организаций любого масштаба и профиля: инструментом можно оснастить всех специалистов компании, в том числе сисадминов.</p><p>После захвата трафика пользователь видит экран, на котором отображены пакеты и их декодирование. Эксперты утверждают, что декодировка в Wireshark выполняется на самом высшем уровне, однако далее все зависит от навыков оператора и его компетенций в сфере протоколов.</p><p>Основная сложность в использовании анализатора — это грамотная настройка фильтров. На экране отображается количество серверов, потоки данных, список проблем, на которые стоит обратить внимание. Требуется время, чтобы разобраться с фильтрами, но зато после освоения функционала работа с программой становится простой и удобной.</p><h2>SQLmap</h2><p>Этот инструмент представляет собой фреймворк эксплойтов, то есть набор инструментов для тестирования различных уязвимостей. У SQLmap открытый исходный код, что делает его востребованным и доступным вариантом для постоянного использования.</p><p>Фреймворк автоматизирует процессы обнаружения уязвимостей и операции с ними. SQLmap поддерживает множество систем управления базами данных, в том числе MySQL, Amazon Redshift, Oracle. Пентестеры часто используют этот инструмент в комбинации с ручным управлением.</p><p>Возможности SQLmap:</p><ul><li>фреймворк обнаруживает такие проблемы веб-приложений, как SQL-инъекции (фрагменты вредоносного кода, внедренные в базы данных);</li><li>есть функции взлома хэшей, а также сброса столбцов и таблиц;</li><li>тестирование выполняется автоматически — тестеру нужно лишь задать несколько параметров и запустить нужные опции, остальное SQLmap сделает сам;</li><li>SQLmap обнаруживает уязвимые URL-адреса и дает рекомендации для работы с ними;</li><li>для работы с фреймворк не нужны навыки написания сценариев, достаточно знать, что собой представляют запросы к базам данных.</li></ul><p>Чтобы напрямую взаимодействовать с базами данных, достаточно указать учетные сведения, имя, IP-адрес, порт. Далее инструмент работает в самостоятельном режиме.</p><h2>John the Ripper</h2><p>Это инструмент используется для проверки надежности паролей и их восстановления. «Джон Потрошитель» выявляет уязвимости в системе безопасности организации и обеспечивает эффективное управление корпоративными паролями.</p><p>John the Ripper взламывает пароли, зашифрованные с помощью распространенных алгоритмов шифрования, включая MD5 и SHA.</p><p>Основные плюсы:</p><ul><li>открытый исходный код — постоянные обновления и улучшения со стороны экспертного сообщества;</li><li>поддержка сотен кэшей и различных шифров;</li><li>используются собственные оптимизированные модули для соответствующих процессорных архитектур;</li><li>пакет Ripper поставляется со множеством вспомогательных утилит.</li></ul><p>Взломщик изначально создан с упором на скорость и многофункциональность. В одной программе сочетается несколько режимов взлома, что позволяет настроить инструмент под конкретные запросы. John the Ripper работает на разных платформах, что позволяет использовать его везде, где это необходимо.</p><h2>Aircrack-ng</h2><p>Комплекс программ для тестирования беспроводных сетей, захвата передаваемого трафика, проверки надежности ключей шифрования. Инструмент работает со всеми беспроводными адаптерами с режимом мониторинга.</p><p>Возможности Aircrack-ng:</p><ul><li>работает с ОС Windows, UNIX, Linux, а также Zaurus и Maemo;</li><li>анализирует трафик и отображает данные о сетях;</li><li>создает виртуальный интерфейс для удобного управления;</li><li>хранит пароли и управляет их списками;</li><li>восстанавливает ключи.</li></ul><p>Функционал Aircrack-ng достаточно обширен: в нем есть программы для настройки ложных точек доступа, расшифровки файлов WEP/WPA/WPA2, работы с беспроводными драйверами. .</p><h2>Другие полезные инструменты</h2><p>Инструментов для тестирования безопасности десятки. Их цель — имитация реальных атак на системы или конкретное веб-приложение. Задача пентестера — понять, смогут ли злоумышленники взломать сеть, пароли и воспользоваться другими уязвимостями.</p><p>Тестировщикам будет полезно узнать о дополнительных программах, известных в сфере цифровой безопасности:</p><ul><li><b>Hydra. </b>Популярный взломщик паролей. Выполняет атаки методом перебора различных протоколов и методов шифрования. Поддерживает различные варианты аутентификации (HTTP, FTP, SMB), работает с огромным количеством онлайн-сервисов, что делает «Гидру» универсальным инструментом. Атака брутфорс выполняет взлом по имени пользователя и паролю одновременно.</li><li><b>Nikto.</b> Веб-сканер, которые избавляет тестировщиков и разработчиков от рутинных операций. Программа находит не до конца удаленные части скриптов, инструменты администрирования и проверяет сайт или приложение на различные ошибки, в том числе возникшие по вине человеческого фактора. Обнаружив нежелательные элементы и слабые места, Nikto сообщает о них пользователю.</li><li><b>OWASP ZAP</b>. Еще один бесплатный инструмент для проверки безопасности веб-ресурсов. Сканирует приложения, анализирует полученные ответы, выявляет потенциальные опасности, в том числе SQL-инъекции и нежелательный скриптинг (XSS). У OWASP удобный графический интерфейс, который работает на всех популярных платформах.</li></ul><h2>Итоги</h2><p>Киберугроз, которые приходят из сети и других источников, становится все больше, что вынуждает специалистов постоянно следить за безопасностью сайтов, сетей, приложений и базами данных.</p><p>Пентестинг с помощью профильных инструментов — это практически полностью автоматизированный способ проверить ресурсы на уязвимости и проблемные места. Тестирование на проникновение — это возможность оценить уровень безопасности продукта и при необходимости добиться максимальной степени защищенности. Выбор инструмента зависит от особенностей, масштаба и направленности продукта, который нуждается в проверке и защите.</p>]]></content:encoded>
    </item>
    <item>
      <title>Django vs FastAPI в 2025 году: какой фреймворк выбрать?</title>
      <link>https://tproger.ru/articles/django-vs-fastapi-v-2025-godu--kakoj-frejmvork-vybrat-</link>
      <comments>https://tproger.ru/articles/django-vs-fastapi-v-2025-godu--kakoj-frejmvork-vybrat-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Киселев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/django-vs-fastapi-v-2025-godu--kakoj-frejmvork-vybrat-</guid>
      <description><![CDATA[<p>Django и FastAPI — одни из самых популярных фреймворков Python. Разбираемся, какой фреймворк выбрать начинающим разработчикам в 2025 году. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/django-vs-fastapi-v-2025-godu--kakoj-frejmvork-vybrat-">Django vs FastAPI в 2025 году: какой фреймворк выбрать?</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 20 Nov 2024 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В этой статье мы подробно разберем все основные критерии при выборе между фреймворками Django и FastAPI для начинающих свой путь разработчиков — востребованность фреймворка на рынке труда, тренды, которые повлияют на их востребованность в будущем, а так же важные особенности, которые нужно учитывать при выборе.</p><h2>Популярность и востребованность</h2><h3>Вакансии на рынке труда</h3><p>Начнем с самого важного. Количество вакансий с упоминанием фреймворка напрямую отражает, насколько просто будет найти/сменить работу в том или ином стеке. <br /></p><p>Стоит иметь ввиду, что на многие позиции рассматривают разработчиков с опытом или Django, или FastApi (выглядят, как «опыт работы с Django/FastAPI»), так что точно понять, сколько проектов на одном фреймворке, а сколько на другом, затруднительно.</p><p>На российском рынке труда FastAPI на конец 2024 года в итоге смог обогнать Django по количеству вакансий. Вот цифры с HeadHunter:</p><figure><img src="https://media.tproger.ru/user-uploads/109103/2024-11-18/dad48141-91c3-4653-bb66-3e1c336b12c6.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/109103/2024-11-18/e0c7e736-e4f5-4fd7-8b66-1113b5f12c75.png" alt="" /></figure><p>Ровно год назад Django опережал FastAPI в два раза. Сейчас отрыв небольшой, но есть все основания полагать, что он будет увеличиваться.</p><p>Для разработчиков уровня junior ситуация в целом одинаковая:</p><figure><img src="https://media.tproger.ru/user-uploads/109103/2024-11-18/f3b1dcb4-c47e-493f-b921-ce33b4a3f45e.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/109103/2024-11-18/e7250c0e-1874-4e34-959d-206a035f4628.png" alt="" /></figure><p>Кратко об используемых фильтрах:</p><ul><li>Уровень дохода: любой</li><li>Регион: Россия<br /></li><li>Опыт: не имеет значения<br /></li><li>Ключевые слова: в названии вакансии, в названии компании, в описании вакансии.<br /></li></ul><h3>GitHub-звёзды</h3><p>Косвенный критерий «популярности» фреймворка в мире.<br /></p><ul><li>Django: <b>80,998</b> звёзд.<br /></li><li>FastAPI: <b>77,700</b> звёзд.</li></ul><p>Учитывая немалый возраст Django, он практически наравне с FastAPI. <br />За год Django прибавил 15% (было 70 тысяч звёзд), а FastAPI — около 25% (было 60 тысяч звёзд). Так что можем сделать вывод, что FastAPI выходит вперед не только на нашем рынке.<br /></p><h2>Особенности фреймворков</h2><h4>Django: держи всё сразу, даже если не нужно</h4><p>Django предлагает готовую архитектуру и тонну встроенных инструментов, которые помогают разработчикам быстро освоить основные концепции и паттерны разработки.</p><p>Работа с миграциями в Django вместе с DjangoORM помогает научиться работать с базами данных без лишних страданий. Так же в мире Django преобладает синхронный код, так как асинхронность доступна с ограничениями. Автоматическая документация, которую так часто ставят в плюс FastAPI, подключается за 15 минут с помощью drf-spectacular.</p><p>На Django часто пишут продукты для использования внутри компании, а так же b2b.  Шанс встретить здесь реально большие нагрузки и сложную архитектуру крайне не велик.<br /></p><h4>FastAPI: гибко, но пустовато</h4><p>FastAPI менее регламентирован, что позволяет разработчикам выбирать подходящую архитектуру самостоятельно. Стартуем с одним файлом, так что есть манёвр и для творчества, и для костылей:) Лучше найти готовые шаблоны проекта на GitHub.<br /></p><p>Большинство проектов на FastAPI асинхронные. С одной стороны, это отличный навык в копилку любому разработчику. С другой стороны, на мой субъективный взгляд, новичкам сложнее вникать в такие проекты.<br /></p><p>Многие проекты на FastAPI используют микросервисы. Также с таким стеком чаще всего встречаются хайлоад-проекты. <br /></p><h2>Что будет дальше?</h2><p>FastAPI набирает популярность, и это уже не остановить. Основные причины:</p><ol><li>Выше производительность, чем у Django. Здесь дает преимущество асинхронность. Разница может быть в 5 раз и более.<br /></li><li>Лёгкий и минималистичный. Лучше вписывается в концепцию микросервисов. Django в микросервисы никто не тащит (я надеюсь).<br /></li><li>Быстрее развивается. В FastAPI всего около 20к строк кода. Тем временем разработчикам Django приходится тащить за собой 300к строк кода.<br /></li></ol><p>Всё это приводит к тому, что Django постепенно теряет позиции. Тренд продолжится и дальше, а его итоги подведём ближе к декабрю 2025 года.<br /></p><h2>Заключение</h2><p>Еще год назад я бы без раздумий всем начинающим порекомендовал Django. Но сейчас выбор становится очень сложным. С одной стороны, Django намного лучше подходит начинающим, с другой стороны, количество вакансий продолжит снижаться. Через год отрыв может быть 3 к 1 в пользу FastAPI. <br /></p><p>Также в выборе важно учитывать и свои предпочтения, так как легче всего развиваться в проектах, которые вам нравятся.</p><p>Чтобы оставаться на связи, приглашаю в свой <a href="https://t.me/kisel_it">telegram-канал</a>. Пишу про разработку интересно и без воды :)</p>]]></content:encoded>
    </item>
    <item>
      <title>Топ JavaScript-фреймворков для быстрой разработки в 2025</title>
      <link>https://tproger.ru/articles/top-javascript-frejmvorkov-dlya-bystroj-razrabotki-v-2025-253020</link>
      <comments>https://tproger.ru/articles/top-javascript-frejmvorkov-dlya-bystroj-razrabotki-v-2025-253020?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-javascript-frejmvorkov-dlya-bystroj-razrabotki-v-2025-253020</guid>
      <description><![CDATA[<p>Топ JavaScript фреймворков в 2025. Рассказываем об основных фреймворков для быстрой разработки. Рассматриваем преимущества и недостатки ✔ Tproger
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-javascript-frejmvorkov-dlya-bystroj-razrabotki-v-2025-253020">Топ JavaScript-фреймворков для быстрой разработки в 2025</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 20 Nov 2024 09:10:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Фреймворки — многофункциональные платформы с набором специализированных инструментов и библиотек, которые сильно упрощают и ускоряют разработку приложений и других продуктов. Программисты говорят, что фреймворки упорядочивают хаос и задают рамки, в которых работа выполняется более эффективно.</p><p>JavaScript считается наиболее востребованным  языком сценариев для создания веб-продуктов, интерфейсов, фронтенд- и бэкенд-частей сайтов, мобильных приложений. Для этого языка создано множество фреймворков различного назначения и профиля.</p><p>Узнаем, какие фреймворки JavaScript наиболее востребованы для разработки в 2025 году, каковы их сильные стороны и особенности, и как правильно выбрать продукт для своего проекта.</p><h2>Преимущества фреймворков</h2><p>Методы и функции, написанные на JavaScript и называемые фреймворками, представляют собой готовые решения для использования разработчиками. Эти структуры отвечают за взаимодействие приложений с серверами и значительно упрощают манипулирование элементами программных продуктов. Как правило, у них открытый исходный код, что позволяет программистам постоянно вносить улучшения.</p><p>В числе основных преимуществ фреймворков для разработки:</p><ul><li><b>Эффективность.</b> Применение уже готовых функций шаблонов повышает качество разработанных проектов. Программисты пишут меньше кода, он более чистый, а сама задача выполняется оперативнее.</li><li><b>Стоимость.</b> Разработка веб-приложений обходится дешевле за счет сокращения ресурсов, при этом фреймворки JavaScript доступны всем желающим.</li><li><b>Скорость.</b> У большинства фреймворков JavaScript отличная документация, в которой подробно описана работа всех функций. По каждому продукту существует обширная группа поддержки, работает множество форумов для профи и любителей. Все это предоставляет разработчикам массу дополнительной информации, что упрощает задачу.</li><li><b>Масштабирование.</b> При необходимости дальнейшего развития программных продуктов фреймворки JavaScript используются для их адаптации под более широкую аудиторию пользователей или дополнительные опции.</li></ul><p>Далее рассмотрим топ лучших фреймворков для языка скриптов, которые помогут разработчикам создавать 2025 году качественные, быстрые и производительные веб- и мобильные приложения.</p><h2>React</h2><p>Когда профессиональные разрабы говорят о лучших фреймворках JavaScript, они обязательно называют в первых рядах React. По сути не совсем фреймворк, а обширная библиотека, предназначенная для создания наиболее сложных пользовательских интерфейсов  для веб- и нативных приложений. В 2025 году React остается в топе актуальных инструментов отрасли.</p><p>Основные преимущества React:</p><ul><li><b>Изолированность компонентов. </b>Это свойство позволяет разработчикам разделять пользовательские интерфейсы и работать с каждым модулем по отдельности. Это обеспечивает платформам стабильную работу — если в одной из опций возникают сбои, это никак не сказывается на статусе остальных.</li><li><b>Декларативный подход.</b> Несмотря на использование кода на JavaScript, фреймворк React работает в декларативном режиме. То есть разработчик описывает желаемое содержание интерфейса, а библиотека реализовывает эту задачу. Поэтому программировать и настраивать продукты на React проще, чем писать классический код на JS.</li><li><b>Наглядность.</b> Это качество — прямое следствие декларативности. Поскольку на React сразу указывается итоговое состояние конкретного объекта, разработчику при написании кода заранее известно, как элемент будет смотреться на странице.</li><li><b>Утилитарность компонентов.</b> Созданные на React элементы можно не прописывать каждый раз заново при добавлении новых опций. Эти части можно копировать и вставлять в другие разделы. При этом в каждом компоненте содержатся все необходимые сведения и методы для реализации конкретных функций.</li><li><b>Использование JSX.</b> Это расширение JavaScript, в котором сочетается язык программирования и HTML. Инструмент предназначен для работы с разными компонентами на странице независимо от состояния прочих объектов. При этом части, которые выглядят в строке как HTML, сохраняют синтаксис JSX.</li><li><b>Отзывчивость.</b> React работает с DOM — объектной моделью документа. В копии есть все элементы веб-приложения и данные об их взаимодействии. Когда пользователи совершают действия, сначала реагирует виртуальная копия, затем реальная. То есть пользователь видит результат действий мгновенно, даже если сама платформа «тяжелая».</li><li><b>Дополнительные инструменты.</b> По причине популярности React разработчики-энтузиасты создали десятки совместимых с фреймворком инструментов. Один из них — React Native для развертывания продуктов в разных ОС и на любых устройствах с помощью стандартных протоколов.</li></ul><p>Обширная экосистема React — это бесшовная и ускоренная разработка современных интерактивных интерфейсов, которые активно используются в самых популярных соцсетях. Библиотека продолжает развиваться и остается наиболее востребованной в среде опытных и начинающих программистов.</p><h2>Vue.js</h2><p>Прогрессивный фреймворк для разработки пользовательских интерфейсов. Отличается легкостью освоения, содержит множество полезных нововведений и улучшений в свежих версиях. Разработчики считают Vue.js идеальным выбором для быстрого прототипирования и использования небольшими командами.</p><p>Этот фреймворк подходит для постепенной интеграции, то есть внедрять его можно для отдельных страниц, что делает разработку более простой и доступной.</p><p>Основные плюсы Vue:</p><ul><li>легковесность — файлы фреймворка не требуют большого количества ресурсов;</li><li>подробная документация с туториалами, что упрощает работу с инструментом новичкам;</li><li>активное пользовательское сообщество, в том числе в русскоязычном сегменте;</li><li>возможность подключения и создания собственных плагинов;</li><li>эффективное взаимодействие с DOM;</li><li>быстрая разработка.</li></ul><p>Vue поддерживает расширение JSX и технологию TypeScript, но одновременно остается верен стандартам разработки на HTML и CSS. Такая универсальность упрощает процесс работы над проектом и его поддержку после реализации.</p><p>Для тех, кто знаком с основами фронтенд, освоение Vue и поддержка приложений на основе фреймворка не будет сложной задачей. Управление инструментом интуитивно понятно, а экосистема постоянно развивается, что делает Vue одним из самых популярных веб-фреймворков в 2025 году.</p><h2>Svelte</h2><p>Этот фреймворк практикует принципиально иной подход, чем Vue и React: вместо виртуального объекта DOM он использует компиляцию. То есть вместо работы в браузере Svelte компилирует компоненты в предельно оптимизированный и легкий код на JavaScript, что положительно сказывается на быстроте и эффективности созданных на Svelte приложений.</p><p>Не случайно такие компании, как Avast, 1Password и другие используют для создания своих продуктов именно этот фреймворк.</p><p>Ключевые преимущества:</p><ul><li>Простой и минималистичный синтаксис, похожий на HTML, который легко освоить и использовать. Благодаря простоте фреймворк вполне доступен для начинающих.</li><li>Использование реактивной модели программирования. Такой подход строится на реагировании на события и асинхронности.</li><li>Высокая производительность. По этому параметру Svelte благодаря уникальному подходу значительно опережает другие фреймворки.</li><li>Быстрота. За счет скорости Svelte настоятельно рекомендуется для создания быстрых, масштабируемых и интерактивных веб-страниц.</li><li>Универсальность. Svelte бесшовно интегрируется с другими востребованными инструментами.</li></ul><p>Фреймворк идеально подходит для создания приложений с обширным объемом данных, а также продуктов, работающих в интерактивном режиме. Svelte выполняет задачи на ходу, что делает его топовым фреймворком 2025 года.</p><h2>Next.js</h2><p>Фреймворк Next.js предназначен для серверного рендеринга (SSR), при котором код веб-приложений генерируется на сервере, а не в браузере. Это сокращает время реакции и ускоряет интерактивность приложений.</p><p>Библиотека подходит для создания масштабируемых приложений и пользовательских интерфейсов на основе React. Благодаря наличию Node.js и возможности аутсорсить некоторые опции на сторону сервера Next.js можно использовать в качестве бэкенд инструмента.</p><p>В списке других достоинств, которые отмечают программисты:</p><ul><li><b>Автоматическое разделение кода.</b> Next самостоятельно дробит код на небольшие, более управляемые части, что позволяет работать только с необходимыми компонентами и сокращает время первичной загрузки страницы.</li><li><b>Фреймворк без проблем интегрируется с библиотеками CSS на JavaScript</b>, что существенно упрощает стилизацию, при этом нет необходимости использовать сторонние инструменты.</li><li><b>Горячая замена модулей. </b>Благодаря этой опции разработчики видят изменения в состоянии в реальном времени без обновления страницы. Это делает разработку более эффективной и удобной.</li><li><b>Роутинг на базе файловой системы.</b> На платформе Next.js создание роутов (построение оптимального маршрута в структуре папок и файлов) упрощено, что делает более эффективной интеграцию внутренних и внешних функций приложения.</li><li><b>Наличие собственных плагинов</b> для работы непосредственно с фреймворком. Благодаря этому свойству программист может адаптировать рабочую среду под свои конкретные запросы.</li></ul><p>При этом нельзя считать Next.js дополнением к React. Это полноценный фреймворк, в котором имеется набор оригинальных инструментов и алгоритмов. Однако разработчику перед освоением Next.js придется изучить основы React.</p><h2>Nuxt.js</h2><p>Еще один инструмент для серверного рендеринга, но уже на базе Vue.js. В первую очередь Nuxt.js — это фронтенд-фреймворк для разработки передовых динамичных веб-приложений с интерактивными функциями.</p><p>Несмотря на то, что эту библиотеку нельзя назвать полностью автономной, Nuxt во многих случаях будет приоритетным выбором для разработки приложений с быстрой загрузкой и SEO-оптимизацией, а также сценариев для сложных масштабируемых проектов.</p><p>Главные плюсы Nuxt.js:</p><ul><li><b>Быстрый и простой процесс разработки.</b> Скрипты на JS используются не только на серверной, но и на клиентской стороне, что упрощает процесс написания кода.</li><li><b>Автоматическая разбивка кода.</b> Фреймворк генерирует статическую версию сайта, используя специализированную конфигурацию Webpack. При этом за каждый статически генерируемый роут отвечает отдельный файл с кодом для запуска.</li><li><b>Качественная структура.</b> Фреймворк по умолчанию предлагает упорядоченную структуру для всего проекта, что позволяет начать разработку на более выгодных стартовых условиях.</li><li><b>Принцип «конвенция вместо конфигурации».</b> В структуре минимум конфигурационных файлов, что ускоряет разработку и минимизирует ошибки. Встроенная маршрутизация существенно упрощает разработку сложной навигации.</li><li><b>Удобство.</b> Nuxt.js часто обновляется и совершенствуется. Разработчикам доступна подробная документация, а благодаря стандартным настройкам освоить фреймворк относительно легко.</li></ul><p>Сильной стороной фреймворка выступает также полноценная экосистема плагинов, которые облегчают такие задачи, как обработка API, создание серверного функционала и управление состоянием. Мощная модульная архитектура позволяет без труда подключать счетчики аналитики, добавлять прогрессивные PWA-фишки на сайт и решать множество других задач.</p><h2>Remix</h2><p>Относительно новый фреймворк для разработки клиент-серверных продуктов на JavaScript. Основан на библиотеке React, имеет встроенную поддержку TypeScript. Разработчики часто используют Remix для создания одностраничных веб-приложений с перспективой масштабирования.</p><p>Преимущества использования фреймворка:</p><ul><li><b>Вложенные страницы.</b> Все страницы внутри папок выступают вложенными роутами, а не отдельными. По этой причине компоненты можно добавить непосредственно на родительскую страницу, что ускоряет загрузку.</li><li><b>Граничный метод обработки ошибок. </b>Error Boundaries — наиболее эффективный способ исправления ошибок в компонентах библиотеки React. Это особенно удобно для сборки, поскольку исключает блокировку целой страницы из-за незначительной ошибки.</li><li><b>Автоматическая обработка.</b> В Remix состояния загрузки обрабатываются самостоятельно, разработчику нужно лишь указать, что будет отображаться в процессе загрузки приложения. Это встроенная возможность фреймворка, для которой не потребуются сторонние библиотеки.</li><li><b>Универсальность. </b>Remix подходит для работы на всех платформах и взаимодействует с любыми интерфейсами. Фреймворк обрабатывает запросы непосредственно на HTTP-сервере.</li></ul><p>В целом разработчики отмечают улучшение пользовательского опыта за счет уменьшения строк кода. Этот фреймворк становится все более распространенным, особенно для работы над частными проектами и игровыми приложениями.</p><h2>Другие перспективные фреймворки</h2><p>В зависимости от целей разработки можно использовать и другие инструменты для сценариев на JavaScript. В 2025 году опытные разработчики рекомендуют обратить внимание на следующие фреймворки и библиотеки:</p><ul><li><b>Solid.js.</b> Декларативная библиотека для быстрой разработки пользовательских интерфейсов. Здесь, как и в Svelte, нет виртуального DOM, а есть компиляция шаблонов в реальные узлы и их обновление через детализированные реакции. У фреймворка достаточно обширная документация, в том числе русскоязычная. Есть все основания полагать, что фреймворк в ближайшем будущем будет активно набирать популярность.</li><li><b>Astro. </b>Еще один проект с большим потенциалом. Ориентирован на создание веб-продуктов с объемным контентом (информационные сайты, блоги, интернет-магазины и т.д.). Фреймворк практикует серверный рендеринг, поддерживая HTML, CSS и при необходимости TypeScript. Производительность и ориентирование на контент обеспечивает высокую конверсию. Сайты и приложения на Astro загружаются быстро, при этом разработчики используют на порядок меньше сценариев.</li><li><b>Qwik.</b> Еще один относительно новый фреймворк с улучшенной архитектурой и преимуществами в виде ускоренной загрузки сайтов независимо от уровня их сложности. Поскольку скорость загрузки ресурса уже учитывается поисковыми системами, это свойство приобретает особую ценность для коммерческих проектов. В Qwik строгая иерархия компонентов и улучшенные функции за счет применения техник SSR или SSG.</li></ul><p>Выбор оптимального фреймворка для качественной и быстрой разработки проекта зависит от множества факторов и тщательного предварительного анализа. Разработчикам необходимо грамотно определить приоритеты. Среди значимых факторов — скорость работы, мобильность и возможность масштабирования, частота обновлений фреймворков. В любом случае быстрота, простая поддержка и легкость в добавлении новых функций пойдут инструментам только на пользу.</p>]]></content:encoded>
    </item>
    <item>
      <title>Работа с большими данными: введение в Apache Hadoop и Spark</title>
      <link>https://tproger.ru/articles/rabota-s-bolwimi-dannymi--vvedenie-v-apache-hadoop-i-spark</link>
      <comments>https://tproger.ru/articles/rabota-s-bolwimi-dannymi--vvedenie-v-apache-hadoop-i-spark?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/rabota-s-bolwimi-dannymi--vvedenie-v-apache-hadoop-i-spark</guid>
      <description><![CDATA[<p>Работа с большими данными. Рассказываем об основах Apache Hadoop и Spark. Рассматриваем пошаговую инструкцию по внедрению распределенной системы ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/rabota-s-bolwimi-dannymi--vvedenie-v-apache-hadoop-i-spark">Работа с большими данными: введение в Apache Hadoop и Spark</a>»</p>]]></description>
      <category><![CDATA[Big Data]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 02 Nov 2024 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Что такое Apache Hadoop?</h2><p><b>Apache Hadoop</b> — это платформа для хранения и работы с большими объемами данных. Ее преимущество заключается в распределении вычислений между множеством узлов. Hadoop разбивает большую задачу на много маленьких и решает их одновременно на разных компьютерах.</p><p>Основные компоненты фреймворка:</p><ul><li><b>Hadoop Distributed File System (HDFS)</b> — файловая система для хранения больших данных с потоковым доступом. HDFS оптимизирована под работу с файлами до десятков терабайт, а кластеры могут хранить петабайты информации.</li><li><b>MapReduce </b>— модель для обработки записей из HDFS. MapReduce разбивает задачу на две фазы. На этапе «Map» данные обрабатываются параллельно на разных узлах кластера, а на этапе «Reduce» результаты объединяются.</li><li><b>Yet Another Resource Negotiator (YARN)</b> — система управления ресурсами кластера и планирования задач. YARN расширяет возможности Hadoop и поддерживает другие модели обработки помимо MapReduce — Spark, Flink.</li></ul><p>HDFS, MapReduce и YARN образуют основу Hadoop, обеспечивая хранение, обработку и управление ресурсами соответственно.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2024-10-20/446c84b0-9bfc-4650-b210-eb5626b26f54.jpg" alt="" /><figcaption>Основные компоненты Apache Hadoop</figcaption></figure><p>Hadoop используют для анализа логов пользователей, чтобы, например, улучшить таргетирование рекламы. Онлайн-ритейлеры применяют Hadoop для рекомендаций товаров на основе истории покупок и просмотров. Распределенная система также применяется в банковской сфере для обработки транзакций.</p><h2>Преимущества Hadoop</h2><p><b>Масштабируемость</b>. Систему Hadoop можно расширять до тысяч узлов. Компании наращивают вычислительные мощности по мере роста объемов данных.</p><p><b>Экономия</b>. Дешевые сервера на базе Hadoop объединяются в мощный вычислительный кластер. Компании используют Hadoop, чтобы не инвестировать в дорогостоящее оборудование.</p><p><b>Отказоустойчивость</b>. Благодаря распределенной архитектуре и автоматической репликации Hadoop работает даже при отказе отдельных узлов кластера.</p><p><b>Гибкость</b>. Hadoop применяется в проектах со структурированными и неструктурированными данными.</p><h2>Что такое Apache Spark?</h2><p>Apache Spark — это система распределенных вычислений. Она используется для преодоления ограничений Hadoop MapReduce и интегрируется поверх HDFS.</p><p>Spark до 100 раз быстрее Hadoop MapReduce благодаря обработке данных в памяти. Также Spark предоставляет API на Java, Scala, Python. Еще поддерживаются пакетная обработка, интерактивные запросы, потоковая обработка и машинное обучение.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2024-10-20/3f226d96-3f71-4add-bbf7-bd9773a012f7.jpg" alt="" /><figcaption>Основные компоненты Apache Spark</figcaption></figure><p>Компоненты Apache Spark:</p><ul><li>Spark Core — движок для распределенной обработки больших данных. Включает в себя API для работы с Resilient Distributed Datasets (RDD) — основной абстракцией данных в Spark.</li><li>Spark SQL — модуль для работы со структурированными данными, поддерживающий SQL-запросы.</li><li>Spark Streaming — компонент для обработки потоковых данных в реальном времени.</li><li>MLlib — библиотека машинного обучения с алгоритмами для классификации, регрессии, кластеризации и фильтрации данных.</li><li>GraphX — движок для визуализации данных на графиках.</li></ul><h2>Преимущества Spark</h2><p><b>Скорость. </b>Spark быстрее Hadoop. Производительность заметна при интерактивной обработке информации и задачах с низкой задержкой.</p><p><b>Отказоустойчивость. </b>Как и Hadoop, Spark устойчив к сбоям за счет распределенного хранения и обработки информации.</p><p><b>Универсальность. </b>Spark подходит для разных видов обработки информации: пакетной, потоковой, SQL-запросов, машинного обучения и графовых алгоритмов.</p><p><b>Интерактивность. </b>Благодаря производительности, с помощью Спарка можно анализировать информацию в реальном времени.</p><h2>Hadoop vs Spark: сравнение и различия</h2><p>Оба инструмента предназначены для работы с массивами информации, но их подходы и возможности существенно различаются.</p><h3>Производительность</h3><p>Hadoop был создан как решение для распределенной обработки информации, позволяющее разделить нагрузку между множеством серверов. Spark же появился позже как ответ на ограничения Hadoop, предлагая более быструю и гибкую альтернативу пакетной обработке.</p><p>Hadoop эффективен для пакетной обработки больших данных, но не отличается высокой скоростью из-за постоянного обращения к внешнему хранилищу. Это делает его подходящим для задач, не требующих мгновенного отклика, например, для анализа ежемесячных отчетов.</p><p>Спарк ориентирован на обработку в реальном времени. Он копирует информацию в оперативную память, что значительно ускоряет процесс. Такой подход позволяет Spark превосходить Hadoop как в простых, так и в сложных операциях.</p><p><b>Hadoop</b>:</p><ol><li>Записывает промежуточные результаты на диск, что замедляет выполнение задачи.</li><li>Эффективен для пакетной обработки, когда время выполнения не критично.</li><li>Предпочтительнее для обработки данных, которые не помещаются в память кластера.</li></ol><p><b>Spark</b>:</p><ol><li>Хранит промежуточные результаты в памяти, минимизируя операции ввода-вывода.</li><li>Использует направленный ациклический граф (DAG) для оптимизации задач.</li><li>До 100 раз быстрее Hadoop MapReduce, когда данные помещаются в память.</li></ol><h3>Программные модели</h3><p>Основа Hadoop — собственная распределенная файловая система HDFS, которая разбивает массивы данных на мелкие блоки и распределяет их по кластеру. Спарк не имеет встроенной файловой системы, поэтому использует HDFS Hadoop для хранения и управления базой.</p><p><b>Hadoop</b>:</p><ol><li>Двухэтапная модель map и reduce.</li><li>Сложно реализовывать алгоритмы с несколькими этапами обработки данных.</li></ol><p><b>Spark</b>:</p><ol><li>Более гибкая модель с использованием Resilient Distributed Datasets (RDD) и DataFrame API.</li><li>Поддерживает функциональное программирование, что упрощает написание итеративных алгоритмов.</li></ol><p>Hadoop изначально разрабатывался с учетом высоких требований к безопасности и включает функции шифрования и контроля доступа. Spark имеет ограниченные встроенные механизмы защиты и требует дополнительных мер безопасности при развертывании.</p><h3>Поддержка различных типов данных и возможностей машинного обучения</h3><p>Функционал Spark в обработке данных гораздо шире, чем у Hadoop.</p><p><b>Hadoop</b>:</p><ol><li>Поддержка структурированных данных через Hive.</li><li>Обработка неструктурированных данных через MapReduce.</li><li>Ограниченная поддержка потоковых данных.</li><li>Ограниченная поддержка графовых данных.</li><li>Работа с CSV, JSON через Hive.</li><li>Нет встроенной библиотеки машинного обучения.</li><li>Ограниченный набор алгоритмов ML через внешние инструменты.</li><li>Ограниченные возможности интерактивного анализа данных.</li><li>Обработка текста через MapReduce.</li><li>Ограниченные возможности анализа графов.</li><li>Проблемы с реализацией алгоритмов машинного обучения.</li></ol><p><b>Spark</b>:</p><ol><li>Поддержка структурированных данных через Spark SQL.</li><li>Обработка неструктурированных данных через RDD API.</li><li>Полная поддержка потоковых данных через Spark Streaming.</li><li>Полная поддержка графовых данных через GraphX.</li><li>Работа с CSV, JSON, Parquet и другими форматами через Spark SQL.</li><li>Встроенная библиотека машинного обучения MLlib.</li><li>Широкий набор алгоритмов ML в MLlib.</li><li>Широкие возможности интерактивного анализа через Spark Shell.</li><li>Обработка текста через RDD API и MLlib.</li><li>Реализованы алгоритмы PageRank, Connected Components, Shortest Paths.</li><li>Относительно простая реализация сложных алгоритмов ML.</li></ol><h2>Интеграция Hadoop и Spark</h2><p>Платформы интегрируются вместе на проектах, где необходимо хранить данные долговременно и быстро их обрабатывать:</p><ul><li>HDFS используется как основное файловое хранилище, предоставляя масштабируемую инфраструктуру для хранения информации.</li><li>Spark обрабатывает и трансформирует данные в реальном времени.</li><li>YARN распределяет вычислительные мощности между платформами.</li></ul><p>Расширить функционал системы можно при помощи следующих инструментов:</p><ul><li><b>Apache Hive</b> — позволяет выполнять SQL-подобные запросы к данным, хранящимся в HDFS, используя Спарк в качестве движка.</li><li><b>Apache Kafka</b> — система обмена сообщениями, часто используемая вместе со Spark Streaming для обработки в реальном времени.</li><li><b>Apache HBase</b> — NoSQL на основе HDFS, которая может быть использована совместно со Спарком для быстрого доступа к данным.</li></ul><p>Чтобы выбрать оптимальную архитектуру системы и компоненты, нужно определить требования и цели проекта. Например, если требуется обрабатывать потоковые данные, то помимо Hadoop и Spark понадобиться Apache Kafka.</p><p>Следующий этап — планирование инфраструктуры. Необходимо рассчитать объемы данных, которые будут храниться в HDFS, и спроектировать кластер. Нужно выделить достаточно ресурсов для процессов Спарка, учитывая пиковые нагрузки.</p><h2>Шаг 1. Определите источники данных и их характеристики</h2><p>Составьте список всех источников данных, которые будут загружаться в HDFS. Для каждого источника выясните:</p><ul><li>формат (CSV, JSON, Avro, текстовые логи),</li><li>частоту поступления (раз в час/день/неделю, непрерывный поток),</li><li>объем, поступающий за один период,</li><li>ожидаемый рост в будущем.</li></ul><p><b>Пример</b>:</p><p>Есть 3 источника данных об активности пользователей на сайте, о покупках и логи сервера приложений. Данные поступают каждый день в формате JSON, со средним объемом 5 ГБ, 10 ГБ и 20 ГБ соответственно. Ожидаемый ежегодный прирост — 20%.</p><h2>Шаг 2. Определите время хранения данных</h2><p>Решите, как долго хранить каждый тип данных, исходя из требований бизнеса. Иногда достаточно хранить только свежие данные за последний месяц.</p><p><b>Пример</b>:</p><p>Решили хранить данные об активности и покупках за последние 2 года, а логи сервера — за 6 месяцев.</p><h2>Шаг 3. Рассчитайте общий объем сырых данных</h2><p>Для каждого источника рассчитайте ожидаемый объем данных за требуемый период хранения. Учитывайте ожидаемый рост.</p><p><b>Пример</b>:</p><ul><li>Активность: 5 ГБ × 365 дней × 2 года × 1.2 (прирост 20% в год) = 4.38 ТБ</li><li>Покупки: 10 ГБ × 365 дней × 2 года × 1.2 = 8.76 ТБ</li><li>Логи: 20 ГБ × 182 дня × 1.1 (за полгода прирост около 10%) = 4 ТБ</li><li>Итого сырых данных: 4.38 + 8.76 + 4 = 17.14 ТБ</li></ul><h2>Шаг 4. Учтите репликацию</h2><p>По умолчанию HDFS хранит 3 копии каждого блока данных для обеспечения отказоустойчивости. Поэтому оценку объёма данных нужно умножить на коэффициент репликации.</p><p><b>Пример</b>:</p><p>С учетом репликации потребуется 17.14 ТБ × 3 = 51.42 ТБ</p><h2>Шаг 5. Добавьте пространство для промежуточных данных</h2><p>В процессе обработки данных в Hadoop создаются временные файлы, результаты ETL-процессов, агрегаты. Нужно зарезервировать под них дополнительное пространство — обычно 20-30% от объема сырых данных.</p><p><b>Пример</b>:</p><p>Добавляем 30% к оценке: 51.42 ТБ × 1.3 = 66.85 ТБ</p><h2>Шаг 6. Спланируйте разделение по папкам</h2><p>Для удобства управления данными в HDFS их нужно разделить по папкам — например, по типам, по бизнес-доменам. Примерная структура:</p><ul><li>/data/raw/,</li><li>/data/processed/,</li><li>/data/tmp/,</li><li>/user/,</li><li>/apps/.</li></ul><p>Это позволит выставлять разные политики хранения для разных типов данных, ограничивать права доступа.</p><p>В HDFS планируется разместить около 66.85 ТБ данных с учетом двухлетнего срока хранения, ожидаемого роста, репликации и промежуточных сведений. На основе этой оценки можно принимать решения о конфигурации кластера. В реальных проектах могут быть и другие факторы, влияющие на расчеты — например, сжатие больших данных, нагрузка на кластер.</p><h2>Пример проекта с большими данными на Hadoop и Spark</h2><p>Предположим, что есть большой набор данных о продажах в сети розничных магазинов. Наша задача — проанализировать собранные сведения, чтобы получить бизнес-инсайты. Будем использовать HDFS для хранения информации, а Spark — для их обработки.</p><p>Сначала загрузим датасет в HDFS. Информация о продажах содержится в CSV-файле sales_data.csv. Загрузим его в HDFS с помощью bash-команды:</p><p>Пример кода на PySpark для анализа данных из sales_data.csv:</p><p>Скрипт создает сессию Spark с конфигурацией для работы с HDFS, читает данные из CSV-файла. Далее запускается 3 вида анализа:</p><ul><li>Расчет общих продаж по категориям товаров.</li><li>Определение средней цены продукта по брендам.</li><li>Выявление ТОП-5 продуктов по количеству продаж.</li></ul><p>В конце скрипт выводит результаты анализа на экран и сохраняет их в HDFS в формате CSV.</p><h2>Заключение</h2><p>Hadoop и Spark открывают огромные возможности для работы с большими данными, но их внедрение — это непросто. Каждый проект уникален, и опыт использования этих технологий может сильно различаться.</p><p>А вы уже использовали Hadoop и Spark на своих проектах?</p><p>Поделитесь опытом в комментариях:</p><ul><li>Какие задачи вы решали с помощью этих инструментов?</li><li>С какими трудностями столкнулись при внедрении?</li><li>Какие недостатки обнаружили?</li></ul><p>Ваши истории будут очень полезны для тех, кто только начинает изучать Hadoop и Spark.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как выбрать библиотеку для управления состоянием в Vue.js</title>
      <link>https://tproger.ru/articles/kak-vybrat-biblioteku-dlya-upravleniya-sostoyaniem-v-vue-js</link>
      <comments>https://tproger.ru/articles/kak-vybrat-biblioteku-dlya-upravleniya-sostoyaniem-v-vue-js?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-vybrat-biblioteku-dlya-upravleniya-sostoyaniem-v-vue-js</guid>
      <description><![CDATA[<p>Как выбрать библиотеку для управления состоянием. Показываем, какие есть библиотеки на Vue.js. Рассматриваем возможные варианты и пошаговую инструкцию ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-vybrat-biblioteku-dlya-upravleniya-sostoyaniem-v-vue-js">Как выбрать библиотеку для управления состоянием в Vue.js</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 24 Sep 2024 11:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Основные характеристики JavaScript-фреймворка Vue.js (Vue) — это доступность, производительность и гибкость настроек. Назначение этого инструмента — создание пользовательских интерфейсов. Vue без проблем интегрируется в проекты, в которых применяются другие библиотеки JavaScript, и работает как платформа для одностраничных веб-приложений. Это третий по величине проект с открытым исходным кодом в истории сервиса GitHub.</p><p>Фреймворк базируется на стандартах JavaScript, CSS и HTML. У него интуитивно понятное программное управление, подробная и понятная документация. А еще у Vue.js реактивная система отрисовки и обширная экосистема, которая постоянно развивается.</p><p>Однако в ряде случаев фреймворку требуется управление состоянием — для этой цели используются специальные библиотеки. Узнаем, что это за библиотеки, в каких случаях они нужны, каковы преимущества и недостатки самых популярных из них.</p><h2>Когда нужно управление состоянием в Vue.js</h2><p>Чтобы разобраться в этом вопросе, нужно выяснить, что собой представляет состояние в Vue и зачем им управлять. С технической точки зрения все компоненты фреймворка самостоятельно управляют своим реактивным состоянием — то есть источником данных, отвечающим за работу приложения.</p><p>В простых программных продуктах отдельные блоки, помимо строк состояния, включают в себя Представление (View) и Действие (Actions). Схема кажется простой, но ее стройность нарушается, когда есть несколько компонентов с одинаковым состоянием. В таких ситуациях ряд Представлений и Действий зависит от одного фрагмента Состояния, в результате возникают сложности с реализацией.</p><p>Можно попытаться «поднять» состояние до общего родительского компонента, после чего передать его вниз в формате входных параметров. Однако такая стратегия становится слишком трудоемкой в структурах с глубокой иерархией, что приводит к разнообразным проблемам.</p><p>Иными словами, управление состоянием при разработке веб-приложений бывает крайне сложным. В особенной степени это касается масштабных и быстрорастущих проектов, когда требуется эффективное централизованное управление состоянием. При этом полноценное управление — важнейший параметр Vue-приложений, обеспечивающий масштабируемость кода.</p><p>Разработка современных веб-приложений неизбежно связана с вопросом управления состоянием. Особенно если речь идет о сложных структурах, в которых каждый элемент играет определенную роль и взаимодействует с другими компонентами. Управление состоянием здесь играет роль дирижера оркестра, который отвечает за гармоничное и согласованное звучание инструментов.</p><p>На фреймворке Vue.js состояние — набор данных, который определяет текущий статус приложения. Сюда относятся данные пользователя, параметры интерфейса, запросы к серверу. Если приложение небольшое, управление состоянием несложное — элементы напрямую обмениваются данными с помощью свойств и событий.</p><p>В более сложных приложениях такие схемы не работают. Здесь и вступает в силу концепция управления состоянием. Ее грамотное применение существенно упрощает работу с данными и делает код более гибким и предсказуемым. В Vue эту задачи решают библиотека Vuex и более продвинутый инструмент Pinia.</p><p>Почему важно управлять состоянием:</p><ul><li><b>Централизованное хранение данных.</b> Информация не разбросана по разным компонентам, а собрана в едином хранилище. Такая структура позволяет без труда отслеживать изменения данных и упрощает отладку приложений.</li><li><b>Прозрачность данных. </b>Каждое изменение состояния реализуется с помощью определенных методов (actions и mutations), что делает процесс прозрачным, управляемым и предсказуемым, а также устраняет риски неконтролируемых модификаций.</li><li><b>Простой обмен данными.</b> С помощью библиотек управления компоненты получают доступ к данным центрального хранилища. Отпадает необходимость в создании длинных цепочек (props). Архитектура приложения существенно упрощается.</li><li><b>Масштабируемость.</b> В сложных приложениях по мере их роста управление сохраняет свою структуру благодаря разделению внутренней логики на отдельные модули. Каждая ветвь отвечает за свои компоненты состояния, при этом код становится более организованным.</li></ul><p>По мере усложнения фронтенд-разработки эффективное управление состоянием приложений становится все более актуальной задачей. Централизованное управление значительно упрощает работу, поскольку пользоваться данными, которые хранятся и обрабатываются в одном месте, гораздо проще.</p><h2>Популярные библиотеки для управления состоянием</h2><p>В распоряжении разработчиков две полноценных библиотеки для управления состоянием — это Vuex и Pinia. Оба этих инструмента можно назвать официальными — они поддерживаются многочисленным сообществом разработчиков и одинаково востребованы.</p><h3>Vuex</h3><p>Это первая официальная библиотека, созданная для управления состоянием на фреймворке Vue. Этот инструмент служит также централизованным хранилищем, в котором содержатся все компоненты конкретного приложения. Vuex гарантирует, что изменение состояния будет происходить только предсказуемым образом.</p><p>Структура Vuex тщательно организована, а каждое действие в этой системе строго регламентировано. Библиотека управления состоянием представляет собой высокоэффективный инструмент для работы с данными.</p><p>Рассмотрим его ключевые компоненты:</p><ul><li><b>State.</b> Это централизованное хранилище всех данных, относящихся к приложению. Сюда входит и пользовательская информация, и настройки интерфейса. По сути это главный источник, координирующий работу всех элементов приложения.</li><li><b>Getters.</b> Это своего рода окна, которые обеспечивают доступ к содержимому хранилища. С их помощью разработчики извлекают и обрабатывают данные, не изменяя при этом самого состояния.</li><li><b>Mutations. </b>Это единственные компоненты в библиотеке, которые могут изменять состояние. Mutations можно представить как стражей хранилища, которые строго следят за тем, чтобы любые изменения внутри приложения проходили по регламенту и были полностью предсказуемы. Компоненты действуют синхронно и за стартовый параметр принимают текущий статус состояния.</li><li><b>Actions.</b> Действия в библиотеке Vuex выступают посланниками асинхронных задач — они передают результаты Mutations и принимают текущий контекст хранилища в качестве параметра.</li></ul><p>Каждый элемент библиотеки играет строго определенную роль, а вместе они поддерживают порядок внутри хранилища. Работа с Vuex относительно проста — научившись создавать простые предложения, разработчики смогут их легко масштабировать.</p><p>Библиотека предлагает пользователям продвинутые возможности. Одна из них — модули. Эти инструменты позволяют управлять приложением даже в ситуации, когда оно структурно усложняется по мере роста проекта. Модули поддерживают порядок и помогают избежать хаоса.</p><p>Когда приложение усложняется и разрастается, управлять состоянием становится все труднее. Применение единого хранилища в подобных обстоятельствах создает неудобства — ухудшается читабельность кода, сложно отслеживать ошибки и интегрировать новые функции. В таких ситуациях и нужны модули. У каждого из них есть своя область управления. Модули разделяют код на логические блоки, делая работу более комфортной.</p><p>Еще одна продвинутая функция — асинхронные действия. В разработке приложений это направление становится все более актуальным. Асинхронные действия нужны для управления состоянием в соответствии с данными, поступающими из внешних источников. Приложение обращается к серверу и обновляет состояние в зависимости от полученных ответов. В Vuex асинхронные действия — ключевой момент взаимодействия с API.</p><p>В числе базовых преимуществ Vuex:</p><ul><li>наличие модульной структуры, позволяющей управлять состоянием сложных приложений;</li><li>интеграция с Vue DevTools — плагином для отладки приложений в браузере;</li><li>функции отладки — редактирование и откат до прошлого состояния;</li><li>доступность в использовании.</li></ul><p>Недостатком библиотеки эксперты считают слишком сложную структуру, мешающую работе с небольшими проектами. Однако для крупномасштабных приложений это идеальный вариант.</p><h2>Pinia</h2><p>Это новый, более легковесный инструмент с интуитивно понятным API и более продвинутой системой реактивности. Эксперты считают эту библиотеку управления состоянием прогрессивной и отмечают ее уникальные возможности — расширяемость, удобную организацию модулей и возможность создания нескольких хранилищ.</p><p>Работа с Pinia максимально упрощена — чтобы начать, необходимо лишь установить и создать хранилище. Это делается с помощью простых команд. Легкость использования способствует быстрому росту популярности библиотеки — благодаря сообществу Pinia, как и Vuex, стала официально рекомендованным инструментом для работы с Vue.js.</p><p>Кривая обучаемости на Pinia будет максимально простой для разработчиков, ранее освоивших библиотеки Flux, включая Redux, MobX. Документация, как и в случае с Vuex, подробна, написана понятным языком, удобна к использованию опытными и начинающими программистами.</p><p>Pinia — одна из самых быстрорастущих <a href="https://github.com/vuejs/pinia">библиотек на GitHub</a>. За пять лет с момента выхода было уже несколько стабильных релизов. Все эти продукты имеют открытый исходный код и доступны в бесплатном режиме.</p><p>Разработчики стараются поддерживать продукт в русле философии Vuex. По производительности Pinia в некоторых моментах опережает предшественника, что объясняется малым весом библиотеки (1 КБ). Однако некоторые функции, например, редактирование, поддерживаются не во всех версиях. Вложенных хранилищ здесь нет, зато в библиотеке можно создавать хранилища последовательно по мере надобности и распределять их в коде.</p><p>Основные плюсы Pinia:</p><ul><li>уникальная легкость продукта;</li><li>отсутствие деления на mutators и actions (есть только действия);</li><li>поддержка нескольких хранилищ вместо модулей;</li><li>поддержка Vue Devtools и SSR;</li><li>модульность и гибкость.</li></ul><p>Главный недостаток — отсутствие некоторых функций отладки и редактирования.</p><h2>Composition API + Reactivity API</h2><p>В ряде случаев для управления состоянием достаточно встроенных инструментов Composition API и Reactivity API. Разработчики могут использовать эти функции, если есть фрагмент, общий для нескольких экземпляров. В этом случае создается реактивный объект, после чего импортируется в несколько компонентов.</p><p>В простых случаях такие функции работают, но в долгосрочной перспективе при усложнении проекта Reactivity API не будет удобным и эффективным. Таким образом, встроенные инструменты Vue подходят только для простых приложений или их компонентов.</p><h2>Критерии выбора библиотеки — когда использовать Pinia, а когда Vuex</h2><p>Pinia — удобная и производительная библиотека, но она не имеет цели заменить Vuex. Последняя остается рекомендуемым инструментом для управления состоянием.</p><p>При выборе стоит учитывать, такие параметры, как:</p><ul><li>масштаб и уровень сложности проекта;</li><li>поддержку текущей версии фреймворка Vue.js;</li><li>особенности проекта.</li></ul><p>Эксперты считают, что Pinia больше подходит для небольших и средних по размеру приложений, а также для проектов без сложной структуры. При работе с более масштабными приложениями могут возникнуть проблемы по той причине, что некоторые опции отладки, типа возврата во времени и редактирования данных, в этой библиотеке не поддерживаются. Возможно, этот недостаток будет устранен в новом релизе.</p><p>Для больших и сложных проектов с разветвленной структурой и перспективой масштабирования больше подходит Vuex. Для малых проектов использование этого инструмента нецелесообразно, поскольку его тяжеловесность может стать причиной низкой производительности приложения.</p><p>Многие разработчики, специализирующиеся на простых проектах, легко обходятся без Vuex, используя либо встроенные инструменты фреймворка, либо Pinia. Но как только они сталкиваются с более сложным продуктом, применение библиотеки Vuex становится предпочтительным вариантом. Только этот инструмент обеспечивает возможность создавать сложную структуру, работая в команде, занимаясь отладкой и редактированием данных.</p><h2>Итоги</h2><p>Сравнивать библиотеки Pinia и Vuex не совсем корректно, поскольку они работают в разных весовых категориях. У каждого из этих инструментов есть свои положительные и негативные стороны, так что их использование зависит от особенностей конкретного веб-приложения, с которым вы имеете дело. Цель создателей Pinia — не заменить библиотеку Vuex, а облегчить работу с Vue.js в случаях, когда это оправдано.</p><p>В тоже время Pinia развивается более стремительно, тогда как в библиотеку Vuex новые функции уже не добавляются. По этой причине создатели Pinia сделали ее рекомендованной библиотекой для новых приложений.</p>]]></content:encoded>
    </item>
    <item>
      <title>Превью Java 23: еще удобнее, безопаснее и быстрее</title>
      <link>https://tproger.ru/articles/prevyu-java-23--bezopasnost--proizvoditelnost-i-udobstvo-razrabotki</link>
      <comments>https://tproger.ru/articles/prevyu-java-23--bezopasnost--proizvoditelnost-i-udobstvo-razrabotki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Сергей Лунегов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/prevyu-java-23--bezopasnost--proizvoditelnost-i-udobstvo-razrabotki</guid>
      <description><![CDATA[<p>В обзоре Java 23 расскажем, какие новые фичи появляются в релизе, который выходит в сентябре 2024. Вы узнаете, чего коснулись изменения и как начать использовать фичи из предварительной версии.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/prevyu-java-23--bezopasnost--proizvoditelnost-i-udobstvo-razrabotki">Превью Java 23: еще удобнее, безопаснее и быстрее</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 16 Sep 2024 11:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Выход Java 23 ждем в середине сентября, а список JDK Enhancement Proposal (JEP) уже определён и доступен. Расскажем подробнее. Релиз включает 13 JEP, которые традиционно улучшают Java по следующим направлениям:</p><ul><li>безопасность,</li><li>производительность,</li><li>удобство разработки.</li></ul><p>Для начинающих важно, что в релизе есть улучшения специально для них. Эти JEP упрощают изучение Java, чтобы не пугать новичков с первого взгляда:</p><ul><li>Неявные классы и main-методы экземпляра класса (третья предварительная версия).</li><li>Импортирование модулей (предварительная версия).</li></ul><p>В превью вы узнаете, какие JEP вошли в новую Java и чего коснулись эти изменения.</p><h2>Как начать использовать фичи в предварительной версии</h2><p>Чтобы попробовать экспериментальные фичи или фичи в предварительной версии, нужно их явно включить. Вы можете это сделать как через командную строку, так и настроить в интегрированной среде разработки (IDE).</p><p>В командной строке включите фичу в предварительной версии одним из следующих способов:</p><ul><li>Скомпилируйте программу с помощью javac --release 23 --enable-preview Main.java и запустите ее с помощью java --enable-preview Main.</li></ul><ul><li>При использовании <a href="https://openjdk.org/jeps/330">source code launcher</a> запустите программу с java --enable-preview Main.java.</li></ul><ul><li>При использовании jshell запустите его с помощью jshell --enable-preview.</li></ul><h2>Повышение безопасности</h2><h4>Scoped Values (третья предварительная версия)</h4><p><a href="https://openjdk.org/jeps/481">Scoped values</a> впервые появились в JDK 20 в режиме инкубатора. В третьей предварительной версии метод ScopedValue.getWhere будет удалён. Этот метод заменит новый функциональный интерфейс, позволяющий JVM понять, будет ли выброшено исключение.</p><p>Scoped values позволяют совместно использовать неизменяемые данные в рамках одного потока и между потоками. Scoped values следует использовать вместо класса ThreadLocal, потому что они уменьшают сложность кода и повышают надёжность многопоточных приложений.</p><p>Вот пример того, как два метода фреймворка, выполняющиеся в одном потоке обработки запросов, могут использовать переменную типа ThreadLocal для совместного использования FrameworkContext. Так, не нужно передавать FrameworkContext в качестве аргумента методу, когда фреймворк вызывает пользовательский код, и наоборот: пользовательский код вызывает метод фреймворка.</p><ol><li>Фреймворк объявляет переменную типа ThreadLocal CONTEXT (1).</li><li>Когда Framework.serve выполняется в потоке обработки запросов, он записывает подходящий FrameworkContext в переменную типа ThreadLocal (2), а затем вызывает пользовательский код.</li><li>Если и когда пользовательский код вызывает Framework.readKey, этот метод считывает переменную ThreadLocal (3), чтобы получить FrameworkContext потока, обрабатывающего запрос.</li></ol><p>Переменная типа ThreadLocal служит неким скрытым параметром метода: поток, вызывающий CONTEXT.set в Framework.serve и CONTEXT.get в Framework.readKey, автоматически увидит свою собственную локальную копию переменной CONTEXT. По сути, поле ThreadLocal служит ключом, который используется для поиска значения FrameworkContext для текущего потока.</p><p>Но у ThreadLocal есть несколько недостатков:</p><ol><li>Все переменные ThreadLocal изменяемые. Метод get() переменной ThreadLocal может быть вызван в любом месте кода, так же, как и метод set().</li><li>Если переменная ThreadLocal копии потока определена с помощью метода set(), то значение переменной сохраняется в течение всего времени существования потока или до тех пор, пока код в потоке не вызовет метод remove(). Разработчики часто забывают вызывать метод remove(), поэтому значение переменной хранится дольше, чем нужно.</li><li>Дочерние потоки наследуют переменные ThreadLocal родительского потока и обязаны выделять часть памяти для каждой переменной ThreadLocal родительского потока, что очень накладно по памяти. Учитывая, что на практике дочерние потоки редко используют метод set() на унаследованных переменных ThreadLocal.</li></ol><p>Эти недостатки усугубляются с появлением <a href="https://openjdk.org/jeps/444">виртуальных потоков</a> — их может быть тысячи или даже миллионы. Получается, переменные ThreadLocal только усложняют  передачу значения переменной в рамках одного потока без использования явного параметра и накладывают расходы, которых нельзя избежать.</p><p>Недостатки ThreadLocal решает ScopedValue.</p><p>А вот этот же пример кода, но переписанный с использованием класса ScopedValue:</p><ol><li>Фреймворк объявляет переменную CONTEXT типа ScopedValue вместо ThreadLocal (1).</li><li>Метод serve() вызывает ScopedValue.runWhere вместо метода set() класса ThreadLocal (2).</li></ol><p>Метод runWhere обеспечивает односторонний обмен данными от метода serve() к методу readKey(). Метод runWhere() связывает переданное значение с соответствующим объектом на время выполнения, что позволяет любому методу, вызванному из runWhere(), получить это значение через CONTEXT.get()(3).</p><p>Если Framework.serve вызывает пользовательский код, который затем вызывает Framework.readKey, то значение будет таким же, как и в момент вызова runWhere(). Эта связь действует только внутри runWhere(). Попытка получить значение через CONTEXT.get() в Framework.serve после завершения runWhere() приведёт к исключению, так как связь больше не существует.</p><p>Таким образом, значение ScopedValue связывается с объектом только на время выполнения метода runWhere(), что освобождает разработчиков от необходимости помнить об очистке значений переменных. Также значение переменной ScopedValue можно только получить методом get() и нельзя изменить, так как у ScopedValue нет метода set(). Так решается проблема с дорогим наследованием: дочерним потокам не нужно копировать значение, которое не изменяется в течение периода жизни.</p><h4>Подготовка к удалению методов доступа к памяти в sun.misc.Unsafe</h4><p>Цель создания класса sun.misc.Unsafe — выполнение низкоуровневых операций в JDK, поскольку этот класс содержит методы для доступа к памяти on-heap и off-heap. Эти методы могут помочь увеличить производительность в некоторых специфических сценариях, но только в том случае, если по пути выполняются исчерпывающие проверки на безопасность. Иначе использование этих методов может привести к неожиданному поведению приложения, сбоям JVM или снижению производительности. Многие библиотеки используют sun.misc.Unsafe, но не все выполняют требуемые проверки безопасности.</p><p>Для решения этой проблемы введены два запасных API:</p><ul><li>Variable Handles — для доступа к памяти on-heap,</li><li>Foreign Function &amp; Memory API — для работы с памятью off-heap.</li></ul><p>С помощью этих API стало возможным вывести sun.misc.Unsafe из использования с помощью<a href="https://openjdk.org/jeps/471"> JEP 471</a> и удалить этот класс в будущих выпусках.</p><p>Рассмотрим небольшой пример миграции. Допустим, что в классе Foo есть целочисленное поле int, над которым мы хотим провести операцию атомарного удвоения. Мы можем сделать это с помощью sun.misc.Unsafe:</p><p>А теперь улучшим этот пример с помощью <a href="https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/lang/invoke/VarHandle.html">VarHandle API</a>:</p><h2>Увеличение производительности</h2><p>С каждым релизом производительность Java увеличивается. Этот релиз не исключение.</p><h4>Vector API (восьмой инкубатор)</h4><p>Vector API появилось в JDK 16 и пока остаётся в инкубационном периоде. В <a href="https://openjdk.org/jeps/469">восьмом инкубаторе</a> всё без изменений.</p><p>Vector API повышает производительность расчётов на массивах однотипных данных, которые компилируются в векторные инструкции во время исполнения приложения.</p><p>Vector API зависит от некоторых фич проекта Valhalla, который находится в разработке. Как только эти функциональности станут доступны в предварительной версии, векторное API так же попадёт из инкубатора в предварительную версию.</p><p>Вот пример простого скалярного вычисления над элементами массива:</p><p>Этот же пример, только переписанный с использованием Vector API:</p><p>Кажется сильно больше и страшнее. Сначала мы получаем предпочтительный вид из FloatVector, оптимальный для текущей архитектуры, и сохраняем его в static final поле, чтобы компилятор рассматривал его как константу для лучшей оптимизации вычислений. Затем основной цикл проходит по массивам с шагом, равным длине вектора (т.е. длине SPECIES), загружает векторы типа float из массивов a и b, выполняет арифметические операции и сохраняет результат в массив c. Остаток элементов после последней итерации обрабатывается обычным скалярным циклом.</p><h4>Сборщик мусора ZGC по умолчанию — generational</h4><p>Сборщик мусора Z Garbage Collector (ZGC) появился ещё в Java 21. В Java 23 сборщик мусора без поколений (non-generational) признан устаревшим и будет удалён в следующей версии. Цели этого <a href="https://openjdk.org/jeps/474">JEP 474</a>:</p><ul><li>снизить затраты на поддержку двух сборщиков мусора ZGC: без поколений (non-generational) и generational,</li><li>предупредить о дальнейшем фокусе разработки на generational.</li></ul><p>Раньше ZGC хранил молодые и старые объекты вместе и собирал все объекты сразу. С созданием generational ZGC хранит молодые и старые объекты в разных областях и чаще собирает молодые объекты, что уменьшает потребление ресурсов CPU и кучи при сборке мусора.</p><p>Чтобы включить ZGC generational в командной строке или IDE, передайте следующие аргументы при выполнении программы:</p><ul><li>-XX:+UseZGC</li></ul><p>Используется generational ZGC.</p><ul><li>-XX:+UseZGC -XX:+ZGenerational</li></ul><p>Используется generational ZGC. Выдается предупреждение о том, что опция ZGenerational является устаревшей. Выдается предупреждение о том, что режим без поколений (non-generational) устарел и подлежит удалению.</p><p>Команда <a href="https://axiomjdk.ru/">Axiom JDK</a> реализовала доработку сборщиков мусора G1 GC, CMS GC, Parallel GC и Serial GC для выполнения требований ФСТЭК. Эта доработка включает в себя патчи, которые зануляют содержимое объектов, деаллоцируемых сборщиком мусора, и не дают другим приложениям получить доступ к конфиденциальным данным.</p><h4>Структурированный параллелизм (третья предварительная версия)</h4><p>Чтобы упростить многопоточное программирование, в JDK 19 было представлено API структурированного параллелизма. Это<a href="https://openjdk.org/jeps/480"> третья предварительная версия этого API</a>, которая будет включена в JDK 23 без изменений для получения обратной связи от разработчиков.</p><p>Структурированный параллелизм (Structured Concurrency) рассматривает группы связанных задач, выполняемых в разных потоках как единое целое. Задача расщепляется на несколько подзадач, которые выполняются в отдельных потоках. Затем эти подзадачи воссоединяются в блоке кода главной задачи. Таким образом, задача координирует выполнение подзадач и отслеживать ошибки их выполнения. Это устраняет риски, связанные с отменой и внезапным завершением работы.</p><ul><li>Взаимосвязь между задачами и подзадачами будет чётко прослеживаться в структуре кода, что повышает наблюдаемость.</li><li>Если происходит сбой в подзадаче или поток, выполняющий задачи, прерывается до вызова join(), то другие подзадачи отменяются. Это повышает надёжность кода.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/93149/2024-09-10/5ad3b4c5-7b54-4540-a52a-ad48691d3641.png" alt="" /></figure><h2>Удобство разработки</h2><p>Всё больше фичей Java позволяют упрощать написание кода и делать это быстрее.</p><h4>Примитивные типы в шаблонах pattern matching, instanceof и switch (предварительная версия)</h4><p>Благодаря <a href="https://openjdk.org/jeps/455">JEP 455</a> можно использовать примитивные типы во всех контекстах шаблонов. Это улучшит pattern matching и расширит функции instanceof и switch для работы со всеми примитивными типами.</p><p>Цели этого JEP:</p><ul><li>устранить ошибки времени исполнения,</li><li>позволить исследовать данные примитивных или ссылочных типов единым образом.</li></ul><p>Раньше instanceof работал только с ссылочными типами, а удобного способа проверить примитивные значения на безопасность приведения типа не было. Из-за этого примитивное значение могло быть «по-тихому» преобразовано без выброса исключения. Теперь оператор instanceof проверяет и примитивные типы. Если значение может быть безопасно приведено, instanceof вернёт true, иначе — false.</p><p>С поддержкой примитивных типов в конструкции switch выражение ниже:</p><p>Можно переписать c заменой блока default на блок с паттерном примитивного типа int, который раскрывает сопоставляемое значение:</p><p>Теперь к instance of. Преобразование значения int в float выполняется автоматически оператором присваивания, несмотря на то, что это потенциально может привести к потере данных. Разработчик не получает предупреждения об этом:</p><p>Между тем, преобразование значения из int в byte выполняется с помощью явного приведения, но это приведение потенциально может привести к потере данных, поэтому ему должна предшествовать трудоемкая проверка диапазона значений:</p><p>instanceof сможет проверять как значения, так и типы. Два предыдущих примера можно переписать так:</p><h4>Stream Gatherers (вторая предварительная версия)</h4><p>Stream Gatherers появились в JDK 22 для усовершенствования Stream API поддержкой пользовательских intermediate-операторов. Во <a href="https://openjdk.org/jeps/473">второй предварительной версии</a> нет изменений по сравнению с JDK 22, цель этой версии — собрать дополнительную обратную связь и улучшить опыт использования.</p><p>Stream Gatherers позволит стримам преобразовывать данные более лёгкими способами по сравнению с существующими встроенными intermediate-операторами. Цели создания Stream Gatherers:</p><ul><li>сделать стримы более гибкими,</li><li>позволить пользовательским intermediate-операторам управлять бесконечными потоками.</li></ul><p>До Stream Gatherers для создания необходимой логики в уже существующих intermediate-операторах приходилось создавать отдельные классы или методы. Теперь Stream::gather(Gatherer) позволяет обрабатывать потоки в определённом пользователем порядке.</p><p>gather() также является промежуточной операцией, поэтому может быть несколько gather() в одной цепочке:</p><p>Чтобы добиться такого же результата, как в примере выше, Gatherer поддерживает метод andThen(Gatherer). Так, этот пример эквивалентен следующей записи:</p><h4>Поддержка Markdown-разметки в doc-комментариях</h4><p>Благодаря <a href="https://openjdk.org/jeps/467">JEP 467</a> для написания doc-комментариев можно использовать Markdown, а не только сочетание HTML и тэгов JavaDoc. Это облегчит чтение и написание комментариев в исходном виде для API.</p><p>Сравните, как выглядит doc-комментарий в<a href="https://github.com/openjdk/jdk/blob/1330d4eaa54790b468f69e61574b3c5d522be120/src/java.base/share/classes/java/lang/Object.java#L69-L101"> java.lang.Object.hashCode</a> с использованием HTML и javadoc-тэгов:</p><p>А теперь посмотрите, как выглядит этот же doc-комментарий, но в стиле Markdown без HTML и с несколькими javadoc-тэгами:</p><p>Совсем другое дело. Его легче как написать, так и прочитать.</p><h4>Импортирование модулей (предварительная версия)</h4><p><a href="https://openjdk.org/jeps/476">JEP 476</a> позволит импортировать сам модуль вместо явного импортирования его отдельных пакетов. Это упростит переиспользование модульных библиотек путём одновременного импортирования модулей.</p><p>Вместо перечисления всех нужных пакетов модуля в коде, вы сможете одной строкой кода импортировать сам модуль с нужными пакетами. Новички в Java-разработке смогут импортировать требуемые библиотеки и системные Java-классы без необходимости изучать положение этих библиотек и классов в иерархии пакетов.</p><p>Так, вместо:</p><p>достаточно будет написать:</p><h4>Неявные классы и main-методы экземпляра класса (третья предварительная версия)</h4><p>С помощью неявных классов и main-методов экземпляра класса начинающие Java-разработчики могут писать простые программы без сложных конструкций корпоративной разработки и усложнять свои программы с углублением знаний. Опытные разработчики смогут создавать приложения без компонентов, используемых для программирования крупных систем.</p><p>Рассмотрим пример. Так выглядит базовая программа Hello World!, которая даётся на начальном уровне изучения Java:</p><p>Примитивная по сути программа на Java усложняется большим количеством кода, непонятных новичку понятий и конструкций: class с модификатором доступа public, параметр String[] args, модификатор static и вывод System.out.println(). Прежде чем написать даже такую программу, нужно изучить кучу всего.</p><p>Неявные классы имеют только конструктор по умолчанию без параметров (zero-parameter) находящийся в пакете unnamed, на который нельзя ссылаться по имени. Каждый неявный класс должен содержать метод main и представлять собой самостоятельную программу.</p><p>Тогда Hello World! упрощается до трёх строк:</p><p>В <a href="https://openjdk.org/jeps/477">третьей предварительной версии</a>:</p><p>1. Неявные классы автоматически импортируют три статических метода для простого текстового ввода и вывода с консоли. Эти методы объявлены в новом классе верхнего уровня java.io.IO:</p><ul><li>public static void println(Object obj),</li><li>public static void print(Object obj),</li><li>public static String readln(String prompt).</li></ul><p>Теперь можно обойтись без System.in и System.out. Простая интерактивная программа упрощается до:</p><p>2. Неявные классы автоматически по требованию импортируют все публичные классы верхнего уровня и интерфейсы пакетов, экспортируемых модулем java.base. Можно будет использовать API из широко используемых пакетов в теле неявного класса так, будто эти пакеты были импортированы.</p><h4>Гибкий конструктор (вторая предварительная версия)</h4><p>Эта функциональность появилась в JDK 22 под названием <a href="https://openjdk.org/jeps/447">JEP 447: Выражения перед super(…)</a>. Чтобы уменьшить объём и сложность кода, можно добавлять инструкции в конструкторе перед явным вызовом конструктора super() или this(). Это не нарушает естественный порядок инициализации сверху-вниз (top-down).</p><p>Во <a href="https://openjdk.org/jeps/482">второй предварительной версии</a> конструктор сможет инициализировать поля в том же классе перед явным вызовом конструктора. Конструктор суперкласса (superclass) не выполнит код, который увидит значение поля по умолчанию подкласса (например, 0, false или null). Это может произойти, когда из-за переопределения конструктор суперкласса вызывает метод в подклассе, используя некоторое поле.</p><h4>Class-File API (вторая предварительная версия)</h4><p>В Java 22 в предварительной версии появилось стандартный API для парсинга, генерации и трансформации class-файлов. Этот API будет развиваться вместе с форматом класс-файлов и позволит компонентам и фреймворкам Java-платформы использовать его вместо сторонних библиотек.</p><p>Во <a href="https://openjdk.org/jeps/466">второй предварительной версии</a> появилось следующее:</p><ul><li>Упрощён класс CodeBuilder.</li><li>Экземпляры AttributeMapper в Attributes теперь доступны через статические методы, а не через статические поля. Это позволяет реализовать отложенную (“ленивую”) инициализацию и снизить затраты на запуск Java.</li><li>Переделали Signature.TypeArg в алгебраический тип данных для упрощения его использования.</li><li>Добавлены ClassReader.readEntryOrNull и ConstantPool.entryByIndex, которые выбрасывают ConstantPoolException вместо ClassCastException, если запись по индексу не требуемого типа. Процессоры Class-File смогут указывать, что несоответствие типа записи набора констант — это проблема формата Class-File, а не процессора.</li><li>Класс ClassSignature точнее моделирует общие сигнатуры суперклассов и суперинтерфейсов.</li><li>Исправлена опечатка в несоответствии имён в TypeKind.</li><li>Удалены подробные методы реализации в ClassReader.</li></ul><h2>Java 23 в России</h2><p>Законы РФ запрещают использование зарубежных дистрибутивов — Oracle JDK и других поставщиков. Чтобы применять Java в проде легально и без опаски, стоит перейти на отечественную платформу<a href="https://axiomjdk.ru/pages/axiom-jdk/"> Axiom JDK</a>. Ее, например, использует почти каждый из нас, оплачивая услуги картой «Мир» и в Системе Быстрых Платежей (СБП), а также картами ушедших Visa и Mastercard. Все они процесcятся на российской Java.</p><p>Axiom JDK зафиксирован в реестре российского ПО и отвечает жестким требованиям критической информационной инфраструктуры (КИИ) по 4-ому уровню доверия сертификации ФСТЭК. Поэтому все секьюрно.</p><p>В целом, технологии Java можно найти почти везде — в соцсетях, добыче нефти и газа, финтехе, облачных сервисах, антивирусах. А ещё кассы самообслуживания в сети магазинов «Пятёрочка» тоже работают на Java. Теперь вы будете вспоминать об этом, когда покупаете там что-либо.</p><h2>Заключение</h2><p>Java 23 — это не LTS-версия. Но опыт Java 22 показал, что российские компании стремятся к инновациям и с момента выпуска стараются тестировать улучшения. Поэтому стоит приглядеться к изменениям в JDK 23 уже сейчас, чтобы оценить преимущества и заранее продумать миграцию на одну из LTS-версий.</p>]]></content:encoded>
    </item>
    <item>
      <title>10 пакетов Python, которые улучшат вашу кодовую базу</title>
      <link>https://tproger.ru/translations/10-paketov-python--kotorye-uluchwat-vawu-kodovuyu-bazu</link>
      <comments>https://tproger.ru/translations/10-paketov-python--kotorye-uluchwat-vawu-kodovuyu-bazu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/10-paketov-python--kotorye-uluchwat-vawu-kodovuyu-bazu</guid>
      <description><![CDATA[<p>Black, MyPy, Pydantic, Hypothesis и другие пакеты Python для чистого кода: форматирование, статический анализ, тестирование. Прокачайте свои проекты!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/10-paketov-python--kotorye-uluchwat-vawu-kodovuyu-bazu">10 пакетов Python, которые улучшат вашу кодовую базу</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Отладка]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 19 Aug 2024 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Data Scientist'ы и разработчики тратят немало времени на отладку кода, чтобы сделать его более эффективным и простым в дальнейшем использовании. Пользователь Medium <a href="https://medium.com/pythoneers/10-python-packages-i-use-to-elevate-my-codebase-standards-df9a19d9e766">нашел</a> 10 пакетов Python, которые повысили его продуктивность в работе. Рассказываем, как они помогают автоматизировать форматирование кода и тестировать его на выявление ошибок на первых этапах.</p><h2>Black</h2><p>Это <a href="https://github.com/psf/black">инструмент</a>, который одновременно выявляет ошибки и форматирует код на Python. В сообществе питонистов уже давно есть PEP8, оформляющий код в едином стиле, и пойти против него — практически преступление. Black менее красивый, но при этом более консистентный, плюс его нельзя конфигурировать. Об этом даже написано в readme.md пакета:</p><blockquote>By using it, you agree to cede control over minutiae of hand-formatting. In return, Black gives you speed, determinism, and freedom from <b>pycodestyle</b> nagging about formatting. You will save time and mental energy for more important matters.<br /><br />Используя его, вы соглашаетесь больше не контролировать форматирование вручную. Взамен Black «обещает» скорость, определенность и свободу от придирчивого отношения к стилю <b>pycodestyle</b>. Тем самым вы экономите свое время и силы для более важных дел.<br /></blockquote><p>Форматирование кода крайне важно при работе над крупными проектами и в больших командах — код будет в разы проще читать, равно как и выявлять ошибки.</p><p>Для установки вводим в командную строку:</p><p>А чтобы сразу приступить к работе с дефолтными настройками, прописываем:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-08-15/90af5382-2b3c-45fb-ab74-ba121e7d9184.png" alt="" /><figcaption>Неотформатированный и отформатированный с помощью Black код</figcaption></figure><h2>MyPy</h2><p>MyPy — <a href="https://github.com/python/mypy">инструмент</a> статической проверки типов, который поддерживает и динамическую типизацию (duck typing). Он помогает выявлять ошибки несоответствия типов в коде до его выполнения, повышает надежность программы, а еще — поддерживает другие библиотеки и разные режимы проверки типов.</p><p>Для установки вводим:</p><p>Пример кода с ошибками, который проверяет работу MyPy:</p><p>Вывод будет такой:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-08-15/a51709a1-cd7a-4ba8-be14-41c5d8c1d2fa.png" alt="" /></figure><h2>Pydantic</h2><p>Популярная <a href="https://docs.pydantic.dev/latest/">библиотека</a> для проверки данных и управления настройками. Внутри — интуитивно понятный синтаксис и user-friendly инструменты, которые проверяют данные на достоверность и соответствие заданным типам и ограничениям.</p><p>Pydantic определяет структуру данных декларативным способом с помощью аннотаций типов Python, а также использует схему JSON для интеграции инструментов и проверяет стандартные типы библиотек с помощью TydepDicts.</p><p>Вот простой пример, как работает Pydantic:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-08-15/87c606c1-9a36-47be-a5fd-e1bbd4cc60aa.png" alt="" /><figcaption>Код без использования Pydantic и с ним</figcaption></figure><p>Здесь можно увидеть, как использование библиотеки Pedantic уменьшило размер кода и сделало его более понятным за счет того, что в нежелательном кастомном методе validate() особо нет необходимости.</p><h2>Hypothesis</h2><p>Это мощная <a href="https://hypothesis.readthedocs.io/en/latest/">библиотека</a> Python для property-based тестирования, которая генерирует тестовые данные в соответствии с определенными правилами (strategies). Основная идея заключается в том, чтобы задать общие свойства программы, а Hypothesis автоматически сгенерирует множество входных данных для проверки этих свойств.</p><p>Библиотека интегрируется со многими популярными утилитами для тестирования, например, с pytest и unittest.</p><p>Установка:</p><p>Вот пример простого кода с ошибкой деления на 0, которую проверяет «Гипотеза»:</p><p>Тест выдаст следующее:</p><h2>Pre-commit</h2><p>Классный <a href="https://pre-commit.com/">фреймворк</a> Python для управления многоязычными прекоммитами и их поддержки. Он определяет набор проверок и преобразований, которые выполняются в вашем коде автоматически перед каждым коммитом.</p><p>Для установки:</p><p>Вот как это работает:</p><ul><li>Создаем файл .pre-commit-config.yaml в корневой структуре проекта:</li></ul><ul><li>Устанавливаем скрипты Git-хуков:</li></ul><ul><li>Сам коммит-код:</li></ul><p>Pre-commit автоматически проверит код на ошибки и исправит их.</p><h2>Vulture</h2><p><a href="https://pypi.org/project/vulture/">Пакет</a> Python, который выявляет мертвый код в ваших проектах и выдает подробный отчет.</p><p>Мертвый код — код, который никогда не использовался и не выполнялся, он может накапливаться с течением времени, но при этом не несет никакой пользы.</p><p>Устанавливаем:</p><p>Работает это так:</p><h2>Isort</h2><p>Утилита командной строки и одновременно <a href="https://pycqa.github.io/isort/">библиотека</a>, которая упрощает жизнь разработчикам. Она сортирует import Python — упорядочивает и делает его более читабельными, группируя по типу (стандартная библиотека, сторонние и локальные) и выстраивая в алфавитном порядке внутри каждой группы.</p><p>Для установки:</p><p>Пример до и после использования Isort:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-08-15/eb5815aa-bb68-4dba-b11a-46ebc4a6d455.png" alt="" /><figcaption><br /></figcaption></figure><h2>PyDocstyle</h2><p><a href="http://www.pydocstyle.org/en/stable/">Утилита</a> проверяет, соответствует ли ваши docstrings стандарту PEP 257. Это стиль, который упорядочивает высокоуровневую структуру таких строк — что они должны содержать и как их писать (при этом он не затрагивает синтаксис в самих строках).</p><p>Для установки:</p><p>Затем пишем это и проверяем свой код:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-08-15/7250cb05-d4f3-4c46-8a03-ac9e7da0ed7f.png" alt="" /><figcaption>Пример кода автора</figcaption></figure><p>Вывод будет следующий:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-08-15/1f8c1f3d-8d23-4008-8e63-b8933c6625d6.png" alt="" /></figure><h2>Bandit</h2><p><a href="https://bandit.readthedocs.io/en/latest/">Программа</a> проверяет безопасность кода. Она ищет наиболее частые проблемы в приложениях на Python.mlt, анализирует AST (абстрактное синтаксическое дерево) и запускает набор плагинов для выявления ошибок.</p><p>Код, который проверял автор статьи на ошибки безопасности:</p><p>Вот какой результат выдал «Бандит»:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-08-15/68f2fd3f-ffe9-4dbf-82f4-97ae9dacad02.png" alt="" /></figure><h2>Radon</h2><p><a href="https://radon.readthedocs.io/en/latest/">Пакет</a> Python, который анализирует исходный код и вычисляет различные метрики, включая Cyclomatic Complexity (CC), Maintainability Index (MI), Raw metrics (SLOC, комментарии, пустые строки), и Halstead metrics. Radon помогает найти слишком сложные части кода, которые можно упростить, а также выдает отчеты для документирования и проверки кода. Пакет особенно полезен в больших проектах, когда код должен быть качественным, отлаженным и системным.</p><p>Устанавливаем:</p><p>Код, который автор статьи тестировал на сложность:</p><p>Для теста: random cc code.py</p><p>Чтобы эффективнее использовать Radon, можно создать файл конфигурации random.cfg — так будет проще управлять действиями пакета:</p><p>Эта конфигурация исключает определенные каталоги и устанавливает минимальные пороговые значения для Cyclomatic Complexity and Maintainability Index.</p><p><i>Конечно, это далеко не все фичи, которые будут действительно полезны питонистам. Если у вас есть другие крутые решения — приносите в комментарии. </i></p>]]></content:encoded>
    </item>
    <item>
      <title>Зачем нужна эта библиотека Python в веб-разработке</title>
      <link>https://tproger.ru/quiz/zachem-nuzhna-eta-biblioteka-python-v-veb-razrabotke</link>
      <comments>https://tproger.ru/quiz/zachem-nuzhna-eta-biblioteka-python-v-veb-razrabotke?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Сергей Лалетин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/quiz/zachem-nuzhna-eta-biblioteka-python-v-veb-razrabotke</guid>
      <description><![CDATA[<p>Пройдите небольшое тестирование, чтобы узнать, насколько вы знакомы с Python-библиотеками и фреймворками, которые используют в веб-разработке.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/quiz/zachem-nuzhna-eta-biblioteka-python-v-veb-razrabotke">Зачем нужна эта библиотека Python в веб-разработке</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Викторины]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 26 Jul 2024 09:30:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Недавно мы рассказали о <a href="https://tproger.ru/articles/30-samyh-poleznyh-bibliotek-python-dlya-veb-razrabotki-v-2024-godu?utm_source=tproger&amp;utm_medium=pinned&amp;utm_campaign=feed&amp;utm_term=hot">30 самых полезных библиотеках Python для веб-разработки в 2024 году</a>. А теперь проверим, насколько внимательно вы читали нашу статью.</p>]]></content:encoded>
    </item>
    <item>
      <title>Система для Хекслета, релиз ChatGPT Omni и Джейло на репите: Ретроперспектива недели с Кириллом Мокевниным</title>
      <link>https://tproger.ru/articles/razrabotka-sistem-dlya-abiturientov--reliz-chatgpt-omni-i-frejmvorki--retroperspektiva-nedeli-s-kirillom-mokevninym</link>
      <comments>https://tproger.ru/articles/razrabotka-sistem-dlya-abiturientov--reliz-chatgpt-omni-i-frejmvorki--retroperspektiva-nedeli-s-kirillom-mokevninym?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/razrabotka-sistem-dlya-abiturientov--reliz-chatgpt-omni-i-frejmvorki--retroperspektiva-nedeli-s-kirillom-mokevninym</guid>
      <description><![CDATA[<p>В новом выпуске рубрики «Ретроперспектива недели» мы общаемся с Кириллом Мокевниным — автором тг-канала «Организованное программирование», разработчиком-преподавателем и сооснователем популярной онлайн-школы для разработчиков Хекслет.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/razrabotka-sistem-dlya-abiturientov--reliz-chatgpt-omni-i-frejmvorki--retroperspektiva-nedeli-s-kirillom-mokevninym">Система для Хекслета, релиз ChatGPT Omni и Джейло на репите: Ретроперспектива недели с Кириллом Мокевниным</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Системный анализ]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Системное администрирование]]></category>
      <category><![CDATA[YouTube]]></category>
      <category><![CDATA[Ретроперспектива недели]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 14 Jul 2024 08:28:20 GMT</pubDate>
      <content:encoded><![CDATA[<p>Это третья «Ретроперспектива недели», где мы рассказываем о специалистах, которые делают IT сферу медийной, а также о тех, с кем мы запускаем (или планируем запускать) коллаборации.</p><p>Для нового выпуска мы спросили про итоги недели Кирилла Мокевнина – <a href="https://www.youtube.com/@mokevnin">автор YouTube</a> и <a href="https://t.me/orgprog">тг-канала «Организованное программирование»</a>, разработчик-преподаватель и сооснователь <a href="https://ru.hexlet.io/">онлайн-школы Хекслет</a>.</p><p>Кирилл делится своим опытом разработки системы для Хекслет Колледжа, реакцией на релизе СhatGPT Omni и советами по продуктивности.</p><h2>Как прошла неделя? Над чем работаешь в последнее время?</h2><p>Активно участвую в разработке небольшой системы, для работы с абитуриентами в Хекслет Колледже. Это система, которая упрощает работу по приему документов и оплаты обучения. Сейчас самая активная стадия набора и я доводил эту систему до ума, упрощая и ускоряя процесс поступления</p><h2>Какая из последних IT новостей запомнилась тебе больше всего? Почему?</h2><p>Релиз <a href="https://chatgpt.com/g/g-Fgq85y5ft-omni">ChatGPT Omni</a>. То как он работает с картинками это просто что-то. Еще понравился софт, который через себя пропускает звонки в поддержку и делает речь спокойной, если на той стороне ведут себя агрессивно. Спасет кучу нервов людям, которые работают в саппорте.</p><p>Вообще все что происходит вокруг ИИ не может не радовать. Я слежу за интересными проектами в этой сфере и активно встраиваю их в мои личные процессы и процессы Хекслета.</p><h2>С какой сложной задачей ты столкнулись в последнее время? Какой простой совет можешь дать, чтобы решить</h2><p>Для поступления в колледж заполняется большая многоступенчетая форма со множеством разнообразных документов, состав которых зависит от количества параметров, включая пол, возраст, гражданство и т.п.</p><p>Причем каждый документ проходит процесс верификации с возможным отклонением. Нам нужно было не просто реализовать эту систему, но и сделать ее такой, чтобы документы и шаги в этот процесс могли добавляться достаточно легко и со стороны UI и со стороны бекенда. В итоге получилась довольно удобно.</p><blockquote>Совет тут простой, описание такой системы хорошо ложится в модель конечного автомата, вот их мы и применили.</blockquote><h2>Что слушал на неделе: трек или подкаст</h2><p>Недавно открыл для себя <a href="https://open.spotify.com/artist/6eO723WUfo5COLd8HF5fOx">группу Джейло</a>. Слушаю на репите.</p><h2>Что советуешь почитать и посмотреть</h2><p>Порекомендую свою же статью, про то как неделю назад в процессе разработки этого проекта, <a href="https://habr.com/ru/articles/825944/">у нас удалилась продакшен база данных из-за неожиданного поведения фреймворка</a></p><p>Из того, что советую посмотреть. <a href="https://www.youtube.com/watch?v=cLks20b3XWE">Мне очень понравилось интервью известного уборщика в тренажерном зале</a>. Рекомендую всем, кто так или иначе задумывается о том, чтобы начать блоггерскую деятельность.</p><h2>Твой топ-3 приложений</h2><ul><li>Telegram</li><li>X (twitter)</li><li>Amazon</li></ul><p>Если говорить про работу, то по сути два: Slack и Notion</p><h2>Как планируешь проводить выходные и что посоветуешь другим попробовать</h2><p>Куда-нибудь пойдем с детьми. Ну и обязательно спорт, я катаюсь на роликах, рекомендую попробовать wizard skating. Очень красиво и получается зарядиться на работу.</p><h2>Как итог — любимый IT-мем недели!</h2><figure><img src="https://media.tproger.ru/user-uploads/99854/2024-07-12/c009bd6d-0879-4007-aac9-2353c16da407.jpg" alt="" /></figure><p>Следите за новыми выпусками «Ретроперспективы недели» на Tproger — будет ещё больше интересного! Если у вас есть идеи, кого бы вы хотели видеть в следующем выпуске, дайте нам знать!</p>]]></content:encoded>
    </item>
    <item>
      <title>30 самых полезных библиотек Python для веб-разработки в 2024 году</title>
      <link>https://tproger.ru/articles/30-samyh-poleznyh-bibliotek-python-dlya-veb-razrabotki-v-2024-godu</link>
      <comments>https://tproger.ru/articles/30-samyh-poleznyh-bibliotek-python-dlya-veb-razrabotki-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Лена Капаца]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/30-samyh-poleznyh-bibliotek-python-dlya-veb-razrabotki-v-2024-godu</guid>
      <description><![CDATA[<p>Полный список библиотек Python для веб-разработки: от Django и FastAPI до pandas и cryptography. Сохраните в закладки — пригодится каждому разработчику.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/30-samyh-poleznyh-bibliotek-python-dlya-veb-razrabotki-v-2024-godu">30 самых полезных библиотек Python для веб-разработки в 2024 году</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 10 Jul 2024 09:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы только подступились к верстке своего первого сайта на Python, эта статья поможет разобраться, какие библиотеки Python и инструменты — мастхэв, и чем вообще руководствоваться при выборе инструмента.</p><p>Кстати, вы можете проверить свои знания: <a href="https://tproger.ru/quiz/zachem-nuzhna-eta-biblioteka-python-v-veb-razrabotke">попробуйте угадать, для чего нужна та или иная Python-библиотека</a>.</p><p>Гайд написан владелицей Django-сайта. Если вам интересно, как пересесть с nocode-CMS вроде WordPress на самописную админку, посмотрите эту статью.</p><h2>Универсально для всех фреймворков</h2><p>Даже если не все инструменты понятны и нужны сразу, сохраните этот листинг в закладки: тогда тулы вроде gunicorn станут «на вырост».</p><ul><li><a href="https://pillow.readthedocs.io/">pillow</a>: библиотека для работы с изображениями.</li><li><a href="https://www.psycopg.org/docs/">psycopg</a>: один из лучших адаптеров PostgreSQL для Python.</li><li><a href="https://pypi.org/project/python-dateutil/1.4/">python-dateutil</a>: расширение для стандартного py-модуля datetime.</li><li><a href="https://www.npmjs.com/package/bootstrap-icons">boostrap-icons</a>: npm-пакет с иконками, прикручиваемый к HTML-темплейту.</li></ul><ul><li><a href="https://tzdata.readthedocs.io/">tzdata</a>: утилита с информацией о временных зонах.</li><li><a href="https://urllib3.readthedocs.io/">urllib3</a>: для выполнения запросов к веб-серверам.</li><li><a href="https://requests.readthedocs.io/">requests</a>: одна из самых популярных библиотек для HTTP-запросов на Python.</li><li><a href="https://pypi.org/project/sqlparse/">sqlparse</a>: форматирование и парсинг SQL-запросов.</li><li><a href="https://pypi.org/project/text-unidecode/">text-unidecode</a>: транслитерация из Unicode в ASCII.</li></ul><ul><li><a href="https://pandas.pydata.org/docs/">pandas</a>: библиотека для работы с табличными данными.</li><li><a href="https://eff-certbot.readthedocs.io/">certbot</a>: бесплатные SSL-сертификаты.</li></ul><ul><li><a href="https://plotly.com/python/">plotly</a>: дизайнерские графики с тонкой настройкой почти любого аспекта.</li></ul><ul><li><a href="https://fastapi.tiangolo.com/">FastAPI</a>: современный, быстрый веб-фреймворк для создания API.</li><li><a href="https://docs.pytest.org/en/stable/contents.html">pytest</a>: быстрее способа писать тесты для ваших функций просто нет.</li><li><a href="https://docs.gunicorn.org/">gunicorn</a>: сервер для запуска Python веб-приложений.</li></ul><ul><li><a href="https://pypi.org/project/six/">six</a>: библиотека для совместимости кода между Python 2 и 3.</li></ul><ul><li><a href="https://pypi.org/project/PyYAML/">PyYAML</a>: человекочитаемый формат конфигов.</li></ul><p>Для подобных файлов Python нужен отдельный коннектор</p><ul><li><a href="https://pypi.org/project/wheel/">wheel</a>: ускоряет установку библиотек и модулей.</li><li><a href="https://pypi.org/project/charset-normalizer/">charset-normalizer</a>: управляет кодировкой текста.</li></ul><p>Помимо прочего, обеспечивает совместимость с разными браузерами и спасает от вредоносного кода, отправляемого через формы.</p><ul><li><a href="https://pypi.org/project/idna/">idna</a>: обработка доменных имен с интернациональными символами.</li></ul><ul><li><a href="https://pypi.org/project/typing-extensions/">typing-extensions</a>: аннотация типов для разных версий Python.</li></ul><p>Инструмент позволяет, например, на Python 2, использовать аннотацию типов крайней версии языкового пакета.</p><ul><li><a href="https://pypi.org/project/cryptography/">cryptography</a>: шифрование, хэширование — защита ваших данных от третьих лиц.</li></ul><p>Прочитать зашифрованное сообщение без «ключа» у хакера не получится.</p><ul><li><a href="https://pypi.org/project/fsspec/">fsspec</a>: унифицирует обращение с файлами вне зависимости от ОС.</li><li><a href="https://pypi.org/project/MarkupSafe/">MarkupSafe</a>: безопасное отображение HTML/XML-текста.</li><li><a href="https://pypi.org/project/python-slugify/">python-slugify</a>: создание коротких дружелюбных URL.</li></ul><h2>Django-мастхэв</h2><ul><li><a href="https://pypi.org/project/django-tailwind/">django-tailwind</a>: интеграция CSS-фреймворка Tailwind с Django.</li><li><a href="https://django-tinymce.readthedocs.io/">django-tinymce</a>: интеграция WYSIWYG-редактора TinyMCE.</li></ul><ul><li><a href="https://pypi.org/project/django-mathjax/">django_mathjax</a>: пакет для встраивания MathJax.</li></ul><p>Вжух! И читатель увидит следующее:</p><ul><li><a href="https://pypi.org/project/django-orm/">django-orm</a>: переключение между SQLite и PostgreSQL.</li><li><a href="https://pypi.org/project/django-js-asset/">django-js-asset</a>: управление зависимыми от JavaScript файлами.</li></ul><h2>Заключение</h2><p>Стоит признать: подбор стека — задача не для новичков. Пока начинающий веб-разработчик только-только справляется со стандартными для сайта фичами, вроде форм обратной связи и картинками с CDN-ссылок, оперативной памяти мозга на выбор библиотек, как правило, не остается. Вы можете воспользоваться предложенными в статье общепринятыми решениями, однако функционал моего блога и вашего проекта наверняка различаются. Списка выше будет недостаточно.</p><p>В такой ситуации полезны LLM: ChatGPT и прочие ассистенты даже с меньшим числом параметров справляются с выдачей общепринятых решений «на пять». Так что начинаем с проверенного комьюнити решения по умолчанию, и только потом, когда ощутим свободу и желание экспериментировать, пробуем менять pandas на polars.</p><p>Мне не хочется обманывать новоприбывших, что переписывать под новую библиотеку весь код — нормально. Это ресурсоемко и больно. Тем более, если это ваш пет-проект, и на него приходится разыскивать время.</p><p><i>Если вас как веб-разработчика порадовал какой-то новый питонический инструмент, способный потеснить укоренившиеся решения, поделитесь в комментариях.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Фронтенд-разработка: чем занимаются и сколько зарабатывают специалисты</title>
      <link>https://tproger.ru/articles/frontend-razrabotka--chem-zanimayutsya-i-skolko-zarabatyvayut-specialisty</link>
      <comments>https://tproger.ru/articles/frontend-razrabotka--chem-zanimayutsya-i-skolko-zarabatyvayut-specialisty?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Сергей Лалетин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/frontend-razrabotka--chem-zanimayutsya-i-skolko-zarabatyvayut-specialisty</guid>
      <description><![CDATA[<p>Профессия фронтенд-разработчика сейчас в числе самых востребованных в IT. Разбираем базовые вопросы для тех, кто планирует стать фронтенд-разработчиком.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/frontend-razrabotka--chem-zanimayutsya-i-skolko-zarabatyvayut-specialisty">Фронтенд-разработка: чем занимаются и сколько зарабатывают специалисты</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 15 May 2024 08:21:14 GMT</pubDate>
      <content:encoded><![CDATA[<p>Для тех, кто хочет вкатиться в сферу, разобрали основные вопросы и рассказали, на что стоит обращать внимание начинающим специалистам.</p><h2>Чем занимаются фронтенд-разработчики</h2><p>Фронтенд-разработчик пишет интерфейс — ту часть сайта или приложения, с которой взаимодействуют пользователи. Задача специалиста — сделать его максимально понятным и комфортным для них.</p><p>Фронтендер отвечает за то, чтобы все элементы интерфейса были на своих местах и работали как надо: меню, кнопки и формы обратной связи, корзины, карточки товаров (и это далеко не весь список).</p><h2>Какие навыки нужны специалистам</h2><p>Самый распространенный список хард скиллов выглядит так:</p><ul><li>HTML — формирование структуры страницы;</li><li>CSS — добавление цветов, позиционирование элементов, анимации и прочее.</li><li>JavaScript и TypeScript — добавление «интерактивности», элементов, которые решают  задачи пользователя прямо в браузере.</li><li>фреймворки, например, React или Vue — разработка полноценных веб-приложений.</li></ul><p>Еще фронтенд-разработчику нужны софт-скиллы. Среди них умение копать вглубь, разбираться в сути задач как с точки зрения бизнеса, так и пользователей и умение работать в команде.</p><h3>Важнейшие навыки — умения общаться и вставать на место пользователя</h3><p>Комфорт пользователя при работе с интерфейсом — одна из важнейших составляющих общего впечатления о продукте. И чтобы его обеспечить, фронтенд-разработчику нужны в первую очередь не технические навыки, а умение проявлять эмпатию, вставать на место пользователя, понимать его потребности.</p><p>И только когда эти потребности четко сформулированы, можно переходить к коду.</p><p>Чтобы создать максимально комфортное приложение, потребуется работать вместе с дизайнерами, аналитиками, бэкенд-разработчиками, тестировщиками и другими участниками команды. Можно поискать хорошие решения у коллег по цеху. Фронтенд — достаточно открытая сфера, и многие разработчики с радостью делятся своими решениями в статьях и докладах. Или даже выкладывают исходный код проектов на GitHub.</p><h3>Еще нужно постоянно быть в курсе изменений</h3><p>Фронтенд — относительно молодая и стремительно развивающаяся сфера, в которой регулярно появляются новые технологии и практики. И требования к специалистам очень зависят от трендов и потребностей аудитории.</p><p>Например, когда-то сайты были простыми, легковесными страницами. Для их разработки использовали HTML, CSS и немного JavaScript-кода. Но требования к интерфейсам росли, больше логики переносилось на клиентскую часть — доля JS начала расти и появились фреймворки, которые помогали делать самостоятельные веб-приложения.</p><p>В процессе выросло время загрузки сайта, поскольку загрузка и выполнение JavaScript-кода гораздо дороже для браузера, чем работа со статическим HTML. Чтобы вернуть время до показа пользователю контента к прежним показателям, возникла техника SSR (Server Side Rendering), которая позволяет выполнить большую часть логики формирования интерфейса на сервере. Она оказалась особенно актуальна для сайтов, на которых пользователь в первую очередь получает какую-либо информацию, а не взаимодействует с интерфейсом: сайты со статьями и новостями, лендинги и так далее. И появились метафреймворки (например, Next.js). Они позволили структурировать код так, чтобы в браузер отправлялось минимальное количество JavaScript при той же функциональности.</p><p>В противовес появилась технология PWA (Progressive Web Application), которая оказалась полезна сложным интерактивным приложениям (приложения банков, графические редакторы или интернет-магазины). Она позволила устанавливать веб-приложения на смартфоны или планшеты и пользоваться ими вне браузера, порой даже без интернета.</p><h2>Сколько зарабатывают фронтендеры</h2><p>По данным «Хабр Карьеры» зарплаты фронтенд-разработчиков составили в среднем 150 тысяч. Джуниоры в России в среднем получают 60 тысяч,  специалисты уровня мидл — 150+ тыс. руб. в месяц, а сеньоры — 280+ тыс. руб.</p><p>Стажеры получают около 40 тысяч.</p><p>Зарплата сотрудника в любой компании будет зависеть от того, насколько быстро и качественно будет решать потребности бизнеса, в том числе — взаимодействовать с клиентами.</p><h2>Куда можно расти</h2><p>Из фронтенда можно вырасти в другие специальности — не особо меняя стек технологий. Например, если перейти с React DOM на React Native, можно перейти с фронтенда в мобильную разработку. И не нужно учить новый язык и кардинально менять навыки.</p><p>А JavaScript используют везде: программирование микроконтроллеров и роботов, создание мобильных приложений и игр, даже анимация и создание видеоконтента.</p><p>Подробнее о пути развития фронтенд-разработчика вы можете узнать <a href="https://tproger.ru/articles/chto-dolzhen-umet-frontend-razrabotchik-v-2023-godu-roadmap">в статье «Что должен уметь Frontend разработчик (+Roadmap)»</a>.</p><p>Фронтенд-разработка тесно связана с DevOps. Если вы хотите расширить свои навыки и работать в динамичной среде, обратите внимание на вакансию <a href="https://tproger.ru/jobs/devops-inzhener-10">Devops-инженера в Островок — travel-tech компанию.</a> Этот опыт поможет вам лучше понять взаимодействие между разработкой и эксплуатацией.</p><h2>И пара советов напоследок</h2><p>1. Слушайте тематические подкасты, например:</p><ul><li><a href="https://web-standards.ru/podcast/">«Веб-стандарты»</a> — здесь обсуждают тренды, актуальные технологии. Это мастхэв для фронтенд-разработчика.</li><li><a href="https://podlodka.io">«Подлодка»</a> — про IT целом. Очень полезен, чтобы расширить кругозор.</li></ul><p>2. Посещайте профильные конференции и митапы:<a href="https://www.youtube.com/@HolyJS"> HolyJS</a>;<a href="https://www.youtube.com/watch?v=IfhNItY_AEA"> Frontend Conf</a>;<a href="https://www.youtube.com/@YandexforFrontend"> Я 💛 Фронтенд</a>.</p><p>3. Читайте тематические ресурсы:</p><ul><li>Популярный в русскоязычном сегменте<a href="https://habr.com/"> Habr</a>.</li><li><a href="https://dev.to/">dev.to</a> — похожий на Хабр англоязычный ресурс.</li><li><a href="https://doka.guide/?ysclid=lqfyk45ffr573948812">Дока</a> — русскоязычная энциклопедия про веб-технологии. Весь контент и исходный код есть в открытом доступе на GitHub и поддерживаются сообществом. Так что любой может внести свой вклад в ее развитие.</li><li><a href="https://developer.mozilla.org/ru/">MDN</a> — справочник преимущественно на английском языке. Русскоязычная версия обновляется с задержкой, поэтому советуем прокачать язык.</li></ul><p>4. Проходите профессиональное обучение. Могу посоветовать курс <a href="https://skillbox.ru/course/frontend-developer/">«Профессия Фронтенд-разработчик»</a>, который мы делали вместе со Skillbox.</p><p>5. Пользуйтесь интерфейсами, которые создавали другие разработчики, и черпайте вдохновение из них.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стартер-пак Android-разработчика: что учить</title>
      <link>https://tproger.ru/articles/starter-pak-android-razrabotchika--chto-uchit</link>
      <comments>https://tproger.ru/articles/starter-pak-android-razrabotchika--chto-uchit?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/starter-pak-android-razrabotchika--chto-uchit</guid>
      <description><![CDATA[<p>Узнали у middle и senior разработчиков, что нужно учить каждому Android-разработчику, какие фреймворки, библиотеки и инструменты устарели, а какие актуальны.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/starter-pak-android-razrabotchika--chto-uchit">Стартер-пак Android-разработчика: что учить</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 22 Feb 2024 13:40:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Узнали у middle и senior разработчиков, что нужно учить каждому Android-разработчику. Спросили, какие фреймворки, библиотеки и инструменты безнадёжно устарели, а какие невероятно актуальны.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><h2>Какие библиотеки, инструменты, фреймворки Android уже устарели?</h2><p>Андроид развивается очень динамично, поэтому, многое из того, что было популярно 5 лет назад уже не используется. Конечно же сразу приходит на ум RxJava, про нее был каждый второй доклад на любой конференции 5-6 лет назад. А теперь ее изредка спрашивают на собеседованиях. На замену ей пришли Kotlin Coroutines.</p><p>Java как язык разработки под андроид остался, наверное, только в каких-то старых проектах динозаврах. Kotlin это новый стандарт уже лет 6.</p><p>С появлением Jetpack Compose UI код использующий стандартные Android Views стал легаси. Многие приложения сейчас Compose First, и все новые фичи тоже разрабатываются на Compose.</p><p>Архитектура презентационного слоя так же изменилась, всё меньше можно увидеть MVP, а MVVP и MVI стали де факто стандартами разработки.</p><h2>Какие библиотеки Android нужно знать в 2024 году?</h2><p>Если мы возьмем более менее стандартное приложение со стандартными подходами, то наверняка там будут эти библиотеки: Retrofit 2, Dagger2/Hilt, Kotlin Coroutines, Jetpack ViewModel, Room, Lifecycle. Но стоит помнить, что библиотеки приходят и уходят, а фундаментальные знания остаются. Человеку, освоившему фундамент будет гораздо легче освоить какую-либо библиотеку.</p><h2>Какие фреймворки Android нужно знать в 2024 году?</h2><p>В Андроид немного фреймворков, наверное главный и самый нашумевший в последнее время это Jetpack Compose. Так же стоит знать архитектурные подходы MVI/MVVM, MVP, плюсы и минусы их работы. Так же неплохо было бы понимать базовые вещи, которые могут не относится только к Android, например SOLID, Dependency Injection.</p><h2>Какие инструменты Android нужно знать в 2024 году?</h2><p>Швейцарский нож Android разработчика в 2024 это Kotlin, Kotlin Coroutines, Jetpack Compose, MVVM/MVI, Google Jetpack Libraries, REST, Single Activity, Dagger 2, Retrofit 2. Зная этот стек можно будет легко разобраться в 95% приложений.</p><h2>Что уже устарело</h2><h3>Язык разработки Java для Android</h3><p>Современный подход к разработке под Android является Kotlin-first. Это означает, что Kotlin является основным языком для разработки приложений. Также уже несколько лет все нативные библиотеки для самых различных целей и задач пишутся преимущественно на Kotlin. Поэтому будет полезнее направить усилия по изучению данного языка вместо Java. Java вы всегда успеете выучить при необходимости, чтобы лучше понимать подкапотный мир JVM, общий с Kotlin.</p><p>Расхожее мнение, что с появлением Jetpack Compose учить разработку View на Xml становится неактуально. Тут все неоднозначно. Несмотря на нарастающую популярность Compose, все еще много проектов, где UI реализуется преимущественно на классическом подходе (View + Xml), а переезд на новую технологию по каким-то причинам не так приоритетен.</p><h3>RxJava</h3><p>Использование реактивного подхода было весьма популярно еще буквально несколько лет назад. С помощью фреймворков типа RxJava решали вопрос и компактности кода, и реализации асинхронной разработки. Сейчас фокус сместился в сторону Kotlin Coroutines. Это является актуальным и рекомендованным решением для многопоточной разработки.</p><p>Также к устаревшим технологиям относятся DataBinding для связи верстки и бизнес-логики, KAPT для обработки аннотаций. Редко уже используется SqLite ORM.</p><p>В целом, большинство устаревших решений никуда не уходят. Просто появляются новые библиотеки-обертки, делающие работу с ними и их освоение более удобным.</p><p>Какие библиотеки нужно знать в 2024 году</p><p>Must-havе любого разработчика Android - это семейство библиотек Jetpack Components:</p><ul><li>ViewModels (это не только ViewModels для MVVM, но и в целом рекомендованный компонент для вызова бизнес-логики и хранения состояния),</li><li>Lifecycle,</li><li>Navigation</li><li>Room ORM (для локального хранилища).</li></ul><p>Для сети продолжает оставаться актуальным использование Retrofit. В качестве альтернативы можно порекомендовать Ktor.</p><p>Очень полезным будет знание Kotlin Coroutines, Kotlin Flows. Для организации фоновой работы будет полезно знание такого механизма как WorkManager.</p><p>Для построения корректной архитектуры приложения необходимо знание 1-2 библиотек для Dependency Injection. Актуальным будет знание Dagger/Hilt, дополнительно можно освоить Koin и Kodein.</p><h2>Какие фреймворки нужно знать</h2><p>Конечно, Android SDK и Jetpack Compose. С первым все понятно - это база по Android. Декларативные подходе к разработке приложений в принципе актуальны последние несколько лет, т.к упрощают и ускоряют процесс. После выхода первой стабильной версии Compose, несмотря на необходимость доработок, компания Google сделала ставку на данную технологию. Практически все туториалы и гайды по работе с UI ориентированы теперь и на Compose. Какие-то решения уже идут Compose-First. Например, Google добавили в фреймворку поддержку различных классных анимаций.</p><p>Философия Jetpack Compose - это не только UI, но и управление состоянием приложения, связь элементов с бизнес-логикой, поддержка навигации и т.п</p><h2>Какие инструменты нужно знать</h2><p>Основным инструментом разработки под Android является Android Studio. Это доступная и бесплатная среда разработки, которую можно установить на любую операционную систему. Помимо тулинга для разработки, дебага и сборки приложения, IDE содержит инструменты для профилировки приложения. Очень важно знать Gradle как систему управления зависимостями и сборкой приложения.</p><p>Эрудированному разработчику Android в 2024 году полезно знать набор Jetpack Components, Jetpack Compose, Kotlin Coroutines, Retrofit, Dagger/Hilt. Обязательно владение Android SDK и Kotlin, знание паттернов и архитектур, понимание принципов SOLID и ООП.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.

Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Учимся iOS-разработке: что должен знать любой разраб в 2024 году</title>
      <link>https://tproger.ru/articles/uchimsya-ios-razrabotke--chto-dolzhen-znat-lyuboj-razrab-v-2024-godu</link>
      <comments>https://tproger.ru/articles/uchimsya-ios-razrabotke--chto-dolzhen-znat-lyuboj-razrab-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/uchimsya-ios-razrabotke--chto-dolzhen-znat-lyuboj-razrab-v-2024-godu</guid>
      <description><![CDATA[<p>Мы опросили middle и senior специалистов, какие фреймворки и инструменты iOS учить, чтобы легко найти работу в разработке.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/uchimsya-ios-razrabotke--chto-dolzhen-znat-lyuboj-razrab-v-2024-godu">Учимся iOS-разработке: что должен знать любой разраб в 2024 году</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 22 Feb 2024 13:20:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Джунов и стажёров в айти интересует, какие библиотеки, фреймворки и инструменты iOS учить, чтобы быстро и легко найти работу в разработке.</p><p>Мы опросили специалистов уровня middle и senior, которые дали свои комментарии. Вот, что они ответили.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><h2>Язык</h2><p>Очевидно, но всё же: начинать нужно со Swift. Это основной язык разработки для платформ Apple — iOS и macOS. За 10 лет с момента выхода он полностью заменил Objective-С. В целом iOS-разработчику полезно знать Objective-C, поскольку его всё ещё можно встретить в легаси проектов с историей, но основной инструмент всё же Swift.</p><h2>Архитектурные фреймворки</h2><p>Apple в своей документации по-прежнему рекомендует архитектурные шаблоны MVC, Model-View-Controller. Это первый шаблон, с которым столкнётся начинающий iOS-разработчик. Шаблон — это способ организации кода, призванный сделать его поддерживаемым, расширяемым и читаемым.</p><p>Интересно, что эппловский MVC несколько отличается от канонического, общепринятого. И кстати, многие крупные компании отказываются от MVC, поскольку он приводит к разрастанию кодовой базы, и код, напротив, становится сложным для чтения.</p><p>С этой проблемой можно работать с помощью других архитектурных шаблонов проектирования, например MVP, Model-View-Presenter и MVVM, Model-View-ViewModel.</p><h2>Библиотеки</h2><h3>UIKit и Swift UI</h3><p>UIKit — фреймворк для создания интерфейсов в iOS. Он существует почти столько же, сколько сам айфон, и включает все компоненты пользовательского интерфейса — кнопки, текстовые поля, таблицы…</p><p>SwiftUI — более новый фреймворк, который позволяет верстать пользовательские интерфейсы в соответствии с актуальным декларативным подходом. В чём отличие декларативного от более старого императивного подхода?</p><p>Императивный подход предполагает, что мы пишем код приложения как инструкцию: за шагом 1 следует шаг 2 — и никак иначе.</p><p>При декларативном подходе мы описываем желаемый результат, без явного указания последовательности действий.</p><p>Как правило, декларативный подход делает код более читаемым и поддерживаемым. Это очень важно, потому что разработчик около 80 % времени не пишет, а читает код, разбирается в нём.</p><p>Пока UIKit и SwiftUI существуют параллельно — в том числе потому, что SwiftUI работает с версиями iOS от 13 и младше. Со временем UIKit уйдёт, как и язык Objective-C.</p><h3>Core Data и SwiftData</h3><p>Это инструменты работы с базами данных. Более новый фреймворк SwiftData создан на основе Core Data и предлагает более удобный и простой синтаксис. Кстати, SwiftData и Core Data могут использоваться одновременно.</p><h3>GCD и async/await</h3><p>GCD, Grand Central Dispatch — это механизм от Apple работы с многопоточным асинхронным кодом.</p><p>Если упростить, взаимодействие фронтенда и бэкенда устроено так: мы отправляем запрос и получаем ответ. Пока этот запрос идёт к серверу, а тот собирает эти данные и пытается нам их вернуть, может пройти 2-3 секунды. Если мы будем ждать выполнения метода — нам придётся на это время «заблокировать» приложение, остановить его работу для пользователя. Это плохо, так нельзя.</p><p>Потому и нужна асинхронность. GCD отвечает как раз за асинхронность, управляет очередями запросов, в нужные моменты создаёт и останавливает их.</p><p>При этом многопоточный асинхронный код тяжело поддаётся отладке. Баг, связанный с многопоточностью и асинхронностью, тяжело выявить и исправить.</p><h2>Среда разработки</h2><p>XCode — это «родная» среда разработки для создания приложений для iPhone, iPad, Apple Watch, MacBook и других устройств экосистемы Apple.</p><p>XCode включает в себя редактор кода, интерфейсные конструкторы, отладчики — словом, все инструменты, которые нужны для разработки и тестирования.</p><p>Любые существующие альтернативы — неофициальные, Apple их не поддерживает.</p><h2>Система контроля версий</h2><p>Конечно, нет разработки без какой-либо GIT, системы контроля версий. Когда разработку ведёт команда — а это любое количество разработчиков больше одного — необходимо хранить историю изменений. Например, чтобы в любой момент можно было откатить изменения и вернуть предыдущую версию приложения. Умение работать с GIT необходимо любому разработчику, независимо от платформы, для которой он пишет.</p><p>Чтобы ответить на вопрос, что надо изучать молодым разработчиками под iOS или тем кто хотят ими стать в 2024, надо для начала в кранце описать те изменения которые происходят сейчас в индустрии.</p><p>С приходом в массовое использование LLMs которые становятся все более полезными при разработке, на первый план будет выходить базовые знания и общее понимание того, что делать программист.</p><p>Все больше и больше будут цениться не те люди которые знают какие-то фреймворки или работал с определенными библиотеками, а те, кто хорошо понимает как построить хорошую архитектуру приложения, лучшие практики в разработке, знает алгоритмы и структуры данных, понимает как работает управление памятью на iOS и т.д.</p><p>На эту теоретическую базу уже необходимо накладывать практике по написанию приложений, во время которой и появится опыт работы с фреймворками, библиотеками и всеми остальными прикладными навыками, без которых приложение не написать.</p><p>Следующий важнейший момент - это максимально быстро постараться получить опыт работы в команде, ознакомиться с современными методологиями построения рабочего процесса, понимать что такое Agile, Scram, Code Review, парное программирование и т.д.</p><p>Еще я бы советовал на самом раннем этапе разобраться в том что такое Unit тесты, для чего они нужны и как их писать и стараться через боль и слезы писать их как можно больше в своих тестовых проектах. Этот навык автоматом заставит писать качественный код, а понимание покрытия приложения тестами даст огромный плюс для начинающего разработчика.</p><p>Ниже краткий гайд того как бы я рекомендовал выстраивать изучение iOS в 2024:</p><ol><li>Потратить время на базовые знания в области алгоритмов и структур данных и изучение языка программирования Swift, понимать что такое массивы, множества, классы, структуры, перечисления и т.д. Этот пункт может быть очень тяжелым для начинающего и поэтому я бы рекомендовал не тратить на него много времени с самого начала, чтобы не потерять мотивацию, а возвращаться к нему и подтягивать знания во время остальных пунктов.</li><li>Начать изучать SwiftUI и жизненного цикла приложения в iOS, начать писать первые очень простые приложения, которые позволят продолжать тренировать и прокачивать пункт No1.<br /></li><li>Почитать про архитектуру приложений, паттерны проектирования (базовые из них). Изучать и самое главное постараться максимально понять на примерах, что такое SOLID. На этом этапе можно взять свое тестовое приложение с предыдущего этапа и переписать его используя лучшие практике.<br /></li><li>Освоить системы контроля версий хотя бы на базовом уровне. Изучать что такое Git и как с ним работать, выработать привычку делать изменения своего кода в отдельных ветках и т.д.<br /></li><li>Начать изучать сетевое взаимодействие, понимать что такое HTTP, как происходит взаимодействие с сервером, какие запросы бывают и т.д. На этом этапе я бы советовал взять любой открытый API и написать простейший клиент к нему использую URLSeession. Не надо искать библиотеке, которые помогут вам это сделать, попробуйте разобраться в тех фреймворках которые предоставляет Apple.<br /></li><li>Немного покопать в сторону многопоточности используя пример с запросами к серверу, почитать про GCD и нативный Cuncurrency в Swift (Actors, async/await, etc.)<br /></li><li>Если предыдущие этапы пройдены, и появилось базовое понимание того как работает разработка под iOS, можно смело переходить к сторонним библиотекам. Во-первых, надо изучить механизм подключения этих библиотек - Swift Package Manager (SPM). На данном этапе можно взять свое предыдущее приложение по работе с API и переписать сетевую часть на вариант с использованием сторонней библиотеки Alamofire.<br /></li><li>Начать изучать Unit тестирование и постараться покрыть свое приложение тестами. В процессе покрытия тестами вы скорее всего обнаружите, что большую часть кода покрыть тестами не получается, и это отличный знак того, что надо вернуться к первым пунктам и более детально изучить улучшение архитектуры приложения.<br /></li><li>Почитать про методологии разработки, работу в команде, Agile, Scrum и т.д.<br /></li><li>Опционально: необязательно, но безусловно будет плюсом покопать также в сторону баз данных и работы с данными в iOS: SwiftData, Core Data.<br /></li><li>Искать первую работу в этой области. Если вы действительно сможете пройти предыдущие 9 пунктов, напишете пару тестовых проектов, которые вы довели до конца, могу вас уверить, что вы сможете устроиться на начальную позицию в хорошую компанию.</li></ol><p>Если есть желание попробовать себя в разработке приложений под iOS, то по большому счету на сегодняшний день существует несколько больших фреймворков для создания приложений. Например: от Apple – UIKit, SwiftUI. От Google – Flutter, от Meta – React Native. Остальные фреймворки или мало популярны или устарели (Например Cordova и PhoneGap, Ionic).</p><p>Существуют 2 вида разработки мобильных приложений: нативная и кроссплатформенная. Стоит отметить – для новичков предпочтительнее нативная разработка. В то время как кроссплатформенные подойдут для более опытных разработчиков. Нативная разработка избавит от изучения различий между платформами, позволит сосредоточиться на нюансах разработки мобильных приложений именно для iOS, а не распыляться на все платформы.</p><p>Итак, чтобы приступить к разработке своего первого мобильного приложения для iOS, необходимо сделать следующее:</p><ol><li>Определиться с идеей и предполагаемым интерфейсом приложения.</li><li>Выбрать язык программирования, на котором вы будете писать код. Это может быть Swift или Objective-C. Но Swift предпочтительней, так как он имеет легкий синтаксис и Apple регулярно добавляет новые улучшения.<br /></li><li>Выбрать фреймворк, который вы будете использовать. Более современный и легкий для обучения будет SwiftUI, это декларативный (описательный) фреймворк от Apple, или надежный и основополагающий UIKit, это более старый фреймворк, но использующийся в большинстве iOS приложений.<br /></li><li>Установить среду разработки Xcode. Это необходимый в разработке инструмент, даже для кроссплатформенной.<br /></li><li>Начать претворять в жизнь вашу идею!<br /></li></ol><p>По началу знаний и навыков будет не хватать. Поэтому полезно будет воспользоваться открытыми библиотеками и инструментами для iOS (вы легко можете их найти на github).</p><p>Из самых популярных библиотек стоит выделить:</p><ol><li>Alamofire – для HTTP-запросов и только.</li><li>Lottie – какое iOS приложение без красивых анимаций?<br /></li><li>RxSwift/Combine – для реактивного программирования.<br /></li><li>SwiftDate – Для упрощения работы с датами. Работа на прямую с датами может вызвать множество вопросов особенно для новичков.<br /></li><li>- Kingfisher/SDWebImage – для загрузки изображений.</li></ol><p>Инструменты:</p><ol><li>Git – инструмент для управления версиями вашего приложения. Для упрощения работы можно использовать графические оболочки – Fork, SourceTree и другие.</li><li>CocoaPods и Swift Package Manager – менеджеры для установки библиотек.<br /></li><li>Firebase – сервис от Google, который поможет вести статистику и работать с БД.<br /></li><li>Fastline – для автоматизации загрузки ваших кодов на AppStore.<br /></li><li>TestFlight – чтобы устанавливать ваше приложение на телефон и хвастаться перед друзьями.<br /></li></ol><p>В мире постоянно меняющихся технологий важно быть в курсе текущих трендов и инструментов. В DigitMind Technologies мы акцентируем внимание на выборе современных и эффективных решений для разработки на iOS. Вот наши рекомендации по ключевым технологиям и инструментам, которые должен знать каждый начинающий разработчик в 2024 году.</p><h2>Устаревшие технологии</h2><p>В разработке на iOS есть инструменты и фреймворки, которые, несмотря на свою предыдущую популярность, становятся устаревшими. Например, RxSwift и SnapKit были незаменимыми инструментами для реактивного программирования и упрощения работы с AutoLayout соответственно. Однако с появлением SwiftUI и Combine, эти технологии уходят на второй план, поскольку новые инструменты предлагают более интегрированные и эффективные способы достижения тех же целей.</p><h2>Библиотеки и фреймворки, которые нужно знать в 2024 году</h2><ol><li>SwiftUI полностью изменяет подход к разработке интерфейсов на всех устройствах Apple, предлагая более простой и мощный декларативный синтаксис. Это первое, что должен освоить начинающий разработчик, стремящийся к созданию современных и адаптивных приложений.</li><li>Combine играет ключевую роль в управлении асинхронным кодом и событиями в приложениях iOS, используя концепции реактивного программирования. Освоение этой библиотеки позволяет создавать более чистый и понятный код для работы с данными и событиями.<br /></li><li>Swift Composable Architecture (TCA) предлагает структурированный подход к построению приложений, сосредоточиваясь на управлении состоянием и эффектами в декларативном стиле. TCA облегчает тестирование, поддержку и масштабирование приложений, делая его ценным инструментом для современного iOS-разработчика.<br /></li></ol><h2>Важные инструменты разработки</h2><ol><li>Xcode остаётся неотъемлемой частью экосистемы разработчика на iOS, предоставляя все необходимые инструменты для разработки, отладки и распространения приложений.</li><li>Swift Package Manager значительно упрощает управление зависимостями, позволяя легко интегрировать и обновлять библиотеки и фреймворки в проектах.<br /></li></ol><p>В iOS разработке на сегодня есть два основных фреймворка для создания интерфейсов: старый добрый UIKit и более свежий и модный SwuftUI. И перед новичками часто стоит задача - какой же из них лучше изучать, чтобы быстрее найти работу?</p><p>Короткий ответ на вопрос - лучше знать оба. :)</p><p>Ответ подлиннее: как бы нам ни хотелось уже перейти на более современные технологии, проектов на чистом SwiftUI пока еще очень мало, и знание UIKit вам, скорее всего, понадобится. Поэтому я рекомендовала бы начать изучение именно с него. Однако знание SwiftUI точно добавит очков начинающему специалисту и поможет выделиться серди конкурентов. Даже не все опытные разработчики знают этот фреймворк, и если у компании есть планы постепенно его внедрять - знания SwiftUI, даже для начала не очень глубокие, точно очень помогут в карьере.</p><p>Еще, по моему опыту, много проектов сегодня используют фреймворки для реактивного программирования (в основном, Combine и RXSwift). Далеко не все джуны их знают, поэтому изучить их основы точно будет плюсом. Начать советую с Combine - это нативный фреймворк Apple, который, как мне кажется, постепенно вытесняет RXSwift.</p><p>Что касается базовых инструментов для разработки и командной работы - в 2024 году вряд ли что-то кардинально изменится. Уверенное пользование Xcode, git, основы работы с Figma -  все это точно пригодится в любой команде.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Инструменты и фреймворки QA, которые (не) нужно знать</title>
      <link>https://tproger.ru/articles/instrumenty-i-frejmvorki-qa--kotorye--ne--nuzhno-znat</link>
      <comments>https://tproger.ru/articles/instrumenty-i-frejmvorki-qa--kotorye--ne--nuzhno-znat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/instrumenty-i-frejmvorki-qa--kotorye--ne--nuzhno-znat</guid>
      <description><![CDATA[<p>Узнали у опытных тестировщиков, какие инструменты и фреймворки QA стоит знать в 2024 году, а какие безнадёжно устарели.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/instrumenty-i-frejmvorki-qa--kotorye--ne--nuzhno-znat">Инструменты и фреймворки QA, которые (не) нужно знать</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 22 Feb 2024 12:37:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>Узнали у опытных тестировщиков, какие инструменты и фреймворки QA стоит знать в 2024 году, а какие безнадёжно устарели.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><p>Сложно сказать, какие инструменты и технологии для тестирования устарели.  Зачастую устаревшим считается то, что больше не поддерживается. Тут могу отметить только HP loadrunner.</p><p>Глобально QA делится на три основных направления: ручное тестирование, автоматическое тестирование, нагрузочное тестирование. И для каждого этого типа есть свой набор инструментов и библиотек к разным языкам.</p><p>Для начала обучения на QA сначала стоит определится с направлением в котором хочется работать:</p><ul><li>QA manual (ручное тестирование). Нужно выбрать направление, в котором будете работать, чаще всего это веб. Для веба обучение лучше начать с протоколов и архитектуры приложений. После чего исследовать функции Devtools в разных браузерах, а также postman или аналоги, после чего можно посмотреть расширения для браузеров которые упрощают работу.</li><li>QA automation (автоматизированное тестирование). Если выбрать веб, то изначально стоит изучить selenium, т.к. на этом фреймворке основано много других. Здесь стоит понимать что требуется владения языком программирования. После изучение основ, выбрать фреймворк, который будет изучаться дальше.</li><li>QA performance (нагрузочное тестирование). На начальном этапе нужно изучить jmeter. На это есть две причины: он проще остальных, он всегда работает. После этого можно изучать уже другие инструменты для нагрузки, параллельно исследовать инструменты для мониторинга сервера.</li></ul><h2>Ручное тестирование</h2><p>Для ручного тестировщика важно знать, как работает то, что он тестирует. Тестировщику в компании, которая занимается разработкой сайтов, важно знать, как строится архитектура приложения, какая модель разработки используются, какие технологии используются в продукте. Также стоит изучать инструменты, с помощью которых он сможет проверить те или иные части продукта. Однако тут мы уходим еще дальше, потому что нужно понимать тестируется фронт или бэк. Если речь идет о приложении на RESTful api, то в список на тестирование может добавится еще и мобильное приложение.</p><h3>Frontend</h3><p>Для тестирования фронтенда тестировщику нужно знать все функции DevTools в браузерах, понимать как работает вкладка Network. Application, Console, Elements. Как сохранить лог XHR запросов, чтобы предоставить разработчику в случае необходимости. Здесь стоит отметить также вкладку Recorder, она появилась не так давно и нацелена больше на автоматизаторов, но благодаря ей тестировщик сможет записать последовательность действий для сложных кейсов. Плюсом для тестировщика фронтенда будет знание таких инструментов, как Figma и Perfect Pixel.</p><p>Умение пользоваться Figma тестировщику позволит экспортировать макеты для дальнейшей сверки верстки компонентов сайта на соответствие с макетом с помощью Perfect Pixel.</p><h3>Backend</h3><p>Если посмотреть на бэкэнд RESTful api приложения, то здесь набор инструментов для ручного тестировщика будет также не очень широкий: Postman, Insomnia, SoapUi. Postman покрывает 99% потребностей ручного тестировщика за счет того, что поддерживает разные сетевые протоколы: GrapghQL, gRPC, WebSocket/Socket.IO, MQTT. Некоторые приложения использует WebSocket или Socket.IO, поэтому тестировщику желательно знать, как работают такие протоколы.</p><h3>Базы данных</h3><p>Следующий этап – базы данных. Тестировщик только смотрит данные, поэтому для этой задачи подойдет любой инструмент. Например, DataGrip от jetbrains, но базовые знания работы в SQL также пригодятся.</p><p>Если говорить про ручных тестировщиков, которые тестируют мобильные приложения, то тут для начального уровня достаточно знать ADB (android device bridge) для Android, и Консоль MacOs для iOS. В некоторых случаях пригодится и снифер трафика, такой  как Charles или Fiddler.</p><p>С повышением квалификации ручной тестировщик будет изучать новые инструменты. Бывает так, что проект надо запустить локально, здесь уже понадобятся базовые знания Git и docker. Например, знание IDE для разработок также понадобятся независимо от того, будет это фронтенд, бекенд, или мобильное приложение.</p><h2>QA automation</h2><p>Тестировщик, который хочет занять позицию QA automation, должен знать на порядок больше. Я считаю, что автоматизатор должен не только знать язык программирования, но также понимать и использовать основные паттерны программирования. Автоматическое тестирование похоже на написание скриптов, но все же это программирование, в котором хочется избежать переиспользования кода, описание одного и того элемента на разных страницах, использовать роли и т.д.</p><p>Определится с языком программирования и стеком технологий — это первая задача для автоматизатора. Я предпочитаю выбирать тот же язык программирования, что и используется на проекте. Хотя, по данным <a href="https://clingon.pythonanywhere.com/programming_languages">QA Job</a>, в России чаще всего выбирают Java (35,5%), python(30,7%), JS/TS(6,7%). Для каждого языка есть встроенные ранеры тестов, с помощью которых можно проверить, например, Junit, PyTest, Jest. Чаще с их помощью пишут unit-тесты, но их также можно использовать для автоматизации тестирования API приложений. Но выбор фреймворков здесь зависит от выбора языка программирования.</p><p>В базу я бы выделил то, что используется на разных языках программирования:</p><ul><li>Selenium WebDriver – основной фреймворк для написания тестов, использующий браузер.</li><li>Git – для контроля версий тестов.</li><li>Alure – для хранения отчетов в тестах.</li><li>Appium – для автоматизации мобильных приложений.</li></ul><p>Дальше все зависит от выбранного языка</p><ul><li>Java</li></ul><ul><li>Maven</li><li>Junit</li></ul><ul><li>Python</li></ul><ul><li>Pytest</li></ul><ul><li>JS/TS</li></ul><ul><li>Node.js</li><li>Jest</li></ul><p>Эта база поможет дальше выбрать то направление в автоматизации, которым хочется заниматься тестировщику. Помимо этого, можно использовать фреймворки, которые чаще на слуху такие как playwright, selenoid, Cypress, vitest, webdriverio, nightwatch js, test cafe, Puppeteer.</p><p>Дальше автоматизатор вырастает и сталкивается с проблемами прогона тестов при деплое, при пулл-реквестах. Здесь уже автоматизатору понадобятся инструмента для непрерывной интеграции и автоматической сборке проектов, такие как Jenkins, github Action, gitlab CI/CD.</p><h2>Нагрузочное тестирование</h2><p>Для тестировщиков, которые занимаются изучением нагрузки на проект или производительности проекта, отлично подойдут инструменты и фреймворки, которые помогают нагрузить проект и посмотреть данные о нем. Для мониторинга сервера самого приложения используются такие инструменты, как Grafana в связки с node exporter. Для каждого фреймворка также доступен свой экспортер. С мониторингом самого приложения поможет Opentelemetry + Jaeger, покажут, куда идут запросы в приложении. Если в приложении посыпались ошибки, то отследить их поможет сентри.</p><p>Для нагрузочного тестирования  тестирования QA подойдут следующие инструменты:</p><ul><li>Jmeter</li><li>Locust</li><li>k6.io</li><li>Gatling</li><li>artillery.io</li></ul><p>Каждый инструмент имеет свои преимущества и сложность использования, а также направление, для которого он будет использоваться. Для сценарного тестирования хорошо подойдет Jmeter, Locust, k6.io, Gatling. Здесь стоит выделить k6.io, так как это один из фреймворков, который позволяет не только составить сценарий тестирования, но и использовать при этом WebSocket.</p><p>Artillery.io намного проще при состалении теста, и позволяет работать с WebSocket, но с ним тяжело составлять сценарии, когда каждый последующий запросы используют результаты предыдущего запроса.</p><p>Я намеренно не указал ни одну систему для управления тестированием (TestLink, TestRail, qTest), или систему для управления проектами (YouTrack, Trello, Jira), так как считаю что тестировщики даже ручные – это те люди которые должны уметь быстро разобраться в новом для себя продукте, понять как он работает, и как с ним управляться.</p><p>Рассмотрим, какие
фреймворки и инструменты для тестирования
наиболее популярны в настоящее время
и за какими технологиями видится будущее.
Мы также рассмотрим, какие инструменты
начинают устаревать или терять свою
популярность в быстро меняющейся среде
тестирования.</p><h2>Языки
программирования</h2><p>По
данным сайта QA
Job
Stat
самыми популярными языками программирования
являются:</p><ul><li>Java;</li><li>Python;</li><li>Java Script;</li><li>C#.</li></ul><p>У
каждого языка есть множество популярных
инструментов тестирования. Которые мы
рассмотрим ниже.</p><p>Также
стоит обратить внимание на:</p><ul><li>Go;</li><li>Kotlin;</li><li>Scala.</li></ul><p>Они
подойдут для бэкендовых тестов, ведь
скорость тестов на них быстрее чем на
Java
и Python.</p><h2>Функциональное
тестирование</h2><p>Для
Java
и Python,
популярными фреймворками являются:</p><ul><li>Pytest;</li><li>Junit;</li><li>TestNG.</li></ul><h2>Key
Driven и BDD</h2><p>BDD
(разработка на основе поведения) - это
Agile
практика раннего тестирования
(test-first),
которая обеспечивает встроенное
качество, определяя (и потенциально
автоматизируя) тесты до или в рамках
описания поведения системы. Суть подхода
заключается в описании желаемого
поведения приложения с помощью
спецификации, обычно с помощью конструкций
человеческого языка.</p><ul><li>Cucumber;</li><li>Robot_Framework;</li><li>SpecFlow.</li></ul><p>Также
стоит упомянуть фреймворки, являющиеся
частью проекта Cucumber
для разных языков программирования:</p><ul><li>Behave;</li><li>Codeception;</li><li>Catch.</li></ul><h2>Тестирование
Web
UI</h2><p>В
связи с большим развитием тестирования
веб-приложений, здесь особенно много
популярных инструментов:</p><ul><li>Selenium;</li><li>Selenide;</li><li>Playwright;</li><li>Selenoid.</li></ul><p>Особенно
популярен Selenium. Он широко применяется
среди тестировщиков и имеет широкое
сообщество, в то время как Playwright является
новым инструментом, но предлагает
передовые возможности. Selenoid - динамическое
окружение для выполнения браузерных
автотестов, где поднимаются docker-контейнеры
с требуемым браузером и требуемой
версией, выполняются тесты, контейнер
сворачивается.</p><h2>Тестирование
мобильных приложений</h2><ul><li>Appium</li><li>Espresso</li><li>XCTest</li></ul><p>Appium
– флагман в тестировании мобильных
приложений. Он поддерживает автоматизацию
на популярных платформах, таких как iOS
и Android. Appium обеспечивает возможность
написания тестов на различных языках
программирования и интеграцию с
различными тестовыми фреймворками,
делая его мощным инструментом для
тестирования. Помимо мобильных ОС, у
Appium
есть поддержка macOS, Windows, Linux.</p><h2>Тестирование
производительности</h2><p>Самыми
популярными являются:</p><ul><li>JMeter;</li><li>LoadRunner;</li><li>Locust;</li><li>Gatling.</li></ul><p>Каждый
из этих инструментов имеет свои сильные
и слабые стороны, и выбор между ними
зависит от конкретных потребностей
проекта, предпочтений команды и доступных
ресурсов.</p><h2>Средства
мониторинга</h2><ul><li>Grafana;</li><li>Prometheus;</li><li>ClickHouse;</li><li>Zabbix.</li></ul><h2>Системы
управления тестированием, багтрекеры,
вики и т.д.</h2><ul><li>Atlassian Jira
	и Confluence;</li><li>Yandex Tracker;</li><li>Kaiten;</li><li>EvaProject;</li><li>TestRail;</li><li>Allure TestOps;</li><li>TestIt.</li></ul><p>Продукты
Atlassian
включают Jira
(для управления проектами и задачами),
Confluence
(для совместной работы над документацией),
Bitbucket
(для управления версиями кода и совместной
разработки), Bamboo
(для непрерывной интеграции).</p><h2>Системы
контроля версий</h2><ul><li>Git;</li><li>SVN;</li><li>Mercurial.</li></ul><p>Можно
однозначно сказать, что есть Git,
а есть остальные, настолько популярна
система.</p><h2>Системы
CI/CD</h2><p>Обычно
в компании уже развернута какая-то
система непрерывной интеграции и скорее
всего там будет стоять, что-то из этого:</p><ul><li>GitLab;</li><li>Jenkins;</li><li>TeamCity.</li></ul><p>Раньше
пользовались большой популярностью, а
сейчас начинают сдавать позиции:</p><ul><li>Язык программирования
	Ruby;</li><li>Багтрекер Redmine;</li><li>Инструмент
	web-тестирования
	Selenium
	IDE;</li><li>Система контроля
	версий TFS;</li><li>SoapUI
	для Api-тестирования;</li><li>Фреймворк для
	автоматизации тестирования Cypress.</li></ul><p><a></a>
Ну а будущее видится
в более широком применении AI
в тестировании, например с помощью
применения LSTM и LLM-нейронных сетей можно
ожидать улучшенное обнаружение и
прогнозирование дефектов, высокую
адаптивность тестов, оптимизацию
тестовой среды.</p><p>Устаревшие:</p><ol><li>Некоторые старые фреймворки для тестирования, такие как Selenium WebDriver, могут постепенно терять свою популярность из-за появления более современных и удобных альтернатив.</li><li>Многие устаревшие библиотеки для автоматизации тестирования, которые не поддерживаются сообществом или не предоставляют новых функциональных возможностей, также могут уйти на задний план.<br /></li></ol><p>Новые библиотеки QA в 2024 году:</p><ol><li>Каркасы и инструменты для тестирования микросервисов, такие как Karate, Rest Assured, WireMock, пользуются растущей популярностью.</li><li>Инструменты для автоматизации тестирования API, такие как Postman и Swagger, становятся неотъемлемой частью стека инструментов QA.<br /></li><li>Библиотеки и инструменты для тестирования безопасности, такие как OWASP ZAP и Burp Suite, также становятся все более востребованными.<br /></li></ol><p>Новые фреймворки QA в 2024 году:</p><ol><li>Фреймворки для тестирования мобильных приложений, такие как Appium и Espresso, остаются актуальными и даже усовершенствуются.</li><li>Инструменты для тестирования контейнеризированных приложений и оркестраторов, такие как Kubernetes, Docker и Helm, также предоставляют свои собственные фреймворки и инструменты для автоматизации тестирования.<br /></li></ol><p>Новые инструменты QA в 2024 году:</p><ol><li>Инструменты для тестирования нагрузки и производительности, такие как JMeter, Gatling и Locust, становятся все более важными в условиях растущей сложности архитектуры приложений. Я также рекомендую ознакомиться с Vegeta для http и GHZ для gRpc</li><li>Инструменты для тестирования безопасности API и веб-приложений, такие как OWASP ZAP и Burp Suite, предоставляют новые возможности для обнаружения и устранения уязвимостей.</li></ol><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Знания, которыми должен обладать JavaSript-разработчик в 2024 году. Это — база</title>
      <link>https://tproger.ru/articles/znaniya--kotorymi-dolzhen-obladat-javasript-razrabotchik-v-2024-godu--eto---baza</link>
      <comments>https://tproger.ru/articles/znaniya--kotorymi-dolzhen-obladat-javasript-razrabotchik-v-2024-godu--eto---baza?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/znaniya--kotorymi-dolzhen-obladat-javasript-razrabotchik-v-2024-godu--eto---baza</guid>
      <description><![CDATA[<p>Выяснили у опытных разработчиков на JavaScript, что должны учить начинающие программисты в 2024 году, чтобы быть востребованными специалистами.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/znaniya--kotorymi-dolzhen-obladat-javasript-razrabotchik-v-2024-godu--eto---baza">Знания, которыми должен обладать JavaSript-разработчик в 2024 году. Это — база</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 16 Feb 2024 13:03:55 GMT</pubDate>
      <content:encoded><![CDATA[<p>Выяснили у опытных разработчиков на JavaScript, что должны учить начинающие программисты в 2024 году, чтобы быть востребованными специалистами.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><p>В сфере веб-разработки, технологии развиваются стремительно. JavaScript является самым популярным языком программирования и имеет обширный набор инструментов, фреймворков и библиотек, которые постоянно обновляются и развиваются. Часть библиотек и фреймворком остается надолго, а часть так же быстро исчезает как появились.</p><h2>Фронтенд разработка</h2><h3>Устаревшие технологии</h3><p>jQuery уже давно считается устаревшим в современных проектах и предпочтение отдается использованию современных фреймворков. Но в старых проектах эта библиотека до сих пор активно используется.</p><p>AngularJS (версия 1.x) также считается устаревшей, хотя Angular 2+ остается актуальным выбором.</p><h3>Актуальные библиотеки и фреймворки</h3><p>React продолжает быть одной из самых популярных библиотек для создания пользовательских интерфейсов. Несмотря на то, что уже прошло больше 10 лет с момента первого релиза, его популярность только растет. Его экосистема, включая Next.js для серверного рендеринга и создания статических сайтов является важным дополнением.</p><p>Vue.js остается популярным выбором для разработчиков благодаря его простоте и гибкости. Nuxt.js является его аналогом Next.js в экосистеме Vue.</p><p>AngularJS (версии 2 и выше) продолжает развиваться и остается востребованным в крупных корпоративных проектах.</p><p>Svelte и его фреймворк для статической генерации и серверного рендеринга, SvelteKit, набирают популярность за счет своей инновационной концепции компиляции компонентов.</p><h3>Инструменты</h3><p>Webpack и Rollup остаются стандартными инструментами для сборки модулей, хотя Vite и Parcel набирают популярность благодаря своей скорости и простоте.</p><p>ESLint для статического анализа кода и Prettier для форматирования кода являются основными инструментами для поддержания качества кода.</p><p>TypeScript, которые представляет собой язык программирования который компилируется в JavaScript, становится почти неотъемлемым инструментом для разработки на JavaScript, предоставляя строгую типизацию и улучшая качество кода.</p><h2>Бекенд разработка</h2><h3>Устаревшие технологии</h3><p>Express не обязательно устарел, но многие разработчики ищут более современные альтернативы, которые предлагают более богатый функционал "из коробки".</p><h3>Актуальные фреймворки и инструменты</h3><p>Node.js остается фундаментом для JavaScript на сервере, с его асинхронной, событийно-ориентированной архитектурой.</p><p>NestJS представляет собой современный фреймворк для создания масштабируемых серверных приложений на Node.js, интегрированный с TypeScript. Он может работать поверх таких низкоуровневых фреймворков как Express и Fastify.</p><p>Fastify набирает популярность благодаря своей производительности и легкости, став альтернативой Express с более современным API.</p><p>Koa от создателей Express предлагает более легковесный и гибкий подход к созданию веб-приложений.</p><h3>Инструменты</h3><p>Docker и Kubernetes стали ключевыми технологиями в разработке и развертывании приложений, включая бекенд на Node.js.</p><p>GraphQL продолжает набирать популярность как альтернатива REST API, предлагая более гибкую и эффективную загрузку данных.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что учить Java-разработчикам в 2024 году</title>
      <link>https://tproger.ru/articles/chto-uchit-java-razrabotchikam-v-2024-godu</link>
      <comments>https://tproger.ru/articles/chto-uchit-java-razrabotchikam-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-uchit-java-razrabotchikam-v-2024-godu</guid>
      <description><![CDATA[<p>Выяснили у опытных разработчиков на Java, что должны учить начинающие программисты в 2024 году, чтобы быть востребованными специалистами.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-uchit-java-razrabotchikam-v-2024-godu">Что учить Java-разработчикам в 2024 году</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>Fri, 16 Feb 2024 13:00:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><p>Кстати, Kata Academy набирает студентов на обучение Java. Это отличная возможность, так как вы не платите за обучение, пока не устроитесь Javascript-разработчиком! Подробности здесь → <a href="https://tproger.ru/courses/kurs-po-java-razrabotke-ot-kata-academy-2?erid=LjN8Kcftj">Курс по Java-разработке от Kata Academy.</a></p><h2>Какие библиотеки, инструменты, фреймворки Java уже устарели</h2><p>Если не брать в расчет старые версии библиотек и фреймворков, то прямо к устаревшим можно отнести часть спецификаций Jakarta EE (ранее Java 2 Enterprise Edition или J2EE). Такие технологии как EJB, JSF, JCA, JSP были практически полностью вытеснены Spring Framework и не используются на новых проектах. Если вам они попадаются в описании вакансии, то я бы её избегал, если вы не хотите работать на древнем легаси проекте.</p><p>Разработка приложений для десктопов на Java так же довольно редкая и специфичная вещь, поэтому фреймворки Swing, AWT, JavaFX можно считать если не устаревшими, то явно не актуальными.</p><p>Если говорить про инструменты, то стоит упомянуть Apache Ant. Его популярность снизилась в пользу более современных инструментов сборки, таких как Apache Maven или Gradle.</p><h2>Какие библиотеки Java нужно знать</h2><p>Выбор библиотек сильно зависит от конкретного проекта и его потребностей, но если говорить про универсальные и популярные библиотеки, то можно отметить следующие.</p><p>Apache Commons - это коллекция библиотек, предоставляющих полезные утилиты для общих задач программирования, таких как работа с коллекциями, строками, файлами, потоками и многим другим.</p><p>Guava - библиотека, разработанная Google, которая предоставляет множество утилит для облегчения программирования на Java. Она содержит классы и методы для работы с коллекциями, строками, вводом-выводом, функциональным программированием и другими задачами.</p><p>Log4j2 / Logback - библиотеки для логирования. Они позволяют настраивать уровни логирования, форматирование вывода и многие другие параметры. Обязательны для использования на любом проекте.</p><h2>Какие фреймворки Java нужно знать</h2><p>Безусловным лидером остается Spring Framework. Он является одним из самых популярных и влиятельных фреймворков Java, предоставляет комплексные решения для создания масштабируемых и надежных приложений, включая инверсию управления (IoC), внедрение зависимостей (DI), аспектно-ориентированное программирование (AOP) и многое другое.</p><p>Для работы с базами данных, лучшим выбором остаются фреймворки Hibernate и JOOQ. Разница между ними заключается в том, что первый предоставляет абстракцию над базой данных на уровне объектов Java, в то время как второй предоставляет более явный и типобезопасный способ работы с SQL-запросами в коде на Java. Выбор между ними зависит от конкретных требований проекта и предпочтений разработчика.</p><p>В качестве фреймворка для написанию unit тестов большинство разработчиков используют и продолжат использовать JUnit.</p><p><i>А какие фреймворки (библиотеки\инструменты) используете вы? Вклад каждого очень важен, чтобы развитие Java отвечало истинным потребностям разработчиков.</i></p><p><i><a href="https://forms.yandex.ru/cloud/6657b16a505690246c6d6a64/">Поделитесь</a>, можно отвечать анонимно. А в благодарность вам придёт сертификат и фотоотчет о посадке персональной сосны в бору Java.</i></p><h2>Какие инструменты Java нужно знать</h2><p>В первую очередь можно выделить инструменты для автоматизации сборки и управления зависимостями в проектах на Java - Maven и Gradle. Gradle считается более современным и прогрессивным, но до сих пор большое количество команд выбирают Maven.</p><p>Так же, хотя Docker и Kubernetes не являются инструментами Java, они играют важную роль в развертывании и управлении приложениями. В связи с широким распространением контейнеризации и оркестрации, знание этих инструментов останется важным для разработчиков  в 2024 году.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что должен знать каждый Python-разработчик: библиотеки и фреймворки</title>
      <link>https://tproger.ru/articles/chto-dolzhen-znat-kazhdyj-python-razrabotchik--biblioteki-i-frejmvorki</link>
      <comments>https://tproger.ru/articles/chto-dolzhen-znat-kazhdyj-python-razrabotchik--biblioteki-i-frejmvorki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-dolzhen-znat-kazhdyj-python-razrabotchik--biblioteki-i-frejmvorki</guid>
      <description><![CDATA[<p>Спросили у middle и senior разработчиков на Python, что нужно учить в 2024 году, чтобы быстро и легко найти работу в разработке.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-dolzhen-znat-kazhdyj-python-razrabotchik--biblioteki-i-frejmvorki">Что должен знать каждый Python-разработчик: библиотеки и фреймворки</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 16 Feb 2024 12:55:19 GMT</pubDate>
      <content:encoded><![CDATA[<p>Джунов и стажёров в айти интересует, какие библиотеки, фреймворки и инструменты Python учить, чтобы быстро и легко найти работу в разработке.</p><p>Мы опросили специалистов уровня middle и senior, и вот, что они ответили.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><p>Время не стоит на месте. С каждой новой версией в Python добавляются новые возможности, а устаревшие подходы удаляются. Также и библиотеки устаревают или перестают поддерживаться. Им на смену приходят новые, предлагающие более гибкие и универсальные подходы. Фреймворки развиваются и предлагают новые способы решения задач, обрастают новыми сторонними модулями.</p><p>Бывает нелегко ответить на вопрос о том, что из привычного нам уже устарело и от него стоит отказаться, а что пустить в нашу жизнь разработки. Расскажу об этом с точки зрения своего опыта разработки и используемых инструментов.</p><p>Часть модуля os.path существует очень давно и уже проверена временем. Она используется во многих библиотеках, фреймворках и проектах. Ее необходимо знать. Но нужно ли ее использовать? Уже несколько лет существует более удобный пакет pathlib, который является стандартным, начиная с Python 3.4. Модуль pathlib представляет пути в файловой системе в  объектно-ориентированном стиле. Благодаря этому повышается читабельность кода и удобство его написания.</p><p>До Python 3.9 для операций с часовыми поясами использовался модуль pytz. Начиная с Python 3.9 в стандартной библиотеке появился модуль zoneinfo. Он предоставляет более лаконичный стиль написания кода.</p><p>Именованные кортежи (dataclasses) используются очень широко. Если до Python 3.7 это было оправдано, то после его выхода (и тем более после выхода Python 3.10) гораздо удобнее стало использовать dataclasses (классы данных).</p><p>Что же актуально знать в 2024 году начинающему разработчику?</p><ol><li>Библиотеки Python: collections, datetime, itertools, logging, typing, pandas, zoneinfo, pytest, pre-commit, black;</li><li>Фреймворки Python: django, djangorestframework, FastAPI (с ORM), Flask (более популярен на Западе).</li><li>Инструменты Python: git, docker-compose.<br /></li></ol><p>В заключение.</p><p>Существующий код нужно уметь читать и понимать. Для этого нужно знать классические (возможно и старые) библиотеки.</p><p>Новый код нужно писать по-новому. Старый код - по возможности рефакторить на новый стиль.</p><p>Стиль нужно автоматически форматировать под единые стандарты проекта или команды (black и pre-commit очень помогают это автоматизировать).</p><p>Django нужно выучить хотя бы поверхностно, чтобы иметь представление о структуре проекта. Это сильно поможет при создании проектов на FastAPI и Flask.</p><p>Для локальной разработки использовать docker-compose, чтобы избежать (или уменьшить) количество ситуаций, когда локально код работает, а на сервере нет.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что изучать начинающему разработчику на C#</title>
      <link>https://tproger.ru/articles/chto-izuchat-nachinashhemu-razrabotchiku-na-c-</link>
      <comments>https://tproger.ru/articles/chto-izuchat-nachinashhemu-razrabotchiku-na-c-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-izuchat-nachinashhemu-razrabotchiku-na-c-</guid>
      <description><![CDATA[<p>Спросили у специалистов уровня middle и senior, какие библиотеки, фреймворки и инструменты C# учить начинающим разработчикам.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-izuchat-nachinashhemu-razrabotchiku-na-c-">Что изучать начинающему разработчику на C#</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 16 Feb 2024 12:51:29 GMT</pubDate>
      <content:encoded><![CDATA[<p>Джунов и стажёров в айти интересует, какие библиотеки, фреймворки и инструменты C# учить, чтобы быстро и легко найти работу в разработке.</p><p>Мы опросили специалистов уровня middle и senior, которые дали свои комментарии.</p><p>Мы спросили:</p><ol><li>Какие библиотеки, инструменты, фреймворки C# уже устарели?</li><li>Какие библиотеки C# нужно знать в 2024 году?<br /></li><li>Какие фреймворки C# нужно знать в 2024 году?<br /></li><li>Какие инструменты C# нужно знать в 2024 году?<br /></li></ol><p>Вот, что они ответили.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><p>Постепенно устаревает Visual Studio, ее вытесняет новая облегченная версия - VS Code. .Net framework и .Net Core уже неактуальны и уходят в прошлое. На смену им приходят новые версии фреймворков .Net 8 и уже готовиться к релизу .Net 9. Устарела также библиотека Quartz для создания планировщиков.</p><p>В топе популярных библиотек на nuget.org остаются AutoMapper, Newtonsoft.Json, Serilog, FluentValidation, также набирает популярность Hangfire.</p><p>Последний актуальный фреймворк для C# на текущий момент – это .Net 8. Entity Framework - фреймворк для работы с БД.</p><p>По мимо IDE разработчики используют инструменты контроля версий (например Git), систему управления задач (Jira), многие продукты компании JetBrains также оказываются очень кстати.</p><p>Определенные C# библиотеки и фреймворки утрачивают актуальность. Примером устаревших технологий являются Web Forms для веб-разработки и Silverlight для создания интернет-приложений. ADO.NET Entity Framework был широко использован в прошлом, однако сейчас существуют более современные и удобные инструменты, такие как Entity Framework Core. Другие устаревшие библиотеки и инструменты включают в себя NUnit 2, WCF и Windows Forms.</p><p>Для успешной карьеры в C# разработке в 2024 году, следует овладеть следующими ключевыми библиотеками:</p><ol><li>ASP.NET Core – для разработки высокопроизводительных веб-приложений.</li><li>Entity Framework Core – мощный ORM фреймворк для работы с базами данных.<br /></li><li>Serilog или NLog – для продвинутого логирования приложений.<br /></li><li>AutoMapper – для упрощения маппинга между объектами.<br /></li><li>MediatR – для реализации шаблона "Посредник" и упрощения архитектуры приложений.<br /></li></ol><p>В 2024 году, следующие фреймворки будут на переднем крае C# разработки:</p><ol><li>.NET 6/7 – последняя версия платформы .NET, обеспечивающая кросс-платформенную поддержку и высокую производительность.</li><li>Blazor – для создания интерактивных веб-UI с использованием C# вместо JavaScript.<br /></li><li>MAUI – новый подход от Microsoft для создания кросс-платформенных мобильных и десктопных приложений.<br /></li><li>Orleans – фреймворк для создания распределенных высокомасштабируемых приложений.<br /></li><li>IdentityServer – фреймворк для реализации аутентификации и авторизации.<br /></li></ol><p>Для эффективной разработки на C# в 2024 году необходимо овладеть следующими инструментами:</p><ol><li>Visual Studio 2022/2023 – последняя версия IDE от Microsoft, предлагающая многочисленные улучшения для разработчиков C#. Visual Studio Code – популярный редактор кода с обширной поддержкой расширений для C# разработки.</li><li>Docker – для контейнеризации и упрощения развертывания приложений.</li><li>Azure DevOps – для автоматизации процессов CI/CD и управления проектами.</li><li>Rider от JetBrains – альтернативная IDE для разработки на C#, предлагающая множество продвинутых функций для работы с кодом.</li></ol><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Какие IT-специалисты на вес золота, а каких слишком много — ответы экспертов</title>
      <link>https://tproger.ru/articles/kakih-specialistov-ne-hvataet--a-kakih---sliwkom-mnogo</link>
      <comments>https://tproger.ru/articles/kakih-specialistov-ne-hvataet--a-kakih---sliwkom-mnogo?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Картофельный Повелитель]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kakih-specialistov-ne-hvataet--a-kakih---sliwkom-mnogo</guid>
      <description><![CDATA[<p>Эксперты из IT назвали профессии на вес золота и те, где рынок перенасыщен. Прогноз по языкам, зарплатам и навыкам — выберите правильный путь в карьере.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kakih-specialistov-ne-hvataet--a-kakih---sliwkom-mnogo">Какие IT-специалисты на вес золота, а каких слишком много — ответы экспертов</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, 08 Feb 2024 09:25:33 GMT</pubDate>
      <content:encoded><![CDATA[<p>Джунов и стажёров в айти интересует, какой путь и стек выбрать, чтобы стать востребованным специалистом и не занять нишу, которая и без того перенасыщена.</p><p>Мы опросили экспертов уровней middle и senior, и они дали прогноз, какие специалисты, языки программирования и технологии будут востребованными в 2024 году.</p><p>Мы спросили:</p><ol><li>Какие специалисты были востребованы в 2023 году?</li><li>Какие технологии стали основными в 2023 году среди фронтендеров, бэкендеров, тестировщиков?<br /></li><li>Что должны знать фронтендеры, бэкендеры в 2024 году, чтобы быть востребованными специалистами? Знание каких языков, библиотек и инструментов требуется?<br /></li><li>Какие специалисты на рынке на вес золота? В каких айти-специалистах отчаянно нуждается рынок?<br /></li></ol><p>Вот, что они ответили.</p><p>В 2024 году наиболее востребованы специалисты по кибербезопасности, ИИ/ML, DevOps-инженеры и senior-разработчики — их катастрофически не хватает на рынке.</p><p>Топ языков программирования: Java (Spring Boot), Python (Django), C#/.NET, TypeScript, Go — знание этих стеков повышает шансы на высокую зарплату.</p><p>Рынок страдает не от нехватки джунов, а от дефицита опытных специалистов уровня senior и lead — вырастить такого специалиста занимает 4–6 лет.</p><p>Тестировщиков и аналитиков на рынке избыток: работодатели отдают предпочтение кандидатам с конкретным опытом, а не базовыми навыками.</p><p>Для карьерного роста критично постоянно обновлять навыки: хороший инженер осваивает новую библиотеку за неделю, новый язык — за месяц.</p><p><b>Востребованный IT-специалист</b> — это профессионал, чьи навыки соответствуют актуальным запросам рынка труда: знание современных языков, фреймворков и практик, подкреплённое реальным опытом коммерческой разработки.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><p>В связи с импортозамещением программного обеспечения ушедших из России вендоров, с 2022 года наблюдается повышенный спрос на аналитиков 1С. Именно различные версии данного ПО, а также решения для автоматизации бизнес-процессов и документооборота используют теперь представители госсектора и бизнеса. В связи с чем растет и заработная плата данных специалистов.</p><p>Помимо этого, с каждым годом растет количество хранимых и передаваемых данных - по пессимистическому прогнозу объем российского рынка big data вырастет с 45 млрд до 65 млрд рублей, по оптимистическому — до 230 млрд рублей. При этом процесс импортозамещения в данном сегменте происходит не так быстро, как в вопросе смены CRM, ERP, а потому вырос спрос  на решения для хранения данных от отечественных вендоров и обеспечению бесшовной миграции: примерно 71% российских компаний готовы к переходу на системы хранения данных, разработанных в РФ, вместо западных. Соответственно, вырос спрос и на data-специалистов. Зарплатные ожидания джуниоров в данном направлении начинаются от 70 000 рублей, сеньоров - от 220 000 рублей.</p><p>По итогам прошлого года наибольшее число вакансий подразумевали поиск разработчиков и программистов (32% ИТ-вакансий), сотрудников техподдержки (13%), и аналитики разных направлений (8%). Также в связи с участившимися кибератаками на отечественный бизнес и госсектор востребованными были и остаются специалисты по информационной безопасности (4%).</p><p>Самыми приоритетными языками и фреймворками в 2024 году остаются Java и Spring Boot, Python и Django, C# и .NET. Каждый из них предлагает разработчикам мощные инструменты для построения современных и надежных приложений. TypeScript становится неотъемлемой частью фронтенд-разработки, обеспечивая статическую типизацию и повышение надежности кода. React, Vue.js, Angular остаются ключевыми фреймворками для создания пользовательских интерфейсов.</p><p>Микросервисная архитектура, постепенно замещающая монолитную, продолжает диктовать основные тренды: контейнеризацию и оркестрацию, переход на облачные решения, Message Broker, решения мониторинга и логирования, а также инструменты автоматизированного тестирования. Эти технологии обеспечивают создание современных, масштабируемых и эффективных IT-решений.</p><p>В 2023 году было уделено много внимания искусственному интеллекту и Data Science, облачным технологиям и вопросам кибербезопасности. В связи с этим были особенно востребованы специалисты по этим направлениям, DevOps-инженеры, фронтенд-разработчики в области реактивных фреймворков и бэкенд-специалисты с квалификацией в облаке. Для фронтендеров всегда полезно знать JavaScript, React и в целом иметь знания в реактивных фреймворках. Для бэкендеров Python, Java, Node.js, знание облачных сервисов и контейнеризации. Для тестировщиков это Selenium и Cypress.</p><p>В 2024 году тренд продолжится и также останутся нужны специалисты по кибербезопасности и машинному обучению, которое является главной звездой рынка. Как и обычно на вес золота Full Stack-разработчики, способные работать и с клиентской, и с серверной стороной.</p><p>Нельзя обходить и тренд геймификации. Рынок растет каждый год и является одним из самых устойчивых. Здесь нужны специалисты со знаниями движков Unity и Unreal Engine, а также профессионалы, который имеют опыт построения собственных. Большим плюсом станет знание языков C# и C++. В целом на этом рынке перенасыщение джунов и актуализируется большая востребованность в разработчиках middle и senior уровня.</p><p>Как руководитель IT-компании, хочу отметить, что сейчас область IT на очередном «хайпе» в силу роста цифровизации бизнеса и интеграции искусственного интеллекта в нашу повседневность Специалисты в этой области востребованы для оптимизации бизнес-процессов, создания инноваций и обеспечения кибербезопасности, что отражает растущую роль технологий в современном обществе и бизнесе. На мой взгляд, среди самых актуальных – и востребованных – IT-профессий можно выделить:</p><p>Frontend-разработчик. Классика. Frontend-разработчики специализируются на создании пользовательского интерфейса веб-приложений. Они работают с технологиями, обеспечивающими визуальную составляющую сайтов, а также занимаются оптимизацией процессов взаимодействия пользователя с интерфейсом. Вечное. Нужное.</p><p>Backend-разработчик. Такие специалисты создают и поддерживают серверную часть любых систем, делают «фундамент». Они работают с базами данных, обрабатывают запросы от фронтенда, обеспечивают безопасность и масштабируемость приложений. Очень сложно, местами заморочено, но важно и востребовано.</p><p>Специалист по Artificial Intelligence и Machine Learning. Спрос на экспертов в области ИИ и машинного обучения продолжает расти. Такие специалисты занимаются разработкой и оптимизацией алгоритмов, созданием моделей машинного обучения и обработкой данных. Учитывая, что словом года стала «нейросеть», интерес вполне прозрачен и понятен.</p><p>Специалист по кибербезопасности. С увеличением числа кибератак и цифровых угроз растет потребность в экспертах ПО. Защита компьютерных систем от вредоносных атак и обеспечение безопасности данных выходят на первый план.</p><p>Важно отметить, что быстро меняющаяся природа технологий делает важным постоянное обновление навыков и умение адаптироваться к новым решениям и инструментам.</p><p>В 2023 году это, конечно же, были ML-специалисты, специалисты в области Big Data, и все, кто связан с ИИ. Этот тренд сохранится и в следующем году. Сюда же можно отнести и Cybersecurity Specialist.</p><p>Что касается фронтенда, то тут все базово — HTML5 &amp; CSS3, Flex и Grid CSS, CSS препроцессоры и Git. В бэкенде — несколько языков программирования, MySQL, HTTP и HTTPS, NGINX, Apache и другие.</p><p>В 2023 году максимально
востребованными оказались IT-специалисты
двух направлений. Во-первых, это
специалисты 1С, во-вторых, программисты,
работающие в классическом веб-стеке.
PHP,
JS,
SQL
— всё, на чём строятся сайты, приложения,
веб-сервисы, плюс знания отдельных
фреймворков</p><p>Я
бы не стал выделять конкретные технологии,
но главным трендом 2023 года явно стало
использование Искусственного интеллекта,
применение нейросетей и встраивание
этих решений в бизнес-логику сайтов,
интернет-магазинов, приложений и
сервисов.</p><p>Что
должны знать фронтендеры, бэкендеры в
2024 году, чтобы быть востребованными
специалистами? Знание каких языков /
библиотек / инструментов требуется?</p><p>Чтобы
быть востребованным в 2024 году, разработчику
базово нужно знать следующие вещи
основные элементы вёрстки (CSS, HTML,
JavaScript)
и бэкэнд-часть. Большая часть бэкэнда
продолжает писаться на PHP с использованием
баз данных MySQL
или PostgreSQL.</p><p>Рынок
нуждается в ребятах, которые легко
обучаются и готовы быть гибкими. Например,
в веб-стеке каждый год в тренды выходят
самые разные фреймворки. Пару лет назад
это был Laraval, в прошлом году React.js.
Основа у всех одна и та же: PHP,
CSS,
HTML,
JavaScript,
MySQL,
LAMP/LEMP.
Однако, переход на новый фреймворк
требует адаптации. Так что максимально
востребованными становятся те специалисты,
которые максимально быстро перестраиваются.</p><p>Я
руковожу командой с большим количеством
программистов, а также провожу
образовательные практики в нескольких
вузах, поэтому могу дать несколько
рекомендаций от себя.</p><p><a></a>
В первую очередь, я
рекомендую идти в веб-стек, изучать
основы объектно-ориентированного
программирования, изучать основные
принципы веб-разработки. У веба больше
всего ответвлений, и в нём больше всего
сейчас не хватает специалистов.</p><p>Многие
ошибочно думают: "пойду изучу самое
простое". Самый лёгкий вход в
программирование — это изучение Python.
Но на деле Python
чаще всего является неким вспомогательным
инструментом для решения определенных
задач. Очень мало сервисов полностью
пишутся на этом языке, поэтому я бы всё
же смотрел либо в сторону веб-направления,
либо на 1С и сопутствующие ему языки
программирования.</p><p>Также
рекомендую набрать как можно больше
практики решения всевозможных задач.
Чем больше задач вы решите, тем с большим
количеством проблем столкнётесь, тем
более гибким (а значит, и востребованным)
специалистом вы в итоге станете.</p><p>В прошлом году мы активно искали в МойОфис разработчиков разных стеков - С++, С++ QT, Golang, фротенд-разработчиков JavaScript, тестировщиков (ручное и автоматизированное тестирование), DevOps-инженеров, дизайнеров и пр.</p><p>В 2023 году на рынке РФ были крайне востребованы специалисты уровня senior - каждой компании важно нанимать профессионалов, поскольку на рынке есть острая необходимость в разработке отечественных ИТ-решений в кратчайшие сроки. От фронтенд-кандидатов мы в МойОфис традиционно ждем глубокого понимания Javascript, Typescript, HTML5, CSS3, широкого кругозора с точки зрения доступных в браузере возможностей и API. В бэкенде сохраняется высокий спрос на Go и C++ разработчиков уровней middle и senior.</p><p>В 2024 году и вообще в ближайшие несколько лет в России на вес золота будут востребованы бэкенд- и фронтенд-разработчики, DevOps-инженеры, SDET, а также DevSec-специалисты. В циклы разработки ПО важно включать и меры по обеспечению безопасности - к ней предъявляются ещё более строгие требования, поэтому компетентные специалисты будут еще больше в цене.</p><p>Среди востребованных профессий мы наблюдаем бэкенд-разработчиков, мобильных разработчиков-сеньоров, специалистов по обработке данных, тестировщиков, DevOps-инженеров и, что кажется невероятным, но так и есть, 1С-специалистов (их не хватает из-за ухода компании SAP из России).</p><p>Если говорить о других направлений, то это специалисты по искусственному интеллекту (машинному обучению, рекомендательным системам), маркетингу и дизайну.</p><p>Нельзя сказать, что в 2023 были какие-то серьезные изменения в технологиях. Например, среди топ-5 высокооплачиваемых языков программирования:</p><ol><li>Objective-C (он был на первом месте и в 2022);</li><li>Scala (поднялся с 4 в 2022 на 2 строчку в 2023);<br /></li><li>Swift (поднялся с 6 в 2022 на 3 строчку в 2023);<br /></li><li>Elixir (занял 4 место в 2023, вместо 2 в 2022);<br /></li><li>Rudy (сохранил свою позицию в 2023).<br /></li></ol><p>Подробнее можно узнать: в статьях <a href="https://habr.com/ru/specials/748058/">«Зарплаты IT-специалистов в первом полугодии 2023»</a> и <a href="https://habr.com/ru/specials/679698/">«Зарплаты айтишников в первом полугодии 2022»</a>.</p><p>На рынке труда технологии относительно незначительны. Гораздо важнее опыт специалиста. На любой живой язык можно найти вакансии, то же самое и с фреймворками и библиотеками. 

Сегодня компании борются именно за опыт сотрудников. Джунов и мидлов на рынке довольно много и в них нет острой потребности. А вот сеньоры, лиды и управляющие представляют настоящую ценность для работодателя.</p><p>Правда в том, что хороший опытный инженер освоит до высокого уровня любую новую библиотеку или инструмент на знакомом языке примерно за неделю. Если это будет новый язык, то потребуется около месяца.</p><p>ИТ-специалистам нужно самим выбирать язык, с которым они хотят работать. Возможно, сначала стоит изучать компании, где бы хотел работать человек, и выбрать для себя подходящую технологию.</p><p>Обычно вокруг разных технологий, языков есть своя определенная «атмосфера» — похожа на индивидуальный стиль работы и мышления, поэтому специалисту нужно опираться, в первую очередь, на свои интересы и желания, чтобы ему хотелось с этим работать — чтобы этот стиль подходил самому человеку.</p><p>Работодатель будет оценивать кандидата по:</p><ol><li>технологиям, с которыми человек сам хочет работать;</li><li>опыту работы с проектами на технологиях, которые используются в компании. Изучить язык за месяц легко, а вот поработать на 10 разных проектах на нем — тяжелее. Именно опыт будет ценен для работодателя.<br /></li></ol><p>Как уже упоминалось ранее, разница спроса заключается не в конкретных специальностях, а в грейдах. Джунов и миддлов на рынке довольно много, а вот лидов, сеньоров и управляющих, которые могут ставить задачи джунам и миддлам, нет. И это не зависит от специальности.</p><p>Чтобы вырастить хорошего миддл-специалиста, нужно 2-3 года курсов, не меньше. Плюс опыт работы — тоже 2-3 года. Так, взращивание сеньора займет 4-6 лет.</p><p>Нам, например, тоже не хватает лидов — высокооплачиваемых специалистов, которые могут эффективно управлять техническими проектами. Кроме того, на лида нельзя быстро обучить с нуля. Это только серьезный многолетний опыт.</p><p>Взгляд на будущее в мире IT требует внимания к текущим трендам и динамике рынка. Основываясь на моем опыте как Senior Android Developer и анализе прошлых лет, предоставляю прогноз того, какие специалисты и технологии будут в центре внимания в 2024 году.</p><p>В предыдущем году выделялись:</p><ol><li>Full Stack разработчики: Спрос на специалистов, обладающих комплексными навыками работы на фронтенде и бэкенде, продолжал расти.</li><li>DevOps инженеры: С увеличением популярности DevOps, требовались эксперты в области автоматизации, CI/CD и контейнеризации.<br /></li><li>Специалисты по искусственному интеллекту и машинному обучению: Разработчики, работающие с решениями на основе искусственного интеллекта, оставались в центре внимания.<br /></li></ol><p>На фронтенде преобладали:</p><ol><li>React.js и Vue.js: Состоялись лидерами в разработке пользовательских интерфейсов.</li><li>WebAssembly: Привлекал внимание, улучшая производительность веб-приложений.</li></ol><p>На бэкенде выделялись:</p><ol><li>Node.js, Python (Django, Flask), Java: Популярные языки программирования для создания серверной части приложений.</li><li>Распределенные базы данных, такие как Apache Cassandra: Обеспечивали эффективное управление данными.<br /></li></ol><p>В области DevOps активно использовали Kubernetes, Docker, Jenkins и Ansible для автоматизации и управления инфраструктурой.</p><p>В 2024 для фронтендеров необходимы:</p><ol><li>Знание JavaScript и его фреймворков (React, Vue, Angular).</li><li>Умение работать с WebAssembly для повышения производительности.<br /></li><li>Опыт создания Progressive Web Apps (PWA).<br /></li></ol><p>Бэкендерам требуется:</p><ol><li>Глубокие знания в выбранном языке (Node.js, Python, Java).</li><li>Опыт работы с микросервисной архитектурой и понимание облачных вычислений (AWS, Azure, Google Cloud).<br /></li></ol><p>Специалисты на вес золота:</p><ol><li>Специалисты по кибербезопасности: В условиях угроз кибербезопасности, их роль становится ключевой.</li><li>Специалисты по искусственному интеллекту и машинному обучению: Растет спрос на экспертов, создающих и внедряющих решения на базе данных.<br /></li><li>DevOps инженеры: В центре внимания с увеличением сложности проектов и необходимости быстрого выкатывания новых версий.<br /></li></ol><p>На Android и iOS акцентировали внимание на:</p><ol><li>Flutter и Kotlin для Android.</li><li>Swift и SwiftUI для iOS.<br /></li><li>Прогрессивные веб-приложения (PWA) становились более распространенными.<br /></li></ol><p>Требования к мобильным разработчикам в 2024 году:</p><ol><li>Знание Flutter/Dart или Kotlin/Java для кроссплатформенной и нативной разработки.</li><li>Умение создавать адаптивные интерфейсы, работающие на различных устройствах.<br /></li><li>Понимание работы с локальными базами данных и взаимодействие с удаленными серверами.<br /></li></ol><p>Мобильные специалисты на рынке:</p><ol><li>Специалисты по безопасности мобильных приложений: В условиях угроз кибербезопасности, их роль становится критической.</li><li>Разработчики кроссплатформенных приложений: Востребованы для оптимизации затрат и ускорения разработки.<br /></li><li>Эксперты по оптимизации производительности: Знание, как оптимизировать производительность под разные устройства, ценно.<br /></li><li>Знание современных технологий и глубокие навыки в выбранных областях останутся востребованны.<br /></li></ol><p>Среди самых востребованных специалистов в 2023 году – разработчики в сфере кибербезопасности, так как в последние годы значительно увеличилось количество кибератак и утечек личных данных пользователей. Также в условиях технологической изоляции, когда большинство западных компаний ушло с российского рынка, бизнесу необходимо еще быстрее создавать решения на замену – сервисы, приложения, ПО и.т.д. Поэтому сохранился спрос на квалифицированных Frontend- и backend-разработчиков. Особенно востребованы в 2023 году были фронтендеры на Angular. Например, у нас в ГК “Bimeister”  команда расширилась в 2 раза с наймом таких специалистов.</p><p>Отмечу, что бизнес сегодня стремится максимально минимизировать издержки, в том числе на обучение сотрудников. Поэтому компании ищут специалистов с хорошим опытом. Однако на российском рынке труда сейчас гораздо больше джуниор-разработчиков, у которых пока что нет серьезных кейсов в портфолио. И, к сожалению, новичкам будет гораздо сложнее найти работу, но не стоит забывать и про те компании, которым наоборот больше подходит модель обучения “под себя”, которая предполагает найм джуна в штат и его дальнейший апгрейд в рамках одной компании.</p><p>В 2023 году во фронтенде продолжили доминировать React и Vue.js, а TypeScript укрепил своё положение для типизации кода. В бэкенде Node.js и Python с Django оставались популярными для быстрой разработки, а PostgreSQL и MySQL использовались как основные базы данных. Также в 2023 году основными языками программирования для многих компаний остались  Angular и C#.</p><p>В первую очередь стоит отметить необходимость знания Angular, C# (он особенно востребован у автотестировщиков), а также Docker и PostgreSQL.</p><p>Кроме того, фронтендеры в 2024 году должны владеть современными JavaScript-фреймворками, в частности React или Vue.js, иметь глубокие знания CSS, включая фреймворки Tailwind CSS, а также быть знакомыми с TypeScript. Бэкендерам полезно будет знать языки Python или Node.js и соответствующие фреймворки, а также обладать пониманием работы с реляционными и NoSQL базами данных.</p><p>На вес золота сегодня системные архитекторы, архитекторы решений, а также продакт-менеджеры, которые могут отвечать за продукт на протяжении всего цикла разработки – от начала и выхода на рынок до его окупаемости.</p><p>Согласно статистике hh.ru, спрос на IT-специалистов в 2023 году вырос на 18%, а по данным Минцифры РФ, дефицит разработчиков составил более 500 тысяч человек.</p><p>Востребованность ИТ-специалистов на рынке труда напрямую зависела от индустрии конкретных компаний. Наиболее востребованными были не только разработчики, но и бизнес- и системные аналитики, менеджеры продуктов и проектов, devOps-инженеры, инженеры по ремонту и обслуживанию оборудования. Значительно выросло количество вакансий в области искусственного интеллекта.</p><p>Как правило, основной спрос и дефицит кадров пришелся на опытных специалистов senior- и middle-уровня. Новичков в профессии c каждым годом становится больше, однако, спрос растет и на них — и 2023 год не стал исключением. Чаще всего junior-специалисты востребованы в тестировании, разработке на языке Python, проектных задачах.</p><p>По нашим наблюдениям, многим компаниям сейчас остро нужны опытные специалисты по обслуживанию и ремонту оборудования ушедших с российского рынка мировых вендоров — те, кто прошел обучение в сертифицированных центрах, сдал экзамен и получил подтверждающий сертификат (например, по серверам или системам хранения данных). На вес золота профессионалы, которые имеют практический опыт работы с разными линейками оборудования нескольких вендоров и решали нетривиальные задачи.</p><p>Мы, например, ощущаем острый дефицит инженеров по поддержке ленточных библиотек, поэтому сконцентрировались на усилении команды и их поиске.</p><p>Если
говорить об отрасли в целом, то в 2023 году
спросом пользовались фронтенд-, ML-,
мобильные и игровые разработчики,
программисты на языке Python,
тестировщики-автоматизаторы, devops, Data
Scientists, Product managers и, конечно, специалисты
по кибербезопасности.</p><p>В
нашей компании был сделан акцент и была
необходимость на бэкенд-разработчиках,
программистах, знающих языки C/C++ под
Linux, а также тестировщиках, devops-инженерах
и инженерах технической поддержки. В
основном мы говорим, конечно, о специалистах
уровня middle и senior.  Изменения в оргструктуре
компании привели к необходимости поиска
сотрудников на позиции product manager и team
lead.</p><p>При
найме на позицию фронтенд-разработчиков
компании смотрят на умение работать в
JavaScript (включая фреймворки и библиотеки
такие как React, Angular, Vue.js), понимание
HTML/CSS, WebAssembly и Progressive Web Apps (PWA).</p><p>Для
бэкенд-разработчиков важным навыком
является умение использования языков
программирования Java, Python, JavaScript (Node.js),
Go, Kotlin и Scala. Также ценится понимание
облачных решений, например,
как AWS, Azure, Google Cloud Platform, а также Serverless
архитектуры, опыт в работе с базой
данных: PostgreSQL, MongoDB, MySQL, и NoSQL технологии.</p><p>Для
тестировщиков ключевыми преимуществами
станет владение автоматизированного
тестирования с использованием инструментов 
Selenium,
Cypress, Jest, JUnit, а также анализа микросервисной
архитектуры и кейсов по безопасности.</p><p>Фронтендеры
должны знать HTML, CSS, JavaScript, TypeScript а также
фреймворки и библиотеки, такие как
React, Angular, Vue.js. Важным аспектом при найме
на данную позицию является опыт работы
с Git, Jira и Confluence.
Также
полезно иметь навыки веб-дизайна,
адаптивной верстки и оптимизации
производительности веб-приложений.</p><p>В
отношении бэкендеров среди их
профессиональных навыков ценятся знания
языков программирования как Java, Python,
PHP, Ruby, C# или Node.js, а также фреймворков:
Spring, Django, Laravel и Ruby on Rails. Таким специалистам
немаловажно иметь понимание баз данных,
таких как SQL или NoSQL, а также знания о
веб-серверах, хостинге и облачных
сервисах.</p><p>Для
двух типов специалистов также важно
иметь понимание систем контроля версий,
таких как Git, и умение работать в команде,
следовать лучшим практикам разработки
и адаптироваться к новым технологиям
и требованиям рынка.</p><p>2024
год обещает быть переломным в области
технологий. Рост искусственного
интеллекта и SaaS
становятся доминирующими трендами,
определяя будущее бизнес-процессов и
инноваций, в том числе и работа по подбору
IT-специалистов, умеющих работать с
подобными инновациями.</p><p>На
данный момент IT-рынок очень нуждается
в специалистах по следующим направлениям:</p><ol><li><b>Разработчики комплектующих для железа</b> (серверов, процессоров, модемов, коммутаторов, маршрутизаторов). Большинство из них Россия импортирует из других стран. Часть из них можно заменить благодаря серому импорту, другую же придется разрабатывать с нуля.</li><li><b>Кибербезопасность.</b> Во втором квартале 2023 года на российскую инфраструктуру пришлось более 2,3% DDoS-атак от общемирового показателя, что в два раза больше, чем в начале прошлого года. С развитием технологий и мошеннических уловок вопрос кибербезопасности становится очень острым, поэтому в 2024 специалисты по защите от кибератак будут особенно востребованы.<br /></li><li><b>Разработчики нового ПО.</b> С российского рынка ушли крупнейших поставщики ПО: EPAM, <a href="https://www.gazeta.ru/tags/organization/oracle.shtml">Oracle</a>, <a href="https://www.gazeta.ru/tags/organization/microsoft.shtml">Microsoft</a> и SAP. Их услугами пользовались не только крупнейшие коммерческие российские компании, но и госсектор. Поэтому все больше государство смотрит в сторону создания собственных независимых аналогов, чем подкрепляется Указом №250 от 01.05.2022 об импортозамещении программного обеспечения отечественных компаний.<br /></li><li><b>IT-специалисты для банковской сферы.</b> Российские банки, попавшие под санкции, также как никогда нуждаются в компетентных специалистах. При этом им предстоит не только решать проблемы, связанные с международными ограничениями, но и много работы в части реализации банковских продуктов для граждан, в первую очередь — краткосрочных вкладов.<br /></li><li><b>Российские социальные сети.</b> На государственном уровне задумались о создании отечественных аналогов. Немало работы предстоит с теми соцсетями, которые сейчас активно пользуются спросом: VK, «Одноклассники» и RuTube. Объективно требуется повышать их юзабилити, разрабатывать новые функции и обновлять интерфейсы.<br /></li></ol><p>В
новом 2024 году в связи с активным ростом
и развитием нашей компании будет высокая
потребность в бэкенд- и разработчиках
на С\С++, тестировщиков (нагрузочное и
ручное тестирование, автотестировщики).
Такие профессии очень востребованы на
рынке, в связи с чем возникает высокая
конкуренция среди работодателей в
борьбе за лучших IT-специалистов.</p><p>На фоне постоянно растущего числа кибератак, организации все больше заинтересованы в том, чтобы выявлять и устранять уязвимости в собственных IT-решениях еще на этапе написания кода. Поэтому сегодня одним из наиболее востребованных направлений в ИТ становится DevSecOps – область, которая отвечает за безопасную разработку софта на всех этапах его жизненного цикла. По данным Positive Technologies, 45% IT-специалистов в России считают безопасную разработку полезной практикой, но только 36% уже имеют наработанные практики DevSecOps.</p><p>Специалист в области DevSecOps должен владеть тем технологическим стеком, который используется в его проектах. В области веб-приложений, это, как правило, один или два языка. Для фронтенда это обычно JavaScript/TypeScript/Dart и любой из бэкенд-языков, например, Go, Python, C#, Java/Kotlin/Scala, плюс набор фреймворков и библиотек, применяющихся в обоих случаях. И да, DevSecOps-специалист должен быть «фуллстековым» – то есть владеть одновременно технологиями, как фронтенда, так и бэкенда, иметь представление об архитектурных принципах проектирования ПО, понимать весь пайплайн разработки и CI/CD.</p><p>Для того, чтобы начать свое развитие в направлении DevSecOps, если речь идет о веб-технологиях, рекомендую изучить вот эти ресурсы:</p><ol><li><a href="https://github.com/Swordfish-Security/awesome-devsecops-russia">Awesome DevSecOps на русском языке</a> — сборник ссылок на наиболее годные и интересные материалы о предметной области.</li><li><a href="https://portswigger.net/web-security">Web Security Academy</a> — бесплатный курс от Portswigger, посвящённый вопросам безопасности веб-приложений и книга <a href="https://www.amazon.com/Web-Application-Hackers-Handbook-Exploiting/dp/1118026470">The Web Application Hacker's Handbook</a> по этому курсу.<br /></li><li><a href="https://pentesterlab.com/exercises/web_for_pentester/course">Web for Pentester 1</a>, <a href="https://www.pentesterlab.com/exercises/web_for_pentester_II/course">2</a> — сборник лабораторных работ по безопасности веб-приложений.<br /></li><li><a href="https://owasp.org/www-project-developer-guide/draft/">OWASP Developer Guide</a> — принципы и подходы к безопасной разработке от OWASP и <a href="https://owasp.org/www-project-secure-coding-practices-quick-reference-guide/stable-en/">чеклист Secure Coding Practices</a> от них же.<br /></li></ol><p>Книги "must read":</p><ol><li><a href="https://www.amazon.com/Tangled-Web-Securing-Modern-Applications/dp/1593273886">The Tangled Web: A Guide to Securing Modern Web Application</a></li><li><a href="https://www.piter.com/product/bezopasnost-veb-prilozheniy">Безопасность веб-приложений</a><br /></li><li><a href="https://eksmo.ru/book/zakhvatyvayushchee-puteshestvie-po-bezopasnosti-veb-prilozheniy-vizualnyy-gid-dlya-nachinayushchikh--ITD1291496/">Безопасность веб-приложений. Исчерпывающий гид для начинающих разработчиков</a><br /></li><li><a href="https://www.amazon.com/DevSecOps-Playbook-Deliver-Continuous-Security/dp/1394169795">The DevSecOps Playbook: Deliver Continuous Security at Speed</a><br /></li></ol><p>Несмотря на то, что область ИТ продолжает расти колоссальными темпами, и всем хорошо известно о нарастающей нехватке ИТ-специалистов, начинающим айтишникам найти работу не так-то просто, т.к. большинству компаний нужны готовые работники, т.е., как минимум, мидлы.</p><p>Тем не менее в наиболее востребованных технологиях последних лет, где голод рынка сейчас особенно велик, джуны и стажёры также идут нарасхват.</p><p>Если говорить про роли, то, по моему опыту, это в первую очередь DevOps-инженеры и разработчики (как фронтэнд, так и бэкэнд). Для девопсов наиболее ценным будет опыт работы с GitLab CI, Docker и Kubernetes. Облачная инфраструктура в России и соседних странах постепенно развивается, но пока не достигла того же уровня технологичности и доверия, как, например, AWS на Западе, поэтому в реалиях нашего рынка навыки работы, например, с Яндекс Облаком пригодятся скорее, как задел на будущее, чем будут востребованы прямо сейчас.</p><p>Говоря про frontend-разработку, я бы в первую очередь упомянул Vue.js как одну из наиболее активно развивающихся технологий последних лет. Всё больше компаний начинает делать ставку на неё, что должно быть особенно интересно начинающим разработчикам, т.к. порог входа в этот фреймворк ниже, чем в React и Angular, хотя, конечно, оба этих мощных фреймворка тоже остаются очень популярными.</p><p>Ну и, что касается backend-разработки, то опыт найма в нашей компании "ППР" — финтех-операторе сервисов для бизнеса, говорит о том, что Java и SprintBoot по-прежнему в цене.</p><p>Считается, что на освоение этих технологий до приемлемого в коммерческой разработке уровня нужно больше времени, чем, например, для PHP или Python, а количество организаций, особенно больших и обеспеченных, вроде банков, которые продолжают активно использовать Java, не уменьшается, отсюда и возникает более острая нехватка кадров.</p><p>Также есть смысл присмотреться к golang, как одному из основных орудий для создания микросервисов. Многие компании идут или уже по уши залезли в проекты "распилов монолитов", поэтому знание этого языка в таких местах часто придётся ко двору</p><p>В целом в IT-сфере
зарплаты продолжают активно расти.
Тенденция во многом связана с инфляцией
в США. Она тянет за собой все остальные
рынки зарплат, поскольку сейчас всё
интегрировано и человек, зная английский
язык, может работать в любой точке мира
удаленно.</p><p>Сейчас примерный
разброс в зарплатах для Frontend- и
Backend-специалистов составляет от 150 до
450 тысяч в месяц в зависимости от грейда.
Для тестировщиков — от 100 до 300 тысяч. В
основном зарплаты для них определяются
опытом и навыком автоматизации
QA-процесса.</p><p>Спрос на специалистов
по-прежнему превышает предложение.</p><p>Безусловно, на вес золота специалисты уровня Senior и Team lead. В самих
специализациях ничего глобально не
изменилось, кроме того, что довольно
сильно вырос спрос на специалистов по
искусственному интеллекту и опыту
работы с ним.</p><p>Кроме
того, специалистами уровня Junior сложнее
найти работу из-за развития AI-помощников
таких, как CoPilot. Это связано с тем, что
искусственный интеллект может попросту
заменить начинающих специалистов. Тем
не менее, для них это может стать
преимуществом. Достаточно всего лишь
интегрировать в свой флоу AI-помощника.
Так Junior-специалисты будут выделяться
среди своих конкурентов и дышать в спину
более опытным разработчикам, так как
им сложнее перестроится под современные
тенденции и внедрить к себе новый
инструмент.</p><p>По прежнему самыми
востребованными фреймворками на Frontend
являются React.js и React Native. Соответственно,
я бы рекомендовал сфокусироваться на
них, и на Javascript/Typescript.</p><p>На
Backend все стандартно и зависит от стека.
Однако лично я делал бы акцент на
Javascript — Node.js стеках, вроде Express. Также
рекомендовал бы рассматривать GraphQL при
разработке API. Кроме того, с развитием
AI активно набирают обороты векторные
базы данных, поэтому их я бы тоже
посоветовал освоить. Vector search например
уже есть в MongoDB<b>.</b></p><p>В 2023 году наблюдался высокий спрос на IT-специалистов, особенно на опытных профессионалов. Соотношение на рынке труда показывает, что на одного специалиста уровня middle и senior приходилось три компании, тогда как для специалистов уровня  junior – три специалиста на одну компанию. Это свидетельствует о высокой конкуренции среди начинающих и острой нехватке опытных кадров.</p><p>Среди ключевых технологий для разработчиков стоит отметить:</p><ol><li>Фронтенд - JavaScript и фреймворки типа React и Vue.js, а также CSS-препроцессоры и фреймворки вроде Bootstrap.</li><li>Бэкенд - Python, Java, Go, микросервисы, облачные платформы.<br /></li><li>Тестировщики - Автоматизация, Selenium, Jenkins, CI/CD.<br /></li></ol><p>ИИ быстро становится ключевым направлением в IT. Специалисты, работающие в этой области, должны особое внимание уделить принципам работы с текстовыми данными и соответствующим алгоритмам, в частности обработке естественного языка</p><p>2024 год обещает быть периодом дальнейшего роста и инноваций в IT, особенно в области ИИ. Специалистам важно следить за тенденциями и адаптироваться к новым технологиям, чтобы оставаться востребованными на рынке труда.</p><p>В 2024 году работодатель хочет найти готового уверенного специалиста, чтобы сразу приступить к решению сложных задач, ведь обучать, выделять ментора – это долго и дорого. Именно поэтому основной спрос сегодня на специалистов уровня Middle и выше. Особое внимание стали уделять софт-скилам: важно, чтобы человек был «говорящий», контактный, гибкий, готовый к переменам и  вызовам, ответственный и включенный в процесс. Ценятся не исполнители в чистом виде, а инициативные люди, готовые генерить идеи, создавать что-то новое, брать на себя ответственность.</p><p>В 2023 году уровень откликов на вакансии в IT Test вырос на 40% (из них специалистов уровня Middle стало на 20% больше) по сравнению с 2022-м, количество собеседований с разработчиками увеличилось на 30%, а отказов на офферы стало в два раза меньше (на раздумья, кстати, берут 3-4 дня, а не 1-2 недели, как было раньше). Это связано с тем, что в 2022-м и 2023 году многие урезали расходы — логично, что вакансий становится меньше.</p><p>Особенно непросто начинающим специалистам. Джунов много, конкуренция высокая, а спрос на них крайне низкий. Дело в том, что новички требуют серьезных временных ресурсов, а обучать и наставлять готовы не все. Комфортнее всех чувствуют себя разработчики уровня Senior (Backend, Frontend, Fullstack) – за них всегда бьются рекрутеры. Также идет борьба за DevOps-специалистов, аналитиков и разработчиков мобильных приложений.</p><p>При этом возможность «уйти в IT» остается. Огромные шансы попасть в IT без реального коммерческого опыта работы есть у победителей олимпиад, хакатонов, у ребят, максимально увлеченных профессией, которые еще в школе интересовались разработкой, делали небольшие сайты или чат-боты.</p><p>Если говорить о нехватке
специалистов, то, как правило, сейчас
это все же нехватка middle и senior
разработчиков, но так как они вырастают
из джунов и стажеров, из этого можно
сделать вывод, что стэк технологий с
высоким порогом входа более перспективен.
Например, сейчас наблюдается большое
количество junior тестировщиков и frontend
разработчиков, но есть явный недостаток
backend разработчиков и разработчиков
мобильных приложений. Все потому, что
изучение Java, Python или PHP сложнее
функционального тестирования. Кандидат
должен быть готов не просто изучить
основы языка программирования, но и
прекрасно ориентироваться в принципах
современного ООП (SILOD), а также в паттернах
программирования.</p><p>В
backend разработке наблюдается тенденция
увеличения IT-проектов на Python и уменьшение
на PHP и Go, однако, в Python наиболее сильная
конкуренция, и если вы не уверены в своих
силах, то вполне хорошим вариантом будет
выбор PHP или Go, потому что проектов на
них все ещё много, а квалифицированных
специалистов становится меньше с каждым
годом. В frontend разработке с большим
отрывом лидирует JavaScript,
но с очень серьезным акцентом на
современные фреймворки. Если вы выбираете
это направление, то обязательно нужно
прокачать знания в React, Vue, Angular. Большим
плюсом будет знание TypeScript. И, возвращаясь
к тому, что говорил в начале, очень важно
приложить максимум усилий, чтобы развить
свои навыки до уровня middle. Необходимо активно
повышать свою квалификацию и не бояться
браться за сложные задачи.</p><p>Касаемо
требований к backend разработчику, то они
традиционно разделяются на soft и hard
skills. Здесь не столько важна их глубина,
а скорее, чтобы знания были профессиональными,
и по ним не было провалов. Для оценки
hard skills проверьте, действительно ли вы
знаете и умеете применять принципы
SOLID и основные паттерны программирования.
Это ключевые знания, которые позволят
вам без усилий понимать чужой код и
писать понятно свой. Имея их, вы
легко освоите современные фреймворки
для вашего языка программирования, а
знание фреймворков является вторым
по важности навыком разработчика.</p><p>В
стэке технологий наиболее популярны
для web backend фреймворки и платформы: Python
– Django, FastAPI; PHP – Laravel, Yii; JavaScript
– NodeJS. Кроме этого, современный
разработчик должен иметь хотя бы
минимальные знания DevOps.</p><p>Например, уметь
собирать контейнеры в Docker
и разворачивать окружения в Kubernetes.
Это тоже входит в стэк современной
разработки.</p><p>Из
современных трендов, которые будут
актуальны в 2024 году, я бы выделил
использование AI для проверки или даже
написания кода. Некоторые IDE уже предлагают
его в виде экспериментальных плагинов,
которые могут успешно писать тесты
или типовой код. Однако, правильное
составление заданий для AI (промтов) –
это очень ценный навык, который точно
будет востребован. И не стоит забывать
о soft skills. Вы должны не просто уметь
работать в команде, но и понимать, как
организована гибкая разработка по
Agile. Должны быть в состоянии оценить,
сколько времени потребуется на выполнение
той или иной задачи, а также укладываться
в сроки.</p><p>В 2023 году рынок технических специалистов сильно изменился. Менялся спрос на разные специализации, появлялось больше кандидатов, решивших сменить профессиональное направление на IT, несмотря на зрелый возраст и опыт работы в других сферах.</p><p>Кроме того, некоторые видели в IT возможность реализовать свой творческий потенциал. Продолжался рост спроса на разработчиков с навыками работы с искусственным интеллектом, машинным обучением и облачными технологиями. Также популярностью пользовались DevOps-инженеры, специалисты по кибербезопасности и разработчики мобильных приложений.</p><p>Традиционные роли, такие как веб-разработчики и системные администраторы, стали менее востребованы.</p><p>Помимо этого, направление «1С» было в 2023 году очень востребованным. Это связано с тем, что специалисты, которые выбирают эту сферу, получают высокую заработную плату и возможность сочетать в работе навыки программирования и знаний в бухгалтерии.</p><p>Есть моменты, которые очевидны уже сейчас.</p><p><b>— Искусственный интеллект. </b></p><p>Технологии искусственного интеллекта будут продолжать развиваться. Они найдут более широкое применение в различных отраслях, включая здравоохранение, финансы, производство и многие другие. Компании будут искать экспертов, способных разрабатывать и внедрять AI-решения.</p><p><b>— Кибербезопасность. </b></p><p>В свете растущей угрозы кибератак и утечек данных, в 2024 году будет уделяться большое внимание кибербезопасности. Компании и организации будут инвестировать в средства защиты данных и обучение специалистов.</p><p><b>— Бизнес-аналитики. </b></p><p>Специалисты в области бизнес-аналитики, которые могут переводить потребности бизнеса на технические требования, будут важными на рынке труда. Они помогут компаниям оптимизировать процессы и повысить эффективность.</p><p><b>— Работа удаленно. </b></p><p>Опыт пандемии COVID-19 ускорил переход к удаленной работе. В 2024 году ожидается, что многие компании продолжат предоставлять возможность работать из дома, а также будут искать способы оптимизации процессов удаленного сотрудничества.</p><p><b>— Больше рабочих мест. </b></p><p>Рост IT-сферы также будет способствовать созданию новых рабочих мест в сфере разработки, управления проектами, кибербезопасности и других областях.</p><p><b>— Обучение и развитие.</b></p><p>Все больше компаний будет инвестировать в обучение и развитие своих сотрудников. Это будет способствовать росту возможностей для профессионального роста и переобучения.</p><p>Читайте также на Tproger: <a href="https://tproger.ru/articles/it-professii-2024">Какие IT-профессии выбрать в 2024 году</a>, <a href="https://tproger.ru/articles/python-dlya-nachinayushchikh">Python для начинающих: с чего начать</a>, <a href="https://tproger.ru/articles/karjera-v-it">Как построить карьеру в IT: советы экспертов</a>.</p><h2>Часто задаваемые вопросы</h2><p><b>Каких IT-специалистов не хватает в 2024 году?</b></p><p>Острее всего рынок испытывает дефицит senior-разработчиков и технических лидов — их невозможно вырастить быстро. Также не хватает специалистов по кибербезопасности, DevOps-инженеров и экспертов в области ИИ и машинного обучения. При этом джунов и тестировщиков с базовыми навыками на рынке избыток.</p><p><b>Какие IT-профессии самые высокооплачиваемые?</b></p><p>По данным экспертов, в топ-5 высокооплачиваемых языков входят Objective-C, Scala, Swift, Elixir и Kotlin. Помимо языков, самые высокие зарплаты получают архитекторы решений, специалисты по безопасности и технические лиды. Full Stack-разработчики с опытом в облачных технологиях также стабильно входят в число наиболее оплачиваемых позиций.</p><p><b>Стоит ли идти в тестирование в 2024 году?</b></p><p>Рынок тестировщиков перенасыщен специалистами с базовыми навыками ручного тестирования. Однако SDET (Software Development Engineer in Test) и специалисты по автоматизированному тестированию по-прежнему востребованы. Для успешного входа в профессию рекомендуется сразу изучать автоматизацию, Python и C# для написания тестов.</p><p><b>Какие навыки нужны IT-специалисту в 2024 году?</b></p><p>Фронтендерам необходимы JavaScript-фреймворки (React, Vue, Angular), TypeScript и опыт работы с PWA. Бэкендерам — глубокое знание выбранного языка, микросервисная архитектура и облачные платформы (AWS, Azure, GCP). Для всех специалистов критично умение работать с Git, понимание DevOps-практик и готовность постоянно учиться.</p><p><b>Какие специалисты окажутся невостребованными в 2024 году?</b></p><p>Эксперты отмечают снижение спроса на традиционных веб-разработчиков без знания современных фреймворков. Системные администраторы без навыков DevOps и облачных технологий также теряют позиции на рынке. Джуны и стажёры в большинстве ниш сталкиваются с высокой конкуренцией — компании предпочитают нанимать опытных специалистов.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p>]]></content:encoded>
    </item>
    <item>
      <title>PyTorch или TensorFlow — что выбрать</title>
      <link>https://tproger.ru/articles/pytorch-ili-tensorflow---chto-vybrat</link>
      <comments>https://tproger.ru/articles/pytorch-ili-tensorflow---chto-vybrat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pytorch-ili-tensorflow---chto-vybrat</guid>
      <description><![CDATA[<p>Сравнение PyTorch и TensorFlow: плюсы, минусы, производительность и сценарии использования. Выберите правильный фреймворк для своего проекта за 5 минут.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pytorch-ili-tensorflow---chto-vybrat">PyTorch или TensorFlow — что выбрать</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 05 Feb 2024 15:33:47 GMT</pubDate>
      <content:encoded><![CDATA[<p>IT-блогер Daniel Dan выпустил новое видео, в котором сравнил PyTorch или TensorFlow, их плюсы и минусы, а также ключевые различия.</p><p>Вот, о чём идёт речь в видео:</p><ol><li>Спикер по имени Даниэль сравнивает два инструмента глубокого обучения: TensorFlow и PyTorch.</li><li>PyTorch - это инструмент машинного обучения, который легко интегрируется с Python и основан на библиотеке Torch.<br /></li><li>TensorFlow - это всеобъемлющая система машинного обучения от Google Brain, поддерживающая различные платформы и языки программирования.<br /></li><li>Keras - это высокоуровневый API, построенный на TensorFlow, позволяющий быстро создавать нейронные сети.<br /></li><li>Преимущества PyTorch включают простоту использования, гибкость и интеграцию с Python, но он имеет ограниченные возможности визуализации и сервирования моделей.<br /></li><li>Преимущества TensorFlow - поддержка различных платформ, комплексность инструментов и поддержка множества языков программирования, но есть проблемы с обратной совместимостью и скоростью вычислений.<br /></li><li>TensorFlow выделяется в производительности и масштабируемости, в то время как PyTorch предлагает большую гибкость и удобство для прототипирования и исследований.<br /></li><li>TensorFlow имеет больше предварительно обученных моделей, доступных через TensorFlow Hub, в то время как PyTorch предлагает около 50 моделей через PyTorch Hub.<br /></li><li>TensorFlow часто используется в крупных компаниях и для производства, в то время как PyTorch набирает популярность в исследованиях и разработке.<br /></li><li>Выбор между PyTorch и TensorFlow зависит от специфики проекта, целей и требований к гибкости и масштабируемости.<br /></li></ol><p>Ниже — транскрибированный перевод ролика на русский язык.</p><p>PyTorch проще в освоении и лучше подходит для исследований и прототипирования — особенно благодаря динамическому графу вычислений и тесной интеграции с Python.</p><p>TensorFlow сильнее в продакшене: лучше масштабируется, имеет зрелые инструменты деплоя (TensorFlow Serving) и более 1300 предобученных моделей в TF Hub.</p><p>PyTorch доминирует в академических исследованиях и ML-стартапах; TensorFlow — в корпоративных системах и крупных production-проектах.</p><p>Для большинства задач выбор определяется спецификой проекта: PyTorch — гибкость и скорость разработки; TensorFlow — надёжность и масштабируемость при деплое.</p><p><b>PyTorch и TensorFlow</b> — два ведущих фреймворка глубокого обучения с открытым исходным кодом. PyTorch разработан Facebook (Meta) и построен на основе Python и библиотеки Torch; TensorFlow создан Google Brain и поддерживает множество языков и платформ. Оба инструмента применяются для построения нейронных сетей, компьютерного зрения, обработки естественного языка и других задач ИИ.</p><p>Если вы только начинаете изучать глубокое обучение, количество инструментов и фреймворков может показаться чрезмерным. Некоторые профессионалы глубокого обучения могут предложить TensorFlow, а эксперты по машинному обучению могут склоняться к PyTorch. Именно поэтому разработчики ежедневно сталкиваются с выбором между этими двумя инструментами.</p><p>Меня зовут Даниэль, и в этом видео я сравню TensorFlow и PyTorch, чтобы вы могли выбрать тот, который вам больше подходит. Сегодня я расскажу о кратком обзоре двух фреймворков, их преимуществах и ограничениях, а также о сходствах и различиях. И, конечно, я постараюсь помочь вам решить, какой из этих фреймворков лучше подойдет для вашего проекта. Также, если вы только начинаете или хотите улучшить свои навыки, не стесняйтесь посмотреть ссылки в описании после просмотра этого видео.</p><p>Там вы найдете отличные образовательные ресурсы для этих двух инструментов. Хорошо, теперь пришло время начать.</p><p>Один, два, три, начинаем. PyTorch против TensorFlow. Для чего они предназначены? Прежде чем я приступлю к сравнению, позвольте мне дать вам краткий обзор этих двух инструментов.</p><h2>Для чего нужны PyTorch и TensorFlow</h2><p>Для чего они предназначены и что они предлагают? PyTorch. Сегодня PyTorch - это бесплатный инструмент машинного обучения.</p><p>Он ускоряет переход от тестирования идей к их воплощению в жизнь. PyTorch работает с Python и построен на библиотеке Torch. Это инструмент научных вычислений, написанный на C и CUDA.</p><p>Да, он построен на трех сложных вещах. PyTorch имеет простой и понятный интерфейс Python, что сделало его одним из основных фреймворков для глубокого обучения. С помощью PyTorch вы можете создавать модели для самых разных вещей, таких как компьютерное зрение, понимание языка, распознавание речи и даже создание приложений искусственного интеллекта. Хорошо, ребята, теперь перейдем к TensorFlow. TensorFlow - это известная система с открытым исходным кодом для машинного обучения, разработанная Google Brain. По сути, это обновленная версия инструмента Google Disbelief.</p><p>Он работает на практически любом устройстве. У него есть обширная библиотека со всем необходимым для машинного обучения. Когда речь заходит о TensorFlow, нельзя не упомянуть Keras. Это высокоуровневый API и удобный инструмент, построенный на основе TensorFlow. Он помогает легко создавать нейронные сети, даже если вы не профессионал в области глубокого обучения. Многие победившие команды на Kaggle используют Keras, потому что он позволяет им быстро опробовать новые идеи, будь то компьютерное зрение, обработка языка, распознавание речи или создание приложений искусственного интеллекта, как Keras, так и TensorFlow могут помочь вам создавать крутые модели глубокого обучения.</p><h2>Преимущества и недостатки PyTorch против TensorFlow</h2><p>Ребята, прежде чем мы продолжим, я стараюсь делать образовательный контент в увлекательной форме, чтобы сделать его интересным, а не скучным. Взамен я прошу вас лайкнуть это видео и подписаться на мой канал, если вам нравится контент, который я создаю. Вот и все.</p><p>Хорошо, друзья, позвольте мне что-то прояснить. Я не считаю, что какой-то из этих инструментов проигрывает. Оба они потрясающие технологии для тех, кто хочет работать с машинным обучением.</p><p>Однако ни один из них не идеален. Давайте поговорим о преимуществах и ограничениях PyTorch и TensorFlow. PyTorch. Итак, что делает PyTorch великим?</p><p>Вот они. Простота. Во-первых, он довольно прост в использовании, потому что разработан иметь простые и последовательные интерфейсы.</p><p>Гибкость. PyTorch позволяет вам иметь массу контроля над тем, как ваша модель настраивается и обучается, и вам не нужно иметь дело с сложными низкоуровневыми вещами.</p><p>Естественная интеграция. Наконец, PyTorch прекрасно вписывается в общие инструменты Python, такие как NumPy, что позволяет им работать вместе без проблем.</p><p>Хорошо, а теперь давайте поговорим о его ограничениях. Ограниченные варианты визуализации. Когда речь идет о визуализации, у PyTorch нет лучших вариантов. Разработчикам может потребоваться использовать внешние инструменты, такие как TensorBoard, или полагаться на существующие инструменты визуализации данных Python. Ограниченное обслуживание моделей. Да, у PyTorch есть инструмент под названием TorchServ, который легко использовать, но он все еще не такой компактный, как эквивалент TensorFlow. PyTorch все еще догоняет, когда речь идет о обслуживании моделей. Это делает его не таким популярным для серьезной производственной работы.</p><p>Не такой всеобъемлющий. Наконец, когда вы создаете приложения, вам может потребоваться изменить свой код или модель PyTorch на другую платформу. Потому что PyTorch не является универсальным инструментом машинного обучения. Ладно, ребята, теперь давайте посмотрим на TensorFlow. TensorFlow.</p><p>И я начну с преимуществ. Поддержка различных платформ. Прежде всего, он естественным образом работает на различных платформах, таких как обычные компьютеры, ЦП, графические карты, это всеобъемлющий инструмент. Сегодня TensorFlow превратился в универсальный набор инструментов для машинного обучения. В нем есть инструменты для каждого этапа проекта машинного обучения, от настройки до развертывания и использования моделей. Он поддерживает несколько языков программирования. Вы можете использовать TensorFlow на нескольких различных языках программирования - Python, JavaScript, C++ и Java. Также есть неэффективные версии для Go и Swift. Ограничения TensorFlow.</p><p>Проблемы обратной совместимости. TensorFlow не облегчает вашу жизнь. Старые исследования в TensorFlow 1 не всегда сочетаются с новыми возможностями в TensorFlow 2. Производительность и проблемы использования. Когда речь идет о скорости вычислений, тесты показывают, что TensorFlow немного медленнее по сравнению с конкурентами.</p><p>Плюс, он не такой удобный в использовании, как некоторые другие фреймворки. Проблемы с обучающими циклами. Создание обучающих циклов в TensorFlow немного сложно. И, к сожалению, не так просто разобраться.</p><h2>PyTorch против TensorFlow. Основные различия</h2><p>Ладно, у обоих этих инструментов есть свои плюсы и минусы.</p><p>Но, ребята, как я уже сказал, на мой взгляд, ни один из них не плох. И когда речь идет о глубоком обучении, PyTorch и TensorFlow - лучшие выборы. В последние годы обе технологии стремительно развивались. Некоторое время назад TensorFlow считался более ориентированным на промышленность, а PyTorch - отличным инструментом для исследований.</p><p>Но, ребята, это уже не так. Так в чем же различия между этими инструментами? Давайте поговорим об этом более подробно. Производительность и масштабируемость. TensorFlow действительно выделяется, когда речь идет о производительности и обработке больших задач. Он отлично подходит для обучения в масштабе, что делает его лучшим выбором для реального использования. Встроенный инструмент TensorFlow, TensorBoard, отлично подходит для визуализации и устранения проблем. PyTorch становится лучше в этих отношениях.</p><p>Недавние обновления сделали его более масштабируемым, поддерживая распределенное обучение и позволяя обучать модели на нескольких GPU или машинах. Но для развертывания массивных моделей в реальных ситуациях TensorFlow все еще впереди. Доступность модели Как TensorFlow, так и PyTorch предоставляют доступ к множеству предварительно обученных моделей. У TensorFlow есть TensorFlow Hub. А у PyTorch есть PyTorch Hub. И эти ребята как золотые рудники готовых к использованию моделей. Независимо от того, занимаетесь ли вы интерфейсом, настройкой файлов или развертыванием.</p><p>И, ребята, позвольте мне быть ясным. В TensorFlow Hub около 1300 моделей. Поддерживающих компьютерное зрение, текст и аудио. В PyTorch Hub около 50 моделей. Что делает TensorFlow гораздо лучшим выбором для коллекций предварительно обученных моделей.</p><p>Гибкость. Если вы погружаетесь в продвинутые исследования или хотите больше свободы для творчества, PyTorch - это ваш выбор. Его динамический граф вычислений позволяет создавать более сложные и инновационные структуры моделей. Но PyTorch - лучший выбор для быстрого прототипирования и экспериментов. Да, TensorFlow пытается догнать в гибкости. Но PyTorch изначально разрабатывался с упрощением в первую очередь.</p><p>Вот почему у него небольшое преимущество. Развертывание для развертывания и обучения моделей TensorFlow побеждает с TensorFlow Serving, предлагая простое решение. Новые версии PyTorch предлагают улучшенное развертывание, но для веб-развертывания вам потребуются дополнительные инструменты, такие как Flask или Django. Кроме того, TensorFlow Serving предпочтительный выбор с точки зрения производительности. В целом, TensorFlow доминирует в крупных компаниях и производстве, известен своей надежностью. Однако PyTorch набирает популярность, обгоняя TensorFlow в поиске. Он становится предпочтительным в исследованиях и разработке благодаря удобному интерфейсу и гибкости, что подтверждается успешными моделями, такими как ChatGPT.</p><p>Если вы только начинаете путь в машинном обучении, полезно сначала освоить язык: <a href="https://tproger.ru/articles/python--polnyj-putevoditel-ot-pervoj-strochki-do-prodvinutyh-tem">Python: полный путеводитель от первой строчки до продвинутых тем</a>. Также стоит изучить, <a href="https://tproger.ru/articles/kakie-yazyki-programmirovaniya-uchit-v-2025-godu">какие языки программирования учить в 2025 году</a> — это поможет понять, насколько Python (и фреймворки на его основе) востребованы на рынке.</p><h2>Выводы</h2><p>PyTorch против. Окончательные мысли, ребята, теперь, учитывая все, что вы только что узнали, давайте ответим на большой вопрос. Какой инструмент стоит выбрать для ваших проектов машинного обучения сегодня?</p><p>И честно говоря, ребята, у меня нет четкого ответа здесь. Потому что дебата PyTorch против TensorFlow не имеет явного победителя. И, на мой взгляд, это зависит от вашего конкретного случая использования. PyTorch удобен с динамическими графами вычислений. TensorFlow зрел с большим количеством библиотек, но может потребовать больше времени для изучения. Поэтому перед выбором фреймворка глубокого обучения учитывайте цели вашего проекта. Если вы хотите быстрый фреймворк обучения с меньшими усилиями, PyTorch подходит. Но если вам нужен готовый к производству инструмент для тяжелых вычислений, то TensorFlow, возможно, будет лучшим выбором. Ладно, друзья, это все, что я хотел сказать в своем сравнении PyTorch против TensorFlow.</p><p>Я оставил все полезные ссылки в описании ниже, чтобы вы могли улучшить свои навыки с помощью этих инструментов машинного обучения и глубокого обучения. Не стесняйтесь посмотреть. Также, если вам понравилось это видео, не забудьте поставить ему лайк. И если вы хотите больше подобных видео, не забудьте подписаться на канал. Спасибо за просмотр и до следующего раза!</p>]]></content:encoded>
    </item>
    <item>
      <title>Какой JS-фреймворк выбрать новичку во фронтенде</title>
      <link>https://tproger.ru/articles/kakoj-js-frejmvork-vybrat-novichku-vo-frontende</link>
      <comments>https://tproger.ru/articles/kakoj-js-frejmvork-vybrat-novichku-vo-frontende?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[МТС]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kakoj-js-frejmvork-vybrat-novichku-vo-frontende</guid>
      <description><![CDATA[<p>Рассказываем про React, Angular и Vue.js — трёх слонов, на которых держится мир современной веб-разработки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kakoj-js-frejmvork-vybrat-novichku-vo-frontende">Какой JS-фреймворк выбрать новичку во фронтенде</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 01 Feb 2024 09:07:32 GMT</pubDate>
      <content:encoded><![CDATA[<p>В жизни каждого начинающего фронтендера наступает момент: вёрстка и ванильный JavaScript уже освоены, а значит, пришло время выбрать своего бойца, точнее — фреймворк для дальнейшей работы.</p><p>От этого выбора может зависеть то, как быстро вы найдёте первую работу, в какой сфере и с какой зарплатой. В этой статье разберём плюсы и минусы самых популярных фреймворков, чтобы вам было проще определиться.</p><h2>Чтотакое фреймворк и чем он отличается от библиотеки</h2><p><i>Фреймворк</i> — каркас программы, как готовое тесто для пиццы. Вам не нужно покупать яйца, муку и молоко, замешивать тесто, ждать несколько часов. Достаточно выбрать любимый соус и начинку — и отправить всё в духовку.</p><p>Это значит, что у фреймворка есть постоянная и переменная части — модули и элементы, которые можно добавлять по желанию для кастомизации программы.</p><p>Часто фреймворки путают с библиотеками.</p><p><i>Библиотека </i>— коллекция функций, классов и методов, которые вы можете использовать в коде. Она не определяет структуру вашего приложения, а предоставляет инструменты для выполнения конкретных задач.</p><p>Работая с фреймворком, вы можете использовать много разных библиотек. Во фронтенде это jQuery, Lodash, Moment.js, D3.js и другие.</p><p>По сути популярный React — это тоже библиотека, а не фреймворк. Так как он даёт узкоспециализированный функционал для создания пользовательских интерфейсов веб-приложений и не задаёт их чёткую структуру. Но всё же мы будем рассматривать React вместе с другими фреймворками, как это чаще бывает на практике.</p><h2>Популярные JS-фреймворки</h2><p>Чтобы выбрать фреймворки для этой статьи, мы заглянули на HeadHunter и проанализировали, какие технологии наиболее востребованы у работодателей.</p><p>На первом месте с 3 371 результатом оказался React, на втором — Angular (1 361 вакансия), на третьем — Vue.js с 1 161 упоминанием. Поэтому о них сегодня и пойдёт речь.</p><figure><img src="https://media.tproger.ru/user-uploads/73713/2024-01-31/cf128db3-1ef9-432d-ba9b-849f75c5171f.png" alt="" /></figure><h2>React</h2><p>React — фреймворк/библиотека JavaScript для разработки пользовательских интерфейсов. Это универсальное решение для создания небольших приложений.</p><p><b>Преимущества React:</b></p><ul><li>синтаксис JSX (JavaScript XML) делает код более читаемым и понятным</li><li>виртуальный DOM повышает скорость отрисовки компонентов</li><li>удобно создавать отдельные компоненты и переиспользовать их в других частях программы</li><li>используется направленный поток данных (дочерние элементы не влияют на родительские), за счёт чего в коде реже возникают баги</li></ul><p><b>Недостатки React:</b></p><ul><li>может показаться сложным для новичков, которые не знакомы с синтаксисом JSX</li><li>для создания сложных приложений необходимо использовать дополнительные библиотеки, что может усложнить поддержку проекта</li><li>для оптимальной работы с фреймворком надо знать такие инструменты, как Babel, Webpack, Redux</li></ul><p>Как выглядит программа Hello, world! на React:</p><h2>Angular</h2><p>Angular — фреймворк от компании Google для работы с интерфейсами.</p><p>Его первая версия AngularJS увидела свет в 2010 году, но после выхода React стали хорошо видны её недостатки, поэтому в компании решили переработать фреймворк. Так, в 2016 году появился Angular, который сейчас применяют во многих крупных компаниях для создания сложных корпоративных приложений.</p><p><b>Преимущества Angular:</b></p><ul><li>использует TypeScript, который добавляет статическую типизацию к JavaScript, что упрощает обнаружение ошибок</li><li>предоставляет всю необходимую инфраструктуру для разработки веб-приложений, включая маршрутизацию, управление состоянием, HTTP-запросы, валидацию форм и другие инструменты</li><li>включает в себя инструменты для оптимизации производительности, что улучшает скорость отрисовки интерфейса</li><li>удобный синтаксис для тех, кто переходит из бэкенда во фронтенд или фулстек-разработку</li></ul><p><b>Недостатки Angular:</b></p><ul><li>сложность освоения TypeScript для новичков в программировании, из-за этого высокий порог входа во фреймворк</li><li>не подходит для небольших приложений, так как весит 550-600 Кб</li><li>предлагает только один способ построения архитектуры ПО</li></ul><p>Как выглядит программа Hello, world! на Angular:</p><h2>Vue.js</h2><p>Vue.js — фреймворк для создания интерактивных пользовательских интерфейсов от разработчика Эвана Ю, более простая и лёгкая альтернатива другим фреймворкам и библиотекам.</p><p><b>Преимущества Vue.js:</b></p><ul><li>обладает интуитивно понятным синтаксисом, что делает его лёгким в освоении даже для новичков в веб-разработке</li><li>компонентная архитектура способствует переиспользованию кода, модульности и упрощает разработку</li><li>небольшой размер библиотеки (для архивированной версии — до 20 Кб), что обеспечивает быструю загрузку и меньшие требования к пропускной способности сети</li><li>подробная и понятная документация, в том числе на русском языке</li></ul><p><b>Недостатки Vue.js:</b></p><ul><li>редко используется крупными компаниями, что ограничивает возможности для поиска работы</li><li>имеет ограниченную экосистему, что может усложнить поиск решений для специфических задач</li></ul><p>Как выглядит программа Hello, world! на Vue.js:</p><h2>Какой фреймворк подойдёт вам</h2><p>Советуем найти бесплатные видео в интернете, которые рассказывают о синтаксисе и других особенностях фреймворков, и попробовать поработать с ними на практике.</p><p>Так вы сможете понять, что же вам ближе: React, Angular или Vue.js. Но не спешите и помните про базу — прежде чем переходить на фреймворки, хорошо разберитесь в работе JavaScript. Эти знания и умение гуглить правильные вопросы помогут разобраться в любой технологии.</p>]]></content:encoded>
    </item>
    <item>
      <title>10 лучших JavaScript-фреймворков в 2024 году. Какой фреймворк учить</title>
      <link>https://tproger.ru/articles/10-luchwih-javascript-frejmvorkov-v-2024-godu--kakoj-frejmvork-uchit</link>
      <comments>https://tproger.ru/articles/10-luchwih-javascript-frejmvorkov-v-2024-godu--kakoj-frejmvork-uchit?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/10-luchwih-javascript-frejmvorkov-v-2024-godu--kakoj-frejmvork-uchit</guid>
      <description><![CDATA[<p>Топ-10 JavaScript-фреймворков 2024: React, Vue, Angular, Next.js, Svelte и другие. Узнайте, какой фреймворк выбрать для старта и какой самый популярный.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/10-luchwih-javascript-frejmvorkov-v-2024-godu--kakoj-frejmvork-uchit">10 лучших JavaScript-фреймворков в 2024 году. Какой фреймворк учить</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 30 Jan 2024 10:37:52 GMT</pubDate>
      <content:encoded><![CDATA[<p>JavaScript-фреймворк — это библиотека инструментов и соглашений, которая ускоряет создание веб-приложений на JavaScript. Англоязычный YouTube-канал Hostinger Academy в новом видео рассмотрел 10 лучших фреймворков для JavaScript в 2024 году, чтобы выяснить, какой из них стоит учить больше прочих.</p><p>Вот, о чём шла речь в видео:</p><ol><li>JavaScript фреймворки – это предварительно написанные коллекции библиотек, инструментов и соглашений, облегчающие разработку веб-приложений.</li><li>Фреймворки предоставляют готовые функциональные возможности, экономя время разработчиков и позволяя сосредоточиться на создании специфической логики приложения.</li><li>Vue – универсальный фреймворк с MVVM архитектурой, подходит для постепенного внедрения в проекты и создания интерактивных пользовательских интерфейсов.</li><li>Angular, разработанный Google на TypeScript, предназначен для создания одностраничных приложений с мощной двусторонней привязкой данных и внедрением зависимостей.</li><li>React Native позволяет разрабатывать нативные мобильные приложения для iOS и Android, используя одну кодовую базу и синтаксис React.</li><li>Next.js специализируется на SSR и SSG для React приложений, улучшая время загрузки страниц и SEO.</li><li>Nuxt.js упрощает разработку универсальных Vue приложений с помощью SSR и SSG, обеспечивая быструю загрузку и SEO-оптимизацию.</li><li>Svelte компилирует компоненты в оптимизированный JavaScript код, что обеспечивает высокую производительность приложений.</li><li>Gatsby.js основан на React, GraphQL и Webpack, идеален для создания статических сайтов с оптимизацией для скорости и SEO.</li><li>Ember используется для создания масштабируемых веб-приложений с акцентом на соглашения и лучшие практики.</li><li>Fastify – это фреймворк с низким уровнем накладных расходов для создания эффективных веб-приложений и API.</li><li>Express упрощает обработку HTTP-запросов и управление серверной функциональностью, подходит для малых и крупных веб-приложений.</li><li>Выбор JavaScript фреймворка зависит от целей и масштаба проекта, на который вы хотите сосредоточиться.</li></ol><p>React — самый популярный JS-фреймворк в мире: используется в Facebook, Instagram и тысячах других проектов; отличный выбор для первого изучения.</p><p>Vue.js — лучший вариант для новичков: низкий порог вхождения, отличная документация на русском, MVVM-архитектура и плавная интеграция в существующие проекты.</p><p>Next.js и Nuxt.js лидируют в SSR/SSG: если нужен SEO-оптимизированный сайт на React или Vue — это стандарт индустрии в 2024 году.</p><p>Angular подходит для крупных корпоративных проектов: крутой старт, но мощная архитектура MVC и поддержка Google делают его незаменимым в enterprise-разработке.</p><p>Выбор фреймворка зависит от цели: для фронтенда — React/Vue, для мобильных приложений — React Native, для быстрых API — Express или Fastify.</p><p>Ниже представлен транскрибированный перевод на русский язык.</p><p>Привет! Сегодня мы собираемся рассмотреть 10 лучших фреймворков JavaScript.</p><p>Продолжайте смотреть, если вы все еще размышляете, какой из них вы хотите освоить. Фреймворк JavaScript – это заранее написанная коллекция библиотек, инструментов и соглашений, которая предоставляет организованный подход к созданию веб-приложений. Он предлагает основу и руководство разработчикам для оптимизации любого процесса разработки программного обеспечения и эффективного выполнения общих задач.</p><h2>Что такое фреймворки</h2><p>Фреймворк обычно включает в себя сложные функции, включая управление данными, компоненты пользовательского интерфейса и маршрутизацию.</p><p>Хотя фреймворки JavaScript могут использоваться для создания бэкэнд-архитектуры, они в основном полезны для разработки веб-интерфейса. Фреймворки JavaScript предлагают предварительно протестированные инструменты для создания масштабируемых и интерактивных веб-приложений.</p><p>Поэтому разработчики могут экономить время и усилия, используя заранее созданные функции и сосредотачиваясь на создании конкретной логики приложения. Вот почему многие современные компании используют фреймворки JavaScript для дополнительного преимущества в карьере разработчика интерфейса.</p><p>Теперь, когда вы знаете, в чем суть фреймворка JavaScript, помните сосредоточиться на одном или двух из них, а не изучать сразу несколько фреймворков.</p><p>Имея это в виду, давайте рассмотрим топ-10 фреймворков JavaScript, чтобы помочь вам выбрать, который вы хотите освоить.</p><h2>Vue.js</h2><p>Vue – это фреймворк JavaScript, используемый для создания дизайнов пользовательского интерфейса веб-приложений. Он следует архитектурному шаблону MVVM и подчеркивает разработку на основе компонентов. Одним из сильных моментов Vue является его универсальность.</p><p>Вы можете использовать его для создания одностраничных приложений или интегрировать его в существующие проекты. Используя Vue, разработчики могут постепенно вводить компоненты без полной перезаписи данных.</p><p>Более того, он также отлично подходит для создания интерактивного пользовательского интерфейса благодаря своей реактивной привязке данных и способным директивам.</p><p>Этот фреймворк JavaScript доступен как для начинающих, так и для опытных разработчиков, поскольку каждый может использовать его понятную документацию и активную поддержку сообщества. Vue обеспечивает отличную производительность благодаря своей эффективной системе рендеринга, которая использует виртуальный DOM и интеллектуальное отслеживание обновлений.</p><p>Однако Vue все еще не так широко принят, как другие фреймворки, поэтому может быть сложно найти конкретные ресурсы или экспертов.</p><p>Кроме того, хотя Vue предоставляет обширную экосистему, у него могут быть другие инструменты и готовые решения, чем у других фреймворков.</p><h2>AngularJS</h2><p>Angular – это открытый фреймворк JavaScript, написанный на TypeScript, разработанный Google. Его основная цель – создание одностраничных приложений с использованием архитектурного шаблона MVC.</p><p>Как фреймворк, Angular предоставляет стандартную структуру для работы разработчиков. Он предлагает мощную двустороннюю привязку данных, автоматически синхронизируя данные между моделью и представлением, так что разработчикам не нужно выполнять обновления вручную.</p><p>Angular также предоставляет внедрение зависимостей, позволяющее создавать …и многоразовые компоненты кода. Кроме того, он подходит для разработки сложных приложений, предоставляя маршрутизацию, валидацию форм и поддержку анимации.</p><p>Его большая экосистема библиотек и модулей также дополнительно расширяет его возможности. Angular предлагает четкую структуру, способствующую поддержке и тестированию кода. Что касается рабочего процесса, Angular предлагает функции, такие как декларативные шаблоны и встроенную поддержку модульного тестирования, способствуя эффективной разработке приложений.</p><p>Поскольку Angular работает под эгидой Google, у него сильная поддержка сообщества и обширная документация. Однако Angular имеет более крутой кривой обучения, чем другие фреймворки в этом списке, особенно для начинающих. Кроме того, приложения Angular могут быть более ресурсоемкими из-за их сложной архитектуры и двусторонней привязки данных.</p><p>Это может повлиять на производительность в определенных случаях. Принятие новых технологий и практик также может быть медленнее для Angular, чем для более новых фреймворков.</p><h2>React Native</h2><p>React Native – это фреймворк для создания нативных мобильных приложений для платформ iOS и Android с использованием единого кодовой базы. Он использует популярную библиотеку React и позволяет разработчикам писать мобильные приложения, используя синтаксис JavaScript и React. Популярные приложения, созданные с использованием React Native, включают Facebook, Discord, Skype и мобильный WordPress. Используя подход “узнай один раз – напиши везде”, разработчики могут повторно использовать значительную часть своей кодовой базы на нескольких платформах.</p><p>Таким образом, экономя время и усилия разработки. Более того, разработчики могут ускорить итерацию и тестирование, используя функцию горячей перезагрузки React Native, так как она позволяет пользователям мгновенно получать обновления во время процесса разработки приложения. React Native предоставляет набор предварительно созданных компонентов пользовательского интерфейса, которые соответствуют нативным мобильным компонентам, обеспечивая последовательный пользовательский опыт. Кроме того, он использует нативные компоненты рендеринга, которые поддерживают эффективный рендеринг и плавные анимации. Поскольку Facebook поддерживает этот фреймворк, React Native получает преимущества от обширного сообщества и экосистемы, не говоря уже о широком спектре сторонних библиотек, плагинов и инструментов, улучшающих производительность и расширяющих возможности мобильных приложений. Однако перед использованием React Native есть несколько вещей, которые следует учесть.</p><p>Во-первых, в отношении пользовательского интерфейса вам может потребоваться написать платформоспецифический код или использовать пользовательские нативные модули. Во-вторых, определенные сложные или ресурсоемкие функции могут работать лучше с нативной разработкой. В-третьих, экосистема React Native все еще быстро развивается.</p><p>Для того чтобы быть в курсе, может потребоваться отслеживать все изменения и обновления.</p><h2>Next.js</h2><p>Далее идет еще один фреймворк на основе React, разработанный специально для SSR и SSG в приложениях React. Функция SSR улучшает время загрузки начальной страницы и повышает SEO. С другой стороны, SSG позволяет разработчикам предварительно отрисовывать страницы во время сборки и обслуживать их в виде статических файлов. Именно поэтому Next чрезвычайно полезен для создания веб-приложений, требующих эффективной отрисовки и оптимизированной производительности архитектуры фронтенда и бэкенда.</p><p>Этот фреймворк предлагает маршрутизацию на основе файлов, где каждый файл в каталоге страниц становится уникальным маршрутом. Кроме того, в нем встроена поддержка API-маршрутов, что позволяет разработчикам легко создавать бэкенд-функционал. Со стороны фронтенда Next предоставляет автоматическое разделение кода, позволяя загружать только необходимый код, что обеспечивает более быструю отрисовку страниц. Также в нем есть решения для CSS и JS, упрощающие процесс стилизации компонентов.</p><p>Как и в случае с освоением React Native, лучше сначала изучить концепции и синтаксис React, чтобы адаптироваться к среде Next. Кроме того, Next может быть не самым подходящим вариантом для небольших проектов, которым не требуется серверная отрисовка или продвинутые функции. Начальная настройка и процесс конфигурации Next могут быть более полезными по сравнению с более простыми библиотеками или фреймворками.</p><h2>Nuxt.js</h2><p>Nuxt – это фреймворк на основе представлений, который фокусируется на SSR и SSG для упрощения разработки универсальных приложений представлений. Хотя он включает в себя бэкенд-функционал, Nuxt в первую очередь является фронтенд-фреймворком, который отлично подходит для создания динамичных и интерактивных веб-приложений.</p><p>Таким образом, он не является автономным бэкенд-фреймворком. Сказанное это, использование SSR и SSG делает Nuxt полезным для создания быстро загружаемых и SEO-дружественных веб-приложений. Кроме того, он позволяет генерировать статические HTML-файлы во время сборки для улучшения производительности и масштабируемости. Одно из заметных преимуществ Nuxt – это подход “конвенция вместо конфигурации”.</p><p>Nuxt предлагает встроенную систему маршрутизации, которая упрощает создание сложных навигационных структур. Он также предоставляет функциональность промежуточного программного обеспечения для обработки аутентификации, извлечения данных и других общих задач для упрощения разработки приложений.</p><p>Еще одним сильным моментом является обширная экосистема плагинов, которая предоставляет широкий спектр плагинов и модулей для упрощения задач, включая обработку API, управление состоянием и реализацию серверного функционала. Предоставляя множество готовых функций, настройка за пределами конвенций Nuxt может потребовать более глубокого понимания фреймворка. Начальная настройка и процесс конфигурации могут быть более сложными, чем у других фреймворков.</p><h2>Svelte</h2><p>Svelte – это современный фреймворк JavaScript с уникальным подходом к созданию пользовательских интерфейсов.</p><p>Многие крупные компании, включая 1Password, Avast и The New York Times, используют этот фреймворк для создания веб-приложений. В отличие от традиционных фреймворков, работающих в браузере, Svelte компилирует компоненты в высокооптимизированный, легкий код JavaScript, что приводит к быстрой и эффективной работе приложений.</p><p>Это объясняет, почему Svelte полезен для создания высокооптимизированных веб-приложений с минимальными накладными расходами. Кроме того, компиляция компонентов во время сборки в Svelte устраняет необходимость во времени выполнения фреймворка в конечном пакете.</p><p>Этот подход приводит к более быстрым временам начальной загрузки и лучшей производительности во время выполнения по сравнению с другими фреймворками.</p><p>Более того, реактивная система Svelte обеспечивает эффективное обновление DOM, обновляя только те части интерфейса, которые изменились, что приводит к более плавным и отзывчивым пользовательским впечатлениям.</p><p>Svelte – это фреймворк JavaScript, удобный для начинающих, с простым синтаксисом, который легко понять и использовать. С его помощью разработчики могут писать код непосредственно в синтаксисе, похожем на HTML, поэтому более интуитивно выражать пользовательский интерфейс и поведение компонентов в одном файле.</p><p>Кроме того, Svelte способствует использованию компонентов и модульности, позволяя разработчикам легко создавать сложные приложения. Svelte также предлагает встроенное управление состоянием и возможности анимации, если нет большой потребности во внешних библиотеках. Svelte относительно нов по сравнению с другими фреймворками, и его экосистема может быть менее обширной.</p><h2>Gatsby</h2><p>Более того, поиск конкретных решений или ресурсов требует дополнительной работы по сравнению с более установленными фреймворками. Gatsby, также известный как Gatsby.js, является фреймворком с открытым исходным кодом на основе React, GraphQL и Webpack.</p><p>Другими словами, Gatsby позволяет разработчикам создавать статический веб-сайт с использованием React, извлекая данные из базы данных системы управления контентом или файлов разметки. Таким образом, проще создавать динамические и данных-ориентированные веб-сайты.</p><p>Gatsby полезен для создания статических сайтов, которые очень оптимизированы для скорости и SEO. Он использует концепцию предварительной отрисовки, где HTML и CSS для каждой страницы генерируются во время сборки, что приводит к быстрым временам загрузки и улучшенной видимости в поисковых системах.</p><p>Кроме того, Gatsby также предлагает функции, такие как разделение кода, ленивая загрузка и оптимизация изображений для дальнейшего улучшения производительности. Экосистема плагинов Gatsby предоставляет несколько интеграций для популярных платформ CMS и сервисов, позволяя разработчикам использовать существующие инструменты и рабочие процессы.</p><p>Однако важно отметить, что Gatsby может быть не самым подходящим вариантом для каждого типа проекта. Его фокус на генерацию статических сайтов может быть менее подходящим для высокодинамичных веб-приложений, требующих обновлений в реальном времени или обширной обработки на стороне сервера. Процесс сборки Gatsby также может потреблять больше ресурсов.</p><p>Требуется более мощное оборудование для оптимальной производительности.</p><h2>Ember.js</h2><p>Ember – это фреймворк JavaScript для создания крупномасштабных веб-приложений. Netflix, Apple, Microsoft и LinkedIn – примеры компаний, применяющих этот фреймворк в своих веб-приложениях. Он следует принципу соглашения над конфигурацией, предоставляя разработчикам структурированную среду для создания масштабируемых приложений.</p><p>Одним из сильных моментов Ember является его сильное внимание к соглашениям и лучшим практикам. Фреймворк применяет набор соглашений и шаблонов, чтобы помочь разработчикам поддерживать последовательность в проектах.</p><p>Это полезно для улучшения сотрудничества среди участников команды и упрощения процесса включения новых разработчиков. Ember также предоставляет широкий спектр встроенных функций, таких как привязка данных, маршрутизация и шаблонизация, что дополнительно упрощает процесс разработки.</p><p>Еще одним заметным преимуществом Ember является его фокус на стабильность и долгосрочную поддержку. Команда Ember отдает приоритет обратной совместимости, обеспечивая простую реализацию обновлений для приложений, созданных на предыдущих версиях этого фреймворка.</p><p>Следовательно, он ценен для крупных предприятий, требующих долгосрочной поддержки и обслуживания. Ember также предлагает мощный интерфейс командной строки, который автоматизирует многие задачи разработки, такие как настройка проекта, генерация кода и тестирование. Сказав это, одним из потенциальных недостатков Ember является его крутой кривой обучения.</p><p>Из-за его убежденной природы и обширных соглашений начинающим может быть сложнее приспособиться к их окружению. Кроме того, хотя сообщество Ember неактивно и поддерживающее, оно меньше, чем у более популярных фреймворков, таких как React Native или Angular. Разработчики, предпочитающие более гибкий или легкий подход, могут считать Ember менее подходящим для своих потребностей.</p><h2>Fastify</h2><p>Fastify – это фреймворк JavaScript с низкими накладными расходами для создания эффективных веб-приложений и API. Он разработан для обеспечения производительности и масштабируемости за счет использования возможностей JavaScript и принятия асинхронной, неблокирующей архитектуры. Fastify полезен для проектов, требующих высокопроизводительных веб-серверов, микросервисов или API.</p><p>Он отлично справляется с обработкой большого количества запросов с минимальными накладными расходами, что делает его отличным выбором для приложений, придающих приоритет скорости. Благодаря модульной архитектуре Fastify, плагины могут быть выборочно добавлены для расширения функциональности без ущерба производительности. Кроме того, обширная экосистема плагинов Fastify способствует повторному использованию кода и упрощает разработку.</p><p>Другие продвинутые функции включают async-await, потоки и встроенные механизмы кэширования, которые также помогают минимизировать время ответа и уменьшить потребление памяти. Fastify предоставляет мощные возможности валидации запросов и сериализации для обеспечения целостности данных и безопасности.</p><p>С помощью Fastify разработчики могут использовать различные плагины, предоставленные сообществом, для добавления функциональностей, включая аутентификацию, ведение журнала и интеграцию с базой данных. Имейте в виду, что Fastify может не быть лучшим выбором для небольших проектов, не требующих оптимизации производительности. Его фокус на производительность может ввести дополнительную сложность по сравнению с более легкими фреймворками.</p><p>Кроме того, хотя Fastify приобрел популярность, его экосистема может быть не такой обширной, как у некоторых других фреймворков, требуя дополнительных усилий для поиска конкретных решений или ресурсов.</p><h2>Express.js</h2><p>Express – универсальный фреймворк JavaScript для создания веб-приложений и API. Он предоставляет функции и промежуточное программное обеспечение, которое упрощает обработку HTTP-запросов, маршрутизацию и управление серверной функциональностью. Инструменты Express полезны для создания веб-приложений малого и крупного масштаба.</p><p>Он предлагает прямой, фиксированный подход, позволяя разработчикам структурировать свой код и определять маршруты в соответствии с требованиями своего проекта. Express предоставляет широкий спектр вариантов промежуточного программного обеспечения для обработки запросов, разбора данных, аутентификации и обработки ошибок, позволяя разработчикам добавлять функциональность по мере необходимости.</p><p>Кроме того, у него есть обширная коллекция промежуточного программного обеспечения, плагинов и расширений, чтобы помочь разработчикам улучшить возможности своих приложений. Этот фреймворк JavaScript гордится своей простотой и простотой использования. Его минималистический дизайн и интуитивный API делают его удобным для начинающих и быстрым в освоении.</p><p>Кроме того, Express предлагает гибкость в выборе технологий, поскольку он хорошо интегрируется с различными базами данных, системами шаблонизации и фронтенд-фреймворками.</p><p>Сказав это, Express может потребовать дополнительных усилий и принятия решений для структурирования и организации кода в крупных проектах. Некоторые функции, обычно встречающиеся в других фреймворках, не встроены в фреймворк Express, требуя от разработчиков полагаться на дополнительные библиотеки или настраивать решения.</p><h2>Заключение</h2><p>Поскольку существует много многообещающих фреймворков JavaScript для освоения, установление правильных целей и масштаба проекта, на который вы хотите сосредоточиться, может помочь вам отсортировать некоторые из этих вариантов. Если вам понравилось это видео и оно оказалось полезным, поставьте ему лайк и поделитесь им с друзьями. А еще не забудьте подписаться на YouTube-канал Hostinger Academy, чтобы получать больше подобных видео. Спасибо за просмотр и удачи в вашем онлайн-путешествии.</p><p>Если вы только выбираете, с чего начать путь в разработке, читайте наши материалы: <a href="https://tproger.ru/articles/kakie-yazyki-programmirovaniya-uchit-v-2025-godu">какие языки программирования учить в 2025 году</a> и <a href="https://tproger.ru/articles/5-samyh-vostrebovannyh-yazykov-programmirovaniya-v-2025-godu">5 самых востребованных языков программирования в 2025 году</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Angular 17: что нового</title>
      <link>https://tproger.ru/news/angular-17--chto-novogo</link>
      <comments>https://tproger.ru/news/angular-17--chto-novogo?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/angular-17--chto-novogo</guid>
      <description><![CDATA[<p>Расшифровка видео об обновлениях в Angular 17, в котором разработчики рассказали о новых фичах фреймворка и изменениях в синтаксисе и рендеринге. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/angular-17--chto-novogo">Angular 17: что нового</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 30 Jan 2024 10:22:32 GMT</pubDate>
      <content:encoded><![CDATA[<p>На официальном YouTube-канале Angular вышло видео, в котором разработчики рассказывают о новых фичах фреймворка в 17 версии.</p><p>Вот, о чём идёт речь в видео:</p><ol><li>Последняя версия Angular включает улучшения такие как управление потоком, отложенные представления и более быструю сборку.</li><li>На мероприятии для разработчиков Angular V17 был представлен новый сайт Angular.dev, который станет будущим домом для разработчиков Angular.</li><li>Angular.dev предлагает обновленную документацию, новую систему учебных пособий в браузере и площадку для кодирования, где можно изучать Angular, работая в браузере.</li><li>Angular обновил свою визуальную идентичность и логотип, отражающий текущие усилия и приоритеты в будущем.</li><li>Гидратация (hydration) в Angular, представленная в предварительной версии в v16, теперь стабильна и готова к использованию в производственных приложениях.</li><li>Введены важные обновления для гибридного рендеринга в Angular, позволяющие рендерить приложения на стороне клиента, сервера или предварительно рендерить их (SSG).</li><li>С версии v17 можно создавать приложения с гибридным рендерингом с помощью команды ng new и нового флага SSR.</li><li>Поддержка ESM для серверных сборок, ускорение сборок для серверных пакетов и улучшения для сервера разработки SSR.</li><li>Новый синтаксис управления потоком в шаблонах находится в предварительном просмотре и позволяет использовать встроенные конструкции if, for и switch.</li><li>Использование нового синтаксиса for может значительно увеличить производительность, в некоторых случаях до 90% быстрее.</li><li>Выпущены новые миграции для облегчения перехода на новый синтаксис.</li><li>Приложения, созданные с помощью CLI, по умолчанию будут независимыми, без необходимости использования флага.</li><li>ESBuild и Vite теперь включены по умолчанию, что обеспечивает улучшение производительности ‘из коробки’ для новых приложений.</li><li>Некоторые партнеры сообщили об улучшении времени сборки на 67%.</li><li>Сочетание SSR и SSG может привести к улучшению скорости сборки ngBuild на 87% и ускорению цикла редактирования-обновления для ngServe на 80%.</li><li>DevTools получили долгожданную функцию – возможность проверки графа внедрения зависимостей.</li><li>Теперь можно выполнять пользовательские преобразования ввода, а также доступны некоторые встроенные преобразования, такие как Boolean attribute и number attributes.</li><li>Добавлены новые свойства styles и styleUrls для принятия строк, так как разработчики редко используют более одного стилевого файла.</li><li>Для получения дополнительной информации можно обратиться к заметкам о выпуске и блогу Angular на blog.angular.io.</li><li>Команда Angular призывает разработчиков оценить новые функции и поделиться своими отзывами.</li></ol><p>Ниже представлен транскрибированный перевод ролика на русский язык.</p><p>Подождите, что? Управление потоком, виды, отложенные представления, быстрые сборки. Я не могу поверить, я не могу поверить, что вы получаете все это и еще намного больше в последней версии Angular.</p><h2>Новый сайт для Angular</h2><p>Давайте обсудим это. Во время мероприятия для разработчиков Angular V17, команда Angular представила Angular.dev, новый будущий дом для разработчиков Angular. Новый сайт предлагает обновленную документацию, новую систему интерактивных учебных пособий и даже общую площадку для кодирования, где вы можете попробовать Angular прямо в браузере во время обучения.</p><p>Теперь, что если я вам скажу, что есть еще? Надеюсь, вы мне поверите, потому что, ну, Angular стремительно развивался за последние несколько лет, и мы решили отразить это современным визуальным стилем и логотипом. Теперь этот новый четкий логотип отражает наши текущие усилия и будущие приоритеты. Чтобы узнать больше, зайдите на angular.dev, но, слушайте, не трогайте стены.</p><p>Мы только что закончили покраску места. В версии 16 мы начали улучшать серверную часть Angular, представив гидратацию в режиме предварительной версии для разработчиков. С тех пор мы приложили все усилия, чтобы еще больше улучшить этот опыт. И сегодня я очень рад объявить, что гидратация в Angular теперь стабильна и готова к использованию ваших приложениях в производстве.</p><h2>Гибридный рендеринг Angular 17</h2><p>Но подождите, вот что действительно потрясающе. Мы также внесли важные обновления в опыт гибридного рендеринга Angular. Гибридный рендеринг позволяет вам рендерить ваши приложения на стороне клиента, рендерить их на сервере или предварительно рендерить. Это также известно как SSG. Начиная с v17, вы можете создавать приложения с гибридным рендерингом с самого начала, используя ng new и новый флаг SSR.</p><p>Но мы не остановились на этом. Если вы забыли использовать флаг, не волнуйтесь, мы также обновили CLI, чтобы подсказать вам. Также добавлена поддержка ESM для серверных сборок. Сборки становятся быстрее для серверных пакетов, и мы не можем забыть, что мы даже проявили немного любви к dev-серверу для SSR.</p><h2>Изменения в синтаксисе</h2><p>Готовьтесь взять управление потоком в ваших шаблонах на новый уровень с новым синтаксисом управления потоком, который сейчас находится в режиме предварительной версии. Разработчики Angular теперь могут использовать встроенный синтаксис для if, for и switch. Хотя ничего не нужно импортировать, просто готово к использованию в ваших шаблонах. Теперь, что здесь еще потрясающе, это то, что использование нового синтаксиса for может значительно увеличить производительность, серьезно, до 90% быстрее в определенных случаях. Мы также выпустили новые миграции, чтобы облегчить ваш путь к использованию этого нового синтаксиса.</p><p>Запустите ng generate в angular forward slash core colon control dash flow. Подождите, что? Есть еще. Есть еще функции, о которых нужно рассказать.</p><p>К моменту окончания этого видео, оно будет длиться целый час, но это нормально, друзья. Давайте проведем молниеносный обзор некоторых других обновлений, доступных в этом выпуске. Новые приложения, созданные с помощью CLI, будут автономными по умолчанию.</p><h2>Прочие улучшения</h2><p>Не требуется флаг. ESBuild и Vite теперь включены по умолчанию, так что вы сразу получаете преимущества производительности для ваших новых приложений. Некоторые корпоративные партнеры сообщили о 67% улучшении времени сборки. Это действительно потрясающе, верно?</p><p>Я тоже так думаю. Но подождите, в сочетании с SSR и SSG, вы можете получить до 87% улучшения скорости в ngBuild и 80% более быстрый цикл редактирования и обновления для ngServe.</p><p>DevTools получают очень запрашиваемую функцию. Теперь вы можете проверить граф внедрения зависимостей с последними обновлениями, что делает отладку намного лучше.</p><p>Теперь вы можете выполнять пользовательские преобразования ввода, и мы даже предоставляем вам несколько встроенных, таких как логический атрибут и числовые атрибуты, экономя ваше драгоценное время, не приходится реализовывать их самостоятельно.</p><p>Мы добавили новое свойство styles и style URL для принятия строк, потому что, ну, разработчики редко используют более одной таблицы стилей. Но мы сохраняем оба формата на всякий случай, если вам понадобится.</p>]]></content:encoded>
    </item>
    <item>
      <title>Angular vs Vue: что выбрать в 2024 году</title>
      <link>https://tproger.ru/articles/angular-vs-vue--chto-vybrat-v-2024-godu</link>
      <comments>https://tproger.ru/articles/angular-vs-vue--chto-vybrat-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/angular-vs-vue--chto-vybrat-v-2024-godu</guid>
      <description><![CDATA[<p>Сравнили фреймворки Angular и Vue. Рассмотрели преимущества и недостатки, сходства и различия, возможности карьерного роста.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/angular-vs-vue--chto-vybrat-v-2024-godu">Angular vs Vue: что выбрать в 2024 году</a>»</p>]]></description>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 25 Jan 2024 11:55:19 GMT</pubDate>
      <content:encoded><![CDATA[<p>Англоязычный IT-блогер Daniel Dan сравнил фреймворки Angular и Vue. Он рассмотрел такие темы, как преимущества и недостатки, сходства и различия, возможности карьерного роста, и выяснил, какой из фреймворков лучше использовать для вашего проекта.</p><p>Вот, о чём идёт речь в видео:</p><ol><li>Даниэль обсуждает выбор между фреймворками Angular и Vue для разработки пользовательских интерфейсов.</li><li>Angular, созданный Google в 2010 году, предпочтителен для корпоративных проектов, имеет встроенные инструменты и библиотеки, а также поддерживает динамическую и двустороннюю привязку данных.</li><li>Angular использует TypeScript, обеспечивает высокую производительность благодаря иерархической инъекции зависимостей и другим функциям, поддерживается Google и легко интегрируется с сторонними приложениями.</li><li>Vue, созданный на основе вдохновения от Angular, отличается простотой и элегантностью, предлагает гибкость и прогрессивное развитие, позволяя легко добавлять пользовательские модули и компоненты.</li><li>Vue обеспечивает гибкость интеграции, простоту использования и функциональное расширение с помощью мощных API.</li><li>Angular и Vue имеют схожие черты: компонентно-ориентированную архитектуру, реактивную привязку данных и декларативный стиль программирования, а также большие сообщества разработчиков.</li><li>Основные различия между Angular и Vue включают архитектуру (Angular – MVVM, Vue – только ViewModel), реактивность, обработку ошибок, встроенные функции и производительность.</li><li>Выбор между Angular и Vue зависит от конкретных потребностей проекта и целей разработки.</li><li>Vue лучше подходит для динамических приложений, проектов, ориентированных на UI/UX, портфолио и одностраничных приложений.</li><li>Angular лучше подходит для кроссплатформенной и гибридной веб-разработки, крупных проектов и предприятий, требующих серверной отрисовки.</li><li>Angular и Vue обеспечивают высокооплачиваемые рабочие места, с зарплатами до $125,000 и $156,000 в год соответственно, а также возможности для фриланса.</li></ol><p>Ниже представлен транскрибированный перевод видео на русский язык.</p><p>Вы наверняка слышали о Angular и Vue. Это два суперпопулярных фреймворка, которые разработчики используют для создания полноценных пользовательских интерфейсов.</p><p>Но вам, как разработчику, может прийтись принять непростое решение. Какую из этих двух технологий использовать в конкретном проекте? Меня зовут Даниэль, и сегодня мы поговорим о противостоянии Angular и Vue. Мы изучим их плюсы и минусы, сходства и различия. Мы постараемся понять, какой из этих фреймворков лучше подходит для различных типов проектов.</p><h2>Преимущества Angular</h2><p>Итак, приступим. Vue против Angular, но для чего они хороши? Ребята, прежде чем мы начнем сравнивать эти два фреймворка, давайте обсудим, для чего они были созданы. Как вы знаете, каждая технология создается с определенной целью.</p><p>И когда вы понимаете, какая эта цель, легче принимать правильное решение. Angular, Angular, созданный Google в 2010 году. Это лучший выбор для корпоративных проектов благодаря своим обширным функциям и высокой производительности. В отличие от других фреймворков, Angular не замедляет приложения. Он предлагает встроенные инструменты и библиотеки. Его код может быть использован на различных платформах, что делает разработку гибкой.</p><p>Плюс, у него есть динамическое связывание пользовательского интерфейса и двустороннее связывание данных, важные элементы его дизайна. И ребята, у Angular есть множество преимуществ, которые делают его таким популярным среди разработчиков. Основанный на TypeScript. Прежде всего, ребята, это TypeScript, язык программирования, созданный Microsoft, который является бесплатным и с открытым исходным кодом. Он добавляет статическую типизацию с возможностью использования типовых аннотаций к JavaScript.</p><p>TypeScript, надмножество JavaScript, улучшает качество кода с помощью надежной навигации, рефакторинга и функций автодополнения, что уменьшает ошибки в масштабных приложениях. Поддерживается Google. Еще одно преимущество заключается в том, что фреймворк поддерживается Google. Это включает в себя подробную документацию и возможности для будущего расширения фреймворка. Следующее – высокая производительность. Благодаря иерархической инъекции зависимостей, IV-рендерингу, AOT-компилятору, дифференциальной загрузке и поддержке Angular Universal, производительность фреймворка выдающаяся.</p><p>Обновленное руководство. Angular CLI предлагает своевременные рекомендации по зависимостям, загрузчикам и плагинам. Благодаря этому разработчики остаются в курсе последних рекомендаций. Бесшовные интеграции. Angular позволяет легко интегрировать сторонние приложения. Это дает разработчикам гибкость и множество инструментов для упрощенной разработки. Наконец, возможность настройки. Разработчики могут интегрировать элементы и модули из других фреймворков, адаптируя их под свои потребности. Дело в том, что элементы HTML Angular могут быть легко повторно использованы и управляемы путем обертывания их в качестве элементов DOM.</p><h2>Преимущества Vue</h2><p>Итак, как вы видите, ребята, есть много преимуществ у Angular. Но теперь давайте посмотрим на Vue. Vue, также называемый Vue.js, это все о чистом и элегантном дизайне. Представьте себе фреймворк, который объединяет мощные веб-инструменты с простотой. Вот что такое Vue.</p><p>Теперь вот интересный факт. Создатель Vue был вдохновлен Angular. Он взял это вдохновение и создал Vue, фреймворк, который позволяет легко создавать современные веб-проекты. Одной из выдающихся особенностей Vue является его прогрессивный характер. Он динамичен, что означает, что вы можете настраивать код вашего приложения, не нарушая основной функциональности. Плюс Vue предлагает невероятную гибкость. Вы можете легко добавлять пользовательские модули и визуальные компоненты, настраивая ваши веб-приложения до совершенства.</p><p>Другими словами, ребята, есть много преимуществ, которыми можно наслаждаться. Во-первых, Vue – это все о гибкости. Он позволяет вам плавно интегрировать его в ваш существующий код без нарушения вашего рабочего процесса.</p><p>Традиционный подход. Еще одна крутая часть заключается в том, что Vue придерживается традиционного подхода. Он не усложняет вещи ненужным шаблонным кодом.</p><p>Вместо этого он оптимизирует процесс, делая разработку приложений быстрее и более простой. И, наконец, функциональное расширение. Vue предлагает функциональное расширение, предоставляя набор мощных API.</p><p>Эти функциональные возможности позволяют вам создавать гибкую и обширную логику компонентов. Так что, ребята, судя по всему, Vue не уступает Angular.</p><h2>Сходства между Angular и Vue</h2><p>Ребята, прежде чем я продолжу, я стараюсь делать образовательный контент в увлекательной форме, делать его интересным вместо скучным.</p><p>И взамен я прошу просто лайкнуть это видео и подписаться на мой канал, если вам нравится контент, который я делаю. Вот и все. Люди, помните, что создатель Vue использовал Angular в качестве своего вдохновения. Это означает, что у этих двух фреймворков JavaScript много общего.</p><p>Итак, давайте поговорим о самых больших сходствах между ними. Архитектура на основе компонентов.</p><p>И Angular, и Vue работают как строительные блоки. Они разбивают пользовательские интерфейсы на более мелкие части, называемые компонентами. Эти компоненты похожи на логические кирпичи, которые можно создавать индивидуально. Реактивное связывание данных привязывает ваши данные непосредственно к тому, что видят пользователи. Поэтому, когда ваши данные меняются, ваш дисплей автоматически обновляется, без дополнительной работы. И Vue, и Angular делают это в реальном времени. Декларативное программирование. Vue и Angular могут выглядеть по-разному, но они оба имеют замечательную особенность – декларативный стиль программирования. Вместо перечисления пошаговых инструкций, вы просто описываете, что хотите достичь. Сообщество. У Angular и Vue есть большие сообщества разработчиков, где люди предлагают улучшения и поддерживают фреймворки. Они формируют функции, исправляют проблемы и часто помогают другим разработчикам.</p><h2>Различия между Angular и Vue</h2><p>Хорошо, друзья. Vue.js и Angular – это оба инструмента для создания фронтенда приложений с использованием JavaScript. Однако во многих аспектах они отличаются. Эти области, например, включают основную архитектуру, производительность, реактивность и другие.</p><p>Но давайте поговорим об этом более подробно.</p><p>Архитектура. Angular похож на полноценного архитектора, модель MVVM. Отлично подходит для создания детальных и сложных приложений. Кроме того, он поддерживает все виды серверных языков. Это делает Angular универсальным. Vue похож на декоратор фронтенда, только модель Vue.</p><p>Он отлично улучшает внешний вид, но не является универсальным инструментом для всего процесса создания. Проще говоря, Angular – это все в одном. Vue – только для фронтенда. Реактивность. Angular полностью основан на JavaScript. Он отлично подходит для приложений в реальном времени. Vue также использует HTML и CSS и идеально подходит для создания одностраничных приложений.</p><p>Он автоматически отображает любые обновления. Обработка ошибок. Angular обрабатывает ошибки во время компиляции. Vue заботится о них на лету во время выполнения. Функции. Angular поставляется с встроенными функциями, такими как маршрутизация, формы и внедрение зависимостей.</p><p>Он идеально подходит для крупных проектов. Vue более легковесен и отлично подходит для одностраничных проектов. Производительность. Когда речь идет о скорости, Vue намного быстрее.</p><p>Почему? Дело в том, что Vue остается легким с акцентом на слое Vue. Vue также получает ускорение от виртуального DOM, обеспечивая дополнительную скорость на различных платформах. Angular с его многочисленными встроенными функциями немного тяжелее и требует больше времени на выполнение задач.</p><p>Хорошо, ребята, и теперь мы подходим к главному вопросу.</p><h2>Какой фреймворк следует выбрать для вашего проекта? Vue или Angular?</h2><p>Итак, принимая во внимание все вышесказанное, что лучше, Vue или Angular?</p><p>Честно говоря, как часто бывает с такими технологиями, здесь нет однозначного ответа. Я могу сказать, что у обоих фреймворков есть свои преимущества. Angular надежен и прошел проверку временем, а Vue быстр и прост в использовании. Выбор между ними зависит от ваших конкретных потребностей и целей вашего проекта.</p><p>А когда речь идет о Vue, я думаю, что имеет смысл использовать его для. Динамических приложений, проектов, сосредоточенных на пользовательском интерфейсе, портфолио и сайтов с большим количеством изображений, а также одностраничных приложений. С другой стороны, Angular более подходит для приложений, требующих надежной функциональности, особенно для крупных команд и масштабируемых проектов. Поэтому лучше использовать его для кросс-платформенной и гибридной веб-разработки. Больших проектов и предприятий, требующих серверного рендеринга. Но, ребята, это также зависит от стратегии разработки проекта и возможностей вашей команды разработчиков. Поэтому все зависит от поиска подходящего решения для целей вашего проекта. Возможности карьеры.</p><p>Конечно, есть еще один важный вопрос.</p><h2>Поможет ли изучение этих технологий получить высокооплачиваемую работу?</h2><p>Если вы планируете стать разработчиком на Angular или Vue, вам не о чем беспокоиться. Согласно недавнему опросу Stack Overflow, Angular входит в топ-5 самых популярных веб-фреймворков.</p><p>И Vue не сильно отстает. Это означает, что спрос на разработчиков Angular и Vue остается высоким. По данным Glassdoor, разработчики на Angular в Соединенных Штатах могут зарабатывать до $125,000 в год. В то же время разработчики на Vue могут зарабатывать до $156,000 в год. Фрилансеры на Angular зарабатывают от $16 до $30 в час. И фрилансеры на Vue зарабатывают около $19-35 в час.</p><p>Итак, как вы можете видеть, здесь существенная разница в отношении офисных работ и не так много в плане фриланса. Ладно, мои уважаемые разработчики, это все, что у меня есть по сравнению Angular и Vue.</p><p>https://www.youtube.com/@Daniel-Dan./videos</p>]]></content:encoded>
    </item>
    <item>
      <title>Модуль, пакет, библиотека, фреймворк: разбираемся в разнице</title>
      <link>https://tproger.ru/articles/modul-paket-biblioteka-frejmvork-razbiraemsya-v-raznice</link>
      <comments>https://tproger.ru/articles/modul-paket-biblioteka-frejmvork-razbiraemsya-v-raznice?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Лена Капаца]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/modul-paket-biblioteka-frejmvork-razbiraemsya-v-raznice</guid>
      <description><![CDATA[<p>Разобрали ключевые отличия фреймворка от библиотеки и другими типами импортируемых объектов в Python с применением диаграмм</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/modul-paket-biblioteka-frejmvork-razbiraemsya-v-raznice">Модуль, пакет, библиотека, фреймворк: разбираемся в разнице</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 23 Oct 2023 07:51:18 GMT</pubDate>
      <content:encoded><![CDATA[<p>Реальные программы сложны и даже элементарный симулятор игральных костей требует большого количества кода. Чтобы упростить процесс, разработчики используют модульное программирование — разбивают задачи на более мелкие и более управляемые. Поэтому в ЯП так много модулей, пакетов, библиотек и фреймворков.</p><p>Запутаться в них новичку легко. Так что в этой статье я объясню, в чем разница между ними. Условно можно обозначить их взаимоотношения с помощью этой диаграммы:</p><figure><img src="https://media.tproger.ru/user-uploads/79101/2023-10-22/1b25f62d-6888-4f53-8a75-4cd5cc67bd77.jpeg" alt="" /></figure><h2>Модуль (Module)</h2><p>Модуль в Python — это логически обособленный сниппет в отдельном файле.py. Если вы хотите порядка в своем коде, рекомендую их использовать.</p><p>Достоинства модулей в том, что они:</p><ul><li>помогают сосредоточиться на одной небольшой части задаче;.</li><li>сводят на нет дублирование за счет переиспользования;</li><li>минимизируют вероятность конфликта имен.</li></ul><p>Давайте разберем их на примере. Создадим функцию приветствия:</p><p>Сохранив ее в welcome.py, мы создадим модуль. Если welcome_message() понадобился, его импортируем директивой:</p><p>Сообщение будет выглядеть так:</p><p>Обычно в модуле определяется множество разных элементов. Но мы можем импортировать только одну конкретную функцию:</p><p>Если у вас есть опыт работы с Python, то вы наверняка использовали модули re, datetime и проч.</p><h2>Пакет (Package)</h2><p>При разработке большого приложения легко столкнуться с множеством различных модулей, которыми сложно управлять. В таком случае полезно сгруппировать и упорядочить их с помощью пакетов.</p><p>Это каталоги модулей с иерархической структурой пространства имен. Точно так же, как мы раскладываем файлы на жестком диске по папкам и субдиректориям, можно организовать модули в пакеты и «подпакеты» (subpackages).</p><p>Пакет должен содержать файл с именем __init__.py, который и позволяет использовать каталог.</p><figure><img src="https://media.tproger.ru/user-uploads/79101/2023-10-22/56f0480e-454b-4758-9f55-a70934a715c9.png" alt="" /></figure><p>Пакет Writing (писательство) и его модули Books (книги) и Article (статьи)</p><p>В мире пакетов для Python есть немало «звезд», о которых вы наверняка слышали:</p><ul><li>numpy — для научных вычислений;</li><li>pandas — для обработки табличных данных;</li><li>pytest — для тестирования.</li></ul><p>Если классическое веб-приложение активно использует всевозможные компоненты, то в Data Science скачок на пакеты происходит на первых же уроках, и модули проходят вскользь.</p><p>В Python установленные пакеты можно посмотреть командой:</p><h2>Библиотека (Library)</h2><p>Это объект еще выше уровнем: он содержит связанные модули и/или пакеты. Часто «библиотеки» и «пакеты» выступают синонимами, потому что и те, и другие содержат модули и «подпакеты» (subpackages).</p><p>На мой взгляд, разница между ними весьма условная. Это становится очевидно, когда сравниваешь списки звезд из текущего и предыдущего разделов:</p><ul><li>Matplotlib — для визуализации данных;</li><li>PyTorch — для глубокого обучения;</li><li>BeautifulSoup4 — для парсинга.</li></ul><p>Установка библиотек Python также производится командой pip:</p><h2>Фреймворк (Framework)</h2><p>Также набор модулей и пакетов, которые и ускоряют процесс программирования. Но более сложный и с архитектурой приложения.</p><p>Если сравнивать разработку со строительством дома, фреймворки Python предоставляют все необходимые строительные блоки, такие как фундамент, стены, окна и крыша. И разработчики строят свое приложение на этой основе, добавляя функции, сравнимые с домашней системой сигнализации, мебелью, бытовой техникой и так далее.</p><p>Известные представители класса – это:</p><ul><li>Django — фреймворк Python для сайта;</li><li>Flask для легковесных демо-проектов;</li><li>Bottle для создания API.</li></ul><h2>Заключение</h2><p>Теперь вы знаете, в чем отличия модуля от библиотеки и от фреймворка. Более того, на старте новичку стоит понимать лишь отличие модуля от пакета и библиотек. А фреймворки придут в код позже, бесшовно и не спутают карты.</p><p>Какие у вас любимые модули, пакеты библиотеки, фреймворки? Поделитесь в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Очередной фреймворк на PHP  — конкурс пет-проектов</title>
      <link>https://tproger.ru/articles/ocherednoj-frejmvork-na-php-konkurs-pet-proektov</link>
      <comments>https://tproger.ru/articles/ocherednoj-frejmvork-na-php-konkurs-pet-proektov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Неопознанный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ocherednoj-frejmvork-na-php-konkurs-pet-proektov</guid>
      <description><![CDATA[<p>Создал PHP-фреймворк для создания веб-проектов DeltaFramework, который должен облегчить жизнь верстальщикам.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ocherednoj-frejmvork-na-php-konkurs-pet-proektov">Очередной фреймворк на PHP  — конкурс пет-проектов</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Pet-проекты]]></category>
      <category><![CDATA[Лучший пет-проект 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 12 Oct 2023 09:35:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>Всем привет. Сразу предупреждаю, что чукча не писатель, поэтому главное не потерять нить повествования.</p><p>Иногда, когда становилось скучно и рабочие проекты пилить не хотелось, я садился за разработку собственного велосипеда. Причем архитектура была выбрана не то чтобы правильная, а наиболее удобная для коротания времени за написанием кода. Где-то встречались костыли, где-то некие ноу-хау.</p><p>Мой велосипед представляет из себя некий PHP-фреймворк для создания веб-проектов.</p><p>На текущий момент он представляет следующий функционал:</p><ul><li>Авторизация;</li><li>Регистрация;</li><li>Роли пользователей;</li><li>Верификация E-Mail;</li><li>Рассылки почты;</li><li>Поддержка шаблонов почтовых отправлений;</li><li>Менеджер очереди заданий;</li><li>Шаблонизатор;</li><li>Поддержка маршрутизации;</li><li>REST API;</li><li>Кеширование;</li><li>Логирование;</li><li>Работа с файлами;</li><li>Миграции;</li><li>Captcha;</li><li>DDoS Guard (basic).</li></ul><figure><img src="https://media.tproger.ru/user-uploads/25296/2023-10-11/fa2ba81e-ed8b-4875-bda4-0a0ecb651129.png" alt="" /><figcaption>Одна из фронтовых страниц демосайта, шаблонизатор Twig</figcaption></figure><p>Пользовательская часть построена с использованием шаблонизатора Twig. Я посчитал, что это приемлемо и, вероятно, в дальнейшем облегчит жизнь верстальщикам.</p><p>Админка же, напротив, сделана без использования каких-либо шаблонизаторов (привет, Битрикс). Местами реализации ужасны, местами из глаз идет кровь, но оно работает. Сделано так, скорее, только на время альфа-версий.</p><p>Функционал пилится, некоторые идеи приходят в неудобное время, и чтобы они появились в качестве реализации, я иногда грешу простыми и топорными реализациями с надеждой на причесывание в дальнейшем. Техдолг копится, как говорится…</p><figure><img src="https://media.tproger.ru/user-uploads/25296/2023-10-11/bb9aef82-8ebb-4248-b3f9-0e47ad049bbf.png" alt="" /><figcaption>Страница авторизации в панели администратора</figcaption></figure><p>Из интересного также есть функционал обработки роутов (маршрутов) для фронтовой части сайта с поддержкой динамических составляющих.</p><p>Реализована поддержка многосайтовости с подключением локального файла конфигурации (когда мы линкуем папку с ядром к другому проекту и создаем конфиг для нового проекта). А для облегчения развертывания используются миграции через Phinx.</p><p>Для большей гибкости реализованы роли пользователей для контроля доступа к каким-либо частям проекта. Там же есть отдельные роли как для администратора с максимальными правами и базовой роли пользователя, так и для менеджера с урезанными правами (базовый доступ к админке). Накручивать можно по желанию что угодно. Кстати, имеется функционал логирования, что очень облегчает поиск виновного, когда кто-то или что-то косячит. ?</p><p>Также реализовал функционал диспетчера очереди с поддержкой приоритетов, воркеров и повторного выполнения в случае возникновения ошибок. Использоваться может, например, для рассылки писем, обработки изображений и в целом для всего, что требует времени больше, чем пользователь готов ждать при загрузке страницы (рендерим страницу, а какие-то тяжелые задачи отдаем очереди на обработку, и все счастливы).</p><p>В качестве мониторингов был выбран Сентри как основной и Телеграм как дублирующий. Функционал второго также реализован в данном проекте.</p><figure><img src="https://media.tproger.ru/user-uploads/25296/2023-10-11/2925401a-655e-4fd3-ba59-96abc5119442.png" alt="" /><figcaption>Пример уведомления о возвращении повисшего задания очереди в работу</figcaption></figure><p>Кодовая база на данный момент ведется на Гитлабе, но интереса ради продублировал репозиторий на Гитхаб с публичным доступом. Мало ли, кому-то данный велосипед зайдет. ?</p><p>Ссылка на репозиторий проекта:</p>]]></content:encoded>
    </item>
    <item>
      <title>Зачем инструмент dbt нужен аналитику</title>
      <link>https://tproger.ru/articles/zachem-instrument-dbt-nuzhen-analitiku</link>
      <comments>https://tproger.ru/articles/zachem-instrument-dbt-nuzhen-analitiku?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Елена Пушкова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/zachem-instrument-dbt-nuzhen-analitiku</guid>
      <description><![CDATA[<p>Представляем подробный гайд по dbt — Data Build Tool — одному из лучших фреймворков для трансформации данных.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/zachem-instrument-dbt-nuzhen-analitiku">Зачем инструмент dbt нужен аналитику</a>»</p>]]></description>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Анализ данных]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 15 Aug 2023 13:21:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>dbt — open-source инструмент, который решает проблему организации данных и открывает много возможностей для их трансформации и моделирования. В статье разберём функционал и характеристики фреймворка, а также опишем пошагово процесс его настройки и использования.</p><h2>Что такое dbt: функционал и характеристики</h2><p>dbt (Data Build Tool) — инструмент, который позволяет дата-инженерам и аналитикам автоматизировать процессы тестирования, внедрения, документирования в рамках трансформации данных. Проще говоря, dbt  — это всё о букве T в акрониме ELT (Extract — Transform — Load). Этот фреймворк не выгружает данные из источников, но предоставляет огромные возможности по работе с теми данными, которые уже загружены в Хранилище (в Internal или External Storage).</p><p>dbt основан на языках SQL и Jinja, с версии 1.4.* также поддерживает Python.</p><figure><img src="https://media.tproger.ru/uploads/2023/07/bd3151b0-894f-4ac1-8534-a23b0017145b.png" alt="" /></figure><p>Основное назначение dbt — взять код, скомпилировать его в SQL, выполнить команды в правильной последовательности в хранилище.</p><h3>Чем полезен фреймворк</h3><p>dbt — довольно универсальный инструмент, но в большей степени он используется в аналитических сервисах в любых отраслях: анализ и обработка данных, сборка любой отчетности и так далее.</p><p><b>Контроль качества. </b>Для бизнеса важно получать качественные данные, а для этого, в свою очередь, нужны инструменты контроля качества. dbt как инструмент позволяет реализовать любые вариации тестирования: на этапе обновления каких-либо данных мы всегда можем собрать быструю статистику по любым метрикам.</p><p><b>Хранение данных. </b>Даже из «коробки» этот фреймворк позволяет реализовать на уровне хранилища хранение данных с историей СКД-2 (хранения технической истории, изменение атрибутов). С ним можно выстраивать снэпшоты — детальные слои с историей данных. dbt помогает собрать любую историю данных, чтобы отвечать на вопросы аналитиков и бизнеса.</p><p><b>Связывание данных в единую цепочку. </b>Инструмент описывает ациклические зависимости (DAG) и связи, что позволяет легко анализировать цепочку преобразований данных. Когда мы используем и переиспользуем данные, выполнение этих задач связано: если что-то где-то меняется, то сказывается на других сущностях. С помощью dbt мы решаем задачу консистентности данных — устраиваем зависимость выполнения, чтобы одна сущность была рассчитана только после другой, без задержек и потери актуальности данных. Фреймворк помогает собрать в одном месте и связать всю логику — от исходных данных до итоговых результатов и их переиспользования.</p><p><b>Перенос в другие среды. </b>Фреймворк позволяет легко переносить и настраивать разные подходы к работе моделей в различных средах: тестовые модели, продуктовый уровень, промышленный слой.</p><p><b>Настройка дополнительных возможностей.</b> С dbt можно вписать документацию данных и работать с ними, можно настроить логирование стандартными способами и отслеживать аналитику исполнения запросов. Всё это реализуемо, поскольку у фреймворка на основе SQL и Jinja нет ограничений, кроме возможностей самих хранилищ и уровня знаний исполнителя.</p><h2>Что нужно знать, чтобы использовать dbt</h2><p>Для анализа самих моделей достаточно знать SQL и обзорную документацию по работе с dbt. И если дата-инженеры внедрили фреймворк со всеми функциями, то аналитику кроме знаний SQL и работы с браузером ничего не потребуется. Он легко сможет пользоваться сервисами dbt, анализировать цикличный граф зависимости и смотреть код преобразования.</p><p>До знакомства с фреймворком я никогда не работал с Jinja, языком шаблонов, который применяется в dbt для реализации настроек моделей, обработки дополнительной функциональности SQL-кода. Разобраться помогла обширная документация и хорошее комьюнити: есть, например, русскоязычный канал в Telegram.</p><h2>Структура проекта dbt</h2><p>Проект состоит из директорий и файлов двух типов:</p><p>●     модель (.sql) — единица трансформации, выраженная SELECT-запросом;</p><p>●     файл конфигурации (.yml) — параметры, настройки, тесты, документация.</p><p>На базовом уровне работа строится следующим образом:</p><p>●     пользователь готовит код моделей в любой удобной IDE;</p><p>●     с помощью CLI вызывается запуск моделей, dbt компилирует код моделей в SQL;</p><p>●     скомпилированный SQL-код исполняется в Хранилище в заданной последовательности (граф).</p><p>Модели — это гибрид SQL + Jinja, которые ограничены лишь объёмом хранилища и уровнем знаний пользователя.</p><p>В dbt применяется Jinja версии два. Сам язык имеет очень большую функциональность, ознакомится с ним подробнее можно <a href="https://ttl255.com/jinja2-tutorial-part-1-introduction-and-variable-substitution/">в этой статье.</a><i></i></p><h2>Как работать с dbt: установка, настройка, использование</h2><h3>Устанавливаем фреймворк</h3><p>dbt поддерживает 4 варианта установки:</p><p>●     <a href="https://docs.getdbt.com/docs/core/homebrew-install">Homebrew;</a><a href="https://docs.getdbt.com/docs/core/homebrew-install"> </a></p><p>●     <a href="https://docs.getdbt.com/docs/core/pip-install">pip;</a></p><p>●     <a href="https://docs.getdbt.com/docs/core/docker-install">Docker;</a><a href="https://docs.getdbt.com/docs/core/docker-install"> </a></p><p>●     <a href="https://docs.getdbt.com/docs/core/source-install">source.</a><a href="https://docs.getdbt.com/docs/core/source-install"> </a></p><p>Рассмотрим установку подробнее на примере pip.</p><h4>Установка</h4><ol><li>Открываем терминал.</li><li>Запускаем команды:</li><li>pip install dbt-core #Установка<br />      последней версии;</li><li>pip install dbt-core==1.4.0<br />      #Установка конкретной версии.</li><li>dbt —version #Проверка установленной<br />     версии.</li></ol><figure><img src="https://media.tproger.ru/uploads/2023/07/84286709-ebba-4f9c-8b0d-80c229c35d6d.png" alt="" /></figure><figure><img src="https://media.tproger.ru/uploads/2023/07/5bfac2b3-51fa-48af-8719-16698be9180b.png" alt="" /></figure><p>Для обновления можно использовать следующие команды:</p><p>● pip install —upgrade dbt-core #Установка последней версии;</p><p>● pip install —upgrade dbt-core==1.4.0 #Установка конкретной версии.</p><h3>Установка пакетов платформ</h3><p>Для работы с конкретными платформами необходимо установить пакет платформы, с которой вы планируете работать:</p><p>●     pip install dbt-clickhouse #Установка последней версии</p><h3>Проверка установленных пакетов</h3><p>Выполняем команду dbt —version</p><figure><img src="https://media.tproger.ru/uploads/2023/07/0110110a-09d0-4d25-bf6b-320266f9e930.png" alt="" /><figcaption>Результатом будет информация по версии установленной версии и доступном обновлении.</figcaption></figure><h3>Настройка проекта</h3><p>Для начала работы настроим окружение взаимодействия с dbt, установив VS Code. Обязательно проверяем наличие установленного Git и Python 3.</p><p>Для удобства работы с фреймворком стоит рассмотреть установки и настройки дополнительных расширений для VS Code:</p><p>●     vscode-dbt;</p><p>●     dbt Power User:</p><p>Настроим параметры VS Code для работы с dbt. Открываем settings.json по пути File-Preferences-Settings.</p><figure><img src="https://media.tproger.ru/uploads/2023/07/611f105a-4b02-47bf-b183-f832b1bfbb65.png" alt="" /><figcaption>Переходим в раздел Text Editor — Font и выбираем edit in settings.json.</figcaption></figure><p>Добавляем настройки ассоциации файлов:</p><p>Закрываем файл.</p><h3>Инициализация проекта</h3><p>1. Создаем каталог проекта.      К примеру, dbt_example.</p><p>2. Открываем терминал и переходим в каталог:</p><figure><img src="https://media.tproger.ru/uploads/2023/07/d4460c20-0cce-4d40-b36a-5956ac186959.png" alt="" /></figure><p>3. Инициализируем      новый проект командой dbt init:</p><figure><img src="https://media.tproger.ru/uploads/2023/07/f57b5fcc-53b1-4f2f-a553-600c89c182c0.png" alt="" /></figure><p>4. Указываем      название нашего проекта: если мы уже установили платформу для взаимодействия,      нам предложат выбрать из списка, после чего проект будет создан:</p><figure><img src="https://media.tproger.ru/uploads/2023/07/8609a98f-f389-4462-a7ba-605ff915df87.png" alt="" /></figure><p>5. Типовая структура проекта:</p><figure><img src="https://media.tproger.ru/uploads/2023/07/17f9fb37-bb6c-4020-8ac6-cdfee7b00e03.png" alt="" /></figure><p>6. Проверяем      состояние модели командой dbt debug:</p><figure><img src="https://media.tproger.ru/uploads/2023/07/40d49d8d-225c-4eb8-9957-db67578f281a.png" alt="" /></figure><p>Готово — можем приступать к созданию модели.</p><h2>О чем важно помнить при работе с dbt</h2><p>● Основное — так как проект живой, нужно всегда следить за функциональностью, за обновлениями версий. Не всегда стоит использовать последнюю версию, но тестировать все изменения модели — важно.</p><p>● Помнить о том, что любая стандартизация и шаблонизация, с одной стороны, облегчает работу, а с другой — усложняет анализ. С помощью шаблонов мы можем любой SQL-код, который состоял из 3000 строк, сократить до условных 100, но нужно понять, как потом это всё прочитать.</p><p>● Поскольку инструмент гибкий и позволяет самостоятельно расширять функциональность, любые разработки придётся тестировать на работоспособность для каждой базы данных отдельно. В основном мы используем Postgres, Redshift, Spark, но также есть Greenplum, Clickhouse, MySQL, и синтаксис у всех отличается. Например, текущая версия адаптера для Clickhouse не поддерживает создание материализованных представлений.</p><p>● Расширение функциональности у dbt фактически безгранично, потому что ядро фреймворка сделано на Python. Если в команде есть разработчики Python, они смогут дописать любую функциональность.</p><h2>Полезные ссылки и материалы</h2><ul><li><a href="https://docs.getdbt.com/docs/introduction/">DBT documentation — Introduction</a> — официальная документация.</li><li><a href="https://blog.getdbt.com/what--exactly--is-dbt-/">What, exactly, is dbt?</a> — обзорная статья одного из авторов dbt.</li><li><a href="https://blog.fishtownanalytics.com/building-a-mature-analytics-workflow/">Building a Mature Analytics Workflow</a> — взгляд на будущее работы с данными и аналитику.</li><li><a href="https://docs.getdbt.com/tutorial/setting-up/">Getting started with DBT tutorial</a> — практика, пошаговые инструкции для самостоятельной работы.</li><li><a href="https://github.com/fishtown-analytics/jaffle_shop">Jaffle shop — Github DBT Tutorial</a> — Github, код учебного проекта.</li><li><a href="https://hub.getdbt.com/">Hub.getdbt.com</a> — открытая база готовых пакетов для dbt.</li><li><a href="https://t.me/dbt_users">Telegram-канал по dbt</a>  — здесь всегда можно почитать подробнее о фреймворке, задать вопрос, обсудить какие-то новости и проблемы.</li></ul><p>В любом случае, dbt — лишь инструмент в руках дата-инженеров, которые могут построить структуру хранения моделей на свое усмотрение. При правильном использовании этот инструмент может сильно оптимизировать работу с данными, а значит — повысить эффективность всего бизнеса.</p>]]></content:encoded>
    </item>
    <item>
      <title>Bose — фреймворк для создания веб-ботов, который проще Selenium</title>
      <link>https://tproger.ru/articles/bose-framework-wvejcarskij-nozh-dlya-razrabotki-botov</link>
      <comments>https://tproger.ru/articles/bose-framework-wvejcarskij-nozh-dlya-razrabotki-botov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bose-framework-wvejcarskij-nozh-dlya-razrabotki-botov</guid>
      <description><![CDATA[<p>Bose Framework — это улучшенный Selemium, который позволяет быстро и просто настраивать ботов и заниматься быстрой отладкой.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bose-framework-wvejcarskij-nozh-dlya-razrabotki-botov">Bose — фреймворк для создания веб-ботов, который проще Selenium</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <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>Wed, 31 May 2023 09:06:12 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разработка ботов — это сложно.</p><p>Детекторы ботов вроде Cloudflare готовы защищать сайты от наших ботов. Настройка Selenium с помощью ChromeOptions слишком громоздкая, а на Windows становится совсем кошмарной. Отладка ботов через журналы — тоже слишком сложно.</p><p>Как решить эти боли, не жертвуя скоростью и удобством разработки? Попробуйте Bose.</p><p>Bose, как уверяют разработчики фреймворка, — это первая среда разработки ботов, которая максимально упрощает разработку ботов. Фреймворк основан на на Selenium и предлагает ряд функций, упрощающих разработку.</p><h2>Настраиваем Bose</h2><p>Первым делом, скопируем изначальный шаблон.</p><p>Затем перейдите в скачанный каталог, установите зависимости и запустите проект:</p><p>Первый запуск займет некоторое время. Всё потому, что он загружает исполняемый файл драйвера Chrome. Следующие запуски будут гораздо быстрее.</p><h2>Основные особенности Bose Framework</h2><p>Добавляет мощные методы, чтобы сделать работу с Selenium намного проще.</p><p>Применяет лучшие практики, чтобы избежать обнаружения ботов Cloudflare и PerimeterX.</p><p>Сохраняет HTML, снимок экрана и сведения о выполнении для каждой задачи, что упрощает отладку.</p><p>Вспомогательные компоненты для записи очищенных данных в виде файлов JSON, CSV и Excel.</p><p>Автоматически загружает и инициализирует правильный драйвер Chrome.</p><p>Быстро и удобно для разработчиков.</p><h2>Работаем с Bose</h2><p>Допустим, вы хотите начать парсинг веб-сайта. Если бы вы использовали Selenium, вам пришлось бы обрабатывать задачи по открытию и закрытию драйвера следующим образом:</p><p>Однако Bose Framework использует декларативный и структурированный подход. Вам нужно только написать код ниже, а драйвер Bose сам создаст драйвер, передаст его методу run и закроет работу.</p><h2>Конфигурация Bose</h2><p>В Selenium, если вы захотите настроить параметры вроде профиля, пользовательского агента или размера окна, нужно будет написать много кода:</p><p>Bose Framework упрощает конфигурацию, инкапсулируя её в свойстве BrowserConfig:</p><h2>Обработка исключений</h2><p>Исключения — это боль при работе с Selenium.</p><p>В Selenium, если возникает исключение, драйвер автоматически закрывается, оставляя вам только журналы для отладки.</p><p>В Bose, когда в задаче парсинга возникает исключение, браузер остается открытым. Вы можете отслеживать состояние браузера в момент возникновения исключения, что очень помогает при отладке.</p><figure><img src="https://media.tproger.ru/uploads/2023/05/e771a3e1-4faa-41c9-9242-1e29aa37be30.png" alt="" /></figure><h2>Отладка в Bose Framework</h2><p>При веб-скрапинге часто возникают ошибки вроде неправильных селекторов или страниц, которые не загружаются. При отладке в Selenium вам, возможно, придется отсматривать журналы, чтобы найти, какая возникла проблема.</p><p>Bose упрощает отладку, сохраняя информацию о каждом запуске.</p><p>После каждого запуска в задачах создается каталог, содержащий три файла, перечисленных ниже:</p><p>Файл содержит информацию о выполнении задачи: продолжительность выполнения задачи, IP-адрес задачи, пользовательский агент, размер окна и профиль, который использовался для выполнения задачи.</p><p>Это снимок экрана, сделанный до закрытия драйвера.</p><p>Это исходный HTML-код, полученный до закрытия драйвера. Код страницы полезно знать, если селекторам не удалось выбрать элементы.</p><p>В случае, если ваша задача рухнула из-за исключения, Bose сохраняет error.log с ошибкой, из-за которой задача рухнула.</p><h2>Вывод данных</h2><p>После выполнения парсинга веб-страниц нужно сохранить данные в формате JSON или CSV. Как правило, этот процесс подразумевает написание огромного объёма императивного кода:</p><p>Bose упрощает процесс, инкапсулируя данные в модуль вывода для чтения и записи данных. Просто метод write для файла, который вы хотите сохранить.</p><p>Все данные будут сохранены в папке output/:</p><h2>Локальное хранилище</h2><p>В современных браузерах есть локальный модуль хранения, и Bose перенял эту концепцию.</p><p>Вы можете импортировать объект LocalStorage из Bose, чтобы сохранять данные при запуске браузера, что чрезвычайно полезно при очистке больших объемов данных.</p><p>Данные хранятся в файле local_storage.json в корневом каталоге проекта. Вот как можно его использовать:</p><h2>Другие возможности</h2><p>Драйвер, полученный при запуске задачи — это расширенная версия Selenium, в которую добавлены мощные методы, упрощающие работу.</p><p>Вот некоторые из популярных методов, добавленных в драйвер:</p><figure><img src="https://media.tproger.ru/uploads/2023/05/8a32df2f-06fa-4e94-a2a9-33640be6fccd.png" alt="" /></figure><h2>Заключение</h2><p>Bose — отличный фреймворк, упрощающий скучные части Selenium и парсинга веб-страниц.</p><p>Желаем вам удачи и счастливой разработки ботов с помощью Bose Framework!</p>]]></content:encoded>
    </item>
    <item>
      <title>Обзор Vue 3.3. Что изменилось и при чём тут TypeScript</title>
      <link>https://tproger.ru/articles/vywel-reliz-vue-3-3</link>
      <comments>https://tproger.ru/articles/vywel-reliz-vue-3-3?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/vywel-reliz-vue-3-3</guid>
      <description><![CDATA[<p>Команда Vue сообщила о выпуске версии 3.3 "Rurouni Kenshin". Многие обновления направлены на поддержку TypeScript.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/vywel-reliz-vue-3-3">Обзор Vue 3.3. Что изменилось и при чём тут TypeScript</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 15 May 2023 09:33:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>Команда Vue <a href="https://blog.vuejs.org/posts/vue-3-3">сообщила</a> о выпуске версии 3.3 — “Rurouni Kenshin”.</p><p>В новой версии разработчики постарались улучшить опыт разработки. К примеру, было улучшено взаимодействие с SFC &lt;script setup&gt; на TypeScript.</p><p>Также были решены многие давние проблемы с использованием Vue и TypeScript.</p><h2>Основные изменения</h2><h3>Обновления зависимостей</h3><p>Чтобы обновиться до Vue 3.3, нужно также обновить зависимости:</p><ol><li>volar / vue-tsc@^1.6.4;</li><li>vite@^4.3.5;</li><li>@vitejs/plugin-vue@^4.2.0;</li><li>vue-loader@^17.1.0 (если используется webpack или vue-cli).</li></ol><h3>Поддержка импортированных и комплексных типов в макросах</h3><p>До версии 3.3 типы в defineProps и defineEmits могли быть только локальными типами и поддерживали только литералы типов.</p><p>Так было потому, что Vue нужно было анализировать свойства props для генерации опций во время выполнения кода.</p><p>Теперь, в версии 3.3, компилятор разрешает использовать импортированные и комплексные, сложные типы:</p><p>Обратите внимание, что поддержка сложных типов основана на AST, поэтому не все типы могут поддерживаться на 100%. К примеру, условные типы вообще не поддерживаются.</p><p>Вы можете использовать условные типы для одного параметра, но не для объекта параметров.</p><h3>Универсальные компоненты</h3><p>Компоненты &lt;script setup&gt; теперь принимают универсальные параметры через атрибут generic:</p><p>Значение generic работает как список параметров между &lt;...&gt; в TypeScript.</p><p>Теперь можно использовать несколько параметров, extends, типы по умолчанию и импортированные типы:</p><p>Раньше эту функцию надо было включить вручную. Теперь, в последней версии volar/vue-tsc, она включена по умолчанию.</p><h3>Эргономичный defineEmits</h3><p>Ранее параметр для defineEmits поддерживал только синтаксис сигнатуры вызова:</p><p>Тип соответствует возвращаемому типу для emit, но он короткий и неудобный для написания. В версии 3.3 ввели более эргономичный способ объявления emit:</p><p>В литерале типа ключ — это имя события, а значение — тип массива, определяющий дополнительные аргументы.</p><p>Старый синтаксис сигнатуры всё ещё поддерживается.</p><h3>Типизированные слоты с defineSlots</h3><p>Новый макрос defineSlots можно использовать для объявления ожидаемых слотов и их свойств:</p><p>defineSlots() принимает только параметр типа, но не принимает аргументы рантайма.</p><p>Параметр типа должен быть литералом типа, где ключ свойства — это имя слота, а значение — функция слота.</p><p>Первый аргумент функции — props, тип которых будет использоваться для пропсов слота в шаблоне.</p><p>Значение defineSlots — это тот же объект слотов, который возвращается из useSlots.</p><h3>Текущие ограничения</h3><ol><li>Проверка слотов еще не реализована в volar/vue-tsc.</li><li>Тип возврата функции слота может быть любым, но в будущем он может использоваться для проверки содержимого слота.</li></ol><p>Существует также опция слотов для использования defineComponent. Оба API используются исключительно в качестве подсказок типа для IDE и vue-tsc.</p><h2>Экспериментальные функции</h2><h3>Деструктуризация реактивных пропсов</h3><p>Деструктура реактивных пропсов ранее была частью преобразования реактивности, которое теперь удалено. Сейчас она выделена в отдельную функцию.</p><p>Эта функция позволяет деструктурированным пропсам сохранять реактивность и предлагает более удобный способ объявления значений:</p><p>Эта функция является экспериментальной и требует явного согласия.</p><h3>defineModel</h3><p>Ранее, чтобы компонент поддерживал двустороннюю привязку к v-модели, ему необходимо было объявить свойство и создать событие update:propName, чтобы свойство обновлялось:</p><p>Версия 3.3 упрощает этот процесс с помощью макроса defineModel. Макрос автоматически объявляет свойство и возвращает ссылку:</p><p>Эта функция является экспериментальной и требует явного согласия.</p><h2>Другие примечательные особенности</h2><h3>defineOptions</h3><p>Новый макрос defineOptions позволяет объявлять параметры компонента прямо в &lt;script setup&gt;. При этом не нужен отдельный блок &lt;script&gt;:</p><h3>Лучшая поддержка Getter с toRef и toValue</h3><p>toRef улучшен для поддержки нормализации значений, геттеров и refs:</p><p>Вызов toRef может быть более эффективным, если геттеру нужно просто выполнить доступ к свойствам. Для этого не понадобится долгих и сложных вычислений.</p><p>Новый служебный метод toValue делает всё наоборот, нормализуя всё в значения:</p><p>toValue можно использовать в составных элементах вместо unref, чтобы компоненты принимали геттеры в качестве реактивных источников данных:</p><p>Разница между toRef и toValue такая же, как между ref и unref. Разница только в обработке функций-получателей.</p><h3>Импорт исходного кода JSX</h3><p>Сейчас типы Vue автоматически регистрируют глобальную типизацию JSX. Это может привести к конфликту при использовании других библиотек, которым нужно определять типы JSX. В частности, речь идёт о React.</p><p>Начиная с версии 3.3, Vue поддерживает указание типизаций JSX с помощью параметра TypeScript jsxImportSource.</p><h2>Улучшение инфраструктуры обслуживания</h2><p>Вот, что улучшили в выпуске 3.3:</p><ol><li>Сборки стали в 10 раз быстрее благодаря отделению проверки типов от сводной сборки и переходу от rollup-plugin-typescript2 к rollup-plugin-esbuild.</li><li>Ускорились тесты за счет перехода с Jest на Vitest.</li><li>Ускорилось создание типов за счет перехода от @microsoft/api-extractor к rollup-plugin-dts.</li><li>Комплексные регрессионные тесты с помощью ecosystem-ci позволяют выявлять регрессии в основных зависимостях перед выпуском.</li></ol><p>В этом посте рассмотрели основные изменения в версии 3.3. Ознакомиться с <a href="https://github.com/vuejs/core/blob/main/CHANGELOG.md#330-2023-05-08">полным списком обновлений можно на GitHub.</a></p>]]></content:encoded>
    </item>
  </channel>
</rss>