<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Языки программирования</title>
    <description>Заметки о фундаментальных принципах программирования и новости из мира языков программирования.</description>
    <link>https://tproger.ru/tag/programming-languages</link>
    <atom:link href="https://tproger.ru/tag/programming-languages/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Tue, 06 Oct 2026 14:45:56 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Языки программирования</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Интерпретатор Plush перешёл на регистры и ускорился до 3,37 раза</title>
      <link>https://tproger.ru/news/interpretator-plush-perewyol-na-registry-i-uskorilsya-do-3-37-raza</link>
      <comments>https://tproger.ru/news/interpretator-plush-perewyol-na-registry-i-uskorilsya-do-3-37-raza?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/interpretator-plush-perewyol-na-registry-i-uskorilsya-do-3-37-raza</guid>
      <description><![CDATA[<p>Байткод Plush переписан со стековой модели на регистровую: медиана 2,07 раза, максимум 3,37, на fib быстрее Lua на 24%. Как устроено и что не выросло.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/interpretator-plush-perewyol-na-registry-i-uskorilsya-do-3-37-raza">Интерпретатор Plush перешёл на регистры и ускорился до 3,37 раза</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Компиляторы]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 03 Sep 2026 09:32:56 GMT</pubDate>
      <content:encoded><![CDATA[<p>Максим Шевалье-Буавер, автор языка Plush и в прошлом разработчица JIT-компилятора YJIT для Ruby, 2 сентября <a href="https://pointersgonewild.com/2026-09-02-plushs-new-register-based-interpreter/">описала</a>, как переписала виртуальную машину Plush со стекового байткода на регистровый. На наборе синтетических тестов новый интерпретатор быстрее старого в 2,07 раза по медиане и до 3,37 раза в лучшем случае; на тестах fib и binary_tree Plush обогнал Lua 5.5.1 на 24% и 55%.</p><p>Практический интерес здесь не в самом Plush, минималистичном динамическом языке на Rust, а в измеренном ответе на старый вопрос: сколько стоит стековая модель байткода. Вывод автора сформулирован жёстко: «вам, вероятно, не стоит писать стековые байткод-интерпретаторы в 2026 году» (перевод редакции). Для тех, кто пишет свои DSL, скриптовые движки или встраиваемые интерпретаторы, это готовый аргумент с цифрами и с честным списком того, что не ускорилось.</p><ul><li>Медианное ускорение 2,07 раза, максимальное 3,37; геометрическое среднее 1,94 раза, из них 1,55 дала сама регистровая модель без оптимизаций, ещё 25% добавили специализированные инструкции.</li><li>Инструкция теперь 64-битное слово вместо enum на 24 байта; трёхадресная форма reg(a) = reg(b) + reg(c), до 64 000 локальных переменных, 76 опкодов.</li><li>Замеры: MacBook Air M5 (10 ядер, arm64), rustc 1.96.0, 11 чередующихся запусков на тест, медиана; повторный прогон дал те же результаты.</li><li>Против Lua 5.5.1: быстрее на 24% в fib и на 55% в binary_tree; сравнение с CPython 3.14.6 и CRuby 4.0.6 автор ограничивает оговорками о разной семантике и составе тестов.</li><li>Тесты сборщика мусора почти не изменились: регистровая модель ускоряет диспетчеризацию, а не аллокацию.</li></ul><h2>Почему стековая машина медленнее</h2><p>В стековой VM выражение a + b превращается в три инструкции: положить a, положить b, сложить. Каждая инструкция проходит через диспетчер: прочитать опкод, перейти на обработчик, сдвинуть указатель. В регистровой VM то же выражение записывается одной инструкцией с тремя операндами: куда положить и что сложить. Главный тезис статьи: в интерпретаторе самый большой рычаг производительности это число инструкций, которые нужно продиспетчеризовать, и регистровая модель сокращает его в разы. Автор цитирует это как основной вывод: «снова, в интерпретаторе главный рычаг это уменьшение числа инструкций» (перевод редакции).</p><p>Второй эффект: значения не гоняются между локальными переменными и временным стеком. Локальные переменные и есть регистры фрейма, поэтому x = y + z не требует ни загрузки, ни сохранения.</p><h2>Как устроен новый байткод</h2><p>Старая инструкция была Rust-перечислением Insn размером 24 байта. Новая упакована в 64-битное слово: опкод и операнды-регистры. Для сравнения автор приводит Lua: там 32-битное слово с 8-битными полями, отсюда лимит в 255 регистров на фрейм и 200 именованных локальных переменных. У Plush поля шире, до 64 000 локальных переменных, ценой вдвое большего размера инструкции. Всего опкодов 76. Сверху добавлены оптимизации, каждая из которых убирает инструкции: слитые сравнение-и-переход, сдвиги и маски с непосредственными операндами, свёртка констант, устранение лишних пересылок. Инлайн-кэши вынесены в отдельные таблицы, чтобы не раздувать слово инструкции.</p><p>Замену enum на 64-битное слово автор описывала <a href="https://pointersgonewild.com/2026-08-25-replacing-a-rust-enum-with-a-64-bit-word/">неделей раньше</a>, тогда это дало 17% на старой стековой модели; нынешняя статья седьмая в серии о Plush.</p><h2>Что показали замеры и где их границы</h2><p>Методика описана подробно: MacBook Air M5, rustc 1.96.0, для каждого сравнения 11 чередующихся запусков старой и новой версии, берётся медиана, весь набор прогнан дважды. Сравнивались конкретные коммиты репозитория. Неоптимизированная регистровая VM дала 1,55 раза по геометрическому среднему, оптимизации добавили ещё 25%, итого 1,94; медиана по отдельным тестам 2,07, максимум 3,37. Тесты, упирающиеся в сборщик мусора, остались на месте: диспетчеризация там не узкое место.</p><p>Сравнение с другими языками автор сопровождает оговорками: CPython 3.14.6, CRuby 4.0.6 и Lua 5.5.1 имеют другую семантику, а набор тестов синтетический. Заявлены только два прямых результата против Lua: fib на 24% быстрее, binary_tree на 55%. Отдельная демонстрация: программный рендеринг уровня Quake в 800 на 600 в один поток, около 47 кадров в секунду, с живой кучей до 1 ГБ без заметных пауз GC по оценке автора.</p><h2>Что из этого забрать в свой интерпретатор</h2><ul><li>Если вы проектируете байткод с нуля, начинайте с регистровой модели: выигрыш от неё больше, чем от любой микрооптимизации диспетчера.</li><li>Считайте инструкции, а не такты: слитые инструкции (сравнение плюс переход) и непосредственные операнды окупаются именно сокращением диспетчеризации.</li><li>Не ждите ускорения там, где узкое место в аллокации: GC-тесты Plush не изменились.</li><li>Готовые бинарники Plush есть для Linux и macOS (x86-64 и arm64) и через PowerShell-установщик для Windows x86-64; код под Apache-2.0, примеры под CC0, всё в <a href="https://github.com/maximecb/plush">репозитории</a>.</li></ul><p>Кому это не пригодится: тем, кто использует готовые рантаймы и не пишет свои. CPython, к слову, остаётся стековой машиной, и разница подходов хорошо видна на его фоне; о цене операций в самом Python мы недавно писали в связи с новой <a href="https://tproger.ru/news/vywel-python-3-15-0rc2-abi-zamorozhen-finalnyj-reliz-1-oktyabrya">3.15.0rc2</a>. Другой свежий пример переписанного интерпретатора с подробным разбором каждой оптимизации: <a href="https://tproger.ru/news/wasmi-2-0-uskoril-interpretaciyu-webassembly-v-2-2-raza">Wasmi 2.0</a>, где тоже сменили промежуточное представление и получили 2,2 раза.</p><p>Источники: <a href="https://pointersgonewild.com/2026-09-02-plushs-new-register-based-interpreter/">Pointers Gone Wild: Plush's New Register-Based Interpreter</a>, <a href="https://github.com/maximecb/plush">Репозиторий Plush</a>, <a href="https://pointersgonewild.com/2026-08-25-replacing-a-rust-enum-with-a-64-bit-word/">Предыдущая статья серии: Replacing a Rust enum with a 64-bit word</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Rust std и musl неверно округляют fmaf на редких числах</title>
      <link>https://tproger.ru/news/rust-std-i-musl-neverno-okruglyayut-fmaf-na-redkih-chislah</link>
      <comments>https://tproger.ru/news/rust-std-i-musl-neverno-okruglyayut-fmaf-na-redkih-chislah?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/rust-std-i-musl-neverno-okruglyayut-fmaf-na-redkih-chislah</guid>
      <description><![CDATA[<p>Одинаковая ошибка округления fmaf в f32::mul_add, std::simd и musl: результат отличается на один младший бит. Затронуты x86 без AVX2 и 32-битный ARM, ARM64 нет.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/rust-std-i-musl-neverno-okruglyayut-fmaf-na-redkih-chislah">Rust std и musl неверно округляют fmaf на редких числах</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Компиляторы]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 03 Sep 2026 09:20:07 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разработчик под ником Shnatsel 2 сентября <a href="https://shnatsel.github.io/implementing-fma-finding-bugs-in-std/">описал</a>, как, реализуя fused multiply-add для библиотеки fearless_simd, нашёл ошибку округления на субнормальных числах, а затем ту же ошибку обнаружил в f32::mul_add стандартной библиотеки Rust, в std::simd и в функции fmaf() из libc musl. Результат отличается от правильного на один младший бит; в исходном контрпримере это около 15 частей на миллион.</p><p>Ошибка проявляется только там, где FMA эмулируется программно: на x86 это дешёвые или старые Intel без AVX2 и процессоры Hygon без аппаратного FMA, а также 32-битный ARM и старые встраиваемые тулчейны. 64-битный ARM, по словам автора, не затронут. На практике это касается детерминированных симуляций и численных библиотек, где одинаковый код обязан давать одинаковые биты на разных машинах: сетевые игры с lockstep, физические движки, воспроизводимые вычисления. Автор честно пишет, что не знает, насколько ошибка важна в реальных программах.</p><ul><li>Ошибка: неправильное округление fmaf на субнормальных входах, отличие на один младший бит.</li><li>Затронуты f32::mul_add и std::simd в Rust, fmaf() в musl; проверка одна и та же: a = 0x97000800, b = 0x1cfff001, c = 0x00010002, верный ответ 0x00010001, ошибочный 0x00010002.</li><li>Исправлены fearless_simd и ABI f128 в компиляторе Rust на 32-битном ARM; патч в стандартную библиотеку Rust на момент публикации ждал ревью, исправления musl не влиты.</li><li>Аппаратный FMA (x86 с AVX2/FMA3, 64-битный ARM) не затронут: ошибка живёт в программной эмуляции.</li><li>Контрпример к первой версии исправления в Rust нашла языковая модель, которую автор попросил искать ошибки.</li></ul><h2>Что такое FMA и откуда берётся лишний бит</h2><p>Fused multiply-add вычисляет a*b+c с одним округлением в конце вместо двух: после умножения и после сложения. Так требует IEEE 754, и именно на это рассчитывают численные алгоритмы: одно округление даёт предсказуемую ошибку. Когда у процессора нет аппаратной инструкции, библиотека эмулирует FMA через операции с расширенной точностью и ручную коррекцию округления. Ошибка, которую нашёл автор, живёт в этой коррекции на субнормальных числах, то есть очень маленьких значениях, у которых часть мантиссы уже ушла в ноль. В таких случаях программная реализация округляла не в ту сторону.</p><p>Автор переносил формально верифицированный алгоритм и гонял его в CI на эмуляторах SIMD, добавив тесты на миллион субнормальных значений и ещё миллион случаев, требующих коррекции округления. Отдельно он попросил языковую модель искать контрпримеры, и она нашла случай, ломающий первую версию исправления для стандартной библиотеки Rust: там ошибка приводила ещё и к неправильной установке флагов исключений плавающей точки.</p><h2>Как проверить свою платформу</h2><p>Достаточно трёх чисел. Ниже проверка на C для fmaf из системной libc; в Rust то же самое делается через f32::from_bits и mul_add:</p><p>Если вывод 00010002, ваша libc или тулчейн эмулируют FMA с ошибкой. На машине с аппаратным FMA (любой современный x86 с AVX2, 64-битный ARM) результат будет верным независимо от библиотеки, поэтому проверять имеет смысл именно сборки под старое или встраиваемое железо и контейнеры на musl (Alpine) на таких хостах.</p><h2>Состояние исправлений</h2><ul><li>fearless_simd: исправлено, можно использовать как реализацию FMA без этой ошибки.</li><li>Rust, тип f128 на 32-битном ARM: ошибка ABI исправлена в компиляторе (тип доступен только в nightly).</li><li>Стандартная библиотека Rust (f32::mul_add, std::simd): патч на момент публикации ожидал ревью; номер версии с исправлением не назван.</li><li>musl: предложены минимальное исправление и полная переработка fmaf(), ни то ни другое не влито. Автор отмечает, что код FreeBSD, откуда растёт реализация, мог копироваться и в другие тулчейны.</li></ul><p>Кому это ничего не меняет: сервисам на современных x86 и ARM64, где FMA аппаратный, и коду, не зависящему от битовой точности. Кому стоит проверить: авторам физических движков и симуляций с детерминизмом между машинами, разработчикам под 32-битный ARM и тем, кто собирает статические бинарники под musl для старых серверов. Про то, как выбор libc влияет на скорость тех же бинарников, мы <a href="https://tproger.ru/news/rust-coreutils-0-11-pokazyvaet-owibku-karetkoj-i-uskoryaet-cp-na">писали</a> на примере Rust Coreutils; смежная тема из этой же недели: <a href="https://tproger.ru/news/linker-mold-perepisyvayut-na-rust-versiya-3-0-poluchit-linker-skri">переписывание линкера mold на Rust</a>. Что мы проверим дальше: когда патч попадёт в стабильный Rust и появится ли исправление в релизе musl.</p><p>Источники: <a href="https://shnatsel.github.io/implementing-fma-finding-bugs-in-std/">Shnatsel: Implementing FMA and finding bugs in C and Rust standard libraries</a>, <a href="https://lobste.rs/s/qq9jpo/implementing_fma_finding_bugs_c_rust">Обсуждение на Lobsters</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Вышел Python 3.15.0rc2: ABI заморожен, финальный релиз 1 октября</title>
      <link>https://tproger.ru/news/vywel-python-3-15-0rc2-abi-zamorozhen-finalnyj-reliz-1-oktyabrya</link>
      <comments>https://tproger.ru/news/vywel-python-3-15-0rc2-abi-zamorozhen-finalnyj-reliz-1-oktyabrya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/vywel-python-3-15-0rc2-abi-zamorozhen-finalnyj-reliz-1-oktyabrya</guid>
      <description><![CDATA[<p>Python 3.15.0rc2 — последний запланированный кандидат перед релизом 1 октября. ABI больше не меняется, значит можно собирать wheels. Разбираем JIT, tail-calling interpreter, free-threading, lazy imports, frozendict и что сделать мейнтейнеру пакета сейчас.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/vywel-python-3-15-0rc2-abi-zamorozhen-finalnyj-reliz-1-oktyabrya">Вышел Python 3.15.0rc2: ABI заморожен, финальный релиз 1 октября</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Компиляторы]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 01 Sep 2026 17:26:22 GMT</pubDate>
      <content:encoded><![CDATA[<p>1 сентября <a href="https://www.python.org/downloads/release/python-3150rc2/">вышел</a> <b>Python 3.15.0rc2</b>, второй и последний запланированный релиз-кандидат. Для большинства разработчиков это сигнал не «попробовать новинки», а «пора действовать»: с этого момента бинарный интерфейс (ABI) ветки 3.15 больше не меняется, и авторы пакетов с C-расширениями могут собирать wheels, которые будут работать с финальной версией 1 октября.</p><p>Между rc1 и rc2 вошло около 144 исправлений от 76 участников: ошибки, сборка, документация. До финала принимаются только проверенные исправления багов, новых функций не будет. Релиз-менеджер Хьюго ван Кеменаде называет rc2 финальным кандидатом и просит мейнтейнеров тестировать пакеты именно сейчас; ставить rc2 в прод команда не рекомендует.</p><ul><li>3.15.0rc2 — последний запланированный кандидат; ABI заморожен, финальный релиз назначен на 1 октября 2026 года.</li><li>JIT: в среднем на 8–9% быстрее обычного интерпретатора на x86-64 Linux и на 12–13% быстрее tail-calling interpreter на macOS с Apple Silicon; разброс по тестам от замедления на 15% до ускорения больше чем вдвое; цифры предварительные.</li><li>Официальные сборки для Windows x64 используют tail-calling interpreter, сборки для macOS по умолчанию поддерживают free-threading.</li><li>Новое в языке: ленивые импорты через ключевое слово lazy (PEP 810), встроенные типы frozendict (PEP 814) и sentinel (PEP 661).</li><li>Мейнтейнерам: собирайте wheels под 3.15 и гоняйте тесты на rc2; после 1 октября исправление попадёт только в 3.15.1.</li></ul><h2>Что означает «ABI заморожен»</h2><p>ABI — набор правил, по которым скомпилированный код (numpy, pydantic-core, любой пакет с C или Rust внутри) обращается к интерпретатору: размеры структур, порядок полей, сигнатуры функций. Пока ABI меняется, wheel, собранный под бету, может упасть на финальной версии. Теперь команда CPython обещает: «There will be no ABI changes from this point forward in the 3.15 series» (перевод редакции: «С этого момента в серии 3.15 изменений ABI не будет»). Значит, wheel, собранный сегодня под rc2, останется валидным для 3.15.0 и всех 3.15.x.</p><p>На практике это точка, после которой авторы популярных библиотек выкладывают на PyPI сборки для новой версии. Если ваш проект зависит от пакета, который до сих пор не собран под 3.15, самое время открыть issue или прислать PR: у мейнтейнеров есть месяц.</p><h2>Сколько на самом деле даёт JIT</h2><p><a href="https://docs.python.org/3.15/whatsnew/3.15.html">Документация «What's New»</a> приводит две цифры, и их важно не смешивать. На x86-64 Linux JIT даёт 8–9% ускорения в среднем геометрическом относительно обычного интерпретатора. На macOS с процессорами Apple JIT сравнивают с более быстрым tail-calling interpreter, и там выигрыш 12–13%. Разброс по отдельным тестам огромный: от замедления примерно на 15% до ускорения больше чем вдвое. Документация подчёркивает, что цифры предварительные и до финала могут измениться. Так что «Python стал на 10% быстрее» — неверное обобщение: на вашем коде может быть и минус.</p><p>Tail-calling interpreter — другой способ реализовать цикл исполнения байткода, где каждая инструкция вызывает следующую хвостовым вызовом вместо большого switch. В 3.15 именно он идёт в официальных 64-битных сборках для Windows. Официальные сборки для macOS по умолчанию получают поддержку free-threading, то есть режим без GIL остаётся экспериментальным, но доступным без пересборки.</p><h2>Три новинки языка, которые вы заметите</h2><p><b>Ленивые импорты</b> (PEP 810): ключевое слово lazy перед import откладывает загрузку модуля до первого обращения. Это ответ на старую проблему медленного старта CLI-утилит, которые тянут тяжёлые зависимости «на всякий случай».</p><p><b>frozendict</b> (PEP 814) — неизменяемый словарь, встроенный в язык: если все его ключи и значения хешируемы, его можно использовать как ключ другого словаря, и его безопасно отдавать наружу как константу. <b>sentinel</b> (PEP 661) закрывает старый обходной приём с _MISSING = object() для «значение не передано»: у таких маркеров появляется нормальный repr и корректное поведение при pickle.</p><h2>Что сделать до 1 октября</h2><ul><li>Поставьте rc2 рядом с рабочей версией: официальные установщики и исходники на python.org; в uv или pyenv сначала проверьте, что версия появилась в их списках (uv python list), и прогоните тесты проекта.</li><li>Если у вас пакет с расширениями: соберите wheels под 3.15 и выложите на PyPI; ABI больше не изменится.</li><li>Замерьте свой код с JIT и без: флаги сборки и переменные окружения описаны в документации; средним цифрам не верьте.</li><li>Проверьте зависимости на совместимость с ленивыми импортами: код, который полагается на побочные эффекты при импорте, с lazy сломается.</li><li>Нашли регрессию — сообщайте в трекер CPython сейчас: после релиза исправление уйдёт только в 3.15.1.</li><li>Если пользуетесь корпоративным зеркалом PyPI, убедитесь, что оно синхронизирует wheels с тегом cp315: первые сборки под 3.15 появятся в ближайшие недели.</li></ul><h2>Контекст</h2><p>Разработка 3.15 началась 7 мая 2025 года, первая бета вышла 7 мая 2026-го, rc1 — 4 августа. После финального релиза ветка получит около двух лет исправлений ошибок и затем ещё примерно три года обновлений безопасности, по обычному графику CPython.</p><p>Источники: <a href="https://www.python.org/downloads/release/python-3150rc2/">Python 3.15.0rc2 (python.org)</a>, <a href="https://docs.python.org/3.15/whatsnew/3.15.html">What's New in Python 3.15</a></p><p>Изображение на обложке: Python Software Foundation</p>]]></content:encoded>
    </item>
    <item>
      <title>Void в C: четыре значения ключевого слова</title>
      <link>https://tproger.ru/articles/void-v-c-chetyre-znacheniya-klyuchevogo-slova</link>
      <comments>https://tproger.ru/articles/void-v-c-chetyre-znacheniya-klyuchevogo-slova?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/void-v-c-chetyre-znacheniya-klyuchevogo-slova</guid>
      <description><![CDATA[<p>Разбираем, зачем в C и C++ void означает «ничего» четырьмя разными способами: возврат, параметры, указатели и приведение. С примерами и историей от автора Bourne Shell.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/void-v-c-chetyre-znacheniya-klyuchevogo-slova">Void в C: четыре значения ключевого слова</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 22 Aug 2026 08:51:29 GMT</pubDate>
      <content:encoded><![CDATA[<p>В C всего 32 ключевых слова, и void кажется одним из самых простых: оно обозначает «ничего». Но если присмотреться, это «ничего» играет в языке как минимум четыре разные роли. Более того, именно void, а не печально известный static, можно считать самым «перегруженным» ключевым словом в C: у static три смысла, а у void — четыре.</p><p>Разбираем, откуда взялось это слово — его придумал создатель Bourne Shell Стивен Борн — и зачем оно нужно в современном C и C++.</p><p>— В C и C++ ключевое слово void используется четырьмя способами: возвращаемый тип, отсутствие параметров, указатель на неизвестный тип и явное приведение к «ничему».</p><p>— Слово void предложил Стивен Борн, автор Bourne Shell; до этого функция без возвращаемого значения просто не указывала тип.</p><p>— f(void) и f() — разные вещи в C: первая форма явно говорит «параметров нет».</p><p>— void* — универсальный указатель, но разыменовывать его нельзя.</p><p>— Приведение к void помогает подавить предупреждения о неиспользуемом возвращаемом значении или параметре.</p><h2>Краткая история: как появилось void</h2><p>В самой ранней версии C, так называемом K&amp;R-диалекте, функция без возвращаемого значения писалась без типа. Если возвращаемый тип не указан, компилятор считал, что функция возвращает int. Параметры тоже можно было описывать отдельно от списка аргументов — прямо как в старых учебниках:</p><p>Такой код сегодня выглядит экзотично, но именно так писали до появления прототипов функций. При этом компилятор всё равно генерировал машинную команду возврата и передавал вызывающей стороне какое-то мусорное значение. Хотя вызывающий не ждал результата, это было неэффективно и неочевидно.</p><p>Это раздражало Стивена Борна — да, того самого, который создал Bourne Shell. Он пожаловался Деннису Ритчи, и Ритчи увидел выгоду: если явно сказать, что функция ничего не возвращает, можно сэкономить одну машинную инструкцию. Так в C появилось слово void.</p><p>Позже void обросло новыми смыслами и перекочевало в C++, C#, Java, D и Swift — хотя Swift предпочитает писать его с заглавной буквы: Void.</p><h2>Четыре смысла void</h2><h3>1. Функция не возвращает значение</h3><p>Самый известный смысл. Вместо того чтобы молча возвращать int, функция явно объявляет: «я работаю ради побочного эффекта».</p><p>В современном C и C++ большинство функций без возвращаемого значения пишутся именно так. Это делает намерения автора очевидными и помогает компилятору ловить ошибки: если вы случайно попытаетесь использовать результат void-функции, получите ошибку компиляции.</p><h3>2. Явное отсутствие параметров: f(void)</h3><p>В C++ пустые скобки f() означают «функция не принимает параметров». В K&amp;R C те же пустые скобки означали лишь «это функция», без всякой информации о параметрах. Чтобы сохранить совместимость со старым кодом и одновременно ввести прототипы, в C придумали запись f(void):</p><p>Разница тонкая, но важная. Если в C объявить void foo();, а потом вызвать foo(42), компилятор не проверит количество и типы аргументов — это старая K&amp;R-форма. Запись void foo(void); защищает от таких ошибок.</p><p><b>Совет:</b><br />Всегда пишите int main(void) в C. Форма void main() не соответствует стандарту и может ломать работу runtime.</p><h3>3. Указатель на неизвестный тип: void*</h3><p>Объект типа void создать нельзя, но указатель на void — можно. void* — это универсальный указатель: он может хранить адрес данных любого типа. В отличие от char*, который в K&amp;R C выполнял ту же роль, void* чётко говорит: «тип здесь не важен».</p><p>Практически все функции динамического выделения памяти — malloc, calloc, realloc — возвращают void*. В C это удобно: компилятор неявно приводит void* к целевому типу. В C++ такой неявный каст запрещён, поэтому там пишут int* arr = (int*)malloc(...) или, что лучше, используют new.</p><h3>4. Приведение к void</h3><p>Последний смысл — самый неочевидный. Приведение выражения к void означает: «я намеренно игнорирую результат». Это полезно в двух случаях.</p><p>Первый: отбрасывание возвращаемого значения функции. Например, printf возвращает число напечатанных символов, но обычно оно не нужно:</p><p>Такая запись читается как «вызываем функцию только ради побочного эффекта». Большинство компиляторов и так не ругаются на неиспользованный результат printf, но для функций с атрибутом [[nodiscard]] приведение к void — единственный легальный способ проигнорировать результат.</p><p>Второй случай — неиспользуемый параметр функции. В callback-интерфейсах часто приходится принимать аргументы, которые конкретная реализация не использует:</p><p>В C23 можно просто опустить имя параметра, а в C++ — всегда можно было. Но приведение к void работает в любом стандарте и явно показывает намерение.</p><h2>Практика: что проверить в своём коде</h2><ul><li>В C пишите int main(void), а не void main().</li><li>Для функций без параметров используйте f(void), особенно в заголовочных файлах.</li><li>Не разыменовывайте void* — сначала приведите указатель к конкретному типу.</li><li>Если игнорируете возвращаемое значение, добавьте (void) — это помогает при включённых предупреждениях.</li><li>Не пытайтесь объявить переменную типа void: объект «ничего» в C не существует.</li></ul><blockquote>All uses of void are valid in both C and C++. If that weren't the case, I would have said so.</blockquote><h2>Выводы</h2><p>void — не просто синтаксический сахар для «пустоты». Это ключевое слово, которое помогает компилятору различать четыре разных ситуации: отсутствие результата, отсутствие параметров, неизвестный тип данных и намеренное игнорирование значения.</p><p>Исторически void появилось из инженерной прагматики: сэкономить одну инструкцию возврата и сделать код понятнее. Сегодня оно остаётся незаменимым инструментом — особенно если вы пишете на C, работаете с системными библиотеками или объясняете студентам, почему void main() — не лучшая идея.</p><p>Источник: Paul J. Lucas, <a href="https://dev.to/pauljlucas/into-the-void-4h69">«Into the Void»</a>, Dev.to. Дополнительный справочник по void — <a href="https://en.cppreference.com/w/c/language/void">cppreference.com</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Лучшие модели для генерации кода в июле 2026: как выбрать под задачу</title>
      <link>https://tproger.ru/articles/luchwie-modeli-dlya-generacii-koda-v-iyule-2026-kak-vybrat-pod-za</link>
      <comments>https://tproger.ru/articles/luchwie-modeli-dlya-generacii-koda-v-iyule-2026-kak-vybrat-pod-za?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/luchwie-modeli-dlya-generacii-koda-v-iyule-2026-kak-vybrat-pod-za</guid>
      <description><![CDATA[<p>SWE-bench Verified уперся в 96%, поэтому выбор модели теперь решают цена, доступность и SWE-bench Pro. Разбираем лидеров и аутсайдеров июля 2026.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/luchwie-modeli-dlya-generacii-koda-v-iyule-2026-kak-vybrat-pod-za">Лучшие модели для генерации кода в июле 2026: как выбрать под задачу</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 03 Aug 2026 04:10:44 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы сейчас выбираете языковую модель для написания кода, цифры на бенчмарках больше не дают прямого ответа. Лидеры показывают 95-96% на SWE-bench Verified, разница между ними укладывается в статистическую погрешность, а реальная стоимость и доступность API различаются в десятки раз.</p><p>В августе 2026 года рынок моделей для генерации кода уперся в новый потолок: Anthropic выпустила Claude Opus 5, OpenAI показала GPT-5.6 Sol в ограниченном доступе, а китайские разработчики предложили открытые веса с результатами уровня флагманов прошлого квартала. Разбираем, что из этого реально купить и как не переплатить.</p><h2>Что такое SWE-bench и почему он стал главным аргументом</h2><p>SWE-bench Verified — это набор из 500 реальных задач с GitHub: модели видят описание бага и должны сгенерировать патч, который проходит существующие тесты проекта. Не задачи из LeetCode, а настоящие репозитории с чужой архитектурой и зависимостями. Для оценки кодогенерации это ближе к продакшену, чем большинство альтернатив.</p><p>С апреля 2026 года Verified «насытился»: топ выстроился в узкий коридор 95-96%. Поэтому внимание переключилось на SWE-bench Pro — 1865 более сложных задач из 41 репозитория на нескольких языках. Именно здесь видна разница между «хорошо пишет функции» и «разбирается в большом коде».</p><p>Claude Opus 5 — лучший баланс качества, цены и доступности: 96,0% на SWE-bench Verified и $5/$25 за миллион токенов.</p><p>Claude Mythos 5 лидирует на SWE-bench Pro (80,3%), но доступен лишь ~100 партнёрам программы Glasswing.</p><p>GPT-5.6 Sol теоретически первый по Verified (96,2%), но цифра не подтверждена OpenAI, а доступ ограничен ~20 партнёрами.</p><p>GLM-5.2 — сильнейший открытый вариант: 62,1% на SWE-bench Pro под лицензией MIT, но сжигает в 2-3 раза больше выходных токенов.</p><p>Gemini 3.1 Pro и DeepSeek V4-Pro предлагают ~80% на Verified за $2-3 за миллион токенов — лучшее соотношение цена/качество для массовых задач.</p><h2>Как устроена верхушка рейтинга</h2><h3>Claude Opus 5 — практичный выбор</h3><p>Anthropic выпустила <a href="https://www.anthropic.com/">Claude Opus 5</a> 24 июля 2026 года по цене старого Opus 4.8: $5 за входящий и $25 за исходящий миллион токенов. На SWE-bench Verified модель набрала 96,0%, а на более сложном SWE-bench Pro — 79,2%. Этого хватает для большинства инженерных задач, а цена остаётся вдвое ниже, чем у Mythos-класса.</p><p>Главное ограничение Opus 5 — уступка собственным старшим собратьям на Pro. Если ваша работа связана с большими межрепозиторными изменениями, Mythos 5 и Fable 5 дают 80,0-80,3%, но вы платите $10/$50 за миллион токенов и, в случае Mythos, ещё и проходите отбор в программу Glasswing.</p><h3>Mythos 5 и Fable 5 — потолок, до которого не дотянуться</h3><p>В июне Anthropic представила <a href="https://www.anthropic.com/news/claude-fable-mythos-5">Claude Fable 5 и Claude Mythos 5</a> — первые модели, преодолевшие 90% на SWE-bench Verified. Обе показывают 95,0% Verified, а Mythos 5 держит лучший результат на Pro — 80,3%. Fable 5 доступен через обычный API любому клиенту, готовому платить Mythos-тариф.</p><p>Mythos 5 закрыт примерно для 100 партнёров в рамках программы Glasswing, в основном для исследований в области кибербезопасности и биобезопасности. Это важный нюанс для российских команд: даже если у вас есть бюджет, доступ к модели зависит от одобрения Anthropic, а не только от платёжной карты.</p><h3>GPT-5.6 Sol — красивое число, которое никто не проверил</h3><p><a href="https://openai.com/">OpenAI</a> выпустила GPT-5.6 Sol в ограниченном превью для примерно 20 партнёров, прошедших правительственную проверку. Компания не опубликовала официальных результатов SWE-bench, но сторонние трекеры, включая vals.ai, сообщают 96,2% на Verified.</p><p>Пока это не результат, на который можно ориентироваться при выборе инструмента. Цена, если доступ появится, составляет $5/$30 за миллион токенов — чуть дороже Opus 5. Для российских пользователей добавляется и стандартная проблема доступа к API OpenAI, которая уже несколько лет сильнее ограничена, чем у Anthropic или Google.</p><h3>GLM-5.2 — открытые веса с реальными цифрами</h3><p><a href="https://www.zhipu.ai/">Zhipu AI</a> выпустила GLM-5.2 под лицензией MIT. Модель показывает 62,1% на SWE-bench Pro — выше, чем GPT-5.5 (58,6%), и выше предшественника GLM-5.1 (58,4%). Контекстное окно составляет 1 млн токенов, а обучение проходило на чипах Huawei Ascend, а не NVIDIA.</p><p>Цена API — $1,40/$4,40 за миллион токенов, но на практике GLM-5.2 расходует около 43 000 выходных токенов на одну кодинговую задачу против 16 000 у GPT-5.5. Поэтому итоговая стоимость за выполненную задачу ближе к флагманам, чем кажется по прайс-листу. Главное преимущество — возможность скачать веса и развернуть модель у себя. Для команд с требованиями к локальному хранению кода это может перевесить экономию на API.</p><h3>Gemini 3.1 Pro и DeepSeek V4-Pro — флагманы за разумные деньги</h3><p><a href="https://deepseek.ai/">DeepSeek V4-Pro</a> и <a href="https://deepmind.google/technologies/gemini/">Gemini 3.1 Pro</a> показывают по 80,6% на SWE-bench Verified — ровно тот уровень, который в апреле считался потолком. DeepSeek стоит $1,74/$3,48 и работает с полностью открытыми весами. Gemini 3.1 Pro стоит $2/$12, имеет окно в 1 млн токенов и 91,7% на LiveCodeBench.</p><p>Для массовой разработки — ревью кода, генерация тестов, исправление типовых багов — этих моделей достаточно с запасом. Они не берут первое место, но разница в цене делает их удобной рабочей лошадкой, особенно в интеграциях, где не нужен последний процент качества.</p><h2>Как читать таблицу моделей</h2><p>Результаты можно свести к трём осям: качество на Verified, качество на Pro и реальная доступность. Если смотреть только на Verified, четыре модели стоят плечом к плечу в диапазоне 95,0-96,2%. Разница появляется, когда добавляешь цену, условия доступа и более жёсткий бенчмарк.</p><p><b>Как ориентироваться в ценах:</b><br />Цены указаны за 1 млн входящих / 1 млн исходящих токенов. На практике важнее стоимость за <b>завершённую задачу</b>: одна модель может быть дешевле за токен, но генерировать в 2-3 раза больше текста.</p><p>Вот как распределяются роли:</p><ul><li>Claude Opus 5 — универсальный выбор, если нужен API без листов ожидания и цена ниже Mythos.</li><li>Claude Mythos 5 — для команд с доступом к Glasswing, которые решают самые сложные многофайловые задачи.</li><li>GLM-5.2 — для self-hosted сценариев и требований к открытым весам.</li><li>DeepSeek V4-Pro и Gemini 3.1 Pro — для высоконагруженных сценариев, где важна цена за токен.</li></ul><h2>Методология: почему Verified больше не разделяет лидеров</h2><p>Авторы обзора используют три сигнала. SWE-bench Verified даёт понять, справляется ли модель с реальными багами. SWE-bench Pro проверяет, как модель работает с более крупными и разнообразными репозиториями. Третий сигнал — это статус доступа и независимость проверки: официальная цифра, сторонний трекер или собственная оценка вендора.</p><p>Важно понимать, что ни один бенчмарк не измеряет продуктивность разработчика напрямую. Модель может отлично генерировать патчи и при этом плохо объяснять архитектуру или наоборот. Поэтому цифры — это фильтр первого порядка: они отсекают явно слабые варианты, но конечный выбор зависит от вашего стека, размера репозиториев и процесса ревью.</p><h2>Историческая динамика: бенчмарки устаревают быстрее моделей</h2><p>В марте 2025 года лидером был Claude 3.5 Sonnet с около 49%. В январе 2026 четыре модели одновременно преодолели 78%. В апреле Verified «сел» на плато 76-81%, и внимание перешло на Pro. В июне Mythos-класс впервые превысил 90%, а к концу июля Opus 5 почти догнал его по цене вдвое ниже.</p><p>Этот цикл повторяется: бенчмарк насыщается, появляется более сложная версия, цена становится главным разделителем. Для команд это означает, что не нужно гнаться за каждым новым релизом. Достаточно раз в квартал пересматривать соотношение цена/качество и проверять, не появился ли модель с доступным API, который закрывает 80% ваших задач за меньшие деньги.</p><h2>Что выбрать: чек-лист для команды</h2><p>Чтобы не утонуть в таблицах, можно пройти по четырём вопросам:</p><ol><li>Есть ли у вас доступ к API Anthropic, OpenAI или Google? Если нет, открытые веса DeepSeek или GLM-5.2 остаются единственной рабочей опцией.</li><li>Решаете ли вы локальные баги в одном репозитории или межрепозиторные изменения? Для второго важнее SWE-bench Pro.</li><li>Какой бюджет на 1 млн исходящих токенов? При высоких объёмах разница между $25 и $3 за миллион ощутима уже на первой неделе.</li><li>Нужно ли хранить код внутри периметра? В этом случае self-hosted GLM-5.2 или DeepSeek выигрывают у облачных API независимо от бенчмарков.</li></ol><blockquote>Когда Verified перестаёт разделять модели, выбор сдвигается с 'кто умнее' на 'кого я могу купить и сколько это будет стоить за реальную задачу'.</blockquote><h2>FAQ</h2><h2>Выводы</h2><p>В июле 2026 года рынок моделей для генерации кода разделился на два лагеря. Первый — закрытые флагманы, которые достигли потолка Verified и теперь конкурируют по цене и доступности. Второй — открытые и полуоткрытые модели, которые отстают по верхним цифрам, но выигрывают у крупных вендоров в контроле над данными и стоимости инфраструктуры.</p><p>Для российских команд ключевой вопрос не в том, какая модель «умнее», а в том, какая из них реально доступна, не требует сложных схем оплаты и укладывается в бюджет. В этом контексте Claude Opus 5, DeepSeek V4-Pro и GLM-5.2 выглядят наиболее практичными вариантами — каждый под свои ограничения.</p><p>Источник: обзор <a href="https://awesomeagents.ai/capabilities/code-generation/">Best AI Models for Code Generation — July 2026</a> на Awesome Agents. Данные по бенчмаркам и ценам приведены по состоянию на 29 июля 2026 года.</p>]]></content:encoded>
    </item>
    <item>
      <title>Кроах-Хартман: Rust поможет Linux и делает кодинг веселее</title>
      <link>https://tproger.ru/news/kroah-hartman-rust-pomozhet-linux-i-delaet-koding-veselee</link>
      <comments>https://tproger.ru/news/kroah-hartman-rust-pomozhet-linux-i-delaet-koding-veselee?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/kroah-hartman-rust-pomozhet-linux-i-delaet-koding-veselee</guid>
      <description><![CDATA[<p>Грег Кроах-Хартман заявил, что Rust становится частью Linux и поможет убрать до 80% уязвимостей ядра. Рассказываем, что это значит.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/kroah-hartman-rust-pomozhet-linux-i-delaet-koding-veselee">Кроах-Хартман: Rust поможет Linux и делает кодинг веселее</a>»</p>]]></description>
      <category><![CDATA[Безопасный код]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Операционные системы]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 20 Jul 2026 08:09:48 GMT</pubDate>
      <content:encoded><![CDATA[<p>Один из главных мейнтейнеров стабильной ветки ядра Linux <b>Грег Кроах-Хартман</b> заявил, что Rust уже не эксперимент, а часть долгосрочной стратегии экосистемы. По его словам, переход на Rust поможет убрать львиную долю рутинных уязвимостей ядра и облегчит жизнь мейнтейнерам.</p><p>На конференции <b>Open Source Summit India 2026</b> в Мумбаи Кроах-Хартман выступил с докладом <a href="https://www.youtube.com/watch?v=1nYl_9wBBhE&amp;list=PLEAGIV5X5B1U&amp;index=19">«Rust and Linux: How the Rust Language is Going to Help Linux Succeed»</a>. В нём он признался, что поначалу относился к языку скептически и считал, что всё необходимое уже есть в C. Сейчас он считает иначе: Rust действительно делает программирование интереснее и безопаснее.</p><ul><li>Грег Кроах-Хартман назвал Rust постоянной частью Linux, а не временным экспериментом.</li><li>По его оценке, около 80% уязвимостей ядра за последние 25 лет можно было бы поймать на этапе компиляции Rust.</li><li>Linux получает около 13 CVE в день и почти 9 изменений в час на протяжении десяти лет и более.</li><li>Binder — ключевой механизм IPC Android — уже имеет параллельную реализацию на Rust, а C-версия скоро уйдёт.</li><li>Git и ряд других крупных проектов также движутся в сторону Rust.</li></ul><h2>От скептицизма к поддержке</h2><p>Кроах-Хартман рассказал, что несколько лет назад друг советовал ему попробовать Rust, но он отмахнулся: C казался достаточным. Со временем он изменил мнение. «Он был прав. Я должен был сделать это тогда. Rust на самом деле весёлый. Он заставляет программирование быть весёлым», — сказал мейнтейнер.</p><p>Главное преимущество языка в ядерной разработке — владение и типизация, которые убирают массу мелких ошибок: непроверенные указатели, забытые разблокировки, неправильная очистка ресурсов. Именно такие баги, по словам Кроах-Хартмана, составляют большинство ежедневных CVE.</p><h2>Масштаб проблемы</h2><p>Linux развивается с огромной скоростью. Кроах-Хартман привёл цифры: ядро набирает примерно <b>девять изменений в час</b> уже больше десяти лет, а количество публично раскрываемых уязвимостей держится на уровне <b>около 13 CVE в день</b>. Большая часть из них — не сложные атаки, а простые ошибки в C-коде.</p><blockquote>Я видел каждую CVE ядра за последние 25 лет. Думаю, 80% исчезли бы просто потому, что Rust поймал бы их.</blockquote><h2>Что уже меняется в ядре</h2><p>Rust постепенно становится обязательным выбором для отдельных подсистем. Кроах-Хартман отметил, что <b>новые драйверы некоторых подсистем будут приниматься только на Rust</b>. Яркий пример — Binder, межпроцессный механизм Android, от которого зависят миллиарды устройств. В ядре уже существуют параллельные реализации Binder на C и Rust, и C-версия «скоро исчезнет».</p><p>Это означает, что Rust станет фундаментом не только для экспериментальных модулей, но и для ключевой инфраструктуры мобильной экосистемы.</p><p><b>Контекст:</b><br />Binder — это механизм межпроцессного взаимодействия (IPC) в Android. Он позволяет приложениям и системным сервисам безопасно обмениваться данными. Переписывание Binder на Rust напрямую влияет на безопасность и стабильность почти всех Android-устройств.</p><h2>Выводы</h2><p>Позиция Кроах-Хартмана — ещё один сигнал того, что Rust перешёл из разряда «перспективного языка» в разряд инфраструктурного инструмента. Если оценка в 80% CVE верна, массовый переход на Rust в ядре может существенно снизить количество исправлений безопасности и освободить время мейнтейнеров для сложных логических задач.</p><p>Источник: <a href="https://developers.slashdot.org/story/26/07/20/0417244/rust-will-help-linux-succeed-and-makes-coding-fun-says-greg-kroah-hartman">Slashdot</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Rust, Go или Zig: как выбрать язык для высоконагруженного бэкенда в 2026 году</title>
      <link>https://tproger.ru/articles/rust-go-ili-zig-kak-vybrat-yazyk-dlya-vysokonagruzhennogo-bekend</link>
      <comments>https://tproger.ru/articles/rust-go-ili-zig-kak-vybrat-yazyk-dlya-vysokonagruzhennogo-bekend?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/rust-go-ili-zig-kak-vybrat-yazyk-dlya-vysokonagruzhennogo-bekend</guid>
      <description><![CDATA[<p>Сравниваем Rust, Go и Zig для высоконагруженных сервисов: производительность, сложность, экосистема и реальные кейсы миграции.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/rust-go-ili-zig-kak-vybrat-yazyk-dlya-vysokonagruzhennogo-bekend">Rust, Go или Zig: как выбрать язык для высоконагруженного бэкенда в 2026 году</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Высокие нагрузки]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Архитектура приложений]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 09 Jul 2026 06:41:01 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы строите высоконагруженный бэкенд, выбор языка сегодня сводится к тройке: Rust, Go и Zig. У каждого — своя цена, своя скорость разработки и свои сценарии, в которых он выигрывает. Разбираем, как не ошибиться и когда смешивать их в одном проекте.</p><p>Речь пойдёт не о сравнении синтаксиса в вакууме, а о бэкенд-сервисах: API, шлюзах, обработке событий, парсинге данных и всём, что работает под нагрузкой. В статье — авторский взгляд на материал блога инженера Pooya Golchian, дополненный российским контекстом и поправками на реальное состояние экосистем.</p><p><b>Go</b> остаётся стандартным выбором для большинства микросервисов: быстрая компиляция, простота найма, огромная экосистема.</p><p><b>Rust</b> выигрывает там, где важны предельная задержка и контроль над памятью, но требует опытной команды и времени на обучение.</p><p><b>Zig</b> подходит для узких, критичных к производительности участков и для интеграции с существующим C-кодом, но экосистема пока незрелая.</p><p>В больших системах работает гибридный подход: Go для скорости разработки, Rust/Zig для горячих путей.</p><p>Мигрировать стоит только после профилирования: оптимизация без замеров обычно дороже, чем выгода.</p><h2>Почему именно эти три языка</h2><p>В 2026 году для нового backend-проекта по-прежнему можно взять Java, C#, Python или Node.js. Но если речь заходит о высоких нагрузках, низкой задержке и контроле над ресурсами, внимание смещается к трём игрокам.</p><ul><li><b>Rust</b> — язык с владением и заимствованием, дающий безопасность памяти без сборщика мусора.</li><li><b>Go</b> — язык с простой моделью конкурентности, статической линковкой и минималистичной философией.</li><li><b>Zig</b> — язык в духе C, но с современной системой сборки, comptime и явным управлением памятью.</li></ul><p>Все трое компилируются в нативный код, дают один бинарник на выходе и не требуют виртуальной машины. Именно это отличает их от Java, C# и Python на старте.</p><h2>Rust: максимум производительности, максимум сложности</h2><h3>Сильные стороны</h3><ul><li>Безопасность памяти на этапе компиляции — нет use-after-free, data races и большинства утечек.</li><li>Нулевая стоимость абстракций: высокоуровневый код часто компилируется так же эффективно, как ручной C.</li><li>Мощная модель конкурентности поверх tokio или async-std.</li><li>Зрелая экосистема: axum, actix-web, serde, sqlx.</li></ul><h3>Слабые стороны</h3><ul><li>Крутая кривая обучения: borrow checker требует перестройки мышления.</li><li>Долгая компиляция: полная пересборка крупного проекта занимает десятки секунд и минуты.</li><li>Меньше кадров на рынке, чем у Go или Java.</li><li>Итерации медленнее: каждая ошибка компилятора — это время на переделку.</li></ul><h3>Когда выбирать Rust</h3><p>Rust логичен, если вы строите инфраструктуру — прокси, базы данных, очереди, edge-сервисы — или если профилирование показывает, что горячий путь съедает CPU и память. Примеры из продакшена: Cloudflare использует Rust на edge, Discord переписал на Rust часть read-path сервисов.</p><h2>Go: скорость разработки в масштабе</h2><h3>Сильные стороны</h3><ul><li>Компиляция за секунды и один статический бинарник для деплоя.</li><li>Встроенные горутины и каналы — простая, но мощная конкурентность.</li><li>Отличная стандартная библиотека и быстрое тестирование через go test.</li><li>Большая база инженеров и проверенные практики в крупных компаниях.</li></ul><h3>Слабые стороны</h3><ul><li>Сборщик мусора может давать всплески задержек, хотя в последних версиях паузы сокращаются.</li><li>Меньше контроля над расположением памяти и размером структур.</li><li>Пиковая пропускная способность ниже, чем у Rust и Zig, на CPU-bound задачах.</li><li>Система типов и обработка ошибок минималистичны — кому-то этого достаточно, кому-то не хватает.</li></ul><h3>Когда выбирать Go</h3><p>Go — выбор по умолчанию для команд из 5–50 человек, которым нужно быстро запускать CRUD-сервисы, API-шлюзы и data pipeline. Uber, Google и Яндекс активно используют Go в микросервисах. Если главная метрика — time to market, а не последний процент производительности, Go обычно выигрывает.</p><h2>Zig: новый игрок с C-душой</h2><h3>Сильные стороны</h3><ul><li>Производительность уровня C с более современным синтаксисом и системой сборки.</li><li>comptime — выполнение кода на этапе компиляции для генерации оптимизированных структур.</li><li>Прямое взаимодействие с C без FFI-слоёв.</li><li>Маленькие быстрые бинарники и явное управление памятью.</li></ul><h3>Слабые стороны</h3><ul><li>Экосистема backend-фреймворков и библиотек пока существенно меньше, чем у Rust и Go.</li><li>Сообщество и количество инженеров на рынке ограничены.</li><li>Ручное управление памятью перекладывает ответственность на разработчика.</li><li>Некоторые части языка и стандартной библиотеки всё ещё эволюционируют.</li></ul><h3>Когда выбирать Zig</h3><p>Zig хорош, когда нужна C-производительность, но с более удобным инструментарием, или когда приходится интегрироваться с существующим C-кодом. Пример из продакшена: финансовая база данных TigerBeetle написана на Zig. Для универсального backend в 2026 году Zig ещё рано называть mainstream-выбором.</p><h2>Сравнение в цифрах</h2><p>Ниже — иллюстративные цифры из оригинального материала, полученные на AWS c7g.2xlarge (Graviton3). Относитесь к ним как к точке отсчёта, а не как к гарантии для вашего сервиса: в реальности большее значение имеют I/O, запросы к базе данных и сетевая задержка.</p><p><b>Бенчмарки:</b><br />HTTP throughput — Rust 892K req/s, Go 734K req/s, Zig 812K req/s.<br />JSON-сериализация — Rust 1,2M/s, Go 890K/s, Zig 1,1M/s.<br />Память на 10K соединений — Rust 45MB, Go 78MB, Zig 38MB.<br />Размер бинарника — Rust 8,2MB, Go 12,4MB, Zig 6,1MB.<br />Время компиляции с нуля — Rust 42s, Go 3,2s, Zig 18s.<br />P99 latency — Rust 2,1ms, Go 3,8ms, Zig 2,4ms.</p><h2>Реальные истории миграции</h2><h3>Discord: Go → Rust</h3><p>Discord переводил read-path сервисы с Go на Rust из-за пауз сборщика мусора, которые проявлялись в хвостовых задержках. По данным компании, throughput вырос в несколько раз, а tail latency снизилась. Ключевой вывод: мигрировать стоит только горячие пути, а не весь сервис целиком.</p><h3>Uber: Python → Go</h3><p>Uber мигрировал часть микросервисов с Python на Go, чтобы обойти ограничения GIL и упростить масштабирование. Переход занял годы, но зато проходил постепенно: Go-совместимость и простота языка позволяли быстро обучать команду.</p><h3>TigerBeetle: C++ → Zig</h3><p>TigerBeetle — финансовая база данных, ориентированная на корректность и производительность. Команда выбрала Zig, отказавшись от сложности C++ и сборщика мусора. comptime позволил генерировать специализированные структуры данных под задачу.</p><h2>Гибридная архитектура</h2><p>На практике редко выбирают один язык на весь проект. Гораздо чаще используют гибрид:</p><ul><li><b>API Gateway и CRUD</b> — Go: быстро писать, просто деплоить, легко искать людей.</li><li><b>Горячие пути</b> — Rust: низкая задержка и контроль над памятью.</li><li><b>Специализированные компоненты</b> — Zig: парсинг бинарных форматов, криптография, интеграция с C.</li></ul><p>Такая схема позволяет получить скорость разработки в большинстве сервисов и производительность там, где она действительно нужна. Главное — разделять систему по чётким границам и не превращать проект в зоопарк ради самого зоопарка.</p><h2>Что выбрать в 2026 году</h2><p>Выбор зависит от приоритетов команды и задачи:</p><ul><li><b>Нужна скорость разработки и лёгкий найм</b> — Go.</li><li><b>Нужна максимальная производительность и безопасность памяти</b> — Rust.</li><li><b>Нужна C-производительность с современной сборкой и интеграцией с legacy на C</b> — Zig.</li><li><b>Команда маленькая и сроки горят</b> — начинайте с Go, профилируйте, мигрируйте горячие пути при необходимости.</li><li><b>Строите базу данных, прокси или edge</b> — Rust становится очень сильным кандидатом.</li></ul><h2>FAQ</h2><h2>Выводы</h2><p>Rust, Go и Zig — не конкуренты в прямом смысле, а инструменты для разных условий. Go задаёт темп разработки, Rust отвечает за надёжность и производительность, Zig покрывает специализированные ниши. Лучшая стратегия для 2026 года — начать с Go, измерять, а затем точечно внедрять Rust или Zig там, где данные это оправдывают.</p><blockquote>Нет универсального лучшего языка — есть лучший язык для конкретной команды, задачи и бюджета на обучение.</blockquote><p><b>Источник:</b> <a href="https://pooya.blog/blog/rust-go-zig-high-performance-backend-2026/">Pooya Golchian — Rust vs Go vs Zig: High-Performance Backend Services in 2026</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как TypeScript выводит типы переменных: разбор алгоритма</title>
      <link>https://tproger.ru/articles/kak-typescript-vyvodit-tipy-peremennyh-razbor-algoritma</link>
      <comments>https://tproger.ru/articles/kak-typescript-vyvodit-tipy-peremennyh-razbor-algoritma?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-typescript-vyvodit-tipy-peremennyh-razbor-algoritma</guid>
      <description><![CDATA[<p>Разбираем двухфазный алгоритм вывода типовых переменных в TypeScript: сбор кандидатов, разрешение, вариантность, пересечения и NoInfer. Узнайте, почему компилятор ведёт себя именно так.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-typescript-vyvodit-tipy-peremennyh-razbor-algoritma">Как TypeScript выводит типы переменных: разбор алгоритма</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Компиляторы]]></category>
      <category><![CDATA[Функциональное программирование]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 08 Jun 2026 05:15:55 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы когда-нибудь ловили себя на мысли, что TypeScript ведёт себя странно с дженериками, знайте: вы не одиноки. TypeScript выводит типовые переменные в две фазы: сначала собирает кандидатов из аргументов и контекста, затем сворачивает список в единственный тип. Иногда компилятор выводит unknown там, где ожидаешь конкретный тип, а иногда — наоборот, слишком поспешно захватывает весь объект вместо его «остаточной» части. В этой статье разберём, как внутри устроен алгоритм вывода типовых переменных — и почему он ведёт себя именно так.</p><p>Это не дословный перевод, а авторский разбор на основе исследования Nicolas Laurent (norswap), дополненный практическими примерами для enterprise-разработки на TypeScript.</p><h2>Что такое вывод типовых переменных</h2><p>В TypeScript, когда вы вызываете функцию с дженериком function foo&lt;T&gt;(x: T), компилятор должен понять, чему равен T. Этот процесс называется <b>type variable inference</b> — выводом типовой переменной. Он происходит в две фазы: сначала TypeScript собирает «кандидатов» из типов аргументов и контекста возврата, а затем «сворачивает» список кандидатов в единственный тип.</p><p>Звучит просто, но на практике алгоритм полон тонкостей: covariant и contravariant позиции, приоритеты кандидатов, странное поведение пересечений и неочевидные ограничения. Разберём всё по порядку.</p><p>TypeScript выводит типовые переменные в две фазы: сбор кандидатов из аргументов и контекста, затем свёртка списка в единственный тип.</p><p>Кандидаты делятся на ковариантные (выходные позиции) и контравариантные (входные позиции); контравариантный результат обычно побеждает.</p><p>При свёртке TypeScript ищет общий супертип в списке кандидатов, но никогда не выбирает тип, которого нет в списке.</p><p>Пересечения типов ведут себя непредсказуемо: иногда TypeScript «снимает» литеральный тип, иногда захватывает весь объект.</p><p>В generic-контексте условные типы (extends ? :) не вычисляются, что ломает инференс через Exclude и подобные утилиты.</p><p>NoInfer&lt;T&gt; (с TypeScript 5.4+) позволяет блокировать вывод типа из конкретной позиции — полезно для API со значениями по умолчанию.</p><h2>Фаза 1: сбор кандидатов</h2><p>Когда TypeScript видит вызов функции с дженериком, он сопоставляет типы аргументов (source types) с типами параметров функции (target types). Каждый раз, когда «прогулка» по типам доходит до «голого» type parameter в target, соответствующий source type записывается как кандидат.</p><h3>Ковариантные и контравариантные кандидаты</h3><p>Кандидаты собираются в два списка. Если type parameter находится в позиции аргумента функции или возвращаемого значения — это <b>ковариантный</b> (output position) кандидат. Если type parameter находится в позиции параметра callback-функции — это <b>контравариантный</b> (input position) кандидат.</p><h3>Условные типы и infer</h3><p>Когда TypeScript встречает условный тип, кандидаты собираются только из той ветки, которая теоретически может сработать. Но важно: <b>само условие не добавляет кандидатов</b>. Запись T extends Foo НЕ добавляет Foo как кандидат для T.</p><p>Это классическая ловушка: кандидаты собираются из одной ветки, а типовая проверка — из другой. TypeScript <b>не вычисляет</b> условные типы на этапе инференса.</p><h3>Распределение по union</h3><p>Если source type — union, а target — не «голый» type parameter, TypeScript проходит по каждой ветке union отдельно и собирает кандидатов из всех веток в один список.</p><h3>Что НЕ учитывается при сборе</h3><ul><li>Условие условного типа (только ветки).</li><li>Constraints (&lt;T extends Foo&gt;) — они проверяются позже, на этапе разрешения.</li><li>Дефолтные значения type parameter (&lt;T = unknown&gt;) — используются только если список кандидатов пуст.</li><li>Супертипы source type.</li></ul><h2>Фаза 2: разрешение кандидатов</h2><p>После сбора TypeScript сворачивает каждый список в единственный тип. Алгоритм зависит от вариантности и содержимого списка.</p><h3>Ковариантные кандидаты</h3><ol><li>Если все кандидаты — литералы одного базового типа, они объединяются в union.</li><li>Иначе ищется кандидат, который является строгим супертипом всех остальных. Если найден — он выбирается.</li><li>Если нет — выполняется left-reduce: начинаем с первого кандидата, идём по списку, заменяя текущий на супертип, если встречаем его.</li></ol><p><b>Важно:</b><br />Если в списке кандидатов нет общего супертипа, TypeScript выбирает <b>первый</b> элемент. Это частая причина неожиданных ошибок при передаче разнородных аргументов одного дженерика.</p><h3>Контравариантные кандидаты</h3><p>Для контравариантных кандидатов логика зеркальная: ищется общий <b>подтип</b>, иначе — left-reduce с подтипами. Если оба списка (ковариантный и контравариантный) непусты, контравариантный результат обычно побеждает — за исключением случаев, когда ковариантный результат является подтипом контравариантного.</p><h3>Приоритеты кандидатов</h3><p>Каждый кандидат помечается приоритетом. Кандидат с более высоким приоритетом <b>стирает</b> все кандидаты с более низким приоритетом. Основные приоритеты: None (0), NakedTypeVariable (1), MappedTypeConstraint (32), ReturnType (128), LiteralKeyof (256).</p><p>Приоритеты MappedTypeConstraint, ReturnType и LiteralKeyof — «комбинационные»: при них результатом становится union или intersection всех кандидатов, а не единственный тип.</p><h2>Пересечения: загадочное поведение</h2><p>Одно из самых неинтуитивных мест — вывод через пересечения. Рассмотрим несколько примеров.</p><p>Почему так? Это эвристики компилятора, направленные на максимизацию полезности захваченного типа. В первом случае полезнее получить весь объект, во втором — сохранить литеральную точность строки. Порядок операндов пересечения не влияет на результат.</p><h2>Вывод в generic-контексте</h2><p>Когда инференс происходит внутри другой generic-функции, условные типы <b>не могут быть вычислены</b>, потому что type variables ещё не связаны. Это ломает паттерны вроде Exclude, если вызывать их через generic-обёртку.</p><p>В типовых enterprise-проектах, где активно используются типовые утилиты для валидации API (например, в проектах на NestJS или с Zod), это ограничение часто приводит к необходимости явно прописывать generic-аргументы или реструктурировать типы.</p><h2>NoInfer: как управлять выводом</h2><p>Начиная с TypeScript 5.4, в языке есть встроенный вспомогательный тип NoInfer&lt;T&gt;. Он блокирует сбор кандидатов для T из той позиции, где используется NoInfer&lt;T&gt;.</p><p>Это особенно полезно в библиотечном коде, где нужно разделить «источник истины» для вывода типа и позиции, которые должны ему подчиняться.</p><h2>FAQ</h2><h2>Выводы</h2><p>Теперь вы знаете, как TypeScript выводит типы переменных: через сбор кандидатов из аргументов, свёртку списка с учётом вариантности и приоритетов, а затем проверку результата на соответствие constraints. Алгоритм вывода типовых переменных — это тщательно продуманная, но не лишённая сюрпризов система. Две фазы (сбор и разрешение), вариантность, приоритеты и эвристики для пересечений создают поверхность, которую сложно угадать интуитивно, но которую можно понять, зная правила.</p><p>Ключевые практические выводы для разработчиков:</p><ol><li>Если функция принимает несколько аргументов одного дженерика — убедитесь, что они совместимы, иначе TypeScript выберет первый кандидат и отвергнет остальные.</li><li>Не полагайтесь на супертипы для инференса: они не попадают в список кандидатов.</li><li>В generic-контексте условные типы «замораживаются» — проектируйте API с этим ограничением.</li><li>Используйте NoInfer&lt;T&gt; в библиотечном коде для точного контроля над источниками вывода типов.</li><li>При странном поведении с пересечениями — перепишите типы явно или добавьте constraint.</li></ol><blockquote>Понимание алгоритма вывода типовых переменных позволяет писать более надёжные типовые абстракции и тратить меньше времени на отладку сложных generic-конструкций.</blockquote><p><b>Источники:</b></p><ul><li><a href="https://norswap.com/typescript-type-variable-inference">How TypeScript infers type variables — Nicolas Laurent (norswap)</a></li><li><a href="https://norswap.com/typescript-distribute">How TypeScript distributes unions — Nicolas Laurent (norswap)</a></li><li><a href="https://www.typescriptlang.org/docs/handbook/2/generics.html">TypeScript Handbook: Generics</a></li></ul><p>Если у вас есть примеры неожиданного поведения TypeScript с дженериками — делитесь в комментариях. Соберём коллекцию «типовых загадок» вместе.</p>]]></content:encoded>
    </item>
    <item>
      <title>IPv6-зоны в URL: почему Go падает на fe80::%eth0 и как это чинить</title>
      <link>https://tproger.ru/articles/ipv6-zony-v-url-pochemu-go-padaet-na-fe80-eth0-i-kak-eto-chinit</link>
      <comments>https://tproger.ru/articles/ipv6-zony-v-url-pochemu-go-padaet-na-fe80-eth0-i-kak-eto-chinit?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ipv6-zony-v-url-pochemu-go-padaet-na-fe80-eth0-i-kak-eto-chinit</guid>
      <description><![CDATA[<p>Разбираем, как IPv6 link-local адреса с зонами ломают парсинг URL в Go, nginx и Python. Почему % нужно кодировать как %25 по RFC 6874 с 2013 года. Узнайте, как правильно собирать URL и не сломать продакшен.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ipv6-zony-v-url-pochemu-go-padaet-na-fe80-eth0-i-kak-eto-chinit">IPv6-зоны в URL: почему Go падает на fe80::%eth0 и как это чинить</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Сетевые протоколы]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 05 Jun 2026 12:56:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>В URL с IPv6 link-local адресами символ % зоны интерфейса нужно кодировать как %25 — иначе парсер Go выбросит ошибку. Если вы пишете сервис, который ходит по локальной сети через IPv6, и ловите странную ошибку парсинга URL, скорее всего, вы столкнулись с одним из самых неочевидных граничных случаев современной работы с сетями.</p><p>В IPv6 каждый сетевой интерфейс получает <b>link-local адрес</b> из диапазона fe80::/10 (первые 10 бит фиксированы, остальное — адрес интерфейса). Если у машины два интерфейса — например, Ethernet и Wi-Fi — оба будут в одном и том же префиксе. Вопрос: как операционная система понимает, к какому именно интерфейсу адресовать пакет? Ответ — <b>зоны (scopes)</b>.</p><p>В IPv6 зона интерфейса записывается через %: fe80::4%eth0. Это нужно, чтобы различать link-local адреса на разных сетевых интерфейсах.</p><p>В URL зона попадает внутрь квадратных скобок: [fe80::4%eth0]:80. Но символ % в URL — это начало percent-encoding, поэтому парсер ломается.</p><p>Решение — экранировать % как %25: [fe80::4%25eth0]:80. Это поведение зафиксировано в RFC 6874.</p><p>Проблема затрагивает не только Go, но и nginx, Python requests и браузеры. Поддержка зон в HTTP-клиентах остаётся фрагментарной.</p><h2>Как зоны работают в IPv6</h2><p>Зона (или scope ID) — это механизм, позволяющий ядру отличать адреса из пересекающихся диапазонов. Для link-local адресов fe80::/10 он критичен: без него роутинговая таблица не поймёт, через какой интерфейс отправлять трафик.</p><p>Формат зоны зависит от ОС. В Linux это имя интерфейса — eth0, wlan0, ens192. В Windows — числовой идентификатор интерфейса. Полный адрес выглядит так:</p><p>Квадратные скобки отделяют хост от порта — иначе двоеточия IPv6-адреса спутаются с разделителем порта.</p><h2>Конфликт зон и URL</h2><p>Теперь вставим этот адрес в URL. На первый взгляд всё просто:</p><p>Но попробуем распарсить его в Go:</p><p>Получаем ошибку:</p><p>Что произошло? В URL любой символ, не входящий в разрешённый набор, должен быть <b>percent-encoded</b>. Пробел превращается в %20, кириллица — в последовательности вроде %D0%90. Парсер видит %e и пытается декодировать его как hex-последовательность. et — не валидный байт, поэтому URL отклоняется.</p><h2>Почему Go падает и как это чинить</h2><p>С точки зрения стандарта Go ведёт себя корректно. RFC 3986 определяет URL-грамматику, а RFC 6874 специально дополняет её для IPv6-зон: символ % перед zone ID должен быть сам закодирован как %25.</p><p>Правильный URL выглядит так:</p><p>Проверяем в Go:</p><p>Вывод:</p><p>Go корректно декодирует %25 обратно в % при извлечении хоста. То есть библиотека поддерживает RFC 6874, но <b>требует от вызывающего кода заранее закодировать зону</b>.</p><h2>RFC 6874: это не баг, а фича</h2><p>В RFC 6874 формально описан синтаксис IPv6-адресов с зонами в литералах URL. Ключевой фрагмент:</p><p>То есть зона записывается не как %eth0, а как %25eth0. Это выглядит ужасно с точки зрения пользовательского опыта, но таково решение стандартизации: совместимость с существующей URL-грамматикой важнее эргономики.</p><blockquote>Наша индустрия меня удивляет. Стандарт говорит: чтобы записать обычный символ процента в адресе, нужно его самого закодировать процентами. Это ужасно, но, похоже, это граничный случай, который касается не только Go.</blockquote><p>И действительно, та же проблема есть и в других инструментах:</p><ul><li><b>nginx</b> — <a href="https://trac.nginx.org/nginx/ticket/623">тикет #623</a>, созданный более десяти лет назад; проблема отсутствия поддержки link-local адресов с зонами до сих пор актуальна.</li><li><b>Python requests</b> — <a href="https://github.com/psf/requests/issues/6808">issue #6808</a>: даже при ручном кодировании % как %25 библиотека некорректно обрабатывает IPv6-зоны в URL, потому что urllib3 декодирует %25 обратно в %.</li><li><b>Браузеры</b> — draft Schinazi объясняет, почему зоны ломают концепцию origin, и рекомендует использовать mDNS вместо прямого указания link-local адресов в URI.</li></ul><h2>Что делать разработчику</h2><p>Если ваше Go-приложение работает с локальными IPv6-адресами — например, подключается к сервисам в Docker-сети, IoT-устройствам или внутренним API через link-local — учитывайте следующее:</p><ol><li>Перед передачей IPv6-адреса с зоной в url.Parse всегда экранируйте % как %25.</li><li>Используйте net.JoinHostPort для сборки host:port — он корректно оборачивает IPv6 в скобки, но не кодирует зону. Дополнительное кодирование остаётся на вас.</li><li>Если адрес приходит от пользователя, валидируйте его до парсинга: зона должна содержать только допустимые символы (имя интерфейса в Linux, числовой ID в Windows).</li><li>Тестируйте на реальных интерфейсах с разными зонами, чтобы убедиться, что кодирование работает корректно в вашей среде.</li></ol><p><b>На заметку:</b><br />Если вы пишете HTTP-клиент для embedded-устройств или промышленных контроллеров, которые общаются через link-local IPv6, ручное кодирование зоны — не костыль, а необходимость. Большинство библиотек не делают этого автоматически.</p><h2>FAQ</h2><h2>Выводы</h2><p>IPv6-зоны — редкий, но живучий граничный случай. Если вы пишете сетевой код на Go, который должен работать в гетерогенных средах — Docker, Kubernetes, embedded-системы, промышленные сети — знайте, что fe80::1%eth0 в URL превращается в fe80::1%25eth0. Это не баг парсера, а требование стандарта RFC 6874.</p><p>Инкапсулируйте кодирование зоны во вспомогательную функцию и всегда прогоняйте IPv6-адреса через неё перед сборкой URL. Экономия пяти минут сейчас обернётся часом отладки в продакшене, когда сервис внезапно не сможет достучаться до соседнего контейнера по link-local.</p><p><b>Источники:</b><br />• <a href="https://xeiaso.net/notes/2026/ipv6-zones-go-url/">Xe Iaso — IPv6 zones in Go URLs</a><br />• <a href="https://datatracker.ietf.org/doc/html/rfc6874">RFC 6874 — Representing IPv6 Zone Identifiers in Address Literals and Uniform Resource Identifiers</a><br />• <a href="https://datatracker.ietf.org/doc/html/draft-schinazi-httpbis-link-local-uri-bcp-03">draft-schinazi-httpbis-link-local-uri-bcp-03 — IPv6 Link-Local URIs</a></p>]]></content:encoded>
    </item>
    <item>
      <title>5 правил профессионального вайбкодинга, которые делают работу безопаснее и надёжнее на 90%</title>
      <link>https://tproger.ru/articles/5-pravil-professionalnogo-vajbkodinga-kotorye-delayut-rabotu-be</link>
      <comments>https://tproger.ru/articles/5-pravil-professionalnogo-vajbkodinga-kotorye-delayut-rabotu-be?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Сербул]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/5-pravil-professionalnogo-vajbkodinga-kotorye-delayut-rabotu-be</guid>
      <description><![CDATA[<p>Александр Сербул, руководитель больших данных, высоконагруженных систем и машинного обучения Битрикс24, про правила профессионального вайбкодинга</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/5-pravil-professionalnogo-vajbkodinga-kotorye-delayut-rabotu-be">5 правил профессионального вайбкодинга, которые делают работу безопаснее и надёжнее на 90%</a>»</p>]]></description>
      <category><![CDATA[Безопасный код]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 13 May 2026 04:37:28 GMT</pubDate>
      <content:encoded><![CDATA[<p>Программирование с нейросетями упрощает работу разработчикам, а людям без технического опыта дает возможность создавать программы, не тратя месяцы и годы на обучение.</p><p>Но пока что искусственный интеллект работает не идеально и может допускать ошибки и уязвимости. Чтобы увеличить надёжность результатов работы ИИ, есть несколько правил. Применять их можно даже без опыта разработки, достаточно использовать те же ИИ-инструменты. Что это за правила, рассказывает руководитель больших данных, высоконагруженных систем и машинного обучения Битрикс24 Александр Сербул.</p><h2>Когда вайбкодинг — это риск</h2><p>Искусственный интеллект позволяет нам писать код на любом языке: описать желаемую цель простым языком и получить работающий результат. Это потрясающая возможность. Но при этом нужно помнить ограничения этой технологии.</p><p>Нейросеть — это инструмент, который работает только внутри процесса разработки, а не вместо него. Изначально вайбкодинг был инструментом для создания прототипов и MVP — первых версий продукта с минимальными возможностями.</p><p>Создатель AI-агента Open Claw Питер Штайнбергер говорит: «<a href="https://www.businessinsider.com/openclaw-creator-vibe-coding-term-slur-criticism-2026-2" rel="nofollow">Вайбкодинг — это навык</a>, который прокачивается». Это значит, что использовать публично и в открытом доступе под нагрузками для критически важных процессов написанный ИИ код можно только при полном понимании того, как он работает.</p><p>Если полностью доверять созданному машиной коду, есть риск запустить плохо работающие или небезопасные приложения. Поэтому при ИИ-программировании нужно разумно задавать ограничения, которые снимут большинство проблем. Эти ограничения можно разделить на 5 шагов, но работают они не по отдельности, а как единый процесс.</p><h2>Правило 1: выбираем строго типизированный язык</h2><p>Программа работает с разными типами данных: числами, строками, логическими значениями.</p><p>Некоторые языки программирования более гибкие, например PHP, Python или JavaScript. В них можно менять типы данных по ходу работы программы — это может быть удобно разработчику, но для ИИ повышается вероятность допустить ошибку. Другой вариант — <a href="https://learn.microsoft.com/ru-ru/windows/win32/rpc/strong-typing" rel="nofollow">типизированные языки</a>, которые заставляют разработчика сразу указывать, какие типы данных где находятся: TypeScript, Java, Kotlin, Rust. Человеку с таким языком работать труднее, но нейросети их понимают хорошо, и количество ошибок нейросети резко снижается.</p><p>Для гибких языков программирования решение тоже есть: можно добавить дополнительные аннотации типов и проверки-валидаторы типов данных. Пример такого валидатора — MyPy для Python.</p><p>В работе это будет выглядеть так: нам нужна функция, которая должна складывать числа, но нейросеть случайно передаёт туда строку. Без проверки это приведёт к ошибке уже во время работы. С типизацией система сразу скажет: «Сюда можно передавать только числа».</p><p>Поэтому первое правило для профессионального вайбкодинга: выбирать строго типизированный язык или добавлять валидаторы типов данных.</p><h2>Правило 2: включаем базовую проверку с помощью линтеров</h2><p>Линтеры — это инструменты, которые автоматически проверяют код: стиль, потенциальные ошибки и уязвимости. Они помогают сделать код проще и понятнее, а значит — снизить вероятность ошибок.</p><p>Написать работающую программу можно по-разному. Одним из важных навыков для программиста считается писать понятный код. Это важно не только при работе в команде, но и при одиночной разработке: программа должна оставаться понятной, если вы открываете её через месяц или полгода. Именно поэтому годами создаются правила стиля в программировании, которые помогают писать понятный людям код.</p><p>Плохой стиль программирования не всегда вызывает прямые ошибки, но работать с ней неудобно. Например, переменные названы непонятно, а условия записаны сложно. Программа работает, но другому разработчику будет трудно понять, что происходит. Линтер проверит код и подскажет, где его упростить и привести к стандартному виду.</p><p>Поэтому берем за правило всегда добавлять линтеры для базовой проверки.</p><h2>Правило 3: пишем тесты</h2><p>Есть ещё одна проблема, которую <a href="https://ru.wikipedia.org/wiki/Проблема_остановки" rel="nofollow">в 1936 году сформулировал</a> британский математик Алан Тьюринг. Её смысл в том, что невозможно написать программу, которая гарантированно определит корректность другой программы.</p><p>Хотя полностью быть уверенным в правильной работе компьютерной системы нельзя, некоторые конкретные случаи проверить всё-таки можно. Для проверки этих случаев пишут другие программы — тесты. Они сильно снижают количество возможных ошибок, и нейросети хорошо справляются с созданием таких проверочных программ.</p><p>Важно просить ИИ-агентов закладывать в систему тесты на всех уровнях. Некоторые тесты проверяют отдельные небольшие фрагменты кода. Другие проверяют работу целиком или только основной сценарий, когда программа запускается и в общем работает как ожидается. Тесты должны быть автоматическими, чтобы разработчик не тратил несколько часов на их запуск после каждого обновления программы.</p><p>Правило номер три: добавляем в запросы к нейросети создание тестов, которые должны запускаться при любом изменении кода. Это строгое правило, которое является частью разработки.</p><h2>Правило 4: считаем тестовое покрытие</h2><p>Следующий шаг, который нужен для надёжного вайбкодинга: общее тестовое покрытие.</p><p>Покрытие показывает, какая часть приложения проверяется тестами. Иначе может оказаться так, что тесты есть, но значительную часть кода они не проверяют. Покрытие измеряется в процентах. Например, покрытие в 75% может означать, что тесты проверяют 750 строк из 1000.</p><p>Покрытие — это показатель не качества тестов, а того, насколько код вообще проверяется. Даже 100% покрытие не гарантирует отсутствие ошибок, но его отсутствие почти всегда означает, что часть системы вообще не проверяется.</p><p>Правило четвёртое: считайте процент тестового покрытия. Минимальный процент — 70-80% программы.</p><h2>Правило 5: проверяем входные данные, фреймворки и зависимости</h2><p>Есть ещё несколько дополнительных ограничений, которые делают систему более устойчивой.</p><p><b>Проверка входных данных.</b> Даже если код типизирован и покрыт тестами, в реальной работе он всё равно получает данные из внешнего мира — от пользователей, баз данных и других сервисов. Эти источники нельзя контролировать, и мы должны заранее предупредить нейросеть о том, что может поступить в программу.</p><p>Входные данные важно проверять, потому что они могут вызывать ошибки, поломки и даже приводить к уязвимостям в безопасности. Обязательно проверьте, что в промпте или передаваемой нейросети документации указано требование фильтровать входные параметры: типы, диапазоны значений и структуру данных. Иначе система будет работать только в идеальных сценариях и ломаться при поступлении неожиданных данных.</p><p><b>Минимальное количество фреймворков.</b> Чтобы разработка была проще и быстрее, программисты используют инструменты с готовыми фрагментами кода: библиотеки и фреймворки. С фреймворком одна команда может заменить несколько десятков строк кода.</p><p>Проблема в том, что фреймворк — это отдельная сложная программа, и почти к каждому есть сложная объёмная документация. Фреймворк — это сложная внешняя система со своей логикой и обновлениями. Чем больше фреймворков — тем сложнее поддержка и выше риск ошибок. Поэтому если задачу можно решить за 50-100 строк обычного кода, не нужно пытаться сократить их за счёт добавления фреймворка.</p><p><b>Контроль зависимостей.</b> Каждый дополнительный инструмент в программе будет новой зависимостью, потому что без него приложение не работает. Примеры зависимостей — <a href="https://thecode.media/framelibs/" rel="nofollow">библиотеки и фреймворки</a>.</p><p>Хотя переусложнять программу не стоит, но некоторые инструменты использовать можно и нужно. Например, некоторые фреймворки и библиотеки проверены годами и имеют большое количество пользователей и действительно делают приложения проще и удобнее. Поэтому лучшим вариантом будет использовать только то, что использовать необходимо и что сделает программу проще.</p><p>При этом зависимости нужно всё время контролировать: проверять, что используются актуальные версии, и что в них не обнаружено уязвимостей.</p><p>Чтобы упростить процесс такого контроля за продуктом, можно использовать специально подготовленные платформы для ИИ-разработки, вроде Битрикс24 VibeCode или Replit. Такие платформы работают по разному: выстраивают ограничения для агентов, другие сразу направляют ИИ для работы с конкретными технологиями. Ещё в них используются техники минимизации рисков: серверы с запущенными приложениями недоступны для атаки снаружи, а данные из приложений фильтруются через слой защищённого официального REST API.</p><p>Пятое правило: проверять входные данные, минимизировать количество фреймворков и постоянно обновлять зависимости и проверять их на уязвимости.</p><h2>Насколько надёжнее становится результат вайбкодинга</h2><p>Со всеми перечисленными правилами-этапами можно выстроить достаточно надёжный процесс. Соблюдая ограничения, нейросеть создаёт контролируемый, поддерживаемый и намного более безопасный код.</p><p>Лучше всего, если финальный продукт для публичного доступа, высоких нагрузок и использования в критически важных процессах проверяется профессиональным разработчиком, который разбирается во всех слоях программы. Именно поэтому важно использовать минимальное количество фреймворков и библиотек: в реальной работе код проверяется программистами, а найти специалиста с хорошим знанием 5-8 фреймворков довольно сложно.</p>]]></content:encoded>
    </item>
    <item>
      <title>Вышел Zig 0.16 — DI в main, I/O как интерфейс и async без раскраски функций</title>
      <link>https://tproger.ru/news/vywel-zig-0-16-di-v-main-i-o-kak-interfejs-i-async-bez-raskra</link>
      <comments>https://tproger.ru/news/vywel-zig-0-16-di-v-main-i-o-kak-interfejs-i-async-bez-raskra?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/vywel-zig-0-16-di-v-main-i-o-kak-interfejs-i-async-bez-raskra</guid>
      <description><![CDATA[<p>Zig 0.16.0 вышел 14 апреля 2026: DI в main через std.process.Init, I/O как интерфейс, async без раскраски функций. Разбираем, что ломается с 0.15.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/vywel-zig-0-16-di-v-main-i-o-kak-interfejs-i-async-bez-raskra">Вышел Zig 0.16 — DI в main, I/O как интерфейс и async без раскраски функций</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 15 Apr 2026 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Zig 0.16 закрыл <a href="https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/">проблему раскраски функций</a>: sync и async теперь имеют одинаковую сигнатуру, отличается только переданный I/O-интерфейс. Если вы писали асинхронный Rust и упирались в async fn-заражение — посмотрите, как это решено здесь. 14 апреля 2026 года команда Zig <a href="https://ziglang.org/download/0.16.0/release-notes.html">выпустила 0.16.0</a> после 8 месяцев работы 244 контрибьюторов. Главные изменения: I/O как интерфейс, DI в точке входа («Juicy Main»), новый ELF-линкер и окружение, перестающее быть глобальным.</p><p>Zig — системный язык с С-подобным синтаксисом и упором на явное управление памятью. 0.16.0 — не LTS, но в терминах API это один из самых ломающих релизов: многие библиотеки придётся переписывать под новый std.Io. Разбираем, что именно изменилось и ради чего.</p><p><b>Что:</b> Zig 0.16.0 — крупный релиз за 8 месяцев. I/O как интерфейс, DI в main, новый ELF-линкер.</p><p><b>Когда:</b> 14 апреля 2026 года.</p><p><b>Где:</b> <a href="https://ziglang.org/download/">ziglang.org/download</a>, тарболы под все Tier-1 и Tier-2 платформы.</p><p><b>Масштаб:</b> 244 контрибьютора, 1183 коммита, ломающие изменения в стандартной библиотеке.</p><p><b>Ключевое для кода:</b> pub fn main(init: std.process.Init) — точка входа получает аллокаторы, Io, env и preopens.</p><h2>Juicy Main — DI на уровне точки входа</h2><p>«Juicy Main» — это внутреннее название proposal Эндрю Келли: идея в том, что точка входа должна получать «сочный» набор готовых зависимостей, а не создавать их внутри. DI здесь значит, что аллокатор, I/O, env и preopens передаются в main снаружи, а не конструируются каждым приложением заново. Раньше каждая программа на Zig начиналась с одного и того же бойлерплейта: создать GeneralPurposeAllocator, получить arg-итератор через std.process.argsAlloc, отдельно дёрнуть std.process.getEnvMap. В 0.16 всё это подаётся параметром в main:</p><p>std.process.Init — структура с пре-инициализированными значениями: процессная arena с автоматической очисткой при выходе, дефолтный GPA (General Purpose Allocator) с leak-checker в debug, подходящая под таргет реализация Io, карта переменных окружения, preopens (наследие WASI-модели: файловые дескрипторы, переданные родительским процессом как capability). Это классический DI: main собирает зависимости, библиотеки внутри принимают Allocator и Io через параметры.</p><p>Подпись main теперь может быть одной из трёх:</p><ul><li>Без параметров — нельзя получить CLI-аргументы и окружение. Подходит для чистых вычислительных утилит.</li><li>process.Init.Minimal — только сырые argv и environ, без аллокаторов и Io.</li><li>process.Init — полный набор: аллокаторы, Io, env-map, preopens.</li></ul><h2>I/O как интерфейс — async без раскраски функций</h2><p>Второе крупное изменение: std.Io стал абстрактным интерфейсом, а не набором конкретных функций. Реализации:</p><ul><li><b>Io.Threaded</b> — текущая дефолтная, работает поверх ОС-потоков, поддерживает cancelation.</li><li><b>Io.Evented</b> — экспериментальная, на userspace-стеках с work-stealing (M:N, «зелёные потоки»).</li><li><b>Io.Uring</b> — proof-of-concept на Linux io_uring, без сети и обработки ошибок.</li><li><b>Io.Kqueue</b> — proof-of-concept на macOS/BSD.</li><li><b>Io.Dispatch</b> — поверх Grand Central Dispatch (macOS).</li><li><b>Io.failing</b> — возвращает ошибку на любую операцию, для тестов.</li></ul><p>Философия — ровно та же, что у Allocator: функции принимают интерфейс, а не привязываются к конкретной реализации. Это даёт Zig async <b>без раскраски функций</b> — то, на чём <a href="https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/">подрывались Rust, JavaScript и C#</a>. Асинхронная функция ничем не отличается по сигнатуре от синхронной — меняется только переданный Io.</p><p>На уровне API появились новые абстракции:</p><ul><li>Future(T) — таск, создаётся через io.async, ожидается через future.await. Может быть реализован синхронно, если Io не умеет concurrency.</li><li>Group — набор независимых тасков с общим awaiting и cancelation.</li><li>Queue(T) — многопроизводительная/многопотребительная очередь с блокировкой.</li><li>Select и Batch — выполнение нескольких операций одновременно с ожиданием первого завершения.</li><li>Clock, Duration, Timestamp, Timeout — type-safe единицы времени.</li></ul><p>Есть цена: весь код стандартной библиотеки, который делал I/O, пришлось переписать под интерфейс. Старые типы GenericReader, AnyReader, FixedBufferStream удалены — в крейтах, обновлявшихся из 0.15, почти гарантированно сломается чтение/запись.</p><h2>Environment перестаёт быть глобальным</h2><p>В C setenv в многопоточной программе — UB: глобальная environ читается без блокировок. Zig до 0.16 наследовал эту проблему через std.os.environ, который ещё и нельзя было заполнить без линковки libc.</p><p>Теперь окружение доступно только из main через init.environ_map. Если библиотеке нужен env — она принимает его параметром, как аллокатор. Это ломает код, дёргавший std.process.getEnvVarOwned из произвольного места, но убирает целый класс thread-safety-багов.</p><p>Параллельно переименованы функции в std.mem: indexOf → find, добавлены cut / cutScalar для разбиения слайсов по первому/последнему вхождению.</p><h2>Новый ELF-линкер — без LLVM для Linux</h2><p>В 0.16 появился собственный ELF-линкер — включается флагом -fnew-linker, а при -fincremental на self-hosted ELF-сборке используется автоматически. Он пока не feature-complete (например, не пишет DWARF), поэтому по умолчанию release-сборки идут через LLVM + LLD. Выгода — инкрементальная линковка (194мс → 65мс на тестовом проекте) и меньше зависимостей для debug-сборок.</p><p>Плюс доработки под Windows: сетевой стек теперь работает без ws2_32.dll (напрямую через NtDll), завершена миграция с Win32 API на NtDll для остальных системных вызовов, появился inter-process progress reporting для параллельных сборок.</p><h2>Что ещё важного в 0.16</h2><ul><li><b>x86-бэкенд</b> компилятора стал самодостаточным — дебажные сборки на x86_64 собираются без LLVM и идут значительно быстрее. aarch64-бэкенд ещё work-in-progress: в 0.16 он падает на behavior-тестах.</li><li><b>Инкрементальная компиляция</b> переработана, меньше false-rebuilds, стабильнее на больших проектах.</li><li><b>Fuzzer</b> (zig test --fuzz) получил multi-process режим, infinite mode и crash dumps с AST-дампом.</li><li><b>Build-система</b>: локальный override пакетов, --error-style и --multiline-errors, таймауты юнит-тестов, temporary files API.</li><li><b>Крипто</b>: добавлены AES-SIV, AES-GCM-SIV, Ascon-AEAD, Ascon-Hash, Ascon-CHash.</li><li><b>Heap</b>: ArenaAllocator стал thread-safe и lock-free, обёртка ThreadSafeAllocator удалена.</li><li><b>Тулчейн</b>: LLVM 21 (с отключённой loop vectorization из-за регрессии), musl 1.2.5, glibc 2.43, Linux 6.19 headers, macOS 26.4 headers, MinGW-w64, FreeBSD 15.0 libc.</li></ul><h2>Как мигрировать с 0.15</h2><ol><li>Ставьте 0.16 из <a href="https://ziglang.org/download/">тарбола</a> или <a href="https://github.com/marlersoft/zigup">zigup</a> параллельно со старой версией. Одновременная установка нескольких версий — штатный сценарий.</li><li>Соберите проект и смотрите на ошибки. Чаще всего сломается: вызовы std.os.environ, std.process.getEnvVarOwned, использование GenericReader/AnyReader, FixedBufferStream.</li><li>Перепишите main на новую сигнатуру. Даже если просто хотите старое поведение — объявите pub fn main(init: std.process.Init.Minimal), так вы получите хотя бы args/environ.</li><li>Если нужен Io в библиотеке, но вы не контролируете main — временно используйте Io.Threaded в режиме single-threaded и берите threaded.io(). Это не рекомендуемый путь, но он работает как page_allocator для аллокатора.</li><li>Проверьте зависимости через zig fetch. Старые версии пакетов под 0.15 скорее всего не соберутся, ждите апдейтов или фиксируйте у себя fork.</li><li>Пересоберите и прогоните тесты на std.testing.io — это Io-бэкенд для тестов, аналог std.testing.allocator.</li></ol><h2>Что дальше</h2><blockquote>После 0.16 любая Zig-функция, принимающая Io, автоматически работает и в sync-, и в async-режиме без смены сигнатуры. В Rust это требует async fn + executor-specific runtime — в Zig теперь параметр.</blockquote><p>0.16.0 — это не про новые фичи, а про фундамент: зафиксированы I/O-интерфейс и контракт точки входа. Если у вас есть Zig-код на 0.15 — закладывайте день на миграцию по чек-листу выше. Если смотрели на Zig со стороны и интересует async без раскраски — <a href="https://ziglang.org/download/">ставьте 0.16</a> и загляните в <a href="https://github.com/ziglang/zig/tree/master/lib/std">исходники stdlib</a>: это самая чистая реализация «нераскрашенного» async среди мейнстримных языков на 2026 год.</p><p>Полные release notes — на <a href="https://ziglang.org/download/0.16.0/release-notes.html">ziglang.org</a>. Обсуждение и отчёты о багах — в <a href="https://github.com/ziglang/zig/issues">GitHub</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Когда компилятор врёт: нарушение memory safety в safe-коде Go</title>
      <link>https://tproger.ru/translations/kogda-kompilyator-vryot-naruwenie-memory-safety-v-safe-kode-go</link>
      <comments>https://tproger.ru/translations/kogda-kompilyator-vryot-naruwenie-memory-safety-v-safe-kode-go?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/kogda-kompilyator-vryot-naruwenie-memory-safety-v-safe-kode-go</guid>
      <description><![CDATA[<p>CVE-2026-27143 и CVE-2026-27144: два бага Go-компилятора ломали memory safety без unsafe, CGO и data races. Разбор механизма, примеры кода, исправление в Go 1.26.1.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/kogda-kompilyator-vryot-naruwenie-memory-safety-v-safe-kode-go">Когда компилятор врёт: нарушение memory safety в safe-коде Go</a>»</p>]]></description>
      <category><![CDATA[Безопасный код]]></category>
      <category><![CDATA[Низкоуровневое программирование]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 08 Apr 2026 10:30:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы пишете на Go и считаете, что safe-код автоматически защищает от memory corruption — вот два реальных CVE, которые доказывают обратное: баги компилятора Go (исправлены в 1.26.1) позволяли получить control-flow hijack и повреждение памяти <em>без единого</em> unsafe, CGO, ассемблерной вставки и data race.</p><p>Исследователь Доминик Цёлек (<a href="https://ciolek.dev">ciolek.dev</a>) обнаружил два бага в цепочке компиляции Go и сообщил о них команде безопасности. Та ответила на первый отчёт через 3 минуты, на второй — через 4. Что показательно: git blame указал на самого исследователя как автора кода, в котором обнаружился баг, — он же сам написал его три года назад.</p><ul><li>CVE-2026-27143: переполнение int8-счётчика в цикле → prove pass удалял bounds check → инъекция инструкций</li><li>CVE-2026-27144: no-op-конверсия *p = T(*q) вместо *p = *q → компилятор пропускал careful copy path при пересечении памяти → memory corruption</li><li>Общая причина: «counterfeit certainty» — оптимизатор повышал «вероятно безопасно» до «доказано безопасно» слишком рано</li><li>Memory safety — свойство всей цепочки инструментов (frontend, optimizer, lowering, runtime, codegen), а не только языка</li><li>«Every optimization is a security claim» — каждая оптимизация компилятора является утверждением о безопасности</li></ul><h2>Баг 1 (CVE-2026-27143): переполнение счётчика цикла убирает bounds check</h2><p>Первый баг связан с фазой <em>prove pass</em> — проходом компилятора, который статически доказывает инварианты и на основании этого удаляет избыточные проверки. Идея хорошая: зачем проверять границы массива, если компилятор «знает», что индекс всегда находится в допустимом диапазоне?</p><p>Рассмотрим цикл с переменной типа int8, шагом 10 и лимитом 120:</p><p>На первый взгляд код безопасен: i не превышает 120, массив размером 200 байт — никакого выхода за границы. Prove pass рассуждал именно так: раз условие цикла гарантирует i ∈ [0, 120], bounds check можно удалить.</p><p>Но int8 хранит значения от -128 до 127. После 120 следующий шаг — 130, что переполняет тип и оборачивается в -126. Условие i &lt; 120 снова становится истинным, цикл продолжается, но уже с отрицательным индексом. Bounds check, который мог бы это поймать, компилятор уже выбросил — ведь он «доказал» безопасность. В результате происходит запись за пределы массива, что открывает возможность для control-flow hijack и инъекции инструкций.</p><blockquote>Prove pass повысил «индекс вероятно в пределах диапазона» до «индекс доказано в пределах диапазона», не учтя возможность целочисленного переполнения малых типов.</blockquote><h2>Баг 2 (CVE-2026-27144): no-op-конверсия и пересечение памяти</h2><p>Второй баг тоньше. Go использует «careful copy path» — специальный путь копирования данных при работе с пересекающимися областями памяти (overlapping memory). Без него можно записать в destination данные, которые уже были перезаписаны в процессе копирования из source.</p><p>Проблема возникала при казалось бы безобидной конструкции — no-op-конверсии типа при присваивании через указатель:</p><p>Конверсия T(*q) здесь не делает ничего содержательного — типы совпадают. Компилятор распознал её как no-op и оптимизировал… но при этом забыл переключиться на careful copy path. Если области памяти p и q пересекаются — данные копируются некорректно, что приводит к повреждению памяти.</p><p>Особенно опасным сценарием оказались slice values: заголовок слайса содержит указатель на данные, длину и ёмкость. При некорректном копировании заголовка указатель мог указывать на произвольную память, а длина — быть некорректной.</p><h2>Общая причина: «counterfeit certainty»</h2><p>Оба бага объединяет одна концептуальная проблема: компилятор принимал «вероятно безопасно» за «доказано безопасно» и на этом основании удалял защитные механизмы. Цёлек называет это <em>counterfeit certainty</em> — поддельная уверенность.</p><p>В первом случае prove pass «доказал» безопасность индекса, не учтя переполнение малых целых типов. Во втором случае оптимизатор «знал», что конверсия — no-op, и сделал из этого вывод, что careful copy path не нужен. В обоих случаях рассуждение было формально правильным, но неполным: не были рассмотрены все возможные состояния программы.</p><blockquote>Every optimization is a security claim. — Каждая оптимизация компилятора является утверждением о безопасности.</blockquote><p>Когда компилятор удаляет bounds check — он утверждает, что выход за границы невозможен. Когда он пропускает careful copy path — он утверждает, что пересечения памяти нет. Ошибка в этих утверждениях напрямую превращается в уязвимость безопасности.</p><h2>Memory safety — свойство всей цепочки инструментов</h2><p>Принято считать, что memory-safe языки (Go, Rust, Java, C#) гарантируют отсутствие memory corruption по определению. Это правда — в рамках спецификации языка. Но между спецификацией и работающей программой стоит компилятор.</p><p>Цепочка компиляции Go включает несколько фаз, каждая из которых делает предположения о корректности предыдущей:</p><ul><li>Frontend (парсинг, type checking) — проверяет синтаксис и типы</li><li>Optimizer (prove pass, escape analysis) — доказывает инварианты и устраняет лишние проверки</li><li>Lowering — преобразует высокоуровневые операции в машинно-зависимые</li><li>Runtime (garbage collector, goroutine scheduler) — управляет памятью во время выполнения</li><li>Codegen — генерирует итоговый машинный код</li></ul><p>CVE-2026-27143 затронул фазу optimizer, CVE-2026-27144 — фазу lowering. Обе уязвимости существовали несмотря на то, что исходный код был написан на «memory-safe» языке. Memory safety — это свойство, которое нужно обеспечивать на каждом уровне стека, не только на уровне языка.</p><h2>Go security team: ответ за 3–4 минуты</h2><p>Исследователь отправил отчёты об обоих багах в Go security team. Первый ответ пришёл через 3 минуты, второй — через 4. Оба бага были исправлены в Go 1.26.1. Сам Цёлек отметил, что процесс взаимодействия с командой был образцовым: быстрая реакция, прозрачная коммуникация и оперативный выпуск патча.</p><p>При разборе бага исследователь запустил git blame на подозрительный участок кода компилятора — и обнаружил собственное имя. Три года назад он сам написал этот код. По его словам, это добавило исследованию особой иронии и заставило более внимательно относиться к тому, что «очевидные» оптимизации несут в себе скрытые предположения о безопасности.</p><h2>Выводы</h2><p>История с CVE-2026-27143 и CVE-2026-27144 показывает: использование memory-safe языка — необходимое, но недостаточное условие для безопасности программы. Компилятор — не чёрный ящик с гарантиями, а сложная система с собственными инвариантами, которые могут нарушаться.</p><p>Оба бага существовали в «тихих» местах: оптимизаторе, который молча удалял проверки, и в lowering-фазе, которая молча пропускала защитный путь копирования. Ни один линтер, ни один статический анализатор не мог их обнаружить — ведь исходный код был совершенно корректным с точки зрения языка.</p><p>Практический вывод прост: обновляйтесь. Следите за <a href="https://groups.google.com/g/golang-announce">golang-announce</a>, обновляйтесь до новых версий Go сразу после выхода патчей безопасности, и помните, что «написано на Go» ≠ «memory-safe по определению».</p>]]></content:encoded>
    </item>
    <item>
      <title>Интуиция за Pratt parsing: как работают приоритеты операторов</title>
      <link>https://tproger.ru/translations/intuiciya-za-pratt-parsing--kak-rabotayut-prioritety-operatorov</link>
      <comments>https://tproger.ru/translations/intuiciya-za-pratt-parsing--kak-rabotayut-prioritety-operatorov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/intuiciya-za-pratt-parsing--kak-rabotayut-prioritety-operatorov</guid>
      <description><![CDATA[<p>Понятное объяснение алгоритма Pratt parsing: как деревья разбора наклоняются по приоритету операторов, что такое binding power (LBP/RBP) и как написать корректный парсер за 10 строк на Python.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/intuiciya-za-pratt-parsing--kak-rabotayut-prioritety-operatorov">Интуиция за Pratt parsing: как работают приоритеты операторов</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Парсинг]]></category>
      <category><![CDATA[Компиляторы]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 30 Mar 2026 15:10:50 GMT</pubDate>
      <content:encoded><![CDATA[<p>Перевод статьи <a href="https://louis.co.nz/2026/03/26/pratt-parsing.html">Intuiting Pratt parsing</a>. Автор: Louis.</p><p>Вы знаете, что a + b * c + d вычисляется как a + (b * c) + d. Но как объяснить это машине? Как закодировать правила приоритета операторов так точно, чтобы парсер сам правильно строил дерево разбора?</p><p>Pratt parsing — элегантный алгоритм, придуманный Воном Праттом в 1973 году. Он лежит в основе парсеров многих современных языков, но его описания часто сводятся к магическим таблицам приоритетов без объяснения, почему это работает. Эта статья строит интуицию с нуля.</p><p>— AST — основная структура данных: оператор над операндами, вычисление снизу вверх.</p><p>— Приоритет операторов определяет наклон дерева: выше приоритет — глубже в дерево.</p><p>— При падении приоритета алгоритм поднимается по «хребту» дерева — это и есть суть Pratt parsing.</p><p>— Левая и правая ассоциативность задаются через LBP и RBP (left/right binding power).</p><p>— Полный парсер с поддержкой всех операторов — около 10 строк на Python.</p><h2>Абстрактное синтаксическое дерево</h2><p>Наиболее распространённое решение для разбора выражений — абстрактное синтаксическое дерево (AST, Abstract Syntax Tree). В AST каждый оператор стоит над своими операндами. Вычисление идёт снизу вверх: сначала обрабатываются дочерние узлы, затем операция над ними.</p><p>Для выражения a + b * c + d правильное AST выглядит так:</p><p>Узел * находится глубже, чем +, — это и отражает более высокий приоритет умножения. При вычислении сначала перемножаются b * c, результат складывается с a, затем прибавляется d.</p><h2>Как приоритет влияет на форму дерева</h2><p>Здесь кроется главная интуиция Pratt parsing. Приоритет операторов напрямую определяет, в какую сторону «наклоняется» дерево:</p><ul><li><b>Убывающий приоритет</b> (например, * + ==) — дерево наклонено влево: операторы с большим приоритетом оказываются глубже.</li><li><b>Возрастающий приоритет</b> (например, == + *) — дерево наклонено вправо.</li><li><b>Равный приоритет</b> — по соглашению левая ассоциативность, дерево наклоняется влево.</li></ul><p>Рассмотрим промежуточное состояние разбора. Пусть мы уже построили дерево I для выражения (a &gt; b + c * d) — это правонаклонное дерево: &gt; наверху, * в самом низу.</p><p>Теперь встречаем следующий оператор. Куда вставить новый узел? Зависит от приоритета:</p><ul><li><b>[I] * e</b> — приоритет * не меньше приоритета * в дереве, вставляем в самый глубокий узел.</li><li><b>[I] + e</b> — приоритет + ниже *, но выше &gt;, поднимаемся по хребту выше узла *.</li><li><b>[I] == e</b> — приоритет == ниже всего дерева, всё дерево I становится левым потомком.</li></ul><p><b>Ключевое наблюдение:</b> когда встречается оператор с меньшим приоритетом, мы поднимаемся по правому хребту дерева, собирая узлы с более высоким приоритетом. Это и есть Pratt parsing — алгоритм, который реализует именно этот подъём по хребту.</p><h2>От интуиции к коду</h2><p>Начнём с простого случая — правонаклонного дерева. Каждый оператор правоассоциативен, приоритет не учитывается:</p><p>Здесь leaf() читает следующий терминал (число или переменную), peek() смотрит на текущий токен без продвижения, advance() читает и сдвигает позицию.</p><p>Добавляем приоритет. Рекурсивный вызов передаёт приоритет текущего оператора как порог — это ограничивает, какие операторы следующий уровень может «захватить»:</p><p>Это уже работает для правоассоциативных операторов. Но у нас if — разобрали один оператор и вышли. Для левоассоциативных нужен цикл:</p><h3>Полный Pratt parser</h3><p>Замена if на while — это и есть процедура подъёма по хребту дерева. Цикл продолжается, пока следующий оператор имеет достаточно высокий приоритет, чтобы «захватить» левую часть. Как только приоритет падает — выходим, и текущее поддерево передаётся вверх по стеку вызовов.</p><h3>Правая ассоциативность через binding power</h3><p>До сих пор у нас одно число приоритета на оператор. Но для управления ассоциативностью нужно различать, насколько «сильно» оператор притягивает операнды слева и справа. Вводятся два понятия:</p><ul><li><b>LBP (left binding power)</b> — сила притяжения левого операнда.</li><li><b>RBP (right binding power)</b> — сила притяжения правого операнда.</li></ul><p>Правила ассоциативности через binding power:</p><ul><li><b>Левоассоциативные операторы</b> (+, *): LBP == RBP. Правый рекурсивный вызов получает тот же приоритет — следующий оператор с таким же приоритетом не захватывается, строится левое дерево.</li><li><b>Правоассоциативные операторы</b> (**, =): RBP = LBP − 1. Правый рекурсивный вызов получает чуть меньший приоритет — следующий оператор с таким же приоритетом захватывается, строится правое дерево.</li></ul><p>Это финальная версия Pratt parser. Всего 8 строк кода — и корректный разбор всех операторов с любым приоритетом и ассоциативностью.</p><h2>Итог</h2><p>Pratt parsing — не хитрый трюк, а следствие простой геометрической интуиции. Деревья разбора наклоняются влево или вправо в зависимости от приоритета операторов. Когда встречается оператор с меньшим приоритетом, алгоритм поднимается по правому хребту текущего дерева — ровно настолько, насколько нужно.</p><p>Ключевые детали реализации:</p><ul><li>while вместо if — реализует подъём по хребту для левоассоциативных операторов.</li><li>Передача приоритета в рекурсию — ограничивает, какие операторы «захватываются» на следующем уровне.</li><li>LBP / RBP — контролируют ассоциативность через разницу в единицу.</li></ul><p>Понимание этой геометрии делает Pratt parsing прозрачным: каждая строка кода отражает конкретное геометрическое действие с деревом, а не магию таблиц приоритетов.</p>]]></content:encoded>
    </item>
    <item>
      <title>C++26 завершён — самый значимый релиз со времён C++11 с рефлексией и безопасностью памяти</title>
      <link>https://tproger.ru/news/c--26-zaverwyon---samyj-znachimyj-reliz-so-vremyon-c--11-s-refleksi</link>
      <comments>https://tproger.ru/news/c--26-zaverwyon---samyj-znachimyj-reliz-so-vremyon-c--11-s-refleksi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/c--26-zaverwyon---samyj-znachimyj-reliz-so-vremyon-c--11-s-refleksi</guid>
      <description><![CDATA[<p>Комитет ISO завершил C++26 — самый важный релиз со времён C++11. Рефлексия, hardened stdlib, контракты и std::execution. Узнайте, что изменится при перекомпиляции.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/c--26-zaverwyon---samyj-znachimyj-reliz-so-vremyon-c--11-s-refleksi">C++26 завершён — самый значимый релиз со времён C++11 с рефлексией и безопасностью памяти</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Безопасный код]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Новости]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 30 Mar 2026 02:27:50 GMT</pubDate>
      <content:encoded><![CDATA[<p>Комитет ISO <a href="https://herbsutter.com/2026/03/29/c26-is-done-trip-report-march-2026-iso-c-standards-meeting-london-croydon-uk/">завершил</a> техническую работу над C++26. По масштабу изменений — рефлексия, безопасность памяти, контракты, std::execution — это самый значимый релиз со времён C++11.</p><p>В субботу, 29 марта, около 210 экспертов из 24 стран — 130 очно и 80 удалённо — разрешили оставшиеся международные комментарии на встрече в Лондоне (Кройдон, Великобритания). Документ отправляется на финальное голосование ISO (DIS — Draft International Standard) и будет опубликован в ближайшее время.</p><p>— C++26 завершён — самый значимый релиз со времён C++11</p><p>— Четыре главные фичи: рефлексия, безопасность памяти, контракты, std::execution</p><p>— Рефлексия позволяет C++ инспектировать и генерировать собственный код на этапе компиляции</p><p>— Hardened stdlib уже развёрнута в Google (1000+ багов исправлено, segfault-ы −30%) и Apple с оверхедом 0,3%</p><p>— GCC уже имеет рефлексию и контракты в trunk — можно пробовать сейчас</p><p>— Работа над C++29 стартует в июне с фокусом на дальнейшую безопасность памяти</p><h2>Четыре главные фичи C++26</h2><p>Херб Саттер, почётный председатель комитета ISO C++ (chair emeritus с 2025 года), <a href="https://herbsutter.com/2026/03/29/c26-is-done-trip-report-march-2026-iso-c-standards-meeting-london-croydon-uk/">называет</a> их «Fab Four» — четвёрка фич, которые делают C++26 прорывным релизом.</p><h3>1. Рефлексия — крупнейшее обновление со времён шаблонов</h3><p>Compile-time рефлексия позволяет C++ описывать самого себя и генерировать код на этапе компиляции. Оператор <b>^</b> (reflection operator) превращает сущность в её метаданные, а шаблонные функции из пространства <b>std::meta</b> позволяют работать с ними:</p><p>По словам Саттера, это «самый мощный новый движок для выражения эффективных абстракций за всю историю C++». Рефлексия <a href="https://herbsutter.com/2025/06/">попала</a> в драфт C++26 ещё в июне 2025 года.</p><h3>2. Меньше UB — больше безопасности памяти</h3><p>C++26 делает существующий код безопаснее <b>просто при перекомпиляции</b>, без изменений в исходниках. UB (undefined behavior, неопределённое поведение) — исторически главный источник уязвимостей в C++. Два ключевых улучшения:</p><ul><li><b>Чтение неинициализированных переменных больше не UB.</b> Целая категория уязвимостей исчезает при переходе на C++26</li><li><b>Hardened стандартная библиотека</b> — автоматические проверки границ при обращении к элементам vector, span, string, string_view и десятков других типов. При выходе за границы — trap вместо тихого повреждения памяти</li></ul><p>Это не теоретический дизайн. В Google hardened stdlib уже <a href="https://dl.acm.org/doi/10.1145/3712171">развёрнута</a> на сотнях миллионов строк C++: исправлено более 1000 багов, прогноз — предотвращение 1000–2000 багов в год, segfault-ы по всему production-флоту снизились на 30%. В Apple — аналогичный масштаб. Средние накладные расходы — всего 0,3% производительности.</p><blockquote>Из сотен миллионов строк C++ в Google только пять сервисов полностью отказались от hardening из-за проблем с производительностью. Гранулярный API для небезопасного доступа использовался всего в семи местах.</blockquote><h3>3. Контракты: pre, post, contract_assert</h3><p>Языковые контракты позволяют задавать предусловия, постусловия и утверждения прямо в объявлениях функций — вместо хрупкого макроса <b>assert</b> из C, который не знает ни о параметрах, ни о возвращаемых значениях:</p><p>Фича вызвала серьёзные дебаты. Часть комитета считает, что текущий дизайн контрактов недостаточно продуман — в частности, спорным остаётся поведение при нарушении контракта (вызов хендлера vs немедленный terminate). На финальном голосовании 114 экспертов проголосовали за, 12 — против, 3 воздержались. Рекордно низкое число воздержавшихся показывает, что все определились с позицией.</p><h3>4. std::execution — асинхронная модель C++</h3><p><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html">std::execution</a> (Sender/Receiver) предоставляет унифицированный фреймворк для конкурентности и параллелизма. В отличие от <b>std::async</b> и сырых потоков, фреймворк обеспечивает <b>структурированную конкурентность</b> — код свободен от гонок данных по конструкции.</p><p>Саттер предупреждает: фича мощная (его компания <a href="https://www.citadelsecurities.com/">Citadel Securities</a> уже использует её в production), но пока её сложнее освоить, чем большинство фич C++ — не хватает документации и вспомогательных библиотек.</p><h2>Быстрое внедрение</h2><p>Саттер ожидает, что C++26 будет внедряться значительно быстрее, чем C++17/20/23. Две причины:</p><ol><li><b>Экстраординарный спрос.</b> Рефлексия нужна всем, кто пишет сериализацию, ORM, конфигурации, логирование. Hardened stdlib даёт безопасность бесплатно. В отличие от нишевых фич C++20 (концепты, модули), здесь каждый C++-разработчик найдёт применение в своём коде</li><li><b>Компиляторы уже готовы.</b> На протяжении разработки C++26 и GCC, и Clang уже реализовали две трети фич. GCC уже имеет рефлексию и контракты в trunk — можно пробовать прямо сейчас</li></ol><h2>Как попробовать C++26 уже сейчас</h2><p>Рефлексию и контракты можно попробовать в <a href="https://compiler-explorer.com/">Compiler Explorer</a> (godbolt.org), выбрав GCC trunk с флагом <b>-std=c++26 -freflection</b>. Hardened stdlib в libstdc++ активируется флагами:</p><h2>C++29: ещё больше безопасности</h2><p>На встрече приняли расписание C++29 (следующий трёхлетний цикл). Главный фокус — дальнейшее усиление безопасности памяти, в том числе <a href="https://isocpp.org/std/the-committee">профили безопасности</a> Бьёрна Страуструпа.</p><p>Особенно примечателен доклад Оливера Ханта из Apple (P4158R0): WebKit <a href="https://herbsutter.com/2026/03/29/c26-is-done-trip-report-march-2026-iso-c-standards-meeting-london-croydon-uk/">захардинил</a> более 4 миллионов строк кода подходом «подмножество надмножества» (аналогично Profiles). Результат: закрыты целые классы уязвимостей, политики предотвратили бы большинство исторических эксплойтов.</p><p>Следующие встречи комитета — в Брно (Чехия) в июне и в Бузиос (Рио-де-Жанейро, Бразилия) в ноябре, где начнётся работа над фичами C++29.</p><h2>Выводы</h2><p>C++26 — начало фундаментально новой эры: C++ становится безопаснее по умолчанию, оставаясь верным принципу zero-overhead. Рефлексия даёт инструмент, который заменит тонны макросов и кодогенераторов. Hardened stdlib уже доказала свою эффективность на сотнях миллионов строк кода в Google и Apple.</p><p>Подробный отчёт со встречи — в <a href="https://herbsutter.com/2026/03/29/c26-is-done-trip-report-march-2026-iso-c-standards-meeting-london-croydon-uk/">блоге Херба Саттера</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что случилось с WebAssembly — и почему вы не заметили, как он победил</title>
      <link>https://tproger.ru/translations/chto-sluchilos-s-webassembly---i-pochemu-vy-ne-zametili--kak-on-po</link>
      <comments>https://tproger.ru/translations/chto-sluchilos-s-webassembly---i-pochemu-vy-ne-zametili--kak-on-po?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/chto-sluchilos-s-webassembly---i-pochemu-vy-ne-zametili--kak-on-po</guid>
      <description><![CDATA[<p>WebAssembly не заменил JavaScript — и не должен был. Figma, Cloudflare, Godot, Squoosh уже используют Wasm. Разбираем, как Wasm стал мостом между языками.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/chto-sluchilos-s-webassembly---i-pochemu-vy-ne-zametili--kak-on-po">Что случилось с WebAssembly — и почему вы не заметили, как он победил</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Архитектура ПО]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[WebAssembly]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 27 Mar 2026 16:15:20 GMT</pubDate>
      <content:encoded><![CDATA[<p>В каждом обсуждении WebAssembly найдётся комментарий в стиле «а что с ним стало?». Его рекламировали как революцию. Мы не видим сайтов, полностью написанных на Wasm. Он провалился? Это новый JVM-апплет?</p><p>Нет. WebAssembly победил — просто не так, как все ожидали.</p><p><b>Главное:</b> WebAssembly не заменил JavaScript в браузере — и не должен был. Его главная роль — мост между языками. Figma, Godot, Squoosh, Cloudflare Workers, Zellij — все они используют Wasm, но вы этого не замечаете — и это нормально.</p><h2>Где Wasm уже работает</h2><ul><li><b>Figma</b> — конвертирует C++ кодовую базу в браузерное приложение + запускает пользовательские плагины в песочнице через QuickJS+Wasm</li><li><b>Godot</b> — сборка игр для веба</li><li><b>Squoosh.app</b> — использует C/C++ библиотеки сжатия изображений прямо в браузере</li><li><b>Stackblitz</b> — веб-контейнеры на Wasm</li><li><b>Ruffle</b> — эмулятор Flash в браузере</li><li><b>Cloudflare Workers</b> — запуск недоверенного кода через V8 isolates</li><li><b>Zellij, Envoy, Lapce</b> — экосистема плагинов на Wasm</li></ul><h2>Что такое WebAssembly на самом деле</h2><p>WebAssembly — это <b>язык</b>. Более точно — байткод, похожий на JVM bytecode, но с меньшим API, более строгими гарантиями безопасности и без мнений о том, как управлять памятью.</p><p>Он достаточно низкоуровневый, чтобы чисто компилироваться под большинство архитектур без значительных потерь скорости. При этом Wasm-программа не может ничего без явного разрешения хоста — ни читать файлы, ни ходить в сеть. Всё внешнее — через импорты.</p><h2>Цель компиляции, не язык разработки</h2><p>В Wasm компилируются десятки языков: <b>Rust, C, Zig, Go, Kotlin, Java, C#</b>. Даже интерпретируемые языки работают — их рантаймы компилируются в Wasm (<b>Python</b> через Pyodide, <b>PHP, Ruby</b>). Есть и языки, которые компилируются исключительно в Wasm: <b>AssemblyScript, Grain, MoonBit</b>.</p><p>Ваш браузер уже умеет запускать Wasm. Но есть и автономные рантаймы: <b>Wasmtime</b>, <b>WasmEdge</b>, <b>Wasmer</b> — аналоги JVM, но для Wasm.</p><h2>Безопасность — главное преимущество</h2><p>Всё внешнее взаимодействие — явные импорты от хоста. Это даёт <b>изоляцию на уровне процесса внутри одного процесса</b>. Cloudflare запускает недоверенный код через V8 isolates — старт <b>в 100 раз быстрее</b>, чем отдельный процесс. Fermyon заявляет о старте менее чем за миллисекунду.</p><h2>Мост между языками — главная роль</h2><p>Самое распространённое применение — <b>мост между языками</b>. В большинстве случаев Wasm прозрачен для вас — какая-то библиотека просто использует его в дереве зависимостей. Это обработка изображений, OCR, физические движки, рендеринг, базы данных, парсеры.</p><h2>Ограничения</h2><ul><li>В браузере Wasm работает через тот же пайплайн, что и JS — потолок на производительность</li><li>Пересечение границы хост-программы стоит дорого — пост-мортем Zaplib показал, что постепенная миграция может не дать выигрыша</li><li>Нет нативного строкового типа — системные API приходится пересоздавать, WASI помогает частично</li><li>Самые компактные бинарники даёт Zig, самые тяжёлые без оптимизации — Rust</li></ul><h2>Почему кажется, что ничего не произошло</h2><p>Wasm-инструменты массово используются <b>авторами библиотек</b>, а не разработчиками приложений. Внутренности непрозрачны — и это нормально. Многие ожидали, что можно будет обойтись без .js файлов вообще — это крайне маловероятно, ни один вендор браузеров не работает над этим.</p><p>Фреймворки <b>Blazor</b> (.NET) и <b>Leptos</b> (Rust) позволяют писать веб-приложения без прямого контакта с JS. Стандартизация идёт: <b>WasmGC</b> уже в Chrome, Firefox и Safari; <b>Component Model</b> развивается в Bytecode Alliance.</p><h2>FAQ</h2><h3>WebAssembly быстрее JavaScript?</h3><p>Некорректный вопрос — скорость зависит от рантайма. Но конструкции Wasm хорошо ложатся на современное железо, поэтому в вычислительных задачах Wasm часто быстрее.</p><h3>Wasm заменит JavaScript?</h3><p>Крайне маловероятно. JS остаётся языком браузера, Wasm дополняет его там, где нужны вычисления, безопасность или доступ к библиотекам из других языков.</p><h3>С чего начать?</h3><p>Попробуйте <a href="https://github.com/nicolo-ribaudo/watlings">watlings</a> — упражнения по ручному написанию WAT в стиле rustlings. А для практического применения — wasm-pack для Rust.</p><p>Источник: <a href="https://emnudge.dev/blog/what-happened-to-webassembly/">What Happened To WebAssembly</a> — EmNudge</p>]]></content:encoded>
    </item>
    <item>
      <title>Как мертвые языки помогают программисту лучше понимать код</title>
      <link>https://tproger.ru/news/kak-mertvye-yazyki-pomogayut-programmistu-luchwe-ponimat-kod</link>
      <comments>https://tproger.ru/news/kak-mertvye-yazyki-pomogayut-programmistu-luchwe-ponimat-kod?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/kak-mertvye-yazyki-pomogayut-programmistu-luchwe-ponimat-kod</guid>
      <description><![CDATA[<p>Мертвые языки тренируют структурное мышление: строгая морфология и формальные правила помогают программисту глубже понимать код</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/kak-mertvye-yazyki-pomogayut-programmistu-luchwe-ponimat-kod">Как мертвые языки помогают программисту лучше понимать код</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 18 Feb 2026 14:40:57 GMT</pubDate>
      <content:encoded><![CDATA[<p>Идея звучит как гуманитарный троллинг: зачем разработчику латынь или древнегреческий?</p><p>Но если убрать романтику и посмотреть на структуру, <a href="https://www.howtogeek.com/why-learning-a-dead-language-can-make-you-a-better-programmer/">становится видно</a> странное сходство. Мертвые языки могут похвастаться строгими правилами, формальными системами и дисциплиной мышления. И в этом они пугающе похожи на программирование.</p><h2>Морфология вместо порядка — как типы вместо позиций</h2><p>В английском все решает порядок слов. Поменял местами — поменял смысл. В латыни или древнегреческом важнее не позиция, а форма слова — окончание. Именно оно показывает, кто субъект, кто объект, кто инструмент действия.</p><p>Чем это похоже на код? Как минимум тем, что поведение объекта определяется его типом и свойствами, а не тем, в какой строке он стоит.</p><p>Когда вы разбираете сложное латинское предложение, вы не можете просто «прочитать слева направо». Приходится держать в голове несколько гипотез, пока финальный глагол не «закроет» всю конструкцию.</p><p>Это тренирует рабочую память и способность декомпозировать структуру.</p><h2>Санскрит как формальная грамматика</h2><p>Санскрит часто называют «инженерным языком древности». Его грамматику описал Панини — почти четыре тысячи правил, работающих как система мета-инструкций.</p><p>Там есть рекурсия. Есть правила, которые применяются к другим правилам. Есть даже строгая формальная логика вывода словоформ.</p><p>По сути, это древний DSL для генерации корректных выражений. Если вам близки алгоритмы и формальные системы, санскрит — это прекрасная «логическая тренировка». Он заставляет мыслить через правила, а не через интуицию.</p><h2>А практический смысл есть?</h2><p>Есть побочный бонус: примерно 60% английской лексики и до 90% научной терминологии имеют латинские и греческие корни. Это не делает вас лучшим разработчиком автоматически, но улучшает понимание терминов и документации.</p><p>Но главный эффект — когнитивный. Когда вы учите язык с жесткой морфологией и формальными правилами, мозг привыкает к структурному мышлению. А программирование — это и есть работа со структурами.</p>]]></content:encoded>
    </item>
    <item>
      <title>На чём писать в 2026: какой язык программирования выбрать, если хочется обновить стек</title>
      <link>https://tproger.ru/articles/na-chyom-pisat-v-2026--kakoj-yazyk-programmirovaniya-vybrat--esli-hochetsya-obnovit-stek</link>
      <comments>https://tproger.ru/articles/na-chyom-pisat-v-2026--kakoj-yazyk-programmirovaniya-vybrat--esli-hochetsya-obnovit-stek?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/na-chyom-pisat-v-2026--kakoj-yazyk-programmirovaniya-vybrat--esli-hochetsya-obnovit-stek</guid>
      <description><![CDATA[<p>Выбор языка программирования в 2026: объективный анализ Python, C, C++, Java, C#, JavaScript и Visual Basic. В статье вы найдете стратегии перехода между языками, оценку рисков и возможностей, а также дорожную карту для обновления стека.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/na-chyom-pisat-v-2026--kakoj-yazyk-programmirovaniya-vybrat--esli-hochetsya-obnovit-stek">На чём писать в 2026: какой язык программирования выбрать, если хочется обновить стек</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 19 Jan 2026 12:30:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рынок разработки в 2026 году не обнуляется, но заметно перетасовывается. Это среда, где ИИ уже встроен в рабочие процессы, системное программирование снова становится массово востребованным, высокие нагрузки перестают быть экзотикой, требования к безопасности растут, а кроссплатформенность набирает обороты. На этом фоне вопрос обновления стека — важен в контексте сохранения рыночной ценности в ближайшие годы.</p><p>Подборка в этом материале опирается на <a href="https://www.tiobe.com/tiobe-index/">TIOBE Index </a>— международный рейтинг популярности языков программирования, который ежемесячно формируется на основе данных поисковых систем, количества обучающих материалов и активности профессионального сообщества. Некий индикатор того, где сейчас сосредоточен реальный спрос.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-12-22/9a5abb10-371c-4aae-8048-a544c74fa5df.png" alt="" /></figure><p>Разберём на примере семи самых рейтинговых языков, какие из них логично рассматривать в 2026 году (и логично ли) действующим разработчикам, и из каких стеков в них входить быстрее всего.</p><h2>Python в 2026: универсальный усилитель для бэкенда, данных и ИИ</h2><p>В 2026 году Python остаётся языком, который проще всего встроить в уже существующий стек. Он <a href="https://mimo.org/blog/top-ai-programming-languages">живёт </a>в областях, где важны скорость разработки и плотность экспериментов: машинное обучение и прикладные AI-задачи, data engineering и ETL-процессы, автоматизация рутинных операций, разработка девтулов и утилит; а также в бэкенде, где критичнее гибкость, чем низкоуровневая оптимизация.</p><p>Переходить на Python проще всего тем, кто привык мыслить объектно и работать с динамикой. Самый оптимальный вариант — из JS, PHP и Java:</p><ul><li>Разработчики на JavaScript <a href="https://evrone.ru/blog/articles/from-java-to-python">уходят</a> в питон почти бесшовно: есть близкие модели данных, схожая философия быстрого прототипирования и огромная база библиотек.</li><li>PHP-разработчики <a href="https://habr.com/ru/companies/exWargaming/articles/221035/">адаптируются</a> к языку благодаря знакомому подходу к бэкенд-логике и работе с фреймворками, но есть принципиальная разница к подходам с типизацией.</li><li>Преимущества для Java-специалистов в<a href="https://evrone.ru/blog/articles/from-java-to-python"> понятном</a> синтаксисе и лаконичности Python, поэтому переход также возможен.</li><li>Аналитики и тестировщики переходят на Python через <a href="https://habr.com/ru/articles/843520/">практику</a>: скрипты автоматизации быстро превращаются в продуктивные инструменты.</li></ul><p>Порог входа <a href="https://blog.jetbrains.com/pycharm/2025/08/the-state-of-python-2025/">низкий</a>: синтаксис прямолинейный, в экосистеме есть готовые решения почти на каждый случай, а первые практические результаты появляются через считанные недели. Но это же создаёт риски. Так как вход в язык относительно лёгкий (это подтверждает первое место в рейтинге) — конкуренция высокая, особенно в прикладном ML. Кроме того, в <a href="https://www.opennet.ru/openforum/vsluhforumID3/138045.html">высоконагруженных системах</a>, где важна каждая микросекунда, асинхронное программирование и управление памятью требуют глубоких знаний, выходящих за рамки базового синтаксиса.</p><p>Python — не лучший выбор для тех, кто работает в системном программировании, embedded или инфраструктуре на C/C++. В этих задачах важна предсказуемость управления памятью, а не удобство разработчика.</p><h2>C в 2026: опорный язык для embedded, драйверов и систем реального времени</h2><p>В 2026 году С остаётся <a href="https://habr.com/ru/companies/swd_es/articles/508240/">фундаментом</a> там, где железо важнее абстракций. Он работает на микроконтроллерах, в промышленной автоматике, драйверах, прошивках и в RTOS-средах, где критична предсказуемость времени выполнения и полный контроль над ресурсами. Это язык, вокруг которого ещё долго будут строиться системы, способные жить десятилетиями.</p><p>Проще всего переход даётся тем, кто уже держал в руках низкоуровневый стек — в C можно войти из C++ и эмбеда:</p><ul><li>Переход с C++ на C <a href="https://stackoverflow.com/questions/4058496/moving-from-c-to-c">естественен</a> из-за общей модели памяти и необходимости понимать стоимость операций.</li><li>Специалисты по встраиваемым системам (embedded) часто <a href="https://hexly.ru/professiya-info/embedded-programmist">начинают</a> с C/C++ и глубоко понимают аппаратную часть, что делает переход к чистому C логичным.</li></ul><p>Вход кажется простым только внешне. Настоящая работа начинается там, где ответственность лежит за всё — от выделения памяти до обработки ошибок. Минимум встроенных защит и отсутствие автоматического управления ресурсами требуют инженерной дисциплины. Ошибки в C <a href="https://habr.com/ru/articles/883992/">редко проявляются </a>спокойно: они выливаются в падения, утечки, нестабильные устройства и долгие ночи с отладчиком.</p><p>Зато выгода ощутимая. По-прежнему ценится умение работать с ограниченными ресурсами и понимать систему изнутри. Это профессии с высокой инженерной значимостью и долгим жизненным циклом: такие проекты живут годами и переживают несколько поколений языков.</p><p>Не стоит идти в C тем, кто работал только в веб-стеке и никогда не сталкивался с ограничениями железа. <a href="https://skyeng.ru/it-industry/programming/chto-vybrat-dlya-razrabotki-c-ili-python/">В отличие</a> от Python, ориентированного на скорость разработки и обладающего автоматическим управлением памятью, C требует полного низкоуровневого контроля над ресурсами, что создаёт огромный разрыв в парадигмах программирования. Путь в продакшен может превратиться в затяжной стресс вместо профессионального роста.</p><h2>C++ в 2026: высокопроизводительные системы, игры и сложная инженерия</h2><p>В 2026 году C++ <a href="https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2026-version-18-0/">остаётся </a>рабочей лошадкой там, где важны скорость, предсказуемость и возможность вручную управлять каждым уровнем системы. Он используется в игровых движках, графических пайплайнах, симуляторах, системах хранения и в любом ПО, где миллисекунды стоят денег или определяют игровой опыт. Это язык, который не потерял актуальность и вряд ли потеряет — слишком много инфраструктуры на нём держится.</p><p>Проще всего переходят те, кто уже понимает низкоуровневую модель — специалисты по C и Rust:</p><ul><li>Разработчики на C чувствуют себя здесь как дома, ведь не теряют контроль и получают больше инструментов.</li><li>Тем, кто <a href="https://www.linkedin.com/posts/lanceharvie_embeddedsystems-rustlang-cprogramming-activity-7227508999947005953-59ws">пришёл </a>из Rust, знакомы принципы безопасности памяти, хотя в C++ они реализованы иначе.</li></ul><p>Главное преимущество C++ остаётся неизменным: он позволяет строить системы, где скорость и контроль указаны в требованиях. Производительность, доступ к железу, возможность оптимизировать всё вручную — это сильные стороны, благодаря которым язык удерживает позиции в самых сложных доменах. Вместе с этим <a href="https://habr.com/ru/articles/862832/">растёт</a> и планка задач: на C++ редко делают что-то простое, и это превращает язык в сильный показатель инженерной зрелости.</p><p>Минусы есть. Экосистема зачастую <a href="https://habr.com/ru/companies/ruvds/articles/871940/">тяжеловесна</a>, а стандарт развивается быстро, что может осложнять поддержку актуальности проектов. Ошибки стоят дорого: неправильное владение памятью, неоптимальный алгоритм или гонки данных могут превратиться в реальные финансовые или продуктовые потери. C++ вознаграждает за дисциплину и карает за невнимательность.</p><p>Переход оправдан тогда, когда нужна работа в performance-доменах: игровой dev, real-time-системы, графика, симуляции, базы данных. Если задачи требуют скорости и полного контроля над процессом — C++ остаётся одним из самых мощных инструментов для этого уровня.</p><h2>Java в 2026: стабильный корпоративный бэкенд и инфраструктура, которая не рушится</h2><p>В 2026 году Java остаётся одним из самых <a href="https://softjourn.com/insights/is-java-still-used">устойчивых</a> языков для корпоративных систем. Банки, страховые компании, платёжные сервисы, крупные ритейлеры и весь классический enterprise-сегмент продолжают работать на JVM-стеке, потому что он проверен, масштабируется и выдерживает десятки лет развития продукта.</p><p>Переход проще всего даётся тем, кто уже жил в объектно-ориентированной модели — C#, Kotlin.</p><ul><li>C#-спецы попадают почти в привычную среду, где меняются лишь инструменты, но не логика разработки.</li><li>Kotlin-разработчики <a href="https://www.infoworld.com/article/2244227/jetbrains-kotlin-jvm-language-appeals-to-the-java-faithful.html">ощущают </a>Java как чуть более формальную, но узнаваемую основу JVM.</li></ul><p>Java остаётся рабочим языком по очень приземлённым причинам. Объём существующего кода огромный, и его нужно поддерживать, развивать, переписывать и интегрировать с современными сервисами. Стабильность и предсказуемость стека — редкая ценность в отрасли, где технологии меняются каждые пару лет. Java хорошо масштабируется, отлично ложится на корпоративные процессы, <a href="https://evincedev.com/blog/top-java-frameworks-for-web-developement/">имеет </a>зрелые фреймворки и помогает разработчикам быть востребованными в крупных компаниях, где команды десятилетиями развивают один продукт.</p><p>Но у языка есть ограничения. Попасть в экосистему без опыта сложнее, потому что компании ожидают зрелости, аккуратности и умения работать с большими системами. Старт карьеры в Java <a href="https://cpb-runo.ru/news/programming/pochemu-java-luchshiy-yazyk-dlya-starta-v-it-universalnost-i-vostrebovannost-na-rynke/">может</a> быть простым, но рост до уровня enterprise-разработчика требует изучения сложных концепций и фреймворков.</p><p>Язык подойдёт тем, кто хочет развивать крупные платформы, работать с надёжной архитектурой и видеть долгосрочный эффект от своих решений. Если цель — предсказуемый рост, корпоративный бэкенд и инфраструктура, Java в 2026 остаётся одной из самых практичных точек входа.</p><h2>C# в 2026: универсальный стек для бэкенда, геймдева и кроссплатформы</h2><p>В 2026 году C# <a href="https://www.educative.io/blog/is-c-sharp-and-net-still-relevant">уверенно</a> держит позицию одного из самых практичных языков для разработчиков, которым нужен сбалансированный стек: промышленный бэкенд, стабильные корпоративные продукты, кроссплатформенная разработка и <a href="https://nt.ua/ru/advantages-trends-and-prospects-for-development-in-c-sharp-and-dot-net">геймдев</a> на Unity. Это язык, который позволяет работать сразу в нескольких направлениях, не выпадая из экосистемы .NET.</p><p>Чаще всего C# живёт в web-бэкенде, корпоративных приложениях и десктопных продуктах — там, где важны производительность, предсказуемость и хорошая интеграция с инфраструктурой. Unity по-прежнему остаётся главным входом в геймдев для начинающих, и именно через него многие приходят в C#, а не наоборот.</p><p>Переходить сюда проще Java-разработчикам, <a href="https://softjourn.com/insights/c-sharp-vs-java">из-за</a> схожего объектно-ориентированного синтаксиса.</p><p>C# <a href="https://nt.ua/ru/advantages-trends-and-prospects-for-development-in-c-sharp-and-dot-net">усиливается </a>благодаря развитию .NET и всё более уверенной кроссплатформенности. Этому стеку уже не нужно доказывать свою жизнеспособность: он стабильно используется в компаниях разного масштаба, даёт хороший гарантированный спрос на рынке и регулярно обновляется без резких ломок экосистемы.</p><p>Особенно выгодно выбирать C#, если хочется совмещать бэкенд и геймдев — редкое сочетание, которое открывает широкий диапазон карьерных возможностей. Это стек, позволяющий развиваться горизонтально, не меняя язык при переходе между разными индустриями.</p><h2>JavaScript в 2026: опора веба и самый быстрый путь в fullstack</h2><p>В 2026 году JavaScript <a href="https://dev.to/blarzhernandez/what-will-shape-the-next-wave-of-frontend-development-in-2026-backed-by-experts-data-52h3">остаётся</a> одним из главных рабочих языков для продуктовых команд: он ведёт фронтенд, закрывает часть бэкенда через Node.js и работает в мобильных приложениях.</p><p>Перейти сюда проще всего тем, кто уже<a href="https://sky.pro/wiki/html/luchshie-yazyki-dlya-sozdaniya-veb-sajtov-chto-vybrat/"> работал</a> с вебом — PHP и Python:</p><ul><li>PHP-разработчики смогут быстро адаптироваться к асинхронности и современным подходам.</li><li>Python-разработчики оценят низкий порог входа и скорость, с которой можно развернуть рабочий прототип.</li></ul><p>JavaScript остаётся одним из ключевых языков из-за ширины экосистемы и того, что браузер задаёт технические ограничения и возможности для всего фронтенда. Он <a href="https://tobiz.net/support/perspektivy-veb-razrabotki-v-2026-frontend-bekend-i-fullstek/">хорошо</a> масштабируется на фуллстек, что делает его удобным языком для продуктовых команд, которым важен быстрый цикл разработки.</p><p>Главный вызов — JS <a href="https://dev.to/blarzhernandez/what-will-shape-the-next-wave-of-frontend-development-in-2026-backed-by-experts-data-52h3">быстро</a> меняется, и это требует регулярных вложений времени в поддержание компетенций.</p><p>JavaScript — лучший выбор, если нужен быстрый переход в другой домен без полной переучки: от фронтенда к бэкенду, от веба к мобильному приложению, от продуктового стека к созданию собственных инструментов.</p><h2>Visual Basic в 2026: язык, который до сих пор жив</h2><p>В 2026 году Visual Basic — это язык, который держится за счёт огромного слоя легаси-систем, внутренних корпоративных решений и автоматизаций вокруг Office. Он живёт там, где продукт работает много лет и стабильно приносит деньги, но уже <a href="https://www.braintools.ru/article/16792">устаревает</a>.</p><p>Visual Basic всё ещё встречается в старых внутренних продуктах, отчётных системах, инструментах на базе Excel и в корпоративных контурах, которые строились до эпохи массовой веб-разработки.</p><p>Почему язык до сих пор всплывает в индексах и рейтингах? Потому что огромный пласт кода всё ещё выполняется в продакшене. Бизнес выбирает стабильность: если система работает, её не переписывают.</p><p>Входить в Visual Basic с нуля в 2026 году почти никогда не рационально. Это не инвестиция в карьеру, а узкая специализация, завязанная на конкретный контур внутри конкретной компании. Смысл появляется только в одной ситуации: вы уже работаете в организации, которая держит ключевую систему на VB, и переход даёт повышение или расширение роли. Но если слишком хочется, то ориентируйтесь на требования конкретной компании.</p><h2>Почему не стоит слепо доверять общим рейтингам языков</h2><p>Важно сделать оговорку: любые общие рейтинги языков программирования — включая TIOBE — дают лишь приближённую картину и не могут служить прямой инструкцией к выбору стека.</p><p>TIOBE Index строится на анализе поисковых запросов, упоминаний в обучающих материалах и общей видимости языка в сети. Это скорее индикатор узнаваемости и обсуждаемости, чем отражение реального распределения задач, вакансий и индустриальных доменов. Язык может быть высоко в рейтинге, потому что о нём много пишут, спорят или учат, но это не всегда означает, что именно на нём сейчас создаётся больше всего коммерческого продукта.</p><p>Именно поэтому у практикующих разработчиков рейтинги часто вызывают скепсис. В реальной работе языки живут внутри конкретных областей. Геймдев не переезжает на Python или TypeScript, мобильная разработка не отказывается от Swift и Kotlin, системное программирование, embedded и highload по-прежнему требуют C, C++ или Rust. Универсального списка «главных языков года» просто не существует — есть разные наборы под разные задачи.</p><p>Отдельный аргумент — рынок вакансий. Он часто даёт более приземлённую картину спроса, чем глобальные индексы. Например, как сообщает <a href="https://t.me/blog7x">Евгений Красников</a>, разработчик ПО, в лидерах оказываются совсем не те языки, которые традиционно доминируют в международных чартах: высокие позиции занимают 1С, Python, Java, JavaScript, PHP, Go. Это не отменяет глобальных трендов, но показывает, насколько сильно результаты зависят от региона и структуры экономики.</p><p>Ещё одна проблема рейтингов — они плохо учитывают влияние ИИ на разработку. Да, сегодня Python и JavaScript действительно выигрывают за счёт того, что на них проще и быстрее генерировать код с помощью AI-инструментов. Но это не означает, что весь новый софт будет писаться только на них. Языки по-прежнему выбирают под требования к производительности, безопасности, модели исполнения и жизненному циклу продукта — и эти требования никуда не исчезли.</p><p>Поэтому подборка языков в этом материале — не попытка назвать «лучшие языки 2026 года», а способ показать набор устойчивых стеков, которые логично рассматривать при обновлении навыков. Рейтинги здесь — отправная точка для разговора, а не истина в последней инстанции. В реальности язык почти всегда выбирается не по позиции в индексе, а по домену, типу задач и карьерной стратегии разработчика.</p><h2>Как выбрать язык для перехода: дорожная карта</h2><p>Обновление стека приносит пользу только тогда, когда связано с реальными задачами и карьерной траекторией. В 2026 году переходы лучше совершать горизонтально: оставаться в своём направлении, но расширять инструменты, чтобы работать быстрее и закрывать больше типов задач.</p><p>Основой выбора остаются три фактора: текущий стек; домен, в котором вы уже сильны; рынок, куда хотите сместиться (корпорации, международные компании или продуктовые команды).</p><p>Запомните техническое правило: не уходить сразу в область, которая сильно отличается по уровню абстракций или модели исполнения. Такой скачок обычно замедляет прогресс и растягивает срок выхода к офферу.</p><p>Если выбирать наиболее безопасную стратегию, то это переход внутри текущего направления. Например:</p><p>– backend → backend на другом языке;</p><p>– data → data с расширением инструментов;</p><p>– frontend → fullstack как способ увеличить гибкость и ценность в команде.</p><p>Такой подход позволяет нарастить стек, не теряя опыт, и быстрее выйти на уровень, где новый инструмент начинает приносить отдачу (и деньги).</p><p>Ну и напоследок даем совет от Игоря Алентьева, продуктового разработчика и создателя агрегатора IT-вакансий <a href="https://hirify.me">hirify.me</a>.</p><blockquote>Нет никакого смысла учить в 2026 что то кроме питона и js/ts: весь новый софт пишется на них (не в последнюю очередь, потому что на них отлично пишет AI), поэтому если нет исключительной любви к легаси или какому-то определенному языку, просто берите их и не ошибетесь. <br />Если есть любовь к энтерпрайзному софту, всяким банкам/телекомам, то подойти могут java/kotlin/c#. Но это нисходящий тренд на горизонте 5-10 лет. <br />В целом, нужно учиться работать с AI, ведь через какое-то количество лет код не будут писать руками, только проектировать.</blockquote><p>Желаем удачи в переходе на новый язык!</p>]]></content:encoded>
    </item>
    <item>
      <title>Программирование по-русски: от советских ЯП до JavaScript на кириллице</title>
      <link>https://tproger.ru/articles/programmirovanie-po-russki--ot-sovetskih-yap-do-javascript-na-kirillice</link>
      <comments>https://tproger.ru/articles/programmirovanie-po-russki--ot-sovetskih-yap-do-javascript-na-kirillice?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/programmirovanie-po-russki--ot-sovetskih-yap-do-javascript-na-kirillice</guid>
      <description><![CDATA[<p>Русскоязычные языки программирования: история советских ЯП от Рапиры до JavaScript на кириллице. Почему одни исчезли, а другие живы до сих пор</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/programmirovanie-po-russki--ot-sovetskih-yap-do-javascript-na-kirillice">Программирование по-русски: от советских ЯП до JavaScript на кириллице</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 14 Jan 2026 12:27:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Пока мир программировал на FORTRAN и COBOL, советские инженеры создавали языки на кириллице. В школах учили Рапире, на оборонных предприятиях писали русский код для суперкомпьютеров, конструкторы «Бурана» рисовали алгоритмы в ДРАКОН.</p><p>Большинство языков ушли в историю — но идея русскоязычного программирования неожиданно получила продолжение.</p><p>В 2025 году преподаватели Пензенского университетаперевелисинтаксис JavaScript на кириллицу и уже обучают студентов писать код без единой латинской буквы.</p><p>В статье рассказываем, как работали русскоязычные ЯП, почему они появились именно в СССР, какие задачи решали и что с ними стало после распада Союза — некоторые идеи актуальны до сих пор.</p><h2>1. Рапира</h2><p>Язык придумали в 1987 году в Институте систем информатики им. А.П. Ершова в Новосибирске. Название расшифровывается как «Русский Алгоритмический Процедурный Императивный Расширяемый Адаптируемый».</p><p>Рапиру создавали для обучения программированию школьников и студентов. Синтаксис использовал русские ключевые слова:</p><ul><li>проц вместо function,</li><li>цел вместо int,</li><li>вывод вместо print.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-12-29/592ac780-9ed1-4701-b080-2ab0f115ea55.jpg" alt="" /><figcaption>Пример программы на Рапире</figcaption></figure><p>Язык поддерживал процедуры, функции, массивы, работу с файлами и базовые структуры данных.</p><p>Рапиру преподавали в советских школах и вузах с конца 1980-х до середины 1990-х годов. После распада СССР язык исчез из учебных программ — его вытеснили <b>Pascal</b> и <b>Basic</b>.</p><p>Сегодня язык не поддерживается, компиляторы не обновляются, сообщества разработчиков не существует. Исходный код программ на Рапире сохранился только в архивах и учебниках того времени.</p><h2>2. ПЭВМ Искра-1256</h2><p>Безымянный язык программирования для компьютера «Искра-1256» появился в конце 1980-х годов. Машину выпускал Ленинградский завод имени Светланы для автоматизации офисной работы — учёта, делопроизводства, составления отчётов.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-12-29/b71340ef-c0da-4be9-a93d-5e137b052ef7.jpg" alt="" /><figcaption>Советский компьютер Искра-1256, 1980 год выпуска</figcaption></figure><p>Разработчики встроили интерпретатор языка в ПЗУ компьютера, чтобы пользователи писали программы без установки дополнительного софта. Целевая аудитория — бухгалтеры, секретари, экономисты без технического образования.</p><p>Синтаксис копировал структуру русских предложений. Программист набирал команды в диалоговом режиме, интерпретатор выполнял их сразу после ввода.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-12-29/86b0e844-3ee8-4728-a338-d98c01005935.jpg" alt="" /><figcaption>Примеры программ на Искра-1256</figcaption></figure><p>Язык поддерживал арифметические операции, работу с текстовыми данными, условные переходы и циклы. Документация описывала его как инструмент для расчёта зарплат, ведения складского учёта и формирования табличных отчётов. Программы сохранялись на встроенный накопитель или дискеты.</p><p>«Искра-1256» выпускалась ограниченной серией и поставлялась в государственные учреждения. После 1991 года производство прекратилось. Компьютеры заменили на машины с DOS и Windows. Язык исчез вместе с платформой — портирование на другие системы не проводилось.</p><p>Сегодня информация о языке сохранилась в технических описаниях «Искры-1256» и воспоминаниях пользователей.</p><h2>3. Эль-76</h2><p>Это разработка конца 1970-х годов родом из Института точной механики и вычислительной техники в Москве. Язык придумали специально для суперкомпьютера «Эльбрус-1».</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-12-29/55d17e1d-adbf-404b-93bb-63ecc950cf2d.jpg" alt="" /><figcaption>Суперкомпьютер Эльбрус-1 в СССР</figcaption></figure><p>Эль-76 использовал русские ключевые слова и кириллицу для всех операторов. Синтаксис поддерживал структурное программирование — последовательности, ветвления, циклы. Программы разбивались на подпрограммы. Система типов хранила информацию о переменной вместе с её значением в памяти.</p><p>Язык применяли на суперкомпьютерах в оборонных предприятиях и научных центрах СССР. Машины поддерживали суперскалярность — выполнение нескольких инструкций за такт — и защитное программирование для критичных систем.</p><p>После распада Союза производство суперкомпьютеров прекратилось, Эль-76 перестали использовать. Сегодня процессоры «Эльбрус» выпускаются для государственных нужд, но работают с современными языками — C, C++, Fortran.</p><h2>4. КуМир</h2><p>КуМир (Комплект Учебных МИРов) разработан в НИИСИ РАН в начале 2000-х годов. Его создали для обучения школьников. В отличие от Рапиры и Эль-76, КуМир пережил свою эпоху.</p><p>Синтаксис использует русские ключевые слова:</p><ul><li>алг (алгоритм),</li><li>нач (начало),</li><li>кон (конец),</li><li>цел (целое),</li><li>нц (начало цикла).</li></ul><p>КуМир включает визуальных исполнителей — Робот, Чертёжник, Черепаха. Школьник пишет команды вправо, вперед, закрасить и видит результат на экране. Исполнители помогают понять циклы, условия и процедуры без абстрактных примеров с числами.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-12-29/ca5a12df-a7a8-4ac7-ac7a-a4e31c67511f.jpg" alt="" /><figcaption>Программа с визуальным исполнителем «Черепаха»</figcaption></figure><p>Язык входит в школьную программу по информатике. Задания ЕГЭ публикуют на псевдокоде, который копирует синтаксис КуМира. Ученики решают задачи в среде КуМир, готовятся к экзамену.</p><p>Практическое применение ограничено образованием. КуМир не используют в коммерческой разработке, библиотек для веб-разработки или работы с базами данных. После школы ученики переходят на Python, JavaScript или C++.</p><h2>5. АЛМИР-65</h2><p>Название расшифровывается как «Алгоритмический язык для машины инженерных расчётов». Язык работал на компьютерах серии МИР — настольных машинах размером с письменный стол.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-12-29/e605882a-9be8-4d60-a09e-2140af0c48ea.jpg" alt="" /><figcaption>ЭВМ МИР-1</figcaption></figure><p>Синтаксис копировал математическую нотацию: формулы записывали почти так же, как в учебниках по математике. Инженер открывал руководство, смотрел пример и через час уже решал свои задачи без помощи программистов.</p><p>Язык обрабатывал числа с плавающей точкой, работал с массивами и матрицами. Компьютер МИР выводил результаты на экран сразу после ввода команды — диалоговый режим работы в 1965 году встречался редко.</p><p>АЛМИР-65 использовали конструкторские бюро, научные лаборатории и учебные заведения СССР. Инженеры рассчитывали прочность конструкций, физики моделировали эксперименты, студенты учились программированию. Идеи языка развили в АЛМИР-Аналитик.</p><h2>6. Аналитик</h2><p>Язык создали в 1968 году в Институте кибернетики АН УССР. Разработка продолжила линию языка АЛМИР-65. Первую версию Аналитика запустили на компьютерах МИР-2, созданных в том же институте.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-12-29/21e58a59-501d-4c68-afbe-2447fd815de9.jpg" alt="" /><figcaption>Советский компьютер МИР-2</figcaption></figure><p>Программист описывал абстрактные типы данных и работал с произвольными алгебрами — группами, кольцами, полями. Аналитик выполнял преобразования формул, упрощал выражения, решал уравнения в символьном виде.</p><p>В 1974 году вышла версия Аналитик-74 для компьютеров МИР-3. Язык применяли в научных расчётах — физике, математике, механике. Исследователи писали программы для вывода формул, дифференцирования, интегрирования, работы с матрицами и полиномами.</p><p>После распада СССР разработка не прекратилась, на его базе создали систему компьютерной алгебры Аналитик-2010. Современная версия работает на актуальных операционных системах и сохраняет идеи оригинального языка.</p><p>Практическое применение Аналитика ограничено академической средой.</p><h2>7. Робик</h2><p>Язык используют в российских школах с 2000-х годов. Синтаксис построен на кириллических ключевых словах.</p><p>Программа управляет виртуальным роботом на клетчатом поле. Робот выполняет команды движения, закрашивает клетки и проверяет наличие стен. Типичная задача: пройти лабиринт или закрасить фигуру по заданному алгоритму.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-12-29/eccbfd25-25e8-4872-b819-aaaf6b252a77.jpg" alt="" /><figcaption>Пример задачи на ЯП «Робик»</figcaption></figure><p>Робик содержит три управляющие конструкции:</p><ul><li>цикл со счётчиком (нц 10 раз … кц),</li><li>цикл с условием (нц пока свободно снизу … кц),</li><li>условный оператор (если закрашена то … иначе … все).</li></ul><p>Переменных, функций и типов данных нет — только последовательность команд.</p><p>Пример программы, которая закрашивает квадрат 3×3:</p><p>Робик входит в задания по информатике ОГЭ и ЕГЭ. Практическое применение ограничено образованием.</p><h2>8. ДРАКОН</h2><p>ДРАКОН разработали в 1980-х годах для советской космической программы. Расшифровка названия — Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность. Программист не пишет код, а рисует блок-схемы.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-12-29/efaf4341-965c-47d4-882e-b5dab524a1a5.jpg" alt="" /><figcaption>Алгоритм поездки на автобусе в виде ДРАКОН-схемы</figcaption></figure><p>Язык использовали в НПО «Энергия» при разработке «Бурана». Сейчас существуют редакторы ДРАКОН-схем с генерацией кода на Python, C++, Java. Программист рисует схему, нажимает кнопку — получает исходники.</p><p>Практическое применение:</p><ul><li>документирование сложной логики,</li><li>проектирование критичных систем,</li><li>обучение алгоритмам.</li></ul><p>ДРАКОН-схема заменяет десятки страниц технического описания.</p><h2>9. ЯМБ</h2><p>Язык Машин Бухгалтерских разработали в конце 1970-х годов. Название связывают с инициалами Марины Борисовны Ярошевской — руководителя группы разработки из СКБ ВТ «Искра».</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-12-29/8bb654a4-eac6-4376-af50-b6dc373aac56.jpg" alt="" /><figcaption>Компьютер «Искра»</figcaption></figure><p>ЯМБ использовал русскоязычный синтаксис — команды записывали кириллицей. Программисты писали на нём приложения для учёта материальных ценностей, начисления зарплаты, формирования отчётности.</p><p>Язык адаптировали под специфику бухгалтерских задач:</p><ul><li>работу с таблицами,</li><li>суммирование колонок,</li><li>форматирование документов.</li></ul><p>Практическое применение ограничивалось советскими организациями. После перехода бухгалтерий на программы типа «1С» про ЯМБ забыли.</p><h2>10. 1С:Предприятие</h2><p>Платформу «1С:Предприятие» выпустили в 1991 году. Фирма «1С» создала её для автоматизации бухгалтерского учёта в российских компаниях.</p><p>Встроенный язык программирования использует русскоязычный синтаксис. Разработчики пишут команды кириллицей:</p><p>Платформа генерирует интерфейсы и таблицы базы данных автоматически. Программист описывает структуру справочников, документов, отчётов в визуальном конфигураторе. Система создаёт формы ввода, списки, печатные формы без ручного написания SQL или HTML.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-12-29/9f600126-8b0a-4b94-b005-457a196eacdf.jpg" alt="" /><figcaption>Программа в «1С:Предприятие»</figcaption></figure><p>Язык запросов встроен в платформу — разработчик получает данные через конструкции типа ВЫБРАТЬ Номенклатура, Количество ИЗ Документ.Товары.</p><p>Рынок 1С существует параллельно классической разработке. Вакансий публикуют больше, чем по Rust или Swift. Специалисты пишут типовые конфигурации, дорабатывают учётные системы под требования заказчиков, интегрируют 1С с сайтами и CRM.</p><h2>Выводы</h2><p>Большинство языков исчезли вместе с платформами, для которых создавались. Рапира, Эль-76, АЛМИР-65, ЯМБ остались в архивах и воспоминаниях — их вытеснили международные стандарты.</p><p>Три проекта выжили:</p><ul><li><b>КуМир </b>стал основой для подготовки к ЕГЭ.</li><li><b>ДРАКОН </b>занял нишу в документировании сложных систем.</li><li><b>1С </b>превратилась в отдельную индустрию с десятками тысяч вакансий.</li></ul><p>Язык программирования выживает благодаря экосистеме, сообществу и решению актуальных задач. Кириллица в синтаксисе работает технически, но практическая ценность определяется совместимостью с мировыми инструментами.</p><p>В 2026 году русскоязычные разработчики пишут на Python и JavaScript. Однако история советских языков напоминает: технологический суверенитет возможен, если есть задачи, ресурсы и готовность десятилетиями поддерживать разработку.</p>]]></content:encoded>
    </item>
    <item>
      <title>Go против Rust против Zig: какой язык для чего нужен</title>
      <link>https://tproger.ru/articles/go-protiv-rust-protiv-zig--kakoj-yazyk-dlya-chego-nuzhen</link>
      <comments>https://tproger.ru/articles/go-protiv-rust-protiv-zig--kakoj-yazyk-dlya-chego-nuzhen?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/go-protiv-rust-protiv-zig--kakoj-yazyk-dlya-chego-nuzhen</guid>
      <description><![CDATA[<p>Это попытка понять философию языков и определить, какой язык ближе лично вам.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/go-protiv-rust-protiv-zig--kakoj-yazyk-dlya-chego-nuzhen">Go против Rust против Zig: какой язык для чего нужен</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 12 Dec 2025 10:05:36 GMT</pubDate>
      <content:encoded><![CDATA[<p><i>Это перевод статьи для Tproger. Автор оригинала делится опытом изучения трёх системных языков программирования и размышляет, почему каждый из них сделал именно такие компромиссы в дизайне. Это попытка понять философию языков и определить, какой подход ближе лично вам.</i></p><p>Недавно я понял, что вместо того, чтобы использовать “правильный инструмент для задач” я просто использую инструменты, которые сказали на работе — и это определило языки программирования, которые я знаю. Последние пару месяцев я потратил много времени на эксперименты с языками, которые не использую в рабочих проектах. Цель не была в том, чтобы стать экспертом — я хотел сформировать мнение о том, для чего каждый язык действительно хорош.</p><p>Языки программирования отличаются по многим параметрам, и сравнивать их сложно, не скатываясь к совершенно скучному или бесполезному выводу “везде есть компромиссы”. Конечно, компромиссы есть всегда. Интересный вопрос — почему этот конкретный язык выбрал именно такой набор компромиссов?</p><p>Этот вопрос важен для меня, потому что я не хочу выбирать язык по чек-листу, будто покупаю увлажнитель воздуха. Меня волнует создание софта и мои инструменты. Делая свои компромиссы, языки выражают набор ценностей. Я хочу понять, какие ценности резонируют со мной.</p><p>Этот вопрос также помогает прояснить разницу между языками, которые на первый взгляд сильно пересекаются по возможностям. Судя по количеству вопросов статей вроде “Go или Rust” и “Rust или Zig”, люди тоже не понимают, что происходит. Сложно запомнить, что язык X лучше для веб-сервисов, потому что у него есть фичи a, b и c, а у языка Y только a и b. Гораздо проще запомнить, что язык X лучше для веб-сервисов, потому что язык Y создан человеком, который ненавидит интернет (условно) и считает, что нужно вырубить всю сеть.</p><p>Я собрал здесь мнение о трёх языках, с которыми недавно экспериментировал: Go, Rust и Zig. Я попытался превратить свой опыт с каждым языком в общий вывод о том, что этот язык представляет из себя и насколько хорошо реализует свои ценности. Да, это упрощение, но кристаллизация упрощённых предубеждений — именно то, что я здесь и делаю.</p><h2>Go: минимализм для корпораций</h2><p>Go выделяется своим минимализмом. Его называют “современным C”. Go не похож на C, потому что у него есть сборщик мусора и полноценная среда выполнения, но он похож на C тем, что весь язык помещается в голове.</p><p>Весь язык помещается в голове, потому что в Go очень мало возможностей. Долгое время Go был известен отсутствием дженериков. Их наконец добавили в Go 1.18, но только после 12 лет, в течение которых люди умоляли это сделать. Другие возможности, обычные для современных языков — например, размеченные объединения (tagged unions) или синтаксический сахар для обработки ошибок — в Go так и не появились.</p><p>Похоже, команда разработки Go ставит высокую планку для добавления новых возможностей. В результате получился язык, который заставляет писать много шаблонного кода для реализации логики, которую на другом языке можно выразить короче. Но в результате также получился язык, стабильный во времени и лёгкий для чтения.</p><p>Ещё один пример минимализма Go — тип slice. И в Rust, и в Zig есть slice, но это толстые указатели (fat pointers) и только они. В Go slice — это толстый указатель на непрерывную последовательность в памяти, но slice также может расти. То есть он объединяет функциональность типа Vec&lt;T&gt; из Rust и ArrayList из Zig. Кроме того, поскольку Go управляет памятью за вас, он сам решает, где будет жить память вашего slice — в стеке или куче. В Rust или Zig вам придётся сильно задуматься, где живёт ваша память.</p><p>История происхождения Go, насколько я понимаю, примерно такая: Роб Пайк устал ждать компиляции проектов на C++ и устал от ошибок, которые другие программисты Google делали в тех же проектах на C++. Поэтому Go прост там, где C++ перегружен. Это язык для рядовых программистов, спроектированный быть достаточным для 90% задач и при этом простым для понимания, даже (или особенно) при написании конкурентного кода.</p><p>Я не использую Go на работе, но думаю, что должен бы. Go минималистичен ради корпоративного сотрудничества. Я не считаю это недостатком — создание софта в корпоративной среде имеет свои вызовы, которые Go решает.</p><h2>Rust: максимализм ради безопасности</h2><p>Если Go минималистичен, то Rust максималистичен. Популярный слоган Rust — “абстракции с нулевой стоимостью” (zero-cost abstractions). Я бы дополнил: “абстракции с нулевой стоимостью, и их очень много!”</p><p>У Rust репутация сложного для изучения языка. Я согласен с Джейми Брэндоном, который пишет, что Rust делает сложным не система времён жизни (lifetimes), а количество концепций, запиханных в язык. Я не первый, кто приводит в пример этот конкретный комментарий на GitHub, но он идеально показывает концептуальную плотность Rust:</p><p>Тип Pin&lt;&amp;LocalType&gt; реализует Deref, но не реализует DerefMut. Типы Pin и &amp; помечены #[fundamental], так что возможна реализация DerefMut для Pin&lt;&amp;LocalType&gt;&gt;. Вы можете использовать LocalType == SomeLocalStruct или LocalType == dyn LocalTrait, и можете привести Pin&gt; к Pin&gt;. (Действительно, два слоя Pin!!) Это позволяет создать пару “умных указателей, реализующих CoerceUnsized, но имеющих странное поведение” на стабильной версии (Pin&lt;&amp;SomeLocalStruct&gt; и Pin&lt;&amp;dyn LocalTrait&gt; становятся умными указателями со «странным поведением», и они уже реализуют CoerceUnsized).</p><p>Конечно, Rust не пытается быть максималистичным просто так, как Go пытается быть минималистичным. Rust сложный, потому что пытается достичь двух целей — безопасности и производительности — которые частично противоречат друг другу.</p><p>Цель производительности понятна сама по себе. Что означает “безопасность” — менее очевидно, по крайней мере для меня (хотя, может быть, я просто слишком долго писал на Python). “Безопасность” означает “безопасность памяти” — идею, что вы не должны иметь возможность разыменовать невалидный указатель или сделать двойное освобождение памяти. Но это также означает больше. “Безопасная” программа избегает всего неопределённого поведения (undefined behavior, или UB).</p><p>Что такое ужасное UB? Лучший способ понять это — вспомнить, что для любой работающей программы ЕСТЬ СУДЬБЫ ХУЖЕ СМЕРТИ. Если в программе что-то идёт не так, немедленное завершение — это прекрасно! Потому что альтернатива, если ошибка не поймана — ваша программа переходит в сумеречную зону непредсказуемости, где её поведение может определяться тем, какой поток выиграет следующую гонку данных, или тем, какой мусор оказался по конкретному адресу памяти. Теперь у вас хайзенбаги и дыры в безопасности. Очень плохо.</p><p>Rust пытается предотвратить UB без потери производительности во время выполнения, проверяя всё во время компиляции. Компилятор Rust умный, но не всеведущий. Чтобы проверить ваш код, ему нужно понимать, что код будет делать во время выполнения. Поэтому в Rust есть выразительная система типов и множество трейтов, которые позволяют объяснить компилятору то, что в другом языке было бы просто видимым поведением кода во время работы.</p><p>Это делает Rust сложным, потому что вы не можете просто взять и сделать что-то! Вы должны узнать, как Rust это называет — найти нужный трейт или что-то ещё — и реализовать это так, как Rust ожидает. Но если вы это делаете, Rust может дать гарантии о поведении вашего кода, которые другие языки не дают, а это в зависимости от приложения может быть критично. Он также может давать гарантии о чужом коде, что делает использование библиотек в Rust простым и объясняет, почему проекты на Rust имеют почти столько же зависимостей, сколько проекты в экосистеме JavaScript.</p><h2>Zig: свобода и контроль</h2><p>Из трёх языков Zig самый новый и наименее зрелый. На момент написания статьи Zig на версии 0.14. У его стандартной библиотеки почти нет документации, и лучший способ научиться её использовать — читать исходный код напрямую.</p><p>Не знаю, правда ли это, но мне нравится думать о Zig как о реакции одновременно на Go и Rust. Go прост, потому что скрывает детали того, как работает компьютер. Rust безопасен, потому что заставляет прыгать через свои обручи. Zig освободит вас! В Zig вы контролируете вселенную, и никто не может указывать, что делать.</p><p>И в Go, и в Rust выделить объект в куче просто — достаточно вернуть указатель на структуру из функции. Выделение памяти неявное. В Zig вы выделяете каждый байт сами, явно. (В Zig ручное управление памятью.) У вас больше контроля, чем даже в C: чтобы выделить байты, нужно вызвать alloc() на конкретном виде аллокатора, то есть вы должны выбрать лучшую реализацию аллокатора для вашего случая.</p><p>В Rust создать изменяемую глобальную переменную настолько сложно, что на форумах идут длинные обсуждения, как это сделать. В Zig вы просто создаёте её, без проблем.</p><h3>Неопределённое поведение всё ещё важно в Zig</h3><p>Zig называет его “нелегальным поведением” (illegal behavior). Он пытается обнаружить его во время выполнения и обрушить программу, когда это происходит. Для тех, кого беспокоит стоимость таких проверок по производительности, Zig предлагает четыре разных “режима релиза” на выбор при сборке программы. В некоторых проверки отключены. Идея в том, что вы можете запустить программу достаточно раз в проверяемых режимах, чтобы иметь разумную уверенность: в непроверяемой сборке нелегального поведения не будет. Это кажется мне очень прагматичным дизайном.</p><p>Ещё одно различие между Zig и двумя другими языками — отношение Zig к объектно-ориентированному программированию. ООП давно не в моде, и Go, и Rust избегают наследования классов. Но в Go и Rust достаточно поддержки других идиом ООП, чтобы вы могли построить программу как граф взаимодействующих объектов, если захотите. В Zig есть методы, но нет приватных полей структур и нет языковой возможности для полиморфизма во время выполнения (динамической диспетчеризации), хотя std.mem.Allocator просто умирает стать интерфейсом. Насколько я могу судить, эти исключения намеренны; Zig — язык для дата-ориентированного дизайна (data-oriented design).</p><p>Ещё одна вещь, которую я хочу сказать, потому что она открыла мне глаза: может показаться безумием создавать язык программирования с ручным управлением памятью в 2025 году, особенно когда Rust показал, что сборка мусора не нужна и компилятор может всё сделать за вас. Но это дизайнерский выбор, тесно связанный с выбором исключить возможности ООП. В Go, Rust и множестве других языков вы обычно выделяете маленькие кусочки памяти за раз для каждого объекта в графе объектов. У вашей программы тысячи маленьких скрытых malloc() и free(), и, следовательно, тысячи разных времён жизни. Это RAII. В Zig может показаться, что ручное управление памятью потребует много утомительной, подверженной ошибкам работы, но это так только если вы настаиваете на привязке выделений памяти к каждому маленькому объекту. Вместо этого вы можете просто выделять и освобождать большие куски памяти в определённых разумных точках программы (например, в начале каждой итерации цикла событий) и использовать эту память для данных, с которыми работаете. Именно этот подход и поощряет Zig.</p><p>Многие люди не понимают, зачем нужен Zig, если уже есть Rust. Дело не только в том, что Zig пытается быть проще. Думаю, разница более важная. Zig хочет, чтобы вы вырезали ещё больше объектно-ориентированного мышления из своего кода.</p><p>У Zig весёлая, подрывная атмосфера. Это язык для разрушения корпоративной классовой иерархии (объектов). Это язык для мегаломанов и анархистов. Мне он нравится. Надеюсь, он скоро выйдет в стабильный релиз, хотя текущий приоритет команды Zig — переписать все свои зависимости. Не исключено, что они попытаются переписать ядро Linux, прежде чем мы увидим Zig 1.0.</p><p>Go — для командной работы и быстрой разработки, Rust — для критически важных систем, где нужны максимальные гарантии, Zig — для тех, кто хочет полного контроля и готов от ООП отказаться в пользу дата-ориентированного подхода. Выбор зависит не от списка фич, а от того, какая философия вам ближе.</p>]]></content:encoded>
    </item>
    <item>
      <title>«Я решал LeetCode 600 дней подряд»: разработчик рассказал, что из этого вышло</title>
      <link>https://tproger.ru/news/-ya-rewal-leetcode-600-dnej-podryad---razrabotchik-rasskazal--chto-iz-etogo-vywlo</link>
      <comments>https://tproger.ru/news/-ya-rewal-leetcode-600-dnej-podryad---razrabotchik-rasskazal--chto-iz-etogo-vywlo?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/-ya-rewal-leetcode-600-dnej-podryad---razrabotchik-rasskazal--chto-iz-etogo-vywlo</guid>
      <description><![CDATA[<p>Разработчик решал задачи на LeetCode 600 дней подряд и поделился, как это изменило его навыки, мышление и отношение к программированию</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/-ya-rewal-leetcode-600-dnej-podryad---razrabotchik-rasskazal--chto-iz-etogo-vywlo">«Я решал LeetCode 600 дней подряд»: разработчик рассказал, что из этого вышло</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 29 Oct 2025 10:38:31 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разработчик <a href="https://habr.com/ru/companies/betboom/articles/959246/">поделился</a> впечатлениями после <b>600 дней непрерывных тренировок на LeetCode</b> — платформе, где программисты решают алгоритмические задачи. Нужно это, чтобы подготовиться к собеседованиям или просто прокачать навыки.</p><p>Все началось с дружеского спора: автор и его знакомый решили за месяц решить 100 задач, чтобы проверить, насколько это реально. Цель была достигнута быстро — и стала привычкой.</p><p>Спустя полтора года у него за плечами <b>700+ решенных задач</b> и впечатляющий <b>стрик длиной в 600 дней</b>.</p><blockquote><i>«Сначала это было в кайф, потом — дисциплина. Где-то после 200-го дня я уже просто не мог сбить стрик. Каждый вечер садился и решал хотя бы одну задачу — хоть легкую, хоть любую»,</i> — пишет он.</blockquote><h2>«LeetCode — это спорт»</h2><p>По словам разработчика, примерно после сотни задач он заметил, как мозг начинает видеть паттерны: «алгоритмы перестают быть абстракцией и становятся шаблонами действий».</p><p>После 300 задач появилась уверенность, а к 600 — автоматизм: больше не страшно видеть длинные цепочки функций, не путаешься в деревьях и графах, а выбор структуры данных становится интуитивным.</p><p>Он выделяет три типа решений на платформе:</p><ul><li><b>Производительные и сложные</b>, где «изобретают велосипед» ради скорости;</li><li><b>Элегантные, но непроизводительные</b>, зато читаемые и похожие на реальный продакшн-код;</li><li><b>«Чтобы просто работало»</b> — типичные решения новичков без оптимизаций.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/111041/2025-10-29/54fae254-bd28-471c-97ca-cd60e3ad116a.jpeg" alt="" /></figure><p>Сам разработчик предпочитает второй вариант: чистый код, пусть и не самый быстрый.</p><h2>Стоило ли того?</h2><p>По мнению автора поста, LeetCode помогает тем, кто хочет попасть в <b>биг-тех</b>, разобраться в <b>алгоритмах</b>, или просто тренировать мозг. Но для повседневной работы в типичном проекте навыки из LeetCode пригодятся разве что косвенно — как понимание сложности операций или знание стандартной библиотеки.</p><blockquote><i>«После 200+ дней это превращается в рутину — задача ради задачи. Но привычка сильнее мотивации. Делая по одной задаче в день, можно дойти до любого уровня».</i></blockquote><p>Среди советов начинающим — не гнаться за hard-задачами, смотреть чужие решения и помнить, что прогресс измеряется не количеством, а осознанностью.</p><p>В итоге разработчик делает вывод, знакомый каждому, кто сталкивался с LeetCode:</p><blockquote><i>«Это отдельный мир. В нем свои правила и не так много связи с реальностью. Но он точно покажет, что такое алгоритмы — и нужны ли они именно тебе».</i></blockquote>]]></content:encoded>
    </item>
    <item>
      <title>COBOL в Японии: почему цифровое прошлое до сих пор определяет настоящее</title>
      <link>https://tproger.ru/articles/cobol-v-yaponii--pochemu-cifrovoe-prowloe-do-sih-por-opredelyaet-nastoyashhee</link>
      <comments>https://tproger.ru/articles/cobol-v-yaponii--pochemu-cifrovoe-prowloe-do-sih-por-opredelyaet-nastoyashhee?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Ислам Виндижев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/cobol-v-yaponii--pochemu-cifrovoe-prowloe-do-sih-por-opredelyaet-nastoyashhee</guid>
      <description><![CDATA[<p>Узнайте, почему в Японии COBOL до сих пор основа экономики, на нём всё ещё учатся программировать и к чему привело использование такого старого языка.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/cobol-v-yaponii--pochemu-cifrovoe-prowloe-do-sih-por-opredelyaet-nastoyashhee">COBOL в Японии: почему цифровое прошлое до сих пор определяет настоящее</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Организация разработки]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 29 Oct 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В мире IT, где технологии устаревают за несколько лет, судьба COBOL — настоящая аномалия. Этот язык, созданный в 1959 году, должен был исчезнуть вместе с мейнфреймами. Но в Японии — стране высоких технологий — COBOL не просто жив. Он остаётся «невидимым скелетом» всей экономики. Почему? Всё дело в уникальной комбинации истории, экономики и культуры.</p><figure><img src="https://media.tproger.ru/user-uploads/133609/2025-10-08/0636793c-acd1-42e1-a595-a64f38e8dd74.jpeg" alt="Самурай и COBOL" /></figure><h2>История: золотой век мейнфреймов и становление цифровой инфраструктуры</h2><p>В 1960-80-е годы, во время «экономического чуда», Япония массово внедряла компьютеры. Стандартом стали мейнфреймы IBM, а COBOL — идеальным языком для них.</p><figure><img src="https://media.tproger.ru/user-uploads/133609/2025-10-08/38868fd4-c43c-4974-b30b-ee964a6141fc.jpg" alt="Мейнфрейм IBM System/370, был выпущен в 70-е" /><figcaption>Мейнфрейм IBM System/370, был выпущен в 70-е</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/133609/2025-10-08/92ea0127-597f-41e6-821c-15660b5bc9f8.jpg" alt="Терминал IBM 3277" /><figcaption>Терминал IBM 3277</figcaption></figure><p>На COBOL переписали все ключевые процессы: обработку банковских транзакций, расчёт заработных плат, управление счетами, логистику, оформление страховых полисов. Так, за два десятилетия была создана цифровая ДНК японской экономики — миллиарды строк кода, которые стали критически важны для бизнеса.</p><h3>Принцип «Работает — не трогай»</h3><p>Из истории вытекает первая и главная причина живучести COBOL — эффект <b>path dependency</b> (зависимость от предшествующего развития).</p><p>Зависимость от предшествующего развития — это когда прошлые решения ограничивают будущие возможности и пути развития системы, отрасли или даже страны.</p><p>Из-за этого эффекта инженеры были ограничены в своём выборе. При этом каждый программист знает, что не стоит трогать legacy, которое работает. А чем дольше его не трогать — тем старше и больше оно становится. Чем старше и больше — тем страшнее, дороже и рискованнее его изменять.</p><figure><img src="https://media.tproger.ru/user-uploads/133609/2025-10-08/7ca1727c-57e9-4a9f-bd15-b070cc3b2be0.jpeg" alt="" /></figure><p>Представьте себе системы, которые работали десятилетиями в такой консервативной сфере, как финансы, где ошибка в одну запятую может стоить миллионов. Здесь стабильность и предсказуемость ценятся превыше всего. А в процессе миграции можно столкнуться с ошибками, потерями данных или простоями, которые парализуют бизнес и приносят огромные финансовые и репутационные потери.</p><p>Ещё один риск — скрытая логика. За годы эксплуатации исходный код обрастает тысячами правок и нюансов, которые не отражены в документации. Перенести эту сложную бизнес-логику без потерь практически невозможно.</p><p>Конечно же, переписывать системы такого размера ещё и очень долго. И чем старше становится система, тем больше миграция будет отставать от темпов развития бизнеса.</p><p>Так японские компании пришли к рациональному выводу: проще и безопаснее поддерживать работающую систему, чем пытаться заменить её целиком.</p><h2>Экономика: стоимость замены против стоимости поддержки</h2><p>Японский бизнес предпочитает поддержку старых решений не только руководствуясь простой логикой. Конечно, в дело вступили жёсткие расчёты, финансы и экономика.</p><p>Помимо прямых затрат на разработку, нужно учесть стоимость новых лицензий на ПО, обучение всего персонала, параллельное ведение старых и новых систем на время перехода и колоссальные затраты на тестирование.</p><p>Следующий вопрос — экономическая выгода. Руководство компаний справедливо задаётся вопросом: «Какую прибыль принесет нам этот переход?». Чаще всего ответ — «Никакой, мы просто получим систему, которая делает то же самое, но на другом языке». С точки зрения ROI (возврата инвестиций) проекты миграции или модернизации выглядят крайне непривлекательно.</p><figure><img src="https://media.tproger.ru/user-uploads/133609/2025-10-08/8cb5b998-d3b9-4ec6-aebc-673590bdd6e5.jpeg" alt="Японские феодалы делят золото" /></figure><p>В итоге, инвестиции в поддержку legacy-систем, какими бы большими они ни были, почти всегда оказывались ниже запредельной стоимости и рисков полной замены систем на COBOL.</p><h2>Культура: японский консерватизм и системный подход</h2><p>Экономическая рациональность не существует сама по себе. Она подкрепляется и японской культурой, которая символизирует надёжность, стабильность, долговечность и лояльность.</p><p>Японская бизнес-культура, особенно в крупных корпорациях и госсекторе, обычно против рисков и характеризуется консерватизмом. Излишний риск не считается оправданным.</p><p>Ещё одна особенность — система пожизненного найма.</p><p>В любой сфере человек мог проработать в компании всю жизнь до пенсии. Эта практика была популярна в послевоенный период, но сейчас менее распространена. От неё отступают в сторону ротации для большей гибкости и эффективности.</p><p>Такая традиция создала уникальную среду: инженеры, начавшие работать с COBOL в 1980-х, оставались в компаниях до пенсии, накапливая и передавая бесценные знания. Это создавало внутреннюю стабильную экосистему экспертизы.</p><p>Можно подумать, что такая ситуация создаёт дефицит специалистов, которые могут продолжать поддерживать и развивать кодовые базы на COBOL. Это не совсем так.</p><h2>Решение кадрового кризиса: не вопреки, а благодаря</h2><p>Самое большое заблуждение — считать, что Япония столкнулась с кадровым голодом и ничего не делает. Напротив, она выстроила целую индустрию по управлению этим COBOL-наследием.</p><p>Основная масса ключевых экспертов действительно люди предпенсионного возраста. При этом молодые специалисты приходят в эту сферу на условиях лучших, чем в среднем по рынку.</p><figure><img src="https://media.tproger.ru/user-uploads/133609/2025-10-08/fcced980-8cb6-4908-b75f-38385288aef4.jpeg" alt="Старый самурай передаёт знания молодому" /></figure><p>Крупные корпорации передают поддержку COBOL-систем специализированным IT-гигантам, таким как Fujitsu, NEC, NTT Data, IBM Japan. Внутри этих компаний существуют целые департаменты, которые:</p><p>1.  Целенаправленно нанимают и обучают молодых инженеров работе с COBOL и мейнфреймами.</p><p>2.  Предлагают им стабильную карьеру с высокой (из-за низкой конкуренции) зарплатой и социальными гарантиями.</p><p>3.  Разрабатывают инструменты модернизации: транспайлеры (конвертирующие COBOL в Java, <a href="https://www.ibm.com/docs/en/watsonx/watsonx-code-assistant-4z/1.x?topic=transform-transforming-cobol-java-by-using-generative-ai">в том числе на базе AI</a>), <a href="https://www.ibm.com/products/cobol-compiler-linux-x86">эмуляторы</a> и <a href="https://cobolcloud.io/">платформы</a> для запуска legacy-кода в облаке.</p><p>Проблема кадров осознана и решается решается разными путями. Но возможно ли и нужно ли поддерживать COBOL бесконечно?</p><h2>Есть ли у COBOL преимущества сегодня?</h2><p>Кажется, что у такой старой технологии нет никаких преимуществ. Но давайте найдём одно — стабильность и надёжность. Системы продолжают работать исправно и пока их удаётся поддерживать. Вряд ли новый проект начнут разрабатывать на COBOL, но поддержка всё ещё продолжается.</p><p>Безусловный минус — стоимость поддержки. К 2025 году затраты на поддержку COBOL-решений могли <a href="https://www.nikkei.com/article/DGXZQOFK052Y70V00C21A2000000/">составить до 12 триллионов йен в год или 80 миллиардов долларов</a>, что уже превышает некоторый психологический барьер. Этому прогнозу уже несколько лет, так что сегодня компании стоят перед сложным выбором: вкладываться в модернизацию или продолжать поддержку.</p><p>В конечном итоге, живучесть COBOL в Японии — это не признак технологической отсталости, а следствие расчёта, уважения к стабильности и долгосрочной стратегии управления legacy. Эти старые системы — всё ещё ядро национальной цифровой инфраструктуры: дорогое в обслуживании, но надёжное.</p><p>Если японские компании и правительство всё-таки примут риски модернизации, то об этом мы с вами узнаем уже в ближайшие несколько лет.</p>]]></content:encoded>
    </item>
    <item>
      <title>Из медтеха в Python-разработчики: как менторство помогло найти работу в IT</title>
      <link>https://tproger.ru/articles/iz-medteha-v-python-razrabotchiki--kak-mentorstvo-pomoglo-najti-rabotu-v-it</link>
      <comments>https://tproger.ru/articles/iz-medteha-v-python-razrabotchiki--kak-mentorstvo-pomoglo-najti-rabotu-v-it?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/iz-medteha-v-python-razrabotchiki--kak-mentorstvo-pomoglo-najti-rabotu-v-it</guid>
      <description><![CDATA[<p>История перехода из медтеха в Python-разработку: как менторство помогло преодолеть сотни отказов и найти первую работу в IT. Советы по резюме, собеседованиям и выбору оффера от опытного наставника.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/iz-medteha-v-python-razrabotchiki--kak-mentorstvo-pomoglo-najti-rabotu-v-it">Из медтеха в Python-разработчики: как менторство помогло найти работу в IT</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Лучшая практика]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Собеседование]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 15 Sep 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Женя Лопухов четыре года работал в нейрохирургическом стартапе и выгорел. Постоянное напряжение, высокая цена ошибки и бесконечный стресс вынудили его искать новую сферу, где можно было бы работать системно и спокойно. Так он оказался в мире Python-разработки.</p><p>Но переход в IT редко бывает лёгким. Первые месяцы поиска работы обернулись десятками отказов: более 110 отправленных резюме, более 500 откликов на HeadHunter, 200 на Хабр и около 50 – на вакансии в телеграм. И только одно приглашение на собеседование. Желанный оффер казался недосягаемым.</p><p>Ситуацию изменило менторство. Опытный бэкенд-разработчик и ментор <a href="https://t.me/sergey_filichkin_blog">Сергей Филичкин</a> подключился к процессу. Вместе они разобрали ошибки, скорректировали стратегию поиска, а главное — помогли Жене перестать воспринимать отказы как личное поражение.</p><p>Результат? После проработки всех проблемных моментов вместе с ментором всего спустя пару собеседований Женя получил первую вакансию Python-разработчика — именно ту, о которой мечтал: с понятными задачами и возможностью расти без выгорания.</p><p>Мы поговорили с Сергеем Филичкиным о том, как готовиться к собесам и искать работу, особенно когда от череды отказов хочется опустить руки.</p><h2>Как стать ментором: от сарафанного радио к полноценному проекту</h2><p>В IT я уже больше семи лет. Трудно точно посчитать, потому что начал ещё в университете подрабатывать: писал на разных языках, пробовал себя в разных проектах. Успел поработать и в маленьких стартапах с командой в несколько десятков человек, и в огромных корпорациях на десятки тысяч сотрудников. Благодаря этому я видел самые разные архитектуры и подходы, попробовал разные технологии и языки программирования.</p><p>Прошёл путь от новичка, который не понимает, куда двигаться, до работы на серьёзных позициях. Поэтому хорошо знаю, через что проходят джуны и какие трудности их ждут в самом начале.</p><p>Сначала я просто помогал знакомым: объяснял, что-то подсказывал. Потом ко мне начали обращаться и те, с кем я лично не был знаком. Полноценно, в публичном формате я занимаюсь менторством около полутора-двух лет. Начиналось всё довольно скромно: завёл соцсети, к нам приходило совсем немного учеников, и я работал с ними индивидуально.  Постепенно у меня родилась идея превратить это в <a href="https://www.sergeyfilichkin.ru/">продукт</a> — в полноценное менторство по трудоустройству Python-разработчиком.</p><p>Трудно выделить какой-то один путь развития ментора — это скорее черта личности. Мне всегда хотелось находить понятные алгоритмы: как работает рынок, на что смотрят рекрутеры, как правильно составить резюме. И потом постепенно улучшать эти алгоритмы. Это похоже на то, как пишешь код: сначала выстраиваешь базовую логику, потом шаг за шагом делаешь её лучше. В придачу помогает понимание того, что важно бизнесу и зачем тебя вообще нанимают. Когда есть осознание своей роли в системе, становится проще выстраивать весь процесс</p><p>Постепенно проект начал расти, появилась команда. Причём она у нас разноуровневая: есть люди, которые помогают выстраивать процессы, а есть те, кто работает напрямую с учениками. Я сам продолжаю участвовать во всех этапах, но теперь это уже системная работа.</p><p>Я увидел, что это работает, что людям действительно помогает. За это время мы довели до трудоустройства десятки ребят. И каждый день стараемся улучшать программу: добавляем новые форматы, тесты, домашние задания, вводим регламенты качества. Если вспомнить, с чего всё начиналось, то это был буквально чат в Telegram с небольшой подборкой тем. Сейчас же у нас полноценная платформа с уроками, практикой, проверками и системой поддержки.</p><p>У меня изначально был простой принцип: либо делаешь хорошо, либо не делаешь вовсе. Иначе смысла в этом нет. В самом начале я просто проверял гипотезу — есть ли вообще спрос на менторство. Оказалось, что интерес есть, и тогда я решил сконцентрироваться на этом направлении. Теперь все силы направляю на развитие проекта. Сделано уже много. Мы постоянно собираем обратную связь от учеников и дорабатываем программу.</p><p>У меня сейчас два основных направления работы — менторство для действующих разработчиков, которые хотят расти дальше по скиллам и уровню дохода; а также помощь в трудоустройстве на стартовые позиции для начинающих. Есть и отдельные форматы, например, разовая консультация или поддержка на испытательном сроке.</p><h2>Что происходит на рынке и почему Женя не мог найти работу</h2><p>Сейчас рынок действительно изменился. Сыграло несколько факторов одновременно:</p><ul><li>Кризис — и мировой, и локальный. Компании стали экономить, поэтому вакансий объективно стало меньше.</li><li>Кандидатов стало больше. Конкуренция выросла, и это естественно заставляет работодателей поднимать планку.</li><li>Чтобы выбрать из сотни резюме, компании добавляют дополнительные фильтры: усложняют задания, делают больше этапов, повышают требования на собеседованиях.</li></ul><p>Всё это логичная реакция рынка: меньше позиций, больше кандидатов, выше конкуренция — и, соответственно, жестче проверки.</p><p>В результате, рынок найма оказался в целом сломан. Нанимают как попало, часто задают стандартные вопросы из списков, которые легко нагуглить. Кандидаты, соответственно, тоже гуглят готовые ответы.</p><p>Рекрутеры зачастую не читают резюме внимательно — в HeadHunter нажимают пару фильтров и отсекают людей, которые могли бы подойти. У самих сотрудников, которые проводят собеседования, нет отдельной мотивации. Им просто говорят: «Иди проведи собес», они идут и делают, без особого энтузиазма.</p><p>Формально, конечно, все заинтересованы, чтобы пришёл сильный кандидат. Но на деле система работает не слишком надёжно, и поэтому мы видим, что процесс отбора часто выглядит формально и поверхностно.</p><p>Найти работу на нынешнем рынке стало сложнее, чем год-два назад. При этом немало соискателей низкого уровня — посмотрели ролик, сделали пару шагов и уже считают себя программистами. Таких становится всё больше.</p><p>Но даже в этих условиях устроиться реально. Если последовательно работать, использовать те инструменты, которые мы даём, и не останавливаться, результат будет. Да, стало тяжелее, но если есть цель, её можно достичь.</p><p>Женин пример это доказывает: кейс был непростым, но Женя сразу проявил себя как очень понимающий ученик. Он начал выполнять рекомендации буквально с первого дня: исправлял ошибки, подтягивал слабые места, советовался. Поэтому результат не заставил себя долго ждать.</p><p>До того, как взять помощь наставника Женя сам прорабатывал своё резюме около восьми часов, читал статьи на Хабре и Тпрогере, пытался применить описанные другими разработчиками лайфхаки. Но выходило слабовато — откликов на резюме практически не было.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-15/65709aa3-5b30-4c4c-9900-9548a6414b9a.png" alt="" /></figure><p>Мы несколько раз созванивались, обсуждали ключевые вещи — рынок, резюме, поведение на собеседованиях. Дальше я формировал для Жени план: какие шаги делать дальше.</p><p>Процесс выглядел так: он выполнял шаг — присылал результат. Это могло быть резюме, итоги собеседования или вопросы. Я давал обратную связь не в формате “ок/не ок”, а с конкретикой: что именно поправить — раз, два, три — и что делать следующим шагом. Если всё в порядке, фиксировали результат и переходили к следующему пункту. По сути, я выдавал ему алгоритм и сопровождал его шаг за шагом. После корректировки резюме Жене наконец стали поступать отклики с HH и приглашения на скрининги от HR.</p><p>Это, кстати, основная проблема многих новичков. Они не понимают, что именно нужно делать, или не следуют советам. Даже когда им говоришь: сделай раз, два, три — они откладывают или игнорируют. В итоге процесс затягивается. Я бы не сказал, что есть ситуации, где вообще ничего нельзя сделать. Единственный вариант — когда человек просто перестал учиться и не выходит на связь. Тогда, понятно, помочь невозможно. Но бывают тяжёлые случаи, когда ученик вроде бы делает то, что я говорю, но наполовину: указывает на ошибки, а он приходит через месяц с теми же самыми. И так повторяется раз за разом. Это сильно затягивает процесс. Но даже такие ребята в итоге устраиваются — просто путь у них дольше.</p><p>У Жени было иначе: он сразу включился и начал работать над собой. Поэтому и смог довольно быстро получить результат. Кейс, конечно, был не самый лёгкий, но по сравнению с ситуациями, где люди просто не выполняют рекомендации, он оказался рабочим и успешным.</p><p>Основная проблема была в том, что Женя не очень понимал, как устроен рынок: какое сейчас состояние, как правильно вести себя на собеседовании, что должно быть в резюме и как его составлять. Мы подробно разобрали все эти моменты. Плюс я указал темы, которые критически важно подтянуть. Это и стало ключевым — после доработок процесс пошёл заметно быстрее.</p><h2>Ошибки в резюме</h2><p>Резюме Жени было составлено без понимания рынка. Он просто добавил то, что посчитал важным, но информация оказалась нерелевантной для работодателей: формулировки, описание задач, достижений — почти всё выглядело не так, как нужно.</p><p>Здесь важно понимать: резюме сначала читает HR, а уже потом оно попадает к техническому специалисту. Поэтому нужен баланс. С одной стороны, должны быть ключевые технические слова, чтобы разработчик, проводящий собеседование, понял, что кандидат разбирается. С другой — HR нужно донести смысл простым языком, без перегрузки узкопрофильными аббревиатурами и сложными терминами.</p><p>Фронтенд, бэкенд — это понятно всем. Но когда начинаешь перечислять редкие технологии или паттерны проектирования, HR может не понять, и это нормально — он не обязан этого знать. Поэтому искусство резюме в том, чтобы объяснять простыми словами, но при этом сохранять технические ключи для специалистов.</p><p>Самостоятельно понять, что именно нужно рынке — непросто. Да, можно смотреть ролики на YouTube, читать статьи и искать материалы в открытом доступе, но чаще всего такие источники не заточены под реальный результат — трудоустройство.</p><p>Когда человек приходит к нам на программу менторства, мы заинтересованы в его результате и опираемся на большую статистику: что пробовали, что сработало, какие варианты дают отклик. Мы даём конкретные шаги, что именно делать.</p><p>Можно пытаться разбираться самому, но конкурировать с системой, где уже накоплены данные и опыт проб и ошибок, сложно. Проще обратиться за помощью — если есть желание и возможность.</p><p>Сроки трудоустройства зависят от конкретного человека. К нам приходят как совсем новички, которые ничего не знают, так и те, у кого уже есть опыт. Важно не только дойти до собеседования, но и правильно на нём отвечать, а потом ещё и закрепиться на работе. Наша цель — не просто довести человека до технического собеса, а реально изменить его жизнь: помочь устроиться и продолжать работать.</p><p>Были случаи, когда приходили люди вообще без знаний, даже без базового языка программирования. Мы вместе определяли, что именно учить, и они готовились. Да, это требует больше времени и усилий, но и такие ребята в итоге трудоустраиваются.</p><p>Самые быстрые кейсы: человек уже что-то умеет, но не понимает рынок и неправильно составил резюме. В таких случаях оффер может появиться буквально через две недели. Бывают и долгие истории — когда знаний нет вообще, и нужно много времени на изучение. Тогда процесс занимает месяцы, иногда больше полугода.</p><p>В среднем после окончания программы на поиск работы уходит около полутора месяцев. Кто-то быстрее, кто-то медленнее, но это наиболее частый срок.</p><p>Женя согласился, по сути, на первый оффер. Я понимаю решение Жени, но несколько раз говорил ему: это всего лишь один оффер, стоило бы поискать ещё, можно было претендовать на более высокую зарплату. Наши ученики устраиваются на позиции с гораздо лучшими условиями. Но это его жизнь, его выбор — он решил принять это предложение.</p><p>Думаю, результат говорит сам за себя: если раньше он долго не мог найти работу, а после советов устроился, значит, опыт был полезным.</p><p>Вообще понять, на какую зарплату соглашаться — не всегда непросто. Бизнесу выгодно нанять дешевле, кандидату — продаться дороже. Тут начинается игра. Есть негласное правило: кто первым назвал сумму — тот проиграл. Поэтому лучше пытаться узнать вилку заранее и называть цифру ближе к верхней границе. Если вилку никак не удаётся выяснить, ориентируйся на рыночные значения. Без понимания рынка сложно вообще адекватно оценивать оффер.</p><p>Да, тут есть риск: попросишь слишком много — могут отказаться. Но и занижать цену тоже опасно: компания подумает, что кандидат слабый, раз так дёшево себя оценивает. Но если оффер отозвали — ничего страшного, значит, это просто не твоя компания.</p><p>А если рекрутеры упорно не называют вилку, можно аккуратно перевести разговор: сказать, что ты рассматриваешь разные варианты, деньги для тебя важны, но это не ключевой фактор, и попробовать выудить условия уже от них. Главное — не продешевить и не соглашаться на меньшее только из-за страха упустить шанс.</p><h2>Кому нужен ментор и как прокачиваться</h2><p>Когда ты новичок, тебе сложно объективно оценить — у тебя крутое резюме или нет, хорошо ты прошёл собес или плохо. Просто нет опыта для сравнения.</p><p>Самый рабочий вариант — найти знакомого, который уже работает в этой сфере, и попросить его дать обратную связь. Если таких знакомых нет, можно искать профильные чаты и форумы: выложить туда резюме, попросить провести пробное интервью.</p><p>Но тут есть нюанс: гарантий качества нет. Может оказаться, что советы даёт такой же вчерашний новичок, который сам ещё мало что понимает. Поэтому лучше всё-таки найти более опытного специалиста и обратиться к нему напрямую. Это как с машинным маслом: если я в нём не разбираюсь, то сам не пойму, хорошее оно или плохое. Здесь ситуация точно такая же.</p><p>Аналогичная ситуация с подготовкой к собесам. На старте можно включить собеседования на YouTube по позиции, на которую ты претендуешь, и попробовать отвечать на вопросы. Если отвечаешь уверенно — значит, всё в порядке, если начинаешь путаться — это сигнал, что тему нужно подтянуть.</p><p>Дальше всё зависит от цели. Если задача — пройти собеседование, то стратегия одна: берёшь список из сотен популярных вопросов, прорабатываешь их. Но важно не просто заучивать готовые ответы, а понимать, почему именно так. Это сразу повышает уровень и как кандидата, и как специалиста.</p><p>Если цель — развиваться как разработчик, то лучшая практика — делать проекты. Причём не самые простые, а такие, где нужно использовать несколько современных технологий: не только язык программирования и фреймворк, но и дополнительные инструменты, подходы к построению систем, интеграцию разных решений. Такой опыт сильно ускоряет рост и реально прокачивает навыки.</p><p>Но навык прохождения собесов и устройства на работу — это отдельный скилл, который не зависит напрямую от твоих хардов. Ментор же помогает прокачаться именно с этой позиции. В нашем проекте мы всегда сначала пытаемся понять, с каким уровнем знаний к нам пришёл человек, чтобы выстроить индивидуальный подход. Но сама программа построена так, что её проходят все — и опытные, и новички. Разница лишь в скорости: если ты уже многое знаешь, идёшь быстрее, если нет — задерживаешься на сложных местах и разбираешь их глубже.</p><p>Программа включает тесты и практические задания, которые основаны на реальных кейсах разработки и вопросах с собеседований. С самого начала студенты начинают готовиться к реальным ситуациям. За каждым закрепляется личный наставник — человек, к которому можно обратиться за советом по любому вопросу.</p><p>После прохождения ключевых блоков идёт промежуточное собеседование: не по всем темам сразу, а по конкретному модулю. Оно помогает углубиться и закрепить знания. Темы в программе отобраны, мы не перегружаем лишним — только то, что реально востребовано на рынке.</p><p>Помимо этого, студенты попадают в сообщество: там есть уже трудоустроенные выпускники и те, кто ещё учится. Можно обмениваться опытом, задавать вопросы, получать поддержку. Еженедельно проходят групповые занятия и разборы, иногда приглашаем карьерных консультантов. Если активно участвовать во всём и выполнять задания, прогресс становится заметен очень быстро.</p><p>Ближе к завершению программы мы даём студентам практические инструменты для выхода на рынок: вместе составляем резюме, проверяем его в несколько этапов, разбираем ошибки. Точно так же прорабатываем весь процесс поиска работы — от откликов до собеседований. Также есть возможность участия в индивидуальных и групповых встречах с карьерными консультантами и действующими рекрутерами из различных компаний, в том числе и международных.</p><p>Но на этом всё не заканчивается. У нас есть отдельная услуга поддержки на испытательном сроке. Она появилась не случайно: многие ребята, уже получив оффер, начинают переживать — справятся ли они, пройдут ли испытание. Возникает масса вопросов не только технических, но и организационных, связанных с процессами внутри компании. Здесь менторы помогают снять лишнее напряжение и подсказать, как действовать.</p><p>Да, это платная услуга, но по сути её можно заменить и более простым способом — найти знакомого, который уже работает в IT и готов поддержать. Главное — иметь человека, у которого можно спросить совета, потому что на испытательном сроке часто мешают не сами задачи, а сомнения и стресс.</p><p>Наши менторы — это действующие разработчики, которые не только сами проходили этот путь, но и помогли десяткам учеников пройти его раньше. Поэтому мы накопили экспертизу и понимаем, с какими трудностями студенты сталкиваются в реальности.</p><p>Если вы тоже устали от поисков и пролистывания ленты HH, возможно, вам стоит обратиться к наставнику за помощью — тому, кто действительно понимает, что хотят видеть рекрутеры и как вам докрутить своё резюме, чтобы найти работу мечты.</p><p>А вы пользовались услугами менторов или наставников? Или помогали кому-то сами? Расскажите о своём опыте в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Мое видение универсального языка программирования</title>
      <link>https://tproger.ru/articles/moe-videnie-universalnogo-yazyka-programmirovaniya</link>
      <comments>https://tproger.ru/articles/moe-videnie-universalnogo-yazyka-programmirovaniya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Миша Разаков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/moe-videnie-universalnogo-yazyka-programmirovaniya</guid>
      <description><![CDATA[<p>Рассмотрим теоретическое создание универсального языка программирования. Плавно перейдем к идее языка-конструктора. Вас ждет погружение в модульную архитетуру, лямбда-исчисления, байткод, расширяемое программирование

</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/moe-videnie-universalnogo-yazyka-programmirovaniya">Мое видение универсального языка программирования</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Архитектура ПО]]></category>
      <category><![CDATA[Haskell]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 30 Aug 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Предисловие</h2><p>В этой статье будет много моих выводов, гипотез и идей. Это моя первая статья, поэтому буду рад услышать аргументированную критику. В статье часто используется псевдокод, чей синтаксис напоминает смесь C#, C++ и Python.</p><h2>Немного о терминологии</h2><p>Много времени я программирую на C#, и в этом языке существуют некоторые термины, которые могут ввести в заблуждение программистов на C++:</p><ul><li>Под словом коллекция я подразумеваю любой набор элементов: список, массив, стек, куча, итератор, множество и т.п.</li><li>Говоря список, я подразумеваю динамический массив</li></ul><h2>Язык программирования – инструмент</h2><p>Языки можно поделить на две большие группы: предметно-ориентированные языки (aka DSL) и языки общего назначения (ЯОП). DSLи точно можно назвать инструментами, так как они по определению решают конкретную задачу. С языками общего назначения все несколько сложнее. ЯОПы имеют техническую возможность реализовать любой алгоритм, то есть полны по Тьюрингу. Но это не значит, что для каждой задачи будет эффективно использовать язык X, ведь язык Y может подходить для решения каких-то задач лучше.</p><p>Под словом “эффективно” я подразумеваю, что программистам будет морально приятно писать код на языке для решения конкретной задачи, а также, что код будет написан за минимальное количество времени.</p><p>Рассмотрим банальный пример. C# лучше использовать для написания бекенда сайтов, чем Си. Используя C#, вы делаете вклад в возможность поддержки проекта, уменьшаете порог входа в проект, пишете платформо-независимый код. Си лучше использовать в задачах, где важна производительность или низкоуровневый доступ к ресурсам. Например при написании runtime библиотеки языка, игрового движка или кода под микроконтроллеры с небольшими ресурсами.</p><p>Также некоторые языки имеют хорошую поддержку сообщества в каких-то специфических областях. Например C# и C++ – доминируют в создании игр, Python и R – преобладают в data science, JavaScript и PHP – в создании сайтов и т.п. В силу своих реализаций не все ЯОП могут решать задачи друг друга эффективно. Интерпретируемый язык никак не может быть также быстр в исполнении, как статически компилируемый, но может выигрывать в скорости кодирования.</p><p>В итоге приходим к выводу, что язык программирования, даже общего назначения, – это просто инструмент, который умеет выполнять задачи эффективно только из своей области.</p><h2>А в чем проблема?</h2><p>Проблемы начинаются тогда, когда мы обнаружим, что используемый язык программирования по какой-то причине не умеет решать специфическую задачу своей области эффективно. Например C# не всегда бывает лаконичен: иногда не хватает функциональной парадигмы или нет возможностей сократить лишний синтаксис при композиции. В таких случаях придется смириться и реализовывать функционал через костыли, например, создавая лишние интерфейсы, нужные чтобы обойти запреты языка.</p><p>Python не станет быстрым, C++ не будет хорошо подходить для написания скриптов, а Fortran не получит современный синтаксический сахар.</p><p>Если вы программировали на C# и Unity, возможно, вы писали какие-нибудь математические функции или методы-расширения. Я с разочарованием для себя обнаружил, что Unity использует C# 9-той версии, в которой нет обобщенной арифметики (ее введут в C# 11). Скорее всего, красиво и лаконично реализовать какой-нибудь метод SquareMagnitude не получится: придется писать одну и ту же реализацию для каждого типа по отдельности (дженерики не помогут: нет обобщающего интерфейса).</p><p>Помимо этих реализаций, было бы неплохо иметь реализацию с типами: byte, sbyte, ushort, uint, ulong, decimal. Хорошо, что метод SquareMagnitude достаточно маленький, но если бы это был большой метод, код стал бы еще хуже. Принцип DRY (don’t repeat yourself) плачет в сторонке.</p><h2>Extensible Programming</h2><p>Решением видится расширяемое программирование (<a href="https://en.wikipedia.org/wiki/Extensible\\_programming">Extensible Programming</a>) – это парадигма программирования, когда расширяемость возводится в абсолют. Возможности языка не фиксированы, а могут быть расширены. Программист пишет не только расширяемые модульные программы, но и программирует на расширяемом языке. Программист имеет возможность изменять синтаксис языка, исполняемый движок (компилятор/интерпретатор/JIT’а и т.п.), среду исполнения (environment) – все то, что мы называем Toolchain’ом языка. Эта парадигма позволяет кастомизировать язык программирования, добавлять eDSL (embedded DSL, встроенные в язык. Как пример: LINQ в C#). Зачастую кастомизация даже представляется как одно из основных средств программирования. Например, на расширяемом языке есть возможность добавлять новые синтаксические конструкции, изменять AST, байткод, контролировать процесс компиляции, изменять среду исполнения и т.п. Самые известные из расширяемых языков: Ruby, Lisp, Lua.</p><p>Предлагаю посмотреть <a href="https://habr.com/ru/articles/571182/">эту статью</a> на хабре, в которой демонстрируется пример написания простенького генератора кода для элегантных лямбд на Lua. Это пример расширяемого синтаксиса языка. Ruby тоже имеет расширяемый синтаксис, например для него написана библиотека <a href="https://rubygems.org/gems/superators19">superators19</a>, позволяющая <a href="https://stackoverflow.com/questions/11874579/define-custom-ruby-operator">добавлять новые операторы</a> в язык.</p><p>Конечно, расширяемое программирование нужно не всем, но эта парадигма – мощный инструмент для сложных систем, которым важны какие-то аспекты языка, которые не идут из коробки. Не всегда в языке не хватает каких-нибудь мелочей по типу лаконичности синтаксиса, но и таких важных механизмов, как верифицируемости корректности исполнения, формального распараллеливания и т.п. Используя расширения, можно добавлять такие механизмы, которые не были реализованы ранее или улучшать уже имеющиеся имплементации. Подобные фичи – достаточно сложные и реализовать их на уровне, например, препроцессора, невозможно. Приходится использовать более глубокое внедрение в используемый язык.</p><h2>Моя модель идеального языка программирования</h2><p>Идея заключается в возможности построить микро-язык на модульной архитектуре, который будет содержать в себе ядро и несколько дополнительных модулей для его комфортного расширения. Сам микро-язык будет не очень полезен, но на его основе можно будет сделать диалекты, которые уже можно будет считать полноценными языками общего назначения. При надобности, программист сможет отключать, модифицировать или добавлять модули в язык. Так язык превратится в набор модулей, буквально конструктор. Чтобы внести изменения в язык, будет достаточно понимать его работу в целом, а также понимать работу только тех модулей, с которыми предстоит работать.</p><p>Например, представим что JavaScript сделан по данной идее, и хочется добавить в язык рантайм-проверку типов (на минуту забудем про существование TypeScript). Можно было бы написать модуль, который добавляет немного нового синтаксиса в объявление переменных, обрабатывает AST (т.е. использует модуль парсера) и добавляет в каждое использование переменной/поля/т.п. проверку на ее тип.</p><p>Псевдо-код реализации модуля мог бы выглядеть как-то так:</p><h2>Абстрактные детали реализации</h2><p>Итак, какие задачи языка мы имеем на данный момент? ЯП должен:</p><ul><li>иметь возможность расширять свои frontend, middle-end, backend</li><li>иметь простой API для расширения</li><li>поддерживать большинство парадигм (функциональное, декларативное программирование)</li></ul><p>Сначала разберемся с первыми двумя задачами. Как уже было сказано ранее, архитектура языка будет модульной. Значит нужно просто для каждого модуля предусмотреть возможность интеграции с другими модулями. При этом желательно предоставить интуитивный API для доступа к различным частям модуля. Кроме того, каждому модулю не плохо иметь свое краткое описание работы, ведь для написания своих модулей придется иметь понимание всех модулей, которые должны использоваться.</p><p>Рассмотрим пример с созданием простейшего фронтенда. Простой фронтенд может быть разделен на небольших модуля: лексер и парсер. Допустим, программист захотел добавить препроцессор перед лексером. Какой удобный API можно предоставить? По моему мнению, хорошо подходят события. Пусть лексер и парсер имеют события OnPreprocess и OnPostprocess. Таким образом, например, программист будет иметь возможность обработки последовательности лексем уже после ее генерации. Также программист сможет изменять AST уже после его генерации.</p><p>Но как добавлять новые правила построения дерева или лексемизации текста? Можно создать методы по типу AddLexerRule, AddParserRule, которые будут принимать в себя экземпляры классов, имплементирующих интерфейсы ILexerNodeBuilder и IParserNodeBuilder. Но стоит учесть, что в большинстве языков грамматика не самая простая, а значит, что парсер желательно делать по мощности LR(k), LALR(k) или ALL(*). Возможно стоит сделать небольшой DSL для этих модулей, так как это сильно упростит поддержку языка в дальнейшем (или использовать уже готовый, такой как ANTLR). DSL поможет программистам не погружаться в технические подробности реализации и достаточно просто добавлять изменения в грамматику.</p><p>Но как же коллизии имен? Конечно, они будут возникать гораздо чаще, поэтому стоит предусмотреть некое подобие namespace’ов. Например, если в начале файла написано use parser.math, то парсер активирует дополнение к текущей грамматике, добавляющее математические операторы.</p><h2>Модули</h2><p>Что, если язык окажется сложным? Например, парсер будет очень тяжелым, язык будет использовать супероптимизаторы или просто модуль окажется проприетарным. В таком случае желательно иметь возможность разбросать модули по разным физическим местам. Например, чтобы разместить супероптимизатор в облаке, парсер поставить на компьютер с бОльшим количеством оперативной памяти, а доступ к проприетарному модулю давать только через web-request’ы (чтобы нельзя было получить исходный код).</p><p>Хорошим решением оказывается представлять модули как web-сервисы. Это делает модули гораздо более гибкими. Плюсы модулей как веб-сервисов:</p><ul><li>можно расположить в разных физических местах</li><li>IDE будет способна контролировать все процессы языка – особенно удобно, если нужно глубокое понимание языка, например просмотр промежуточных представлений</li><li>при возникновении потребности можно легко использовать утиную типизацию над модулями</li><li>можно использовать вообще любые языки программирования и технологии</li><li>модули гораздо проще воспринимать как логически разделенные части – повышается гибкость системы и уменьшается ее связность</li></ul><p>Буквально получается язык программирования на микросервисах. Возможно, сначала покажется, что такой подход сильно замедлит процесс компиляции, но, скорее всего, это скажется достаточно незначительно. На моем слабеньком ноутбуке запросы к локальным веб-серверам почти никогда не превышали 10мс, а значит чтобы добиться задержки хотя бы в половину секунды, придется сделать 50 запросов. Стоит учитывать, что общение между модулями происходит не очень часто, поэтому, думаю, беспокоиться о сильном замедлении не стоит.</p><p>Стоит заметить, что я предлагаю использовать модули как веб-сервисы исключительно на этапе компиляции. Конечно, модули, которые используются в рантайме должны быть сделаны эффективно, чтобы не создавать серьезного замедления исполнения.</p><h2>Парадигмы</h2><p>Язык программирования должен поддерживать большинство существующих парадигм. Но основными являются императивное и функциональное программирование. С возможностью написания модулей, из них строятся все остальные парадигмы.</p><p>Рассмотрим поддержку функционального программирования. Как известно, сердце функциональной парадигмы – это лямбда-исчисления. Думаю, что как ядро языка – отлично подойдут чистые нетипизированные лямбда-исчисления. Уже с помощью модулей можно дополнять λ-исчисления до system F, λ-исчислений с зависимыми типами или других исчислений. То есть достраивать ядро до нужной мощности и уже на имеющейся основе строить язык. Также фишка такого подхода в том, что, используя синтаксический сахар и монады, в язык можно добавить лаконичное императивное программирование. Но стоит быть аккуратным с чистыми функциями. Нужно учесть, что функция не будет чистой, если внутри себя она использует платформозависимые функции или вызывает внешние нечистые функции.</p><p>Но язык, ядром которого будут лямбда-исчисления, скорее всего, не будет иметь возможности быть оптимально скомпилирован под популярные архитектуры (x86-64, ARM, RISC-V). Для языков, которым важна производительность, размер программы, потребление памяти и т.п., предлагаю ввести иное ядро. Это ядро должно быть универсальным для любого императивного языка программирования, а также должно иметь возможность глубоких оптимизаций.</p><p>У ядра на лямбда-исчислениях есть еще некоторые проблемы: я не придумал, как устранить зависимости между модулями в такой реализации, поэтому, возможно, будет хорошо эмулировать работу исчислений на байткоде императивного языка. Будет написан еще один модуль, превращающий промежуточное представление лямбда-исчислений в байткод (не скупимся на количество IR’ов ради гибкости и удобства).</p><h2>Байткод императивного языка</h2><p>Итак, ядро императивного языка программирования, конечно, будет представлять собой байткод. Сначала я думал использовать какую-нибудь видоизмененную машину Тьюринга, но решил, что она слишком сильно оторвана от текущих процессоров и нет смысла даже пытаться адаптировать ее под современные системы. Самая сложная задача проектирования байткода – он должен подходить под любой императивный язык, но при этом иметь возможность оптимизировать выходной код настолько, насколько это возможно. Сразу же хочется добавить поддержку LLVM для статической компиляции, а также компиляцию в dotnet bytecode, java bytecode для поддержки JIT компиляции. Если тщательно формализовать байткод, то даже есть надежда написать супероптимизатор на middle-end уровне.</p><p>Сделать один универсальный байткод, конечно, невозможно. Снова прибегнем к модульной архитектуре. Пусть инструкция байткода представляет собой такой тип:</p><p>То есть кортеж из типа байткодовой инструкции и трех списков. Изначально байткод будет иметь только один тип инструкции: call. Массивы содержат только <a href="https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BB%D0%B5%D0%B3%D0%B0%D1%82_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)">делегаты</a> на функции (указатель + сигнатура + доп. информация). Байткод буквально представляет собой <a href="https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%82%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4">шитый код</a> (threaded code) – массив вызовов функций (но не обязательно чистых). Массивы различаются лишь порядком применения операций. В массив [0] добавляются делегаты, которые должны быть исполнены перед делегатами массивов [1] и [2]. Грубо говоря получаем делегаты, которые обязательно должны быть исполнены перед или после исполнения других делегатов. Зачем это нужно, рассмотрим позже. Стоит отметить, что вместо таких массивов подошел бы также multiset&lt;(float, delegate)&gt; делегатов (отсортированный список по приоритету вызовов).</p><p>Существует несколько видов байткода: стековый, регистровый и в SSA форме. Для упрощения будем использовать стековый байткод, так как он легко переводится в регистровую и SSA форму. Да и сам по себе, гораздо более абстрактный. Регистровый байткод имеет привязку к количеству регистров, а байткод должен не зависеть от архитектурных особенностей. SSA форма – удобный вариант, но он более сложный. При разработке модулей он может сильно помешать, так как придется “жанглировать” передачами регистров, строить CFG.</p><h2>Продолжение байткода</h2><p>Представим ситуацию. Мы уже имеем минималистичный язык программирования: уже существуют локальные переменные, метки, вызовы внешних функций и другой примитивный функционал. Сейчас типизация динамическая, но хочется внедрить рантайм проверки типов, как в примере с JavaScript. Реализация примерно такая же: добавляем новое правило в лексер, обходим узлы AST с использованием переменной, внедряем assert как ноду перед использованием переменной. Но вдруг программист обнаруживает, что ему не хватает структур в языке. Обычных базовых структур, которые просто хранят значения, в которых нет даже методов (их можно добавить, но без методов проще). Итак, программист написал модуль с поддержкой подобного синтаксиса:</p><p>который превращается в подобный байткод:</p><p>Главная проблема в том, что ни на этапе AST, ни на этапе байткода инструкции LoadField и SetField не получается распознать, как использование переменной. Конечно, на уровне AST невозможно распознать такую конструкцию, так как создаются новые типы нод. А вот с байткодом есть возможность подружиться, если продумать типы инструкций. Можно сказать, что тип инструкции байткода – это ее тег. Первая мысль – делать строгие инструкции, например SetLocal, LoadGlobal, LoadMethodReference и другие. Но проблема таких типов в том, что они слишком конкретны.</p><p>Постараемся развить абстракции. Оставим только инструкции Set и Get, которые будут оперировать интерфейсами (точнее классами/структурами, имплементирующими их) ISettable и IGettable. Чтобы вызвать эти методы, нужны экземпляры классов. Для этого перед каждой установкой или чтением значения будем класть на стек ссылку-обертку на значение. Ссылка, в данном контексте, это не всегда указатель на ячейку памяти. Это абстрактный указатель на само значение. Класс, имплементирующий ISettable и IGettable. Ссылка может быть регистром, реальным указателем или быть ячейкой словаря (map’ы). Рассмотрим пример:</p><p>Как видно, логика написана достаточно абстрактно, нет никакой конкретики. Как работает ISettable – неясно, да и не нужно. Наша задача – написать относительно простой, максимально обобщенный код.</p><p>Инструкции байткода также могут возвращать значения. Первая мысль реализации: как и в обычных функциях, возвращаем значение через return. Но в байткоде встречаются такие инструкции, как swap. Они принимают два значения и возвращают два значения. Поэтому, для удобства, стоит возвращать значения через аргументы-ссылки, предназначенные только для записи (в C# – ключевое слово out). Например:</p><p>Возвращаясь к проблеме типизации и структур, теперь модуль типизации может вставлять проверки перед каждой инструкций типа Set/Get, а модуль структур будет генерировать код установки и получения значений именно через Set и Get. Тут нам и пригодятся три списка делегатов в инструкции. Проверка типов обязана исполнятся перед тем, как основная инструкция будет выполнена, поэтому проверку стоит поместить в нулевой список делегатов. Также плюсом будет то, что модули работают на уровне байткода, а не AST. Это позволит без боли менять фронтенд языка и не переписывать большинство модулей.</p><p>Теперь, понимая смысл трех списков, можем дать им названия: pre-ops, main-ops, post-ops – делегаты, исполняемые, соответственно, до, во время и после совершения основной операции.</p><p>В результате реализации байткода, придерживаясь таких идей, удастся убрать зависимость между модулями. Модуль типизации может ничего не знать о модуле структур. Аналогично модуль сборщика мусора ничего не будет знать о модуле синтаксического сахара.</p><h2>Перфоманс байткода</h2><p>Скорее всего, сложилось ощущение, что при компиляции такого байткода получится очень неэффективный ассемблерный код. В принципе, так и есть. При компиляции без некоторых оптимизаций итоговый код не уберет абстракции, не уберет виртуальные вызовы методов и в принципе не заметит некоторые паттерны, которые можно было бы упростить. Поэтому, если временем компиляции можно немного пожертвовать в пользу перфоманса, нужно в первую очередь (то есть перед всеми остальными оптимизациями) инлайнить все методы шитого кода. Уже после инлайнинга этих методов производить оптимизации. Снова рассмотрим пример:</p><p>Как видно, при достаточно глубоком инлайнинге (2-3 шага) можно сильно упростить код. Уже после инлайнинга, оптимизатор паттернов может сильно упростить некоторые под-коды. Например можно научить оптимизатор распознавать обращение к классу VariableWrapper</p><p>и заменять обращения на их быстрые аналоги (как было показано в примере, переменная была размещена в регистре rax, а не в словаре). Аналогично можно применить и другие оптимизации. А те инструкции, для которых оптимизатор не смог сгенерировать оптимизированный код, будут исполняться как обычно, в лоб. Если написано обращение к словарю, то просто вызываем переданную функцию. Такой подход позволяет писать как высокопроизводительные коды, благодаря оптимизаторам, так и универсальные, если оптимизаторы, например, не умеют компилировать код под какую-то платформу.</p><p>Конечно, качественная компиляция такого байткода – долгий процесс. Поэтому можно контролировать уровни оптимизации. Отключив инлайнинг, свертку констант и т.п., можно добиться достаточно глупой, но быстрой компиляции. Код просто будет представлять собой вызовы функций. И наоборот, задав глубину инлайнинга, включив свертку констант, аллоцируя структуры в регистрах или на стеке, векторизуя обработку данных, можно достичь высокой скорости исполнения.</p><p>Обсуждаемый байткод легко перевести в байткод виртуальной машины dotnet или JVM. Также не сложно перевести в LLVM IR, чтобы уже этот фреймворк применял сильные оптимизации.</p><h2>Рассматриваем узкие места</h2><h2>Дебаггинг</h2><p>Возможно отладка станет проблемой при фиксе ошибок компиляции байткода. Не плохой идеей кажется отслеживание, какие инструкции байткода были сгенерированы какими модулями, чтобы потом искать ошибку именно в них. Реализовать это можно достаточно просто через инкапсуляцию логики в классе коллекции байткода. Аналогичное замечание относится и к AST, ассемблерному листингу и другим промежуточным представлениям. Также хорошо добавить логирование почти каждого действия при изменении промежуточных представлений. Для совершенствования процесса отладки можно написать простенький интерпретатор этого байткода.</p><h2>Зависимости между модулями</h2><p>В худшем случае, количество зависимостей будет O(n^2), где n – количество модулей. Байткод специально был спроектирован так, чтобы зависимость между модулями была минимальной. Но даже с этим условием все еще стоит стараться делать модули абстрактными и подумать заранее о написании других модулях, которые смогут расширять его исходные возможности. Когда будет написан модуль с типизацией, нужно подумать, как улучшить имеющиеся абстракции для потенциальных будущих модулей с ее улучшением (вспомним <a href="https://ru.wikipedia.org/wiki/%D0%9B%D1%8F%D0%BC%D0%B1%D0%B4%D0%B0-%D0%BA%D1%83%D0%B1">лямбда-куб</a>).</p><h2>Общее API модулей</h2><p>Также мне нравится идея с веб-сервисами тем, что модулям придется общаться через json’ы. Это сразу заставит продумать API создаваемого модуля. Мучаться с бинарной совместимостью не придется, так как обмен информацией достаточно высокоуровневый и многие проблемы решают такие протоколы как, например, http.</p><h2>Заключение</h2><p>Не думаю, что когда-нибудь будет создан один универсальный язык программирования, который подойдет для решения всех задач. Но, скорее всего, именно удобное окружение и продуманная архитектура поможет создавать языки как конструктор для нужных задач. Нельзя допустить роста множества DSL’ей, где один язык решает одну проблему, чтобы не пришлось каждый день учить новый инструмент, но база модулей помогла бы иметь гораздо более полезный эффект. Не хватает высокоуровневого программирования в системном языке? Подключите модуль с zero-cost абстракциями. Не хватает функционального программирования в ООП языке? Подключите модуль с синтаксическим сахаром, оператором |&gt;, ленивыми вычислениями и <a href="https://en.wikipedia.org/wiki/Uniform_function_call_syntax">unified calls</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>6 способов автоматизировать ревью кода — подборка сервисов</title>
      <link>https://tproger.ru/articles/6-sposobov-avtomatizirovat-revyu-koda---podborka-servisov</link>
      <comments>https://tproger.ru/articles/6-sposobov-avtomatizirovat-revyu-koda---podborka-servisov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/6-sposobov-avtomatizirovat-revyu-koda---podborka-servisov</guid>
      <description><![CDATA[<p>Устали от ручного код-ревью? Обзор инструментов, которые автоматически проверяют код, находят уязвимости и экономят время команды.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/6-sposobov-avtomatizirovat-revyu-koda---podborka-servisov">6 способов автоматизировать ревью кода — подборка сервисов</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 20 Aug 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Код-ревью — важный этап разработки, но он часто отнимает много времени и ресурсов, особенно у ведущих специалистов. Если вы хотите ускорить процесс и повысить качество кода, не обязательно нагружать команду. Есть инструменты, которые берут часть рутины на себя.</p><h2>BeeCR: автоматический помощник для ревью в GitLab</h2><p><a href="https://beecr.ru">BeeCR</a> — сервис, который автоматически просматривает изменения в запросах на слияние (Merge Requests) в проектах GitLab и добавляет к ним комментарии. Каждый файл, который вы меняете, получает свой набор комментариев.</p><p>Сервис пригодится всем, кто пишет код на популярных языках программирования, и понимает, зачем нужно код-ревью. BeeCR работает с кодом на Python, JavaScript, Java, Kotlin, Swift, C#, C++, Ruby, PHP, Go, Bash/Shell, TypeScript и др.</p><p>Этого помощника можно добавить в команды, где процессы уже работают с живыми специалистами, или внедрить код-ревью с нуля без лишних затрат по времени и деньгам.</p><h3>Что именно проверяет?</h3><p>BeeCR — это не замена линтерам или инструментам для строгой проверки кода по конкретным гайдам. Он действует скорее как человек-ревьюер. Сервис способен обнаружить:</p><ul><li>Нарушения логики в алгоритме.</li><li>Лишний код, который случайно остался после отладки.</li><li>Ошибочность информации в логах.</li><li>Неудачное именование сущностей. Его задача — помочь найти неочевидные проблемы и дать рекомендации.</li></ul><h3>Как он встраивается в процесс разработки?</h3><p>BeeCR <b>бесшовно интегрируется с GitLab</b>. Результаты автоматического ревью отображаются прямо в привычном интерфейсе GitLab Code Review, рядом с комментариями ваших коллег.</p><p>Есть два основных способа интеграции:</p><ul><li>Через Вебхук: это самый простой и удобный вариант для большинства. Вебхук BeeCR запускается автоматически при создании или обновлении Merge Request.</li><li>Через CI/CD: если у вас уже есть развитая конфигурация GitLab CI/CD, этот вариант позволит выполнить более тонкую настройку. BeeCR предоставляет готовые конфигурации или шаблоны CI/CD-задач, которые можно использовать как есть или доработать. Для новых версий GitLab (начиная с 17) доступен CI/CD-компонент.</li></ul><h3>Можно ли настроить BeeCR под себя?</h3><p>В BeeCR можно кастомизировать разные рабочие параметры:</p><ul><li>Язык комментариев: по умолчанию комментарии пишутся на английском, но вы можете указать другой язык, например, русский.</li><li>Фильтрация файлов: управляйте списком файлов для проверки (или исключения) с помощью регулярных выражений.</li><li>Языковая модель: в версии On-Premises можно выбрать языковую модель (например, OpenAI или Ollama) и настроить её параметры.</li><li>Дополнительные инструкции: можно задать промты, чтобы получить более специфичные комментарии, через конфигурационный файл или комментарий в Merge Request.</li><li>Триггер и путь к конфигу: вы можете переопределить ключевое выражение-триггер (по умолчанию /beecr) и путь к конфигурационному файлу .beecr.yml. Настройки задаются через HTTP-заголовки вебхука, параметры запроса в URL, конфигурационный файл .beecr.yml в корне репозитория, переменные окружения сервера API (для On-Premises) или параметры задачи CI/CD.</li></ul><h3>Как попробовать и сколько это стоит?</h3><p>BeeCR предлагает пробный период на 1 месяц без ограничений. Стоимость рассчитывается по количеству активных участников в запросах на слияние в GitLab. К таким участникам относятся разработчики, ревьюверы, участники дискуссий и ответственные за слияние ветки. Сервис доступен в облачной версии (SaaS) или для локальной установки (On-Premises).</p><p>В версии On-Premises можно использовать как локально развернутые, так и внешние модели ИИ (например, ChatGPT), при этом оплата внешних моделей ложится на клиента. BeeCR включен в реестр Российского программного обеспечения (реестровая запись №25382 от 12.12.2024).</p><h2>Reshift — автоматическая проверка безопасности JS-кода</h2><p><a href="https://github.com/Reshift-Security/npm_plugin">Reshift</a> предлагает легковесный JavaScript-плагин для npm, призванный выявлять уязвимости ещё на этапе разработки. Он выполняет быстрое сканирование изменений и даёт подсказки по исправлению, одновременно обучая и поддерживая разработчика через понятные рекомендации.</p><p>Поддерживаемые языки: JavaScript.</p><h2>Что именно проверяет?</h2><p>В функции плагина входят:</p><ul><li>Набор проверок безопасности, разработанных экспертами в области безопасности;</li><li>Подробные, понятные описания обнаруженных проблем (DevSec Coach);</li><li>Рекомендации по исправлению (remediation snippets);</li><li>Ссылки на дополнительные ресурсы по уязвимостям.</li></ul><h2>Как встраивается?</h2><p>Сейчас плагин доступен только ограниченной группе участников закрытого бета-тестирования. Чтобы подключиться, нужно записаться на waitlist через сайт Reshift.</p><h2>Collaborator — расширенное ревью с фокусом на командную работу</h2><p><a href="https://smartbear.com/product/collaborator/">Collaborator</a> от SmartBear — это мощный инструмент для организации командного ревью кода, документации и тестов. Он не ограничивается автоматической проверкой — ключевая особенность сервиса в том, что он объединяет разработчиков, тестировщиков, аналитиков и технических писателей в едином процессе. Здесь ревью — это не только поиск ошибок, но и улучшение коммуникации внутри команды.</p><p>Практически все популярные языки программирования, включая Java, Python, JavaScript, C#, C++, PHP, Go, Swift, Kotlin и др. Также поддерживается ревью не только исходного кода, но и документации (Markdown, reStructuredText, HTML, PDF, Word) и тестовых сценариев.</p><h2>Что именно проверяет?</h2><p>Collaborator сочетает автоматическую проверку и ручное ревью, в его функции входят:</p><ul><li>Ревью исходного кода и документов (Word, PowerPoint, Visio, PDF, изображения, URL и др.)</li><li>Совместное обсуждение изменений, пометки дефектов и контроль версий</li><li>Возможность создания шаблонов ревью, чек-листов и пользовательских рабочих процессов</li><li>Отчёты для анализа процессов, отслеживания дефектов и аудита</li></ul><h2>Как встраивается?</h2><ul><li>Поддерживаются более 11 систем контроля версий: Git, Subversion, Perforce, TFS, CVS, Mercurial, ClearCase, AccuRev, Rational Team Concert и др.</li><li>Также интеграция со средами разработки (Eclipse, Visual Studio), Jira, Web UI и API.</li></ul><h2>Можно ли настроить под себя?</h2><ul><li>Создание чек-листов для обязательных пунктов ревью (например, безопасность, оптимизация, тестирование).</li><li>Настройка уровней серьёзности комментариев (информация, предупреждение, ошибка).</li><li>Возможность использования шаблонов ревью и шаблонов отчётов для стандартизации процесса.</li><li>Поддержка метрик — можно отслеживать, сколько дефектов найдено, сколько времени уходит на ревью, кто из участников наиболее активен.</li></ul><h2>Как попробовать и сколько стоит?</h2><p><b>Community</b> — бесплатная для небольших команд (до ~10 пользователей), с базовым набором функций.</p><p><b>Team</b> — платная, для средних команд (до ~25 пользователей), с расширенными возможностями ревью. $755 в год за пакет на 5 пользователей (до 25 человек).</p><p><b>Enterprise</b> — полная версия для крупных организаций; включает мощные настройки, интеграции и поддержку Simulink моделей. Около $1349 в год за одну concurrent-лицензию, включая поддержку Simulink и расширенные возможности.</p><h2>Codestriker — лёгкий инструмент для асинхронного ревью</h2><p><a href="https://codestriker.sourceforge.net">Codestriker</a> —  это веб-приложение с открытым исходным кодом (написано на Perl под GPL), предназначенное для асинхронного код-ревью. Оно поддерживает работу с диффами из систем контроля версий и предоставляет удобный интерфейс для коллективного ревью.</p><p>Работает с любыми языками программирования, поскольку анализирует диффы и текст. Поддерживает также документальные ревью.</p><h2>Что именно проверяет?</h2><p>Сам по себе Codestriker не выполняет <b>глубокий автоматический</b> анализ кода.</p><p>Для статического анализа, проверки стиля или поиска уязвимостей его можно дополнить линтерами, CI-скриптами или внешними утилитами.</p><p>Основная функция — хранить диффы и обсуждения, предоставляя удобный интерфейс для комментариев и фиксации договорённостей.</p><h2>Как встраивается в процесс разработки?</h2><ul><li>Работает через веб-интерфейс, не требует сложной установки.</li><li>Поддерживает загрузку диффов и изменений напрямую или через интеграцию с системами контроля версий.</li><li>Сохраняет историю всех ревью для удобного поиска и аудита.</li><li>Поддерживает экспорт результатов и комментариев в HTML или текстовые файлы — полезно для отчётности и архивирования.</li><li>Интегрируется с системами контроля версий: CVS, Subversion, ClearCase, Perforce, Visual SourceSafe.</li><li>Паспортная интеграция с баг-трекерами (Bugzilla, Flyspray) и системой LXR для быстрого просмотра кода.</li></ul><h2>Можно ли настроить под себя?</h2><p>Можно дорабатывать под свои процессы, так как это open-source.</p><ul><li>Поскольку Codestriker — это open-source, его можно модифицировать под внутренние процессы: добавить плагины, интеграцию с баг-трекерами, отчёты в специфическом формате.</li><li>Можно настраивать шаблоны комментариев, порядок отображения изменений, форматы экспорта.</li><li>Код доступен для свободной доработки, что делает сервис особенно привлекательным для команд с собственными требованиями.</li><li>Требует наличие сервера и СУБД — поддерживаются MySQL, PostgreSQL, Oracle, SQL Server и любая база через DBI.</li><li>Разворачивается на сервере: конфигурация веб-сервера (Apache/IIS), базы данных, установка Perl-модулей.</li></ul><h2>Как попробовать и сколько стоит?</h2><ul><li><b>Полностью бесплатен</b> — распространяется под открытой лицензией.</li><li>Можно развернуть на любом сервере или даже локально.</li><li>Подходит как временное решение для небольших команд, так и как база для создания собственного инструмента ревью.</li></ul><h2>Gerrit — мощный инструмент для распределённых команд</h2><p><a href="https://www.gerritcodereview.com/">Gerrit</a> — это мощная open-source платформа для ревью кода, тесно интегрированная с Git. Она используется во многих крупных компаниях и open-source проектах, где требуется строгий контроль качества кода и формальный процесс утверждения изменений.</p><p>Поддерживаемые языки: любые Gerrit работает на уровне изменений в Git, а не конкретного языка. Можно ревьюить и код, и документацию, и конфигурационные файлы.</p><p>Проект начал развиваться как форк от системы Rietveld и был создан Шоном Пирсом (одним из авторов Git) для внутренней разработки Android в Google .</p><p>В версии 2.x проект был переписан с Python на Java (Java EE), с использованием SQL для метаданных. Начиная с версии 3.x, Gerrit перешёл на NoteDb, где все метаданные хранятся непосредственно в Git-репозитории.</p><h2>Что именно проверяет?</h2><p>Сам по себе Gerrit не выполняет статический анализ, но легко интегрируется с линтерами, CI/CD-пайплайнами и системами тестирования. Основная задача — управление процессом ревью: комментарии к конкретным строкам, обсуждения, обязательное одобрение перед слиянием. Поддерживает настройку правил мёрджа (например, «два апрува от сеньоров» или «все тесты должны пройти»).</p><p>Пользователи создают review, отправляя коммит на refs/for/branch, что отличает изменения, требующие ревью, от прямых коммитов. Ревьюеры могут голосовать, модель оценки, например, используется шкала от -2 до +2 для Code-Review и Verified чеков. Доступно изменение изменений в рамках одного change (patch set), с возможностью обсуждения и улучшения кода до принятия.</p><h2>Как встраивается?</h2><ul><li>Работает как веб-приложение поверх Git. Поддержка SSH и HTTPS для работы с Git-клиентами, возможность размещения и управления множеством репозиториев с продвинутым контролем доступа и репликацией (например, геораспределённые зеркала)</li><li>Предоставляет визуальный интерфейс для сравнения изменений и обсуждения.</li><li>Глубокая интеграция с Jenkins, GitHub Actions, GitLab CI и другими CI/CD-системами.</li><li>Поддерживает fine-grained permissions — можно задать права на просмотр, комментирование и утверждение кода на уровне проекта, папки или файла.</li><li>Расширяемый через серверные плагины, доступные в официальном репозитории.</li></ul><h2>Можно ли настроить под себя?</h2><p>Доступны плагины, собственные скрипты, тонкая настройка прав доступа:</p><ul><li>Плагины для интеграции с трекерами задач (Jira, Redmine и др.).</li><li>Скрипты для автоматизации ревью и проверки коммитов.</li><li>Возможность настроить workflow под конкретный проект: обязательные шаги, правила коммит-месседжей, формат патчей.</li></ul><h2>Как попробовать и сколько стоит?</h2><ul><li><b>Полностью бесплатен</b>, распространяется под лицензией Apache 2.0.</li><li>Можно развернуть на своих серверах или использовать облачные инсталляции.</li><li>Отлично подходит для крупных команд с формализованным процессом разработки.</li><li>Gerrit — полностью open-source. Обновления можно скачивать в виде .war или через Maven Central, подписанные ключом автора.</li><li>Сообщество активно поддерживает релизы, документацию и обсуждения через форумы, Discord и пользовательские мероприятия.</li></ul><h2>Crucible — код-ревью с аналитикой и интеграцией в Atlassian</h2><p><a href="https://www.atlassian.com/software/crucible">Crucible</a> от Atlassian — это инструмент для код-ревью, ориентированный на большие компании, которым нужны интеграции с экосистемой Atlassian (Jira, Bitbucket, Confluence) и детальная аналитика по процессу ревью.</p><p>Поддерживаемые языки: любые, так как Crucible анализирует текстовые изменения. Есть готовые плагины для популярных языков.</p><h2>Что именно проверяет?</h2><ul><li>Логические ошибки;</li><li>Историю коммитов с возможностью поиска;</li><li>Потенциальные баги и нарушения стиля кода (с помощью подключаемых линтеров);</li><li>Несоответствия между кодом и документацией;</li><li>Общие архитектурные недочёты (в рамках командного обсуждения).</li></ul><p>Доступны Review и обсуждения — есть возможность комментировать строки кода, запускать threaded-дискуссии, упоминания и встроенные обсуждения. Ленты событий показывают последние комментарии, обновления, активность команды.</p><h2>Как встраивается?</h2><ul><li>Поддерживает Git, SVN, Mercurial, Perforce и CVS.</li><li>Интегрируется с Jira — можно привязывать задачи к конкретным ревью.</li><li>Есть возможность планировать ревью, назначать ответственных, отслеживать прогресс и статистику по команде.</li><li>Поддерживает расширение через REST API, можно создавать надстройки через плагины.</li></ul><h2>Можно ли настроить под себя?</h2><p>Это кроссплатформенное (Windows, Linux, macOS)  Java-приложение — требует x86‑64 или аналогичный. Подключаются официально поддерживаемые СУБД: HSQLDB (для тестирования), MySQL, PostgreSQL, Oracle, SQL Server.</p><ul><li>Настраиваемые шаблоны ревью.</li><li>Чек-листы для проверки типовых требований.</li><li>Автоматические уведомления и напоминания для участников.</li><li>Гибкая настройка прав доступа.</li></ul><h2>Как попробовать и сколько это стоит?</h2><ul><li>Платная лицензия: от $10 для 5 пользователей, далее цена зависит от команды.</li><li>Есть 30-дневный бесплатный пробный период.</li><li>Оптимально для компаний, уже использующих Atlassian Jira и Bitbucket.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Пробелы, табы и ничего больше: как работает язык программирования Whitespace</title>
      <link>https://tproger.ru/news/probely--taby-i-nichego-bolwe--kak-rabotaet-yazyk-programmirovaniya-whitespace</link>
      <comments>https://tproger.ru/news/probely--taby-i-nichego-bolwe--kak-rabotaet-yazyk-programmirovaniya-whitespace?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/probely--taby-i-nichego-bolwe--kak-rabotaet-yazyk-programmirovaniya-whitespace</guid>
      <description><![CDATA[<p>Язык Whitespace состоит только из пробелов, табов и переводов строк — код невидим, но полностью исполняем и даже может быть полиглотом</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/probely--taby-i-nichego-bolwe--kak-rabotaet-yazyk-programmirovaniya-whitespace">Пробелы, табы и ничего больше: как работает язык программирования Whitespace</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 25 Jul 2025 15:11:40 GMT</pubDate>
      <content:encoded><![CDATA[<p>В Whitespace — одном из самых странных языков программирования — код состоит только из пробелов, табуляций и переводов строки. Все остальные символы игнорируются и используются только как комментарии.</p><p>Это позволяет вставлять работающий код Whitespace <b>в пробелы любого другого кода</b> — и таким образом делать полиглоты: один и тот же файл может одновременно быть, например, Python-скриптом и Whitespace-программой.</p><h2>Как это работает</h2><p>Whitespace — это стековый императивный язык. Он умеет:</p><ul><li>класть числа в стек,</li><li>выполнять арифметику (сложение, вычитание, деление),</li><li>обращаться к куче (heap),</li><li>работать с вводом-выводом,</li><li>прыгать по меткам и вызывать подпрограммы.</li></ul><p>Каждая команда кодируется последовательностью из пробелов (S), табов (T) и переводов строки (L). Например, последовательность T S S (таб, пробел, пробел) складывает два числа из стека.</p><p>Числа кодируются в двоичном формате: S — это 0, T — 1, а знак задаётся первым символом: S — плюс, T — минус. Например, число 75 в Whitespace выглядит так:</p><h2>Кто его придумал</h2><p>Язык придумали <b>Эдвин Брейди</b> и <b>Крис Моррис</b> в 2002 году — те самые, кто позже создали языки <b>Idris</b> и <b>Kaya</b>. Презентовали Whitespace 1 апреля. И многие решили, что это шутка. Которая, по всей видимости, вышла из-под контроля.</p><p>Идея использовать только пробельные символы появилась ещё раньше: в 1997 году <b>Бьёрн Страуструп</b>, автор C++, предложил это также в шутку — как абсурдную эволюцию C++.</p><h2>«Hello, world!» на Whitespace</h2><p>Вот как выглядит программа, которая выводит Hello, world!:</p><p>В этой записи S — пробел, T — табуляция, L — перевод строки. Для людей такая программа полностью невидима: она выглядит как пустой файл, но её можно запустить через интерпретатор.</p><h2>Зачем всё это</h2><p>Whitespace — язык из категории <b>эзотерических</b>.</p><p>Его не используют в продакшене — он создан для развлечения, экспериментов и изучения того, <b>где границы читаемого и исполнимого кода</b>.</p><p>Кроме того, это отличный способ спрятать код в самом неожиданном месте.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как найти работу в IT за границей в 2025 году: ответы на часто задаваемые вопросы и рекомендации экспертов</title>
      <link>https://tproger.ru/articles/kak-najti-rabotu-v-it-za-granicej-v-2025-godu--otvety-na-chasto-zadavaemye-voprosy-i-rekomendacii-ekspertov</link>
      <comments>https://tproger.ru/articles/kak-najti-rabotu-v-it-za-granicej-v-2025-godu--otvety-na-chasto-zadavaemye-voprosy-i-rekomendacii-ekspertov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Мария Грищенко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-najti-rabotu-v-it-za-granicej-v-2025-godu--otvety-na-chasto-zadavaemye-voprosy-i-rekomendacii-ekspertov</guid>
      <description><![CDATA[<p>Свежая статистика, исследования и советы экспертов: как российским IT-специалистам найти работу за границей в 2025 году.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-najti-rabotu-v-it-za-granicej-v-2025-godu--otvety-na-chasto-zadavaemye-voprosy-i-rekomendacii-ekspertov">Как найти работу в IT за границей в 2025 году: ответы на часто задаваемые вопросы и рекомендации экспертов</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Статистика]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Amazon]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[VPN]]></category>
      <category><![CDATA[На английском языке]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[Стартапы]]></category>
      <category><![CDATA[Английский]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[GTK]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Кибербезопасность]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 18 Jul 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p><i>Российские IT-специалисты востребованы не только у себя на родине, но и за рубежом. В 2024 году иностранные технологические компании наняли <a href="https://www.kommersant.ru/doc/7675878">более 5 тыс. сотрудников</a> из России — это в два раза больше, чем годом ранее. Чаще всего наших айтишников приглашают работать китайские IT-гиганты Huawei, Alibaba и Tencent, также активизировались европейские работодатели SAP, Delivery Hero и американские Amazon, OpenAI. </i></p><p>Если вы хотите стать одним из них и расширить свои горизонты, сделать первые шаги вам поможет наш материал. Здесь мы собрали ответы на часто задаваемые вопросы по поиску работы в IT за рубежом: наиболее перспективные направления, вспомогательные сервисы, особенности виз, рекомендации, как адаптировать резюме для иностранного рынка и получить оффер мечты.</p><p>Бонус — комментарии экспертов с многолетним опытом работы за границей и глубоким пониманием международного рынка труда.</p><h2>Какие IT-профессии наиболее востребованы за рубежом</h2><p>По данным <a href="https://www.rbc.ru/business/29/01/2025/6799966d9a794709c7932279">сервиса по поиску работы HeadHunter</a>, в 2024 году наибольшим спросом за границей пользовались российские:</p><ul><li>менеджеры по продажам и работе с клиентами (13%),</li><li>операторы колл-центров (5%),</li><li>дизайнеры, менеджеры по маркетингу, интернет-маркетологи, художники (по 4%),</li><li>учителя, SMM- и контент-менеджеры (по 3%),</li><li>секретари, помощники руководителя, ассистенты (по 2%).</li></ul><p>Программисты и разработчики заняли почётное второе место (10%). А специалисты технической поддержки и тестировщики набрали всего по 2%.</p><p>Но в исследовании <a href="https://netology.ru/blog/news/03-07-2023-europe-it">образовательной онлайн-платформы «Нетология» и международного коммуникационного агентства Zecomms Agency</a> специалист технической поддержки — наоборот, наиболее востребованная профессия за рубежом. С ним связано 17% от общего массива IT‑вакансий, что делает специалиста техподдержки абсолютным лидером по количеству открытых вакансий.</p><figure><img src="https://media.tproger.ru/user-uploads/114863/2025-06-30/dd2413cd-3aac-48e1-a29c-30620bdccf1d.png" alt="" /><figcaption>Самые востребованные за рубежом IT-специальности, данные исследования «Нетологии» и Zecomms Agency</figcaption></figure><p>На втором месте расположился программный инженер (16%), на третьем — бизнес-аналитик (6%) и IT-консультант (6%).</p><p><b>Максим Оганов, ментор, бизнес-консультант, автор проекта Oganov.Consulting:</b></p><blockquote>Российские IT-специалисты всё ещё остаются востребованными за рубежом, но по сравнению с 2022 годом ситуация изменилась. Международные компании уже не так охотно берут в штат сотрудников из России, известны случаи сокращений из-за гражданства. Причина — политика компаний, особенно тех, которые решили покинуть российский рынок. Зато за последние три года многие отечественные стартапы релоцировались в другие страны, и они отдают предпочтение сотрудникам из России.</blockquote><p><b>Евгений Козак, senior фронтенд-разработчик компании With Intelligence, живёт в Лондоне, более 10 лет опыта работы за границей: </b></p><blockquote>В 2022 году интерес к российским IT-специалистам был выше, но в 2025 ситуация изменилась из-за экономической нестабильности, роста процентных ставок и замедления найма во многих странах. Вакансий стало меньше, особенно без разрешения на работу. Однако IT по-прежнему остаётся одной из самых высокооплачиваемых и востребованных сфер.</blockquote><h2>Языки программирования, актуальные для иностранных компаний</h2><p>Согласно <a href="https://netology.ru/blog/news/04-07-2023-top-programming-languages">исследованию «Нетологии» и Zecomms Agency</a>, Java признан самым популярным языком программирования — его активно используют компании по всему миру. На Java приходится более четверти всех открытых вакансий (26%) в сфере IT в Европе, США, Латинской Америке, Азии и на Ближнем Востоке.</p><p>Java — это универсальный язык программирования, который отличаются стабильностью, масштабируемостью и кроссплатформенностью. На нём пишут крупные корпоративные приложения в банках, промышленных, страховых и телеком-компаниях, облачные, распределённые и IoT- системы, микросервисы. Также Java считается неотъемлемой частью бэкенд-разработки.</p><p>На втором месте по популярности находится язык SQL, который используют для разработки баз данных и систем аналитики. На него пришлось 24% всех вакансий, бóльшая часть из них в Европе, Азии и на Ближнем Востоке.</p><p>Замыкает тройку лидеров Python (23%) — более половины открытых вакансий в Азии и на Ближнем Востоке связано именно с этим языком. Оно и неудивительно: на Python пишут модели для машинного обучения, анализа данных и автоматизации.</p><figure><img src="https://media.tproger.ru/user-uploads/114863/2025-06-30/6a35cec4-e5d1-4991-a1a8-ef49722d59ea.png" alt="" /><figcaption>Самые востребованные за рубежом языки программирования, данные исследования «Нетологии» и Zecomms Agency</figcaption></figure><h2>Сколько айтишникам платят за границей</h2><p>Более высокая зарплата — <a href="https://www.cnews.ru/news/top/2023-10-27_polovinu_rossijskih_it-shnikov">одна из главных причин</a>, почему российские IT-специалисты хотят работать за границей.</p><p><b>Евгений Козак, senior фронтенд-разработчик компании With Intelligence, живёт в Лондоне, более 10 лет опыта работы за границей:</b></p><blockquote>Трудоустройство за границей открывает доступ к международным командам, передовым технологиям и крупным проектам мирового уровня с лучшими практиками разработки, высокими стандартами качества кода и современными архитектурными подходами. Всё это способствует быстрому профессиональному росту. Мне переезд позволил быть ближе к центру IT-индустрии и дал возможность развиваться в высококонкурентной среде.</blockquote><p>В большинстве европейских стран зарплаты индексируются и официально растут вслед за инфляцией. За счёт этого доходы, пусть и медленно, но увеличиваются. К сожалению, не все отечественные компании могут такое гарантировать — практика индексации зарплат в России пока не так распространена.</p><p>Но ключевое — размер оклада. По данным <a href="https://ruitunion.org/posts/2024-04-24-market-and-wages-state/">«Профсоюза работников ИТ»</a>, медианная зарплата специалистов уровня senior в России составляет 276 362 рубля в месяц, в то время как за рубежом она равна 386 730 рублей в месяц. Российские миддлы получают 170 000 рублей, а работающие за границей — 205 142 рубля. Зарплата джунов несильно отличается, хотя «за бугром» она всё-таки немного больше: 85 000 рублей против 80 000 рублей в России.</p><p>Таким образом, зарплата IT-специалистов за рубежом как минимум в 1,5 раза больше, чем в России.</p><p>Дополнительное преимущество — оплата в валюте: долларах, евро или фунтах. После пересчёта на рубли итоговая сумма все равно будет выше средней зарплаты в России — и это без учёта премий и бонусов.</p><figure><img src="https://media.tproger.ru/user-uploads/114863/2025-06-30/caf0a60b-53e5-4468-9c37-44101399c92c.png" alt="" /><figcaption>Медианная зарплата IT-специалистов в России и за рубежом, статистика «Профсоюза работников ИТ»</figcaption></figure><h2>Где IT-кадры пользуются спросом</h2><p>Найти работу в IT сейчас везде нелегко, но чуть проще это сделать там, где активно развивается IT-сектор и требуется много кадров соответствующего профиля:</p><p><b>Германия. </b>Наибольший дефицит IT-специалистов наблюдается в Германии — в 2023 году было опубликовано <a href="https://netology.ru/blog/news/03-07-2023-europe-it">103 089 вакансий</a>. Особенно остро нехватка кадров ощущается в таких областях, как разработка программного обеспечения, Data Science, кибербезопасность и DevOps. А в 2025 году страна планирует выдать <a href="https://prian.ru/news/germaniya-vydast-200-000-viz-kvalificirovannym-kadram-iz-za-nehvatki-rabochey-sily.html">на 10%</a> больше рабочих виз, чем годом ранее.</p><p><b>Нидерланды.</b> В стране большое внимание уделяется IT-стартапам. Так, в 2024 году голландские технологические компании привлекли <a href="https://tech.eu/2025/06/12/the-growth-and-opportunities-of-the-netherlands-tech-ecosystem/">€3,7 млрд венчурных инвестиций</a> — это около 5% от общего объёма капитала, вложенного в европейскую экосистему. Благодаря этому Нидерланды вошли в топ‑10 стран Европы по объёму инвестиций в технологии. Особенно быстро растёт сектор DeepTech («глубоких технологий») — полупроводники, искусственный интеллект и квантовые технологии.</p><p><b>Канада.</b> Такие канадские города как Торонто, Ванкувер и Монреаль считаются настоящей IT-меккой. Здесь активно развиваются стартапы и работают подразделения крупнейших технологических компаний — Google, Microsoft, Amazon. Кроме того, для IT-специалистов есть много иммиграционных программ, например, <a href="https://www.canadacareersite.com/blog/global-talent-stream-canada-work-permit-application">Global Talent Stream</a>, которая позволяет получить разрешение на работу в течение двух недель.</p><p><b>США.</b> В 2023 году объём IТ-рынка США достиг <a href="https://www.comnews.ru/content/233424/2024-05-29/2024-w22/1008/rossiyskiy-it-rynok-ustupil-obemu-rynkam-stran-briks">$1,3 трлн</a> и продолжает развиваться <a href="https://www.mordorintelligence.com/industry-reports/united-states-it-services-market">высокими темпами</a>. В Европейском союзе он составил <a href="https://www.comnews.ru/content/233424/2024-05-29/2024-w22/1008/rossiyskiy-it-rynok-ustupil-obemu-rynkam-stran-briks">$1,05 трлн</a>, в Китае — <a href="https://www.comnews.ru/content/233424/2024-05-29/2024-w22/1008/rossiyskiy-it-rynok-ustupil-obemu-rynkam-stran-briks">$348 млрд</a>, в России — <a href="https://www.comnews.ru/content/233424/2024-05-29/2024-w22/1008/rossiyskiy-it-rynok-ustupil-obemu-rynkam-stran-briks">$36,1 млрд</a>. Таким образом, американский технологический рынок в 36 раз больше российского, в 1,24 раза больше европейского и почти в четыре раза превосходит китайский. Это подтверждает его статус мирового лидера. Соответственно, IT-специалистов нужно много.</p><h2>Куда уехать проще всего</h2><p>По данным <a href="https://www.rbc.ru/business/29/01/2025/6799966d9a794709c7932279">HeadHunter</a>, активнее всего российских специалистов приглашают на работу компании из:</p><ul><li>Белоруссии — 172,3 тыс. приглашений,</li><li>Казахстана — 150,9 тыс. приглашений,</li><li>Грузии и Турции — 69,7 тыс. и 67,8 тыс. приглашений соответственно,</li><li>Узбекистана — 57,2 тыс. приглашений.</li></ul><p>Самый большой рост интереса продемонстрировали китайские работодатели — он увеличился почти в шесть раз. В 2023 году количество предложений для жителей России о работе в Китае составляло всего 4,8 тыс., тогда как в 2024 году цифра достигла 27,6 тыс. предложений.</p><p>Кроме того, за год потребность в российских специалистах выросла в Сербии с 5,8 тыс. до 26,3 тыс. (+356,3%), в Турции — с 23,5 тыс. до 67,8 тыс. (+188,6%), на Кипре — с 4,6 тыс. до 12 тыс. (+160,9%), в Польше — с 4,1 тыс. до 9,0 тыс. (+119,6%) и в ОАЭ — с 19,2 тыс. до 41,7 тыс. (+117,2%).</p><p>А Европа стала лидером по количеству предложений для IT-специалистов со знанием русского языка — <a href="https://netology.ru/blog/news/03-07-2023-europe-it">3%</a> всех IT-вакансий в регионе. На других рынках доля таких предложений не превышает 1%. Чаще всего русскоязычных специалистов ищут <a href="https://netology.ru/blog/news/03-07-2023-europe-it">в Польше — 2 200 вакансий, Венгрии — 752 вакансии, Австрии — 178 вакансий, Греции — 152 вакансии</a>.</p><p><b>Максим Оганов, ментор, бизнес-консультант, автор проекта Oganov.Consulting: </b></p><blockquote>Не все страны охотно принимают специалистов из других стран. Если раньше одними из самых популярных направлений для релокации были Канада и США, то сейчас переехать туда стало значительно сложнее. Больше шансов на трудоустройство в компании Испании, Португалии, Кипра, ОАЭ.</blockquote><h2>Как IT-специалисту найти работу за границей: четыре шага</h2><h3>1. Зарегистрируйтесь на международных платформах</h3><p>Принцип поиска работы за рубежом такой же, как и в России. Нужно зарегистрироваться на платформах по типу HeadHunter и откликаться на понравившиеся вакансии. Чем больше откликов, тем лучше.</p><p>Вот подборка сайтов для поиска работы за границей:</p><ul><li><a href="https://ru.linkedin.com/">LinkedIn</a> — профессиональная социальная сеть, где можно искать вакансии и налаживать контакты;</li><li><a href="https://www.indeed.com/">Indeed</a> — международный агрегатор вакансий, позволяющий фильтровать их по странам, городам и отраслям;</li><li><a href="http://relocate.me">Relocate.me</a> — платформа для вакансий с релокацией;</li><li><a href="https://remoteok.com/">Remote OK</a> — площадка для поиска удалённой работы;</li><li><a href="https://weworkremotely.com/">WWR</a> — сервис, где публикуют вакансии крупные зарубежные компании, например, Amazon или Google.</li><li><a href="https://www.angellist.com/careers">AngelList Talent</a> — каталог вакансий в иностранных стартапах.</li></ul><p>Некоторые из них открываются только с VPN.</p><p><b>Максим Оганов, ментор, бизнес-консультант, автор проекта Oganov.Consulting: </b></p><blockquote>Удобнее всего искать вакансии зарубежных компаний через LinkedIn. По моему опыту, большинство специалистов находят работу за границей именно через эту площадку. Но есть и альтернативные варианты — например, телеграм-каналы с профильными вакансиями. Будьте готовы к тому, что придётся отправлять много откликов. В среднем на 100 откликов приходится не более 5 ответов.</blockquote><p><b>Евгений Козак, senior фронтенд-разработчик компании With Intelligence, живёт в Лондоне, более 10 лет опыта работы за границей: </b></p><blockquote>В основном я искал работу через LinkedIn. Это самая эффективная платформа: я обновил профиль, загрузил резюме и активно взаимодействовал с рекрутерами. Также полезно размещать резюме на популярных job-порталах и быть открытым к предложениям — тогда многие специалисты по подбору персонала сами выходят на связь.</blockquote><h3>2. Адаптируйте резюме для иностранного рынка</h3><p>Если вы собираетесь искать работу на европейском или американском рынке, разумеется, резюме должно быть составлено на английском языке. В англоязычных странах резюме называют Curriculum Vitae или CV.</p><p>Эксперты компании EP Advisory, которая помогает российским специалистам строить карьеру за рубежом, <a href="https://ep-advisory.com/ru/statii/rabotayushhee-rezyume-na-anglijskom-na-osnove-30-000-proverennyh-rezyume/">рекомендуют</a> включать в CV разделы Name, Profile, Education, Experience, Skills &amp; Other. Названия предыдущих компаний и занимаемые должности следует выделять, а каждый блок —  разграничить чертой.</p><figure><img src="https://media.tproger.ru/user-uploads/114863/2025-06-30/2f6d7e8d-fa4e-4d6c-8925-e3c2228fc0cb.png" alt="" /><figcaption>Пример грамотно составленного резюме на английском языке от экспертов EP Advisory</figcaption></figure><p>Кроме того, в некоторых странах, например, Великобритании, США и Канаде не принято добавлять фото в резюме. Такое правило стало следствием законов против дискриминации в этих странах, поэтому его несоблюдение может вызвать негативную реакцию и привести к мгновенному отказу.</p><p>Дополнительно к резюме стоит приложить мотивационное письмо (Cover Letter), подготовленное специально под конкретную вакансию. В мотивационном письме уже не пишут об образовании и навыках — эти сведения указывают только в резюме. А в Cover Letter особый упор делается на кейсах и объяснении, чем для вас интересна компания и почему вы для неё — самый подходящий кандидат.</p><p><b>Максим Оганов, ментор, бизнес-консультант, автор проекта Oganov.Consulting: </b></p><blockquote>Необходим большой и подтверждённый опыт работы. Придётся конкурировать со специалистами уровня senior со всех концов света. Особенно много кандидатов из Индии, Ирана, Пакистана.</blockquote><h3>3. Обратитесь в агентство по трудоустройству</h3><p>Самостоятельно найти работу за границей и разобраться во всех сопутствующих вопросах, связанных с написанием резюме, оформлением виз и переездом, может быть сложно. Поэтому стоит обратиться в агентства по трудоустройству, которые все эти моменты возьмут на себя.</p><p>Вот список наиболее известных рекрутинговых агентств:</p><ul><li><a href="https://www.adecco.com/">Adecco </a>— крупнейшее агентство с вакансиями по всему миру;</li><li><a href="https://manpower.ru/">Manpower</a> — международная стаффинговая, аутсорсинговая и HR-консалтинговая компания из России;</li><li><a href="https://www.michaelpage.com/">Michael Page</a> — международная компания, которая специализируется на подборе персонала среднего и высшего звена;</li><li><a href="https://www.hays.com/">Hays</a> — британская рекрутинговая компания, которая предоставляет услуги по подбору персонала в 33 странах мира;</li><li><a href="https://www.harveynash.com/">Harvey Nash</a> — международная компания, которая специализируется на IT-аутсорсинге;</li><li><a href="https://www.randstad.pl/ru/">Randstad</a> — голландская консалтинговая компания, которая сотрудничает с ведущими зарубежными работодателями.</li></ul><p>Агентства также консультируют по вопросам адаптации и помогают с поиском жилья.</p><p><b>Евгений Козак, senior фронтенд-разработчик компании With Intelligence, живёт в Лондоне, более 10 лет опыта работы за границей: </b></p><blockquote>Чтобы найти работу в Лондоне, я сотрудничал с международными и британскими рекрутинговыми агентствами — Hays, Harvey Nash и Michael Page. Примерно 50% предложений приходили именно от них. Эти агентства играют важную роль на IT-рынке и обладают широкой сетью контактов с работодателями по всей Европе. Они помогали мне в поиске подходящих позиций и сопровождали на всех этапах — от первичного отклика до собеседования и подписания оффера.</blockquote><h3>4. Получите визу и разрешение на работу</h3><p>Без визы и разрешения приступить к работе за границей не получится. Здесь доступны два варианта — Digital Nomad Visa или обычные рабочие визы.</p><p><b>Digital Nomad Visa.</b> Digital Nomad Visa или «виза цифрового кочевника» позволяет легально жить за рубежом, но при этом продолжать удалённо работать на родину. В отличие от туристической визы, Digital Nomad Visa даёт право длительно находиться в определённой стране, а в сравнении с рабочей визой — не требует трудоустройства на местном рынке.</p><p>Это не классическая рабочая виза. Она разрешает трудиться из разных частей мира, но с ней нельзя работать на компании из страны пребывания. Также не всегда можно перевести семью.</p><p>Чтобы получить визу цифрового кочевника, нужно подтвердить минимальный доход (чаще всего <a href="https://ep-advisory.com/ru/statii/digital-nomad-visa-zit-v-evrope-i-rabotat-udalenno/?ref=journal.zarplata.ru">не ниже 2000 евро в месяц</a>) и наличие медицинской страховки. Также может понадобиться трудовой договор или договор подряда, доказывающие, что вы работаете удалённо. Сейчас Digital Nomad Visa оформляют в<a href="https://www.globalcitizensolutions.com/digital-nomad-visa/"> 66 странах</a>, включая Португалию, Испанию, Эстонию, ОАЭ и Южную Корею.</p><p><b>Классические рабочие визы.</b> Это визы EU Blue Card или виза H‑1B.</p><ul><li>Голубая карта (EU Blue card) — виза для работы в Европе. Чтобы получить её, нужен диплом о высшем образовании (не ниже бакалавра) и оффер с зарплатой от 48 300 евро год (43 760 евро для IT‑специалистов) на срок минимум шесть месяцев. В случае одобрения выдаётся вид на жительство, действующий до четырёх лет с возможностью продления.</li></ul><ul><li>Виза H‑1B — виза для работы в США. Она также требует наличия высшего образования и оффера от местной компании. Но американское законодательство устанавливает лимит на выдачу H‑1B — 65 000 базовых и 20 000 дополнительных виз для специалистов с магистерской степенью из США. Всего 85 000 виз в год. Виза предоставляется максимум на три года с возможностью продления до шесть лет.</li></ul><p>Рабочие визы позволяют получить полноценный правовой статус резидента страны, в которую вы планируете переезжать, а вместе ним — все социальные гарантии: медстраховку, оплачиваемый отпуск, пенсионные отчисления.</p><h2>Официальное трудоустройство или фриланс</h2><h3>Удалённая работа на фрилансе</h3><p>Фриланс — самый простой способ начать работать с зарубежными компаниями без лишней бюрократии и сложностей с оформлением. Достаточно зарегистрироваться на зарубежную фриланс-платформах <a href="https://www.upwork.com/">Upwork</a> или <a href="https://www.fiverr.com/">Fiverr</a>, и можно сразу браться за международные проекты. Единственное, могут возникнуть трудности с оплатой, поэтому стоит завести себе иностранную банковскую карту.</p><p>Главные минусы фриланса — нет оплачиваемого отпуска и больничных, а доход крайне нестабилен.</p><h3>Официальное трудоустройство с релокацией</h3><p>Официальное трудоустройство гарантирует стабильную зарплату и полный соцпакет, а при релокации — помощь с переездом и адаптацией в новой стране.</p><p>Однако получить оффер с переводом в местный офис не так просто. Иностранные компании редко берут на себя расходы, связанные с релокацией российских специалистов и их семей. Чаще всего они нанимают тех, кто уже легально живёт за границей — например, по рабочей визе или с видом на жительство. В таком случае проще оформить перевод в местный офис или принять человека на работу через филиал в этой стране.</p><p>Максим Оганов, ментор, бизнес-консультант, автор проекта Oganov.Consulting:<b></b></p><blockquote>Найти работу будет проще, если вы уже находитесь в стране, и компании не придётся заниматься вашей релокацией. Поэтому хороший вариант — попробовать переехать самостоятельно, продолжая работать удалённо в российской компании или на фрилансе. У вас будет время присмотреться к стране, понять, подходит ли она вам. А если вы достаточно активны и коммуникабельны, можно будет попробовать найти вакансию через местные сообщества российских эмигрантов.</blockquote><p><b>Евгений Козак, senior фронтенд-разработчик компании With Intelligence, живёт в Лондоне, более 10 лет опыта работы за границей: </b></p><blockquote>В первую очередь, нужно убедиться, что у вас есть правовой статус или разрешение на работу в стране, где вы планируете трудоустроиться. Это значительно повышает ваши шансы на успех.</blockquote><h2>Какой уровень владения английским языком нужен</h2><p>Для оценки владения иностранными языками, включая английский, в Европе используют систему CEFR (Common European Framework of Reference). CEFR выделяет шесть уровней знания языка: A1, A2, B1, B2, C1, C2.</p><p>Чтобы успешно строить карьеру за границей, рекомендуется уровень не ниже B1-B2, который позволит понимать профессиональные тексты, участвовать во встречах и вести рабочую переписку.</p><p><b>Максим Оганов, ментор, бизнес-консультант, автор проекта Oganov.Consulting:</b></p><blockquote>Обязательное требование — свободное владение английским: например, в Португалии большинство сотрудников IT-компаний общаются на нём. Но иногда кандидату необходимо знание местных языков — так, если вы хотите переехать во Францию, шансы на трудоустройство без владения французским минимальны.</blockquote><p><b>Евгений Козак, senior фронтенд-разработчик компании With Intelligence, живёт в Лондоне, более 10 лет опыта работы за границей: </b></p><blockquote>Главной трудностью для меня был язык. Технический английский у меня на хорошем уровне, особенно когда речь идёт о собеседованиях, терминах и обсуждении архитектуры — в этом я чувствую себя уверенно. Однако повседневный английский, особенно неформальное общение, давался сложнее. Кроме того, структура интервью в других странах немного отличается, но к ней я быстро адаптировался. Повысить уровень языка и стать увереннее в повседневном общении мне помогли постоянная практика, разговоры с носителями языками и участие в командных митингах.</blockquote><h2>Коротко о главном</h2><ul><li>Иностранные компании активно используют Java, Python, SQL и нуждаются в программистах, умеющих писать на этих языках.</li><li>IT-специалисты особенно востребованы в Германии, Нидерландах, Канаде и США — странах с наиболее интенсивным ростом технологического сектора.</li><li>Проще всего уехать в Белоруссию, Казахстан, Турцию, Грузию и Китай.</li><li>Работать за границей можно официально или на фрилансе.</li><li>Чтобы получить оффер, следует зарегистрироваться на международных платформах для поиска работы, адаптировать резюме, оформить визу и, при необходимости, обратиться в агентство.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Что по экологии? Сколько углеродного следа оставляет ваш код</title>
      <link>https://tproger.ru/articles/chto-po-ekologii--skolko-uglerodnogo-sleda-ostavlyaet-vaw-kod</link>
      <comments>https://tproger.ru/articles/chto-po-ekologii--skolko-uglerodnogo-sleda-ostavlyaet-vaw-kod?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-po-ekologii--skolko-uglerodnogo-sleda-ostavlyaet-vaw-kod</guid>
      <description><![CDATA[<p>Узнайте, сколько CO₂ генерирует ваш код в 2025 году и как снизить углеродный след в IT. Практические советы по оптимизации архитектуры, выбору «зеленых» технологий и реальные кейсы компаний. Экологичное программирование — новый тренд для разработчиков и бизнеса.
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-po-ekologii--skolko-uglerodnogo-sleda-ostavlyaet-vaw-kod">Что по экологии? Сколько углеродного следа оставляет ваш код</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Конференции]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Amazon]]></category>
      <category><![CDATA[IBM]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[NVIDIA]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Стартапы]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Сбер]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 10 Jul 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2025 году IT-индустрия потребляет больше энергии, чем крупная европейская страна  в 2010. <a href="https://www.iea.org/">По данным IEA</a> (International Energy Agency), дата-центры и телекоммуникационные сети уже отвечают за 3,7% глобальных выбросов CO₂ — это больше, чем производит авиация.</p><p>Казалось бы, код — это просто текст. Но каждый запрос к API, каждая компиляция и даже холостой цикл требуют энергии. Например, обучение GPT-4 в 2023 году «съело» столько же электричества, сколько 120 домохозяйств за год. А теперь представьте, что таких моделей тысячи, а серверов — миллионы.</p><p>Почему это важно? Во-первых, <a href="https://digital-strategy.ec.europa.eu/">регуляторы ужесточают требования</a>: в ЕС с 2025 года IT-компании обязаны раскрывать углеродный след своих продуктов. Во-вторых, инвесторы все чаще смотрят на ESG-рейтинги — показатели экологического и ответственного производства. В-третьих, оптимизация кода снижает затраты на инфраструктуру.</p><p>Эта статья — не манифест экоактивистов, а руководство для разработчиков, архитекторов и технических директоров компаний (СТО), которые стремятся более эффективные и экологичные проекты.</p><h2>Углеродный след кода: что скрывается за строчками</h2><p>Программное обеспечение — не виртуальный конструктор. Каждая операция требует электричества, а серверы, на которых работает код, часто питаются от невозобновимых источников энергии — например, угля и газа.</p><h3>Откуда берутся выбросы</h3><p>Когда мы говорим об углеродном следе ПО, важно понимать: код не существует в вакууме. Каждая строка, каждый запрос и каждая операция требуют физических ресурсов — электричества, серверного оборудования, систем охлаждения. В 2025 году эта цепочка стала еще сложнее из-за взрывного роста облачных вычислений и ИИ.</p><p>Прямые выбросы — это энергия, которую потребляют серверы при выполнении вашего кода. Например, один средний веб-сервер на AWS EC2 (тип t3.large) в год вырабатывает около 400 кг CO₂ — как небольшой автомобиль, проехавший 2000 км. При этом нагрузка на серверы постоянно растет: с 2020 по 2025 год энергопотребление дата-центров увеличилось на 35%.</p><p>Косвенные выбросы часто упускают из виду. Производство серверного оборудования — процесс крайне энергоемкий. Для создания одной только микросхемы памяти DDR5 требуется около 200 кВт⋅ч энергии — столько же, сколько средний холодильник потребляет за год. А после выхода оборудования из строя лишь 20% компонентов перерабатывается должным образом (<a href="https://globalewaste.org/">Global E-Waste Monitor 2024</a>).</p><p>Системы охлаждения — еще один скрытый источник выбросов. Современные дата-центры работают 24/7, и даже с использованием жидкостного охлаждения на поддержание температуры уходит до 40% всей потребляемой энергии. В жарких странах, ОАЭ или Сингапуре, этот показатель может достигать 50%.</p><p>Яркий пример — крупные языковые модели. Если в 2023 году обучение GPT-4 потребовало ~10 ГВт⋅ч (эквивалент годового потребления 120 домохозяйств), то к 2025 году из-за увеличения размеров моделей этот показатель вырос в 1,5 раза. Один запрос к такому ИИ теперь генерирует около 2 г CO₂ — как если бы вы проехали 10 метров на бензиновом автомобиле.</p><p>Но проблема не только в ИИ. Обычное веб-приложение с посещаемостью 100 000 пользователей в месяц может производить до 1 тонны CO₂ в год — и это без учета мобильных клиентов и API. При этом <a href="https://www.webpagetest.org/eco/">30% этой нагрузки приходится на неоптимизированный фронтенд</a>: тяжелые изображения, избыточные JavaScript-библиотеки и частые запросы к серверу.</p><p>Ситуацию усугубляет географический фактор. Дата-центр в Норвегии, где 98% энергии поступает от ГЭС, будет «чище», чем такой же центр в Польше, где угольные электростанции дают 70% энергии. <a href="https://app.electricitymaps.com/">Разница</a> в углеродном следе может быть 20-кратной для идентичных операций.</p><p>При этом стандарты измерения все еще остаются разрозненными. PUE (Power Usage Effectiveness), который используют Google и Microsoft, учитывает только эффективность инфраструктуры, но не источник энергии. Новый стандарт CUE (Carbon Usage Effectiveness), разработанный в 2024 году, уже включает эти данные, но его поддерживают менее 30% провайдеров.</p><h2>Где код тратит энергию впустую</h2><p>Некоторые части систем особенно вредны для экологии. Главные «пожиратели» ресурсов:</p><ul><li>Неоптимизированные алгоритмы. Сортировка пузырьком (O(n²)) на большом массиве данных может потреблять в 100 раз больше энергии, чем быстрая сортировка (O(n log n)).</li><li>Микросервисный хаос. Архитектура из сотен микросервисов увеличивает нагрузку на сеть. Каждый вызов API между сервисами — это дополнительные 0,5–1 Вт⋅ч.</li><li>Облачные провайдеры. Не все одинаково зеленые. AWS и Google используют 60–70% ВИЭ (возобновляемых источников энергии), но в Азии и Африке их дата-центры часто работают на угле.</li></ul><h3>Как измерить углеродный след</h3><p>В 2025 году появились инструменты, которые помогают оценить влияние кода:</p><ul><li>Cloud Carbon Footprint — анализирует выбросы AWS, GCP и Azure.</li><li>Scaphandre — мониторит энергопотребление серверов в реальном времени.</li><li>Greenframe.io — симулирует нагрузку на веб-приложение и считает CO₂.</li></ul><p>Климатические инициативы в IT больше не просто красивые слова в корпоративных отчетах. В 2025 году за неэффективный код можно получить не только порицание сообщества, но и вполне реальный штраф.</p><p>Европейский союз уже ввел санкции против пяти крупных SaaS-компаний за превышение углеродных квот, а Amazon Web Services выплатила 2,7 млн евро штрафа за неоптимизированные алгоритмы в своих сервисах.</p><h2>Как изменились подходы к разработке</h2><p>Эти тренды нацелены на долгосрочное действие и в перспективе должны полностью изменить текущую концепцию в разработке.</p><h3>Экологичный DevOps — новая реальность</h3><p>Современные системы автоматического масштабирования стали умнее. Kubernetes Horizontal Pod Autoscaler теперь учитывает не только нагрузку на CPU, но и текущий углеродный след дата-центра. Если в регионе пиковое потребление энергии и работают угольные электростанции, система сознательно ограничивает масштабирование.</p><p><a href="https://cloud.google.com/blog">Технология, разработанная Google</a> в партнерстве с WattTime, уже снижает выбросы CO₂ на 27-33% по сравнению с традиционным подходом.</p><p>CI/CD-цепочки тоже стали «зеленее». Вместо запуска полного набора тестов при каждом коммите, современные системы определяют, какие именно модули затронуты изменениями.</p><p><a href="https://carbonrunner.io/features/github-action-runners">GitHub Actions представил Carbon-Aware Runner</a>, который планирует выполнение задач на время максимальной доступности возобновляемой энергии в регионе. По данным Microsoft, это сокращает углеродный след тестирования на 40%.</p><h3>Языки программирования: война за эффективность</h3><p>Rust продолжает набирать популярность не только из-за безопасности, но и благодаря энергоэффективности. Тесты Benchmarks Game показывают, что один и тот же алгоритм обработки данных на Rust потребляет на 38-42% меньше энергии, чем на Python. В 2025 году Rust вошел в топ-5 языков для enterprise-решений, вытеснив Java в 17% крупных проектов.</p><p>Но настоящим открытием стал <a href="https://ziglang.org/documentation/master/">Zig </a>— язык, который сочетает производительность C с простотой синтаксиса. Его компилятор потребляет в 3 раза меньше ресурсов, чем LLVM-бэкенд Rust, что делает его идеальным выбором для встраиваемых систем.</p><h3>ИИ на грани: когда меньше значит лучше</h3><p>TinyML-революция набирает обороты. Современные нейросети для микроконтроллеров занимают менее 256 КБ памяти, но справляются с задачами, которые раньше требовали облачных вычислений.</p><p>Например, новые датчики Nest анализируют звук прямо на устройстве, определяя не только дым, но и тип возгорания. Это экономит до 150 МБ трафика в месяц на одно устройство.</p><p>На фронте больших языковых моделей тоже произошли изменения. Meta* выпустила LLaMA-3 Nano — модель с 500 млн параметров, которая работает на смартфоне и по качеству ответов не уступает GPT-3.5. Ее углеродный след при обучении в 1200 раз меньше, чем у GPT-4.</p><p><i>(*Компания запрещена в РФ)</i></p><h3>Новые правила игры: регуляторы и бизнес</h3><p>С января 2025 года в Евросоюзе действует Углеродный налог на цифровые продукты (Digital Carbon Border Tax). Теперь любое ПО, продающееся в ЕС, должно иметь сертификат углеродной эффективности.</p><p>Для крупных enterprise-решений максимально допустимый углеродный след составляет 500 г CO₂ на 1000 пользователей в месяц. Нарушители платят 7% от оборота продукта в регионе.</p><p>Венчурные фонды радикально изменили подход к инвестициям. <a href="https://www.pwc.com/gx/en/services/sustainability/publications.html">Согласно отчету PwC</a>, 43% фондов требуют ESG-отчетность перед заключением сделки, а 28% вообще не рассматривают стартапы без «зеленой» стратегии. В Кремниевой долине появился первый акселератор Carbon Neutral Startups, который дает бонусы в $50 000 проектам с нулевым углеродным следом.</p><p>Корпорации тоже не остались в стороне. <a href="https://www.microsoft.com/sustainability">Microsoft ввела внутренний углеродный налог</a> — теперь каждое подразделение платит $100 за каждую тонну CO₂, связанную с его продуктами. Эти деньги идут на развитие возобновляемой энергетики.</p><p>Но самое интересное происходит на рынке труда. Разработчики с навыками «зеленого» программирования получают на 15-20% больше предложений. Появилась появилась новая категория навыков — «Устойчивая разработка ПО», а спрос на таких специалистов вырос на 300% за последний год.</p><h2>Как писать «зеленый» код</h2><p>Каждая лишняя операция в коде — это не только миллисекунды процессорного времени, но и реальные граммы CO₂. В 2025 году энергоэффективность кода перестала быть теоретической концепцией и превратилась в конкретный навык, который влияет на карьеру разработчика. Рассмотрим три ключевых направления оптимизации.</p><h3>Оптимизация запросов к базе данных</h3><p>Типичный пример — использование SELECT * вместо явного перечисления полей. Когда приложение запрашивает все поля таблицы users (включая редко используемые avatar_blob или metadata_json), сервер БД тратит дополнительные ресурсы на чтение и передачу этих данных. В крупных системах с миллионами запросов в день это приводит к значительному перерасходу вычислительных ресурсов.</p><p>Современные ORM типа Prisma и Drizzle добавили автоматическую оптимизацию запросов. Теперь при использовании select() они анализируют, какие поля действительно нужны на клиенте, и генерируют оптимальный SQL. В тестах это снижает нагрузку на БД на 12-18%.</p><h3>Работа с циклами и алгоритмами</h3><p>Классическая ошибка — продолжать перебор массива после нахождения нужного элемента. В 2025 году статический анализатор кода в WebStorm и VS Code автоматически предупреждает о таких ситуациях. Особенно критично это для мобильных приложений: лишние итерации цикла на слабых устройствах увеличивают энергопотребление на 5-7%.</p><p>Новые версии JavaScript и TypeScript ввели оптимизированные методы для массивов. Например, array.findLast() работает в 1,5 раза эффективнее ручной реализации с циклом. Для сложных алгоритмов появились «зеленые» библиотеки вроде EcoCollections для Java, которые минимизируют энергопотребление при работе с структурами данных.</p><h3>Сжатие и передача данных</h3><p>Формат Brotli стал новым стандартом для API: он обеспечивает лучшее сжатие, чем gzip, особенно для JSON-ответов. Компания Cloudflare провела эксперимент: после перехода на новую версию Brotli нагрузка на их серверы снизилась на 18%, что эквивалентно годовому потреблению энергии 2000 домохозяйств.</p><p>Но сжатие — не панацея. Грамотное проектирование API может дать больший эффект. GraphQL-подход, где клиент запрашивает только нужные данные, в среднем почти вдвое уменьшает объем передаваемой информации по сравнению с REST. А технология Server-Sent Events (SSE) для реального времени потребляет в 3 раза меньше ресурсов, чем WebSockets, когда не нужна двусторонняя связь.</p><p>Современные фреймворки начали учитывать энергоэффективность. Next.js 15 <a href="https://nextjs.org/blog">представил «зеленый» режим компиляции</a>, который оптимизирует сборку под минимальное энергопотребление. В тестах это дало 8% экономии на процессоре при работе приложения. А Deno 2.0 автоматически кэширует зависимости на уровне ОС, сокращая число повторных загрузок.</p><p>Эти изменения кажутся мелкими, но в масштабах индустрии они имеют огромное значение. Если бы все репозитории на платформе применили базовые оптимизации, глобальное энергопотребление дата-центров сократилось бы на несколько процентов. Для отрасли, которая потребляет 700 ТВт⋅ч в год, это десятки миллионов долларов и тысячи тонн CO₂.</p><h2>Выбор технологий</h2><p>В 2025 году выбор стека технологий влияет не только на производительность, но и на экологичность проекта. Разберем ключевые аспекты, которые помогут снизить углеродный след вашего приложения.</p><h3>Языки программирования: баланс между скоростью и эффективностью</h3><p>Rust и Go продолжают доминировать в высоконагруженных системах. Тесты показывают, что веб-сервер на Rust потребляет на 35-40% меньше энергии при одинаковой нагрузке по сравнению с Node.js. Особенно заметна разница в облачных средах, где каждый ватт на счету.</p><p>C++ остается выбором для задач, где важна предсказуемая производительность. Новый стандарт C++26 добавил энергоэффективные режимы работы алгоритмов STL, что особенно важно для встраиваемых систем.</p><p>Python по-прежнему хорош для прототипирования, но в продакшене его лучше заменять на компилируемые языки. PyPy 8.0 сократил энергопотребление интерпретатора на 25%, но даже с этими улучшениями Python проигрывает Rust в 3-4 раза по эффективности.</p><h3>Базы данных: от малого к большему</h3><p>SQLite — идеальный выбор для небольших проектов и edge-устройств. Его новая версия 3.45 добавила режим «энергосбережения», который снижает потребление на 15% при фоновых операциях.</p><p><a href="https://www.postgresql.org/docs/17/release-17.html">PostgreSQL 17</a> сделал большой шаг в энергоэффективности. Функция автоматического партиционирования теперь учитывает не только производительность, но и энергопотребление. В тестах это дало 20% экономии на крупных аналитических запросах.</p><p>Для высоконагруженных систем появилась альтернатива — ScyllaDB 5.0. Эта Cassandra-совместимая СУБД потребляет втрое раза меньше энергии при аналогичной нагрузке, благодаря полному переписыванию на Rust.</p><h2>Кейсы: что работает, а что нет</h2><p>Российские компании тоже внедряют экологичные IT-решения. МТС разработала мобильное приложение, где пользователи получают бонусы за раздельный сбор мусора — их можно обменять на подписки или скидки. За первый год проект привлек 500 тысяч участников и сократил количество непереработанных отходов в регионах присутствия.</p><p>НИУ ВШЭ, совместно с Росприроднадзором, автоматизировал сбор экологической отчетности с помощью ИИ. Нейросеть анализирует данные с датчиков и заполняет формы вместо специалистов. Это сократило время обработки с 100 до 10 часов в месяц и уменьшило количество ошибок.</p><p>Некоторые архитектурные решения приносят больше вреда, чем пользы. Один московский стартап без необходимости разбил монолитную систему на 50 микросервисов — в результате затраты на инфраструктуру выросли в 3 раза, а углеродный след увеличился на 180%.</p><p>Проблемы возникают и на уровне зависимостей. История с left-pad повторилась в 2024 году, когда один npm-пакет потянул за собой 80 МБ ненужных библиотек. Теперь крупные компании проверяют каждую зависимость через Bundlephobia и устанавливают лимит на размер node_modules.</p><h2>Что нас ждет</h2><p>В 2025 году отрасль стоит на пороге радикальных изменений, которые перевернут наши представления о «зеленом» программировании.</p><p>Супероблака — следующий этап эволюции распределенных вычислений. В отличие от традиционных облачных провайдеров, эти системы автоматически переносят нагрузку между дата-центрами в зависимости от доступности возобновляемой энергии.</p><p><a href="https://cloud.google.com/sustainability">Google уже тестирует эту технологию</a> в Северной Европе: когда в Норвегии дует сильный ветер и ветряные электростанции работают на пике, система переносит вычисления именно туда. По предварительным оценкам, это снижает углеродный след на 18-22% по сравнению со статичным распределением.</p><p>Но настоящий прорыв ожидается в сегменте квантовых вычислений. Хотя современные квантовые компьютеры потребляют колоссальное количество энергии (система IBM Quantum System One требует около 25 кВт⋅ч для работы одного кубита), их потенциал для оптимизации классических алгоритмов огромен.</p><p>В 2024 году исследователи из ЦЕРНа <a href="https://www.nature.com/articles/s41534-024-00859-0">предложили квантовый алгоритм</a>, который сокращает время сложных расчетов в 1000 раз при той же точности. Когда такие решения станут массовыми (прогноз — 2028-2030 годы), энергопотребление дата-центров может сократиться на 30-40%.</p><p>Государственное регулирование становится строже. В 2025 году в силу вступает EU Digital Product Passport — требование указывать углеродный след для всего ПО, продающегося в Европе.</p><p>Компании, которые не смогут предоставить эти данные, столкнутся с дополнительными налогами до 7% от оборота. В ответ на это крупнейшие IT-корпорации создали Carbon Neutral Software Alliance — консорциум по разработке единых стандартов измерения.</p><p>Не отстает и аппаратная часть. Производители чипов переходят на новые техпроцессы: TSMC анонсировала 2-нм процесс, который на 30% энергоэффективнее предыдущего поколения. А стартапы вроде британской ZeroPoint Technologies разрабатывают память с нулевым энергопотреблением в режиме ожидания — технология может сократить энергопотребление серверов на 15%.</p><p><b>Но главный тренд </b>— децентрализация вычислений. Edge-устройства (от смартфонов до промышленных датчиков) становятся мощнее и берут на себя часть нагрузки. Например, новый алгоритм Apple для обработки фото на iPhone 16 выполняет 90% операций локально, а не в облаке. По оценкам компании, это экономит сотни тысяч тонн CO₂ в год только для пользователей в США.</p><p>Однако остаются и <b>проблемы</b>. Бум генеративного ИИ привел к взрывному росту энергопотребления: одна тренировка модели Gemini Ultra потребляет столько же энергии, сколько небольшой город за месяц. OpenAI и Anthropic уже работают над более эффективными архитектурами, но прорыва пока не случилось.</p><p>В ближайшие 3-5 лет нас ждет:</p><ul><li>массовый переход на углеродно-нейтральные дата-центры — к 2027 году их доля превысит 60%;</li><li>внедрение AI-оптимизаторов кода, которые автоматически сокращают энергопотребление;</li><li>появление «зеленых» рейтингов для приложений — аналог энергоэффективности для бытовой техники.</li></ul><p>Компании, внедрившие принципы устойчивого развития в IT, уже в 2025 году получают на больше инвестиций и быстрее проходят аудит регуляторов. Экологичность перестала быть затратой — теперь это конкурентное преимущество.</p><p>Технологии будущего уже здесь. Вопрос в том, насколько быстро мы сможем их адаптировать. Как сказал Дженсен Хуанг из NVIDIA на последней конференции GTC:</p><blockquote>«Следующее десятилетие определит, станет ли IT частью климатического решения или останется проблемой. Выбор за нами».</blockquote><h2>Итоги</h2><p>Экологичность в IT — не благотворительность и не актуальная повестка, а реальная экономия. Плюс работа на перспективу. Оптимизация кода снижает счета за облака и повышает производительность.</p><p>С чего начать? Начните с малого:</p><ol><li>Запустите аудит через Cloud Carbon Footprint.</li><li>Уберите «мусор» из зависимостей.</li><li>Выберите хостинг с ВИЭ.</li></ol><p>Как говорил Дональд Кнут, автор книги «Искусство программирования»:</p><blockquote>«Преждевременная оптимизация — корень всех зол. Но и запоздалая — тоже».</blockquote><p>В 2025 году это актуально как никогда.</p>]]></content:encoded>
    </item>
    <item>
      <title>«Код != не программа»: почему опытные разработчики важнее, чем когда-либо</title>
      <link>https://tproger.ru/news/-kod----ne-programma---pochemu-opytnye-razrabotchiki-vazhnee--chem-kogda-libo</link>
      <comments>https://tproger.ru/news/-kod----ne-programma---pochemu-opytnye-razrabotchiki-vazhnee--chem-kogda-libo?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/-kod----ne-programma---pochemu-opytnye-razrabotchiki-vazhnee--chem-kogda-libo</guid>
      <description><![CDATA[<p>Почему код — это не программа, а лишь её оболочка? Опытный разработчик разобрал, зачем бизнесу нужны опытные разработчики и как ИИ подрывает архитектурную целостность проектов</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/-kod----ne-programma---pochemu-opytnye-razrabotchiki-vazhnee--chem-kogda-libo">«Код != не программа»: почему опытные разработчики важнее, чем когда-либо</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 26 Jun 2025 18:56:10 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 1985 году ученый Петер Наур написал: программа — это не код, а теория.</p><p>Опытный разработчик Кристиан Экрем <a href="https://cekrem.github.io/posts/programming-as-theory-building-naur/">отметил</a>, что сегодня, когда начинающие разработчики полагаются на ИИ, его мысль Наура стала особенно актуальной. Код без понимания — мертв. Он работает, но не живет.</p><h2>Код ≠ программа</h2><p>По словам Экрема, программа — это не набор строк. Это ментальная модель: зачем все устроено именно так, как устроено.</p><p>Архитектура, допущения, компромиссы — все это нельзя просто вычитать из кода, это нужно <b>понимать</b>. И если автор той или иной реализации внутри проекта уходит, вместе с ним уходит и теория. И хоть сам код остается, но лишь скорее как «пустая оболочка».</p><h2>Как мы теряем смысл</h2><p>Экрем поделился мнением, что мы сегодня пришли к кризису теории. Причины очевидны:</p><ul><li><b>ИИ-помощники</b> генерируют код без контекста.</li><li><b>Молодые разработчики</b> используют его рефлекторно, без анализа.</li><li><b>Бизнес подталкивает</b> к скорости, а не к качеству.</li></ul><p>Код растет, архитектура рушится. Никто не знает, как и почему что-то работает. И что будет, если это изменить.</p><h2>Проблема не нова, но масштаб — новый</h2><p>Раньше джуниоры гуглили, читали форумы, пробовали руками. Сейчас ИИ дает готовое решение — за секунду.</p><p>Человек не понимает, но внедряет. А значит, код не связан с системой, не учитывает предметную область и часто нарушает архитектуру.</p><h2>Зачем нужны синьоры</h2><p>В свою очередь старшие разработчики не просто пишут код. Они:</p><ul><li><b>Удерживают теорию</b> — понимают, как связаны бизнес и архитектура.</li><li><b>Фильтруют ИИ</b> — отличают полезное от вредного.</li><li><b>Учат</b> — объясняют, что важно понимать, а не делать лишь «чтобы работало».</li><li><b>Сохраняют согласованность</b> — следят, чтобы код отражал суть системы.</li></ul><p>Такие разработчики не дают системе развалиться под грузом случайных решений.</p><h2>Как избежать надвигающейся проблемы</h2><p>Автор оригинальной статьи подытожил, что если бизнес хочет не просто «работающий» продукт, а <b>поддерживаемый</b>, нужно:</p><ul><li>Документировать не только <b>что</b>, но и <b>зачем</b>.</li><li>Проводить ревью с упором на <b>идейную целостность</b>.</li><li><b>Передавать</b> <b>знания</b> через наставничество.</li><li>Не допускать, чтобы <b>ИИ заменял мышление</b>.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Минцифры запускает платформу для подтверждения ИТ-навыков: пройти тесты можно бесплатно и без диплома</title>
      <link>https://tproger.ru/news/mincifry-zapuskaet-platformu-dlya-podtverzhdeniya-it-navykov--projti-testy-mozhno-besplatno-i-bez-diploma</link>
      <comments>https://tproger.ru/news/mincifry-zapuskaet-platformu-dlya-podtverzhdeniya-it-navykov--projti-testy-mozhno-besplatno-i-bez-diploma?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/mincifry-zapuskaet-platformu-dlya-podtverzhdeniya-it-navykov--projti-testy-mozhno-besplatno-i-bez-diploma</guid>
      <description><![CDATA[<p>Минцифры запустило платформу для бесплатного подтверждения ИТ-навыков. Доступны тесты по 5 языкам программирования и 12 теоретическим темам. Успешные участники получают сертификат, видимый в резюме и на Госуслугах.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/mincifry-zapuskaet-platformu-dlya-podtverzhdeniya-it-navykov--projti-testy-mozhno-besplatno-i-bez-diploma">Минцифры запускает платформу для подтверждения ИТ-навыков: пройти тесты можно бесплатно и без диплома</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Новости]]></category>
      <category><![CDATA[Карьера]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 02 Jun 2025 14:03:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Минцифры России <a href="https://t.me/mintsifry/2536">объявило</a> о запуске платформы, где любой желающий — вне зависимости от уровня образования и текущей должности — может бесплатно подтвердить свои ИТ-компетенции. Новый сервис уже доступен на <a href="https://www.gosuslugi.ru/itskills">Госуслугах</a>, а также через <a href="https://career.hh.ru/assessment">hh.ru</a>. Речь идёт не просто о тестах ради галочки: по результатам успешного прохождения участник получает официальный сертификат Минцифры, который можно будет использовать при трудоустройстве.</p><p><b>Больше новостей в нашем тг-канале </b><a href="https://t.me/your_tech">Представляешь</a></p><h2>Что известно на данный момент</h2><p>Система сертификации предназначена как для действующих специалистов, так и для тех, кто только осваивает ИТ. По мнению ведомства, это станет дополнительным инструментом оценки реальных навыков разработчиков, тестировщиков, аналитиков и других специалистов. Работодатели смогут точнее понимать, с кем имеют дело, а соискатели — получать заметное преимущество, особенно в условиях растущей конкуренции на рынке труда.</p><p>На старте платформа предлагает тесты по следующим направлениям:</p><ul><li>5 языков программирования: Python, Java, SQL, C#, PHP;</li><li>12 теоретических и прикладных тем: HTML, ООП, PostgreSQL, функциональное и регрессионное тестирование, Git, API, CSS, Docker, алгоритмы и структуры данных, JavaScript и Linux.</li></ul><p>В течение 2025 года планируется добавить ещё два языка программирования — C++ и Go — а также два новых направления: «Математическая статистика» и «Машинное обучение». Всего в этом году платформа охватит 21 ИТ-компетенцию.</p><p>Для прохождения тестирования необходимо зайти на страницу «Национальная система подтверждения ИТ-компетенций» на Госуслугах, выбрать интересующий навык и перейти на платформу. Также пройти оценку можно напрямую на сайте hh.ru — именно эта платформа выступает техническим оператором проекта.</p><p>Сертификат будет храниться в личном кабинете на Госуслугах в разделе «Образование» и будет действовать в течение одного года. Важно отметить, что платформа фиксирует только успешные попытки. Если пройти тест с первого раза не удалось, повторная попытка станет доступна через месяц. В резюме на hh.ru отразится лишь удачная сдача в виде значка-подтверждения.</p><p>Минцифры подчёркивает, что это не экзамен в классическом понимании, а добровольная и прозрачная система оценки, ориентированная на практические знания. Она призвана повысить прозрачность кадрового рынка, облегчить работу HR-специалистов и дать соискателям независимое подтверждение своих компетенций.</p>]]></content:encoded>
    </item>
    <item>
      <title>Делаем безопасные приложения: зачем нужен DevSecOps</title>
      <link>https://tproger.ru/articles/delaem-bezopasnye-prilozheniya--zachem-nuzhen-devsecops</link>
      <comments>https://tproger.ru/articles/delaem-bezopasnye-prilozheniya--zachem-nuzhen-devsecops?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/delaem-bezopasnye-prilozheniya--zachem-nuzhen-devsecops</guid>
      <description><![CDATA[<p>Василий Степаненко, генеральный директор облачного провайдера Nubes, рассказывает, как подход DevSecOps помогает строить безопасные приложения с самого начала.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/delaem-bezopasnye-prilozheniya--zachem-nuzhen-devsecops">Делаем безопасные приложения: зачем нужен DevSecOps</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Роскомнадзор]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[DevSecOps]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 22 May 2025 14:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сейчас информационная безопасность — это не просто тренд, а необходимость, учитывая огромный масштаб киберугроз. Программное обеспечение обязано становиться защищённым с самого момента его создания и на всех дальнейших этапах вплоть до непосредственной эксплуатации. О том, как сделать разработку ПО безопасной с самого старта с помощью методики DevSecOps, рассказывает генеральный директор облачного провайдера Nubes Василий Степаненко.</p><h2>Что такое DevSecOps</h2><p>DevSecOps образовано от слов development (разработка), security (безопасность) и operations (эксплуатация или операции). Это подход к разработке приложений, при котором безопасность учитывается на каждом этапе CI/CD, чтобы минимизировать стоимость и повысить скорость исправления ошибок. К нему относятся не только инструменты, по типу различных сканеров библиотек и кода, но и определённые договоренности между разработчиками, DevOpsами и безопасниками.</p><p>Разработка приложений сегодня похожа на приготовление салата: берутся овощи, мясо, масла и приправы, все смешивается — и получается блюдо. Если хоть один ингредиент окажется плохим, то весь салат будет испорчен. Разработчики не всё пишут сами: в DevOps из общедоступных репозиториев могут браться готовые библиотеки: их соединяют, и в результате получается приложение (тот самый салат).</p><p>Если хоть одна из библиотек окажется плохой или дописанный разработчиком код для объединения библиотек будет некачественным, то весь салат будет непригодным для употребления. Стоимость исправления ошибки велика, ведь нужно найти испорченный ингредиент и заменить его. Однако с ПО все еще сложнее: библиотеки постоянно обновляются, а потому не понятно, в какой момент весь салат может стать непригодным — нужно постоянно следить за всеми ингредиентами блюда.</p><h2>Лицо врага</h2><p>Не все библиотеки с открытым исходным кодом, выложенные в публичные репозитории, можно считать безопасными. Их авторы часто остаются неизвестными — это могут быть как энтузиасты, так и злоумышленники, включая хакеров или представителей недружественных государств. В итоге даже при использовании сложных систем защиты — межсетевых экранов, VPN, антивирусов, DLP и PAM — компания может оказаться уязвимой. Уязвимость может прийти изнутри — через стороннюю библиотеку, которая станет «троянским конём» и даст злоумышленникам доступ к данным, производственным процессам и критичной инфраструктуре.</p><p>Процент небезопасных приложений в исследованиях российских компаний, занимающихся защитой приложений, в разные годы отличается и зависит от отрасли. Так, про финансовую отрасль <a href="https://plusworld.ru/daily/bezopasnost/positive-technologies-kriticheski-opasnie-uyazvimosti-vstrechautsya-v-90-sistem-dbo/">Positive Technologies в 2015 говорили о 90%</a>, в 2016 г. — о 71%, а в 2017 – о 56%. Если замеченный Positive Technologies тренд защищенности приложений финансового сектора сохранился бы в тех же пропорциях, то сегодня процент был бы ещё меньше. Однако <a href="https://mobile-stingray.ru/research/security-analysis">исследование «Стингрей Технолоджис»</a> 2024 г. говорит о 56% опасных приложений в финтехе.</p><p><a href="https://www.cnews.ru/news/line/2025-01-31_67_finansovyh_kompanij_schitayut">Ассоциация ФинТех проводила исследование</a>, и в 2025 году 82% компаний назвали разработку на базе открытого исходного кода оптимальной с точки зрения сроков и удобства внедрения. При этом использование таких библиотек несёт в себе риски на протяжении всего жизненного цикла продукта, и риски для данных, которые используются в приложениях.</p><p>У крупных финтех-компаний DevSecOps уже в работе — они вкладываются в безопасную разработку и задают статистику. Но для большинства игроков из второй и третьей лиги всё только начинается: подход к безопасности — пока больше на уровне обсуждений, чем практики.</p><h2>Какие есть риски для данных</h2><p>Основные риски для данных обычно связаны с нарушением их конфиденциальности. В процессе разработки важно проводить тесты, а для этого нужны данные, причём не сильно отличающиеся от настоящих. Также важен их объём, иначе не получится провести нормальные нагрузочные тесты. Выгрузка реальных данных — самый заманчивый вариант. Но если для стендов Dev и Test используются облачные среды или в процессах разработки задействованы подрядчики, то некоторые организации могут на такое не решиться из-за требований к ИБ. И это логично, поскольку в Prod есть комплексный подход к защите, а на стендах Dev и Test меры защиты могут быть минимизированы.</p><p>Один из способов снизить риски — использовать системы маскирования: они помогают обезличить персональные и финансовые данные (например, номера карт и счетов). Сейчас действует приказ Роскомнадзора №996 от 2013 г., но, необходимо отметить,  уже опубликован <a href="https://regulation.gov.ru/Regulation/Npa/PublicView?npaID=155867#">проект приказа Роскомнадзора</a> «Об утверждении требований к обезличиванию персональных данных и методов обезличивания персональных данных», который его заменит.</p><p>Контейнеры стали стандартом для запуска приложений, но вместе с удобством они приносят и риски — особенно в защите данных. Да, контейнеризация улучшает доступность и масштабируемость, но не решает проблем с конфиденциальностью и целостностью «из коробки». На российском рынке уже существуют отечественные платформы контейнеризации, например, Штурвал, DeckHouse, в которых сразу учтены механизмы безопасности либо есть накладные средства для kubernetes от Luntry, PT, Kaspersky и т.д.</p><h2>Как внедрять DevSecOps</h2><p>DevSecOps — подход, при котором безопасность вшита в код на всех этапах. Уязвимости ищут не в самом конце, а прямо по ходу разработки: в pull request'ах, CI/CD и при работе с зависимостями. Такой подход требует, чтобы разработчики, DevOps и специалисты по безопасности работали как одна команда, а не передавали задачи «по цепочке» в последний момент.</p><p>При этом каждой компании может требоваться сугубо индивидуальный набор инструментов — всё зависит от зрелости команды и доступных ресурсов (особенно человеческих). Важно договориться о недопустимых событиях, об уровне риск-аппетита с бизнесом, разработать модель угроз. Некоторым клиентам нужно наличие собственного доверенного репозитория, а для других достаточно GitHub, GitLab и т.д.</p><p>После аудита начинается внедрение. На этом этапе команда определяет инструменты, выстраивает процесс проверки кода и решает, как именно безопасность будет встроена в разработку.</p><p>Cloud Native — это подход к разработке приложений, изначально ориентированных на работу в облачной среде и интеграцию с облачными сервисами. Сегодня большинство новых решений проектируются именно так. Для безопасной работы таких приложений важно не только адаптировать архитектуру под облако, но и выстраивать взаимодействие с провайдером: от заключения договора до работы с API. Облачные провайдеры часто предлагают инструменты, которые помогают встроить безопасность в процесс разработки. У многих есть готовые сервисы Kubernetes, в том числе с учётом требований информационной безопасности. Также доступны решения уровня WAF и инструменты анализа безопасности кода (например, SAST, DAST, SCA) — иногда по подписке, как в случае с некоторыми российскими платформами.</p><p>Начать можно с внедрения бесплатных решений — например, SAST, SCA и DAST, которые уже можно интегрировать в текущий DevOps-стек. Когда команда понимает ценность и пользу этих проверок, можно переходить к платным продуктам с расширенными возможностями.</p><p>Затем практики DevSecOps внедряются в небольших проектах — так можно оценить эффективность их работы, заметить возможные недостатки, скорректировать решения, чтобы на выходе получить отличный рабочий вариант для применения в крупных проектах с потенциальным увеличением масштабов в будущем.</p><p>Однако не стоит думать, что это финальная точка. DevSecOps — постоянный процесс: мониторинги, улучшения, обновления стандартов ИБ и поиски идеальных практик.</p><h2>Цена вопроса</h2><p>Вернемся к примеру с салатом. Все любят разное: кто-то — «цезарь», другой – «селёдку под шубой». Разные языки программирования, риск-аппетиты в командах в отношении принятия требований безопасности, цели внедрения DevSecOps (кому-то нужно в итоге получить сертификат, а кому-то страшно за конечный продукт и важно обеспечить реальную максимальную безопасность) — всё это не позволяет создать коробочный продукт с фиксированной ценой, хотя на рынке есть те, кто предлагает поставить 2-3 сканера и удовлетвориться этим, назвав DevSecOps.</p><p>При внедрении DevSecOps стоит учитывать затраты на разделение сред Dev, Test и Prod — это не входит в концепцию по западным лекалам. Однако от руководства компаний-клиентов нам часто поступают запросы на усиление безопасности разработки, поскольку разработчик перепутал стенд, после чего важнейшие системы компании пострадали. Вынести в облако Dev и Test и оставить у себя Prod кажется хорошей идеей (или наоборот). Для некоторых она способна полностью решить вышеупомянутую проблему.</p><p>Однако тем, кому важно углубиться именно в DevSecOps, следует внедрить процесс анализа библиотек с открытым исходным кодом. Мы не знаем разработчиков этих библиотек, в сообществах могут поменяться цели и их лидеры. Они, в свою очередь, вполне могут оказаться хакерами, желающими распространить через эти библиотеки свои инструменты.</p><h3>Сканеры библиотек могут быть бесплатными и платными</h3><p><b>Статический анализ кода (SAST)</b> — может быть реализован через бесплатные инструментов, таких как SonarQube, semgrep, gitleaks/trufflehog, но есть и платные – PVS-Studio, Svace, Solar appScreener и т.д.</p><p><b>Динамический анализ кода (DAST)</b> — можно осуществить с помощью бесплатных инструментов OWASP ZAP, Nuclei, NMAP, Burp Suite или платных, например, PT BlackBox.</p><p>И другие элементы DevSecOps (анализ мобильных приложений, API и т.д.) можно реализовать с использованием платных или бесплатных инструментов.</p><p>Таким образом, если не продавать какой-то сканер под видом DevSecOps, то сложно сказать цену для клиента, всё зависит от пожеланий. Если все же очень нужно грубо оценить DevSecOps, то его внедрение обходится примерно в одну треть от стоимости процессов DevOps, но это при использовании бесплатных инструментов. Платные автоматически увеличивают стоимость.</p><p>В процессы Ops можно также включить элемент безопасности WAF (Web Application Firewall). Доступны как бесплатные варианты (например, ModSecurity), так и платные (PTAF, Гарда WAF, Вебмониторэкс и т.д.).</p><p>Начинать стоит с бесплатных инструментов, поэтапно внедряя их в CI/СD, взаимодействуя с командой DevOps. По сути, DevSecOps – это консалтинг с возможностью применения платных инструментов, если к ним готова команда DevOps. И мы абсолютно уверены, что ради его внедрения точно не стоит жертвовать командой разработки. Кстати, для трактовки отчётов сканеров зачастую используются те же консалтеры, что внедряли DevSecOps.</p><p>Нельзя забывать и об обучении команды практикам безопасной разработки. Тут следует упомянуть, что сканеры типа CheckMarx наглядно демонстрируют эксплуатацию уязвимостей. Часто вендоры сводят DevSecOps к сканерам, консалтеры — к процессам, а про людей и их обучение — забывают.</p><p>Просто прочитать пару статей про DevSecOps — недостаточно. Команда должна <b>понимать реальные уязвимости</b>: как они появляются, чем опасны и как их избежать. Сейчас в России появляются обучающие платформы, которые показывают это на практике — с примерами уязвимого кода, проблемных библиотек и типовых ошибок. Но останавливать разработку ради курсов на две недели — нереально. Поэтому лучше встроить обучение в рабочий ритм: хотя бы один час в неделю на всю команду. Это немного, но в долгосрочной перспективе даёт устойчивую культуру безопасности. Стоимость зависит от числа участников и выбранных курсов — но в любом случае это обойдется дешевле, чем инцидент в проде.</p><h2>Требования к безопасной разработке ПО</h2><p>Уже сейчас требования по безопасной разработке (а если есть DevOps, то по сути это требования к внедрению DevSecOps) появились в:</p><ul><li>ГОСТ Р 57580.1-2017: СМЭ.6, СМЭ.7, ЖЦ.4, ЖЦ.5, ЖЦ.6, ЖЦ.7. ЖЦ.24;</li><li>PCI DSS 4.0.1: 6.2, 6.3, 6.5;</li><li>ГОСТ Р ИСО/МЭК 15408-3-2013: ALC_CMC, ALC_CMS, ALC_DEL, ALC_DVS, ALC_FLR, ALC_LCD, ALC_TAT.</li></ul><p>Если речь идет о <b>средствах защиты информации (СЗИ)</b>, которые нужно будет сертифицировать по требованиям ФСТЭК или ФСБ, важно помнить: <b>инструменты, которые вы используете для сканирования кода, тоже должны быть сертифицированы.</b> Иначе при испытаниях возникнут сложности — лаборатории не примут результаты без официальной документации.</p><p>Если же приложение не попадает под категорию СЗИ, жёстких требований к инструментам нет. Главное — понимать, от каких угроз вы защищаетесь, и подбирать инструменты под реальные задачи: будь то уязвимости в зависимостях, ошибки в логике или неправильные настройки.</p><h2>Куда будет развиваться DevSecOps</h2><p>Очевидно, что DevSecOps ждет намного более массовое внедрение и развитие — устранить проблемы на этапе разработки дешевле, чем позже латать пробоины в ИБ.</p><p>Скорость появления эксплоитов растёт — и это прямая угроза. Если раньше у команд была пара месяцев, чтобы закрыть уязвимость до начала атак, то теперь — всего несколько дней. <a href="https://www.opennet.ru/opennews/art.shtml?num=62065">Исследование Google</a> показало: в 2018–2019 годах эксплойты появлялись в среднем через 63 дня после патча, в 2020 — через 44, в 2021 и 2022 — уже через 32, а в 2023 году — всего через 5 дней. А с развитием ИИ этот срок может сократиться ещё сильнее.</p><p>В России сильные программисты, но собственные новации в сфере ИБ традиционно появляются позже, чем на Западе — чаще в виде адаптаций или копий существующих решений. Однако импортозамещение меняет ландшафт: появляются десятки отечественных продуктов, которых просто нет в зарубежных базах уязвимостей. А значит — и в популярных сканерах кода они тоже не учтены. Это открывает окно возможностей: российские команды смогут развивать собственные инструменты безопасности — от сканеров и доверенных репозиториев до платформ для DevSecOps. Плюс эти принципы начнут постепенно проникать в программы обучения в вузах.</p><p>Уже существуют реестр отечественного ПО (ведется под патронажем Минцифры), реестр сертифицированных средств защиты ФСТЭК России, реестр ФСБ России, реестр отечественных ПАК (ведётся Минпромторгом). Чтобы попасть туда в ближайшие годы, разработчики должны будут не просто заявлять о безопасности, а доказывать на практике — в процессах, документации и архитектуре. Это станет драйвером роста: инструменты для безопасной разработки будут развиваться, а вместе с ними — и культура DevSecOps.</p>]]></content:encoded>
    </item>
    <item>
      <title>Mystical — новый язык программирования, вдохновленный магическими символами и кругами</title>
      <link>https://tproger.ru/news/mystical---novyj-yazyk-programmirovaniya--vdohnovlennyj-magicheskimi-simvolami-i-krugami</link>
      <comments>https://tproger.ru/news/mystical---novyj-yazyk-programmirovaniya--vdohnovlennyj-magicheskimi-simvolami-i-krugami?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/mystical---novyj-yazyk-programmirovaniya--vdohnovlennyj-magicheskimi-simvolami-i-krugami</guid>
      <description><![CDATA[<p>Mystical — новый язык программирования с визуальным кодом в стиле магических кругов. Поддерживает массивы, словари и пользовательские сигилы</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/mystical---novyj-yazyk-programmirovaniya--vdohnovlennyj-magicheskimi-simvolami-i-krugami">Mystical — новый язык программирования, вдохновленный магическими символами и кругами</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 19 May 2025 07:34:16 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://suberic.net/~dmm/projects/mystical/README.html">Mystical</a> — экспериментальный язык программирования, вдохновленный магическими символами и кругами, который напоминает смесь PostScript и ритуальной магии.</p><p>Больше новостей — в нашем тг-канале <a href="https://t.me/+ajgz7pDecB4xZTI6">Типичный программист</a></p><p>Его основа — кольцевая структура, где код организован в виде окружностей, заполненных текстом и сигилами. Создатель языка решил объединить эстетику магических кругов с функциональностью программирования, сделав язык визуально насыщенным и концептуально необычным.</p><h2>Основные элементы языка</h2><h2>Кольца (Rings)</h2><p>Ключевая структура Mystical — кольца. Они могут быть трех типов:</p><ul><li><b>Исполняемые массивы</b> — соответствуют { } в PostScript, изображаются простыми кругами со звездочными символами внутри.</li><li><b>Неисполняемые массивы</b> — соответствуют [ ] в PostScript, изображаются кругами без звезд.</li><li><b>Словари</b> — соответствуют &lt;&lt; &gt;&gt; в PostScript, изображаются многоугольниками с двойной внешней и одинарной внутренней границами.</li></ul><p>Примеры:</p><figure><img src="https://media.tproger.ru/user-uploads/111041/2025-05-19/6c15ab83-017b-47c7-99f6-139b8d8efdec.jpeg" alt="" /></figure><p>Подмассивы и словари внутри других колец соединяются тонкими линиями, которые начинают и заканчивают свой путь в точке соединения, отмеченной специальным символом.</p><h2>Текст и сигилы</h2><p>На границах колец размещаются текст и сигилы — символы, заменяющие операторы, переменные или другие ключевые слова. Например:</p><ul><li>Имена переменных (в PostScript пишутся как /name) отображаются в виде треугольников.</li><li>Строки (в PostScript пишутся в скобках ()) обрамляются в символы, напоминающие египетские картуши.</li><li>Основные операторы, такие как dup, add, mul, if, имеют собственные символы, вдохновленные начальной буквой команды или смыслом операции.</li></ul><p>Примеры:</p><h2>Пользовательские сигилы</h2><p>Разработчики могут создавать собственные сигилы для пользовательских функций и переменных, добавляя их в sigil_bank во время выполнения программы.</p><p>Эти сигилы могут быть созданы на основе каллиграфии, геометрических форм или других визуальных элементов, что позволяет адаптировать язык под личные предпочтения.</p><h2>Примеры алгоритмов</h2><p>Mystical поддерживает основные алгоритмы, такие как быструю сортировку (quicksort) и алгоритм Евклида для нахождения наибольшего общего делителя (GCD). Пример реализации GCD:</p><figure><img src="https://media.tproger.ru/user-uploads/111041/2025-05-19/361b2f39-321f-4eb0-bbc6-67226fef1d8f.jpeg" alt="" /></figure><h2>Проблемы и планы</h2><p>На данный момент Mystical — это скорее язык для рисования программ PostScript, чем полноценная интерпретируемая платформа.</p><p>Разработчик планирует улучшить алгоритмы разметки колец, чтобы код занимал меньше места и выглядел более организованно. В будущем возможно создание интерпретатора, который сможет напрямую исполнять Mystical-программы.</p><h2>Перспективы</h2><p>Mystical уже привлек внимание благодаря своей уникальной концепции. Идея комбинирования эстетики магических кругов с программированием может найти применение в создании визуальных сценариев для игр, интерактивных инсталляций или обучающих проектов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Квиз: какой стек технологий тебе подходит?</title>
      <link>https://tproger.ru/articles/kviz--kakoj-stek-tehnologij-tebe-podhodit-</link>
      <comments>https://tproger.ru/articles/kviz--kakoj-stek-tehnologij-tebe-podhodit-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kviz--kakoj-stek-tehnologij-tebe-podhodit-</guid>
      <description><![CDATA[<p>Пройди наш квиз и проверь, какой стек технологий тебе подходит больше всего. Проверь свои текущие знания и выбирай новое направление!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kviz--kakoj-stek-tehnologij-tebe-podhodit-">Квиз: какой стек технологий тебе подходит?</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Стеки и очереди]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 25 Apr 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Ты стоишь на развилке — за каким стеком пойдёшь? Ты визуальный эстет, любящий пиксельную точность, поклонник архитектурных паттернов и серверных таинств, DevOps-мастер, управляющий инфраструктурой, или универсал-фуллстек? Ответь на 8 вопросов — и мы покажем твой путь в IT.</p>]]></content:encoded>
    </item>
    <item>
      <title>Тест: Какой язык программирования тебе подходит</title>
      <link>https://tproger.ru/quiz/test--kakoj-yazyk-programmirovaniya-tebe-podhodit</link>
      <comments>https://tproger.ru/quiz/test--kakoj-yazyk-programmirovaniya-tebe-podhodit?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/quiz/test--kakoj-yazyk-programmirovaniya-tebe-podhodit</guid>
      <description><![CDATA[<p>Пройди наш квиз и проверь, какой язык программирования тебе подходит больше всего. Проверь свои текущие знания и выбирай новое направление!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/quiz/test--kakoj-yazyk-programmirovaniya-tebe-podhodit">Тест: Какой язык программирования тебе подходит</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Викторины]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 14 Apr 2025 14:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Выбираешь, с чего начать? Или хочешь понять, куда двигаться дальше?</p><p>Этот тест поможет определить, какой язык программирования подходит именно тебе — по типу задач, стилю мышления и карьерным ориентирам.<br /><br />В конце ты получишь 1–2 языка, которые соответствуют твоим приоритетам, плюс пояснение, где они реально применяются, зачем их учить и как с ними выстраивать карьеру.<br /></p>]]></content:encoded>
    </item>
    <item>
      <title>ТОП-36 курсов по No-code разработке, включая бесплатное онлайн-обучение Zero Coding</title>
      <link>https://tproger.ru/articles/kursy-po-no-code-razrabotke</link>
      <comments>https://tproger.ru/articles/kursy-po-no-code-razrabotke?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анастасия Шишкина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kursy-po-no-code-razrabotke</guid>
      <description><![CDATA[<p>Лучшие онлайн-курсы по No-code разработке. Список школ, осуществляющих обучение на бесплатной или платной основе, а так же цены на курсы по Zero Coding</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kursy-po-no-code-razrabotke">ТОП-36 курсов по No-code разработке, включая бесплатное онлайн-обучение Zero Coding</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Для продвинутых]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Low-code]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 08 Apr 2025 17:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Все больше людей интересуются возможностями создания цифровых продуктов, и No-code курсы становятся для них настоящим прорывом. Интересно, что по данным последних исследований, рынок No-code/Low-code решений вырастет до $187 миллиардов к 2030 году — это почти десятикратный рост с 2021 года. Особенно примечательно, что крупные компании, включая Google и Microsoft, активно инвестируют в развитие no-code инструментов, делая их доступными для широкой аудитории.</p><p>Вместе с экспертами <a href="https://kursfinder.ru/">Kursfinder</a> я изучила около 100 вариантов обучения No-code разработке, чтобы отобрать самые качественные программы. В результате получилась подборка из 36 курсов, где первые 10 — это платные предложения от топовых школ, а остальные — программы для продвинутых пользователей и бесплатные варианты. Полный список <a href="https://kursfinder.ru/no-code/">курсов по No-code</a> можно найти на сайте Kursfinder.</p><h2>ТОП-10 лучших курсов по No-Code в 2026 году</h2><ol><li><a href="https://experts2.ru/oMpgXh?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=1">Основы NoCode: быстрый старт</a> от ProductStar — интенсив для самых мотивированных.</li><li><a href="https://experts2.ru/czyEJp?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=2">Профессия «No-Code разработчик»</a> от Skillbox — объемная программа с крутым портфолио на выходе.</li><li><a href="https://experts2.ru/ijgvTW?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=3">Управление зерокод-разработкой</a> от ZeroCoder — для тех, кто хочет создать свою студию веб-разработки.</li><li><a href="https://experts2.ru/njliOU?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=4">Профессия «No-code разработчик»</a> от Cyberband Academy — прохождение связанных общей темой мини-курсов в своем темпе.</li><li><a href="https://experts2.ru/mBkaoM?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=5">No-Code разработчик</a> от Code Breakers — многообразие инструментов и практика на реальных кейсах.</li><li><a href="https://experts2.ru/sdRmaJ?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=6">Быстрый старт в No-code</a> от Cyberband Academy — мини-курс для тех, кто спешит.</li><li><a href="https://experts2.ru/nXBlgq?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=7">Голосовые и чат-боты в no-code</a> от TWIN — обучение созданию чат-ботов.</li><li><a href="https://experts2.ru/pjXRxo?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=8">Создание сайтов на WordPress/ВордПресс без кода</a> от Stepik — верстка сайтов без HTML.</li><li><a href="https://experts2.ru/LrsnWe?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=9">Легендарный онлайн-курс по no-code разработке</a> от HSE Inc — запись популярного курса с вечным доступом.</li><li><a href="https://experts2.ru/evEhwD?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=10">No-code. От идеи до продукта без программиста</a> от Product University — изучение 10 No-code инструментов.</li></ol><p>Эти курсы станут отличным выбором как для тех, кто только начинает путь в Zero-code обучении и хочет быстро освоить инструменты без программирования, так и для предпринимателей или фрилансеров, стремящихся создавать собственные цифровые продукты без привлечения разработчиков. Интересно, что даже без технического бэкграунда, благодаря структурированным программам обучения, вы сможете уверенно работать с популярными no-code платформами уже через несколько недель после старта.</p><h2>Онлайн-курсы по No-Code</h2><p><b>1. </b><a href="https://experts2.ru/oMpgXh?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=1">Основы NoCode: быстрый старт</a> | <b>ProductStar</b></p><p>Экспресс-курс создан для тех, кто хочет освоить профессию No-code разработчика с нуля и получить практические навыки создания цифровых продуктов без написания кода. Автор программы — команда ProductStar, которая специализируется на обучении современным IT-профессиям. Курс подойдет новичкам, предпринимателям и фрилансерам, которые стремятся быстро войти в профессию и научиться создавать приложения, сайты и автоматизировать бизнес-процессы.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-03/e8208ea0-bb64-4d76-ba0c-7cf9c4ff0919.png" alt="" /></figure><ul><li>Стоимость: 45 540 ₽</li><li>Длительность: 9 уроков</li><li>Формат обучения: видеоуроки, практика на реальных кейсах, сопровождение ментора, защита финального проекта</li><li>Сертификат: электронный сертификат об успешном прохождении курса</li></ul><p><b>Для кого: </b>курс рассчитан на начинающих специалистов, которые хотят освоить Zero coding курсы, а также на предпринимателей и фрилансеров, стремящихся создавать цифровые продукты самостоятельно.</p><p><b>Преимущества:</b></p><ul><li>акцент на практические задания и работу с реальными кейсами крупных компаний;</li><li>поддержка ментора на всех этапах обучения;</li><li>возможность добавить финальный проект в портфолио;</li><li>официальный сертификат после завершения курса.</li></ul><p><b>Недостатки:</b></p><ul><li>относительно высокая стоимость обучения;</li><li>отсутствие подробной информации о длительности курса;</li><li>требуется самостоятельная организация времени из-за гибких дедлайнов.</li></ul><p><b>Программа обучения:</b></p><ul><li>базовые инструменты для разработки без кода;</li><li>освоение платформы Directual: от основ до реальных задач;</li><li>создание приложений в Bubble и запуск интернет-магазина;</li><li>настройка чат-ботов для автоматизации взаимодействия с клиентами;</li><li>построение систем расписаний и работа с визуализацией данных;</li><li>создание сайтов на Tilda с нуля;</li><li>разработка и защита собственного проекта для портфолио.</li></ul><p><a href="https://experts2.ru/oMpgXh?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=1">Полную программу вы найдете на сайте</a></p><p><b>2.</b> <a href="https://experts2.ru/czyEJp?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=2">Профессия «No-Code разработчик»</a> | <b>Skillbox</b></p><p>Этот объемный курс поможет вам начать IT-карьеру, даже если раньше вы совсем не видели себя в этой роли. Вы освоите самые востребованные инструменты и получите сразу несколько крутых работ в портфолио. Это быстрое и глубокое погружение в сферу разработки для тех, кто настроен серьезно.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-03/cfb2118a-9e92-4bfc-9ddc-d24ddd2c5939.png" alt="" /></figure><ul><li>Стоимость: 4 250 ₽/месяц</li><li>Длительность: 8 месяцев</li><li>Формат обучения: несколько учебных модулей с видеоуроками и практикой</li><li>Сертификат: нет информации</li></ul><p><b>Для кого:</b> подойдет людям с нулевым опытом в айти, но важна отдача и усердие. Программа составлена так, что вам предстоит много практики. Если уделять ей достаточно времени, вы получите результат.</p><p><b>Преимущества:</b></p><ul><li>несколько готовых работ для демонстрации;</li><li>поддержка в чате Телеграм;</li><li>сразу три полезных инструмента в вашу копилку;</li><li>удобный график учебы.</li></ul><p><b>Недостатки:</b></p><ul><li>интенсивная программа не для тех, у кого мало времени/сил;</li><li>много самостоятельной работы.</li></ul><p><b>Программа обучения:</b></p><ul><li>Bubble;</li><li>Flutter Flow;</li><li>тильда;</li><li>общий итог и знакомство с профессией.</li></ul><p><a href="https://experts2.ru/czyEJp?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=2">Ознакомиться с полной программой на сайте</a></p><p><b>3. </b><a href="https://experts2.ru/ijgvTW?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=3">Управление зерокод-разработкой</a>  | <b>ZeroCoder</b></p><p>Этот онлайн-курс сильно выделяется из всей подборки тем, что в нем фоукс не на обучении собственно разработке, а на создании собственного бизнеса и студии кодинга. Помимо базовых знаний вы получите множество инструментов, которые пригодятся будущему руководителю.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-03/a18af578-43bf-40df-a064-01870985e0be.png" alt="" /></figure><ul><li>Стоимость: 18 750 ₽/месяц</li><li>Длительность: бессрочно, при желании можно пройти за 2 месяца</li><li>Формат обучения: записи уроков, воркшопы, консультации</li><li>Сертификат: не предполагается</li></ul><p><b>Для кого: </b>для тех, кто хочет зарабатывать на разработке по-крупному. Не только как самостоятельный программист, но и как владелец настоящей студии разработки.</p><p><b>Преимущества:</b></p><ul><li>уникальная программа;</li><li>консультации бухгалтеров, юристов, психологов;</li><li>гарантия окупаемости или возврат денег;</li><li>профориентация.</li></ul><p><b>Недостатки:</b></p><ul><li>очень высокая стоимость;</li><li>программа не для всех.</li></ul><p><b>Программа обучения:</b></p><ul><li>общие понятия no-code;</li><li>продажи;</li><li>разработка, проекты;.</li><li>как масштабировать свою деятельность;</li><li>собственная веб-студия.</li></ul><p><a href="https://experts2.ru/ijgvTW?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=3">Ознакомиться с полной программой на сайте</a></p><p><b>4. </b><a href="https://experts2.ru/njliOU?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=4">Профессия «No-code разработчик»</a> | <b>Cyberband Academy</b></p><p>Это сборка курсов, объединенных общей темой и последовательно раскрывающих ее для заинтересованного новичка. В программе много практики и самостоятельных мини-проектов, которые вы можете положить в портфолио. Удобное обучение в своем темпе с доброжелательной обратной связью.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-03/b0fd5fba-7ee3-4179-a775-f88707dfe467.png" alt="" /></figure><ul><li>Стоимость: 49 900 ₽</li><li>Длительность: бессрочный доступ к программе, обучение в своем темпе</li><li>Формат обучения: уроки, общение и ОС в чате, домашние работы</li><li>Сертификат: электронный сертификат</li></ul><p><b>Для кого: </b>будет полезно всем, кто заинтересовался таким направлениям, как разработка без кодинга, даже если раньше не было опыта в этой сфере. Потребуется много усидчивости и стараний, но так как жестких дедлайнов нет, то справится любой.</p><p><b>Преимущества:</b></p><ul><li>помогают с трудоустройством;</li><li>сессии с вопросами и ответами, качественная ОС;</li><li>14 работ в портфолио;</li><li>более 200 подробных лекций.</li></ul><p><b>Недостатки:</b></p><ul><li>не раскрыта тема обычного написания кода;</li><li>отсутствие графика может демотивировать некоторых учеников.</li></ul><p><b>Программа обучения:</b></p><ul><li>введение;</li><li>первые кейсы на Тильде, Creatium+;</li><li>модуль про бизнес;</li><li>мобильные приложения, + кейс;</li><li>Bubble, + кейс;</li><li>общие сведения про фриланс.</li></ul><p><a href="https://experts2.ru/njliOU?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=4">Ознакомиться с полной программой можно здесь</a></p><p><b>5.</b> <a href="https://experts2.ru/mBkaoM?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=5">No-Code разработчик</a> | <b>Code Breakers</b></p><p>Онлайн-курс поможет научиться создавать самые разные вещи, от веб страниц до полноценных приложений, и все это — без традиционного написания кода в среде разработки. Это целый комплекс мощных навыков, с которыми вы сможете войти в крутой IT-проект, не имея за плечами большого опыта.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-03/9d1ece5b-8ea1-4fb5-9cef-3441cc8809f5.png" alt="" /></figure><ul><li>Стоимость: нет информации</li><li>Длительность: нет информации</li><li>Формат обучения: Уроки трижды в неделю, практика, обсуждения в чате</li><li>Сертификат: нет информации</li></ul><p><b>Для кого:</b> тем, кто еще не определился, что именно хочет делать — сайты, программы или настройку бизнес-процессов. Подходит начинающим.</p><p><b>Преимущества:</b></p><ul><li>универсальность;</li><li>большой набор инструментов;</li><li>упор на применение в практике, без нужной теории;</li><li>кейсы в портфолио.</li></ul><p><b>Недостатки:</b></p><ul><li>нет информации о цене и сроках;</li><li>нет глубокой проработки специализированных тем.</li></ul><p><b>Программа обучения:</b></p><ul><li>создание лендингов и многостраничных сайтов;</li><li>мобильные приложения;</li><li>веб-приложения;</li><li>автоматизация бизнес-процессов;</li><li>интеграция с разными сервисами.</li></ul><p><a href="https://experts2.ru/mBkaoM?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=5">Ознакомиться с полной программой здесь</a></p><p><b>6. </b><a href="https://experts2.ru/sdRmaJ?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=6">Быстрый старт в No-code</a> | <b>Cyberband Academy</b></p><p>Мини-курс длительностью всего один месяц для быстрого знакомства с темой зеро-код разработки. Шаг за шагом вы познакомитесь с азами создания IT-продуктов без классического кодинга с экспертами в теме и самостоятельно создадите целых 6 продуктов, которые будут вашим первым шагом в этой сфере.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-03/8344cbcf-160a-428f-b5ea-346be399b569.png" alt="" /></figure><ul><li>Стоимость: 29 900 ₽</li><li>Длительность: 1 месяц</li><li>Формат обучения: лекции, задания с ОС</li><li>Сертификат: нет</li></ul><p><b>Для кого: </b>прослушать курс будет полезно тем, кто еще не определился с основной темой и хочет быстро ознакомиться с зеро-кодингом. Не для продвинутых программистов.</p><p><b>Преимущества:</b></p><ul><li>актуальные темы, востребованные в современных профессиях;</li><li>6 готовых работ;</li><li>эксперты с большим опытом;</li><li>быстрое погружение в тему.</li></ul><p><b>Недостатки:</b></p><ul><li>недостаточно глубины;</li><li>интенсивный тем, подходит не всем.</li></ul><p><b>Программа обучения:</b></p><ul><li>основы IT;</li><li>веб-сервисы;</li><li>мобильные приложения;</li><li>реализация собственных мини-проектов.</li></ul><p><a href="https://experts2.ru/sdRmaJ?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=6">Ознакомьтесь с полной программой можно на сайте</a></p><p><b>7.</b> <a href="https://experts2.ru/nXBlgq?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=7">Голосовые и чат-боты в no-code</a> | <b>TWIN</b></p><p>Этот экспресс-курс создан экспертами компании TWIN для тех, кто хочет освоить профессию разработчика чат-ботов без знания программирования. Под руководством опытных наставников студенты научатся создавать интеллектуальных ботов с нуля, получат сертификат квалифицированного специалиста TWIN и смогут заниматься внедрением решений компании.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-03/b95bdd4a-2c7e-4a51-9787-27d62af10923.png" alt="" /></figure><ul><li>Стоимость: 31 100 ₽</li><li>Длительность: 40 часов</li><li>Формат обучения: 40 лекций, доступ на год</li><li>Сертификат: да</li></ul><p><b>Для кого: </b>курс рассчитан на начинающих специалистов в сфере IT и маркетинга, предпринимателей, а также тех, кто хочет освоить новую профессию или расширить спектр своих услуг. Он подойдет тем, кто стремится работать с интеллектуальными ботами, выйти на удаленную работу или развивать бизнес в области чат-бот технологий.</p><p><b>Преимущества:  </b></p><ul><li>возможность освоить профессию разработчика чат-ботов без навыков программирования;</li><li>доступ к материалам курса на год;</li><li>поддержка опытных наставников и доступ к живым вебинарам.</li></ul><p><b>Недостатки:  </b></p><ul><li>требуется время и самодисциплина для завершения курса в своем темпе;</li><li>необходимость успешной аттестации для получения сертификата;</li><li>отсутствие углубленного изучения языков программирования.</li></ul><p><b>Программа обучения:  </b></p><ul><li>введение в технологии создания интеллектуальных ботов;</li><li>работа с платформой TWIN для разработки чат-ботов;</li><li>практические задания по созданию ботов с нуля;</li><li>обучение внедрению и интеграции решений;</li><li>подготовка к аттестации и партнерству.</li></ul><p><a href="https://experts2.ru/nXBlgq?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=7">Ознакомиться с полной программой здесь</a></p><p><b>8. </b><a href="https://experts2.ru/pjXRxo?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=8">Создание сайтов на WordPress/ВордПресс без кода</a>  | <b>Stepik</b></p><p>Небольшой курс по одному из самых популярных инструментов для No-code веб-разработки, WordPress. За чисто символическую стоимость вы узнаете, как создавать лендинги и многостраничные сайты. Очень полезный навык во многих профессиях, и он может стать началом новой карьеры.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-03/bbb67e8c-b3b8-4628-ab2f-24682f9ab247.png" alt="" /></figure><ul><li>Стоимость: 499 ₽</li><li>Длительность: 1,5 часа</li><li>Формат обучения: уроки, тестирования, задания</li><li>Сертификат: нет</li></ul><p><b>Для кого:</b> учиться могут абсолютно все, кто умеет пользоваться браузером и текстовым редактором. Полезное первое знакомство с версткой сайтов без изучения HTML и CSS.</p><p><b>Преимущества:</b></p><ul><li>очень бюджетно;</li><li>быстро;</li><li>учеба на наглядных примерах;</li><li>есть чат с поддержкой.</li></ul><p><b>Недостатки:</b></p><ul><li>только один инструмент;</li><li>поверхностное знакомство с темой.</li></ul><p><b>Программа обучения:</b></p><ul><li>хостинг и движок WP;</li><li>шапка и первый экран;</li><li>блочные темы;</li><li>итог.</li></ul><p><a href="https://experts2.ru/pjXRxo?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=8">С полной программой можно ознакомиться на странице</a></p><p><b>9. </b><a href="https://experts2.ru/LrsnWe?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=9">Легендарный онлайн-курс по no-code разработке</a> | <b>HSE Inc</b></p><p>Это курс, который в настоящий момент уже не ведется живым потоком, но продается в качестве записи всех занятий. Огромное количество полезных материалов по теме No-code, много реальных примеров, разбор 20 полезных инструментов. Цена ниже, чем была раньше, а вся польза осталась прежней.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-03/b326acd4-07d2-463c-9db1-917d612f0448.png" alt="" /></figure><ul><li>Стоимость: 22 900 ₽</li><li>Длительность: бессрочный доступ к материалам без дедлайнов</li><li>Формат обучения: лекции, воркшопы, инструкции, словарь</li><li>Сертификат: нет</li></ul><p><b>Для кого: </b>для тех, кто хочет всесторонне изучить способы создавать IT-продукты без кода. Будет полезно и опытным программистам, которым надо изменить формат работы.</p><p><b>Преимущества:</b></p><ul><li>популярный курс с множеством хороших отзывов;</li><li>разбор большого количества инструментов;</li><li>небольшая стоимость.</li></ul><p><b>Недостатки:</b></p><ul><li>нет обратной связи;</li><li>много самостоятельной работы.</li></ul><p><b>Программа обучения:</b></p><ul><li>MVP;</li><li>чат-боты;</li><li>автоматизация;</li><li>приложения;</li><li>большие проекты.</li></ul><p><a href="https://experts2.ru/LrsnWe?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=9">Ознакомиться с полной программой курса вы можете здесь</a></p><p><b>10. </b><a href="https://experts2.ru/evEhwD?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=10">No-code. От идеи до продукта без программиста</a> | <b>Product University</b></p><p>Этот курс представляет собой No-coding обучение в сжатые сроки. Два месяца вы будете интенсивно изучать и пробовать на практике самые полезные для зеро-кодера инструменты, а потом еще в течение четырех месяцев сможете консультироваться с куратором, чтобы отточить приобретенные навыки. Бонусом вы получите несколько хороших кейсов в свое портфолио.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-04-03/c7064f0f-2c7c-4e2a-ad98-c7f6779cd8e0.png" alt="" /></figure><ul><li>Стоимость: 1 625 ₽/месяц</li><li>Длительность: 2 месяца</li><li>Формат обучения: теория, практика и обратная связь</li><li>Сертификат: есть</li></ul><p><b>Для кого: </b>уроки будут полезны тем, кто хочет открыть свой стартап, кто зарабатывает или хочет зарабатывать разработкой на фрилансе, менеджерам и руководителям.</p><p><b>Преимущества:</b></p><ul><li>возврат денег в течение первой недели, если не понравится;</li><li>удобная ОС в чате Телеграм;</li><li>вечный доступ к материалам;</li><li>бюджетно.</li></ul><p><b>Недостатки:</b></p><ul><li>общие сведения, без глубины;</li><li>нет помощи в трудоустройстве.</li></ul><p><b>Программа обучения:</b></p><ul><li>введение;</li><li>интернет-магазин;</li><li>Тильда;</li><li>чат-боты;</li><li>мобильные приложения.</li></ul><p><a href="https://experts2.ru/evEhwD?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=10">Вы можете ознакомиться с полной программой курса на этой странице</a></p><h2>Еще 8 курсов No-Code</h2><p>No-code технологии стремительно меняют IT-ландшафт, позволяя создавать цифровые продукты без написания кода. Современные образовательные программы предлагают различные подходы к освоению этой перспективной сферы — от базового понимания принципов работы с No-code инструментами до создания сложных бизнес-решений и запуска собственных студий разработки. Рассмотрим еще восемь актуальных курсов, которые помогут вам освоить профессию будущего и начать карьеру в сфере No-code разработки или автоматизации бизнес-процессов.</p><ol><li><a href="https://experts2.ru/uwOLel?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Фриланс и NO-CODE</a> от ITGIRLS — за 4 месяца вы получите новую, востребованную профессию. Первые заказы с версткой на Тильде или созданием макета на Фигме вы сможете получать уже во время учебы. Менторы ответят на ваши вопросы и помогут с созданием первых проектов для демонстрации работодателям.</li><li><a href="https://experts2.ru/eZciEr?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Разработчик на Bubble</a> от Skillbox.ru — в программе курса освещаются основные принципы работы с Bubble — мощным конструктором, который позволяет разрабатывать MVP для стартапов и масштабные корпоративные системы управления. Помимо технических аспектов, студенты узнают о практических применениях платформы и современных тенденциях в сфере No-code разработки. Этот курс подойдет тем, кто хочет быстро войти в IT или автоматизировать бизнес-процессы без глубоких знаний программирования.</li><li><a href="https://experts2.ru/evEhwD?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">No-code. От идеи до продукта без программиста</a> от Product University — курс разработан для новичков и позволяет освоить создание функциональных продуктов с помощью готовых инструментов, таких как конструкторы и сервисы. Участники научатся быстро и дешево собирать минимально жизнеспособные продукты (MVP), что особенно полезно для стартапов и автоматизации бизнес-процессов. По окончании курса выдается сертификат, подтверждающий полученные навыки.</li><li><a href="https://experts2.ru/DnjPhf?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Разработчик web приложений на Bubble</a> от Cyberband Academy — программа обучает созданию приложений без необходимости владения навыками программирования, используя No-code сервисы. Программа включает более 100 лекций и бизнес-модуль, где разбирается стратегия запуска IT-продуктов, а также делается акцент на практическую часть — 80% практики и 20% теории. Среди преимуществ курса отмечается поддержка преподавателей и возможность реализовать проекты, которыми можно гордиться уже во время обучения.</li><li><a href="https://experts2.ru/AcInjs?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Зерокодер на Bubble</a> от ZeroCoder — за два месяца участники смогут разработать маркетплейс на примере Яндекс.Маркета благодаря уникальной методологии обучения, которая помогает легко освоить материал и довести проект до результата. Программа ориентирована на практические задачи, позволяя студентам быстро применять полученные знания для создания реальных приложений за короткий срок..</li><li><a href="https://experts2.ru/fKEivu?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Zero coding</a> от Уральского федерального университета —  программа ориентирована на развитие практических навыков для автоматизации бизнес-процессов и разработки приложений с использованием современных платформ. Обучение подходит как для начинающих специалистов, так и для предпринимателей, желающих оптимизировать свои процессы без привлечения программистов. Этот курс — часть дополнительного профессионального образования, направленная на повышение квалификации в сфере IT-технологий.</li><li><a href="https://experts2.ru/QpjdbT?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Создание сайтов на Webflow</a> от Uprock School — программа включает освоение основ HTML и CSS, что делает ее одной из самых объемных и насыщенных на рынке. Обучение проходит в комфортном темпе с последовательным изложением материала и поддержкой практики под присмотром опытных преподавателей. Школа также известна тем, что демонстрирует тысячи качественных проектов своих учеников, подтверждая эффективность обучения.</li><li><a href="https://experts2.ru/ZwzAsi?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Своя зерокод-студия</a> от ZeroCoder — это индивидуальная программа менторства для создания и масштабирования AI-студии премиум-класса. Участники получают доступ к эксклюзивным модулям по нейросетям, промпт-инжинирингу и no-code инструментам, а также консультации с юристами, бухгалтерами и психологами для комплексного развития проекта. Программа подходит тем, кто хочет войти в трендовую нишу AI-разработки с высоким доходом, минимизируя риски за счет экспертного сопровождения.</li></ol><h2>5 курсов по мобильной разработке на No-code</h2><ol><li><a href="https://experts2.ru/nAiveY?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Онлайн-курс по зерокодингу</a> от Onskills — курс по зерокодингу предлагает онлайн-обучение созданию сайтов и приложений без необходимости знания программирования, что делает его доступным для начинающих. Обучение проходит в дистанционном формате с поддержкой квалифицированных наставников, которые помогают освоить материал с нуля. По завершении курса участники смогут претендовать на высокооплачиваемые вакансии в IT-сфере.</li><li><a href="https://experts2.ru/CownaV?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Мобильные приложения на No-code</a> от Cyberband Academy — курс по разработке мобильных приложений без кода учит создавать приложения уровня Airbnb и Delivery Club за 2 месяца, используя No-code инструменты. В программе студенты работают над реальными проектами, включая запуск приложений в App Store и Google Play, что позволяет им формировать конкурентоспособное портфолио. Обучение проходит под руководством опытных менторов, которые помогают освоить процесс создания MVP за 2–5 недель.</li><li><a href="https://experts2.ru/hgnBqP?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Зерокодер мобильных приложений</a> от ZeroCoder — обучающая программа поможет освоить создание мобильных приложений без необходимости писать код, что делает процесс доступным даже для новичков. Курс помогает участникам запустить собственные проекты в App Store и Google Play за 3 месяца, используя популярные no-code инструменты и платформы. Особое внимание уделяется практике: студенты работают над реальными кейсами под руководством экспертов, что позволяет им сразу применять полученные знания на практике.</li><li><a href="https://experts2.ru/yYhSga?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Мобильный разработчик без кода</a> от Code Breakers — программа ориентирована на тех, кто хочет быстро войти в IT-сферу, предлагая практические навыки для разработки приложений, которые могут конкурировать на мировом рынке. Участники курса получают доступ к экспертным материалам и поддержке опытных менторов, что помогает им успешно реализовать свои проекты уже в процессе обучения.</li><li><a href="https://experts2.ru/OcFsrn?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Продвинутая программа по мобильным приложениям на FlutterFlow</a> от ZeroCoder — обучение подходит как для начинающих, так и для тех, кто уже имеет базовые знания в No-code разработке, предлагая погружение в процесс создания интерактивных приложений без необходимости углубленного изучения программирования. Участники работают над реальными проектами, которые можно опубликовать в App Store и Google Play, формируя портфолио и развивая навыки, востребованные на рынке IT. Под руководством опытных наставников студенты учатся эффективно комбинировать дизайн, функционал и технологии для запуска качественных мобильных решений.</li></ol><h2>Бесплатные курсы по No-Code</h2><p>Бесплатные курсы по No-Code — это отличная возможность для новичков познакомиться с основами создания приложений и автоматизации процессов без необходимости изучать сложные языки программирования. Такие курсы помогают быстро освоить популярные инструменты, развить практические навыки и определиться с направлением для дальнейшего профессионального роста.</p><p><b>1.</b> <a href="https://experts2.ru/KfTjne?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Tilda. Как создать впечатляющий сайт без программирования</a> — <b>Bang Bang Education</b></p><p>Этот курс подойдет для новичков, которые хотят освоить платформу Tilda и научиться создавать красивые и функциональные лендинги без знания программирования. За несколько уроков вы разберетесь с интерфейсом Tilda, основными блоками и инструментами, а также создадите свой первый проект с нуля.</p><p><b>Главное о курсе:</b></p><ul><li>Подробное изучение интерфейса и базовых возможностей Tilda;</li><li>Пошаговое руководство по созданию лендинга;</li><li>Практические задания для закрепления навыков.</li></ul><p><b>2.</b> <a href="https://experts2.ru/fPwjIz?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Зерокодер: разработчик веб и мобильных приложений</a> — <b>Содействие занятости</b></p><p>Курс создан для тех, кто хочет освоить разработку мобильных приложений без необходимости писать код. На обучении вы научитесь использовать No-Code инструменты, чтобы создавать функциональные и привлекательные мобильные решения, которые могут быть применены в бизнесе или для личных проектов.</p><p><b>Главное о курсе:  </b></p><ul><li>Фокус на разработку мобильных приложений через No-Code платформы;</li><li>Практические кейсы и примеры из реальной жизни;</li><li>Подходит как для предпринимателей, так и для начинающих разработчиков.</li></ul><p><b>3.</b> <a href="https://experts2.ru/aYusQf?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">NOCODE на Creatium</a> — <b>Creatium</b></p><p>Программа будет полезна тем, кто только начинает свой путь в мире No-Code и хочет освоить базовые навыки создания сайтов и приложений без программирования. На практических примерах вы научитесь работать с платформой Creatium и создадите свой первый проект, который можно использовать для портфолио или бизнеса.</p><p><b>Главное о курсе:  </b></p><ul><li>Погружение в основы работы с Creatium — интуитивной платформой для No-Code разработки;</li><li>Пошаговое создание сайта или лендинга с нуля;</li><li>Акцент на простоту и доступность для новичков.</li></ul><p><b>4. </b><a href="https://experts2.ru/bAtKji?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Зерокодинг — новая нефть!</a> — <b>ZeroCoder</b></p><p>Уроки станут отличной отправной точкой для тех, кто хочет освоить веб-разработку без необходимости изучать сложные языки программирования. В рамках обучения вы научитесь создавать современные сайты и интерактивные веб-страницы, используя интуитивно понятные No-Code инструменты.</p><p><b>Главное о курсе:  </b></p><ul><li>Основы создания сайтов на популярных No-Code платформах;</li><li>Практические примеры и пошаговые инструкции для новичков;</li><li>Бесплатный доступ к материалам для самостоятельного изучения.</li></ul><p><b>5.</b><a href="https://experts2.ru/QpjdbT?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop"> Webflow: Старт</a> — <b>Uprock School</b></p><p>Программа подойдет для тех, кто хочет освоить Webflow — мощный инструмент для создания сайтов без написания кода. Вы научитесь работать с профессиональными шаблонами, настраивать адаптивный дизайн и создавать уникальные веб-проекты, которые выглядят современно и функционально.</p><p><b>Главное о курсе:  </b></p><ul><li>Погружение в платформу Webflow с нуля;</li><li>Создание адаптивных и кросс-браузерных сайтов;</li><li>Практические задания для закрепления навыков.</li></ul><p><b>6. </b><a href="https://experts2.ru/kOmYfh?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Специалист по zerocoding</a> — <b>Future Prof</b></p><p>Этот курс — находка для тех, кто хочет понять основы No-Code разработки и научиться создавать цифровые продукты без сложного программирования. Здесь вы получите базовые знания о популярных инструментах и сможете реализовать свои идеи в формате простых и функциональных решений.</p><p><b>Главное о курсе:  </b></p><ul><li>Введение в No-Code разработку для начинающих;</li><li>Обзор ключевых платформ и их возможностей;</li><li>Практические примеры для старта в создании проектов.</li></ul><p><b>7. </b><a href="https://experts2.ru/WndzQi?sub1=tproger-kf&amp;sub2=nocode-kursy&amp;sub4=netop">Управление проектами на зерокоде</a> — <b>ZeroCoder</b></p><p>Курс подойдет тем, кто хочет освоить управление проектами в No-Code среде и научиться эффективно координировать разработку без глубоких технических знаний. Вы узнаете, как структурировать задачи, выбирать подходящие инструменты и доводить проекты до результата, экономя время и ресурсы.</p><p><b>Главное о курсе:  </b></p><ul><li>Основы управления проектами с использованием No-Code решений;</li><li>Лайфхаки по организации работы и командной координации;</li><li>Практические советы для реализации проектов любой сложности.</li></ul><h2>Видеоуроки по No-code</h2><p><b>1. </b><a href="https://youtu.be/p7I8dKsSD_o?si=tzl80Ity3VuMRMGJ">No code. Программирование без кода</a> — <b>Клуб дедов-программистов</b></p><p>Это общий обзор основных технологий и сервисов, которые используются в зеро-код разработке. Полезное видео для тех, кто хочет понять, как вообще можно программировать без кода и прикоснуться к этому миру впервые</p><p><b>Главное о курсе:</b></p><ul><li>Просто и понятно для новичков;</li><li>Полный обзор основных технологий;</li><li>Разбор примеров.</li></ul><p><b>2. </b><a href="https://www.youtube.com/watch?v=NB3n22pE95Y">Все возможности NoCode в одном видео</a> —<b> Игнат Егоров | AppBusters</b></p><p>20 минут концентрированной информации о зеро-кодинге с примерами успешных стартапов. Разбор ограничений метода, плюсов и минусов. Сравнение с классическим программированием. Вы узнаете об основных конструкторах и их возможностях.</p><p><b>Главное о курсе:</b></p><ul><li>Краткое обзорное видео;</li><li>Вдохновляющие примеры;</li><li>Описание инструментов.</li></ul><p><b>3.</b> <a href="https://youtu.be/hk2xRE_A5vA?si=kaLTgBawTIo-c7Vv">Webflow. Обзор возможностей, подводные камни</a> — <b>Я — зерокодер </b></p><p>Это часовое видео посвящено разбору одного из самых популярных инструментов у ноу-кодеров — Webflow. Много практики и нюансов работы для тех, кто собирается плотно заняться разработкой. Будет полезно как начинающим, так и тем, кто уже изучал предмет самостоятельно.</p><p><b>Главное о курсе:</b></p><ul><li>Наглядная работа в Вебфлоу;</li><li>Рассказ о возможностях и ограничениях;</li><li>Кейсы использования.</li></ul><p><b>4. </b><a href="https://youtu.be/JjNOLcGV1WQ?si=7N6nXP_X-kwuJ4Jz">Сборка топового сайта на Tilda, без кода</a> — <b>Buddilov | Веб-дизайн Без Воды</b></p><p>Очень короткое познавательное видео про фиксацию элемента в Тильде. Это не полный разбор конструктора, скорее маленький лайфхак для тех, кто уже знаком с ним. Если вы уже имеете общее представление о конструкторе сайтов Тильда, но все еще не знаете, как доработать мелкие досадные детали, это видео вам поможет.</p><p><b>Главное о курсе:</b></p><ul><li>Коротко и полезно;</li><li>Не очевидная возможность инструмента;</li><li>Для практиков.</li></ul><p><b>5. </b><a href="https://www.youtube.com/playlist?list=PL_uFkOK8swUXYbn7xzrAA7Lj2xc47X5sJ">Серия вебинаров «Low-code вместо разработки»</a> — <b>ELMA </b></p><p>Небольшой плейлист из пяти обучающих видеоуроков по Low-code. Достаточно подробная проработка сложных тем, таких как документооборот low-code, интеграция бизнес-процессов и кастомизация ECM. Эти вебинары помогут вам глубже погрузиться в тему.</p><p><b>Главное о курсе:</b></p><ul><li>Длинные подобные видео;</li><li>Просто о сложном;</li><li>Для продолжающих.</li></ul><h2>Профессия No-Code Разработчик: Создавай Будущее без Кода</h2><p>No-code разработчик — одна из самых быстро растущих профессий в IT, которая позволяет создавать приложения, сайты и автоматизировать бизнес-процессы без единой строчки кода. Интересный факт: по данным Gartner, к 2026 году более 70% новых приложений будут разрабатываться с использованием no-code/low-code технологий. Это значит, что специалисты, освоившие Zero-coding курсы, становятся ключевыми фигурами на рынке труда.</p><h2>Деятельность</h2><p>No-code разработчик создает цифровые продукты, используя визуальные инструменты и платформы. Это могут быть мобильные приложения, лендинги, CRM-системы, чат-боты или даже сложные автоматизированные процессы для бизнеса. Например, вы можете помочь ресторану настроить систему бронирования столов через Telegram-бота или создать маркетплейс для стартапа за пару недель.</p><h2>Навыки</h2><p><b>Для успешной работы важно уметь:</b></p><ul><li>Работать с популярными no-code платформами (Bubble, Adalo, Airtable, Tilda и др.).</li><li>Понимать основы UX/UI, чтобы создавать удобные интерфейсы.</li><li>Владеть навыками аналитики и автоматизации бизнес-процессов.</li><li>Быть гибким и быстро обучаться новым инструментам.</li></ul><h2>Где учиться</h2><p>Освоить профессию можно на zero coding курсах от проверенных онлайн-школ. Например, программы от Skillbox, ProductStar или HSE Inc предлагают как базовые знания, так и углубленные треки для продвинутых специалистов. А если бюджет ограничен, есть бесплатные варианты, которые могут быть не менее полезны для упорных и целеустремленных людей.</p><h2>Уровень дохода</h2><p><b>Зарплаты No-code разработчиков зависят от опыта и сложности проектов:</b></p><ul><li>Начинающий специалист может получать до <a href="https://perm.hh.ru/vacancy/117939972?query=no-code+%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA&amp;hhtmFrom=vacancy_search_list">80 000</a> рублей.</li><li>Опытный разработчик может рассчитывать на зарплату от 100 000 до <a href="https://perm.hh.ru/vacancy/118950931?query=no-code+%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA&amp;hhtmFrom=vacancy_search_list">150 000 рублей</a>.</li></ul><p>Эта профессия открывает двери не только в IT, но и в предпринимательство, позволяя запускать собственные проекты с минимальными затратами времени и денег.</p><h2>Заключение</h2><p>No-code разработка становится одной из самых востребованных профессий в IT-сфере, позволяя создавать приложения и сайты без написания кода. Средняя зарплата специалистов в этой области составляет 120–180 тысяч рублей. No-code курсы открывают доступ к высокооплачиваемой профессии даже для тех, кто не имеет технического образования. При выборе курсов важно обращать внимание на практическую составляющую обучения и отзывы выпускников. Рекомендую начинать с базовых программ, постепенно углубляя знания.</p><p><b>Подборки по схожим темам:</b><b></b></p><ol><li><a href="https://tproger.ru/articles/top-61-kursov-veb-razrabotchika--luchwee-onlajn-obuchenie-programmirovaniyu-besplatno-i-platno" rel="nofollow">Лучшие курсы веб-разработчика</a></li><li><a href="https://tproger.ru/articles/top-hh-kursov-ios-razrabotchikov--onlajn-obuchenie-razrabotki-mobilnyh-prilozhenij-dlya-iphone" rel="nofollow">Лучшие курсы iOS-разработчиков</a></li><li><a href="https://tproger.ru/articles/top-30-kursov-android-razrabotchikov--onlajn-obuchenie-razrabotki-mobilnyh-prilozhenij-pod-android" rel="nofollow">Лучшие курсы Android-разработчиков</a></li><li><a href="https://tproger.ru/articles/top-25-kursov-golang-razrabotchikov--besplatnoe-i-platnoe-onlajn-obuchenie-programmirovaniyu-na-yazyke-go">Лучшие курсы Golang-разработчиков</a></li></ol><p><i>А какие No-code курсы проходили вы? Поделитесь своим опытом обучения и результатами — ваш отзыв поможет другим читателям сделать правильный выбор.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>С++: разбираешься ли ты в управлении памятью?</title>
      <link>https://tproger.ru/quiz/s----razbiraewsya-li-ty-v-upravlenii-pamyatyu-</link>
      <comments>https://tproger.ru/quiz/s----razbiraewsya-li-ty-v-upravlenii-pamyatyu-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/quiz/s----razbiraewsya-li-ty-v-upravlenii-pamyatyu-</guid>
      <description><![CDATA[<p>Память — штука непростая, но очень важная. Даже в C++. Проходи квиз и проверяй свои знания!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/quiz/s----razbiraewsya-li-ty-v-upravlenii-pamyatyu-">С++: разбираешься ли ты в управлении памятью?</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Викторины]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 06 Apr 2025 08:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>С большой силой приходит большая ответственность. Это мы, кстати, про управление памятью в C++. Да, язык дает огромную свободу в этом плане, но цена ошибки тоже высока: утечки, сегфолты и бесконечные дебаги. В этом квизе мы проверим, насколько ты разбираешься в управлении памятью и сможешь ли ты избежать типичных ошибок.</p><p>А вот несколько статей про C++:</p><ul><li><a href="https://tproger.ru/articles/memory-model">Модель памяти в языках программирования</a></li><li><a href="https://tproger.ru/articles/jelektronnye-chasy-multimedijnaja-biblioteka-sfml-dlja-razrabotki-igr-na-c">Электронные часы, мультимедийная библиотека SFML для разработки игр на C++</a><br /></li><li><a href="https://tproger.ru/articles/instrukciya-k-pogruzheniyu-v-s-i-bolee-10-besplatnyh-resursov-dlya-nachinayushhih">Инструкция к погружению в С++ и более 10 бесплатных ресурсов для начинающих</a><br /></li></ul>]]></content:encoded>
    </item>
    <item>
      <title>ТОП 60 лучших инструментов для разработки ПО в 2025</title>
      <link>https://tproger.ru/articles/top-60-luchwih-instrumentov-dlya-razrabotki-po-v-2025</link>
      <comments>https://tproger.ru/articles/top-60-luchwih-instrumentov-dlya-razrabotki-po-v-2025?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Владислав Устинов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-60-luchwih-instrumentov-dlya-razrabotki-po-v-2025</guid>
      <description><![CDATA[<p>ТОП лучших инструментов для разработки ПО в 2025. Показываем новые и хорошо забытые старые инструменты для программистов. Рассматриваем преимущества и основные нюансы ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-60-luchwih-instrumentov-dlya-razrabotki-po-v-2025">ТОП 60 лучших инструментов для разработки ПО в 2025</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Для продвинутых]]></category>
      <category><![CDATA[Финтех]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Low-code]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 27 Mar 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Лучшие IDE и редакторы кода</h2><h3>Visual Studio Code. Лидер среди редакторов кода</h3><p>Бесплатный, <a href="https://code.visualstudio.com/">универсальный IDE</a> от Microsoft. Поддерживает все языки программирования и Git. Главная особенность — тысячи расширений. Заточен под разработку программных продуктов небольшой и средней сложности, отлично подходит для начинающих разработчиков.</p><h3>JetBrains IntelliJ IDEA / WebStorm / PyCharm — лучшие IDE для Java, JS, Python</h3><p>Несколько продуктов в виде <a href="https://jetbrains.com/">профессиональных IDE</a> для конкретных языков: Java, JavaScript, Python. Здесь есть умный анализ кода, который находит ошибки для запуска, много конкретных плюшек для Java, JavaScript, Python. Отлично подходит для больших проектов и тех, кто занимается командной разработкой.</p><h4>Neovim — для любителей Vim с мощными плагинами</h4><p>Текстовый <a href="https://neovim.io/">редактор</a> на базе VIM для тех, кто любит минимализм, но при этом не готов жертвовать функциональностью. Работает с терминалом на любых устройствах. У него открытый исходный код, никаких платных версий. Neovim очень гибкий в плане кастомизации, поддерживается большим сообществом, для него есть много расширений.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/cace6d8b-58f5-4eee-aa09-e9821c07d545.png" alt="" /><figcaption>Сравнительная таблица редакторов кода</figcaption></figure><h2>Системы контроля версий</h2><h3>Git + GitHub / GitLab / Bitbucket</h3><p>Git — бесплатный инструмент, который помогает следить за изменениями в коде и работать над проектом вместе с командой. <a href="https://github.com/">GitHub</a> добавляет удобную автоматизацию (Actions) и популярен для открытых проектов. <a href="https://gitlab.com/">GitLab</a> хорош для закрытых задач благодаря встроенным инструментам и приватности. Bitbucket легко дружит с JIRA для командной работы. Базовые версии бесплатны, платные — от 3 до 19$ в месяц. GitHub выбирают для опенсорса, GitLab — для секретных проектов, а <a href="https://bitbucket.org/">Bitbucket</a> — для тех, кто уже использует JIRA.</p><h3>Git Kraken</h3><p>Удобный <a href="https://gitkraken.com/">интерфейс</a> для работы с Git, где все изменения показаны в виде дерева. Помогает разбираться с конфликтами в коде и видеть историю. Бесплатен для личных проектов, командная версия — 5$ в месяц. Отличный выбор для новичков и тех, кто любит визуальные подсказки.</p><h3>Лучшие CLI-утилиты для Git</h3><p><a href="https://git-scm.com/">Набор помощников</a>, которые упрощают разработку с Git через терминал. Например, git-extras работает с рутинными задачами, tig показывает историю изменений, а git-flow помогает организовать ветки кода. Всё бесплатное и работает без интернета. Подходит тем, кто хочет ускорить работу и не боится командной строки.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/7586e996-ef0c-4dfe-b9ef-7a4fcef9dc23.jpg" alt="" /><figcaption>Сравнительная таблица систем контроля версий</figcaption></figure><h2>Инструменты для CI/CD</h2><h3>GitHub Actions, GitLab CI/CD — встроенные пайплайны</h3><p><a href="https://github.com/features/actions">GitHub Actions</a> помогает автоматизировать сборку и запуск кода — например, чтобы тесты проходили сами после каждого изменения. Бесплатно до 2 тыс. минут для открытых проектов. <a href="https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/">GitLab CI/CD</a> встроен в GitLab и делает то же самое с 400 бесплатными минутами, плюс больше контроля над процессом. Оба работают прямо с вашим кодом, без лишних программ. GitHub Actions проще для новичков, GitLab CI/CD — для тех, кому важна приватность. Отлично для команд, которые уже сидят на этих платформах.</p><h3>Jenkins, CircleCI, Travis CI — обзор популярных решений</h3><p><a href="https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/">Jenkins </a>— бесплатный инструмент с открытым кодом, где можно настроить всё под себя. Нужен свой сервер, зато без ограничений. <a href="https://circleci.com/">CircleCI</a> ускоряет автоматизацию, но стоит от 15$ в месяц. <a href="https://travis-ci.org/">Travis CI</a> дружит с GitHub: бесплатно для открытых проектов, от 69$ для закрытых. Jenkins берут для сложных задач, CircleCI — для скорости, а Travis — для простых опенсорс-проектов.</p><h3>ArgoCD и FluxCD — CI/CD для Kubernetes</h3><p>GitOps-инструменты для Kubernetes. <a href="https://argoproj.github.io/argo-cd/">ArgoCD</a> синхронизирует код с кластерами через GUI и поддерживает откаты ошибок. <a href="https://fluxcd.io/">FluxCD</a> легче настраивается и автоматически обновляет образы. Оба бесплатны и работают с Helm. ArgoCD предпочтительнее для команд с опытом в Kubernetes, FluxCD — для небольших проектов с минимальными настройками.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/498113e7-48ec-4dc5-98bc-d5f1264160d8.png" alt="" /><figcaption>Сравнительная таблица инструментов для CI/CD</figcaption></figure><h2>Средства тестирования</h2><h3>Selenium, Cypress — тестирование фронтенда</h3><p><a href="https://selenium.dev/">Selenium</a> — инструмент для автоматизации браузеров через WebDriver. Поддерживает все языки программирования, но требует дополнительных библиотек. <a href="https://cypress.io/">Cypress</a> — современное решение на JavaScript с упором на простоту и стабильность тестов. Выполняет тесты в том же цикле событий, что и приложение. Selenium универсальнее, Cypress быстрее и интуитивнее для фронтенд-разработчиков.</p><h3>JUnit, PyTest, Mocha — тестирование кода</h3><p>Набор инструментов для тестирования кода. <a href="https://junit.org/">JUnit</a> — популярный выбор для Java, особенно в больших компаниях, где используют Spring; он простой и надёжный для старта. <a href="https://pytest.org/">PyTest</a> делает тестирование на Python удобным и понятным, без лишних сложностей. <a href="https://mochajs.org/">Mocha</a> (часто с Chai) подходит для JavaScript: гибкий, лёгкий, и отлично работает с проектами на фронтенде или бэкенде. Все три встраиваются в автоматизацию и хороши для новичков, которые хотят проверять код без головной боли.</p><h3>Postman, Newman — API-тестирование</h3><p><a href="https://postman.com/">Postman</a> — удобный инструмент, который начинался как способ тестировать API, а теперь помогает создавать запросы, проверять их и даже автоматизировать работу. Newman — его версия для командной строки, чтобы запускать тесты без интерфейса, например, вместе с другими автоматическими задачами. Оба бесплатны для базовых вещей, а командные функции стоят от 12$ в месяц. Postman подойдёт новичкам для ручной проверки API или создания прототипов, а Newman — для автоматического тестирования API в проекте.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/9f2f8ca0-a2f1-4062-bddd-7c4b0763c3a3.png" alt="" /><figcaption>Сравнительная таблица средств тестирования</figcaption></figure><h2>DevOps и контейнеризация</h2><h3>Docker и Podman — контейнеры в 2025 году</h3><p><a href="https://docker.com/">Docker</a> — стандарт контейнеризации в 2025 году. Упаковывает код с зависимостями в переносимые образы. Бесплатен для локальной работы, командная разработка обойдется в 5$ в месяц. Ограничен в РФ из-за санкций. <a href="https://podman.io/">Podman</a> — безопасная альтернатива без центрального домена, полностью совместим с Docker-командами. Поддерживает rootless-режим и работу с systemd, но имеет меньше обучающих материалов.</p><h3>Kubernetes — главный инструмент оркестрации</h3><p><a href="https://kubernetes.io/">Платформа </a>для оркестрации контейнеров, незаменима для микросервисной архитектуры. Бесплатная, работает локально через Minikube или в облаке (от 10$). Управляет десятками контейнеров через YAML-манифесты, обеспечивает масштабирование и обновление без простоев. Требует опыта и мощного железа, но остаётся лидером для продакшн-окружений.</p><h3>Terraform и Pulumi — инфраструктура как код</h3><p><a href="https://terraform.io/">Terraform</a> — бесплатное программное обеспечение, помогает настроить инфраструктуру (серверы, сети, кластеры) через код. Работает локально без платы, а облачная версия стоит от 20$. Подходит для любых облаков и нравится тем, кто хочет держать всё под контролем. <a href="https://pulumi.com/">Pulumi</a> делает то же самое, но вместо специального языка использует привычные JavaScript, TypeScript или Python. Удобнее для тех, кто уже умеет программировать, хотя сообщество поменьше. Оба хороши для новичков, которые хотят проще управлять инфраструктурой.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/6c143f5f-f054-4d81-a69f-62e3ab183eb2.png" alt="" /><figcaption>Сравнительная таблица инструментов для DevOps и контейнеризации</figcaption></figure><h2>Базы данных и инструменты для работы с ними</h2><h3>PostgreSQL, MySQL, MongoDB — что выбрать?</h3><p><a href="https://postgresql.org/">PostgreSQL</a> — мощная бесплатная база данных с открытым кодом, которая подходит для анализа и обработки данных в сложных проектах. Она работает с разными типами данных, вроде SQL и JSON, и не берёт денег за локальное использование (облако — от 10$). У неё есть полезные дополнения, которые помогают справляться с большими нагрузками. Отличный выбор для бэкенда или аналитики, где запросы посложнее.</p><p><a href="https://mysql.com/">MySQL</a> — простая и быстрая база данных, которая хорошо подходит для небольших и средних проектов. Есть бесплатная версия. Легко работает с языками вроде PHP, Python и Node.js, а начать с нее может любой новичок. У MySQL огромное сообщество, где можно найти готовые ответы. По сравнению с PostgreSQL, слабее в сложных задачах, но для старта — отличный выбор.</p><p><a href="https://mongodb.com/">MongoDB</a> — бесплатная NoSQL-база данных, которая хранит данные в виде JSON-документов, а не таблиц. Облачная версия Atlas стоит от 9$. Она гибкая — не нужно перестраивать структуру, если что-то меняется и запускается одной командой. По сравнению с SQL-базами хуже справляется с транзакциями, зато идеально подходит для быстрых прототипов и стартапов, где требования часто меняются.</p><h3>Prisma и TypeORM — работа с БД в коде</h3><p><a href="https://prisma.io/">Prisma</a> —  удобный инструмент для работы с базами данных в JavaScript и TypeScript. Поддерживает PostgreSQL, MySQL и MongoDB, помогая быстро писать код для бэкенда. Автодополнение упрощает жизнь, но на сложных задачах может немного тормозить. Отличный выбор для небольших команд, которые делают бэкенд на Node.js.</p><p><a href="https://typeorm.io/">TypeORM</a> — бесплатный инструмент с открытым кодом для работы с базами данных в JavaScript и TypeScript. Легко дружит с NestJS и Express, помогая связать код с базой. Подходит для средних проектов, где требования могут меняться. Документация не всегда полная, а некоторые функции работают не идеально, но для гибких задач на JS/TS — хороший выбор.</p><h3>DBeaver, TablePlus — удобные GUI-клиенты</h3><p><a href="https://dbeaver.io/">DBeaver</a> — удобный интерфейс для работы с более чем 80 базами данных. Бесплатная версия (Community) доступна всем, платная (Enterprise) — от 11$ в месяц. Есть редактор для запросов с подсказками, возможность видеть структуру базы и выгружать данные. Программа ресурсоёмкая и не работает в РФ без средств обхода. Подходит разработчикам и аналитикам, которые не хотят использовать командную строку.</p><p><a href="https://tableplus.com/">TablePlus</a> — лёгкий и удобный интерфейс для работы с более чем 10 базами данных. Бесплатная версия позволяет подключаться к двум базам, а полная стоит 59$ единоразово. Интерфейс простой, данные можно выгружать, а старт занимает пару минут. В России для покупки платной версии нужны посредники. Подходит для тех, кто хочет быстро подключиться к базам без лишних наворотов.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/9c0927d4-8ef2-4f05-b63d-3ca5cf30b007.png" alt="" /><figcaption>Сравнительная таблица инструментов для работы с базами данных</figcaption></figure><h2>Фреймворки и библиотеки</h2><h3>React, Vue, Angular, Svelte — выбор фронтенд-разработчиков</h3><p><a href="https://reactjs.org/">React</a> — бесплатная библиотека для создания динамичных интерфейсов, например, сайтов, которые быстро реагируют на действия пользователя. Она с открытым кодом и включает в себя популярные инструменты вроде Redux и Next.js. У неё огромное сообщество, что даёт гибкость, но новичкам может быть непросто разобраться. Подходит для больших проектов, где команда готова потратить время на обучение.</p><p><a href="https://angular.io/">Angular</a> — фронтенд-фреймворк от Google для создания продуктов со сложными интерактивными интерфейсами. Бесплатный, с открытым кодом, идёт с TypeScript из коробки, что упрощает работу с большими проектами. Встроенные инструменты вроде Angular CLI ускоряют старт, а двусторонняя привязка данных (two-way binding) экономит время на синхронизации. Сообщество большое, документация подробная, но новичкам может быть тяжело из-за обилия концепций. Подходит для тех, кто работает в команде и создает корпоративные приложения, где важны структура и масштабируемость.</p><p><a href="https://vuejs.org/">Vue</a> — фронтенд-фреймворк с простым и понятным кодом, который помогает быстро создавать интерфейсы. Он лёгкий (всего 20 КБ), включает удобные инструменты вроде Vuex, Pinia и Nuxt для разных задач. Начать с ним проще, чем с React, хотя библиотек поменьше. Отлично подходит для быстрой разработки веб-продуктов.</p><p><a href="https://svelte.dev/">Svelte</a> — современный фреймворк, который превращает код в быстрый JavaScript. Он простой, не требует лишних сложностей и работает быстрее многих других. Есть SvelteKit для дополнительных возможностей. Код получается компактным, но сообщество и экосистема пока небольшие. Подходит для стартапов и приложений, где важна скорость.</p><h3>Node.js, Deno, Bun — что актуально в бэкенде</h3><p><a href="https://nodejs.org/">Node.js</a> — классика серверного JavaScript. Он быстро обрабатывает запросы и имеет огромный набор готовых решений через NPM, плюс Express для создания API. С его помощью разрабатывают приложения, где всё обновляется в реальном времени, например, чаты. Экосистема большая, но для задач с высокой нагрузкой процессор может быть слабоват. Отличный выбор для API и реалтайм-проектов.</p><p><a href="https://deno.land/">Deno</a> — безопасная альтернатива Node.js. TypeScript из коробки, изолированный доступ, встроенный пакетный менеджер, Web API. Безопасность по умолчанию, но меньше экосистема. Для современного бэкенда с акцентом на безопасность.</p><p><a href="https://deno.land/">Bun</a> — сверхбыстрый JavaScript-рантайм, в 3—5 раз быстрее чем аналогичные продукты от конкурентов. Встроенные пакетный менеджер и тест-раннер, поддержка TS и NPM. Скоростной, но молодой проект с багами. Для экспериментов и микросервисов.</p><h3>Spring Boot, Django, FastAPI — лучшие серверные фреймворки</h3><p><a href="https://spring.io/projects/spring-boot">Spring Boot</a> — java-фреймворк для масштабируемых проектов. Автоконфигурация, REST API, JPA, Security, встроенный Tomcat. Spring Cloud для микросервисов. Промышленный стандарт, но требует знания Java и ресурсов. Подходит тем, кто создает enterprise-приложения.</p><p><a href="https://djangoproject.com/">Django</a> — мощный Python-фреймворк, который даёт всё нужное для разработки: от работы с базами до защиты и создания API. Он ускоряет процесс и делает проекты безопасными. Подходит для сайтов и приложений на Python, но для маленьких независимых сервисов может быть сложноват. Хороший выбор для быстрого старта.</p><p><a href="https://fastapi.tiangolo.com/">FastAPI</a> — современный Python-фреймворк для разработки быстрых API. Он простой, автоматически генерирует документацию к коду и работает шустро. Подходит для задач, требующих высокой производительности, и поддерживает асинхронные запросы, что делает его подходящим для работы с реальным временем (real-time). Админки тут нет, а для работы с реалтайм-функциями лучше иметь небольшой опыт. Отличный выбор для лёгких API и микросервисов на Python.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-03-28/9079cb50-8bf6-4539-9278-78a527c0e152.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-03-28/b6d908c7-27a6-4f7d-8a0c-484739dc954a.png" alt="" /></figure><h2>Приложения с инструментами для командной работы</h2><h4>Slack, Discord, Mattermost — коммуникация в командах</h4><p><a href="https://slack.com/">Slack</a> — стандарт для командного общения. Бесплатно можно чатиться с историей сообщений за 90 дней, а платная версия стоит от 7$ в месяц за пользователя. Есть каналы для разных проектов и удобная связь с GitHub, JIRA или Google Drive. Настройка лёгкая, можно даже общаться с клиентами, но в России платные функции недоступны без обхода блокировок. Подходит командам, которые любят чаты и хотят всё держать в одном месте.</p><p><a href="https://discord.com/">Discord</a> — платформа для общения и сообществ. Базовое использование бесплатно, Nitro от $10/месяц. Текстовые и голосовые каналы, боты для модерации, стриминг и шеринг экрана. Отличное качество звука, но мало деловых интеграций. Доступен в виде веб-версии и приложения для всех основных платформ. Подходит для удалённых команд с частыми созвонами.</p><p><a href="https://mattermost.com/">Mattermost</a> — бесплатный мессенджер с открытым кодом для безопасного общения. Можно установить на свой сервер, облачная версия — от 10$ в месяц. Похож на Slack, но данные хранятся у вас, и есть плагины для связи с другими сервисами. Настройка требует усилий, зато приватность на высоте. Для компаний, которым важно держать всё под контролем.</p><h3>Notion, Confluence, Obsidian — управление документацией</h3><p>Notion — гибкий инструмент для хранения документации. Бесплатно до 5 гостей, безлимит — от 8$ в месяц. Можно делать заметки, таблицы и доски задач в одном месте. Удобно для стартапов, работает на всех устройствах, но большие проекты могут тормозить. Есть версии приложения под Android, Windows и IOS. Подходит для команд, которым нужна вся информация в одном месте.</p><p><a href="https://atlassian.com/software/confluence">Confluence</a> — корпоративная платформа для документации от Atlassian, стоит от 6$ в месяц за пользователя, бесплатной версии нет. Хорошо дружит с JIRA и помогает организовать записи по проектам. В России оплата через посредников. Для больших команд с чёткими процессами.</p><p><a href="https://obsidian.md/">Obsidian</a> — бесплатное ПО для заметок. Работает локально, синхронизация — от 4$ в месяц, но тратить на неё средства не обязательно, можно настроить через сторонние плагины. Данные хранятся у вас, есть плагины для допфункций. Не подходит для командной работы. Хорош для личных записей и аналитики.</p><h3>JIRA, ClickUp, Trello — управление задачами</h3><p><a href="https://atlassian.com/software/jira">JIRA</a> — Инструмент для управления задачами, стоит от 7$ в месяц за пользователя, бесплатной версии нет. Подходит для планирования с досками и отчётами, но новичкам может быть сложно. Для профессиональных команд, которые работают по Agile.</p><p><a href="https://clickup.com/">ClickUp</a> — универсальный сервис для выполнения задач с бесплатной версией до 100 МБ, полная — от 7$ в месяц. Есть доски, списки и автоматизация. Прост вначале, но функций так много, что можно запутаться. Для команд, которым нужен гибкий инструмент без сложностей JIRA.</p><p><a href="https://trello.com/">Trello </a>— простая система для задач с досками. Бесплатно до 10 досок, дальше — от 5$ в месяц с автоматизацией. Перетаскивайте карточки от «Сделать» к «Готово». Легко и наглядно, но для больших процессов не подходит. Для маленьких команд и простых проектов.</p><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/a6fe1500-5047-4ecb-b2ac-132232f06b06.png" alt="" /><figcaption>Сравнительная таблица сервисов для организации командной работы ч1</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/105039/2025-03-21/80e997f8-01d0-4764-bbf2-275469101b42.png" alt="" /><figcaption>Сравнительная таблица сервисов для организации командной работы ч2</figcaption></figure><h2>Новые и перспективные инструменты для разработки</h2><h3>AI-кодогенераторы: GitHub Copilot, Codeium, ChatGPT API, Cursor AI, Claude Code, Claude API, Cloud Code от Google</h3><p>GitHub Copilot — ИИ-помощник, который подсказывает код и проверяет его. Бесплатно для студентов и открытых проектов, иначе — 10$ в месяц. Работает с кучей языков в популярных редакторах, ускоряя работу. Не работает в РФ. Подходит всем, кто хочет писать код быстрее.</p><p><a href="https://codeium.com/">Codeium</a> — бесплатная альтернатива Copilot, где безопасность на первом месте. Для бизнеса — от 15$ в месяц. Помогает с кодом и тестами, данные обрабатываются локально. Отличный выбор для команд, которым важна конфиденциальность.</p><p><a href="https://openai.com/api/">ChatGPT API</a> — инструмент от OpenAI для создания своих ИИ-помощников. Стоит недорого, доступен в России и понимает много языков. Может писать код, объяснять ошибки, но нужно уметь его подключать. Для тех, кто готов копаться в настройках.</p><p><a href="https://cursor.sh/">Cursor AI</a> — редактор кода с ИИ, похожий на VS Code, но умнее. Подсказывает код, исправляет ошибки и ускоряет работу. Под капотом разные ИИ-продукты от Open AI, Google, Antropic. Простой и быстрый, идеален для новичков, которые хотят писать код без лишней головной боли.</p><p><a href="https://www.anthropic.com/claude">Claude Code</a> — терминальный помощник от Anthropic для автоматизации кодирования. Необычный подход к разработке в сравнении с конкурентами. Работает через командную строку, ищет код, правит файлы и пушит в GitHub. Бесплатен в preview, безопасен. Подходит тем, кто хочет ускорить рутину и не боится терминала.</p><p><a href="https://www.anthropic.com/api">Claude API (3.7 Sonnet)</a> — лучший ИИ для кодинга по мнению автора статьи. Версия 3.7 Sonnet пишет код, чинит баги и думает над задачами. Во многих сценариях превосходит Chat GPT. Стоит от 3$ за миллион токенов, не работает в России. Для тех, кто хочет мощный ИИ в своём проекте, но готов разобраться с подключением.</p><p><a href="https://cloud.google.com/code">Cloud Code от Google</a> —  плагин для VS Code от Google, чтобы писать код для их облака. Помогает с настройкой серверов и приложений, вроде Kubernetes. Бесплатен с аккаунтом Google Cloud. Подходит новичкам, которые начинают с облачных проектов и хотят всё делать в одном месте.</p><h2>Инструменты Low-Code / No-Code для ускорения разработки</h2><p><a href="https://www.bettyblocks.com/">Betty Blocks</a> — Low-Code платформа для создания своего программного продукта. Всё делается через визуальный редактор с готовыми шаблонами, плюс есть упор на безопасность. Её используют большие компании вроде Clifford Chance. Подходит для сложных задач, стоит от 1050$ в месяц, не очень дружелюбна для новичков. В основном для корпораций с хорошим бюджетом.</p><p><a href="https://bubble.io/">Bubble</a> — No-Code инструмент для разработки веб-приложений. Можно перетаскивать элементы, использовать шаблоны. Есть бесплатный тариф. Легко начать, но большие проекты могут тормозить. Отличный выбор для стартапов и одиночек, которым нужен прототип.</p><p><a href="https://zapier.com/interfaces">Zapier</a> —  No-Code для автоматизации. Соединяет 7000+ приложений через простой конструктор, стоит от 19.99$ в месяц. Удобно для экономии времени, но дополнительные настройки могут поднять цену. Для тех, кто хочет объединить разные сервисы.</p><p><a href="https://softr.io/">Softr</a> —  No-Code платформа с привязкой к Airtable. Шаблоны простые, настройка быстрая, цена от 49$ в месяц. Дружелюбный для новичков, есть поддержка, но сложные приложения не потянет. Подходит фаундерам и менеджерам без технических навыков.</p><p><a href="https://www.glideapps.com/">Glide</a> — No-Code для разработки приложений из таблиц, вроде CRM или дашбордов. Стоит от 69$ в месяц, быстро собирается. Удобно для малого бизнеса, но для продвинутых задач слабоват. Хорош для простых нужд.</p><p><a href="https://www.caspio.com/">Caspio </a>— Low-Code с ИИ, в котором создают облачные приложения. Большой акцент на защите данных, цена от 100$ за пользователя в месяц. Подходит для больших систем, но стартапам будет не по карману. Для профессионалов, которым важна безопасность.</p><p><a href="https://www.uipath.com/">UiPath RPA</a> — Low-Code для автоматизации рутины. Упрощает разработку благодаря ИИ. Цена индивидуальная, зависит от запроса. Хорошо подходит для ниш со здравоохранением и финансами. Настройка сложная и недешёвая. Понадобится отраслям, где много повторяющихся задач.</p><p><a href="https://www.outsystems.com/">OutSystems</a> — Low-Code для корпоративных проектов. Поддерживает визуальную разработку ПО для крупных систем. Цена индивидуальная. Для разработчиков и больших компаний.</p><h2>Лучшие новые технологии, которые могут выстрелить в 2025 году</h2><h3>BlueQubit</h3><p><a href="https://bluequbit.io/">Квантовый инструмент</a> для разработчиков. Даёт доступ к вычислениям через облако, помогает решать задачи вроде шифрования или моделирования, с которыми обычные компьютеры не справляются. Дорогой и сложный в освоении. Подходит исследователям и компаниям с большими бюджетами.</p><h4>Блокчейн: Polkadot, Solana, Truffle</h4><p>Платформы для приложений без центра управления. <a href="https://polkadot.network/">Polkadot</a> и <a href="https://solana.com/">Solana</a> делают их быстрыми и масштабируемыми, <a href="https://www.trufflesuite.com/">Truffle</a> упрощает работу с кодом. Безопасно и прозрачно для финансов или логистики, но нужен опыт. Хорош для финтеха и стартапов, которые смотрят на Web3.</p><h4>Edge-вычисления: Apache Edgent, Azure IoT Edge</h4><p>Обработка данных прямо там, где они появляются. <a href="https://github.com/apache/incubator-retired-edgent">Edgent</a> — лёгкий и простой, <a href="https://azure.microsoft.com/en-us/services/iot-edge/">Azure IoT Edge</a> — для умных устройств. Быстро работает, например, для беспилотных машин, но настройка требует времени. Для разработчиков IoT и небольших сервисов.</p><h4>IoT: Arduino, Raspberry Pi</h4><p>Популярные платформы для разработки умных устройств. Они поддерживают современные технологии для связи (например, Wi-Fi, Bluetooth) и обеспечивают базовые механизмы защиты данных. <a href="https://www.arduino.cc/">Arduino</a> и <a href="https://www.raspberrypi.org/">Raspberry Pi</a> доступны по цене, гибки в настройке и отлично подходят для проектов умного дома. Однако для сложных систем с высокой нагрузкой они могут быть недостаточно мощными. Эти платформы идеальны для энтузиастов, хоббистов и небольших IoT-проектов.</p><h4>Кибербезопасность: SAST, DAST</h4><p>Инструменты для защиты кода. <a href="https://www.sonarqube.org/">SAST</a> ищет ошибки до запуска, <a href="https://www.zaproxy.org/">DAST</a> — во время работы с помощью ИИ. Спасают от атак и нужны в продакшене, но требуют частых обновлений. Для всех, кто работает с данными.</p><p>Вот такой топ лучших инструментов получился, а что вы добавили бы в эту подборку? Или может быть убрали бы из неё? Давайте составим свою подборку в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Квантовые вычисления для разработчиков: когда нам придется учить новую математику?</title>
      <link>https://tproger.ru/articles/kvantovye-vychisleniya-dlya-razrabotchikov--kogda-nam-pridetsya-uchit-novuyu-matematiku-</link>
      <comments>https://tproger.ru/articles/kvantovye-vychisleniya-dlya-razrabotchikov--kogda-nam-pridetsya-uchit-novuyu-matematiku-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kvantovye-vychisleniya-dlya-razrabotchikov--kogda-nam-pridetsya-uchit-novuyu-matematiku-</guid>
      <description><![CDATA[<p>Квантовые вычисления для разработчиков. Показываем, как квантовые вычисления помогут в программировании. Рассматриваем основные подходы и прогнозы на будущее ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kvantovye-vychisleniya-dlya-razrabotchikov--kogda-nam-pridetsya-uchit-novuyu-matematiku-">Квантовые вычисления для разработчиков: когда нам придется учить новую математику?</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Низкоуровневое программирование]]></category>
      <category><![CDATA[Операционные системы]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Квантовые вычисления]]></category>
      <category><![CDATA[IBM]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 21 Mar 2025 10:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Авторы научных работ по квантовой механике выдвигают противоречивые теории о физике частиц. Каждый ученый приводит доказательства, их ход мыслей кажется логичными.</p><blockquote>«Я думаю, что могу смело утверждать: квантовую механику не понимает никто».</blockquote><p>По этой причине многие идеи оставим без внимания — попытка их объяснения растянется на десяток страниц. Также не будет формул и страшных математических моделей.</p><p>Рассмотрим лишь то, что приблизит к ответу на вопрос: как квантовые вычисления повлияют на программирование в будущем.</p><h2>Определения и квантовая путаница</h2><h3>Кубиты</h3><p>Квантовые вычисления строятся на основе <b>кубитов</b>. Они существуют как физические объекты. Законы квантовой механики проявляются на фотонах, электронах, ионах, атомах.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-03-17/751e13eb-2cfa-42c8-8e68-d05bc09388ff.jpg" alt="" /><figcaption>Бит содержит только одно значение, кубит принимает все значения одновременно</figcaption></figure><p>Самое интересное — если обычный бит принимает значение 0 или 1, то кубит находится в <b>суперпозиции</b>. Его состояние описывают диапазоном от 0 до 1, и оно непрерывно меняется.</p><p>Суперпозицию можно рассмотреть на примере монетки. На столе она лежит орлом вверх (0), либо решкой (1). Теперь представьте, что монету подбросили, — она вращается в воздухе и находится как бы в обоих состояниях одновременно.</p><h3>Квантовая запутанность</h3><p>В квантовой механике что не явление, то необъяснимое событие. Одно из таких — <b>запутанность</b>. Два отдельных кубита оказываются «связаны», игнорируя расстояние.</p><p>Например, если измеряете один кубит, то автоматически узнаете состояние другого. Даже если второй находится на Марсе.</p><h3>Квантовый брутфорс</h3><p>Битами классических компьютеров управляют логические операторы — И, ИЛИ, НЕ.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-03-17/409f672b-7158-47f4-b759-b82ebaeb8a58.jpg" alt="" /><figcaption>Оператор НЕ инвертирует значение классического бита. При работе с кубитом используются квантовые преобразования, которые являются обратимыми</figcaption></figure><p>Состоянием кубитов управляют <b>гейты</b>. Они «переставляют» квантовые вероятности, чтобы получить диапазон с правильным ответом.</p><p>Представьте замок и 40 ключей. Только один из них подходит. Классический компьютер попробует каждый ключ по очереди. Квантовый образец одновременно «проверит» все варианты, затем с помощью гейтов сузит поиск до верного.</p><p>Суть в том, что квантовые методы вычисляют ответ всего за √N попыток вместо N, как в классическом переборе.</p><p>Последнее испытание гибкости вашей фантазии: <b>гейты выводят и удерживают кубиты в суперпозиции</b>. Это невероятно сложная задача.</p><p>Представьте идеально сбалансированную иголку. Ваша задача, как ученого, — установить иглу на самый кончик и удерживать в равновесии как можно дольше.</p><h2>Он — компьютер, но квантовый</h2><p>Есть мнение, что <b>квантовый компьютер (КК)</b> вовсе не компьютер, потому что выдает не точный, а приблизительный ответ.</p><p>Но он все равно компьютер! У него есть процессор, память, он следует алгоритмам. КК принимает входные данные и выдает результат, который можно обработать.</p><p>Справедливое замечание: без классического компьютера квантовые вычисления — бесполезны.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-03-17/8a1b0a82-38b7-45ae-b430-c965902b39d8.jpg" alt="" /><figcaption>Квантовый компьютер IBM</figcaption></figure><p>КК отсекает решения, невозможные из-за противоречивости, и обозначает предел с ответом. Искать это точное решение и выбирать из нескольких выданных вариантов — задача обычного ПК.</p><p>КК можно сравнить с аналоговым компьютером. В обоих устройствах происходит не вычисление, а измерение результата.</p><h2>Как квантовые вычисления повлияют на программирование</h2><p>Криптог<b>р</b>афия — одна из первых областей, где развитие индустрии квантовых вычислений обещает серьезные изменения. Современные методы шифрования уязвимы при применении квантовых алгоритмов.</p><p>С появлением достаточно мощного КК использование RSA и AES будет небезопасным. Поэтому IT-компании уже разрабатывают <a href="https://tproger.ru/articles/skolko-vremeni-u-nas-ostalos-do-ugrozy-kriptografii-">квантовую криптографию</a>, чтобы защитить данные до появления угрозы.</p><p>В будущем интеграция квантовых технологий решит проблемы <b>оптимизации</b>. Компьютеры будут определять наилучшее решение среди огромного числа вариантов. Актуально для маршрутизации и планирования производства.</p><p><b>Машинное обучение</b> тоже выигрывает от развития квантовых вычислений. Скорость обучения нейросетей увеличится в разы.</p><h3>Классические алгоритмы vs квантовые алгоритмы</h3><p>Классические алгоритмы работают последовательно, а квантовые сокращают количество шагов благодаря параллельной обработке через суперпозиции кубитов.</p><p>Например, алгоритм Шора. Он раскладывает числа на множители, но работает только на квантовом компьютере.</p><p>На классическом ПК методы нахождения множителей начинают работать медленнее. Скорость замедления растет с величиной числа. Классические методы требуют так много вычислений, что время выполнения растет экспоненциально (как снежный ком):</p><ul><li>Для числа размером 2 цифры — очень легко.</li><li>Для числа размером 10 цифр — сложнее, но реально.</li><li>Для числа размером в 300 цифр (как в RSA-криптографии) — может занять тысячи лет.</li></ul><p>С развитием индустрии квантовых технологий число, на разложение которого ушли бы тысячи лет, будет разобрано за несколько часов или дней.</p><p>Другой пример — алгоритм Гровера. Он ускоряет поиск в неструктурированных базах данных.</p><p>В списке из 1000 элементов обычный компьютер проверит до 1000 записей. Алгоритм Гровера проверит всего √1000 ≈ 31 запись.</p><h2>Нужны ли новые языки программирования?</h2><p>Для квантовых измерений только традиционных языков программирования недостаточно.</p><h4>Qiskit</h4><p>Разработчик: IBM</p><p>Популярный Python-фреймворк для программирования квантовых алгоритмов. На нем можно написать программу и выполнить ее на симуляторе. Есть возможность запускать алгоритмы на реальных квантовых компьютерах IBM через облако.</p><h4>Cirq</h4><p>Разработчик: Google</p><p>Библиотека на Python для создания и тестирования технологий квантового вычисления. Cirq чаще используют для работы с алгоритмами Гровера, Шора и др. Программу можно протестировать на симуляторе.</p><h4>Q#</h4><p>Разработчик: Microsoft</p><p>Q# — это часть <a href="https://learn.microsoft.com/en-us/azure/quantum/install-overview-qdk">Microsoft Quantum Development Kit</a> (QDK). Он содержит инструменты для симуляции, разработки программ и интеграции квантовых вычислений с кодом на C# или Python.</p><h2>Какая математика потребуется разработчикам?</h2><p>Разработчик должен уметь работать с <b>матрицами </b>и <b>векторами</b>, потому что с их помощью описывают состояния кубитов и операции над ними.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-03-17/35bc3bfc-41ac-439e-a801-f9a2b9c60db7.jpg" alt="" /><figcaption>Фрагмент задачи по квантовой механике</figcaption></figure><p>Векторы показывают, где кубит «находится» в пространстве, а матрицы управляют его изменениями.</p><p>Все квантовые операции — это просто умножение вектора состояния на матрицы. Но результат нельзя узнать до момента измерения, поэтому вероятность каждого расчета задается квадратичными модулями коэффициентов.</p><p>Квантовые вычисления невозможно представить без <b>комплексных чисел</b>. Они учитывают направление фазы, необходимое для описания интерференции (суперпозиции).</p><p>В будущем программист должен понимать, как измерения кубитов приводят к результатам с заданной вероятностью, и уметь моделировать суперпозицию.</p><h2>Когда начинать изучать квантовые вычисления?</h2><p>Развитие квантовых технологий находится на этапе перехода от исследовательской стадии к практике в реальных приложениях. До массового внедрения далеко, десятки лет.</p><p>Уходить сегодня из фронтенда в разработку квантовых программ — это как создавать ИИ в 80-х годах.</p><p>Основное ограничение — количество активных кубитов и стабильность вычислений. Процессор IBM Condor с 1121 кубитом побил рекорд по мощности, но поддержание кубитов в суперпозиции и подавление квантового шума остаются нерешенными проблемами.</p><p>Сегодня использование квантовых вычислений сводится к узким задачам: симуляции материалов, исследованию химических соединений.</p><h3>Какие компании уже инвестируют в квантовые вычисления?</h3><p><b>IBM </b>— лидер в разработке квантовых технологий. Их платформа IBM Quantum Experience предоставляет доступ к настоящим квантовым компьютерам через облако.</p><p>В 2016 году компания запустила первый публичный квантовый процессор и продолжает увеличивать масштаб вычислений, предлагая обучение и инструменты для разработчиков Qiskit.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-03-17/31ed3a87-6a14-4b2b-9abb-0f8ebde7fac2.jpg" alt="" /><figcaption>Квантовый процессор Google на 54 кубита</figcaption></figure><p><b>Google</b> тоже добилась успеха, заявив о квантовой супрематии — решении задачи, недостижимой для классических компьютеров, с помощью своего процессора Sycamore. Google работает над оптимизацией алгоритмов и предоставляет инструменты для программирования на платформе Cirq.</p><p><b>Microsoft </b>раньше других взялась за развитие языка программирования для квантовых вычислений — Q#. Вместе с этим доступен Quantum Development Kit, который моделирует квантовые программы и тестирует на симуляторах.</p><p><b>Amazon </b>тоже не осталась в стороне. Компания предлагает облачный сервис AWS Braket, интегрирующий работу с квантовыми симуляторами.</p><p>При появлении первых ПК компании разрабатывали собственные операционные системы, процессоры и платформы. Сегодня квантовые технологии находятся на той же стадии — это начало глобальной гонки за квантовую мощь.</p><p><b>Через 5 лет</b> квантовые компьютеры, вероятно, достигнут промежуточной стадии применения. Усилия будут направлены на коррекцию ошибок.</p><p><b>Через 10 лет</b> можно ожидать стабильных образцов с тысячами кубитов. Это станет отправной точкой для коммерческой квантовой индустрии.</p><p><b>Спустя 20 лет</b> квантовые компьютеры, вероятно, станут частью бизнеса. Их будут применять разработчики, работающие с криптографией, ИИ, аналитикой. К этому времени квантовые вычисления станут массовым явлением.</p><p>Возможно, поколение разработчиков в 2045 году будет изучать квантовую механику наряду с классической информатикой.</p><h2>Инструменты и платформы для начала работы</h2><p>Если не терпится попробовать квантовую разработку, обратите внимание на следующие инструменты.</p><h3>IBM Quantum Experience и Qiskit</h3><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-03-17/cb287521-bb3e-4d57-8566-f69544559aa9.jpg" alt="" /><figcaption>Интерфейс IBM Quantum. Построение схемы квантовой телепортации</figcaption></figure><p><a href="https://quantum.ibm.com/">IBM Quantum Experience</a> — это облачная платформа. Она поддерживает запуск кода на реальном квантовом компьютере — 5-кубитном IBM Quito. Платформа содержит учебные курсы, в том числе серию статей по основам квантовой механики.</p><p>Чтобы программировать кубиты, зарегистрируйтесь на IBM Quantum Experience и познакомьтесь с библиотекой Python Qiskit.</p><p>Пример квантовой схемы:</p><p>В библиотеке Qiskit есть модули для изучения оптимизации, машинного обучения и квантовой химии. Если хотите протестировать программу на реальном образце КК, подключайтесь через API.</p><h3>Google Cirq</h3><p><a href="https://quantumai.google/cirq">Google Cirq</a> — это библиотека Python для создания, выполнения и отладки квантовых вычислений на симуляторах или реальном оборудовании Google. Cirq подходит для тех, кто хочет более программно ориентированный подход к квантовой механике.</p><p>Особенности:</p><ul><li>Cirq задает низкоуровневую структуру операций над кубитами.</li><li>Полностью бесплатная библиотека, поддерживаемая Google.</li><li>Интеграция квантовых и классических инструментов в одном коде.</li></ul><p>Пример квантовой схемы:</p><p>Чтобы использовать физический процессор, нужно подключиться к облаку Google Quantum.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-03-17/fa56a90c-238c-40b7-a6e9-0a5d6fda37c4.jpg" alt="" /><figcaption>Схематическое представление архитектуры квантового процессора Sycamore</figcaption></figure><h3>Microsoft Q#</h3><p><b>Q#</b> — язык с высоким уровнем абстракции. Его используют, чтобы сосредоточиться на алгоритмах без погружения в низкоуровневую обработку кубитов.</p><p>Для работы с Q# понадобится Quantum Development Kit, .NET, расширение для Visual Studio или VS Code.</p><p>Простая программа на Q#:</p><p>Код выполняется через симулятор, встроенный в QDK.</p><p>Microsoft предлагает облако с доступом к реальным квантовым процессорам. После настройки учетной записи Azure можно отправлять программы на лабораторные компьютеры и гибридные симуляторы.</p><h2>Симуляторы</h2><p>Чтобы лучше понять работу квантовых вычислений, стоит начать с симуляторов:</p><ul><li><b>IBM Aer.</b> Входит в состав Qiskit, имитирует шумовые и идеальные квантовые процессы.</li><li><b>Google Cirq’s Simulator</b>. Интегрирован в библиотеку Cirq, поддерживает широкий спектр квантовых операций.</li><li><b>Microsoft Quantum Simulator</b>. Разработан для работы с Q#, позволяет запускать программы и тестировать квантовые алгоритмы.</li><li><b>QuTip</b>. Библиотека Python для работы с квантовыми системами, поддерживает симуляцию квантовых состояний, унитарных операций и вычислений.</li></ul><p>Если вы новичок — используйте Qiskit + IBM Aer.</p><p>Любите низкоуровневое программирование? Google Cirq — ваш выбор.</p><p>Чувствуете, что вам нужен язык высокого уровня с интеграцией в классические приложения? Тогда изучайте Q# + Microsoft Quantum Simulator.</p><h2>Что в итоге?</h2><p>Квантовые компьютеры не заменят классические — они дополнят их, решая специфические задачи. Симулировать кубиты непросто: для будущей интеграции квантовых технологий придется пополнить стек новой библиотекой и пройти курс по квантовой физике.</p><p>IBM, Microsoft и Google развивают экосистемы для новых специалистов. Есть симуляторы и обучающие материалы. Они немного облегчают вход в эту сферу.</p><p>Перед изучением темы нужно признать, что квантовые вычисления — это, без преувеличения, самое сложное направление программирования.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что такое рекурсия и как с ней работать: разбираемся на примерах</title>
      <link>https://tproger.ru/articles/chto-takoe-rekursiya-i-kak-s-nej-rabotat</link>
      <comments>https://tproger.ru/articles/chto-takoe-rekursiya-i-kak-s-nej-rabotat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-takoe-rekursiya-i-kak-s-nej-rabotat</guid>
      <description><![CDATA[<p>Что такое рекурсия - Основы работы с рекурсией - Tproger
description: Что такое рекурсия. Показываем, как правильно работать с рекурсией и когда она нужна. Рассматриваем пошаговую инструкцию и примеры ✔ Tproger
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-takoe-rekursiya-i-kak-s-nej-rabotat">Что такое рекурсия и как с ней работать: разбираемся на примерах</a>»</p>]]></description>
      <category><![CDATA[Рекурсия и динамика]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Haskell]]></category>
      <category><![CDATA[Scala]]></category>
      <category><![CDATA[Графы]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 05 Mar 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рекурсия — это мощный инструмент в программировании, который позволяет решать задачи, разбивая их на более простые подзадачи. В статье рассмотрим базовые понятия рекурсии, её принципы, примеры использования, а также типичные проблемы, с которыми можно столкнуться при написании кода.</p><h2>Рекурсия: что это такое и зачем нужна</h2><p>Рекурсия — функция, которая вызывает саму себя. Ее базовое применение — разбить большую задачу на несколько мелких, что делает код проще и понятнее, или когда нужно повторить какое-то действие несколько раз. Второй случай похож на русскую матрешку — вы достаете куклу за куклой, пока не дойдете до самой маленькой.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-02-27/1ac7a0f3-4cad-4616-8226-f5814dbc266e.jpg" alt="" /></figure><p>А теперь давайте разберемся на простом примере из математики: представим, что у нас есть функция F, которая выполняет определенное действие. В нашем случае — вычисляет факториал числа (это самый классический пример). Внутри этой функции F в качестве одного из значений используем вызов этой же функции F, но с уменьшенным аргументом. Так функция будет вызывать саму себя до тех пор, пока не достигнет базового случая (о нем расскажем ниже), после чего начнет возвращать результаты.</p><p>В виде кода это выглядит так:</p><p>Здесь функция F вычисляет факториал числа n, умножая его на факториал n-1, и так до тех пор, пока не дойдёт до 1, после чего начнёт возвращать результаты вверх по цепочке вызовов. Этот пример как раз о том, что нужно выполнить несколько одинаковых действий.</p><p>А вот пример из жизни: вы листаете ленту в известной социальной сети, а новые посты обновляются автоматически — это рекурсия в действии.</p><h2>Принципы работы рекурсии</h2><p>Рекурсия строится на двух ключевых принципах: базовый случай и рекурсивный вызов. Они позволяют функции вызывать саму себя, пока она не завершится.</p><h3>Базовый случай</h3><p>Базовый случай рекурсии — условие, при котором рекурсивный вызов прекращается. Без него функция будет вызывать саму себя бесконечно, а значит, стек переполнится.</p><p>Один из самых простых примеров — факториал, о котором мы писали выше. Другой — возведение числа в степень до тех пор, пока значение не станет равно искомому.</p><p>Так это выглядит в виде кода:</p><p>То есть, базовый случай — если exponent == 0, то возвращаем 1.</p><h3>Рекурсивный вызов</h3><p>Рекурсивный вызов — шаг, на котором функция вызывает саму себя, но с измененными параметрами, чтобы задача стала проще. Один из еще одних классических примеров — задача с числами Фибоначчи.</p><p>Числа Фибоначчи — это последовательность, где каждое число равно сумме двух предыдущих: 0, 1, 1, 2, 3, 5, 8, 13, 21, …</p><p>Если вызвать fibonacci(5), то увидите следующее:</p><p>После этого функция возвращает результаты обратно вверх по стеку вызовов. Обычно этот метод используется в криптографии и алгосах.</p><p>Кстати, на примере чисел Фибоначчи можно разобрать одну из проблем рекурсии — плохая производительность при отсутствии мемоизации.</p><p>Мемоизация — техника оптимизации, при которой результаты больших вычислений сохраняются и используются еще раз при повторных вызовах функции. Это особенно полезно, если работаете с рекурсиями, которые могут вычислять одни и те же значения много раз.</p><p>Так, функция  в задаче с числами Фибоначчи имеет экспоненциальную сложность O(2^n), так как она многократно вычисляет одни и те же значения. Например, чтобы вычислить fibonacci(5), функция вызывает сама себя 15 раз, хотя уникальных вычислений всего 6.</p><p>Чтобы улучшить производительность, нужно использовать мемоизацию, чтобы сохранить результаты:</p><p>Здесь сложность уменьшается до O(n), так как каждое значение вычисляется только один раз.</p><h2>Стек вызовов и управление памятью</h2><p>Каждый рекурсивный вызов функции добавляет новый элемент в стек вызовов. Это значит, что вызовы складывается в стеке до тех пор, пока не будет достигнут базовый случай. После этого стек начинает разворачиваться, возвращая результаты на каждом уровне.</p><p>Например:</p><p>Так, когда мы вызываем сountdows(3), в стеке появляются новые вызовы:</p><p>call countdown(3)  # → печатает 3</p><p>call countdown(2)  # → печатает 2</p><p>call countdown(1)  # → печатает 1</p><p>call countdown(0)  # → печатает "Старт" и выходит</p><p>Затем стек начинает разворачиваться:</p><ul><li>countdown(0) завершился → удаляется из стека</li><li>countdown(1) завершился → удаляется из стека</li><li>countdown(2) завершился → удаляется из стека</li><li>countdown(3) завершился → удаляется из стека</li></ul><p>Если же в рекурсии нет базового случая, то стек вызовов никогда не освободится, и программа (в нашем случае на Питоне) выдаст ошибку RecursionError.</p><p>Вот пример бесконечной рекурсии:</p><p>В Питоне есть ограничения до 1000 вызовов, чтобы не перегружать стек, но этот лимит можно увеличить:</p><h2>Рекурсия на реальных задачах</h2><p>С базовым случаем и рекурсивным вызовом все понятно, поэтому давайте разбираться на более реальных и сложных примерах — с деревьями, графами и массивами.</p><h3>Обход структуры данных</h3><p>Рекурсия часто используется для обхода деревьев и графов. Например, бинарного дерева — в нем не более двух дочерних узлов (левый и правый). Вот три основных способа обхода:</p><ol><li>Прямой обход (Pre-order): Корень → Левый узел → Правый узел.</li><li>Симметричный обход (In-order): Левый узел → Корень → Правый узел.</li><li>Обратный обход (Post-order): Левый узел → Правый узел → Корень.</li></ol><p>Запишем в виде кода:</p><p>Дерево будет выглядеть так:</p><p>1</p><p>/ \</p><p>2   3</p><p>/ \</p><p>4   5</p><ul><li>Прямой обход: 1 → 2 → 4 → 5 → 3.</li><li>Симметричный обход: 4 → 2 → 5 → 1 → 3.</li><li>Обратный обход: 4 → 5 → 2 → 3 → 1.</li></ul><p>Обходить можно и графы, особенно в глубине (DFS). Вот пример:</p><p>Сам граф:</p><p>Результат обхода: A → B → D → E → F → C.</p><h3>Разбиение</h3><p>Разбить можно массив или строку. Давайте разбираться на примере строки. Так, рекурсия может разбить строку на слова или разделить ее по конкретным символам. Выглядит это так:</p><h2>Что такое хвостовая рекурсия</h2><p>Хвостовая (оконечная) рекурсия — частный случай рекурсии. Главное отличие от обычной в том, что единственный рекурсивный вызов находится в конце перед выходом функции. В традиционной же рекурсии после рекурсивного вызова могут быть дополнительные вычисления.</p><p>Вот пример:</p><p>Кстати, с помощью хвостовой рекурсии тоже можно решать задачи с числами Фибоначчи:</p><p>Некоторые языки программирования (например, Haskell и Scala) поддерживают оптимизацию хвостовой рекурсии. Это означает, что компилятор или интерпретатор преобразует хвостовую рекурсию в итерацию — это помогает избежать переполнение стека.</p><p>Давайте посмотрим, как это работает в Scala. Вот обычная рекурсия, чтобы понять принцип:</p><p>А вот рекурсия с оптимизацией:</p><p>К сожалению, наш любимый Питон такую функцию не поддерживает, но всегда можно преобразовать «хвостика» в итерацию вручную:</p><p>Это пример итеративного решения факториала.</p><h2>Рекурсия vs. итерация</h2><p>Основные различия между рекурсией и итерацией заключаются в следующем:</p><ul><li>В рекурсии функция вызывает саму себя, а в итерации используются циклы.</li><li>Интеграция требует меньше памяти, потому что нет стека вызовов.</li><li>Рекурсия медленнее без оптимизации.</li><li>С рекурсией легко переполнить хранилище при большой глубине.</li><li>Рекурсия обычно более читаемая и лаконичная, но подходит для меньшего количества задач.</li></ul><p>Итерацию лучше использовать в следующих случаях:</p><ul><li>Задачи, где нужна производительность. Как, например, с итеративным вычислением чисел Фибоначчи.</li><li>Обработка больших данных, например, поиск или сортировка. Вот пример пузырьковой сортировки:</li></ul><ul><li>Задачи с большой глубиной рекурсии, чтобы стек не переполнялся. Вот как итеративно обойти дерево:</li></ul><h2>Еще один пример: задача «Ханойские башни»</h2><p>«Ханойские башни» — классная головоломка, которую часто решают с помощью рекурсии. Считайте, что это еще одна классика.</p><p>Есть три стержня: A, B и C. На стержень A нанизано несколько дисков разного размера, причем диски упорядочены по размеру в виде пирамидки — вниз от маленького к большому. Суть в том, чтобы переместить все диски со стержня А на С, при этом: за один раз можно перемещать только один диск, нельзя класть больший диск на меньший, можно использовать стержень B как вспомогательный.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-02-27/c2ccaa24-e4b7-4d2f-8ae8-ac894801834a.png" alt="" /></figure><p>Рекурсивное решение задачи «Ханойские башни» основано на следующей идее:</p><ol><li>Переместить (n−1) дисков с A на B, используя C как промежуточный.</li><li>Переместить оставшийся самый большой диск с A на C.</li><li>Переместить (n−1) дисков с B) на C, теперь используя A как промежуточный.</li></ol><p>Следовательно, если количество дисков n=1, просто переместите его с А на С (базовый случай). В остальных случаях при n–1 повторить то, что указано выше.</p><p>А теперь решение с помощью кода:</p><p>Вывод:</p><p>Поздравляем, вы великолепны. А если хотите еще потренироваться в рекурсии, то можно написать код для поиска пути в лабиринте (кстати, это чем-то напоминает онлайн-карты и навигаторы) или обратного вывода строки.</p>]]></content:encoded>
    </item>
    <item>
      <title>Топ-10 малоизвестных языков программирования, которые могут выстрелить в будущем</title>
      <link>https://tproger.ru/articles/top-10-maloizvestnyh-yazykov-programmirovaniya--kotorye-mogut-vystrelit-v-budushhem</link>
      <comments>https://tproger.ru/articles/top-10-maloizvestnyh-yazykov-programmirovaniya--kotorye-mogut-vystrelit-v-budushhem?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-10-maloizvestnyh-yazykov-programmirovaniya--kotorye-mogut-vystrelit-v-budushhem</guid>
      <description><![CDATA[<p>Языки программирования будущего. Показываем, какие языки наиболее перспективны. Рассматриваем плюсы и минусы каждого Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-10-maloizvestnyh-yazykov-programmirovaniya--kotorye-mogut-vystrelit-v-budushhem">Топ-10 малоизвестных языков программирования, которые могут выстрелить в будущем</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Инструменты командной строки]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Квантовые вычисления]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Интернет вещей]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Анализ данных]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[смарт-контракты]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 07 Feb 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Технологический ландшафт постоянно обновляется, и ведущую роль в продвижении инноваций играют языки программирования. Сегодня большинство продуктов создается на Python, C и C++, Java, JavaScript, PHP, но специалисты постоянно развивают другие инструменты.</p><p>Мы собрали топ-10 малоизвестных и относительно новых языков программирования, которые с высокой долей вероятности могут стать популярными в профессиональной среде.</p><h2>Критерии отбора языков</h2><p>Каждый язык остается востребованным, пока им пользуются для написания кода. Например, COBOL, который появился еще в середине прошлого века, до сих пор применим в банковской системе США, а Fortran — в прикладной математике.</p><p>Однако стремительное развитие компьютерных технологий побуждает к разработке принципиально новых, более эффективных и производительных инструментов. Они могут выполнять сугубо утилитарные задачи (вроде управления системами и устройствами), или становятся универсальными средствами программирования.</p><p>Иногда даже сами создатели языка не подозревают, какой продукт у них появился. Так случилось с С, который разработали американские программисты Керниган и Ритчи. Они всего лишь хотели перенести любимую игру с сервера на офисный компьютер, но поскольку действующая операционка не подходила для этих целей, пришлось создавать новый язык. Теперь им пользуются миллионы программистов во всем мире.</p><p>В топ языков программирования входят перспективные для развития инструменты. При отборе мы пользовались экспертными данными, собранными из авторитетных профессиональных источников. Рассмотрим ключевые факторы.</p><h3>Технологический прогресс</h3><p>Языки программирования развиваются параллельно с техническим прогрессом. К числу наиболее актуальных направлении в современной индустрии относятся:</p><ul><li>Искусственный интеллект. Для разработки таких технологий и управления ими нужны языки, способные продуктивно работать со сложными алгоритмами, массивами данных и параллельными вычислениями.</li><li>Квантовые технологии. Новые архитектурные концепции могут «заставить» нас использовать абсолютно непривычные языки.</li><li>Мобильные устройства и IoT. Эта отрасль задает тренд на развитие легких по структуре и более производительных языков, которые работают со встраиваемыми системами.</li><li>Аппараты. Распространение многоядерных процессоров и распределенных по разным компьютерам систем повышает потребность в языках программирования, поддерживающих параллелизм.</li><li>Блокчейн. Да, чтобы проводить смарт-контракты и писать децентрализованные приложения, привычных языков может быть недостаточно.</li></ul><h3>Отраслевые потребности</h3><p>На развитие и востребованность языков программирования влияют и потребности различных отраслей. Например, финансовый сектор нуждается в языках, которые обеспечивают максимальный уровень безопасности и надежности. К таким языкам можно отнести, например, F#.</p><p>В сфере здравоохранения нужны языки, которые упрощают анализ данных диагностики или используются для машинного обучения систем, задействованных в прогнозировании заболеваний. Таким инструментом может стать, например, Solidity. Созданный на этом языке софт на основе ИИ можно применять для аналитики диагностических данных с последующим прогнозированием течения заболеваний.</p><p>В игровой индустрии нужны языки, которые обеспечивают высокую производительность и возможность реализации интерактивных технологий гейминга (например, дополненную реальность) в онлайн-режиме.</p><h3>Тренды в сообществах разработчиков</h3><p>Еще один значимый фактор отбора программных языков — потребности сообщества разработчиков. Профи и любители ориентируются на простоту синтаксиса, наличие библиотек и фреймворков, легкость в использовании инструмента для выполнения реальных задач.</p><p>По этой причине языки с открытым исходным кодом и популярные «народные» продукты с активными сообществами развиваются быстрее. Они способствуют обширной инфраструктуре в виде вспомогательных инструментов и ресурсов.</p><h2>Топ-10 языков программирования</h2><p>Рассмотрим уникальные особенности, сильные стороны и сферы применения языков программирования, которые обладают большим потенциалом.</p><h3>Zig</h3><p>Этот язык в последнее время стал одним из самых обсуждаемых в профессиональном сообществе. В популярных профильных изданиях его даже называют «новой звездой на небосводе современной разработки».</p><p>Его создатель, американский программист Эндрю Келли, ставил задачу объединить плюсы низкоуровневого программирования с надежностью и удобством высокоуровневых языков.</p><p>Это типизированный компилируемый инструмент с инновационными концепциями в основе. Статическая типизация отвечает за максимальную надежность кода и позволяет выявить большинство ошибок еще до выполнения программ.</p><p>Основные плюсы:</p><ul><li>продукты на Zig отличаются стабильностью, безопасностью и простотой дальнейшей поддержки;</li><li>язык можно использовать для разработки низкоуровневого ПО в качестве легковесной альтернативы C;</li><li>выполнение кода в процессе компиляции и ручное управление памятью делает работу более простой и безопасной;</li><li>производительность Zig делает его подходящим инструментом для системного программирования и создания приложений с лимитированными ресурсами.</li></ul><p>Язык будет все активнее использоваться в проектах, где важны производительность и максимальный уровень контроля. Он идеально подходит для разработки игр, сетевого и системного программирования.</p><p>Код на Zig выглядит следующим образом:</p><p>Пример проекта на Zig — репозиторий <a href="https://github.com/zig-gamedev/zig-gamedev?tab=readme-ov-file"> Zig-gamedev</a> для разработки игр на этом языке.</p><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/7234e496-77ad-449e-a43f-8e3421220993.jpg" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/f6f7a616-44a0-45ad-9ebc-17c9c4f5421e.png" alt="" /></figure><p>Готовый продукт, созданный на основе модулей библиотеки — фэнтезийная игра от первого лица и с открытым миром Tides of Revival.</p><h3>Crystal</h3><p>Язык с Ruby-подобным, предельно простым синтаксисом и высокой производительностью. Как и Zig, он статически типизирован и компилируем. Объединяет ясность и простоту Ruby с эффективностью и скоростью C.</p><p>В числе главных преимуществ Crystal:</p><ul><li>сходство с синтаксисом Ruby делает его предельно простым для изучения;</li><li>по производительности Crystal не уступает самым востребованным компилируемым языкам;</li><li>проверка в процессе компиляции и глобальный вывод типов позволяют выявлять ошибки на ранних этапах разработки, поэтому язык оптимален для создания приложений.</li></ul><p>Производительность, безопасность и простота применения делают Crystal отличным выбором для написания сценариев, в том числе высокого уровня. На этом языке разрабатывают инструменты командной строки, микросервисы и веб-продукты различной степени сложности. По мере развития фреймворков и библиотек Crystal становится все более востребованным и имеет все шансы войти в число основных языков для разработки приложений.</p><p>Примеры сервисов, созданных на Crystal:</p><ul><li>Kinko booking — платформа для бронирования гостиниц в туристических агентствах в режиме реального времени;</li><li>Eat App — облачные приложения автоматизации для ресторанного бизнеса, повышающие эффективность работы предприятий;</li><li>Nabobil.no — европейский каршеринг.</li></ul><p>Пример кода наглядно демонстрирует лаконичность Crystal:</p><p>puts “Hello World!”</p><h3>Elixir</h3><p>Язык, в котором реализована функциональная методика создания кода, построен на базе виртуальной машины  Erlang. Использует динамическую типизацию переменных, подходит для работы с распределенными системами.</p><p>Главные плюсы:</p><ul><li>динамичность и функциональность языка позволяют использовать его для разработки масштабируемых и отказоустойчивых приложений;</li><li>поскольку код выстраивается из процессов, он отлично справляется с параллелизмом и одновременным выполнением множества задач, в том числе на разных устройствах;</li><li>идеально подходит для создания и поддержки распределенных систем, а также приложений реального времени;</li><li>системы на Elixir продолжают работу даже при отказе нескольких составных частей.</li></ul><p>Язык будет все чаще использоваться для разработки масштабируемых, распределенных и отказоустойчивых бэкенд-систем. Это относится к игровым онлайн-платформам, информационным ресурсам реального времени и другим приложениям с большим трафиком. Поскольку спрос на такие продукты только растет, будущее Elixir выглядит вполне определенным.</p><p>Код тоже предельно лаконичен:</p><p>IO.puts(“Hello, World!”)</p><p>На Elixir создан фреймворк <a href="https://github.com/phoenixframework/phoenix">Phoenix</a>, который содержит модули для разработки быстро масштабируемых приложений.</p><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/e8f90602-b194-4714-b535-b7839a2ebc95.png" alt="" /><figcaption>Фреймферк Phoenix</figcaption></figure><h3>Nim</h3><p>Этот статически-типизированный и компилируемый язык развивает концепции Ada, Modula, Python, но стремится превзойти их по эффективности и выразительности.</p><p>Основные преимущества:</p><ul><li>язык используется для метапрограммирования — то есть для настройки и генерации кода;</li><li>универсальный синтаксис позволяет применять Nim как для веб-разработки, так и для научных вычислений и работы с большими данными;</li><li>поскольку язык компилируемый, разработчик может использовать для работы не только собственные библиотеки, но и фреймворки на C и C++.</li></ul><p>Nim уже сейчас применяется для веб-разработки, системного программирования и создания сценариев. Однако его универсальность, эффективность и возможность  метапрограммирования делают его инструментом с большим потенциалом, в том числе в сфере разработки продуктов на основе ИИ.</p><p>Код на Nim с последующим компилированием:</p><p>Самые известные фреймворки на Nim —  это <a href="https://github.com/dom96/jester">Jester</a> и <a href="https://github.com/karaxnim/karax">Karax</a>. Первый используется для серверной разработки, второй — для клиентской. Обе библиотеки есть в свободном доступе на GitHub.</p><h3>F#</h3><p>Функционально ориентированный язык, работающий на базе экосистемы .NET — кроссплатформенной среды для разработки приложений.</p><p>Преимущества F#:</p><ul><li>лаконичный и ясный синтаксис, относительно простой для понимания;</li><li>надежный вывод типов, что позволяет использовать F# для машинного обучения, анализа массивов данных и параллельного программирования;</li><li>благодаря безопасности подходит для разработки приложений, работающих с конфиденциальными данными в финансовой сфере.</li></ul><p>Поскольку вся финансовая отрасль постепенно уходит в цифру, а системы становятся все более сложными, F#, как производительный и точный инструмент, все чаще будет использоваться для создания ПО, в котором важна надежность и предельная корректность выполняемых операций.</p><p>В плане лаконичности F# вполне сравним с предыдущими примерами:</p><p>printfn “Hello, world!”</p><p><a href="https://github.com/giraffe-fsharp/Giraffe#giraffe">Giraffe</a> — популярная библиотека на F# для разработки веб-приложений с высокой производительностью и безопасностью.</p><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/d1fb7e13-8df1-4d82-a7dc-b0e39f088c02.png" alt="" /></figure><p>Еще один полезный фреймворк на этом языке — <a href="https://saturnframework.org/">Saturn</a>.</p><h3>Julia</h3><p>Высокопроизводительный и высокоуровневый язык с динамической типизацией. Изначально создавался для сложных математических вычислений и анализа данных. Объединяет скорость C++ и простоту Python.</p><p>Плюсы Julia:</p><ul><li>высокая скорость, благодаря компиляции Just-In-Time и множеству опций диспетчеризации, делают язык предпочтительным инструментом для сложных вычислений и анализа данных;</li><li>подходит для создания эффективного нативного кода для исполнения алгоритмов на реальном оборудовании;</li><li>язык постоянно обновляется и совершенствуется.</li></ul><p>Способность Julia обрабатывать большие массивы данных и работать со сложными задачами применяется для глубокого обучения, а также разработки ИИ. Язык используется для научных исследований в экономике, физике, астрономии и других дисциплинах. Благодаря тому, что сообщество Julia постоянно растет, а библиотеки регулярно пополняются, язык имеет большой потенциал в науке и машинном обучении.</p><p>Простой сценарий на Julia выглядит так:</p><p>Примеры библиотек на Julia для научных разработок по астрофизике <a href="https://juliaastro.github.io/">JuliaAstro</a>, <a href="https://github.com/JuliaSpace">JuliaSpace</a>, по биологии и химии: <a href="https://biojulia.net/">JuliaBio</a>, <a href="https://github.com/JuliaMolSim">Molecular simulations</a>, по экономике:  <a href="https://julia.quantecon.org/">QuantEcon</a>, <a href="https://github.com/JuliaQuant">JuliaQuant</a>.</p><h3>Scala</h3><p>Этот язык считается флагманом функционального программирования, то есть работает не с конкретными переменными, а с функциями, которые их описывают. Scala компилируется в Java и может использоваться там, где применяется этот язык (практически везде).</p><p>Преимущества:</p><ul><li>объектно-ориентированный подход позволяет создавать более четкий и структурированный код для широкого спектра продуктов;</li><li>лаконичность — простой и краткий синтаксис более удобен, он быстрее пишется и читается;</li><li>код на Scala кроссплатформенный и запускается где угодно, поэтому программистам не нужно думать о совместимости.</li></ul><p>Масштабируемость Scala и его универсальность позволят этому языку в будущем частично заменить Java и в полной мере реализовать концепцию функционального программирования во множестве проектов.</p><p>Код на Scala:</p><p>@main def hello() = println(“Hello, World!”)</p><p>Библиотека <a href="https://github.com/scala-js/scala-js">Scala.js</a> компилирует этот язык в JavaScript. Этого инструмента достаточно, чтобы начать разработку с объектно-ориентированным подходом.</p><h3>Red</h3><p>Минималистичный, лаконичный по синтаксису, но при этом функционально полноценный язык был создан как универсальный инструмент для решения самого широкого круга задач — от написания сценариев до низкоуровневого системного программирования.</p><p>Ключевые преимущества:</p><ul><li>простота синтаксиса, легкость в освоении и использовании делают Red идеальным инструментом для начинающих программистов;</li><li>несмотря на минималистичность, язык обладает мощью и гибкостью, что позволяет использовать его для приложений любого уровня сложности;</li><li>есть множество GUI-библиотек, которые существенно упрощают написание кода на Red.</li></ul><p>Сейчас применение языка ограничивается локальными проектами, но эксперты уверены, что его широкое распространение — вопрос времени. Способность поддерживать как высоко-, так и низкоуровневые проекты позволяет рассчитывать, что Red войдет в число наиболее востребованных языков для мобильной и веб-разработки, IoT, создания драйверов и графических интерфейсов.</p><p>Код на Red:</p><p>На Red написан проект <a href="https://github.com/glebdmitriew/smartXML">SmartXML</a>, предназначенный для хранения и передачи структурированных данных. Он также поддерживает вычисления с большими числами и используется в прикладной математике.</p><h3>Ballerina</h3><p>Язык с открытым исходным кодом, специально созданный для работы с облачными технологиями и разработки сетевых сервисов.</p><p>Плюсы Ballerina:</p><ul><li>использует объектно-ориентированный подход и существенно упрощает обработку данных;</li><li>идеально подходит для работы с микросервисами;</li><li>совмещает функции языка и платформы для интеграции веб-сервисов, поддерживает множество протоколов.</li></ul><p>По мнению экспертного сообщества, Ballerina имеет все шансы стать со временем новым стандартом в разработке облачных структур и веб-сервисов, благодаря разнообразным встроенным инструментам.</p><p>Код на Ballerina выглядит следующим образом:</p><p>На языке, в частности, написано расширение <a href="https://choreo.dev/">Choreo</a> для создания, развертывания и тестирования облачных приложений непосредственно из редактора Visual Studio Code.</p><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/d6cf2389-97e1-46e1-9375-1f264ed125cd.png" alt="" /></figure><h3>Solidity</h3><p>Высокоуровневый язык, разработанный для виртуальной машины Ethereum. Функционирует на основе блокчейна и смарт-контрактов. Синтаксис Solidity напоминает Python, при этом язык основан на принципиально иных концепциях.</p><p>Плюсы Solidity:</p><ul><li>позволяет быстро и эффективно создавать смарт-контракты, не испытывая технических сложностей;</li><li>относительно прост для освоения для тех, кто знаком с Python и Java.</li></ul><p>Большинство экспертов считают, что со временем смарт-контракты будут использоваться практически во всех отраслях промышленности, где есть цифровые технологии. Уже сегодня смарты применяют для управления цепями поставок, а также в сфере здравоохранения для сохранения конфиденциальности данных пациентов.</p><p>Создание смарт-контракта на Solidity выглядит так:</p><p>На Solidity работают децентрализованные проекты типа Uniswap и Compound, где можно брать кредиты в крипте без посредников, а также NFT-маркетплейсы OpenSea и Rarible.Игра<a href="https://www.cryptokitties.co/"> Cryptokitties</a> для покупки, разведения и продажи виртуальных кошек тоже написана на этом языке.</p><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/f8295011-b3a6-402d-a281-2711f1e10f39.png" alt="" /></figure><h2>Как выбрать язык для изучения</h2><p>При выборе перспективного языка программирования разработчику в первую очередь стоит учитывать область своих профессиональных интересов. Собственные инструменты есть в сферах веб-приложений, игр, продуктов на основе ИИ, программ для аналитики данных.</p><p>Аспекты, на которые стоит обязательно обратить внимание —  активность сообщества и наличие подробной документации. Все языки из представленного нами списка развиваются и имеют обширную аудиторию пользователей.</p><p>Значение имеют и вспомогательные инструменты — библиотеки и фреймворки. Готовые решения значительно упрощают как освоение языка, так и разработку конкретных продуктов для прикладных задач.</p><p>Следите за трендами ИТ-индустрии. Направления с серьезным потенциалом развития в ближайшие 10 лет: ИИ; квантовые вычисления; интернет вещей; блокчейн и смарт-контракты; автоматизация и робототехника.</p><p>Изучив новые языки раньше других, вы сможете опередить рынок и стать востребованным специалистом с минимальной конкуренцией. Если вы новичок, вы дадите мощный старт своей карьере разработчика.</p><p>А если хотите изучить хотя бы один из языков (или просто присматриваетесь) — все самые полезные инструменты <a href="https://t.me/+Qi8OJ_0gQZUyMWEy">тут</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Названа худшая фича языка Rust</title>
      <link>https://tproger.ru/news/--nazvana-hudwaya-ficha-yazyka-rust</link>
      <comments>https://tproger.ru/news/--nazvana-hudwaya-ficha-yazyka-rust?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/--nazvana-hudwaya-ficha-yazyka-rust</guid>
      <description><![CDATA[<p>BorrowedBuf, ночная функция Rust для оптимизации работы с буферами в I/O-операциях, подверглась критике за сложность использования, проблемы совместимости и ограниченную универсальность</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/--nazvana-hudwaya-ficha-yazyka-rust">Названа худшая фича языка Rust</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 28 Jan 2025 01:37:30 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>BorrowedBuf</b> — это ночная функция Rust, созданная для оптимизации работы с буферами в операциях ввода-вывода (I/O).</p><p>Она позволяет работать с неинициализированной памятью и отслеживает, какая её часть уже использована.</p><p>Это должно решать проблему избыточной инициализации, как в примере ниже, где буфер заполняется нулями при каждой итерации, несмотря на то, что read перезаписывает данные:</p><h2>Проблемы BorrowedBuf</h2><p>Однако BorrowedBuf <a href="https://mina86.com/2025/rusts-worst-feature/">вызывает</a> множество нареканий. Основные из них:</p><ol><li><b>Совместимость с существующим кодом:</b> BorrowedBuf требует поддержки со стороны API, таких как read_buf. Если её нет, Rust будет заполнять буфер нулями, сводя на нет всю оптимизацию. Это вызывает проблемы с библиотеками, которые не обновлялись или больше не поддерживаются, например hex или base64.</li><li><b>Отсутствие универсальности:</b> функция работает только с u8. Это ограничивает его использование в библиотеках, таких как rand, которые оперируют разными типами данных.</li><li><b>Сложность использования:</b> BorrowedBuf требует глубокого понимания, чтобы избежать ошибок. Например, неправильное использование может привести к тому, что буфер всё равно будет инициализироваться, несмотря на видимую оптимизацию.</li><li><b>Логическая путаница:</b> Модель BorrowedBuf разделяет память на инициализированные и неинициализированные части, что делает её сложной для понимания. Аналогия с Vec могла бы сделать API более интуитивным.</li></ol><h2>Возможные альтернативы</h2><p>Идеальная альтернатива BorrowedBuf пока не найдена. Одно из предложений — замораживание (freeze) неинициализированной памяти, что позволило бы безопасно работать с ней, как с инициализированной.</p><p>Однако это потребовало бы изменений в языковых семантиках Rust, включая механизмы управления страницами памяти (например, MADV_FREE).</p>]]></content:encoded>
    </item>
    <item>
      <title>Разработчик поделился опытом написания и публикации своей первой технической книги</title>
      <link>https://tproger.ru/news/razrabotchik-podelilsya-opytom-napisaniya-i-publikacii-svoej-pervoj-tehnicheskoj-knigi</link>
      <comments>https://tproger.ru/news/razrabotchik-podelilsya-opytom-napisaniya-i-publikacii-svoej-pervoj-tehnicheskoj-knigi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/razrabotchik-podelilsya-opytom-napisaniya-i-publikacii-svoej-pervoj-tehnicheskoj-knigi</guid>
      <description><![CDATA[<p>Разработчик поделился опытом написания первой книги о софтверной архитектуре, выпустив её через самиздат на Leanpub. Продажи превысили 800 копий</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/razrabotchik-podelilsya-opytom-napisaniya-i-publikacii-svoej-pervoj-tehnicheskoj-knigi">Разработчик поделился опытом написания и публикации своей первой технической книги</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 20 Jan 2025 03:26:57 GMT</pubDate>
      <content:encoded><![CDATA[<p>Автор книги «Master Software Architecture» <a href="https://newsletter.fractionalarchitect.io/p/45-the-raw-truth-about-self-publishing">поделился</a>, как пришёл к идее написать свою первую техническую литературу.</p><p>Его путь в программировании начался в 2012 году, а через годы работы и консалтинга он заметил, «как важно создавать простые и гибкие системы».</p><p>Вдохновлённый отзывами коллег, он решил поделиться своим опытом в... книге. В 2024 году разработчик оставил работу, чтобы полностью сосредоточиться на написании.</p><p>После голосования в LinkedIn, он выбрал тему и за 5 месяцев создал книгу.</p><h2>Почему самиздат</h2><p>Автор решил не обращаться к издательствам, а выпустить книгу самостоятельно. Такой подход позволил сохранить творческую свободу и получить больше дохода с продаж — до 80-90% от электронных книг.</p><p>Для публикации он выбрал платформу Leanpub, где уже издавались многие известные авторы.</p><p>Самиздат потребовал дополнительных усилий: поиск редакторов, организация бета-чтения и самостоятельное продвижение. Но всё это позволило сделать проект именно таким, каким его задумал автор.</p><h2>Что получилось</h2><p>С момента публикации книга была продана в количестве 810 копий, из которых 728 — электронные. Автор заработал более $11 000, потратив около $1 000 на редактирование и ещё немного на маркетинг. Читатели высоко оценили труд, поставив ему рейтинг 4.83 на Goodreads.</p><p>Работа над книгой оказалась сложной, но интересной. Автор писал по 5-20 страниц в день и часто корректировал свои планы. Отзывы бета-читателей и помощь коллег стали важной частью процесса.</p>]]></content:encoded>
    </item>
    <item>
      <title>Какие языки программирования учить в 2026 году</title>
      <link>https://tproger.ru/articles/kakie-yazyki-programmirovaniya-uchit-v-2025-godu</link>
      <comments>https://tproger.ru/articles/kakie-yazyki-programmirovaniya-uchit-v-2025-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[МТС]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kakie-yazyki-programmirovaniya-uchit-v-2025-godu</guid>
      <description><![CDATA[<p>Рейтинг 7 языков для изучения в 2026: Python, TypeScript, JavaScript, Java, C++, Go, 1С. Зарплаты, рейтинги TIOBE и GitHub, перспективы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kakie-yazyki-programmirovaniya-uchit-v-2025-godu">Какие языки программирования учить в 2026 году</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Конференции]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 28 Dec 2024 16:29:20 GMT</pubDate>
      <content:encoded><![CDATA[<p><i>Это обновлённая версия статьи. Первая версия вышла в декабре 2024 года. Все данные актуализированы по состоянию на март 2026: рейтинги TIOBE и GitHub Octoverse 2025, зарплаты по данным Хабр Карьеры за H2 2025.</i></p><p>Мир IT стремительно меняется и диктует новые требования к разработчикам. Поэтому каждый год мы составляем топ языков программирования, на которые стоит обратить внимание будущим и уже опытным айтишникам.</p><p>TypeScript впервые стал #1 на GitHub, обогнав Python и JavaScript</p><p>Python по-прежнему лидирует в TIOBE (21,25%), но потерял 2,59 п.п. за год</p><p>Go упал с 7-й на 16-ю позицию в TIOBE — самое неожиданное падение года</p><p>Самые высокие зарплаты в РФ у Go-разработчиков — 320 000 ₽ (медиана)</p><p>Рост зарплат в IT остановился: +19% (H2’2024) → 0% (H2’2025)</p><p>На что мы опирались при составлении этого обзора:</p><p><a href="https://www.tiobe.com/tiobe-index/"><b>TIOBE Index</b></a> (март 2026) — отслеживает популярность языков программирования на основе поисковых запросов, упоминаний в новостях, научных статьях и на форумах.</p><p><a href="https://github.blog/news-insights/octoverse/"><b>GitHub Octoverse 2025</b></a> — рейтинг на основе статистики GitHub. Показывает, какие языки используют в репозиториях и какие проекты популярны среди пользователей.</p><p><a href="https://habr.com/ru/companies/habr_career/articles/994308/"><b>Данные Хабр Карьеры</b></a> (H2 2025) по медианным зарплатам программистов, работающих с разными языками.</p><p>В статье рассмотрим:</p><ol><li>Python;</li><li>TypeScript;</li><li>JavaScript;</li><li>Java;</li><li>C++;</li><li>Golang (Go);</li><li>1С.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-03-28/e28005cf-079c-46ff-81c3-34c933644f4b.webp" alt="Рейтинг TIOBE Index за март 2026 — топ-20 языков программирования" /><figcaption>Рейтинг TIOBE Index, март 2026</figcaption></figure><h2>Python</h2><h4>Популярность</h4><p>Python уверенно удерживает первое место в рейтинге TIOBE с долей 21,25%, хотя за год потерял 2,59 процентных пункта. На GitHub он опустился на 2-е место, уступив TypeScript. При этом по числу новых репозиториев Python вырос на 53% за год — 9,26 млн новых репо.</p><h4>Уровень зарплат</h4><p>Медианная зарплата Python-разработчиков во втором полугодии 2025 составила 229 000 ₽ (+8% к H1 2025). Python показывает стабильный рост зарплат на фоне общего замедления рынка.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-03-28/029ffc87-9101-4b5a-a31c-fac155701b9e.webp" alt="Медианные зарплаты разработчиков в России по языкам программирования, H2 2025" /><figcaption>Зарплаты разработчиков в России, H2 2025 (данные Хабр Карьеры)</figcaption></figure><h4>Перспективы</h4><p>Python — ключевой инструмент для анализа данных, машинного обучения, автоматизации и веб-разработки. Бум ИИ продолжается: 1,1 млн публичных репозиториев на GitHub используют LLM SDK (+178% за год), и Python остаётся языком #1 для ИИ-проектов.</p><h2>TypeScript</h2><h4>Популярность</h4><p>TypeScript совершил исторический прорыв: в августе 2025 он впервые стал языком #1 на GitHub по числу контрибьюторов, обогнав Python и JavaScript. GitHub назвал это «самым значительным сдвигом за десятилетие». Рост числа контрибьюторов — +66,63% за год, а новых репозиториев стало на 78% больше.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-03-28/a0cd41c6-09b2-4528-a41a-2686ac0232f6.webp" alt="Топ языков программирования на GitHub в 2025 году — TypeScript, Python, JavaScript" /><figcaption>GitHub Octoverse 2025: TypeScript стал языком #1</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-03-28/faff8b10-35fc-496a-9a58-eeeeaf6e2fcf.webp" alt="Топ-10 языков программирования на GitHub 2023-2025 — TypeScript обогнал Python и JavaScript" /><figcaption>Динамика топ-10 языков на GitHub, 2023–2025</figcaption></figure><p>В рейтинге TIOBE TypeScript пока не вошёл в топ-10, но это объясняется методологией индекса: TIOBE считает поисковые запросы, а не реальное использование.</p><h4>Уровень зарплат</h4><p>В российских зарплатных обзорах TypeScript обычно объединяют с JavaScript. Медиана для JavaScript/TypeScript-разработчиков во втором полугодии 2025 — 241 000 ₽ (+11%).</p><h4>Перспективы</h4><p>TypeScript популярен в веб- и мобильной разработке, облачных и корпоративных приложениях. Главная причина роста — ИИ: строгая типизация TypeScript делает код, сгенерированный Copilot и другими ИИ-ассистентами, безопаснее для продакшена. Крупные фреймворки теперь по умолчанию генерируют проекты на TypeScript.</p><h2>JavaScript</h2><h4>Популярность</h4><p>JavaScript сохранил 6-ю позицию в TIOBE (3,45%) и опустился на 3-е место на GitHub, уступив TypeScript. Но важно понимать: JavaScript + TypeScript вместе по-прежнему образуют крупнейшую экосистему. По числу новых репозиториев JavaScript всё ещё лидирует — 9,35 млн (+14,6%).</p><h4>Уровень зарплат</h4><p>Медианная зарплата JavaScript/TypeScript-программистов во втором полугодии 2025 составила 241 000 ₽ (+11%). Это один из самых заметных ростов среди всех языков.</p><h4>Перспективы</h4><p>JavaScript остаётся фундаментом веб-разработки, хотя многие проекты мигрируют на TypeScript. В России спрос на JS-разработчиков стабильно высок благодаря цифровизации бизнеса и импортозамещению. Node.js позволяет использовать его как для фронтенда, так и для бэкенда.</p><h2>Java</h2><h4>Популярность</h4><p>Java опустился на 4-е место в TIOBE (7,99%, -2,37 п.п.), но это всё ещё один из крупнейших языков мира. На GitHub Java держится на 4-м месте с устойчивым ростом контрибьюторов (+20,7%).</p><h4>Уровень зарплат</h4><p>Медианная зарплата Java-разработчиков — 226 000 ₽ (+1% к H1 2025). Рост минимальный, но стабильный.</p><h4>Перспективы</h4><p>Java активно используют в корпоративных приложениях, банковских сервисах и Android-приложениях. В России появилась отечественная IDE — OpenIDE — для работы с Java и другими языками. Это хороший сигнал для развития экосистемы.</p><h2>C++</h2><h4>Популярность</h4><p>C++ опустился с 2-й на 3-ю позицию в TIOBE (8,18%), уступив место языку C. На GitHub C++ стабильно входит в топ-6 языков по использованию.</p><h4>Уровень зарплат</h4><p>Медианная зарплата разработчиков на C++ — 241 000 ₽ (+14% за полугодие). Это самый сильный рост среди всех языков во втором полугодии 2025.</p><h4>Перспективы</h4><p>C++ остаётся основным инструментом для геймдева, встроенного ПО и высокопроизводительных систем. Рост зарплат на 14% объясняется спросом в embedded-разработке и оборонном секторе. Изучать C++ как первый язык непросто, но после него легко освоить другие языки.</p><h2>Golang (Go)</h2><h4>Популярность</h4><p>Go показал самое неожиданное падение года: с 7-й на 16-ю позицию в TIOBE (-1,49 п.п.). Однако это не значит, что язык теряет актуальность — TIOBE меряет поисковые запросы, а не реальное использование. На практике Go остаётся одним из самых востребованных языков в России.</p><h4>Уровень зарплат</h4><p>И вот главный аргумент: Go-разработчики получают самые высокие зарплаты среди всех языков в нашем рейтинге. Медиана — 320 000 ₽ (+4% к H1 2025). Это на 37 000₽ больше, чем у C# и на 91 000₽ больше, чем у Python.</p><h4>Перспективы</h4><p>Go остаётся языком выбора для микросервисов, высоконагруженных систем и облачных сервисов. Простота синтаксиса и высокая производительность делают его отличным выбором для бэкенд-разработки, особенно в финтехе.</p><h2>1С</h2><h4>Популярность</h4><p>Этого языка нет в международных рейтингах TIOBE и GitHub — в наш топ он попал вне конкурса. 1С использует большинство компаний России для бухучёта, управления торговлей и расчёта зарплат.</p><h4>Уровень зарплат</h4><p>Медиана для 1С-программистов — 200 000 ₽. Рост зарплат остановился (0% во втором полугодии 2025). На рынке переизбыток джунов, но синьоры 1С по-прежнему в дефиците.</p><h4>Перспективы</h4><p>Спрос на 1С-разработчиков стабилен благодаря импортозамещению: компании переходят на отечественное ПО. 1С — идеальный шанс войти в IT для тех, кто не уверен в английском.</p><p>Кстати, мы уже публиковали статью <a href="https://tproger.ru/articles/stoit-li-uchitsya-programmirovaniyu-na-1s">«Стоит ли учиться программированию на 1С»</a> — там можно узнать все за и против.</p><h2>Окей, так какой язык выбрать в итоге?</h2><p>Зависит от ваших интересов и направления, в котором планируете развиваться.</p><p>— Хотите строить карьеру в области ИИ, анализа данных или автоматизации — обратите внимание на <b>Python</b>. Это лучший старт для новичков.</p><p>— Для веб-разработки и фулстека — <b>TypeScript</b> (язык #1 на GitHub) или <b>JavaScript</b>. TypeScript становится стандартом для новых проектов.</p><p>— Хотите максимальную зарплату и работу в финтехе — выбирайте <b>Go</b>. Медиана 320 000₽ — это на 40% больше, чем у Python.</p><p>— Универсальный и стабильный выбор — <b>Java</b>. Корпоративные приложения, банки, Android — Java подходит для любых задач.</p><p>— Геймдев, embedded, системы реального времени — <b>C++</b>. Зарплаты выросли на 14% за полгода.</p><p>— Для работы в российских компаниях — <b>1С</b>. Идеальный шанс войти в IT без английского.</p><p>В комментариях можно дополнить наш обзор — и поделиться своим опытом. Так статья будет еще полезнее!</p><p><i>Если бы вы составляли топ языков для изучения в 2026 году, какие ЯП туда бы включили и почему?</i></p>]]></content:encoded>
    </item>
    <item>
      <title>5 лучших языков программирования для создания нейросетей</title>
      <link>https://tproger.ru/articles/5-luchwih-yazykov-programmirovaniya-dlya-sozdaniya-nejrosetej-253661</link>
      <comments>https://tproger.ru/articles/5-luchwih-yazykov-programmirovaniya-dlya-sozdaniya-nejrosetej-253661?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[МТС]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/5-luchwih-yazykov-programmirovaniya-dlya-sozdaniya-nejrosetej-253661</guid>
      <description><![CDATA[<p>Топовые языки для программирования нейросетей — Python, Java, C#, С++.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/5-luchwih-yazykov-programmirovaniya-dlya-sozdaniya-nejrosetej-253661">5 лучших языков программирования для создания нейросетей</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Язык R]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 25 Dec 2024 13:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Последние два года весь мир наблюдает за бумом нейросетей. Они готовы в режиме 24/7 генерировать для нас картинки, делать рефераты, переводить тексты, писать код… Этот список можно продолжать до бесконечности. Поэтому неудивительно, что разработчики нейросетей востребованы на IT-рынке.</p><p>Если вы тоже хотите заниматься машинным обучением, очень важно выбрать первый язык программирования — от этого будет зависеть скорость вашего прогресса и поиска первой работы.</p><p>В статье рассмотрим плюсы и минусы языков, на которых обучают нейросети. Выбор за вами!</p><h2>Кто и как создаёт нейросети</h2><p>Начнём с азов.</p><p>Нейросетями занимаются ML-инженеры — специалисты по машинному обучению.</p><p>Чтобы создать нейросеть, нужно пройти следующие этапы:</p><ul><li><b>сбор данных </b>— это могут быть изображения, тексты, аудиозаписи или что-то ещё. Например, если хотим создать нейросеть, которая распознаёт породы кошек, нужно много фотографий кошек</li><li><b>подготовка данных </b>— полученные данные обрабатывают, чтобы их было удобно использовать для обучения нейросети. Например, изображения могут быть уменьшены или преобразованы в числовой формат</li><li><b>выбор модели </b>— инженеры выбирают архитектуру нейросети, то есть её «строение». Это как чертёж, который определяет, как данные будут передаваться через сеть и как она будет принимать решения</li><li><b>обучение модели </b>— нейросеть обучается на подготовленных данных — в нашем примере «учится» распознавать особенности изображений кошек, корректируя свои веса и параметры</li><li><b>проверка модели </b>— после обучения модель проверяется на новых данных, которые она ранее не видела. Это нужно, чтобы удостовериться, что она научилась обобщать знания, а не просто «запомнила» входные данные</li><li><b>настройка и оптимизация </b>— если модель не даёт достаточно хороших результатов, её могут настраивать и оптимизировать, чтобы улучшить производительность</li></ul><p>Таким образом, создание нейросетей — процесс, включающий сбор данных, выбор модели, обучение, проверку и, при необходимости, настройку.</p><h2>Языки машинного обучения</h2><h3>Python</h3><p>Самый популярный язык программирования этого года <a href="https://www.tiobe.com/tiobe-index/">по версии TIOBE</a>, а также № 1 в машинном обучении. По данным ChatGPT и Google Bard, они созданы с использованием Python и фреймворков для глубокого обучения TensorFlow и PyTorch.</p><p>Плюсы Python:</p><ul><li>простой синтаксис, который может легко освоить даже новичок в программировании. Также это плюс и для опытных инженеров — вместо того чтобы думать, как обойти технические сложности языка, они могут сконцентрироваться на решении задач машинного обучения</li><li>большое количество библиотек и фреймворков, которые помогают в создании ML-моделей и ускоряют разработку. Например, TensorFlow, Keras, Scikit-learn и Pandas</li><li>Python легко интегрируется с другими языками программирования, что полезно при работе с библиотеками и инструментами, написанными на других языках</li></ul><p>Минусы Python:</p><ul><li>в некоторых случаях Python может быть несколько медленнее по сравнению с низкоуровневыми языками, такими как C++ или Java. Это особенно актуально для высоконагруженных систем или задач, требующих высокой производительности</li></ul><h3>Java</h3><p>Ещё один популярный выбор ML-инженеров, которые ценят стабильность, надёжность и производительность. Java использовали для создания чат-бота A.L.I.C.E., выпущенного в 1995 году, мобильных роботов для исследований полярного круга и движка для разработки рекомендательных систем Seldon Server.</p><p>Плюсы Java:</p><ul><li>Java — кроссплатформенный язык программирования. Поэтому код на этом языке без изменений работает на любых операционных системах. Это особенно важно при создании нейросетей, предназначенных для использования в разных средах</li><li>Java известен стабильностью и надёжностью, что может быть серьёзным плюсом при разработке критически важных систем, например в области медицины и финансов</li><li>Java имеет большую библиотеку и фреймворки для обучения нейросетей (например, Weka, Apache Mahout, Deeplearning4j, Mallet, MLlib)</li></ul><p>Минусы Java:</p><ul><li>Java — компилируемый язык, поэтому код сначала компилируется в машинный, а затем выполняется. Это может замедлить процесс разработки и обучения нейросетей</li><li>сообщество разработчиков в области машинного обучения в Java не такое активное, как в случае с Python. Это значит, что сложнее найти обучающие материалы и ответы на свои вопросы</li></ul><h3>С++</h3><p>Мощный язык программирования, который часто используется для разработки решений на стыке ИИ, робототехники и интернета вещей. Хотя он также хорошо справляется с задачами обучения нейросетей и чат-ботов.</p><p>Плюсы С++:</p><ul><li>C++ известен своей высокой производительностью, что может быть критично для задач, требующих интенсивных вычислений, таких как обучение нейронных сетей</li><li>предоставляет контроль над аппаратными ресурсами, что позволяет оптимизировать код под конкретные архитектуры процессоров и ускорять выполнение операций</li></ul><p>Минусы С++:</p><ul><li>C++ может быть более сложным и требовательным к написанию кода, чем некоторые другие языки программирования, поэтому не рекомендуется новичкам</li></ul><h3>C#</h3><p>C# — универсальный язык от компании Microsoft, который она активно продвигает для машинного обучения, для чего создала библиотеку ML.NET.</p><p>Плюсы C#:</p><ul><li>C# может обеспечить хорошую производительность, что важно при обработке больших объёмов данных, характерных для обучения нейросетей</li><li>если нейросети встраиваются в большой проект, который включает в себя и другие компоненты, написанные на C#, использование того же языка может обеспечить лучшую интеграцию и общую согласованность</li></ul><p>Минусы C#:</p><ul><li>в сравнении с такими языками, как Python, у C# более ограниченная экосистема библиотек и фреймворков для машинного обучения</li><li>C# более сложный для освоения новичками, чем тот же Python</li></ul><h3>R</h3><p>Язык R разработали учёные факультета статистики Оклендского университета. Обычно он используется в связке с Python для обработки и визуализации данных.</p><p>Плюсы R:</p><ul><li>имеет большое количество библиотек для машинного обучения и работы с данными: Caret, DataExplorer, Dplyr, Ggplot2, kernLab и другие</li><li>если ваши данные и задачи тесно связаны со статистикой, R может быть хорошим выбором, так как он широко используется в академических и исследовательских сферах</li></ul><p>Минусы R:</p><ul><li>может быть менее эффективным по сравнению с такими языками, как C++ или Python, что может сказаться на производительности при обучении сложных нейронных сетей</li><li>имеет меньше инструментов для развёртывания ML-моделей, что усложняет работу с ними</li><li>довольно узкая сфера применения</li></ul><h2>Выводы</h2><p>Если делаете первые шаги в программировании и машинном обучении, лучше остановиться на Python. Это самый востребованный у работодателей язык, который можно освоить в короткие сроки.</p><p>Дальше можно добавить R для работы с большими данными. А если вы уже не новичок в программировании, подойдут Python, Java или С++ (последний особенно актуален для проектов в сфере интернета вещей).</p>]]></content:encoded>
    </item>
    <item>
      <title>Эксперт рассказал, как справиться с синдромом самозванца в программировании</title>
      <link>https://tproger.ru/news/ekspert-rasskazal--kak-spravitsya-s-sindromom-samozvanca-v-programmirovanii</link>
      <comments>https://tproger.ru/news/ekspert-rasskazal--kak-spravitsya-s-sindromom-samozvanca-v-programmirovanii?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/ekspert-rasskazal--kak-spravitsya-s-sindromom-samozvanca-v-programmirovanii</guid>
      <description><![CDATA[<p>Блогер Nifty Little Me рассказал, как программистам справиться с синдромом самозванца. Главное — фиксировать свои успехи, избегать сравнений с другими и воспринимать ошибки как возможность учиться</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/ekspert-rasskazal--kak-spravitsya-s-sindromom-samozvanca-v-programmirovanii">Эксперт рассказал, как справиться с синдромом самозванца в программировании</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 25 Nov 2024 05:48:30 GMT</pubDate>
      <content:encoded><![CDATA[<p>Автор популярного блога о программировании Nifty Little Me <a href="https://www.niftylittleme.com/articles/getting-over-not-being-a-good-enough-programmer">поделился</a> советами, как бороться с синдромом самозванца — распространённой проблемой среди разработчиков.</p><p>Этот феномен знаком многим: чувство, будто ваши успехи случайны, а коллеги или заказчики вот-вот раскроют, что вы недостаточно компетентны.</p><p>Однако, по словам эксперта, это ощущение — всего лишь иллюзия, которая мешает профессиональному развитию.</p><h2>Главное — не обесценивать свои успехи</h2><p>Автор отмечает, что программисты часто списывают свои достижения на везение или простоту задачи. Такой подход формирует ложное ощущение собственной несостоятельности.</p><p>Вместо этого важно научиться фиксировать даже небольшие успехи: завершённые проекты, сложные задачи, освоение нового инструмента.</p><p>Совет эксперта: ведите «дневник успехов». Записывайте, что получилось за день, и перечитывайте записи. Это поможет увидеть свой прогресс и укрепить уверенность.</p><h2>Сравнивайте себя с собой, а не с другими</h2><p>Ещё один важный момент — отказаться от постоянных сравнений с коллегами. У всех разный опыт и условия работы, поэтому единственное правильное сравнение — с самим собой.</p><p>Автор подчёркивает: нужно обращать внимание на собственный рост, а не на достижения окружающих.</p><p>Также рекомендуется не стремиться знать всё. Программирование — обширная область и невозможно быть экспертом во всех её аспектах. Выберите одно направление и совершенствуйтесь в нём.</p><h2>Ошибки — это нормально</h2><p>Ошибки — естественная часть процесса. Автор советует относиться к ним как к возможности для обучения. Если что-то пошло не так, это повод разобраться в проблеме и улучшить свои навыки.</p><p>Кроме того, важно помнить: даже опытные разработчики не знают всего. Они ищут ответы в документации, на форумах или спрашивают коллег. Просить о помощи — не слабость, а нормальная практика.</p>]]></content:encoded>
    </item>
    <item>
      <title>Выучить язык программирования за 7 дней? Это миф, вот, почему</title>
      <link>https://tproger.ru/articles/vyuchit-yazyk-programmirovaniya-za-7-dnej--eto-mif--vot--pochemu</link>
      <comments>https://tproger.ru/articles/vyuchit-yazyk-programmirovaniya-za-7-dnej--eto-mif--vot--pochemu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/vyuchit-yazyk-programmirovaniya-za-7-dnej--eto-mif--vot--pochemu</guid>
      <description><![CDATA[<p>Почему выучить язык программирования за 7 дней невозможно? Или все-таки возможно? Развеиваем популярный миф и даем рекомендации по обучению.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/vyuchit-yazyk-programmirovaniya-za-7-dnej--eto-mif--vot--pochemu">Выучить язык программирования за 7 дней? Это миф, вот, почему</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 17 Oct 2024 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Наверняка вы встречали множество объявлений о курсах, которые обещают научить программировать всего за 7 дней. Звучит заманчиво. Но стоит ли верить этим громким обещаниям? К сожалению, подобные заявления не имеют ничего общего с реальностью. Сегодня разберемся, почему выучить язык программирования за 7 дней невозможно, и как на самом деле стоит подходить к этому процессу.</p><h2>Я у мамы не программист (и не смог бы за 7 дней): Почему?</h2><p>Безусловно, составители курсов по успешному успеху в кодинге хотят привлечь начинающих специалистов, поэтому обещают экспертизу за неделю. На практике все оказывается гораздо сложнее. Рассмотрим причины, почему не стоит доверять громким обещаниям.</p><h3>Объем изучаемого материала ну очень велик</h3><p>Языки программирования состоят из множества конструкций, операторов, функций, классов, библиотек и других компонентов.</p><p>Например, в спецификации Python 3.9 описано более 30 различных операторов, 15 встроенных типов данных, 25 ключевых слов, более 70 встроенных функций и множество других элементов. Более сложные языки, такие как C++, Java или Rust, имеют еще больший объем материала.</p><p>Кроме синтаксических конструкций, изучение языка подразумевает также знакомство с различными парадигмами программирования (объектно-ориентированное, функциональное, процедурное), концепциями (абстракция, инкапсуляция, полиморфизм) и другими фундаментальными понятиями.</p><p>P.s. Не забываем, что спецификации языков периодически обновляются (не Python, конечно, но все же). Это также накладывает временной отпечаток на обучении.</p><h3>Нужна практика не только в кодинге (но и в нем тоже)</h3><p>Изучение языка программирования — это не просто запоминание синтаксиса, но и выработка навыков решения задач, отладки кода, использования инструментов разработки и т.д. Для приобретения таких навыков необходимо выполнять большое количество практических упражнений и проектов, что невозможно за короткий срок.</p><p>Например, в случае с C++, помимо изучения синтаксиса, программисту необходимо освоить работу с указателями, динамическим выделением памяти, перегрузку операторов, использование стандартной библиотеки (STL) и многим другим.</p><h3>Фундаментальные концепции (WHAT?)</h3><p>Многие языки программирования основаны на фундаментальных концепциях — объектно-ориентированное программирование (ООП), функциональное программирование, управление памятью и т.д. Понимание этих концепций требует значительного времени на изучение и осмысление.</p><p>Например, при изучении ООП программист должен разобраться в таких понятиях, как классы, объекты, наследование, полиморфизм, инкапсуляция. Это не просто запоминание синтаксиса, а понимание фундаментальных принципов. В функциональном программировании важно освоить концепции — чистые функции, иммутабельность данных, рекурсия и т.д.</p><p>При работе с памятью в низкоуровневых языках, таких как C и C++, необходимо понять концепции указателей, динамического выделения памяти, работы со стеком и кучей. Это ключевые фундаментальные знания.</p><h3>Нужно не тыкать в небо, а понимать контекст языка</h3><p>Изучение языка программирования не может ограничиваться только освоением его синтаксиса и базовых концепций. Важно также понимать, в каких областях применяется данный язык, какие задачи с его помощью можно решать, и какие подходы и методологии используются при разработке на этом языке.</p><p>Например, Python широко используется в областях машинного обучения, анализа данных, веб-разработки, автоматизации. Для эффективного применения необходимо знать специфику этих предметных областей и соответствующие библиотеки/фреймворки.</p><p>Java, в свою очередь, применяется для разработки приложений, распределенных систем, игр. Понимание особенностей этих сфер и соответствующих инструментов (Spring, Android SDK, JEE) важно для эффективного использования Java.</p><p>Для языка Rust, ориентированного на системное программирование, нужны знания особенностей разработки систем с жесткими требованиями к безопасности и производительности.</p><p>Без понимания контекста применения языка и решаемых с его помощью задач, приобретенные знания будут поверхностными и неприменимыми на практике.</p><h2>Как реально выучить язык программирования за 7 дней? Запоминаем</h2><p>Если вас не смущают все ограничения, ловите распорядок дня, который точно поможет выучить кодинг за неделю:</p><h4>День 1:</h4><p>– Подъем в 5 утра, ледяной душ.</p><p>– 6:00-8:00 —  установка Python и IDE, чтение 100 страниц документации.</p><p>– 8:00-8:30 —  завтрак стоя, параллельно повторяем изученное.</p><p>– 8:30-13:00 —  интенсивное изучение синтаксиса, типов данных, операторов. Ни минуты отдыха.</p><p>– 13:00-13:10 —  обед всухомятку.</p><p>– 13:10-18:00 — практика написания алгоритмов с использованием циклов и условий. Перерывы только в туалет.</p><p>– 18:00-18:05 —  ужин за 5 минут, не отходя от компьютера (надо решить заранее, кто приготовит или доставит вам столько еды)</p><p>– 19:00-22:00 —  просмотр 10 видеоуроков на скорости 1,5x.</p><p>– 22:00-23:00 —  повторение, закрепление материала.</p><p>– 23:00 – 04:30 — сон</p><h4>День 2:</h4><p>– Подъем в 4:30 утра, обливание ледяной водой (можно почистить зубы).</p><p>– 5:00-10:00 —  изучение коллекций данных, не отвлекаясь ни на что.</p><p>– 10:00-10:10 —  завтрак всухомятку.</p><p>– 10:10-16:00 —  погружение в ООП, написание множества маленьких проектов.</p><p>– 16:00-16:30 —  обед у компьютера. Повторяем изученное.</p><p>– 16:30-22:00 —  изучение модулей и стандартной библиотеки. Перерывы —  5 минут каждый час.</p><p>– 22:00-23:00 — просмотр дополнительных видео.</p><p>– 23:00-0:00 — повторение, закрепление.</p><p>– 0:00-4:00 — сон.</p><h4>День 3:</h4><p>– Подъем в 4 утра, обливание ледяной водой.</p><p>– 4:30-10:00 —  изучение работы с файлами, обработкой исключений.</p><p>– 10:00-10:02 — завтрак в 2 минуты.</p><p>– 10:02-16:30 —  погружение в Numpy, Pandas, Matplotlib. Ни минуты отдыха.</p><p>– 16:30-17:00 — обед у компьютера.</p><p>– 17:00-22:00 —  практика применения библиотек в своих программах. Перерывы —  2 минуты каждый час.</p><p>– 22:00-23:00 —  повторение, закрепление.</p><p>– 23:00-3:30 — сон.</p><h4>День 4:</h4><p>– Подъем в 3:30 утра, обливание ледяной водой.</p><p>– 4:00-10:00 —  изучение работы с базами данных (SQLite, PostgreSQL). Перерывы —  1 минута каждый час.</p><p>– 10:00-10:20 —  завтрак у компьютера.</p><p>– 10:20-16:30 —  практика CRUD-приложений для работы с БД. Перерывы — 30 секунд каждый час.</p><p>– 16:30-16:31 —  обед в 1 минуту.</p><p>– 16:31-22:00 —  создание простого Web-приложения на Flask. Никаких перерывов.</p><p>– 22:00-23:00 —  повторение, закрепление.</p><p>– 23:00-3:00 — сон.</p><h4>День 5:</h4><p>– Подъем в 3 утра, обливание ледяной водой.</p><p>– 3:30-10:00 —  углубление в работу с Flask, создание RESTful API. Перерывы — 30 секунд каждый час.</p><p>– 10:00-10:20 — завтрак у компьютера.</p><p>– 10:20-16:30 —  изучение asyncio и aiohttp. Ни минуты отдыха.</p><p>– 16:30-16:50 — обед у компьютера.</p><p>– 16:50-22:00 —  практика написания асинхронных приложений. Никаких перерывов.</p><p>– 22:00-23:00 —  повторение, закрепление.</p><p>– 23:00-2:30 — сон</p><h4>День 6:</h4><p>– Подъем в 2:30 утра, обливание ледяной водой.</p><p>– 2:30-10:00 —  погружение в тестирование (unittest, pytest). Перерывы —  15 секунд каждый час.</p><p>– 10:00-10:30 —  завтрак на скорую руку.</p><p>– 10:30-16:30 —  практика написания тестов для своих приложений. Никаких перерывов.</p><p>– 16:30-16:30 —  обед в 30 секунд.</p><p>– 16:30-22:00 —  рефакторинг и оптимизация написанных программ. Ни минуты отдыха.</p><p>– 22:00-23:00 —  повторение, закрепление.</p><p>– 23:00-2:00 — сон</p><h4>День 7:</h4><p>– Подъем в 2 утра, обливание ледяной водой.</p><p>– 2:30-10:00 —  создание итогового проекта, применение всех изученных навыков. Перерывы —  10 секунд каждый час.</p><p>– 10:00-10:10 — завтрак у компьютера.</p><p>– 10:10-16:30 —  доработка и тестирование итогового проекта. Никаких перерывов.</p><p>– 16:30-16:30 — обед в 20 секунд.</p><p>– 16:30-22:00 —  подведение итогов, планирование дальнейшего обучения. Ни минуты отдыха.</p><p>– 22:00-23:00 —  финальное повторение, закрепление.</p><p>Даже если вы решили, что последуете этому графику и выучите Python, не нужно радоваться. За 7 дней освоите лишь основу основ, а языковой барьер будет преодолеть ох как сложно.</p><h2>Советы по изучению языков программирования</h2><p>Но не расстраивайтесь. Предлагаем вам последовать некоторым советам, которые точно ускорят обучение:</p><h4>Читайте документацию</h4><p>Официальная документация языка программирования — лучший источник информации о его возможностях, синтаксисе и передовых практиках. Регулярно обращайтесь к документации, чтобы углублять свои знания.</p><p>Например, при изучении JavaScript, почитайте документацию <a href="https://devdocs.io/javascript/">MDN Web Docs</a>, где подробно описаны все возможности языка, от основ синтаксиса до продвинутых API. Это поможет вам найти ответы на любые вопросы, которые могут возникнуть в процессе обучения.</p><h4>Начинайте с небольших задач</h4><p>Не пытайтесь сразу браться за масштабные проекты. Начинайте с решения простых задач и постепенно усложняйте их. Это поможет лучше освоить основы языка, прежде чем переходить к более сложным концепциям.</p><p>Попробуйте написать программы-калькуляторы, конвертеры единиц измерения или простые игры. Это отличная практика для начинающих.</p><h4>Используйте отладчики и инструменты</h4><p>Изучайте и активно используйте инструменты отладки и разработки  (линтеры, профайлеры и т.д.). Они помогут выявлять и исправлять ошибки в коде, а также анализировать производительность программ.</p><p>Например, в Visual Studio Code есть встроенный отладчик, который позволяет пошагово выполнять код и наблюдать за переменными. А линтер pylint поможет находить стилистические и логические ошибки в Python-коде.</p><h4>Нетворкайте</h4><p>Общение с другими программистами, как начинающими, так и опытными, может значительно ускорить ваше обучение. Задавайте вопросы, делитесь своими проектами и решениями, получайте обратную связь.</p><p>Например, можно присоединиться к тематическим группам в социальных сетях, форумам программистов или участвовать в онлайн-челленджах и опенсорсных проектах. Так вы не только улучшите свои навыки, но и расширите профессиональные связи.</p><h4>Используйте техники запоминания</h4><p>Используйте ассоциации и другие мнемонические приемы (техники запоминания) для синтаксиса, имен функций и других важных элементов языка. Например, можно использовать акронимы или визуальные образы, связанные с конкретными концепциями.</p><p>Так, для запоминания основных принципов ООП в Java (инкапсуляция, наследование, полиморфизм) можно использовать акроним «ИНП».</p><h4>Читайте качественный код</h4><p>Изучайте код, написанный опытными программистами. Анализируйте, как они структурируют программы, используют паттерны проектирования и пишут читаемый и эффективный код.</p><p>Например, можно найти на GitHub открытые проекты на интересующем вас языке и внимательно разбирать, пытаясь понять логику и обосновывать принятые решения.</p><h4>Следите за новостями</h4><p>Мир программирования развивается очень быстро, поэтому важно следить за новостями и обновлениями в языках, фреймворках и инструментах. Это поможет быть в курсе последних тенденций и использовать современные подходы.</p><p>Например, подпишитесь на блоги ведущих разработчиков или почитайте новости на сайтах, посвященных программированию (Habr, DEV, Medium, ну и Tproger, конечно).</p><p>Наконец, самый лучший способ выучить язык программирования — это <b>практиковаться</b> в написании кода. Чем больше вы пишете, тем лучше понимаете синтаксис, структуру языка и различные концепции. Удачи!</p>]]></content:encoded>
    </item>
    <item>
      <title>В Steam началась распродажа игр для программистов в честь Ады Лавлейс — первого в мире разработчика</title>
      <link>https://tproger.ru/news/v-steam-nachalas-rasprodazha-igr-dlya-programmistov-v-chest-ady-lavlejs---pervogo-v-mire-razrabotchika</link>
      <comments>https://tproger.ru/news/v-steam-nachalas-rasprodazha-igr-dlya-programmistov-v-chest-ady-lavlejs---pervogo-v-mire-razrabotchika?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/v-steam-nachalas-rasprodazha-igr-dlya-programmistov-v-chest-ady-lavlejs---pervogo-v-mire-razrabotchika</guid>
      <description><![CDATA[<p>Steam запускает распродажу игр для программистов в честь Дня Ады Лавлейс с 7 по 14 октября. В акции представлены игры, стимулирующие изучение программирования и инженерии</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/v-steam-nachalas-rasprodazha-igr-dlya-programmistov-v-chest-ady-lavlejs---pervogo-v-mire-razrabotchika">В Steam началась распродажа игр для программистов в честь Ады Лавлейс — первого в мире разработчика</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 09 Oct 2024 07:12:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>С 7 по 14 октября в Steam проходит <a href="https://store.steampowered.com/sale/AdaLovelaceDay">тематическая распродажа</a>, посвященная Дню Ады Лавлейс, первой в мире женщины-программиста.</p><p>На этот раз в центре внимания — игры, которые вдохновляют на изучение программирования, автоматизации и инженерии.</p><h2>Что можно найти на распродаже?</h2><p>В рамках акции игроки могут приобрести со скидками разнообразные игры, которые фокусируются на логике, решении задач, автоматизации процессов и создании собственного кода.</p><p>Среди предложений — как популярные хиты, так и независимые проекты, которые помогают понять основы программирования и алгоритмического мышления.</p><p>В подборку попали такие проекты, как Autonauts, The Signal State и Alan's Automation Workshop, каждый из которых предлагает уникальный подход к механикам автоматизации и инженерии.</p><figure><img src="https://media.tproger.ru/user-uploads/98945/2024-10-09/2ec316fd-6705-495e-99ae-9d4882287736.jpg" alt="" /></figure><h2>Тематическое мероприятие в честь Ады Лавлейс</h2><p>День Ады Лавлейс ежегодно отмечается во вторник второй недели октября и посвящен вкладу знаменитой английской девушки-математика в развитие программирования.</p><p>Ада Лавлейс считается автором первого алгоритма для аналитической машины, что делает её одним из первых в мире программистов.</p><p>Распродажа в Steam — это отличный повод не только вспомнить её достижения, но и попробовать себя в играх, которые развивают навыки программирования.</p>]]></content:encoded>
    </item>
    <item>
      <title>ЖивоСкрипт — настоящее программирование для детей</title>
      <link>https://tproger.ru/articles/zhivoskript---nastoyashhee-programmirovanie-dlya-detej</link>
      <comments>https://tproger.ru/articles/zhivoskript---nastoyashhee-programmirovanie-dlya-detej?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Раф Галей]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/zhivoskript---nastoyashhee-programmirovanie-dlya-detej</guid>
      <description><![CDATA[<p>Описание визуального языка программирования ЖивоСкрипт. Цель и назначение, структура программы, терминология и дизайн, пример простого приложения.
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/zhivoskript---nastoyashhee-programmirovanie-dlya-detej">ЖивоСкрипт — настоящее программирование для детей</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 18 Sep 2024 14:10:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Визуальный язык программирования ЖивоСкрипт (далее ЖС) — это графический интерфейс для языков JavaScript и PHP. ЖС транслируется в эти языки для дальнейшего использования на клиенте или сервере. Свободное <a href="https://jivoscript.ru/">приложение</a> ЖС работает в браузере, онлайн и офлайн, на русском и английском языках.</p><h2>Цель и назначение</h2><p>Цель создания этого визуального языка — сделать настоящее программирование предельно простым, понятным и удобным для детей и любителей. ЖС упрощает и облегчает обучение и работу программиста. ЖС скрывает всю сложность и оставляет только суть — дерево программы в чистом виде, без скобок, запятых и прочей суеты. Программисту остаётся думать только о структуре программы, рутина автоматизирована и скрыта. Для кодинга на ЖС юный русский программист может даже не владеть английским языком.</p><p>ЖС был испытан на детях. Дети 12+ лет легко осваивают этот язык приблизительно за три месяца, занимаясь два раза в неделю и создавая на нем сайты или 2D-игры.</p><p>Этот визуальный язык похож на <a href="https://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA%D0%BB%D0%B8">Блокли</a> и <a href="https://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D1%80%D0%B5%D1%82%D1%87_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)">Скретч</a>, но он удобнее и на нём можно создавать сложные большие программы. В ЖС есть все достоинства этих языков, но нет их недостатков. Это недостающее промежуточное звено между примитивным детским и сложным профессиональным программированием. ЖС вполне может стать основным языком для обучения программированию в школах и кружках, потому что в нём сочетаются минимальная сложность с максимальными возможностями применения.</p><p>Название ЖивоСкрипт (JivoScript) происходит от предыдущего названия языка JavaScript — <a href="https://ru.wikipedia.org/wiki/JavaScript#%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F">LiveScript</a>. На стороне сервера JavaScript по задумке авторов должен был называться LiveWire. В ЖивоСкрипте реализована изначальная идея разработчиков — на нём можно писать код для клиента и сервера.</p><p>Эту статью можно использовать как краткий самоучитель визуального программирования. Преподаватели визуального или веб-программирования легко поймут, как всё это работает.</p><p>Настоящему программисту нужно обязательно знать, как языки программирования выглядят в текстовом виде — как визуальный код преобразуется в текстовый. Но на начальном этапе маленьким детям можно об этом не думать и не заглядывать под капот и в спойлеры.</p><p>В этом программировании разработана своя простая понятная детям терминология.</p><h2>Структура программы, терминология и дизайн</h2><p>Программа — это <b>последовательность</b> операторов (инструкций, команд) которые исполняет машина, и это дерево, в котором каждая ветвь это отдельная последовательность.</p><p>Операторы выполняются сверху вниз.</p><p>Пример визуального кода:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/6ff03206-7015-4e1e-a162-b512d08a898d.png" alt="" /><figcaption>Фрагмент программы птички из игры «Птичка Дани»</figcaption></figure><p>Программа состоит из четырёх типов операторов:</p><ul><li><b>связывание</b> адреса со значением</li><li><b>ветвления</b> — логическое ветвление, ветвление вариантов, попытка исполнения</li><li><b>циклы</b> — циклы до или после проверки условия, цикл числа, объекта или массива, оператор выхода из цикла</li><li><b>исполнение</b> подпрограммы — запуск системной или пользовательской подпрограммы, оператор выхода из подпрограммы с возможностью возвращения значения, удаление адреса в объекте или массиве</li></ul><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/c3bf2aeb-f007-4eec-ab9c-5adfd2eaed73.png" alt="" /><figcaption>Операторы, из которых состоит программа</figcaption></figure><p>Операторы, имеющие свои последовательности операторов, отличаются отсутствием одного закругления справа.</p><p>Два основных оператора — <b>связывание</b> и <b>исполнение</b>, которые подразумевают работу с памятью и запуск готовых подпрограмм, созданных самим пользователем или другим программистом (библиотеки) или встроенных в среду исполнения. Ветвления и циклы управляют потоком программы.</p><p>Также есть возможность группировать операторы в отдельную именованную последовательность и писать комментарии. Но это не операторы:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/f52e9d75-9c03-44c7-9d81-68ef607272fd.png" alt="" /><figcaption>Кнопки интерфейса редактора</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/3b7b380e-e947-468c-b81f-e99c3a309afc.png" alt="" /></figure><p>Пустой комментарий используется как разделитель абзацев кода.</p><p>Именованная последовательность — не настоящая последовательность (внутри настоящей есть своя область видимости адресов), а просто группа, папка, которую можно раскрыть или скрыть как этот спойлер-аккордеон:</p><p>При выделении последовательности её граница окрашивается в белый цвет.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/66560fe4-1009-41be-b0b3-19be92cf90e4.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/03dd5f9b-3244-492f-a29e-b8c12ef562f8.png" alt="" /></figure><p>При повторном нажатии на оператор, внутри которого есть своя последовательность, он раскрывается или закрывается и скрывает своё содержимое.</p><p>Выделенный оператор можно отключить, нажав кнопку отключить в нижнем меню — тогда он станет полупрозрачным и не будет виден в готовой программе. Также операторы можно перемещать вверх и вниз стрелками в нижнем меню или на клавиатуре. И можно копировать и вставлять операторы, используя соответствующие кнопки в нижнем меню или клавиши С и V</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/e198652f-9578-4163-939e-66c7dad1decb.png" alt="" /><figcaption>кнопки интерфейса редактора</figcaption></figure><p>Редактор можно использовать на большом сенсорном экране (но не на смартфоне). Всё управление производится через клик мыши или прикосновение пальца и через внешнюю клавиатуру. Для редактирования текста курсор не используется.</p><p>Чтобы скрыть или раскрыть все последовательности, нажмите на кнопку в левом верхнем углу.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/b24dde56-ba09-4ea1-aaf1-6d53081a9115.png" alt="" /><figcaption>кнопка интерфейса редактора</figcaption></figure><h3>Адреса и значения</h3><p>Для работы программы необходимо использовать память компьютера, в которой программа может хранить простые значения: <b>числа, строки, литералы </b>(специальные слова), и непростые значения: <b>подпрограммы, объекты, массивы.</b> Доступ к области памяти происходит через указание адреса.</p><p>В текстовом виде оператор связывания это знак =</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/8538b240-3a75-4a51-8822-71781dfe443a.png" alt="" /></figure><p>Строки могут быть в одинарных или двойных кавычках, и специальные строки для цветов, картинок, звуков, идентификаторов и классов.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/a5771675-a676-4863-99c8-9a117dc75490.png" alt="" /><figcaption>кнопки меню интерфейса редактора</figcaption></figure><p>При нажатии на кнопку со знаком = в операторе связывания, этот оператор изменяется на оператор сложения, вычитания, деления и тд. При этом адрес, указанный в левой части, изменяется на указанное в правой части значение.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-03/6fd76314-db75-4cb0-b6de-f6056a3be030.png" alt="" /></figure><p>Специальные слова (литералы) это:</p><ul><li><b>да</b> (true)</li><li><b>нет</b> (false)</li><li><b>ничего</b> (null)</li><li><b>неопределённо</b> (udefined)</li></ul><p>Адреса бывают пользовательские — их создаёт программа, и готовые системные.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/7994d45b-3f2d-47db-a73f-f8446d1611f2.png" alt="" /><figcaption>Кнопки интерфейса редактора — пользовательский и системный адреса</figcaption></figure><p>Адрес не может начинаться с числа, и в нём недопустимы знаки препинания и пробелы.</p><p>Внутри среды исполнения программы есть встроенные системные адреса, которые может использовать программа, в том числе адреса подключенных библиотек. В окне выбора системных имён есть краткий справочник по их использованию.</p><p>Для редактирования пользовательского адреса или выбора системного адреса, для редактирования текста или числа — нажмите на этот элемент повторно. Для завершения редактирования строки или имени — нажмите клавишу Esc или Enter</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/4a5de830-c69c-4a91-87cd-e6a12e92cd96.png" alt="" /></figure><p>Все системные адреса переведены на русский язык и на более понятный английский язык.</p><p>Адреса могут быть короткими однословными, как например адрес s, или длинными многословными, например s.w[0]('r').d</p><p>Для создания многословных адресов используйте эти кнопки:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-20/52572526-3e0f-4ae5-930c-13bb76e432fd.png" alt="" /><figcaption>Кнопки интерфейса редактора</figcaption></figure><p>Для вызова подпрограммы используйте элемент Выполнить</p><p>Внутри этого элемента может быть однословный пользовательский или системный адрес или значение выражения внутри элемента Значение, которое в тексте обозначается квадратными скобками. Для выбора одного из вариантов нажмите на адрес внутри элемента Выполнить и нажмите на нужный тип в нижнем меню.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-20/4d9fac3f-0f2b-4dac-966b-50c55a18ed0b.png" alt="" /></figure><p>Для добавления любого элемента в любой контейнер — надо выделить этот контейнер. Для добавления элемента перед другим элементом — надо сначала выделить этот элемент.</p><p>Множество адресов могут ссылаться на одно значение.</p><p>В этом примере адрес s связан с подпрограммой. Адрес w связан со значением адреса s</p><p>При вызове подпрограммы показать_объявление показывается одно единое значение для адресов w и s</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/4251ffad-21e6-48c8-8144-1277e7e3f58e.png" alt="" /></figure><p>Значением может быть значение другого адреса или выражение, в том числе с вызовом подпрограммы.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-08/faaf2f48-b036-438e-9607-74899b610b3d.png" alt="" /></figure><p>В выражениях используются следующие операторы:</p><ul><li>или: ||</li><li>'+' сложение строк: + в JavaScript или . в PHP</li><li>плюс: +</li><li>минус: -</li><li>деление: /</li><li>остаток от деления: %</li><li>умножение: *</li><li>возведение в степень: **</li><li>скобки: ( )</li></ul><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/eb1f74a9-5fa0-4a87-8cb9-99df5a5d5830.png" alt="" /><figcaption>кнопки интерфейса редактора</figcaption></figure><p>При использовании оператора ИЛИ в правой части оператора связывания, адрес в левой части связывается с первым истинным значением из перечня значений.</p><p>Истинные значения это:</p><ul><li>не нулевое число</li><li>непустая строка</li><li>да (true)</li><li>объект, массив, подпрограмма</li></ul><p>Адрес может быть создан внутри любой последовательности операторов, внутри подпрограммы или внутри объекта или массива.</p><p>Для создания адреса внутри последовательности операторов и внутри подпрограммы, используется оператор создать адрес в левой части оператора связывания.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-08/ee81dce7-18d1-4e24-985d-fcc8b3748ea1.png" alt="" /></figure><p>При повторном нажатии на оператор «создать адрес» тип адреса изменяется. Есть три возможных варианта: let<b> </b>const<b> </b>var</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-08/157d5e4f-6697-4c2d-a042-bdb10568bd71.png" alt="" /></figure><p>Оператор let используется по умолчанию — он создаёт адрес внутри последовательности операторов и его область видимости ограничена этой последовательностью. В большинстве случаев для любительского программирования достаточно использовать только этот оператор.</p><p>Оператор const похож на let, но используется для неизменяемых значений.</p><p>Оператор var — адрес для всей подпрограммы, он создаёт адрес внутри последовательности операторов подпрограммы из любого места этой подпрограммы, или если он используется в основной последовательности операторов программы, то он создаёт адреса в глобальной области видимости.</p><p>Для создания адреса внутри объекта или массива нужно в левой части указать адрес объекта или массива и после него добавить создаваемый адрес.</p><p>Адрес внутри объекта называется свойством, или методом если это подпрограмма. Адрес внутри массива называется элементом массива. Можно называть их просто адресами внутри объектов или массивов.</p><p>Удалить адрес в объекте или массиве можно через оператор Удалить</p><p>Удалить можно только адреса внутри объектов или массивов.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/7511d264-ed34-4a1e-a78f-53e85982e9a5.png" alt="" /></figure><h3>Область видимости адреса</h3><p>Адрес, созданный операторами let или const<b>,</b> доступен внутри последовательности и из вложенных в неё последовательностей.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/8880aaf1-3be6-483d-b9ef-2bd54f9354e3.png" alt="" /></figure><p>Из последовательности невозможно обратиться к адресу, который создан операторами  let  или const  внутри вложенной в неё последовательности. При выполнении этой программы будет показано сообщение об ошибке:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/2cc92a12-349d-4d3d-b676-eba691a9cfac.png" alt="" /></figure><p>При использовании оператора var в этом случае такой ошибки не будет.</p><p>Оператор var можно использовать повторно для того же адреса, в отличие от let и const</p><h3>Подпрограммы</h3><p>Подпрограмма — программа внутри программы. Она может быть вызвана из любого места другой программы бесчисленное количество раз. На вход подпрограммы можно подать значения, и она может вернуть значение в вызвавшую её программу.</p><p>При запуске подпрограммы вызвавшая её программа приостанавливается на время выполнения вызываемой подпрограммы.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/3e5a176e-fdd0-49de-9618-6265de8f12fd.png" alt="" /></figure><p>Подпрограмма может завершиться в любой момент при выполнении оператора выхода из подпрограммы — для этого используется оператор Выйти</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-08/ac52fb0e-2315-4411-b0dc-cfa8bcfbb64e.png" alt="" /></figure><h3>Процедуры и функции</h3><p>Через оператор Выйти подпрограмма может вернуть в вызвавший её оператор значение. Такая подпрограмма называется <b>функцией</b>. Подпрограмма, не возвращающая значения, называется <b>процедурой</b>.</p><p>Если оператор Выйти возвращает значение то он превращается в оператор Вернуть</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-10/ea30507a-2da2-43ba-a6e0-356e9636bbbe.png" alt="" /></figure><p>Подпрограмма может иметь <b>входящие адреса</b> (параметры), и при вызове подпрограммы ей передаются значения (аргументы).</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-08/58a26e03-ae24-4bb8-ae00-203b2ecd89f1.png" alt="" /></figure><h3>Объекты и массивы</h3><p>Объект<b> — </b>набор адресов и значений. Адрес внутри последовательности, в которой он создан, должен быть уникальным, то есть не повторяться.</p><p>Внутри объекта есть своя последовательность операторов связывания.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-08/0176d784-2450-4a75-8d1a-328781798e0d.png" alt="" /></figure><p>Эти операторы связывания отличаются от упомянутого выше. Вместо знака =  двоеточие, и после каждого оператора кроме последнего должна быть запятая.</p><p>Массив похож на объект, но в нём доступ к значениям производится не через имена, а по индексу (номеру), начиная с нуля.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/8a0066ea-e56f-41f9-88bd-6c6309989e0c.png" alt="" /></figure><p>Если объект или массив не содержат подпрограмм, их можно конвертировать в <a href="https://ru.wikipedia.org/wiki/JSON">JSON</a> — в этом формате можно сохранить любые значения кроме подпрограмм. После сохранения в формате JSON данные можно обратно восстановить и использовать в программе. В таком виде данные можно сохранять в памяти браузера или в виде файла на компьютере или на сервере.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/17dd658a-94ef-4e88-a35d-5d5f9f2bf376.png" alt="" /></figure><h2>Ветвление</h2><p>Ветвление — исполнение или не исполнение одной из последовательностей операторов в зависимости от условия.</p><h3>Логическое ветвление</h3><p>Логическое ветвление исполняет или не исполняет одну из двух или единственную последовательность операторов в зависимости от условия. Если в условии истинное значение то исполняется последовательность операторов:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-10/31861a61-37b1-4f5d-b632-fc4ac8d49d47.png" alt="" /></figure><p>В тексте логическое ветвление обозначается словами if<b> </b>(если) и else<b> </b>(иначе).</p><p>В логическом ветвлении может быть только одна первая последовательность.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-10/327b70a1-9f4a-4f7d-9cf5-20b5ae15379d.png" alt="" /></figure><p>В условии может быть адрес или выражение, проверяющее значение:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/d054f432-cc9d-4b7f-9ce2-0598a6dacd6c.png" alt="" /></figure><p>Условий может быть несколько и между ними располагаются операторы И ИЛИ</p><p>При использовании оператора И все условия должны быть истинными, а при ИЛИ хотя бы одно условие должно быть истинным.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/53ca4bf2-3334-42ac-9c2f-7dc4321b4d3b.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-12/55e29f2d-414d-4f38-bf63-551f765203c2.png" alt="" /></figure><h3>Ветвление вариантов</h3><p>Ветвление вариантов исполняет или не исполняет одну последовательность операторов в зависимости от  результата сравнения значения со значением указанного адреса. Если ни одно сравнение не оказалось истинным, то выполняется последовательность по умолчанию.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-10/2c038ab0-9fdb-405d-b90f-290cf2af9271.png" alt="" /></figure><h3>Попытка</h3><p>Если в программе возникает ошибка, то программа останавливается и зависает, и при этом система показывает сообщение в консоли и в этом редакторе в виде браузерного сообщения. Код, который может вызвать ошибку, программист может поместить в последовательность оператора Попытка. Код будет исполнен, но возникшие ошибки будут проигнорированы.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/a8e2d74f-8535-4ecd-bb02-53ecf28be6cb.png" alt="" /></figure><h2>Циклы</h2><p>Цикл — многократное повторное исполнение одной последовательности операторов.</p><h3>Цикл «Делай пока»</h3><p>В этом цикле сначала исполняются операторы последовательности цикла, а после этого проверяется условие. Если результат проверки условия истинный, то цикл начинается с начала, если ложь, то цикл завершается.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/ca755277-adb3-4c60-90de-51e546a4400d.png" alt="" /></figure><h3>Цикл «Пока делай»</h3><p>В этом цикле сначала проверяется условие, и если результат проверки условия истинный, то исполняются операторы последовательности цикла и после этого цикл начинается сначала.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/5e27187e-eba2-4770-93ef-31933a758658.png" alt="" /></figure><h3>Цикл числа</h3><p>Последовательность операторов этого цикла исполняется некоторое количество раз, равное числу, с которым должен быть связан адрес число</p><p>Число должно быть целым и положительным.</p><p>При каждом исполнении последовательности операторов адрес s будет связан с числом, увеличенным на единицу, начиная с единицы.<b></b></p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/40c8bf71-5107-425f-ac21-f05af3097665.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-15/36ba6df9-bdbd-454b-bbea-b9fb160b87b8.png" alt="" /></figure><h3>Цикл объекта</h3><p>В этом цикле последовательность операторов исполняется столько раз, сколько свойств в объекте связанном с адресом объект</p><p>В этой программе в объявлениях показываются значения свойств объекта:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/c7853fc8-3ef5-4b78-a4e9-9c457792cd6c.png" alt="" /></figure><p>В этой программе показываются все адреса объекта. Адрес s<b>,</b> используемый в цикле, содержит имена свойств объекта.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/ed449656-c767-4044-b685-7794a2c3314d.png" alt="" /></figure><h3>Цикл массива</h3><p>В этом цикле последовательность операторов исполняется столько раз, сколько элементов в массиве, связанном с адресом массив</p><p>Адрес s<b>,</b> используемый в цикле, содержит число-индекс элемента массива начиная с нуля.</p><p>В этой программе в объявлениях показываются значения элементов массива:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/00230246-e315-4e12-a36e-02a32ea7f2d6.png" alt="" /></figure><h2>Чем различаются JS и PHP в ЖивоСкрипте</h2><p>В PHP не нужно использовать операторы создания адреса let var const — достаточно просто указать адрес. Он соответствует адресу, созданному оператором var</p><p>В тексте PHP-программы все адреса должны начинаться с символа $<b>,</b> но в ЖС не нужно это прописывать каждый раз — редактор сделает все автоматически.</p><p>В PHP обращение к многоcловным адресам производится только через квадратные скобки, например, так:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/a7ff4c24-465b-40fe-9106-9198c2e46505.png" alt="" /></figure><p>Знак для соединения строк в текстовом виде в JavaScript это символ +, а в PHP это .</p><p>Программа на PHP может работать как для посетителей сайта, так и для всех. Чтобы программа была доступна всем, нужно выполнить эту подпрограмму:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/360d6c6c-8b64-45b1-9251-85f878aec6ed.png" alt="" /></figure><h2>Практика</h2><p>Создадим простейшее клиент-серверное приложение, в котором пользователь будет создавать и редактировать данные, и они будут сохраняться на сервере и загружаться с сервера на клиент при каждом запуске клиентской части приложения, если пользователь авторизуется.</p><p>Создадим кнопку Добавить, при нажатии на которую пользователю будет предложено ввести строку. Эта кнопка будет располагаться на белом фоне, внутри элемента Фон</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/85d44af5-025e-4096-9620-bb1ca78e6b54.png" alt="" /></figure><p>При нажатии на кнопку «выполнить js-программу» в верхнем меню на экране появится это:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/91dcd99a-4e0b-4798-965e-0241e205d232.png" alt="" /></figure><p>Добавим поле, в котором будут располагаться строки:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/98f2504b-6f21-4842-bb21-d81501bb2106.png" alt="" /></figure><p>Теперь интерфейс выглядит так:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/65b28056-b753-42f6-8ac6-f3186c026e30.png" alt="" /></figure><p>Добавим подпрограмму, которая будет исполняться при нажатии на кнопку:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/3a14b023-4af9-44d5-8293-72ad1616d489.png" alt="" /></figure><p>Эта подпрограмма предложит пользователю ввести строку и после этого, если строка была введена, вызовет подпрограмму создать_элемент для создания элемента внутри поля. На её вход подаётся строка:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/73afb808-f83f-4961-a07c-c6a1bdd6051b.png" alt="" /></figure><p>Каждому новому созданному элементу будет назначена подпрограмма <b></b><b></b> для события нажатия на него.</p><p>В этой подпрограмме сначала создаётся массив дочерних элементов поля. Далее у каждого элемента изменяется цвет и каждому элементу назначается подпрограмма для события нажатия на него. И после этого у нажатого элемента изменяется цвет и ему назначается подпрограмма повторный_клик_строки для повторного нажатия на элемент. В ней будет происходить процедура редактирования строки элемента.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-15/47a8f5dc-416b-4d33-9adf-4968ad026e86.png" alt="" /></figure><p>При создании и редактировании элемента в поле содержимое поля будет сохранено на сервере через вызов подпрограммы сохранить_данные<b>.</b></p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/eb9b711d-f583-47dd-8238-b52162a91189.png" alt="" /></figure><p>В этой подпрограмме создаются JSON-данные из содержимого поля и вызывается подпрограмма запрос_на_сервер (request_to_server), которая пытается отправить данные на сервер. На её вход подаются: адрес php-файла в интернете, данные и адрес подпрограммы, которая будет обрабатывать ответ от сервера или подпрограммы запрос_на_сервер</p><p>Если не будет связи с сервером, то пользователь увидит объявление offline. В противном случае, если ответ от сервера не будет равен ок, то пользователь увидит объявление доступ запрещён</p><p>На сервере в программе сохранить_данные.php сначала проверяется отсутствие <a href="https://developer.mozilla.org/ru/docs/Web/HTTP/Authentication">базовой аутентификации</a> клиента. Если нет аутентификации, то выполняется запрос аутентификации — клиент должен ввести логин и пароль.  Если клиент не аутентифицируется, то программа не будет исполняться дальше.</p><p>Если аутентификация есть, то создаются адреса для логина и пароля. Далее проверяется, есть ли на сервере файл логин_админа.txt<b>,</b> и если он есть, то проверяется совпадение логина и пароля, введённых клиентом, с логином и паролем, сохранёнными в файлах логин_админа.txt<b> </b>и пароль_админа.txt на сервере. Если нет полного совпадения, то клиенту отправляется слово отказ и программа завершается.</p><p>Если логины и пароли совпадают, то создаётся адрес для полученных данных и эти данные сохраняются в файл данные.txt<b> </b>и клиенту отправляется слово ок</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/7b7aeb32-0c09-462a-9e7f-6f74271c0fff.png" alt="" /></figure><p>В начале клиентская программа выполняет подпрограмму получить_данные</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/974eb544-4220-409b-9a8e-a02da6b526fb.png" alt="" /></figure><p>В ней выполняется запрос на сервер с вызовом программы получить_данные.php</p><p>Первая часть этой подпрограммы повторяет код из программы сохранить_данные.php</p><p>Но если файлы логин_админа.txt и пароль_админа.txt отсутствуют, то они создаются.</p><p>После этого проверяется наличие файла данные.txt</p><p>Если данные есть, то они оправляются клиенту. Если нет, то клиенту отправляется слово нет</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/1911b76f-6f0e-4cc8-b722-977b76f8dcb8.png" alt="" /></figure><p>В подпрограмме получить_данные ответ сервера обрабатывает соответствующая подпрограмма. Она заполняет элемент поле элементами, преобразуя строку innerHTML в элементы. И назначает каждому элементу подпрограмму для события нажатия на элемент.</p><p>Документу назначается подпрограмма для события нажатия на клавишу клавиатуры. Клавишами Delete и Backspace пользователь может удалять элементы в поле, а стрелками вверх и вниз перемещать элементы относительно друг друга.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-01/91d13f32-11d6-4aa7-926e-d925ffabece3.png" alt="" /></figure><p>Эта подпрограмма при запуске получает через адрес событие объект события нажатия на клавишу.</p><p>Далее выполняется подпрограмма, запрещающая действия браузера по умолчанию, чтобы при нажатии на клавишу Backspace браузер не перешёл на предыдущую страницу.</p><p>Далее адрес код_клавиши связывается с кодом нажатой клавиши.</p><p>В первом ветвлении если нажаты клавиши для удаления, удаляется элемент через вызов его подпрограммы удалить_элемент</p><p>Во втором ветвлении для стрелки вверх сначала проверяется, есть ли выделенная строка. Далее через обращение к свойству предыдущий_элемент проверяется, есть ли предыдущий элемент. И если он есть, то выделенная строка помещается перед ним через вызов подпрограммы добавить_элемент_перед родительского элемента.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-03/a1b939e5-576a-4330-9058-d6e7bb6ba8c2.png" alt="" /></figure><p>В третьем ветвлении для стрелки вниз тоже сначала проверяется, есть ли выделенная строка. Далее через обращение к свойству следующий_элемент проверяется, есть ли следующий элемент. И если он есть, то проверяется, есть ли следующий после него элемент. И если после выделенной строки есть два элемента, то она помещается перед вторым после неё элементом. И если нет двух элементов после, то строка помещается в коней родительского контейнера через вызов его подпрограммы добавить_элемент</p><p>После каждого изменения данные сохраняются.</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-03/f76ce728-472f-4af6-9008-82cbe6be3650.png" alt="" /></figure><p>Чтобы собрать клиентскую часть этого приложения, нужно создать файл<b> </b>index.html, в котором есть: базовый стиль оформления (<b>сброс_css)</b>, используемая подпрограмма (<b>request_to_server)</b>, и ссылка на клиентскую js-программу (<b>index.js).</b></p><p>На сервере должны быть такие файлы:</p><figure><img src="https://media.tproger.ru/user-uploads/104981/2024-09-03/5d99fbc6-663a-40ce-ad94-47d52cefde25.png" alt="" /></figure><p>Как видите, всё очень просто и понятно.</p><p>Ещё есть два свободных редактора с ЖивоСкриптом — <b>Двадэшки</b> для 2D-игр с библиотекой matter.js и <b>ВебКодер</b> для создания сайтов. В ВебКодере также визуализированы языки HTML и CSS.</p><p>Во многих школах программирования детям преподают основы профессионального программирования, в том числе и фреймворки. Такую сложность могут выдержать не все заинтересованные дети — некоторые испытывают стресс и отказываются далее учиться, поэтому выживают только сильнейшие программисты. Детям необходимо сосредоточиться на творчестве — им не надо думать о профессиональных инструментах и заработке. Нужно успеть натворить как можно больше, научиться изобретать и думать на языке машины — это главная задача. Ребёнок, научившийся создавать настоящие приложения в визуальном редакторе, легко сможет освоить любой другой язык программирования, когда станет взрослым, или может всю жизнь так программировать, если не захочет работать в профессиональной индустрии.</p><blockquote>Простота – это не только наглядный стиль. Это не минимализм или отсутствие беспорядка. Чтобы достичь простоты, необходимо прорыть туннель в недрах сложности. Чтобы быть по-настоящему простым, нужно добраться до самой глубины. Вы должны глубоко понять суть продукта, чтобы иметь возможность избавиться от частей, которые не являются существенными.</blockquote><blockquote>В JavaScript присутствует прекрасный, утонченный и чрезвычайно выразительный язык, похороненный под дымящейся кучей хороших намерений и оплошностей.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Cangjie: язык программирования Huawei — что мы о нем знаем</title>
      <link>https://tproger.ru/articles/cangjie--yazyk-programmirovaniya-huawei---chto-my-o-nyom-znaem</link>
      <comments>https://tproger.ru/articles/cangjie--yazyk-programmirovaniya-huawei---chto-my-o-nyom-znaem?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Света Соколовская]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/cangjie--yazyk-programmirovaniya-huawei---chto-my-o-nyom-znaem</guid>
      <description><![CDATA[<p>Все о Cangjie, новом языке программирования: кому подходит и какие есть преимущества перед другими языками, которые мы уже знаем</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/cangjie--yazyk-programmirovaniya-huawei---chto-my-o-nyom-znaem">Cangjie: язык программирования Huawei — что мы о нем знаем</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 17 Sep 2024 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В июне китайская компания Huawei <a href="https://www.gizmochina.com/2024/06/21/huawei-cangjie-programming-language/">представила</a> новый язык программирования — Cangjie («Цанцзе»). Это событие привлекло внимание разработчиков и экспертов по всему миру. Если вы еще не слышали об этом языке, он может стать ключевым инструментом для девелоперов экосистемы Huawei. Разбираемся в новинке и какие есть преимущества.</p><p>Впервые упоминание о Cangjie появилось в октябре 2021 года. Huawei <a href="https://www.cnews.ru/news/top/2021-10-22_huawei_sozdala_svoj_sovershenno">собиралась</a> выпустить этот язык программирования в 2022 году, но по каким-то причинам запуск отложился на целых два года.</p><p>Основная аудитория Cangjie — разработчики, работающие с экосистемой Huawei, включая мобильные устройства, облачные сервисы и IoT (Интернет вещей). Если вы уже знакомы с языками вроде Java или C++, освоить Cangjie будет проще, потому что у них есть некоторые общие черты. Huawei нацелена на то, чтобы привлечь разработчиков из разных сфер, предлагая им мощный и гибкий язык для создания приложений.</p><h2>Стратегические цели Huawei: только ли ответ на санкции?</h2><p>Компания разработала Cangjie с несколькими стратегическими целями. В первую очередь это ответ на санкции: появилась необходимость постепенно объединять Harmony OS и OpenEuler. Harmony OS — мобильная ОС, <a href="https://www.cnews.ru/news/top/2019-08-09_huawei_vypustila_svoego_konkurenta_androidv">представленная</a> в августе 2019 года как альтернатива iOS и Android. OpenEuler — продукт для облачных сервисов. Это дистрибутив Linux, запущенный в январе 2020 года, основанный на EulerOS, который является форком CentOS. Так компания будет меньше зависеть от других уже существующих технологий.</p><figure><img src="https://media.tproger.ru/user-uploads/104387/2024-09-12/efca7623-a730-4a07-a954-f5c50048bb34.jpg" alt="" /></figure><p>Кроме того, Huawei видит в этом проекте долгосрочную инвестицию в будущее. Упрощенный синтаксис и возможности доменно-ориентированной разработки позволят новичкам быстрее осваивать программирование. Huawei заинтересована в создании активного сообщества, которое будет поддерживать и развивать язык, что в перспективе принесет компании выгоду за счет увеличения базы разработчиков.</p><p>А еще введение нового языка укрепляет имидж Huawei как инноватора в области технологий. В условиях жесткой конкуренции с другими технологическими гигантами, такими как Google или Apple, создание уникальных решений и дает возможность выделяться.</p><h2>Преимущества Cangjie: безопасность, производительность и гибкость</h2><p>Что интересного есть у Cangjie:</p><ul><li><b>Интеграция с аппаратным и программным обеспечением Huawei.</b> Теперь разработка приложений под устройства Huawei станет более эффективной.</li><li><b>Интеграция с Agile DSL.</b> Можно объединять обычное программирование с конструкциями, близкими к естественному языку. Это упрощает взаимодействие между техническими и нетехническими участниками проекта, улучшая коммуникацию и совместную работу.</li><li><b>Встроенные инструменты для статической проверки кода</b>, которые помогают выявлять уязвимости и ошибки на этапе написания кода. Это улучшает качество создаваемого программного обеспечения и позволяет разработчикам исправлять проблемы до того, как они попадут в конечный продукт. А еще повышает безопасность кода.</li><li><b>Улучшенное управление памятью и сборка мусора.</b> Обеспечивает более эффективное выполнение кода и минимизирует вероятность утечек памяти. Разработчики могут сосредоточиться на бизнес-логике, не беспокоясь о низкоуровневых задачах, связанных с управлением ресурсами.</li><li><b>Высокое быстродействие.</b> Можно создавать приложения с высокой нагрузкой, например, для работы с большими данными или машинного обучения.</li><li><b>Гибкость синтаксиса. </b>Можно писать код с минимальным количеством строк. Это актуально для новичков, которые только начинают путь в программировании.</li></ul><h2>Какие перспективы у российских разработчиков</h2><p>Huawei пока еще не объявляла дату релиза, но в рамках <a href="https://developer.huawei.com/consumer/cn/activityDetail/cangjie-beta/">бета-тестирования</a> предоставлены все необходимые инструменты: разработка, тестирование, отладка и статическая проверка качества программного обеспечения.</p><figure><img src="https://media.tproger.ru/user-uploads/104387/2024-09-11/abd7a837-c81a-4680-94e9-7b82a285d73c.png" alt="" /><figcaption>На сайте уже можно зарегистрироваться и изучать язык. Правда, как отмечают пользователи, перевод сайта на русский и английский работает пока не у всех</figcaption></figure><p>Для российских разработчиков использование Cangjie может стать актуальным, если работа с экосистемой Huawei войдет в их приоритеты. В условиях международной обстановки адаптация программных решений под китайские технологии уже активно развивается. Если Huawei продолжит расширять свои позиции в мире, включая Россию, то интерес к Cangjie среди местных разработчиков будет расти.</p>]]></content:encoded>
    </item>
    <item>
      <title>Python, Go, Rust: названы самые популярные языки программирования в 2024 году</title>
      <link>https://tproger.ru/news/python--go--rust--nazvany-samye-populyarnye-yazyki-programmirovaniya-v-2024-godu</link>
      <comments>https://tproger.ru/news/python--go--rust--nazvany-samye-populyarnye-yazyki-programmirovaniya-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/python--go--rust--nazvany-samye-populyarnye-yazyki-programmirovaniya-v-2024-godu</guid>
      <description><![CDATA[<p>В 2024 году Python сохраняет лидирующие позиции среди языков программирования благодаря широкому применению. JavaScript и Java остаются популярными для фронтенд-разработки и корпоративных приложений</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/python--go--rust--nazvany-samye-populyarnye-yazyki-programmirovaniya-v-2024-godu">Python, Go, Rust: названы самые популярные языки программирования в 2024 году</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 02 Sep 2024 04:25:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2024 году анализ популярности языков программирования <a href="https://www.zdnet.com/article/the-most-popular-programming-languages-in-2024-and-what-that-even-means/">показал</a>, что Python уверенно лидирует в большинстве рейтингов.</p><p>Он сохраняет свою востребованность благодаря широкому спектру применения — от веб-разработки до анализа данных и машинного обучения.</p><h2>Ключевые тенденции в программировании</h2><p>JavaScript и Java также продолжают занимать важные позиции в мире программирования.</p><p>Так, JavaScript остается незаменимым для фронтенд-разработки, в то время как Java сохраняет свою популярность среди разработчиков корпоративных приложений. Эти языки остаются основой для создания многих современных цифровых решений.</p><figure><img src="https://media.tproger.ru/user-uploads/98945/2024-09-02/483e4c9b-c0a4-462e-b3df-f0fcc2544d8c.jpg" alt="" /></figure><p>Кроме того, TypeScript, являющийся расширением JavaScript, стабильно набирает популярность. Он привлекает внимание разработчиков, стремящихся к более строгой типизации и управляемому коду в крупных проектах.</p><p>С другой стороны, языки C и C++ продолжают оставаться важными для системного программирования и создания высокопроизводительных приложений, что подтверждает их долгосрочную актуальность.</p><h2>Растущие звезды: Go и Rust</h2><p>В 2024 году Go и Rust привлекли еще больше внимания. Go активно используется для создания облачных приложений и микросервисов, тогда как Rust известен своей безопасностью и эффективностью в системном программировании.</p><p>Оба языка показывают, как новые технологии могут успешно решать современные задачи и постепенно занимать важное место в экосистеме разработчиков.</p><h2>Рекомендации по выбору языка</h2><p>Выбор языка программирования всегда зависит от конкретных целей.</p><p>Python будет лучшим выбором для тех, кто хочет углубиться в анализ данных или разработку на основе искусственного интеллекта.</p><p>JavaScript и TypeScript идеально подходят для веб-разработки, особенно если вам важна современная типизация.</p><p>Если вы планируете заниматься системным программированием или создавать высокопроизводительные приложения, обратите внимание на C, C++ или Rust.</p><h2>Важность владения несколькими языками</h2><p>Современные проекты часто требуют знания нескольких языков программирования.</p><p>Например, разработка веб-приложений может потребовать комбинации JavaScript, SQL и PHP. Поэтому важно не только осваивать один язык, но и расширять свои навыки, чтобы оставаться конкурентоспособным на рынке труда.</p><figure><img src="https://media.tproger.ru/user-uploads/98945/2024-09-02/ebaa61d6-ef76-4671-be24-decc8470369f.jpg" alt="" /></figure>]]></content:encoded>
    </item>
    <item>
      <title>«Это карьерная ловушка»: почему не стоит следовать всем трендам в разработке</title>
      <link>https://tproger.ru/news/-eto-karernaya-lovuwka---pochemu-ne-stoit-sledovat-vsem-trendam-v-razrabotke</link>
      <comments>https://tproger.ru/news/-eto-karernaya-lovuwka---pochemu-ne-stoit-sledovat-vsem-trendam-v-razrabotke?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/-eto-karernaya-lovuwka---pochemu-ne-stoit-sledovat-vsem-trendam-v-razrabotke</guid>
      <description><![CDATA[<p>В своем блоге The Hustling Engineer Хемант Пандей предупреждает разработчиков о рисках слепого следования всем трендам. Погоня за новыми технологиями может стать карьерной ловушкой, отвлекая от углубления знаний и развития ключевых навыков. Пандей советует выбирать технологии стратегически.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/-eto-karernaya-lovuwka---pochemu-ne-stoit-sledovat-vsem-trendam-v-razrabotke">«Это карьерная ловушка»: почему не стоит следовать всем трендам в разработке</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 13 Aug 2024 06:28:57 GMT</pubDate>
      <content:encoded><![CDATA[<p>В своем блоге The Hustling Engineer Хемант Пандей <a href="https://thehustlingengineer.substack.com/p/following-industry-trends-can-be">поделился</a> размышлениями о том, почему не стоит слепо следовать каждому новому тренду в мире разработки.</p><p>По его мнению, погоня за всеми новшествами может оказаться ловушкой для карьеры, где вместо углубления знаний и совершенствования навыков, разработчики расходуют свои ресурсы на мимолетные технологии.</p><h2>Ограниченные ресурсы и время</h2><p>У каждого специалиста есть ограниченное количество времени для развития.</p><p>Пандей отмечает, что слепое следование каждому новому тренду может отвлечь от более важных задач, например, от углубления знаний в уже востребованных технологиях.</p><p>Вместо того чтобы стать экспертом в своей области, вы рискуете оставаться на уровне поверхностных знаний по множеству разных тем.</p><h2>Глубина важнее широты</h2><p>Хемант также подчеркивает, что работодатели больше ценят специалистов, обладающих глубокими знаниями в конкретной области, чем тех, кто знаком с широким спектром технологий, но на базовом уровне.</p><p>Например, владение одним языком программирования на высоком уровне может оказаться гораздо полезнее, чем поверхностное знание нескольких модных инструментов.</p><h2>Развитие основных навыков</h2><p>Помимо этого, автор блога акцентирует внимание на важности развития фундаментальных навыков, таких как логическое мышление и решение проблем.</p><p>Эти навыки остаются востребованными вне зависимости от того, какие тренды доминируют на рынке в данный момент.</p><p>То есть, по мнению Хемант Пандея, будет куда правильнее подходить к выбору технологий стратегически, сосредотачиваясь на тех, которые принесут долгосрочные результаты и помогут в построении успешной карьеры.</p>]]></content:encoded>
    </item>
  </channel>
</rss>