Мы узнали у экспертов по современным языкам программирования, что будет с их любимыми языками в 2023 году. Удалось собрать интересные инсайды и прогнозы про Python, Go, Haskell, Rust, Java, Swift, Kotlin и веб-разработку. Заодно обсудили, как программистам подготовиться к этим изменениям.
Содержание
Python: новая версия языка 3.12 и PEP 649
Никита — тoп-67 по коммитам в CPython, топ-6 по коммитам в mypy и typeshed. Лично участвует в процессе разработки Python 3.12. GitHub Никиты
В следующем году в ноябре выйдет новая версия Python 3.12, а до этого будут релизы нескольких альфа-версий, бета-версий и релиз-кандидатов. Альфа-версии уже доступны.
На новые версии Python сейчас переходят достаточно быстро, потому что в них минимальное количество ломающих изменений, а улучшений много. Нет смысла сидеть на старой версии, за исключением некоторых нюансов тулинга. Но если вы активный пользователь статических анализаторов, то они подтягиваются приблизительно спустя год после релиза синтаксических и семантических обновлений. Соответственно, сразу тащить новую версию Python в продакшен можно, если это простой сервис. Если вы делаете что-то сложное, энтерпрайзное, то ждать придется минимум год от релиза.
Проблема Python в том, что никто от него ничего не ждет — в этом языке уже все есть. Некоторые ждут какие-то фичи, но часто сами не понимают, зачем. Например, в Python 3.12, скорее всего, будет полноценный релиз субинтерпретаторов. Но люди пока не знают, что с ними делать, потому что это новая концепция. В других языках программирования я аналогов не помню. Понимания, как это использовать, и переезда на существующий тулинг люди будут ждать еще долго.
Планируется, что в 2023 году выйдет новый PEP 649, который будет по-другому работать с аннотациями. То есть from __future__ import annotations, скорее всего, будет убран как не очень хорошее решение. Вместо этого будут аннотации на дескрипторах.
Обязательно будут улучшать адаптивный интерпретатор. Некоторые называют его JIT, но это не совсем он, потому что работает на уровне кодов операций и не уходит глубже. Он просто уточняет одни и те же коды операций в некоторых случаях. Пример: при вызове функции по умолчанию существует код операции CALL, который может различными способами вызывать разные функции, например для вызова isintance есть CALL_NO_KW_ISINSTANCE. Если вы постоянно вызываете одну и ту же функцию и отрабатываете один и тот же код операции, то в какой-то момент будете использовать этот более конкретный операционный код. Это позволит сэкономить время на операциях с помощью вызова более специализированного кода. Ждут ли этого люди? Наверное, нет, поэтому никто этого не заметит.
Я очень жду удаления старых модулей. Мы удалили модули distutils, я лично удалил asynchat и asyncore, которые ненавидел всей душой. Будет удалена еще парочка модулей, про которые совсем никто не знает.
Будет изменен API importlib библиотеки, многое будет переработано, включая работу импортов. Очень много разных внутренних API-макросов уже переделали на inline-функции, это позволило упростить много кода. Теперь очередь за новыми компиляторами, которые их достойно оптимизируют и существенно ускорят процессы.
Стоит упомянуть инициативу faster-cpython. Это инициатива, которая занимается увеличением скорости работы Python в разных областях.
Этот релиз не будет настолько же кардинальным как 3.11. Наверняка добавят какие-то новые фичи, оптимизации и багфиксы. В результате 3.12 станет стабильным релизом, в котором подготовятся к большому количеству удалений в версии 3.13.
Все по-прежнему будут говорить, что нужны какие-то микрофреймворки, но использовать будут Django, потому что это самый популярный и применимый фреймворк. В остальных не хватает примерно всего.
В Django будут продолжать пихать разные асинхронные фичи, что там совершенно не нужно, зато людям нравится. О, асинхронная функция, она работает медленнее, и непонятнее, чем синхронная; давайте будем ее использовать.
Fast API окончательно загнется — это сейчас самый модный фреймворк, но у него не получилось создать сообщество контрибьютеров. Приходят миллионы людей и говорят: «У меня не работает», — а никто это не правит. Фреймворк в таком виде — это классная поделка, в которой можно запустить hello world и еще несколько приложений, но никто не возьмет это в серьезный продакшен.
Формируется понимание, что такое C API и C ABI, и как разным библиотекам их использовать. Речь о NumPy и подобных штуках. Уже есть много всего, но существует проблема, что какая-то часть C API или C ABI сломалась. Люди использовали то, что существовало годами, но не было задокументировано. Когда коду больше 25 лет, его использовали, а потом выяснилось, что никто не планировал, что это будут именно так. Поэтому сейчас идет стандартизация процесса, чтобы упростить жизнь тем, кто пишет свои C Extension. Для этого привлекаются люди из разных систем, которые занимаются большими данными и библиотеками для работы с ними, разными системными пакетами.
Основное направление развития Python сейчас — сохранять стабильность, увеличивать скорость работы и избавляться от легаси. Его очень много, ведь языку больше 30 лет.
Go: параметризованные типы и поддержка profile guided optimization
Эмиль в Twitter
Знаковым событием для Go в 2022 году было добавление параметризованных типов. Так разработчики языка попытались удовлетворить давно уже ставшую мемом потребность сообщества в дженериках. Однако с момента выхода версии языка 1.18 прошло более восьми месяцев, а повсеместного использования дженериков в библиотеках и пользовательском коде так и нет. Причина — невозможность использовать параметризованные типы в функциях с ресивером, то есть в методах структур. Такое решение не сильно устроило сообщество языка и сейчас активно обсуждается поддержка обобщенного программирования методами. Эта фича — наиболее ожидаемая в 2023 году.
Создатели языка, однако, не говорят о планах добавить эту фичу, потому что ее реализация технически довольно сложна и может привести к значительному росту либо времени компиляции, либо времени исполнения. В комментариях к релизу 1.18 написали, что дальнейшая работа над дженериками будет вестись в последующих версиях.
Из наиболее интересных планов на релиз Go 1.20 можно отметить планы на поддержку profile guided optimization. Речь про возможности компилятора, который может оптимизировать наиболее нагруженные участки кода с помощью профиля, собранного с уже работающей в проде системы. Другое важное изменение — улучшение утилиты, которая используется для анализа покрытия кода тестами. С этим улучшением появится возможность видеть покрытие кода в модулях, отличных от модуля, в котором находится тест.
Все эти нововведения позволят пользователям эффективнее использовать Go в продакшен-системах и увеличат его надежность, ведь основная ниша для языка — написание надежных и быстрых сетевых сервисов. Не стоит ожидать, что в предстоящем году что-то кардинально изменится. Ежедневно в языке появляются новые библиотеки и фреймворки, которые, например, позволяют добавлять GUI, писать игры и даже мобильные приложения. Однако вряд ли Go внезапно превратится в лучший язык для настольных приложений или пошатнет C++ в сфере разработки игр.
Резюмируя вышесказанное: у Go есть своя ниша (например, на этом языке написан Kubernetes), поэтому популярность языка продолжит расти. Этому способствует как непрерывное улучшение языка и его экосистемы, так и его простота. В 2023 году стоит ждать планомерного роста количества проектов на Go и количества вакансий на нем.
Kotlin: Kotlin Multiplatform и Compose под iOS
Twitter: @anioutkajarkova
Осенью вышла бета-версия Kotlin Multiplatform с новой моделью памяти. Это означает, как и написано на сайте разработчиков Kotlin — JetBrains, что эта технология уже полностью готова к продакшену, и до выхода финальной версии осталось совсем недолго. А еще — что исчезнут почти все проблемы разработчиков с Kotlin Native при реализации решений на iOS. Все сложные воркэраунды по работе с памятью, решения проблем с многопоточностью в iOS, которым были посвящены доклады последних лет, уже не актуальны. Сейчас все реализуется само собой, из коробки.
В качестве тренда стоит упомянуть Compose. Еще в прошлом году на всех мероприятиях, посвященных Kotlin и Kotlin Multiplatform, команду JetBrains доставали вопросами, когда же появится Compose под iOS. Особенно, когда прошлой осенью появился Jetpack Compose под Android в стабильной версии, после чего начался новый виток развития этой технологии.
Тогда в компании JB отнекивались, что Compose под iOS не входит в их планы. Они сообщали, что планируют сосредоточиться на других технологиях. Однако наблюдательные энтузиасты заметили, что Compose под iOS уже есть в исходниках. А такие контрибьютеры в технологию KMM, как российская компания IceRock, его уже даже попробовали. Один из главных контрибьютеров в Kotlin Multiplatform — Touchlab, которые создают довольно много вспомогательных решений, тех же воркэраундов, уже не просто опробовали Compose под iOS, но и показали примерное приложение на droidcon London 2022. Докладчик и эксперт Алексей Гладков публиковал у себя в Telegram-канале скриншот, на котором видно, под какие таргеты будет идти Compose.
Так что вполне возможно, что мы хотя бы в альфа-версии сможем попробовать мультиплатформенный Compose не только для десктопа, но и для Kotlin Multiplatform. Может появиться возможность привязываться с минимальными различиями в реализации к таргетам, как это сейчас сделали в IceRock и Touchlab.
В целом это довольно интересное решение, но возникает много вопросов, насколько оно будет конкурентоспособным по сравнению с тем же SwiftUI. Хотя, учитывая некоторые серьезные сложности в реализации, те же проблемы с навигацией под SwiftUI, это вполне резонный вопрос: сможет ли Compose для iOS потеснить SwiftUI при реализации UI в мультиплатформенной разработке, и станет ли этот вариант удобнее.
Все мы ждем финализации Kotlin Multiplatform и улучшения работы с garbage-коллекторами. Уже сейчас исправлено большинство проблем с памятью и ее очисткой в разных потоках. Важным показателем интересности Kotlin Multiplatform является то, что Google представили портированные под нее версии своих библиотек Jetpack. Это доказывает, что на данную технологию идет большая ставка, и что она будет перспективна в дальнейшем.
Резюмируем, что мы ждем в рамках развития KMM: Compose для iOS и конкурентоспособность с SwiftUI, доработки и улучшения работы с Kotlin под разные платформы.
Twitter: @noraltavir
Из того, что ждут и что вполне может появиться, но никаких гарантий нет:
- Kotlin/Wasm — компилятор для Wasm и по сути веб-фронтенд без JS. Серьезный шаг, потому что это первый высокоуровневый mainstream-язык для Wasm, который будет работать с GC. Не говоря о том, что это система мультиплатформенных библиотек, которые уже существуют и могут быть там использованы.
- Стабильное API компиляторных плагинов. Возможность радикально увеличить гибкость языка при помощи манипуляций с исходным кодом.
- Стабилизация контекстных ресиверов и обобщение их на все платформы.
- Юнион-типы.
Также совершенно нельзя исключать появление Compose Multiplatform на IoS стараниями комьюнити. Это сделает Kotlin полным конкурентом Dart/Flutter.
В целом у Kotlin сейчас фаза планомерного роста и накопления библиотек. По сути там все уже есть, люди допиливают фичи и шлифуют. Быстро развиваются Compose Desktop и Compose Multiplatform.
Читайте также:
50 лучших фильмов и сериалов о технологиях
Rust: новые возможности для дженериков, работа с мобильными ОС
Twitter: @gaxeliy.
Мои ожидания распределены по нескольким направлениям:
-
Компилятор станет умнее. Правильная программа будет реже им браковаться, из сообщения об ошибке будет чаще понятно, в чем именно дело. Скорее всего, будет применяться больше клевых оптимизаций.
-
Возможности языка прокачаются. Я очень жду, когда константные дженерики научатся работать с алгебраическими типами данных. Появится возможность использовать дженерики в более сложных контекстах. Улучшится поддержка асинхронности всюду (типа асинхронных трейтов). Еще очень жду генераторов.
-
Экосистема. Я рассчитываю на улучшенные возможности использовать Rust на мобильных операционных системах. Сейчас уже можно делать бинарники, которые работают под Android и iOS, но статус библиотек для создания интерфейса мобильных приложений оставляет желать лучшего.
Жду нативной работы с DOM в WASM в Yew и других фронтенд-фреймворках. Эх, заживем!
Haskell: новый релиз компилятора GHC 9.6
Twitter: @int_index
Ждем новый релиз компилятора — GHC 9.6. Это будет первый релиз, где сообщениям об ошибках назначаются уникальные коды, по которым их можно искать. Эти коды планируется собрать в единую базу данных, там будет подробно описано, где и при каких обстоятельствах эти ошибки возникают.
Второе интересное изменение — это поддержка delimited continuations (GHC Proposal #313). На их основе можно делать более производительные библиотеки для управления эффектами. Также в новой версии компилятора реализовано расширение TypeData (GHC Proposal #106) и улучшены OverloadedLabels (GHC Proposal #170).
Наблюдается видимый прогресс по добавлению поддержки для запуска Haskell прямо в браузере — через компиляцию в WebAssembly и JavaScript. Вообще, такая возможность была уже давно благодаря ghcjs, но это был отдельный проект. Теперь это будет интегрировано в сам GHC и более активно улучшаться.
Читайте также:
Haskell — язык, позволяющий глубже понять программирование. Как он устроен и почему его выбирают разработчики?
Касательно направления развития, продолжаем добавлять зависимые типы в язык. Это направление развития было утверждено с принятием GHC Proposal #378 "Design for Dependent Types". Но реализовываться оно будет, естественно, по частям. Работы там — непаханое поле, что-то будет реализовано в следующем году. Я сам активно занимаюсь добавлением новых механизмов явного и неявного ввода типовых переменных (см. также GHC Proposal #281, GHC Proposal #425).
Веб-разработка: нейросети в браузере и больше нативности
Автор Telegram-канала mefody.dev, в Twitter — @dark_mefody
Год назад я бы мало мог что сказать: веб развивался медленно, новые возможности появлялись редко, до вечнозеленых браузеров доезжали неспешно. Сейчас же — как будто кто-то открыл кофейню с эспрессо прямо посреди W3C.
Я с большим интересом наблюдаю за проектом Interop, в рамках которого самые популярные браузеры делают так, чтобы спецификации в них работали одинаково и хорошо. 2021-2022 годы показали, что это очень успешная инициатива. Посмотрим, какие цели выберут на 2023 год. Посмотреть предложения можно здесь.
В CSS в 2023 году, скорее всего, будет доработка и дотаскивание до браузеров спецификаций Container Queries, CSS Layouts, CSS Nesting. Чего-то революционного не жду, потому что эти спецификации сами по себе очень сильно меняют привычные нам подходы к разработке, и в них еще много чего нужно доделать. Этим браузеры, скорее всего, и будут заниматься. Интересно, что Safari, как бы на него ни ругались, в этом соревновании лидирует по тестам веб-платформы.
Верстальщикам все чаще будут приходить запросы на верстку для складываемых устройств. Если сейчас мы вынуждены поддерживать бровки и монобровки от устройств Apple, то Microsoft целится в складываемые устройства, а там тоже есть своя специфика верстки.
В EcmaScript вряд ли произойдет что-то неординарное. У TC39, который принимает новые спецификации, все расписано на годы вперед. Жду Temporal, который однозначно изменит наши подходы к работе со временем и таймзонами. Но у него уже сейчас есть полифил, который можно брать и подключать.
Кажется, внезапно нас может удивить HTML и JS для новых DOM-элементов или хорошо забытых старых. Есть такая инициатива Open UI, внутри которой прорабатываются элементы на странице. У них уже есть довольно интересное решение, как стилизовать
<!DOCTYPE html>
<html class="h-100" data-bs-theme="light" data-mantine-color-scheme="light" lang="ru" prefix="og: https://ogp.me/ns#">
<head>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<link crossorigin="true" href="https://cdn.hexlet.io" rel="preconnect">
<link href="https://mc.yandex.ru" rel="preconnect">
<meta content="aa2vrdtq64dub8knuf83lwywit311w" name="facebook-domain-verification">
<link href="/favicon.ico" rel="icon" sizes="any">
<link href="/favicon.svg" rel="icon" type="image/svg+xml">
<link href="/apple-touch-icon.png" rel="apple-touch-icon">
<link href="/manifest.webmanifest" rel="manifest">
<script>
//<![CDATA[
window.gon={};gon.ym_counter="25559621";gon.is_bot=true;gon.applications={};gon.current_user={"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26 19:54:34 UTC","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false};gon.token="mg6M865CzoERCLQdmYVeK4-QjyA32cKBfRHfkvky7wh130fEXDxj4adLkIWViq5cT5miij_uPCPA8UXGqzUIZg";gon.locale="ru";gon.language="ru";gon.theme="light";gon.rails_env="production";gon.mobile=false;gon.google={"analytics_key":"UA-1360700-51","optimize_key":"GTM-5QDVFPF"};gon.captcha={"google_v3_site_key":"6LenGbgZAAAAAM7HbrDbn5JlizCSzPcS767c9vaY","yandex_site_key":"ysc1_Vyob5ZPPUdPBsu0ykt8bVFdzsfpoVjQChLGl2b4g19647a89","verification_failed":null};gon.social_signin=false;gon.typoreporter_google_form_id="1FAIpQLSeibfGq-KvWQ2Fyru-zkFFRVTLBuzXAHAoEyN1p49FtDmNoNA";
//]]>
</script>
<meta charset="utf-8">
<title>К чему готовиться разработчикам: как изменятся технологии и языки программирования в 2023 году</title>
<meta name="description" content="Информационный материал в блоге Хекслета: К чему готовиться разработчикам: как изменятся технологии и языки программирования в 2023 году (категория: Код). Опытные наставники, практика на тренажерах, open-source проекты в портфолио. Индивидуальное и групповое онлайн-обучение в школе Хекслет.">
<link rel="canonical" href="https://ru.hexlet.io/blog/posts/k-chemu-gotovitsya-razrabotchikam">
<meta property="og:title" content="К чему готовиться разработчикам: как изменятся технологии и языки программирования в 2023 году">
<meta property="og:description" content="Информационный материал в блоге Хекслета: К чему готовиться разработчикам: как изменятся технологии и языки программирования в 2023 году (категория: Код). Опытные наставники, практика на тренажерах, open-source проекты в портфолио. Индивидуальное и групповое онлайн-обучение в школе Хекслет.">
<meta property="og:image" content="https://ru.hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTQ3OSwicHVyIjoiYmxvYl9pZCJ9fQ==--607fc945627d27cbc3e1afc4db55528a98046451/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOlsxNDU2LDcyOF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--b2ecf6121248a24883cda19469732b47b57f4e80/%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B82023-1-01.png">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="LB4MHZwgbos_ZcCpSXKa1pTgvFPyeg1RXrIEqpXh9AvDz8cqbl7D64km5DFFfWqhVOmR-fpN8_PjUp7-x-YTZQ" />
<script src="/vite/assets/inertia-DfXos102.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/preload-helper-BJ4cLWpC.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ahoy-DrlRQ-1D.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/analytics-cb8xch9l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Surface-DL2bpZA-.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/extends-C-EagtpE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/inheritsLoose-BBd-DCVI.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/objectWithoutPropertiesLoose-DRHXDhjp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/index.esm-DAqKOkZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Button-CGPUux8l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/CloseButton-D1euiPao.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Group-BX48WcuU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Loader-BQEY8g6v.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Modal-Cy3HByv7.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/OptionalPortal-1Hza5P2w.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Stack-CtjJzfw4.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Textarea-Ck64llAy.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/DirectionProvider-Dc9zdUke.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/events-DJQOhap0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-reduced-motion-D2owz4wa.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-disclosure-zKtK5W1r.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-hotkeys-Cnc_Rwkb.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/random-id-DOQyszCZ.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/exports-C_MrNx_T.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<link rel="stylesheet" href="/vite/assets/application-BqhCP46M.js" />
<script src="/vite/assets/application-Df9RExpe.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/autocomplete-VMNbxKGl.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/createPopper-C3aM9r1M.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/js.cookie-D1-O8zkX.js" as="script" crossorigin="anonymous"><link rel="stylesheet" href="/vite/assets/application-C8HjmMaq.css" media="screen" />
<script>
window.ym = function(){(ym.a=ym.a||[]).push(arguments)};
window.addEventListener('load', function() {
setTimeout(function() {
ym.l = 1*new Date();
ym(window.gon.ym_counter, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true
});
// Загружаем скрипт
var k = document.createElement('script');
k.async = 1;
k.src = 'https://mc.yandex.ru/metrika/tag.js';
document.head.appendChild(k);
ym(window.gon.ym_counter, 'getClientID', function(clientID) {
window.ymClientId = clientID;
});
}, 1500);
});
</script>
<!-- Google Tag Manager - deferred -->
<script>
// dataLayer stub сразу — пуши работают до загрузки скрипта
window.dataLayer = window.dataLayer || [];
// Сам скрипт — отложенно после load
window.addEventListener('load', function() {
setTimeout(function() {
dataLayer.push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
var j = document.createElement('script');
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-WK88TH';
document.head.appendChild(j);
}, 1500);
});
</script>
<!-- End Google Tag Manager -->
</head>
<body>
<noscript>
<div>
<img alt="" src="https://mc.yandex.ru/watch/25559621" style="position:absolute; left:-9999px;">
</div>
</noscript>
<header class="sticky-top bg-body">
<nav class="navbar navbar-expand-lg">
<div class="container-xxl">
<a class="navbar-brand" href="/"><img alt="Логотип Хекслета" height="24" src="https://ru.hexlet.io/vite/assets/logo_ru_light-BpiEA1LT.svg" width="96">
</a><button aria-controls="collapsable" aria-expanded="false" aria-label="Меню" class="navbar-toggler border-0 mb-0 mt-1" data-bs-target="#collapsable" data-bs-toggle="collapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsable">
<ul class="navbar-nav mb-lg-0 mt-lg-1">
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
Все курсы
<span class="bi bi-chevron-down align-middle ms-1"></span>
</button>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item d-flex py-2" href="/courses"><div class="fw-bold me-auto">Все что есть</div>
<div class="text-muted">117</div>
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные категории</b>
</li>
<li>
<a class="dropdown-item py-2" href="/courses_devops">Курсы по DevOps
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_data_analytics">Курсы по аналитике данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_programming">Курсы по программированию
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_testing">Курсы по тестированию
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные курсы</b>
</li>
<li>
<a class="dropdown-item py-2" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/go">Go-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/java">Java-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/python">Python-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/qa-auto-engineer-java">Автоматизатор тестирования на Java
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/data-analytics">Аналитик данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/frontend">Фронтенд-разработчик
</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
О Хекслете
<span class="bi bi-chevron-down align-middle"></span>
</button>
<ul class="dropdown-menu bg-body">
<li>
<a class="dropdown-item py-2" href="/pages/about">О нас
</a></li>
<li>
<a class="dropdown-item py-2" href="/blog">Блог
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/hse-research" role="button">Результаты (Исследование)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://career.hexlet.io" role="button">Хекслет Карьера
</span></li>
<li>
<a class="dropdown-item py-2" href="/testimonials">Отзывы студентов
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://t.me/hexlet_help_bot" role="button">Поддержка (В ТГ)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/referal-program/?promo_creative=priglasite-druzei&promo_name=referal-program&promo_position=promo_position&promo_start=010724&promo_type=link" role="button">Реферальная программа
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/certificate" role="button">Подарочные сертификаты
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://hh.ru/employer/4307094" role="button">Вакансии
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://b2b.hexlet.io" data-target="_blank" role="button">Компаниям
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexly.ru/" data-target="_blank" role="button">Колледж
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexlyschool.ru/" data-target="_blank" role="button">Частная школа
</span></li>
</ul>
</li>
<li><a class="nav-link" href="/subscription/new">Подписка</a></li>
</ul>
<ul class="navbar-nav flex-lg-row align-items-lg-center gap-2 ms-auto">
<li>
<a class="nav-link" aria-label="Переключить тему" href="/theme/switch?new_theme=dark"><span aria-hidden="true" class="bi bi-moon"></span>
</a></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="/u/new" role="button"><span>Регистрация</span>
</span></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="https://ru.hexlet.io/session/new" role="button"><span>Вход</span>
</span></li>
</ul>
</div>
</div>
</nav>
</header>
<div class="x-container-xxxl">
</div>
<main class="mb-6 min-vh-100 h-100">
<link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTQ3OSwicHVyIjoiYmxvYl9pZCJ9fQ==--607fc945627d27cbc3e1afc4db55528a98046451/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOlsxNDU2LDcyOF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--b2ecf6121248a24883cda19469732b47b57f4e80/%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B82023-1-01.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzczMSwicHVyIjoiYmxvYl9pZCJ9fQ==--f5df4883f3f678321cb4fa96e9ce657bd5ee1adf/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Static%20website-cuate.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAzNywicHVyIjoiYmxvYl9pZCJ9fQ==--c9a507d1b30c26185c312c95f68af4f0d8122afa/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-bro.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzczNSwicHVyIjoiYmxvYl9pZCJ9fQ==--883f3fd4e1b571538035b5680c8d4a9eb504b1f6/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Source%20code-amico.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzY2MywicHVyIjoiYmxvYl9pZCJ9fQ==--7e08550d68b7c2ad01e51109dfcf0861158d2e58/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Code%20review-amico.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzcyNywicHVyIjoiYmxvYl9pZCJ9fQ==--2d5cbbf5c3b4a73ae4b2c50632305d78f5872e4d/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-rafiki.png"/><link rel="preload" as="image" href="/vite/assets/development-BVihs_d5.png"/><div id="app" data-page="{"component":"web/blog/posts/show","props":{"errors":{},"locale":"ru","language":"ru","httpsHost":"https://ru.hexlet.io","host":"ru.hexlet.io","colorScheme":"light","auth":{"user":{"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26T19:54:34.081Z","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false}},"cloudflareTurnstileSiteKey":"0x4AAAAAAA15KmeFXzd2H0Xo","vkIdClientId":"51586979","yandexIdClientId":"88d071f1d3384eb4bd1deb37910235c7","formAuthToken":"8MS-w4IdZlavDMb6Ea-MB8r6eM79-T9QjZ0HvVYxjngfFXX0cGPLNhlP4mIdoHxwCvNVZPXOwfIwfZ3pBDZpFg","post":{"model_name":"BlogPost","category":{"id":4,"name":"Код","slug":"code","state":"published","created_at":"2016-08-23T13:33:44.258Z"},"creator":{"public_name":"Маша Даровская","id":418115,"is_tutor":false},"tags":[{"id":887,"slug":"java","name":"Java"},{"id":633,"slug":"javascript","name":"JavaScript"},{"id":542,"slug":"python","name":"Python"}],"id":2195,"title":"К чему готовиться разработчикам: как изменятся технологии и языки программирования в 2023 году","slug":"k-chemu-gotovitsya-razrabotchikam","state":"published","summary":"Мы узнали у экспертов по современным языкам программирования, что будет с их любимыми языками в 2023 году. Удалось собрать интересные инсайды и прогнозы про Python, Go, Haskell, Rust, Java, Swift, Kotlin и веб-разработку. Заодно обсудили, как программистам подготовиться к этим изменениям.","votes_count":9,"created_at":"2022-12-26T19:21:47.133Z","published_at":"2022-12-27T10:07:26.248Z","body":"**Мы узнали у экспертов по современным языкам программирования, что будет с их любимыми языками в 2023 году. Удалось собрать интересные инсайды и прогнозы про Python, Go, Haskell, Rust, Java, Swift, Kotlin и веб-разработку. Заодно обсудили, как программистам подготовиться к этим изменениям.**\r\n\r\n::programs\r\n\r\n## Содержание\n\n## Python: новая версия языка 3.12 и PEP 649\r\n\r\n\r\n\r\n\r\n> Никита — тoп-67 по коммитам в CPython, топ-6 по коммитам в mypy и typeshed. Лично участвует в процессе разработки Python 3.12. [GitHub Никиты](https://github.com/sobolevn/)\r\n\r\nВ следующем году в ноябре выйдет новая версия Python 3.12, а до этого будут релизы нескольких альфа-версий, бета-версий и релиз-кандидатов. Альфа-версии уже доступны.\r\n\r\nНа [новые версии Python](https://ru.hexlet.io/blog/posts/vyshel-python?promo_name=blog&promo_position=article-body&promo_type=link) сейчас переходят достаточно быстро, потому что в них минимальное количество ломающих изменений, а улучшений много. Нет смысла сидеть на старой версии, за исключением некоторых нюансов тулинга. Но если вы активный пользователь статических анализаторов, то они подтягиваются приблизительно спустя год после релиза синтаксических и семантических обновлений. Соответственно, сразу тащить новую версию Python в продакшен можно, если это простой сервис. Если вы делаете что-то сложное, энтерпрайзное, то ждать придется минимум год от релиза.\r\n\r\nПроблема Python в том, что никто от него ничего не ждет — в этом языке уже все есть. Некоторые ждут какие-то фичи, но часто сами не понимают, зачем. Например, в Python 3.12, скорее всего, будет полноценный релиз субинтерпретаторов. Но люди пока не знают, что с ними делать, потому что это новая концепция. В других языках программирования я аналогов не помню. Понимания, как это использовать, и переезда на существующий тулинг люди будут ждать еще долго.\r\n\r\nПланируется, что в 2023 году выйдет [новый PEP 649](https://peps.python.org/pep-0649/), который будет по-другому работать с аннотациями. То есть `from __future__ import annotations`, скорее всего, будет убран как не очень хорошее решение. Вместо этого будут аннотации на дескрипторах.\r\n\r\nОбязательно будут улучшать адаптивный интерпретатор. Некоторые называют его JIT, но это не совсем он, потому что работает на уровне кодов операций и не уходит глубже. Он просто уточняет одни и те же коды операций в некоторых случаях. Пример: при вызове функции по умолчанию существует код операции `CALL`, который может различными способами вызывать разные функции, например для вызова `isintance` есть `CALL_NO_KW_ISINSTANCE`. Если вы постоянно вызываете одну и ту же функцию и отрабатываете один и тот же код операции, то в какой-то момент будете использовать этот более конкретный операционный код. Это позволит сэкономить время на операциях с помощью вызова более специализированного кода. Ждут ли этого люди? Наверное, нет, поэтому никто этого не заметит.\r\n\r\nЯ очень жду удаления старых модулей. Мы удалили модули distutils, я лично удалил asynchat и asyncore, которые ненавидел всей душой. Будет удалена еще парочка модулей, про которые совсем никто не знает.\r\n\r\nБудет изменен API importlib библиотеки, многое будет переработано, включая работу импортов. Очень много разных внутренних API-макросов уже переделали на inline-функции, это позволило упростить много кода. Теперь очередь за новыми компиляторами, которые их достойно оптимизируют и существенно ускорят процессы.\r\n\r\nСтоит упомянуть инициативу faster-cpython. Это инициатива, которая занимается увеличением скорости работы Python в разных областях.\r\n\r\nЭтот релиз не будет настолько же кардинальным как 3.11. Наверняка добавят какие-то новые фичи, оптимизации и багфиксы. В результате 3.12 станет стабильным релизом, в котором подготовятся к большому количеству удалений в версии 3.13.\r\n\r\nВсе по-прежнему будут говорить, что нужны какие-то микрофреймворки, но использовать будут Django, потому что это самый популярный и применимый фреймворк. В остальных не хватает примерно всего.\r\n\r\n::posts\r\n\r\nВ Django будут продолжать пихать разные асинхронные фичи, что там совершенно не нужно, зато людям нравится. О, асинхронная функция, она работает медленнее, и непонятнее, чем синхронная; давайте будем ее использовать.\r\n\r\nFast API окончательно загнется — это сейчас самый модный фреймворк, но у него не получилось создать сообщество контрибьютеров. Приходят миллионы людей и говорят: «У меня не работает», — а никто это не правит. Фреймворк в таком виде — это классная поделка, в которой можно запустить hello world и еще несколько приложений, но никто не возьмет это в серьезный продакшен.\r\n\r\nФормируется понимание, что такое [C API](https://docs.python.org/3/c-api/index.html) и [C ABI](https://blog.trailofbits.com/2022/11/15/python-wheels-abi-abi3audit/), и как разным библиотекам их использовать. Речь о NumPy и подобных штуках. Уже есть много всего, но существует проблема, что какая-то часть C API или C ABI сломалась. Люди использовали то, что существовало годами, но не было задокументировано. Когда коду больше 25 лет, его использовали, а потом выяснилось, что никто не планировал, что это будут именно так. Поэтому сейчас идет стандартизация процесса, чтобы упростить жизнь тем, кто пишет свои C Extension. Для этого привлекаются люди из разных систем, которые занимаются большими данными и библиотеками для работы с ними, разными системными пакетами.\r\n\r\nОсновное направление развития Python сейчас — сохранять стабильность, увеличивать скорость работы и избавляться от легаси. Его очень много, ведь языку больше 30 лет.\r\n\r\n## Go: параметризованные типы и поддержка profile guided optimization\r\n\r\n\r\n\r\n\r\n> Эмиль в [Twitter](https://twitter.com/litleleprikon)\r\n\r\nЗнаковым событием для Go в 2022 году было добавление параметризованных типов. Так разработчики языка попытались удовлетворить давно уже ставшую мемом потребность сообщества в дженериках. Однако с момента выхода версии языка 1.18 прошло более восьми месяцев, а повсеместного использования дженериков в библиотеках и пользовательском коде так и нет. Причина — невозможность использовать параметризованные типы в функциях с ресивером, то есть в методах структур. Такое решение не сильно устроило сообщество языка и сейчас активно обсуждается поддержка обобщенного программирования методами. Эта фича — наиболее ожидаемая в 2023 году.\r\n\r\nСоздатели языка, однако, не говорят о планах добавить эту фичу, потому что ее реализация технически довольно сложна и может привести к значительному росту либо времени компиляции, либо времени исполнения. В комментариях к релизу 1.18 написали, что дальнейшая работа над дженериками будет вестись в последующих версиях.\r\n\r\nИз наиболее интересных планов на релиз Go 1.20 можно отметить планы на поддержку profile guided optimization. Речь про возможности компилятора, который может оптимизировать наиболее нагруженные участки кода с помощью профиля, собранного с уже работающей в проде системы. Другое важное изменение — улучшение утилиты, которая используется для анализа покрытия кода тестами. С этим улучшением появится возможность видеть покрытие кода в модулях, отличных от модуля, в котором находится тест.\r\n\r\nВсе эти нововведения позволят пользователям эффективнее использовать Go в продакшен-системах и увеличат его надежность, ведь основная ниша для языка — написание надежных и быстрых сетевых сервисов. Не стоит ожидать, что в предстоящем году что-то кардинально изменится. Ежедневно в языке появляются новые библиотеки и фреймворки, которые, например, позволяют добавлять GUI, писать игры и даже мобильные приложения. Однако вряд ли Go внезапно превратится в лучший язык для настольных приложений или пошатнет C++ в сфере разработки игр.\r\n\r\nРезюмируя вышесказанное: у Go есть [своя ниша](https://ru.hexlet.io/blog/posts/yazyk-programmirovaniya-go-pochemu-vse-ego-lyubyat-i-chto-na-nem-mozhno-pisat?promo_name=blog&promo_position=article-body&promo_type=link) (например, на этом языке написан Kubernetes), поэтому популярность языка продолжит расти. Этому способствует как непрерывное улучшение языка и его экосистемы, так и его простота. В 2023 году стоит ждать планомерного роста количества проектов на Go и количества вакансий на нем.\r\n\r\n## Kotlin: Kotlin Multiplatform и Compose под iOS\r\n\r\n\r\n\r\n\r\n> Twitter: [@anioutkajarkova](https://twitter.com/anioutkajarkova)\r\n\r\nОсенью вышла бета-версия Kotlin Multiplatform с новой моделью памяти. Это означает, как и написано на сайте разработчиков Kotlin — [JetBrains](http://jetbrains.com/), что эта технология уже полностью готова к продакшену, и до выхода финальной версии осталось совсем недолго. А еще — что исчезнут почти все проблемы разработчиков с Kotlin Native при реализации решений на iOS. Все сложные воркэраунды по работе с памятью, решения проблем с многопоточностью в iOS, которым были посвящены доклады последних лет, уже не актуальны. Сейчас все реализуется само собой, из коробки.\r\n\r\nВ качестве тренда стоит упомянуть Compose. Еще в прошлом году на всех мероприятиях, посвященных Kotlin и Kotlin Multiplatform, команду JetBrains доставали вопросами, когда же появится Compose под iOS. Особенно, когда прошлой осенью появился Jetpack Compose под Android в стабильной версии, после чего начался новый виток развития этой технологии.\r\n\r\nТогда в компании JB отнекивались, что Compose под iOS не входит в их планы. Они сообщали, что планируют сосредоточиться на других технологиях. Однако наблюдательные энтузиасты заметили, что Compose под iOS уже есть в исходниках. А такие контрибьютеры в технологию KMM, как российская компания IceRock, его уже даже попробовали. Один из главных контрибьютеров в Kotlin Multiplatform — Touchlab, которые создают довольно много вспомогательных решений, тех же воркэраундов, уже не просто опробовали Compose под iOS, но и показали примерное приложение на [droidcon London 2022](https://www.droidcon.com/events/droidcon-london-2022/). Докладчик и эксперт Алексей Гладков [публиковал](https://t.me/mobiledevnews/1259) у себя в Telegram-канале скриншот, на котором видно, под какие таргеты будет идти Compose.\r\n\r\n\r\n\r\nТак что вполне возможно, что мы хотя бы в альфа-версии сможем попробовать мультиплатформенный Compose не только для десктопа, но и для Kotlin Multiplatform. Может появиться возможность привязываться с минимальными различиями в реализации к таргетам, как это сейчас сделали в IceRock и Touchlab.\r\n\r\nВ целом это довольно интересное решение, но возникает много вопросов, насколько оно будет конкурентоспособным по сравнению с тем же SwiftUI. Хотя, учитывая некоторые серьезные сложности в реализации, те же проблемы с навигацией под SwiftUI, это вполне резонный вопрос: сможет ли Compose для iOS потеснить SwiftUI при реализации UI в мультиплатформенной разработке, и станет ли этот вариант удобнее.\r\n\r\nВсе мы ждем финализации Kotlin Multiplatform и улучшения работы с garbage-коллекторами. Уже сейчас исправлено большинство проблем с памятью и ее очисткой в разных потоках. Важным показателем интересности Kotlin Multiplatform является то, что Google представили портированные под нее версии своих библиотек Jetpack. Это доказывает, что на данную технологию идет большая ставка, и что она будет перспективна в дальнейшем.\r\n\r\nРезюмируем, что мы ждем в рамках развития KMM: Compose для iOS и конкурентоспособность с SwiftUI, доработки и улучшения работы с Kotlin под разные платформы.\r\n\r\n\r\n\r\n\r\n> Twitter: [@noraltavir](https://twitter.com/noraltavir)\r\n\r\nИз того, что ждут и что вполне может появиться, но никаких гарантий нет:\r\n\r\n- Kotlin/Wasm — компилятор для Wasm и по сути веб-фронтенд без JS. Серьезный шаг, потому что это первый высокоуровневый mainstream-язык для Wasm, который будет работать с GC. Не говоря о том, что это система мультиплатформенных библиотек, которые уже существуют и могут быть там использованы.\r\n- Стабильное API компиляторных плагинов. Возможность радикально увеличить гибкость языка при помощи манипуляций с исходным кодом.\r\n- Стабилизация контекстных ресиверов и обобщение их на все платформы.\r\n- Юнион-типы.\r\n\r\nТакже совершенно нельзя исключать появление Compose Multiplatform на IoS стараниями комьюнити. Это сделает Kotlin полным конкурентом Dart/Flutter.\r\n\r\nВ целом у Kotlin сейчас фаза планомерного роста и накопления библиотек. По сути там все уже есть, люди допиливают фичи и шлифуют. Быстро развиваются Compose Desktop и Compose Multiplatform.\r\n\r\n\r\n> ### Читайте также:\r\n> [50 лучших фильмов](https://ru.hexlet.io/blog/posts/filmoteka-dlya-programmistov-25-filmov-o-programmirovanii-tehnologiyah-i-iskusstvennom-intellekte?promo_name=blog&promo_position=article-body&promo_type=link&promo_start=041024) и сериалов о технологиях\r\n\r\n## Rust: новые возможности для дженериков, работа с мобильными ОС\r\n\r\n\r\n\r\n\r\n> Twitter: [@gaxeliy](https://twitter.com/gaxeliy).\r\n\r\nМои ожидания распределены по нескольким направлениям:\r\n\r\n1. Компилятор станет умнее. Правильная программа будет реже им браковаться, из сообщения об ошибке будет чаще понятно, в чем именно дело. Скорее всего, будет применяться больше клевых оптимизаций.\r\n\r\n2. Возможности языка прокачаются. Я очень жду, когда константные дженерики научатся работать с алгебраическими типами данных. Появится возможность использовать дженерики в более сложных контекстах. Улучшится поддержка асинхронности всюду (типа асинхронных трейтов). Еще очень жду генераторов.\r\n\r\n3. Экосистема. Я рассчитываю на улучшенные возможности использовать Rust на мобильных операционных системах. Сейчас уже можно делать бинарники, которые работают под Android и iOS, но статус библиотек для создания интерфейса мобильных приложений оставляет желать лучшего.\r\n\r\nЖду нативной работы с DOM в WASM в Yew и других фронтенд-фреймворках. Эх, заживем!\r\n\r\n## Haskell: новый релиз компилятора GHC 9.6\r\n\r\n\r\n\r\n\r\n> Twitter: [@int_index](https://twitter.com/int_index)\r\n\r\nЖдем новый релиз компилятора — GHC 9.6. Это будет первый релиз, где сообщениям об ошибках назначаются уникальные коды, по которым их можно искать. Эти коды планируется собрать в [единую базу данных](https://errors.haskell.org/), там будет подробно описано, где и при каких обстоятельствах эти ошибки возникают.\r\n\r\nВторое интересное изменение — это поддержка delimited continuations (GHC Proposal #313). На их основе можно делать более производительные библиотеки для управления эффектами. Также в новой версии компилятора реализовано расширение TypeData (GHC Proposal #106) и улучшены OverloadedLabels (GHC Proposal #170).\r\n\r\nНаблюдается видимый прогресс по добавлению поддержки для запуска Haskell прямо в браузере — через компиляцию в WebAssembly и JavaScript. Вообще, такая возможность была уже давно благодаря ghcjs, но это был отдельный проект. Теперь это будет интегрировано в сам GHC и более активно улучшаться.\r\n\r\n\r\n> ### Читайте также:\r\n> Haskell — язык, позволяющий глубже понять программирование. Как он устроен и [почему его выбирают разработчики?](https://ru.hexlet.io/blog/posts/haskell-yazyk-pozvolyayuschiy-glubzhe-ponyat-programmirovanie-kak-on-ustroen-i-pochemu-ego-vybirayut-razrabotchiki?promo_name=blog&promo_position=article-body&promo_type=link)\r\n\r\nКасательно направления развития, продолжаем добавлять зависимые типы в язык. Это направление развития было утверждено с принятием GHC Proposal #378 \"Design for Dependent Types\". Но реализовываться оно будет, естественно, по частям. Работы там — непаханое поле, что-то будет реализовано в следующем году. Я сам активно занимаюсь добавлением новых механизмов явного и неявного ввода типовых переменных (см. также GHC Proposal #281, GHC Proposal #425).\r\n\r\n\r\n\r\n## Веб-разработка: нейросети в браузере и больше нативности\r\n\r\n\r\n\r\n\r\n> Автор Telegram-канала [mefody.dev](https://t.me/mefody_dev), в Twitter — [@dark_mefody](https://twitter.com/dark_mefody)\r\n\r\nГод назад я бы мало мог что сказать: веб развивался медленно, новые возможности появлялись редко, до вечнозеленых браузеров доезжали неспешно. Сейчас же — как будто кто-то открыл кофейню с эспрессо прямо посреди W3C.\r\n\r\nЯ с большим интересом наблюдаю за проектом Interop, в рамках которого самые популярные браузеры делают так, чтобы спецификации в них работали одинаково и хорошо. 2021-2022 годы показали, что это очень успешная инициатива. Посмотрим, какие цели выберут на 2023 год. Посмотреть предложения можно [здесь](https://github.com/web-platform-tests/interop).\r\n\r\nВ CSS в 2023 году, скорее всего, будет доработка и дотаскивание до браузеров спецификаций Container Queries, CSS Layouts, CSS Nesting. Чего-то революционного не жду, потому что эти спецификации сами по себе очень сильно меняют привычные нам подходы к разработке, и в них еще много чего нужно доделать. Этим браузеры, скорее всего, и будут заниматься. Интересно, что Safari, как бы на него ни ругались, в этом соревновании лидирует по тестам веб-платформы.\r\n\r\nВерстальщикам все чаще будут приходить запросы на верстку для складываемых устройств. Если сейчас мы вынуждены поддерживать бровки и монобровки от устройств Apple, то Microsoft целится в складываемые устройства, а там тоже есть своя специфика верстки.\r\n\r\nВ EcmaScript вряд ли произойдет что-то неординарное. У TC39, который принимает новые спецификации, все [расписано](https://github.com/tc39/proposals) на годы вперед. Жду Temporal, который однозначно изменит наши подходы к работе со временем и таймзонами. Но у него уже сейчас есть полифил, который можно брать и подключать.\r\n\r\nКажется, внезапно нас может удивить HTML и JS для новых DOM-элементов или хорошо забытых старых. Есть такая инициатива [Open UI](https://open-ui.org/), внутри которой прорабатываются элементы на странице. У них уже есть довольно интересное решение, как стилизовать <select>, хоть он и будет работать на других элементах по сути. Жду, когда спецификации будут доработаны, а браузеры их подтянут. Кстати, обычно Edge внедряет такие штуки одним из первых.\r\n\r\nПро фреймворки сложно что-то сказать. Чаще всего они появляются внезапно, наводят шуму, а потом комьюнити разбирается, действительно ли этот фреймворк хорош. С интересом наблюдаю за релизами [Next.js](https://ru.hexlet.io/blog/posts/next-js-chto-eto-takoe-i-kak-ego-ispolzovat?promo_name=blog&promo_position=article-body&promo_type=link), в которых есть поддержка серверных компонентов из React 18. Это то, что, наверное, ускорит большое число сайтов и не меньше сломает, потому что многие разработчики просто включат свежее решение в проде, не сильно замеряя эффект. Но подход интересный и правильный, с учетом тренда на производительность.\r\n\r\n\r\n\r\n\r\n> В Twitter — [@neesoglasnaja](https://twitter.com/Neesoglasnaja). Спикер и организатор митапов по фронтенду [MinskCSS](https://twitter.com/MinskCSS) и [MinskJS](https://twitter.com/MinskJS) и конференции [FrontendConf](https://twitter.com/FrontendConfRus). Амбассадор [Women Techmakers](https://twitter.com/WomenTechmakers).\r\n\r\nВеб движется к нативности. В мобильных и десктопных браузерах появляются функции, которые раньше были только в нативных приложениях. Современные браузеры не только активно внедряют новые спецификации HTML, CSS и JavaScript, но и расширяют возможности своей платформы.\r\n\r\nИз интересного — недавно узнала, что есть черновик спецификаций, чтобы делать нейронную сеть в браузере, и делать это без использования сторонних библиотек. Да, нейронки на JavaScript можно писать давно, используя, например,\r\n\r\nTensorFlow.js. А вот иметь встроенное в браузер API, которое будет решать похожие задачи — это что-то совершенно новое и крутое. С точки зрения безопасности это хорошо: не нужно загружать данные на сервер, есть возможность работать локально в браузере, ведь пользователи не отправляют по сети свои данные. Интересная инициатива, но не знаю, насколько она реально применима на многих проектах.\r\n\r\nВ Chrome есть API, уже сейчас работающее на Android, с помощью которого вы можете дать доступ к своим контактам. Буквально поделиться данными со своего телефона, которые раньше были только для мобильных приложений.\r\n\r\nИли посмотрим на возможность распознавания QR-кодов, используя камеру в браузере. Я помню время, когда на моем телефоне нужно было отдельно устанавливать специальное приложение, чтобы у него появилась такая функция. А в 2022 году можно встраивать такое распознавание прямо в веб-приложения для курьеров и мерчендайзеров, интернет-магазины с доставкой и выдачей товаров, потому что браузер уже умеет это делать.\r\n\r\nЕсть и обратная сторона у развития этого направления. Большинство таких API поднимают вопрос о безопасности и предоставлении доступа к данным пользователя. Безопасность в вебе была и остается важной темой. Никто не будет внедрять спецификацию, которая облегчит злоумышленникам работу. Также в какой-то мере рост количества внедренных API сдерживается вендорами, имеющими магазины нативных приложений. Им не выгодно, что их приложения можно заменить на страничку в Интернете, которая открывается в любом браузере.\r\n\r\nЧто ждет веб как платформу в 2023 году? Веб продолжит расти и расширяться, будут предлагаться и внедряться новые спецификации и браузерные API. Возможно, в будущем мы навсегда откажемся от мобильных приложений и все будем делать через браузер. Хотя пока об этом говорить рано.\r\n\r\n\r\n\r\n## Java: новая lts-версия Java и релиз Spring\r\n\r\n\r\n\r\n\r\n> В Twitter — [@gskobelevff](https://twitter.com/gskobelevff). Организовал книжный клуб для бэкенд-разработчиков [{ между скобок }](https://ru.hexlet.io/blog/posts/grisha-skobelev-podlodka-knizhnyy-klub-dlya-razrabotchikov?promo_name=blog&promo_position=article-body&promo_type=link).\r\n\r\nВ 2023 году в Java мы ждем релиз новой lts-версии. Предыдущая 17-я версия релизилась в прошлом году. А так как Oracle перешли на полугодичный релизный цикл, то следующей 21-й будет lts-версия. Какие фичи в ней будут, — большой секрет. Мы можем это предположить на основании того, что имеем в текущей версии, и как это продолжает развиваться.\r\n\r\nВ Java 17 появилась такая крутая фича, как record. Теперь не нужно писать большие классы с конструктором, геттером и сеттером — все уже реализовано с помощью конструкции record. Это невероятно удобно, и, как мы видим по 19-й версии Java, record перетекают в Instanceof, pattern matching. Я думаю, это будет что-то связанное с укреплением и улучшением record.\r\n\r\nЕще одна крутая фича, которая появилась в Java 17, закрепилась и, скорее всего, получит какие-то интересные обновления, — например, текст-блоки. Раньше надо было писать большие текстовые конструкции в Java с помощью конкатенации строк, но теперь это ушло в прошлое. Теперь можно, просто использовать три открывающих и закрывающих кавычки, а внутри них писать прикольный большой текст-блок. На самом деле эта фича есть в большинстве языков программирования, она позволяет добавлять внутрь аргументы. Мне кажется, это будет невероятно круто.\r\n\r\nВ Java 17 активно развивается ещё одна фича — это switch. Непосредственно switch expression, и pattern matching с ним. Switch case существовал с самого начала существования языка, это было невероятно неудобно, но он круто преобразился в Java 17. Видно, что разработчики поняли, что нужно идти в сторону развития и упрощения конструкций, которые часто используют. Они получат улучшения: в pattern matching добавят рекорды, думаю, что в switch expression тоже.\r\n\r\nГоворя про Java, нужно упомянуть Spring — фреймворк, без которого мы не можем сейчас представить свою работу. Произошло ключевое событие — недавно зарелизилась третья версия Spring и, скорее всего, следующий год будет посвящен обкатке и модификации.\r\n\r\n\r\n\r\n\r\n\r\n> ### Читайте также:\r\n> Гриша Скобелев: Как книжный клуб для разработчиков помог мне справляться со злостью и [стал приносить пользу людям](https://ru.hexlet.io/blog/posts/grisha-skobelev-podlodka-knizhnyy-klub-dlya-razrabotchikov?promo_name=blog&promo_position=article-body&promo_type=link)\r\n\r\nЧто будет меняться? Во-первых, они сделали большой упор на Spring Native. Это возможность делать ahead of time компиляцию наших приложений. Вечный спор, какая компиляция лучше и быстрее, какие приложения быстрее: те, которые работают just in time или ahead of time. И Spring Native собирается выйти на поле ahead of time. Будет очень интересно.\r\n\r\nТакже обещали добавить spring modules, это очень важная фича. Все хотят потрогать ее руками, потому что пока не совсем понятно, как она будет работать. Модули появились в Java 9, но ей никто не пользуется, потому что это не имеет практического смысла. Контрибьютеры собираются переизобрести эту идею и сделать так, чтобы все начали использовать модули для проектов, чтобы улучшать их последующую модификацию и заменять одни модули на другие.\r\n\r\nХочется сказать и про сторонние проекты. Например, один из горячо ожидаемых всеми — это Project Loom, виртуальные треды. Обещают, что он зарелизится 2023 году. Многие сейчас перешли с Java на Kotlin из-за корутин, которые называли киллер-фичей. Ребята из Java сделали выводы: постарались взять все самое лучшее из Kotlin корутин и Go корутин и сделать из этого Project Loom с виртуальными тредами.\r\n\r\nСледующий год обещает быть жарким. Выйдет Project Loom, лтс-ная версия Java 21, и мы увидим, насколько популярен новый релиз Spring.\r\n\r\n\r\n\r\n\r\n## Swift: SwiftUI, generics, регулярки и async/await\r\n\r\n\r\n\r\nНачну со SwiftUI: этой осенью они наконец зарелизили нативную навигацию, которая всегда была проблемной и с этим ничего не делали долгие годы. На [WWDC22](https://developer.apple.com/videos/play/wwdc2022/10054/) продемонстрировали решение, которое стало доступным из коробки с выходом версии iOS 16. И откровенно говоря, во многом базируется на том, что предлагали энтузиасты от разработки.\r\n\r\nНа тему как можно побороть проблемы с нативной навигацией в SwiftUI, было много [докладов](https://www.youtube.com/watch?v=kJyg4CIspAE) и статей последние несколько лет. Разработчики технологии Apple сделали прототипы для WWDC19, но как будто по каким-то причинам не продумали, как это развивать: то ли кто-то из команды ушел, то ли не знают как переделать. Так и приходилось разработчикам-пользователям SwiftUI выкручиваться с помощью собственных [workaround](https://www.swift.com/ru/node/24021). А в этом году разработчики Apple представили свое нативное решение на базе workaround, но снова с недоделками. То, что по идее должны были сделать по умолчанию и под капотом, сделали конфигурируемым в формате конструктора из отдельных кубиков, которые можно сложить так, как нужно.\r\n\r\nИ по-прежнему, чтобы эта конструкция работала хорошо, нужны собственные наработки. Так что пока это довольно сырое решение. Хотя оно помогает ощутимо упростить проблемы, которые были — ту же утечку памяти или возврат на несколько уровней назад, Теперь же ждем доработанную версию.\r\n\r\nВ самом языке Swift мы ожидаем улучшения работы с functional builders и DSL, а еще возможности для работы с различными дженериками, ассоциированными типами (работают как дженерики, но для протоколов), что в итоге позволит оптимизировать код и SwiftUI.\r\n\r\nТакже планируется улучшение работы компиляторов в плане работы памяти. Ходят слухи, что будут дорабатывать SwiftPackage Manager, собственный менеджер по распространению зависимостей от Apple.\r\n\r\nРазработчики языка сейчас идут по пути оптимизации и улучшению перформанса уже существующих технологий. Например, планируются улучшения и твики работы с памятью, направленные на устранение утечек, доработки и новые возможности как использовать Weak Self.\r\n\r\nНовое есть и в работе с регулярными выражениями. На прошлом [WWDC](https://developer.apple.com/wwdc22/) была представлена структурированная многопоточность async/await, в этом году продолжили развивать данную технологию, помимо различных примеров использования представили distibuted actors ([WWDC](https://developer.apple.com/wwdc22/)). Так что я ожидаю дальнейших доработок async/await и акторов. И, возможно, на базе тех же самых акторов и памяти могут быть доработки, связанные с сетевым взаимодействием, сетевыми библиотеками, которые можно будет использовать в дальнейшей работе.\r\n\r\nТак же я надеюсь, что разработчики улучшат работу с памятью в async/await. Может быть, добавят дополнительные типы задач, функционал и упростят реализацию. Тем более в этой версии они ориентируются на корутины, а корутины тоже сейчас развиваются.\r\n\r\nВсе эти новшества направлены на оптимизацию кода, чтобы он становился элегантнее и красивее. Все эти фичи (те же дженерики), упрощают решение задач в общем виде, реализацию алгоритмов в коде, который потом легче расширять и поддерживать. Это позволяет строить связи между объектами и компонентами по-новому и упрощать построение архитектуры компонентов. Если говорить про перформанс памяти, устранение утечек, ускорение компиляции и выполнения задач, то это всегда в плюс. Доработки в стиле DSL функциональных билдеров — то, что улучшит возможности реализации SwiftUI компонентов и позволит реализовывать интересные решения.\r\n\r\n\r\n> ### Также полезно:\r\n> [Язык программирования Go](https://ru.hexlet.io/blog/posts/yazyk-programmirovaniya-go-pochemu-vse-ego-lyubyat-i-chto-na-nem-mozhno-pisat?promo_name=blog&promo_position=article-body&promo_type=link&promo_start=041024) почему все его любят и что на нем можно писать\r\n\r\n\r\n\r\n### Тренды iOS\r\n\r\nНативная разработка остается в тренде, а крутые фича типа async/await увеличивают ее популярность и привлекательность. Но несмотря на то, что большинство продолжит делать свои продакшн проект на классическом стеке, DSL декларативные фреймворки вырываются впереди. Это будет до тех пор пока Compose для Android и SwiftUI для iOS не станут настолько удобными в работе, чтобы их можно было применять на сложных проектах. Тем не менее многие продолжают вкатываться в эту технологию и рассматривают ее внедрение для своих проектов, по крайней мере точечно.\r\n\r\nCompose для Android — это то, во что нужно вкладываться. iOS-разработчикам желательно затронуть SwiftUI и посмотреть на новые технологии. Кстати, ходят слухи про Compose для iOS. Тем, кто хочет прокачаться в нативном стэке, обязательно нужно обратить внимания на новинки iOS SDK, чтобы не терять компетенций Например, имеет смысл перейти в проектах на тот же async/await как более эффективное и удобное решение работы с многопоточностью\r\n\r\nСудя по тому, какие технологии Apple демонстрировали на WWDC, у них идет большая ставка на различные встроенные решения по машинному обучению, работе с графикой, анимацией, звуком и камерой. Также они выпускают новые гайды и документацию по работе со своими библиотеками. Не всегда эти рецепты полезны и содержательны. Например, в [видео туториале по работе с навигацией](https://developer.apple.com/videos/play/wwdc2022-10054) просто рассказали, какие панельки для чего, как называть кнопки и т.п. Но в целом, это показывает, что они сейчас нацелены на переработку и оптимизацию своей документации. Вот мой [доклад](https://www.youtube.com/watch?v=kJyg4CIspAE) об этом.\r\n\r\nУ таких гайдов и видеообзоров WWDC следующий посыл: мы уже все сделали, вы просто не поняли нашу идею, делайте так, как сказали мы. А насколько это удобно — другой вопрос. Для них проще объяснить, что люди не поняли их замысел, и не важно, что этот замысел не применим к продакшену.\r\n\r\n\r\n\r\n## Что в итоге\r\n\r\n2023 год обещает быть интересным для сферы разработки. Больше всего изменений ждет языки Python, Go и Java. При этом разработчики языков продолжат курс на стабильность и борьбу с легаси. У Haskell и Rust выйдут новые релизы компиляторов, а разработчики на Kotlin с нетерпением ждут релиза Compose под iOS.","reading_time":15,"url":"https://ru.hexlet.io/blog/posts/k-chemu-gotovitsya-razrabotchikam","cover_thumb_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTQ3OSwicHVyIjoiYmxvYl9pZCJ9fQ==--607fc945627d27cbc3e1afc4db55528a98046451/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTAwLDUwXSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--f0d4342fcdbdffa15c37fb02bfb423ac88d5c0c9/%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B82023-1-01.png","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTQ3OSwicHVyIjoiYmxvYl9pZCJ9fQ==--607fc945627d27cbc3e1afc4db55528a98046451/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOls3MDgsMzU0XSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--324dc52aa55ebe818c2a887ebcb832b9ad1c0381/%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B82023-1-01.png","cover_main_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTQ3OSwicHVyIjoiYmxvYl9pZCJ9fQ==--607fc945627d27cbc3e1afc4db55528a98046451/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOlsxNDU2LDcyOF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--b2ecf6121248a24883cda19469732b47b57f4e80/%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B82023-1-01.png","related_stacks_count":5},"relatedPosts":[{"model_name":"BlogPost","id":926,"title":"Библиотека React: особенности, перспективы, ситуация на рынке труда","slug":"biblioteka-react-review-article","summary":"В объявлениях о поиске программистов часто встречается требование уметь работать с React. Иногда работодатели ожидают знания React не только от фронтендеров, но и от бэкенд-разработчиков. Почему эта библиотека настолько популярная, стоит ли изучать её сегодня, каковы её перспективы по мнению опытных программистов? Ответы на эти и другие вопросы читайте в обзорной статье.","created_at":"2020-07-08T15:15:00.191Z","published_at":"2024-02-29T07:46:44.876Z","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTYyOCwicHVyIjoiYmxvYl9pZCJ9fQ==--6bac7610f325471938a0e33f58eaa4c52527d66f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOls3MDgsMzU0XSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--324dc52aa55ebe818c2a887ebcb832b9ad1c0381/%D1%87%D1%82%D0%BE%D1%82%D0%B0%D0%BA%D0%BE%D0%B5react-01.png"},{"model_name":"BlogPost","id":1656,"title":"Язык программирования PHP: почему его выбирают разработчики и с чего начать изучение","slug":"php-start","summary":"Рассказываем, в чем особенности языка PHP, его преимущества и недостатки, почему он до сих пор не теряет актуальности, что нужно знать, чтобы программировать на РHP и где тренировать свои навыки.","created_at":"2021-12-21T14:04:04.654Z","published_at":"2023-12-01T10:10:59.665Z","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTU5MSwicHVyIjoiYmxvYl9pZCJ9fQ==--01d293c2c32c364fb419ce05e3336d3b96061b52/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOls3MDgsMzU0XSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--324dc52aa55ebe818c2a887ebcb832b9ad1c0381/PHPc%D1%87%D0%B5%D0%B3%D0%BE%D0%BD%D0%B0%D1%87%D0%B0%D1%82%D1%8C-01.png"},{"model_name":"BlogPost","id":2037,"title":"С чего начать изучение JavaScript и как это делать эффективно","slug":"js-s-chego-nachat","summary":"В этой статье рассказываем, с чего начать изучение JS, сколько на это потребуется времени и как сделать учебный процесс более эффективным.","created_at":"2022-09-30T08:19:30.191Z","published_at":"2023-11-17T14:11:47.270Z","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTUxOSwicHVyIjoiYmxvYl9pZCJ9fQ==--d960d95ec41ef5395289882c2935616bcd58e101/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOls3MDgsMzU0XSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--324dc52aa55ebe818c2a887ebcb832b9ad1c0381/%D1%81%D1%87%D0%B5%D0%B3%D0%BE%D0%BD%D0%B0%D1%87%D0%B0%D1%82%D1%8Cjs-01.png"}],"category":{"id":4,"name":"Код","slug":"code","state":"published","created_at":"2016-08-23T13:33:44.258Z"},"mainStackCategory":{"id":2,"name":"Курсы по веб-разработке","slug":"web_development","short_name":"Веб-разработка","order":190,"state":"published","category_slug":"courses_web_development"},"categories":[{"id":6,"name":"Мотивация","slug":"motivation","state":"published","created_at":"2016-10-06T18:31:38.903Z"},{"id":3,"name":"Истории успеха","slug":"success","state":"published","created_at":"2016-07-30T12:57:18.308Z"},{"id":14,"name":"Дневник студента","slug":"student-diary","state":"published","created_at":"2019-02-25T13:27:09.471Z"},{"id":4,"name":"Код","slug":"code","state":"published","created_at":"2016-08-23T13:33:44.258Z"},{"id":12,"name":"Карьера","slug":"career","state":"published","created_at":"2017-07-21T15:42:21.481Z"}],"relatedLandings":[{"stack":{"id":7,"slug":"python","title":"Python-разработчик","audience":"for_beginners","start_type":"weekly","pricing_model":"purchase","priority":"high","kind":"profession","state":"published","stack_state":"finished","order":10,"duration_in_months":10},"id":7,"slug":"python","title":"Python-разработчик ","subtitle":"Изучите Python, Django, REST и Fast API для создания веб-приложений","subtitle_for_lists":"Изучите Python, Django, REST и Fast API для создания веб-приложений","locale":"ru","current":true,"duration_in_months_text":"10 месяцев","stack_slug":"python","price_text":"от 6 792 ₽","duration_text":"10 месяцев","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzczMSwicHVyIjoiYmxvYl9pZCJ9fQ==--f5df4883f3f678321cb4fa96e9ce657bd5ee1adf/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Static%20website-cuate.png"},{"stack":{"id":63,"slug":"go-web-development","title":"Веб-разработка на Go","audience":"for_programmers","start_type":"anytime","pricing_model":"subscription","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":1250,"duration_in_months":1},"id":113,"slug":"go-web-development","title":"Веб-разработка на Go","subtitle":"Навык создания веб-приложений на Go, необходимый для получения оффера на позицию Go-разработчика","subtitle_for_lists":"Изучите Go и разработку веб-приложений","locale":"ru","current":true,"duration_in_months_text":"1 месяц","stack_slug":"go-web-development","price_text":"от 3 900 ₽","duration_text":"1 месяц","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAzNywicHVyIjoiYmxvYl9pZCJ9fQ==--c9a507d1b30c26185c312c95f68af4f0d8122afa/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-bro.png"},{"stack":{"id":3,"slug":"java","title":"Java-разработчик","audience":"for_beginners","start_type":"weekly","pricing_model":"purchase","priority":"high","kind":"profession","state":"published","stack_state":"finished","order":30,"duration_in_months":10},"id":3,"slug":"java","title":"Java-разработчик","subtitle":"Изучите Java и фреймворк Spring Boot и REST API","subtitle_for_lists":"Изучите Java и фреймворк Spring Boot и REST API","locale":"ru","current":true,"duration_in_months_text":"10 месяцев","stack_slug":"java","price_text":"от 6 792 ₽","duration_text":"10 месяцев","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzczNSwicHVyIjoiYmxvYl9pZCJ9fQ==--883f3fd4e1b571538035b5680c8d4a9eb504b1f6/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Source%20code-amico.png"},{"stack":{"id":229,"slug":"go","title":"GO-разработчик","audience":"for_programmers","start_type":"weekly","pricing_model":"purchase","priority":"high","kind":"profession","state":"published","stack_state":"not_finished","order":70,"duration_in_months":6},"id":363,"slug":"go","title":"Go-разработчик","subtitle":"Изучите Go, работу с БД, HTTP, конкурентность, горутины, многопоточность ","subtitle_for_lists":"Изучите Go, работу с БД, HTTP, конкурентность, горутины, многопоточность ","locale":"ru","current":true,"duration_in_months_text":"6 месяцев","stack_slug":"go","price_text":"от 4 509 ₽","duration_text":"6 месяцев","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzY2MywicHVyIjoiYmxvYl9pZCJ9fQ==--7e08550d68b7c2ad01e51109dfcf0861158d2e58/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Code%20review-amico.png"},{"stack":{"id":12,"slug":"frontend","title":"Фронтенд-разработчик","audience":"for_beginners","start_type":"weekly","pricing_model":"purchase","priority":"high","kind":"profession","state":"published","stack_state":"finished","order":20,"duration_in_months":10},"id":17,"slug":"frontend","title":"Фронтенд-разработчик","subtitle":"Изучите HTML, CSS, JavaScript и React","subtitle_for_lists":"Изучите HTML, CSS, JavaScript и React","locale":"ru","current":true,"duration_in_months_text":"10 месяцев","stack_slug":"frontend","price_text":"от 6 792 ₽","duration_text":"10 месяцев","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzcyNywicHVyIjoiYmxvYl9pZCJ9fQ==--2d5cbbf5c3b4a73ae4b2c50632305d78f5872e4d/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-rafiki.png"}]},"url":"/blog/posts/k-chemu-gotovitsya-razrabotchikam","version":"8f286f6358a90a7bef2263b3a6edf5a90a94fa42","encryptHistory":false,"clearHistory":false}"><style data-mantine-styles="true">:root, :host{--mantine-font-family: Arial, sans-serif;--mantine-font-family-headings: Arial, sans-serif;--mantine-heading-font-weight: normal;--mantine-radius-default: 0rem;--mantine-primary-color-filled: var(--mantine-color-indigo-filled);--mantine-primary-color-filled-hover: var(--mantine-color-indigo-filled-hover);--mantine-primary-color-light: var(--mantine-color-indigo-light);--mantine-primary-color-light-hover: var(--mantine-color-indigo-light-hover);--mantine-primary-color-light-color: var(--mantine-color-indigo-light-color);--mantine-spacing-xxl: calc(4rem * var(--mantine-scale));--mantine-font-size-xs: 12px;--mantine-font-size-sm: 14px;--mantine-font-size-md: 16px;--mantine-font-size-lg: clamp(16.0000px, calc(15.2727px + 0.2273vw), 18.0000px);--mantine-font-size-xl: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-display-3: clamp(32.0000px, calc(26.1818px + 1.8182vw), 48.0000px);--mantine-font-size-display-2: clamp(36.0000px, calc(25.8182px + 3.1818vw), 64.0000px);--mantine-font-size-display-1: clamp(40.0000px, calc(25.4545px + 4.5455vw), 80.0000px);--mantine-font-size-h1: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-font-size-h2: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-font-size-h3: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-font-size-h4: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-font-size-h5: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-h6: 1rem;--mantine-primary-color-0: var(--mantine-color-indigo-0);--mantine-primary-color-1: var(--mantine-color-indigo-1);--mantine-primary-color-2: var(--mantine-color-indigo-2);--mantine-primary-color-3: var(--mantine-color-indigo-3);--mantine-primary-color-4: var(--mantine-color-indigo-4);--mantine-primary-color-5: var(--mantine-color-indigo-5);--mantine-primary-color-6: var(--mantine-color-indigo-6);--mantine-primary-color-7: var(--mantine-color-indigo-7);--mantine-primary-color-8: var(--mantine-color-indigo-8);--mantine-primary-color-9: var(--mantine-color-indigo-9);--mantine-color-red-0: #ffeaea;--mantine-color-red-1: #fed4d4;--mantine-color-red-2: #f4a7a8;--mantine-color-red-3: #ec7878;--mantine-color-red-4: #e55050;--mantine-color-red-5: #e03131;--mantine-color-red-6: #e02829;--mantine-color-red-7: #c71a1c;--mantine-color-red-8: #b21218;--mantine-color-red-9: #9c0411;--mantine-color-violet-0: #fce9ff;--mantine-color-violet-1: #f1cfff;--mantine-color-violet-2: #e09bff;--mantine-color-violet-3: #d16fff;--mantine-color-violet-4: #be37fe;--mantine-color-violet-5: #b51afe;--mantine-color-violet-6: #b009ff;--mantine-color-violet-7: #9b00e4;--mantine-color-violet-8: #8a00cc;--mantine-color-violet-9: #7800b3;--mantine-color-indigo-0: #edecff;--mantine-color-indigo-1: #d6d5fe;--mantine-color-indigo-2: #aaa9f4;--mantine-color-indigo-3: #7b79eb;--mantine-color-indigo-4: #5451e4;--mantine-color-indigo-5: #3b37e0;--mantine-color-indigo-6: #2d2adf;--mantine-color-indigo-7: #1f1ec7;--mantine-color-indigo-8: #1819b2;--mantine-color-indigo-9: #0c149e;--mantine-color-cyan-0: #dffdff;--mantine-color-cyan-1: #caf5ff;--mantine-color-cyan-2: #99e8ff;--mantine-color-cyan-3: #64daff;--mantine-color-cyan-4: #3ccffe;--mantine-color-cyan-5: #24c8fe;--mantine-color-cyan-6: #00c2ff;--mantine-color-cyan-7: #00ade4;--mantine-color-cyan-8: #009acd;--mantine-color-cyan-9: #0085b5;--mantine-color-green-0: #e9fdec;--mantine-color-green-1: #d7f6dc;--mantine-color-green-2: #b0eab9;--mantine-color-green-3: #86df94;--mantine-color-green-4: #62d574;--mantine-color-green-5: #4ccf5f;--mantine-color-green-6: #3fcc54;--mantine-color-green-7: #2fb344;--mantine-color-green-8: #25a03b;--mantine-color-green-9: #138a2e;--mantine-color-yellow-0: #fff7e2;--mantine-color-yellow-1: #ffeecd;--mantine-color-yellow-2: #ffdc9c;--mantine-color-yellow-3: #ffc966;--mantine-color-yellow-4: #feb93a;--mantine-color-yellow-5: #feae1e;--mantine-color-yellow-6: #ffa90f;--mantine-color-yellow-8: #ca8200;--mantine-color-yellow-9: #af7000;--mantine-h1-font-size: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-h1-font-weight: normal;--mantine-h2-font-size: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-h2-font-weight: normal;--mantine-h3-font-size: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-h3-font-weight: normal;--mantine-h4-font-size: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-h4-font-weight: normal;--mantine-h5-font-size: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-h5-font-weight: normal;--mantine-h6-font-size: 1rem;--mantine-h6-font-weight: normal;}
:root[data-mantine-color-scheme="dark"], :host([data-mantine-color-scheme="dark"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-dark-filled: var(--mantine-color-dark-5);--mantine-color-dark-filled-hover: var(--mantine-color-dark-6);--mantine-color-dark-light: rgba(105, 105, 105, 0.15);--mantine-color-dark-light-hover: rgba(105, 105, 105, 0.2);--mantine-color-dark-light-color: var(--mantine-color-dark-0);--mantine-color-dark-outline: var(--mantine-color-dark-1);--mantine-color-dark-outline-hover: rgba(184, 184, 184, 0.05);--mantine-color-gray-filled: var(--mantine-color-gray-5);--mantine-color-gray-filled-hover: var(--mantine-color-gray-6);--mantine-color-gray-light: rgba(222, 226, 230, 0.15);--mantine-color-gray-light-hover: rgba(222, 226, 230, 0.2);--mantine-color-gray-light-color: var(--mantine-color-gray-0);--mantine-color-gray-outline: var(--mantine-color-gray-1);--mantine-color-gray-outline-hover: rgba(241, 243, 245, 0.05);--mantine-color-red-filled: var(--mantine-color-red-5);--mantine-color-red-filled-hover: var(--mantine-color-red-6);--mantine-color-red-light: rgba(236, 120, 120, 0.15);--mantine-color-red-light-hover: rgba(236, 120, 120, 0.2);--mantine-color-red-light-color: var(--mantine-color-red-0);--mantine-color-red-outline: var(--mantine-color-red-1);--mantine-color-red-outline-hover: rgba(254, 212, 212, 0.05);--mantine-color-pink-filled: var(--mantine-color-pink-5);--mantine-color-pink-filled-hover: var(--mantine-color-pink-6);--mantine-color-pink-light: rgba(250, 162, 193, 0.15);--mantine-color-pink-light-hover: rgba(250, 162, 193, 0.2);--mantine-color-pink-light-color: var(--mantine-color-pink-0);--mantine-color-pink-outline: var(--mantine-color-pink-1);--mantine-color-pink-outline-hover: rgba(255, 222, 235, 0.05);--mantine-color-grape-filled: var(--mantine-color-grape-5);--mantine-color-grape-filled-hover: var(--mantine-color-grape-6);--mantine-color-grape-light: rgba(229, 153, 247, 0.15);--mantine-color-grape-light-hover: rgba(229, 153, 247, 0.2);--mantine-color-grape-light-color: var(--mantine-color-grape-0);--mantine-color-grape-outline: var(--mantine-color-grape-1);--mantine-color-grape-outline-hover: rgba(243, 217, 250, 0.05);--mantine-color-violet-filled: var(--mantine-color-violet-5);--mantine-color-violet-filled-hover: var(--mantine-color-violet-6);--mantine-color-violet-light: rgba(209, 111, 255, 0.15);--mantine-color-violet-light-hover: rgba(209, 111, 255, 0.2);--mantine-color-violet-light-color: var(--mantine-color-violet-0);--mantine-color-violet-outline: var(--mantine-color-violet-1);--mantine-color-violet-outline-hover: rgba(241, 207, 255, 0.05);--mantine-color-indigo-filled: var(--mantine-color-indigo-5);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-6);--mantine-color-indigo-light: rgba(123, 121, 235, 0.15);--mantine-color-indigo-light-hover: rgba(123, 121, 235, 0.2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-0);--mantine-color-indigo-outline: var(--mantine-color-indigo-1);--mantine-color-indigo-outline-hover: rgba(214, 213, 254, 0.05);--mantine-color-blue-filled: var(--mantine-color-blue-5);--mantine-color-blue-filled-hover: var(--mantine-color-blue-6);--mantine-color-blue-light: rgba(116, 192, 252, 0.15);--mantine-color-blue-light-hover: rgba(116, 192, 252, 0.2);--mantine-color-blue-light-color: var(--mantine-color-blue-0);--mantine-color-blue-outline: var(--mantine-color-blue-1);--mantine-color-blue-outline-hover: rgba(208, 235, 255, 0.05);--mantine-color-cyan-filled: var(--mantine-color-cyan-5);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-6);--mantine-color-cyan-light: rgba(100, 218, 255, 0.15);--mantine-color-cyan-light-hover: rgba(100, 218, 255, 0.2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-0);--mantine-color-cyan-outline: var(--mantine-color-cyan-1);--mantine-color-cyan-outline-hover: rgba(202, 245, 255, 0.05);--mantine-color-teal-filled: var(--mantine-color-teal-5);--mantine-color-teal-filled-hover: var(--mantine-color-teal-6);--mantine-color-teal-light: rgba(99, 230, 190, 0.15);--mantine-color-teal-light-hover: rgba(99, 230, 190, 0.2);--mantine-color-teal-light-color: var(--mantine-color-teal-0);--mantine-color-teal-outline: var(--mantine-color-teal-1);--mantine-color-teal-outline-hover: rgba(195, 250, 232, 0.05);--mantine-color-green-filled: var(--mantine-color-green-5);--mantine-color-green-filled-hover: var(--mantine-color-green-6);--mantine-color-green-light: rgba(134, 223, 148, 0.15);--mantine-color-green-light-hover: rgba(134, 223, 148, 0.2);--mantine-color-green-light-color: var(--mantine-color-green-0);--mantine-color-green-outline: var(--mantine-color-green-1);--mantine-color-green-outline-hover: rgba(215, 246, 220, 0.05);--mantine-color-lime-filled: var(--mantine-color-lime-5);--mantine-color-lime-filled-hover: var(--mantine-color-lime-6);--mantine-color-lime-light: rgba(192, 235, 117, 0.15);--mantine-color-lime-light-hover: rgba(192, 235, 117, 0.2);--mantine-color-lime-light-color: var(--mantine-color-lime-0);--mantine-color-lime-outline: var(--mantine-color-lime-1);--mantine-color-lime-outline-hover: rgba(233, 250, 200, 0.05);--mantine-color-yellow-filled: var(--mantine-color-yellow-5);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-6);--mantine-color-yellow-light: rgba(255, 201, 102, 0.15);--mantine-color-yellow-light-hover: rgba(255, 201, 102, 0.2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-0);--mantine-color-yellow-outline: var(--mantine-color-yellow-1);--mantine-color-yellow-outline-hover: rgba(255, 238, 205, 0.05);--mantine-color-orange-filled: var(--mantine-color-orange-5);--mantine-color-orange-filled-hover: var(--mantine-color-orange-6);--mantine-color-orange-light: rgba(255, 192, 120, 0.15);--mantine-color-orange-light-hover: rgba(255, 192, 120, 0.2);--mantine-color-orange-light-color: var(--mantine-color-orange-0);--mantine-color-orange-outline: var(--mantine-color-orange-1);--mantine-color-orange-outline-hover: rgba(255, 232, 204, 0.05);--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-9) 0%, var(--mantine-color-cyan-7) 100%);--app-color-surface: #2e2e2e;}
:root[data-mantine-color-scheme="light"], :host([data-mantine-color-scheme="light"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-red-light: rgba(224, 40, 41, 0.1);--mantine-color-red-light-hover: rgba(224, 40, 41, 0.12);--mantine-color-red-outline-hover: rgba(224, 40, 41, 0.05);--mantine-color-violet-light: rgba(176, 9, 255, 0.1);--mantine-color-violet-light-hover: rgba(176, 9, 255, 0.12);--mantine-color-violet-outline-hover: rgba(176, 9, 255, 0.05);--mantine-color-indigo-light: rgba(45, 42, 223, 0.1);--mantine-color-indigo-light-hover: rgba(45, 42, 223, 0.12);--mantine-color-indigo-outline-hover: rgba(45, 42, 223, 0.05);--mantine-color-cyan-light: rgba(0, 194, 255, 0.1);--mantine-color-cyan-light-hover: rgba(0, 194, 255, 0.12);--mantine-color-cyan-outline-hover: rgba(0, 194, 255, 0.05);--mantine-color-green-light: rgba(63, 204, 84, 0.1);--mantine-color-green-light-hover: rgba(63, 204, 84, 0.12);--mantine-color-green-outline-hover: rgba(63, 204, 84, 0.05);--mantine-color-yellow-light: rgba(255, 169, 15, 0.1);--mantine-color-yellow-light-hover: rgba(255, 169, 15, 0.12);--mantine-color-yellow-outline-hover: rgba(255, 169, 15, 0.05);--app-color-surface: #f1f3f5;--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-5) 100%);}</style><style data-mantine-styles="classes">@media (max-width: 35.99375em) {.mantine-visible-from-xs {display: none !important;}}@media (min-width: 36em) {.mantine-hidden-from-xs {display: none !important;}}@media (max-width: 47.99375em) {.mantine-visible-from-sm {display: none !important;}}@media (min-width: 48em) {.mantine-hidden-from-sm {display: none !important;}}@media (max-width: 61.99375em) {.mantine-visible-from-md {display: none !important;}}@media (min-width: 62em) {.mantine-hidden-from-md {display: none !important;}}@media (max-width: 74.99375em) {.mantine-visible-from-lg {display: none !important;}}@media (min-width: 75em) {.mantine-hidden-from-lg {display: none !important;}}@media (max-width: 87.99375em) {.mantine-visible-from-xl {display: none !important;}}@media (min-width: 88em) {.mantine-hidden-from-xl {display: none !important;}}</style><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","author":"Маша Даровская","name":"К чему готовиться разработчикам: как изменятся технологии и языки программирования в 2023 году","datePublished":"2022-12-27T10:07:26.248Z","headline":"Мы узнали у экспертов по современным языкам программирования, что будет с их любимыми языками в 2023 году. Удалось собрать интересные инсайды и прогнозы про Python, Go, Haskell, Rust, Java, Swift, Kotlin и веб-разработку. Заодно обсудили, как программистам подготовиться к этим изменениям.","image":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTQ3OSwicHVyIjoiYmxvYl9pZCJ9fQ==--607fc945627d27cbc3e1afc4db55528a98046451/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOlsxNDU2LDcyOF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--b2ecf6121248a24883cda19469732b47b57f4e80/%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B82023-1-01.png","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":9}]}</script><div style="--container-size:var(--container-size-lg);margin-top:var(--mantine-spacing-xl);height:100%" class="m_7485cace mantine-Container-root" data-size="lg" data-strategy="block"><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"position":1,"@type":"ListItem","item":{"@id":"/blog","name":"Блог Хекслета"}},{"position":2,"@type":"ListItem","item":{"@id":"/blog/categories/code","name":"Код"}},{"position":3,"@type":"ListItem","item":{"@id":"/blog/posts/k-chemu-gotovitsya-razrabotchikam","name":"К чему готовиться разработчикам: как изменятся технологии и языки программирования в 2023 году"}}]}</script><div style="margin-bottom:var(--mantine-spacing-xs)" class="m_8b3717df mantine-Breadcrumbs-root"><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/"><div style="color:inherit" class="m_4451eb3a mantine-Center-root"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-home-link "><path d="M20.085 11.085l-8.085 -8.085l-9 9h2v7a2 2 0 0 0 2 2h4.5"></path><path d="M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 1.807 1.143"></path><path d="M20 21a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M20 16a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M15 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M21 16l-5 3l5 2"></path></svg></div></a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/blog">Блог Хекслета</a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/blog/categories/code">Код</a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><p style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:var(--mantine-color-dimmed)" class="mantine-focus-auto m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root" data-size="sm">К чему готовиться разработчикам: как изменятся технологии и языки программирования в 2023 году</p></div><style data-mantine-styles="inline">.__m__-_R_eub_{margin-bottom:var(--mantine-spacing-xs);}@media(min-width: 36em){.__m__-_R_eub_{margin-bottom:var(--mantine-spacing-xs);}}</style><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root __m__-_R_eub_"><style data-mantine-styles="inline">.__m__-_R_deub_{width:100%;}@media(min-width: 36em){.__m__-_R_deub_{width:70%;}}@media(min-width: 75em){.__m__-_R_deub_{width:75%;}}</style><div class="__m__-_R_deub_"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><h1 style="--title-fw:var(--mantine-h1-font-weight);--title-lh:var(--mantine-h1-line-height);--title-fz:var(--mantine-h1-font-size)" class="m_8a5d1357 mantine-Title-root" data-order="1">К чему готовиться разработчикам: как изменятся технологии и языки программирования в 2023 году</h1></div></div></div><div style="position:absolute;top:calc(18.75rem * var(--mantine-scale))" class=""></div><style data-mantine-styles="inline">.__m__-_R_2iub_{--grid-gutter:var(--mantine-spacing-xl);}</style><div class="m_410352e9 mantine-Grid-root __m__-_R_2iub_"><div class="m_dee7bd2f mantine-Grid-inner"><style data-mantine-styles="inline">.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:100%;--col-max-width:100%;}@media(min-width: 48em){.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:83.33333333333334%;--col-max-width:83.33333333333334%;}}@media(min-width: 62em){.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:66.66666666666667%;--col-max-width:66.66666666666667%;}}</style><div class="m_96bdd299 mantine-Grid-col __m__-_R_dmiub_"><div style="--stack-gap:var(--mantine-spacing-md);--stack-align:stretch;--stack-justify:flex-start;margin-bottom:var(--mantine-spacing-xl)" class="m_6d731127 mantine-Stack-root"><div class=""><div style="--group-gap:var(--mantine-spacing-xs);--group-align:center;--group-justify:flex-start;--group-wrap:wrap;margin-bottom:var(--mantine-spacing-xl)" class="m_4081bf90 mantine-Group-root"><button style="--badge-height:var(--badge-height-sm);--badge-padding-x:var(--badge-padding-x-sm);--badge-fz:var(--badge-fz-sm);--badge-bg:var(--mantine-color-default);--badge-color:var(--mantine-color-default-color);--badge-bd:calc(0.0625rem * var(--mantine-scale)) solid var(--mantine-color-default-border);cursor:pointer;color:inherit" class="m_347db0ec mantine-Badge-root" data-variant="default" data-size="sm" type="button" aria-label="Java"><span class="m_5add502a mantine-Badge-label">Java</span></button><button style="--badge-height:var(--badge-height-sm);--badge-padding-x:var(--badge-padding-x-sm);--badge-fz:var(--badge-fz-sm);--badge-bg:var(--mantine-color-default);--badge-color:var(--mantine-color-default-color);--badge-bd:calc(0.0625rem * var(--mantine-scale)) solid var(--mantine-color-default-border);cursor:pointer;color:inherit" class="m_347db0ec mantine-Badge-root" data-variant="default" data-size="sm" type="button" aria-label="JavaScript"><span class="m_5add502a mantine-Badge-label">JavaScript</span></button><button style="--badge-height:var(--badge-height-sm);--badge-padding-x:var(--badge-padding-x-sm);--badge-fz:var(--badge-fz-sm);--badge-bg:var(--mantine-color-default);--badge-color:var(--mantine-color-default-color);--badge-bd:calc(0.0625rem * var(--mantine-scale)) solid var(--mantine-color-default-border);cursor:pointer;color:inherit" class="m_347db0ec mantine-Badge-root" data-variant="default" data-size="sm" type="button" aria-label="Python"><span class="m_5add502a mantine-Badge-label">Python</span></button></div><div style="--group-gap:calc(0.625rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap;margin-bottom:var(--mantine-spacing-sm);color:var(--mantine-color-gray-text)" class="m_4081bf90 mantine-Group-root"><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap;margin-inline-end:var(--mantine-spacing-lg)" class="m_4081bf90 mantine-Group-root">27 декабря 2022 г.</div><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-clock "><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M12 7v5l3 3"></path></svg></div>15 минут</div><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-thumb-up "><path d="M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3"></path></svg></div>9</div></div><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img style="--image-radius:var(--mantine-radius-md);--image-object-fit:cover;width:100%;height:100%" class="m_9e117634 mantine-Image-root" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTQ3OSwicHVyIjoiYmxvYl9pZCJ9fQ==--607fc945627d27cbc3e1afc4db55528a98046451/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOlsxNDU2LDcyOF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--b2ecf6121248a24883cda19469732b47b57f4e80/%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B82023-1-01.png" alt="К чему готовиться разработчикам: как изменятся технологии и языки программирования в 2023 году"/></div></div><div role="link" tabindex="0" style="cursor:pointer"><button style="display:block;width:100%" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Присоединяйтесь к нашему Telegram-сообществу"><div style="background-color:light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-6))" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:auto;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-brand-telegram "><path d="M15 10l-4 4l6 6l4 -16l-18 7l4 2l2 6l3 -4"></path></svg></div>Присоединяйтесь к нашему Telegram-сообществу</div></div></button></div><div style="margin-bottom:var(--mantine-spacing-xl)" class="m_d08caa0 mantine-Typography-root"><p><strong>Мы узнали у экспертов по современным языкам программирования, что будет с их любимыми языками в 2023 году. Удалось собрать интересные инсайды и прогнозы про Python, Go, Haskell, Rust, Java, Swift, Kotlin и веб-разработку. Заодно обсудили, как программистам подготовиться к этим изменениям.</strong></p>
<style data-mantine-styles="inline">.__m__-_R_3derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xs);--carousel-slide-size:70%;}@media(min-width: 36em){.__m__-_R_3derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xl);--carousel-slide-size:50%;}}</style><div style="--carousel-control-size:calc(2.5rem * var(--mantine-scale));--carousel-controls-offset:var(--mantine-spacing-sm);margin-bottom:var(--mantine-spacing-lg);padding-block:var(--mantine-spacing-sm);background:var(--app-color-surface)" class="m_17884d0f mantine-Carousel-root responsiveClassName" data-orientation="horizontal" data-include-gap-in-size="true"><div class="m_39bc3463 mantine-Carousel-controls" data-orientation="horizontal"><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="previous" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="next" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(-90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button></div><div class="m_a2dae653 mantine-Carousel-viewport" data-type="media"><div class="m_fcd81474 mantine-Carousel-container __m__-_R_3derddmiub_" data-orientation="horizontal"><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/python?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">10 месяцев</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">С нуля</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Python-разработчик </p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Изучите Python, Django, REST и Fast API для создания веб-приложений</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzczMSwicHVyIjoiYmxvYl9pZCJ9fQ==--f5df4883f3f678321cb4fa96e9ce657bd5ee1adf/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Static%20website-cuate.png" alt="Python-разработчик " loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 6 792 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/go-web-development?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">1 месяц</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Веб-разработка на Go</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Изучите Go и разработку веб-приложений</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAzNywicHVyIjoiYmxvYl9pZCJ9fQ==--c9a507d1b30c26185c312c95f68af4f0d8122afa/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-bro.png" alt="Веб-разработка на Go" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/java?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">10 месяцев</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">С нуля</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Java-разработчик</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Изучите Java и фреймворк Spring Boot и REST API</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzczNSwicHVyIjoiYmxvYl9pZCJ9fQ==--883f3fd4e1b571538035b5680c8d4a9eb504b1f6/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Source%20code-amico.png" alt="Java-разработчик" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 6 792 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/go?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">6 месяцев</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Go-разработчик</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Изучите Go, работу с БД, HTTP, конкурентность, горутины, многопоточность </p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzY2MywicHVyIjoiYmxvYl9pZCJ9fQ==--7e08550d68b7c2ad01e51109dfcf0861158d2e58/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Code%20review-amico.png" alt="Go-разработчик" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 4 509 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/frontend?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">10 месяцев</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">С нуля</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Фронтенд-разработчик</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Изучите HTML, CSS, JavaScript и React</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzcyNywicHVyIjoiYmxvYl9pZCJ9fQ==--2d5cbbf5c3b4a73ae4b2c50632305d78f5872e4d/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-rafiki.png" alt="Фронтенд-разработчик" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 6 792 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><h2 style="--title-fw:var(--mantine-h2-font-weight);--title-lh:var(--mantine-h2-line-height);--title-fz:var(--mantine-h2-font-size);margin-bottom:var(--mantine-spacing-md);font-size:var(--mantine-font-size-h3)" class="m_8a5d1357 mantine-Title-root" data-order="2" data-responsive="true">Каталог</h2><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Полный список доступных курсов по разным направлениям</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="/vite/assets/development-BVihs_d5.png" alt="Orientation"/></div></div></div></a></div></div></div></div></div>
<h2 id="heading-2-1">Содержание</h2>
<ul>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-2">Python: новая версия языка 3.12 и PEP 649</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-3">Go: параметризованные типы и поддержка profile guided optimization</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-4">Kotlin: Kotlin Multiplatform и Compose под iOS</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-6">Rust: новые возможности для дженериков, работа с мобильными ОС</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-7">Haskell: новый релиз компилятора GHC 9.6</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-9">Веб-разработка: нейросети в браузере и больше нативности</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-10">Java: новая lts-версия Java и релиз Spring</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-12">Swift: SwiftUI, generics, регулярки и async/await</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="#heading-2-15">Что в итоге</a></li>
</ul>
<h2 id="heading-2-2">Python: новая версия языка 3.12 и PEP 649</h2>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/3B8NqKz.png" alt="" loading="lazy"/></p>
<blockquote>
<p>Никита — тoп-67 по коммитам в CPython, топ-6 по коммитам в mypy и typeshed. Лично участвует в процессе разработки Python 3.12. <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://github.com/sobolevn/" rel="noopener noreferrer" target="_blank">GitHub Никиты</a></p>
</blockquote>
<p>В следующем году в ноябре выйдет новая версия Python 3.12, а до этого будут релизы нескольких альфа-версий, бета-версий и релиз-кандидатов. Альфа-версии уже доступны.</p>
<p>На <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/vyshel-python?promo_name=blog&promo_position=article-body&promo_type=link" rel="noopener noreferrer" target="_blank">новые версии Python</a> сейчас переходят достаточно быстро, потому что в них минимальное количество ломающих изменений, а улучшений много. Нет смысла сидеть на старой версии, за исключением некоторых нюансов тулинга. Но если вы активный пользователь статических анализаторов, то они подтягиваются приблизительно спустя год после релиза синтаксических и семантических обновлений. Соответственно, сразу тащить новую версию Python в продакшен можно, если это простой сервис. Если вы делаете что-то сложное, энтерпрайзное, то ждать придется минимум год от релиза.</p>
<p>Проблема Python в том, что никто от него ничего не ждет — в этом языке уже все есть. Некоторые ждут какие-то фичи, но часто сами не понимают, зачем. Например, в Python 3.12, скорее всего, будет полноценный релиз субинтерпретаторов. Но люди пока не знают, что с ними делать, потому что это новая концепция. В других языках программирования я аналогов не помню. Понимания, как это использовать, и переезда на существующий тулинг люди будут ждать еще долго.</p>
<p>Планируется, что в 2023 году выйдет <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://peps.python.org/pep-0649/" rel="noopener noreferrer" target="_blank">новый PEP 649</a>, который будет по-другому работать с аннотациями. То есть <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">from __future__ import annotations</code>, скорее всего, будет убран как не очень хорошее решение. Вместо этого будут аннотации на дескрипторах.</p>
<p>Обязательно будут улучшать адаптивный интерпретатор. Некоторые называют его JIT, но это не совсем он, потому что работает на уровне кодов операций и не уходит глубже. Он просто уточняет одни и те же коды операций в некоторых случаях. Пример: при вызове функции по умолчанию существует код операции <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">CALL</code>, который может различными способами вызывать разные функции, например для вызова <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">isintance</code> есть <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">CALL_NO_KW_ISINSTANCE</code>. Если вы постоянно вызываете одну и ту же функцию и отрабатываете один и тот же код операции, то в какой-то момент будете использовать этот более конкретный операционный код. Это позволит сэкономить время на операциях с помощью вызова более специализированного кода. Ждут ли этого люди? Наверное, нет, поэтому никто этого не заметит.</p>
<p>Я очень жду удаления старых модулей. Мы удалили модули distutils, я лично удалил asynchat и asyncore, которые ненавидел всей душой. Будет удалена еще парочка модулей, про которые совсем никто не знает.</p>
<p>Будет изменен API importlib библиотеки, многое будет переработано, включая работу импортов. Очень много разных внутренних API-макросов уже переделали на inline-функции, это позволило упростить много кода. Теперь очередь за новыми компиляторами, которые их достойно оптимизируют и существенно ускорят процессы.</p>
<p>Стоит упомянуть инициативу faster-cpython. Это инициатива, которая занимается увеличением скорости работы Python в разных областях.</p>
<p>Этот релиз не будет настолько же кардинальным как 3.11. Наверняка добавят какие-то новые фичи, оптимизации и багфиксы. В результате 3.12 станет стабильным релизом, в котором подготовятся к большому количеству удалений в версии 3.13.</p>
<p>Все по-прежнему будут говорить, что нужны какие-то микрофреймворки, но использовать будут Django, потому что это самый популярный и применимый фреймворк. В остальных не хватает примерно всего.</p>
<style data-mantine-styles="inline">.__m__-_R_13derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xs);--carousel-slide-size:80%;}@media(min-width: 36em){.__m__-_R_13derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xl);--carousel-slide-size:50%;}}</style><div style="--carousel-control-size:calc(2.5rem * var(--mantine-scale));--carousel-controls-offset:var(--mantine-spacing-sm);margin-bottom:var(--mantine-spacing-lg);padding-block:var(--mantine-spacing-sm);background:var(--app-color-surface)" class="m_17884d0f mantine-Carousel-root responsiveClassName" data-orientation="horizontal" data-include-gap-in-size="true"><div class="m_39bc3463 mantine-Carousel-controls" data-orientation="horizontal"><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="previous" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="next" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(-90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button></div><div class="m_a2dae653 mantine-Carousel-viewport" data-type="media"><div class="m_fcd81474 mantine-Carousel-container __m__-_R_13derddmiub_" data-orientation="horizontal"><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/biblioteka-react-review-article"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTYyOCwicHVyIjoiYmxvYl9pZCJ9fQ==--6bac7610f325471938a0e33f58eaa4c52527d66f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOls3MDgsMzU0XSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--324dc52aa55ebe818c2a887ebcb832b9ad1c0381/%D1%87%D1%82%D0%BE%D1%82%D0%B0%D0%BA%D0%BE%D0%B5react-01.png" loading="lazy" alt="Библиотека React: особенности, перспективы, ситуация на рынке труда"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Библиотека React: особенности, перспективы, ситуация на рынке труда</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">В объявлениях о поиске программистов часто встречается требование уметь работать с React. Иногда ...</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">29 февраля 2024 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/php-start"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTU5MSwicHVyIjoiYmxvYl9pZCJ9fQ==--01d293c2c32c364fb419ce05e3336d3b96061b52/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOls3MDgsMzU0XSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--324dc52aa55ebe818c2a887ebcb832b9ad1c0381/PHPc%D1%87%D0%B5%D0%B3%D0%BE%D0%BD%D0%B0%D1%87%D0%B0%D1%82%D1%8C-01.png" loading="lazy" alt="Язык программирования PHP: почему его выбирают разработчики и с чего начать изучение"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Язык программирования PHP: почему его выбирают разработчики и с чего начать изучение</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Рассказываем, в чем особенности языка PHP, его преимущества и недостатки, почему он до сих пор не...</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">1 декабря 2023 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/js-s-chego-nachat"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTUxOSwicHVyIjoiYmxvYl9pZCJ9fQ==--d960d95ec41ef5395289882c2935616bcd58e101/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOls3MDgsMzU0XSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--324dc52aa55ebe818c2a887ebcb832b9ad1c0381/%D1%81%D1%87%D0%B5%D0%B3%D0%BE%D0%BD%D0%B0%D1%87%D0%B0%D1%82%D1%8Cjs-01.png" loading="lazy" alt="С чего начать изучение JavaScript и как это делать эффективно"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">С чего начать изучение JavaScript и как это делать эффективно</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">В этой статье рассказываем, с чего начать изучение JS, сколько на это потребуется времени и как с...</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">17 ноября 2023 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div></div></div></div>
<p>В Django будут продолжать пихать разные асинхронные фичи, что там совершенно не нужно, зато людям нравится. О, асинхронная функция, она работает медленнее, и непонятнее, чем синхронная; давайте будем ее использовать.</p>
<p>Fast API окончательно загнется — это сейчас самый модный фреймворк, но у него не получилось создать сообщество контрибьютеров. Приходят миллионы людей и говорят: «У меня не работает», — а никто это не правит. Фреймворк в таком виде — это классная поделка, в которой можно запустить hello world и еще несколько приложений, но никто не возьмет это в серьезный продакшен.</p>
<p>Формируется понимание, что такое <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://docs.python.org/3/c-api/index.html" rel="noopener noreferrer" target="_blank">C API</a> и <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://blog.trailofbits.com/2022/11/15/python-wheels-abi-abi3audit/" rel="noopener noreferrer" target="_blank">C ABI</a>, и как разным библиотекам их использовать. Речь о NumPy и подобных штуках. Уже есть много всего, но существует проблема, что какая-то часть C API или C ABI сломалась. Люди использовали то, что существовало годами, но не было задокументировано. Когда коду больше 25 лет, его использовали, а потом выяснилось, что никто не планировал, что это будут именно так. Поэтому сейчас идет стандартизация процесса, чтобы упростить жизнь тем, кто пишет свои C Extension. Для этого привлекаются люди из разных систем, которые занимаются большими данными и библиотеками для работы с ними, разными системными пакетами.</p>
<p>Основное направление развития Python сейчас — сохранять стабильность, увеличивать скорость работы и избавляться от легаси. Его очень много, ведь языку больше 30 лет.</p>
<h2 id="heading-2-3">Go: параметризованные типы и поддержка profile guided optimization</h2>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/5VfVhRD.png" alt="" loading="lazy"/></p>
<blockquote>
<p>Эмиль в <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://twitter.com/litleleprikon" rel="noopener noreferrer" target="_blank">Twitter</a></p>
</blockquote>
<p>Знаковым событием для Go в 2022 году было добавление параметризованных типов. Так разработчики языка попытались удовлетворить давно уже ставшую мемом потребность сообщества в дженериках. Однако с момента выхода версии языка 1.18 прошло более восьми месяцев, а повсеместного использования дженериков в библиотеках и пользовательском коде так и нет. Причина — невозможность использовать параметризованные типы в функциях с ресивером, то есть в методах структур. Такое решение не сильно устроило сообщество языка и сейчас активно обсуждается поддержка обобщенного программирования методами. Эта фича — наиболее ожидаемая в 2023 году.</p>
<p>Создатели языка, однако, не говорят о планах добавить эту фичу, потому что ее реализация технически довольно сложна и может привести к значительному росту либо времени компиляции, либо времени исполнения. В комментариях к релизу 1.18 написали, что дальнейшая работа над дженериками будет вестись в последующих версиях.</p>
<p>Из наиболее интересных планов на релиз Go 1.20 можно отметить планы на поддержку profile guided optimization. Речь про возможности компилятора, который может оптимизировать наиболее нагруженные участки кода с помощью профиля, собранного с уже работающей в проде системы. Другое важное изменение — улучшение утилиты, которая используется для анализа покрытия кода тестами. С этим улучшением появится возможность видеть покрытие кода в модулях, отличных от модуля, в котором находится тест.</p>
<p>Все эти нововведения позволят пользователям эффективнее использовать Go в продакшен-системах и увеличат его надежность, ведь основная ниша для языка — написание надежных и быстрых сетевых сервисов. Не стоит ожидать, что в предстоящем году что-то кардинально изменится. Ежедневно в языке появляются новые библиотеки и фреймворки, которые, например, позволяют добавлять GUI, писать игры и даже мобильные приложения. Однако вряд ли Go внезапно превратится в лучший язык для настольных приложений или пошатнет C++ в сфере разработки игр.</p>
<p>Резюмируя вышесказанное: у Go есть <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/yazyk-programmirovaniya-go-pochemu-vse-ego-lyubyat-i-chto-na-nem-mozhno-pisat?promo_name=blog&promo_position=article-body&promo_type=link" rel="noopener noreferrer" target="_blank">своя ниша</a> (например, на этом языке написан Kubernetes), поэтому популярность языка продолжит расти. Этому способствует как непрерывное улучшение языка и его экосистемы, так и его простота. В 2023 году стоит ждать планомерного роста количества проектов на Go и количества вакансий на нем.</p>
<h2 id="heading-2-4">Kotlin: Kotlin Multiplatform и Compose под iOS</h2>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/TLAytDa.png" alt="" loading="lazy"/></p>
<blockquote>
<p>Twitter: <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://twitter.com/anioutkajarkova" rel="noopener noreferrer" target="_blank">@anioutkajarkova</a></p>
</blockquote>
<p>Осенью вышла бета-версия Kotlin Multiplatform с новой моделью памяти. Это означает, как и написано на сайте разработчиков Kotlin — <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="http://jetbrains.com/" rel="noopener noreferrer" target="_blank">JetBrains</a>, что эта технология уже полностью готова к продакшену, и до выхода финальной версии осталось совсем недолго. А еще — что исчезнут почти все проблемы разработчиков с Kotlin Native при реализации решений на iOS. Все сложные воркэраунды по работе с памятью, решения проблем с многопоточностью в iOS, которым были посвящены доклады последних лет, уже не актуальны. Сейчас все реализуется само собой, из коробки.</p>
<p>В качестве тренда стоит упомянуть Compose. Еще в прошлом году на всех мероприятиях, посвященных Kotlin и Kotlin Multiplatform, команду JetBrains доставали вопросами, когда же появится Compose под iOS. Особенно, когда прошлой осенью появился Jetpack Compose под Android в стабильной версии, после чего начался новый виток развития этой технологии.</p>
<p>Тогда в компании JB отнекивались, что Compose под iOS не входит в их планы. Они сообщали, что планируют сосредоточиться на других технологиях. Однако наблюдательные энтузиасты заметили, что Compose под iOS уже есть в исходниках. А такие контрибьютеры в технологию KMM, как российская компания IceRock, его уже даже попробовали. Один из главных контрибьютеров в Kotlin Multiplatform — Touchlab, которые создают довольно много вспомогательных решений, тех же воркэраундов, уже не просто опробовали Compose под iOS, но и показали примерное приложение на <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://www.droidcon.com/events/droidcon-london-2022/" rel="noopener noreferrer" target="_blank">droidcon London 2022</a>. Докладчик и эксперт Алексей Гладков <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://t.me/mobiledevnews/1259" rel="noopener noreferrer" target="_blank">публиковал</a> у себя в Telegram-канале скриншот, на котором видно, под какие таргеты будет идти Compose.</p>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/5MfbImd.png" alt="" loading="lazy"/></p>
<p>Так что вполне возможно, что мы хотя бы в альфа-версии сможем попробовать мультиплатформенный Compose не только для десктопа, но и для Kotlin Multiplatform. Может появиться возможность привязываться с минимальными различиями в реализации к таргетам, как это сейчас сделали в IceRock и Touchlab.</p>
<p>В целом это довольно интересное решение, но возникает много вопросов, насколько оно будет конкурентоспособным по сравнению с тем же SwiftUI. Хотя, учитывая некоторые серьезные сложности в реализации, те же проблемы с навигацией под SwiftUI, это вполне резонный вопрос: сможет ли Compose для iOS потеснить SwiftUI при реализации UI в мультиплатформенной разработке, и станет ли этот вариант удобнее.</p>
<p>Все мы ждем финализации Kotlin Multiplatform и улучшения работы с garbage-коллекторами. Уже сейчас исправлено большинство проблем с памятью и ее очисткой в разных потоках. Важным показателем интересности Kotlin Multiplatform является то, что Google представили портированные под нее версии своих библиотек Jetpack. Это доказывает, что на данную технологию идет большая ставка, и что она будет перспективна в дальнейшем.</p>
<p>Резюмируем, что мы ждем в рамках развития KMM: Compose для iOS и конкурентоспособность с SwiftUI, доработки и улучшения работы с Kotlin под разные платформы.</p>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/NyJQKz2.png" alt="" loading="lazy"/></p>
<blockquote>
<p>Twitter: <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://twitter.com/noraltavir" rel="noopener noreferrer" target="_blank">@noraltavir</a></p>
</blockquote>
<p>Из того, что ждут и что вполне может появиться, но никаких гарантий нет:</p>
<ul>
<li>Kotlin/Wasm — компилятор для Wasm и по сути веб-фронтенд без JS. Серьезный шаг, потому что это первый высокоуровневый mainstream-язык для Wasm, который будет работать с GC. Не говоря о том, что это система мультиплатформенных библиотек, которые уже существуют и могут быть там использованы.</li>
<li>Стабильное API компиляторных плагинов. Возможность радикально увеличить гибкость языка при помощи манипуляций с исходным кодом.</li>
<li>Стабилизация контекстных ресиверов и обобщение их на все платформы.</li>
<li>Юнион-типы.</li>
</ul>
<p>Также совершенно нельзя исключать появление Compose Multiplatform на IoS стараниями комьюнити. Это сделает Kotlin полным конкурентом Dart/Flutter.</p>
<p>В целом у Kotlin сейчас фаза планомерного роста и накопления библиотек. По сути там все уже есть, люди допиливают фичи и шлифуют. Быстро развиваются Compose Desktop и Compose Multiplatform.</p>
<blockquote>
<h3 id="heading-3-5">Читайте также:</h3>
<p><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/filmoteka-dlya-programmistov-25-filmov-o-programmirovanii-tehnologiyah-i-iskusstvennom-intellekte?promo_name=blog&promo_position=article-body&promo_type=link&promo_start=041024" rel="noopener noreferrer" target="_blank">50 лучших фильмов</a> и сериалов о технологиях</p>
</blockquote>
<h2 id="heading-2-6">Rust: новые возможности для дженериков, работа с мобильными ОС</h2>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/eYZJxTX.png" alt="" loading="lazy"/></p>
<blockquote>
<p>Twitter: <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://twitter.com/gaxeliy" rel="noopener noreferrer" target="_blank">@gaxeliy</a>.</p>
</blockquote>
<p>Мои ожидания распределены по нескольким направлениям:</p>
<ol>
<li>
<p>Компилятор станет умнее. Правильная программа будет реже им браковаться, из сообщения об ошибке будет чаще понятно, в чем именно дело. Скорее всего, будет применяться больше клевых оптимизаций.</p>
</li>
<li>
<p>Возможности языка прокачаются. Я очень жду, когда константные дженерики научатся работать с алгебраическими типами данных. Появится возможность использовать дженерики в более сложных контекстах. Улучшится поддержка асинхронности всюду (типа асинхронных трейтов). Еще очень жду генераторов.</p>
</li>
<li>
<p>Экосистема. Я рассчитываю на улучшенные возможности использовать Rust на мобильных операционных системах. Сейчас уже можно делать бинарники, которые работают под Android и iOS, но статус библиотек для создания интерфейса мобильных приложений оставляет желать лучшего.</p>
</li>
</ol>
<p>Жду нативной работы с DOM в WASM в Yew и других фронтенд-фреймворках. Эх, заживем!</p>
<h2 id="heading-2-7">Haskell: новый релиз компилятора GHC 9.6</h2>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/RPC11du.png" alt="" loading="lazy"/></p>
<blockquote>
<p>Twitter: <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://twitter.com/int_index" rel="noopener noreferrer" target="_blank">@int_index</a></p>
</blockquote>
<p>Ждем новый релиз компилятора — GHC 9.6. Это будет первый релиз, где сообщениям об ошибках назначаются уникальные коды, по которым их можно искать. Эти коды планируется собрать в <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://errors.haskell.org/" rel="noopener noreferrer" target="_blank">единую базу данных</a>, там будет подробно описано, где и при каких обстоятельствах эти ошибки возникают.</p>
<p>Второе интересное изменение — это поддержка delimited continuations (GHC Proposal #313). На их основе можно делать более производительные библиотеки для управления эффектами. Также в новой версии компилятора реализовано расширение TypeData (GHC Proposal #106) и улучшены OverloadedLabels (GHC Proposal #170).</p>
<p>Наблюдается видимый прогресс по добавлению поддержки для запуска Haskell прямо в браузере — через компиляцию в WebAssembly и JavaScript. Вообще, такая возможность была уже давно благодаря ghcjs, но это был отдельный проект. Теперь это будет интегрировано в сам GHC и более активно улучшаться.</p>
<blockquote>
<h3 id="heading-3-8">Читайте также:</h3>
<p>Haskell — язык, позволяющий глубже понять программирование. Как он устроен и <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/haskell-yazyk-pozvolyayuschiy-glubzhe-ponyat-programmirovanie-kak-on-ustroen-i-pochemu-ego-vybirayut-razrabotchiki?promo_name=blog&promo_position=article-body&promo_type=link" rel="noopener noreferrer" target="_blank">почему его выбирают разработчики?</a></p>
</blockquote>
<p>Касательно направления развития, продолжаем добавлять зависимые типы в язык. Это направление развития было утверждено с принятием GHC Proposal #378 "Design for Dependent Types". Но реализовываться оно будет, естественно, по частям. Работы там — непаханое поле, что-то будет реализовано в следующем году. Я сам активно занимаюсь добавлением новых механизмов явного и неявного ввода типовых переменных (см. также GHC Proposal #281, GHC Proposal #425).</p>
<h2 id="heading-2-9">Веб-разработка: нейросети в браузере и больше нативности</h2>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://imgur.com/2ezZ2E0.png" alt="" loading="lazy"/></p>
<blockquote>
<p>Автор Telegram-канала <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://t.me/mefody_dev" rel="noopener noreferrer" target="_blank">mefody.dev</a>, в Twitter — <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://twitter.com/dark_mefody" rel="noopener noreferrer" target="_blank">@dark_mefody</a></p>
</blockquote>
<p>Год назад я бы мало мог что сказать: веб развивался медленно, новые возможности появлялись редко, до вечнозеленых браузеров доезжали неспешно. Сейчас же — как будто кто-то открыл кофейню с эспрессо прямо посреди W3C.</p>
<p>Я с большим интересом наблюдаю за проектом Interop, в рамках которого самые популярные браузеры делают так, чтобы спецификации в них работали одинаково и хорошо. 2021-2022 годы показали, что это очень успешная инициатива. Посмотрим, какие цели выберут на 2023 год. Посмотреть предложения можно <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://github.com/web-platform-tests/interop" rel="noopener noreferrer" target="_blank">здесь</a>.</p>
<p>В CSS в 2023 году, скорее всего, будет доработка и дотаскивание до браузеров спецификаций Container Queries, CSS Layouts, CSS Nesting. Чего-то революционного не жду, потому что эти спецификации сами по себе очень сильно меняют привычные нам подходы к разработке, и в них еще много чего нужно доделать. Этим браузеры, скорее всего, и будут заниматься. Интересно, что Safari, как бы на него ни ругались, в этом соревновании лидирует по тестам веб-платформы.</p>
<p>Верстальщикам все чаще будут приходить запросы на верстку для складываемых устройств. Если сейчас мы вынуждены поддерживать бровки и монобровки от устройств Apple, то Microsoft целится в складываемые устройства, а там тоже есть своя специфика верстки.</p>
<p>В EcmaScript вряд ли произойдет что-то неординарное. У TC39, который принимает новые спецификации, все <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://github.com/tc39/proposals" rel="noopener noreferrer" target="_blank">расписано</a> на годы вперед. Жду Temporal, который однозначно изменит наши подходы к работе со временем и таймзонами. Но у него уже сейчас есть полифил, который можно брать и подключать.</p>
<p>Кажется, внезапно нас может удивить HTML и JS для новых DOM-элементов или хорошо забытых старых. Есть такая инициатива <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://open-ui.org/" rel="noopener noreferrer" target="_blank">Open UI</a>, внутри которой прорабатываются элементы на странице. У них уже есть довольно интересное решение, как стилизовать <select>, хоть он и будет работать на других элементах по сути. Жду, когда спецификации будут доработаны, а браузеры их подтянут. Кстати, обычно Edge внедряет такие штуки одним из первых.
Про фреймворки сложно что-то сказать. Чаще всего они появляются внезапно, наводят шуму, а потом комьюнити разбирается, действительно ли этот фреймворк хорош. С интересом наблюдаю за релизами Next.js, в которых есть поддержка серверных компонентов из React 18. Это то, что, наверное, ускорит большое число сайтов и не меньше сломает, потому что многие разработчики просто включат свежее решение в проде, не сильно замеряя эффект. Но подход интересный и правильный, с учетом тренда на производительность.
В Twitter — @neesoglasnaja. Спикер и организатор митапов по фронтенду MinskCSS и MinskJS и конференции FrontendConf. Амбассадор Women Techmakers.
Веб движется к нативности. В мобильных и десктопных браузерах появляются функции, которые раньше были только в нативных приложениях. Современные браузеры не только активно внедряют новые спецификации HTML, CSS и JavaScript, но и расширяют возможности своей платформы.
Из интересного — недавно узнала, что есть черновик спецификаций, чтобы делать нейронную сеть в браузере, и делать это без использования сторонних библиотек. Да, нейронки на JavaScript можно писать давно, используя, например,
TensorFlow.js. А вот иметь встроенное в браузер API, которое будет решать похожие задачи — это что-то совершенно новое и крутое. С точки зрения безопасности это хорошо: не нужно загружать данные на сервер, есть возможность работать локально в браузере, ведь пользователи не отправляют по сети свои данные. Интересная инициатива, но не знаю, насколько она реально применима на многих проектах.
В Chrome есть API, уже сейчас работающее на Android, с помощью которого вы можете дать доступ к своим контактам. Буквально поделиться данными со своего телефона, которые раньше были только для мобильных приложений.
Или посмотрим на возможность распознавания QR-кодов, используя камеру в браузере. Я помню время, когда на моем телефоне нужно было отдельно устанавливать специальное приложение, чтобы у него появилась такая функция. А в 2022 году можно встраивать такое распознавание прямо в веб-приложения для курьеров и мерчендайзеров, интернет-магазины с доставкой и выдачей товаров, потому что браузер уже умеет это делать.
Есть и обратная сторона у развития этого направления. Большинство таких API поднимают вопрос о безопасности и предоставлении доступа к данным пользователя. Безопасность в вебе была и остается важной темой. Никто не будет внедрять спецификацию, которая облегчит злоумышленникам работу. Также в какой-то мере рост количества внедренных API сдерживается вендорами, имеющими магазины нативных приложений. Им не выгодно, что их приложения можно заменить на страничку в Интернете, которая открывается в любом браузере.
Что ждет веб как платформу в 2023 году? Веб продолжит расти и расширяться, будут предлагаться и внедряться новые спецификации и браузерные API. Возможно, в будущем мы навсегда откажемся от мобильных приложений и все будем делать через браузер. Хотя пока об этом говорить рано.
Java: новая lts-версия Java и релиз Spring
В Twitter — @gskobelevff. Организовал книжный клуб для бэкенд-разработчиков { между скобок }.
В 2023 году в Java мы ждем релиз новой lts-версии. Предыдущая 17-я версия релизилась в прошлом году. А так как Oracle перешли на полугодичный релизный цикл, то следующей 21-й будет lts-версия. Какие фичи в ней будут, — большой секрет. Мы можем это предположить на основании того, что имеем в текущей версии, и как это продолжает развиваться.
В Java 17 появилась такая крутая фича, как record. Теперь не нужно писать большие классы с конструктором, геттером и сеттером — все уже реализовано с помощью конструкции record. Это невероятно удобно, и, как мы видим по 19-й версии Java, record перетекают в Instanceof, pattern matching. Я думаю, это будет что-то связанное с укреплением и улучшением record.
Еще одна крутая фича, которая появилась в Java 17, закрепилась и, скорее всего, получит какие-то интересные обновления, — например, текст-блоки. Раньше надо было писать большие текстовые конструкции в Java с помощью конкатенации строк, но теперь это ушло в прошлое. Теперь можно, просто использовать три открывающих и закрывающих кавычки, а внутри них писать прикольный большой текст-блок. На самом деле эта фича есть в большинстве языков программирования, она позволяет добавлять внутрь аргументы. Мне кажется, это будет невероятно круто.
В Java 17 активно развивается ещё одна фича — это switch. Непосредственно switch expression, и pattern matching с ним. Switch case существовал с самого начала существования языка, это было невероятно неудобно, но он круто преобразился в Java 17. Видно, что разработчики поняли, что нужно идти в сторону развития и упрощения конструкций, которые часто используют. Они получат улучшения: в pattern matching добавят рекорды, думаю, что в switch expression тоже.
Говоря про Java, нужно упомянуть Spring — фреймворк, без которого мы не можем сейчас представить свою работу. Произошло ключевое событие — недавно зарелизилась третья версия Spring и, скорее всего, следующий год будет посвящен обкатке и модификации.
Читайте также:
Гриша Скобелев: Как книжный клуб для разработчиков помог мне справляться со злостью и стал приносить пользу людям
Что будет меняться? Во-первых, они сделали большой упор на Spring Native. Это возможность делать ahead of time компиляцию наших приложений. Вечный спор, какая компиляция лучше и быстрее, какие приложения быстрее: те, которые работают just in time или ahead of time. И Spring Native собирается выйти на поле ahead of time. Будет очень интересно.
Также обещали добавить spring modules, это очень важная фича. Все хотят потрогать ее руками, потому что пока не совсем понятно, как она будет работать. Модули появились в Java 9, но ей никто не пользуется, потому что это не имеет практического смысла. Контрибьютеры собираются переизобрести эту идею и сделать так, чтобы все начали использовать модули для проектов, чтобы улучшать их последующую модификацию и заменять одни модули на другие.
Хочется сказать и про сторонние проекты. Например, один из горячо ожидаемых всеми — это Project Loom, виртуальные треды. Обещают, что он зарелизится 2023 году. Многие сейчас перешли с Java на Kotlin из-за корутин, которые называли киллер-фичей. Ребята из Java сделали выводы: постарались взять все самое лучшее из Kotlin корутин и Go корутин и сделать из этого Project Loom с виртуальными тредами.
Следующий год обещает быть жарким. Выйдет Project Loom, лтс-ная версия Java 21, и мы увидим, насколько популярен новый релиз Spring.
Swift: SwiftUI, generics, регулярки и async/await
Начну со SwiftUI: этой осенью они наконец зарелизили нативную навигацию, которая всегда была проблемной и с этим ничего не делали долгие годы. На WWDC22 продемонстрировали решение, которое стало доступным из коробки с выходом версии iOS 16. И откровенно говоря, во многом базируется на том, что предлагали энтузиасты от разработки.
На тему как можно побороть проблемы с нативной навигацией в SwiftUI, было много докладов и статей последние несколько лет. Разработчики технологии Apple сделали прототипы для WWDC19, но как будто по каким-то причинам не продумали, как это развивать: то ли кто-то из команды ушел, то ли не знают как переделать. Так и приходилось разработчикам-пользователям SwiftUI выкручиваться с помощью собственных workaround. А в этом году разработчики Apple представили свое нативное решение на базе workaround, но снова с недоделками. То, что по идее должны были сделать по умолчанию и под капотом, сделали конфигурируемым в формате конструктора из отдельных кубиков, которые можно сложить так, как нужно.
И по-прежнему, чтобы эта конструкция работала хорошо, нужны собственные наработки. Так что пока это довольно сырое решение. Хотя оно помогает ощутимо упростить проблемы, которые были — ту же утечку памяти или возврат на несколько уровней назад, Теперь же ждем доработанную версию.
В самом языке Swift мы ожидаем улучшения работы с functional builders и DSL, а еще возможности для работы с различными дженериками, ассоциированными типами (работают как дженерики, но для протоколов), что в итоге позволит оптимизировать код и SwiftUI.
Также планируется улучшение работы компиляторов в плане работы памяти. Ходят слухи, что будут дорабатывать SwiftPackage Manager, собственный менеджер по распространению зависимостей от Apple.
Разработчики языка сейчас идут по пути оптимизации и улучшению перформанса уже существующих технологий. Например, планируются улучшения и твики работы с памятью, направленные на устранение утечек, доработки и новые возможности как использовать Weak Self.
Новое есть и в работе с регулярными выражениями. На прошлом WWDC была представлена структурированная многопоточность async/await, в этом году продолжили развивать данную технологию, помимо различных примеров использования представили distibuted actors (WWDC). Так что я ожидаю дальнейших доработок async/await и акторов. И, возможно, на базе тех же самых акторов и памяти могут быть доработки, связанные с сетевым взаимодействием, сетевыми библиотеками, которые можно будет использовать в дальнейшей работе.
Так же я надеюсь, что разработчики улучшат работу с памятью в async/await. Может быть, добавят дополнительные типы задач, функционал и упростят реализацию. Тем более в этой версии они ориентируются на корутины, а корутины тоже сейчас развиваются.
Все эти новшества направлены на оптимизацию кода, чтобы он становился элегантнее и красивее. Все эти фичи (те же дженерики), упрощают решение задач в общем виде, реализацию алгоритмов в коде, который потом легче расширять и поддерживать. Это позволяет строить связи между объектами и компонентами по-новому и упрощать построение архитектуры компонентов. Если говорить про перформанс памяти, устранение утечек, ускорение компиляции и выполнения задач, то это всегда в плюс. Доработки в стиле DSL функциональных билдеров — то, что улучшит возможности реализации SwiftUI компонентов и позволит реализовывать интересные решения.
Также полезно:
Язык программирования Go почему все его любят и что на нем можно писать
Тренды iOS
Нативная разработка остается в тренде, а крутые фича типа async/await увеличивают ее популярность и привлекательность. Но несмотря на то, что большинство продолжит делать свои продакшн проект на классическом стеке, DSL декларативные фреймворки вырываются впереди. Это будет до тех пор пока Compose для Android и SwiftUI для iOS не станут настолько удобными в работе, чтобы их можно было применять на сложных проектах. Тем не менее многие продолжают вкатываться в эту технологию и рассматривают ее внедрение для своих проектов, по крайней мере точечно.
Compose для Android — это то, во что нужно вкладываться. iOS-разработчикам желательно затронуть SwiftUI и посмотреть на новые технологии. Кстати, ходят слухи про Compose для iOS. Тем, кто хочет прокачаться в нативном стэке, обязательно нужно обратить внимания на новинки iOS SDK, чтобы не терять компетенций Например, имеет смысл перейти в проектах на тот же async/await как более эффективное и удобное решение работы с многопоточностью
Судя по тому, какие технологии Apple демонстрировали на WWDC, у них идет большая ставка на различные встроенные решения по машинному обучению, работе с графикой, анимацией, звуком и камерой. Также они выпускают новые гайды и документацию по работе со своими библиотеками. Не всегда эти рецепты полезны и содержательны. Например, в видео туториале по работе с навигацией просто рассказали, какие панельки для чего, как называть кнопки и т.п. Но в целом, это показывает, что они сейчас нацелены на переработку и оптимизацию своей документации. Вот мой доклад об этом.
У таких гайдов и видеообзоров WWDC следующий посыл: мы уже все сделали, вы просто не поняли нашу идею, делайте так, как сказали мы. А насколько это удобно — другой вопрос. Для них проще объяснить, что люди не поняли их замысел, и не важно, что этот замысел не применим к продакшену.
Что в итоге
2023 год обещает быть интересным для сферы разработки. Больше всего изменений ждет языки Python, Go и Java. При этом разработчики языков продолжат курс на стабильность и борьбу с легаси. У Haskell и Rust выйдут новые релизы компиляторов, а разработчики на Kotlin с нетерпением ждут релиза Compose под iOS.</select></p></div><div class=""><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-bottom:var(--mantine-spacing-lg)" class="m_4081bf90 mantine-Group-root"><div class="m_4451eb3a mantine-Center-root" data-inline="true"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:var(--mantine-spacing-xs);color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-user "><path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0"></path><path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2"></path></svg></div><p style="margin-inline-end:var(--mantine-spacing-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Маша Даровская</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">3 года назад</p></div><div style="align-items:center" class="m_8bffd616 mantine-Flex-root __m__-_R_5dirddmiub_"><a style="display:inline-flex" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/k-chemu-gotovitsya-razrabotchikam/votes"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:var(--mantine-spacing-xs);color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-thumb-up "><path d="M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3"></path></svg></div></a><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">9</p></div></div></div><div style="background-color:var(--mantine-color-indigo-light);border:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding:var(--mantine-spacing-xl)" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Читайте также:</p><ul style="margin-inline-start:var(--mantine-spacing-lg)" class="m_abbac491 mantine-List-root"><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/biblioteka-react-review-article">Библиотека React: особенности, перспективы, ситуация на рынке труда</a></span></div></li><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/php-start">Язык программирования PHP: почему его выбирают разработчики и с чего начать изучение</a></span></div></li><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/js-s-chego-nachat">С чего начать изучение JavaScript и как это делать эффективно</a></span></div></li></ul></div><div style="margin-block:var(--mantine-spacing-xl)" class="m_3eebeb36 mantine-Divider-root" data-orientation="horizontal" role="separator"></div></div><div></div></div><style data-mantine-styles="inline">.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:100%;--col-max-width:100%;}@media(min-width: 48em){.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:16.666666666666668%;--col-max-width:16.666666666666668%;}}@media(min-width: 62em){.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:33.333333333333336%;--col-max-width:33.333333333333336%;}}</style><div class="m_96bdd299 mantine-Grid-col __m__-_R_lmiub_ mantine-visible-from-md"><div style="background-color:var(--mantine-color-indigo-light);border:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-bottom:var(--mantine-spacing-xl);padding:var(--mantine-spacing-xl);width:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div style="margin-bottom:var(--mantine-spacing-md)" class="m_4451eb3a mantine-Center-root" data-inline="true"><p style="font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Категории</p></div><ul class="m_abbac491 mantine-List-root"><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Мотивация">Мотивация</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Истории успеха">Истории успеха</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Дневник студента">Дневник студента</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Код">Код</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Карьера">Карьера</button></span></div></li></ul></div><div style="justify-content:end;margin-top:0rem;position:sticky;top:calc(5rem * var(--mantine-scale))" class="m_8bffd616 mantine-Flex-root __m__-_R_5dlmiub_"><div tabindex="0" style="cursor:pointer"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses_web_development?promo_name=program_category&promo_position=blog_post&promo_creative=card&promo_type=card"><div style="background-color:var(--mantine-color-default);border:calc(0.0625rem * var(--mantine-scale)) solid var(--mantine-color-default-border);padding-inline:var(--mantine-spacing-xl);padding-top:var(--mantine-spacing-xl);padding-bottom:var(--mantine-spacing-xs);width:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div class="m_4451eb3a mantine-Center-root" data-inline="true"><p style="font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Курсы по веб-разработке</p></div><img class="m_9e117634 mantine-Image-root" src="/vite/assets/development-BVihs_d5.png"/><p style="margin-bottom:var(--mantine-spacing-xs);text-align:right" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></a></div></div></div></div></div></div></div>
</main>
<footer class="bg-dark fw-light text-light px-3 py-5">
<div class="row small">
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 mb-3">Хекслет</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/about">О нас</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/testimonials">Отзывы</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://b2b.hexlet.io" role="button">Корпоративное обучение</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/blog">Блог</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/qna">Вопросы и ответы</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/glossary">Глоссарий</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://help.hexlet.io" data-target="_blank" role="button">Справка</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" target="_blank" rel="noopener noreferrer" href="/map">Карта сайта</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 fw-normal mb-3">Направления</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_devops">DevOps
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_data_analytics">Аналитика
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_backend_development">Бэкенд
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_programming">Программирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_testing">Тестирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_front_end_dev">Фронтенд
</a></li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Профессии</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/go">Go-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/java">Java-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python">Python-разработчик </a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/data-analytics">Аналитик данных</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/qa-engineer">Инженер по ручному тестированию</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php">РНР-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/frontend">Фронтенд-разработчик</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Навыки</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python-django-developer">Django</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/docker">Docker</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php-laravel-developer">Laravel</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/postman">Postman</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-react-developer">React</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-rest-api">REST API в Node.js</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/spring-boot">Spring Boot</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/typescript">Typescript</a>
</li>
</ul>
</div>
</div>
<hr>
<div class="row">
<div class="col-12 col-sm-4 col-md-2">
<div class="fs-4">
<ul class="list-unstyled d-flex">
<li class="me-3">
<a aria-label="Telegram" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://t.me/hexlet_ru"><span class="bi bi-telegram"></span>
</a></li>
<li>
<a aria-label="Youtube" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://www.youtube.com/user/HexletUniversity"><span class="bi bi-youtube"></span>
</a></li>
</ul>
</div>
<div class="mb-2 d-flex flex-column">
<a class="link-light text-decoration-none" rel="nofollow" href="mailto:support@hexlet.io">support@hexlet.io</a>
<a class="link-light text-decoration-none py-2" target="_blank" href="https://t.me/hexlet_help_bot">t.me/hexlet_help_bot</a>
</div>
<ul class="list-unstyled d-flex">
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://hexlet.io/locale/switch?new_locale=en" data-target="_self" role="button"><span class="my-auto">EN</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 opacity-100 external-link" rel="nofollow" data-href="https://ru.hexlet.io/locale/switch?new_locale=ru" data-target="_self" role="button"><span class="my-auto">RU</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://kz.hexlet.io/locale/switch?new_locale=kz" data-target="_self" role="button"><span class="my-auto">KZ</span>
</span></li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<ul class="list-unstyled fs-4">
<li class="mb-3">
<a class="link-light text-decoration-none" href="tel:8%20800%20100%2022%2047">8 800 100 22 47</a>
<span class="d-block opacity-50 small">бесплатно по РФ</span>
</li>
<li>
<a class="link-light text-decoration-none" href="tel:%2B7%20495%20085%2021%2062">+7 495 085 21 62</a>
<span class="d-block opacity-50 small">бесплатно по Москве</span>
</li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<div class="small mb-3">Образовательные услуги оказываются на основании Л035-01298-77/01989008 от 14.03.2025</div>
<ul class="list-unstyled small">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/legal">Правовая информация</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/offer">Оферта</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/license">Лицензия</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/contacts">Контакты</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-4 small">
<div class="mb-2">
<div>ООО «<a href="/" class="text-decoration-none link-light">Хекслет Рус</a>»</div>
<div>108813 г. Москва, вн.тер.г. поселение Московский,</div>
<div>г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3</div>
<div>ОГРН 1217300010476</div>
<div>ИНН 7325174845</div>
</div>
<hr>
<div>АНО ДПО «<a href="/" class="text-decoration-none link-light">Учебный центр «Хекслет</a>»</div>
<div>119331 г. Москва, вн. тер. г. муниципальный округ</div>
<div>Ломоносовский, пр-кт Вернадского, д. 29</div>
<div>ОГРН 1247700712390</div>
<div>ИНН 7736364948</div>
</div>
</div>
</footer>
<div id="root-assistant-offcanvas"></div>
<script src="/vite/assets/assistant-Bukl1lYy.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/MarkdownBlock-DbyKWoR_.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/shiki-V011pkdv.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-XR8Qr8kR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dist-GCHh59xr.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useIsomorphicEffect-HJ6VK0D3.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-KSp6QbZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/classnames-l6ipYlLR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/debounce-jMQ_Cf4f.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v67327c56f0bb4ef8b305cae61679db8f1769101564043" integrity="sha512-rdcWY47ByXd76cbCFzznIcEaCN71jqkWBBqlwhF1SY7KubdLKZiEGeP7AyieKZlGP9hbY/MhGrwXzJC/HulNyg==" data-cf-beacon='{"version":"2024.11.0","token":"d11015b65d11429ea6b4a2ef37dd7e0b","server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>