<?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>C#</title>
    <description>Программирование на C# для начинающих и опытных программистов. В этом разделе вы найдёте полезные учебники и гайды по языку программирования C sharp.</description>
    <link>https://tproger.ru/tag/c-sharp</link>
    <atom:link href="https://tproger.ru/tag/c-sharp/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Wed, 23 Sep 2026 17:15:34 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>C#</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Как случайно написать самый быстрый CSV-парсер на C#</title>
      <link>https://tproger.ru/translations/kak-sluchajno-napisat-samyj-bystryj-csv-parser-na-c-</link>
      <comments>https://tproger.ru/translations/kak-sluchajno-napisat-samyj-bystryj-csv-parser-na-c-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/kak-sluchajno-napisat-samyj-bystryj-csv-parser-na-c-</guid>
      <description><![CDATA[<p>Как SIMD-инструкции SSE2 и AVX2 ускоряют парсинг CSV в 10 раз. Разбираем путь от наивной реализации до библиотеки, обогнавшей Sep в 41 из 70 бенчмарков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/kak-sluchajno-napisat-samyj-bystryj-csv-parser-na-c-">Как случайно написать самый быстрый CSV-парсер на C#</a>»</p>]]></description>
      <category><![CDATA[Лучшая практика]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 28 Mar 2026 15:28:21 GMT</pubDate>
      <content:encoded><![CDATA[<p>На рождественских каникулах 2025 года автор библиотеки <a href="https://github.com/bbepis/FourLambda.Csv">FourLambda.Csv</a> ехал в автобусе и читал про UTF-8. Обнаружив, что все ASCII-символы в UTF-8 занимают ровно один байт, он начал экспериментировать с подсчётом символов на максимальной скорости. Через несколько дней у него был готовый CSV-парсер на C#, который обогнал все существующие библиотеки в большинстве бенчмарков. Вот как это произошло.</p><blockquote><b>Ключевые выводы</b><br />- SIMD-инструкции (SSE2, AVX2) позволяют обрабатывать 16-32 байта за одну операцию<br />- В UTF-8 все управляющие символы CSV (запятая, кавычка, перенос строки) занимают ровно один байт и совпадают с ASCII<br />- Минималистичный код (16 КБ) побеждает оптимизированный, но раздутый (163 КБ) за счёт давления на L1-кэш процессора<br />- Компилятор и рантайм умеют оптимизировать лучше, если им не мешать микрооптимизациями</blockquote><h2>Наивная реализация — считаем запятые</h2><p>Прежде чем строить парсер, поставим простую задачу: как быстрее всего подсчитать, сколько раз символ , встречается в большом UTF-8-файле? Тестируем на CSV-файле размером 500 МБ.</p><h3>Базовая реализация: 135,305 мс</h3><p>Простейший вариант: перебираем каждый байт и сравниваем с искомым. Можно ли лучше?</p><h3>Unsafe-указатели: 128,683 мс</h3><p>Каждый раз, когда вы обращаетесь к массиву через data[i], рантайм .NET выполняет проверку границ (bounds checking) — убеждается, что индекс не выходит за пределы массива. Если вместо этого использовать unsafe-указатели, мы обещаем рантайму, что не выйдем за границы. Экономия — 7 мс.</p><h3>Развёртка цикла (unrolling 4x): 105,320 мс</h3><p>Механика цикла for обманчиво дорога: на каждой итерации нужно проверить условие выхода и выполнить переход в начало. Если обрабатывать по 4 элемента за итерацию, накладные расходы снижаются в четыре раза. «Хвост» данных, не кратный четырём, обрабатывается обычным побайтовым циклом.</p><h2>Проблема — UTF-8 и Unicode ломают всё</h2><p>Чтобы понять, почему мы можем сканировать текст <i>настолько</i> быстро, нужно разобраться, как текст хранится в памяти компьютера.</p><p>Наименьшая единица данных — байт (числа 0-255). Но человечество использует гораздо больше 256 символов. Ранние системы решали это через кодовые страницы — у каждого региона была своя таблица. Японские системы использовали Shift-JIS, в Китае по закону обязателен GB 18030. Если открыть файл в неправильной кодировке, вы увидите «крокозябры» (mojibake) — бессмысленный набор символов.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-03-28/1dd24e6b-e5ac-4bc8-986c-9c0566debde9.webp" alt="Пример mojibake — крокозябры при открытии файла в неправильной кодировке" /><figcaption>Так выглядит mojibake — результат открытия файла в неправильной кодировке</figcaption></figure><p>Unicode решил эту проблему в 90-х: каждому символу присваивается номер (codepoint), а разные кодировки (UTF-8, UTF-16, UTF-32) определяют, как эти номера записываются в байты.</p><p>Вот как UTF-8 кодирует символы в зависимости от количества байтов:</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-03-28/09bc69c0-ede8-4534-a016-3d01c7f7357f.webp" alt="Таблица ASCII — первые 128 символов, которые в UTF-8 кодируются одним байтом" /><figcaption>Таблица ASCII-символов: все они кодируются в UTF-8 ровно одним байтом</figcaption></figure><p>Ключевой факт: байты 0x00-0x7F в UTF-8 <b>полностью совпадают</b> с ASCII. Это значит, что управляющие символы CSV — запятая (,), кавычка ("), перевод строки (\n) — всегда занимают ровно один байт, независимо от того, какие Unicode-символы находятся в данных. И это можно использовать для невероятно быстрого сканирования.</p><h2>SIMD — ускорение через параллельные инструкции</h2><p>До сих пор мы обрабатывали по одному байту за раз. Представьте сложение двух массивов по 8 элементов — нужно 8 отдельных операций сложения. Можно распараллелить это по потокам, но управление потоками создаёт накладные расходы и не добавляет эффективности.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-03-28/a70a8c10-6a79-472a-b254-0c372fe72b71.webp" alt="Скалярное сложение — один элемент за раз" /><figcaption>Скалярная операция: процессор обрабатывает по одному элементу</figcaption></figure><p><b>SIMD</b> (Single Instruction, Multiple Data) — это набор процессорных инструкций, которые выполняют одну операцию сразу над несколькими элементами данных. Вся магия происходит в железе, поэтому результат приходит за то же время, что и обычная операция над одним элементом.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-03-28/1e1ba95a-bfc8-4abe-9db0-6a1d8fb8380a.webp" alt="SIMD — параллельная обработка нескольких элементов" /><figcaption>SIMD: четыре операции сложения за одну инструкцию</figcaption></figure><p>Аналогия: сложить два однозначных числа (8 + 2) — просто. Сложить два семизначных — нужно перебирать разряды. А теперь представьте, что вы можете «увидеть» сумму двух семизначных чисел мгновенно, с той же лёгкостью, что и однозначных. Это и есть SIMD.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-03-28/71aa521a-5fb7-457b-abdd-e169a3fba9ae.webp" alt="Широкий SIMD-регистр обрабатывает ещё больше данных" /><figcaption>Более широкие регистры позволяют обрабатывать больше элементов за такт</figcaption></figure><p>Вот как выглядит SIMD-сложение 4 элементов за одну операцию:</p><p>Мы делаем в 4 раза больше работы за то же усилие.</p><h3>SSE2: 46,663 мс</h3><p>SSE2 (появился в x86-процессорах в 2000 году) работает с 128-битными регистрами — 16 байтов за раз. Алгоритм такой:</p><ol><li>Загрузить 16 байтов данных в SIMD-вектор</li><li>Сравнить каждый байт с искомым (Sse2.CompareEqual) — на позициях совпадений появятся байты 255, на остальных — 0</li><li>Извлечь старшие биты из каждого байта (Sse2.MoveMask) — получаем 16-битное число, где каждый установленный бит означает совпадение</li><li>Подсчитать установленные биты</li></ol><p>Для строки "Hello, I, like, commas." это выглядит так:</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-03-28/64b6f6ff-d258-444a-9c06-9f382ab70ae9.webp" alt="Поиск разделителей через SIMD — CompareEqual и MoveMask" /><figcaption>SIMD-поиск запятых: сравнение вектора данных с вектором разделителей</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-03-28/6f22e456-df00-4a1e-aa15-3becd73f67b1.webp" alt="Расширенная SIMD-диаграмма для строки с Unicode" /><figcaption>Поиск разделителей в строке с Unicode-символами</figcaption></figure><h3>AVX2: 42,220 мс</h3><p>AVX2 (с 2011 года) расширяет регистры до 256 битов — 32 байта за итерацию. Код аналогичен SSE2, но с Vector256 вместо Vector128.</p><p>Прирост скромный — значит, узкое место сместилось на цикл обработки маски. Нужно ускорить подсчёт битов.</p><h3>AVX2 + TZCNT: 16,630 мс</h3><p>BitOperations.TrailingZeroCount — аппаратная инструкция TZCNT, которая мгновенно находит позицию младшего установленного бита. Вместо того чтобы перебирать биты маски по одному, мы прыгаем сразу к следующему совпадению и сбрасываем его.</p><h3>AVX2 + POPCNT: 13,673 мс</h3><p>А есть ещё лучше. BitOperations.PopCount — аппаратная инструкция POPCNT, которая за одну операцию считает количество установленных битов в числе. Именно то, что нам нужно:</p><p>Мы достигли потолка производительности для подсчёта символов. Ускорение в 10 раз по сравнению с наивной реализацией — отличный результат. Пора применить это к парсингу CSV.</p><h2>Поиск разделителей через SIMD</h2><p>При парсинге CSV нас интересуют три управляющих символа: запятая (,), кавычка (") и перевод строки (\n). Правила обработки:</p><ul><li>Запятая — конец текущего поля</li><li>Перевод строки — конец текущей строки</li><li>Кавычка — начало или конец экранированного блока (внутри которого запятые и переносы игнорируются). Две кавычки подряд — это экранированная кавычка в значении</li></ul><p>Парсинг разбивается на два этапа. Первый — определение позиций и длин полей через SIMD (функция DetermineFields). Второй — фактическое извлечение и дeкодирование значений, только когда пользователь их запрашивает.</p><p>Вот упрощённый код первого этапа (без обработки краевых случаев):</p><p>Несколько важных деталей:</p><ul><li>Здесь используется TrailingZeroCount вместо PopCount, потому что нам важна позиция каждого найденного символа, а не только их количество</li><li>Одна и та же схема CompareEqual + MoveMask применяется для каждого управляющего символа, а затем маски объединяются через OR. Отдельные маски сохраняются, чтобы потом определить тип найденного символа</li><li>Мы не касаемся содержимого полей — если пользователю нужен только один столбец, незачем декодировать остальные</li></ul><h2>Обработка кавычек и экранирования</h2><p>Когда поле содержит кавычки, нужно выполнить декодирование вручную — убрать обрамляющие кавычки и заменить двойные кавычки на одинарные. Кроме того, C# внутри использует UTF-16 для всех строк (char — это 16-битная единица кода), поэтому при чтении UTF-8 приходится конвертировать.</p><p>Если кавычек в поле нет, используется быстрая встроенная конвертация Encoding.UTF8.GetChars. Но если кавычки есть, быстрее выполнить конвертацию и удаление кавычек за один проход:</p><p>Хитрость здесь в том, что 2- и 3-байтовые UTF-8-последовательности всегда дают одну единицу кода UTF-16, поэтому кодпоинт можно просто привести к char. Четырёхбайтовые символы (эмодзи и редкие иероглифы) требуют суррогатных пар.</p><p>Для UTF-16-строк (внутренний формат C#) парсер использует трюк с Avx2.PackUnsignedSaturate: два 256-битных вектора 16-битных символов «сжимаются» в один 256-битный вектор 8-битных байтов. ASCII-символы сохраняются как есть, а все не-ASCII насыщаются до 255 (или 0 для отрицательных при знаковой интерпретации). После перестановки блоков через Avx2.Permute4x64 можно применять ту же маску, что и для UTF-8.</p><h2>Бенчмарки — результаты</h2><p>Существующие бенчмарки CSV-парсеров на C# тестируют только один файл — по сути, они измеряют не парсинг CSV, а производительность на одном конкретном сценарии. Поэтому автор создал собственный набор тестов с разными типами данных:</p><ul><li><b>Реальные данные Reddit</b> — широкий датасет с разными типами данных и большим количеством текста (из Reddit ArcticShift)</li><li><b>Международный текст</b> — CSV с названиями предметов из Pokemon на множестве языков (кириллица, японский, корейский)</li><li><b>Финансовые данные</b> — числа с минимумом текста</li><li><b>Синтетические тесты</b> — числовые поля, короткие файлы (50 строк), файлы с обязательным экранированием, «стресс-тест» с массой кавычек</li></ul><p>Полные результаты опубликованы на <a href="https://bepis.io/csv-benchmark/">bepis.io/csv-benchmark</a>.</p><p>Итог: <b>FourLambda.Csv оказался самым быстрым в 41 из 70 тестов</b>. Не абсолютная победа, но убедительное лидерство.</p><p>Для сравнения, вот как менялась скорость подсчёта символов на файле 500 МБ по мере оптимизации:</p><h3>Почему FourLambda.Csv быстрее Sep</h3><p>До этого самым быстрым CSV-парсером на C# считалась библиотека <a href="https://github.com/nietras/Sep">Sep</a>. Вот несколько причин, почему FourLambda.Csv выигрывает:</p><p><b>UTF-8 без промежуточной конвертации.</b> Sep внутри конвертирует UTF-8 в UTF-16 даже если данные не нужны пользователю. FourLambda.Csv работает напрямую с UTF-8.</p><p><b>Давление на кэш.</b> L1-кэш процессора — около 32-64 КБ, и он хранит не только данные, но и исполняемый код. FourLambda.Csv весит ~16 КБ, а Sep — ~163 КБ. Разница в 10 раз означает, что Sep может вытеснять данные из L1-кэша, вызывая медленные обращения к памяти.</p><p><b>Переоптимизация.</b> Sep тщательно контролирует, как данные перемещаются между регистрами. Теоретически это быстрее, но на практике может мешать оптимизациям рантайма. Компилятор и процессор умеют оптимизировать код, если им не указывают точный способ выполнения. Чрезмерная микрооптимизация «связывает руки» и мешает автоматическим улучшениям в новых версиях .NET.</p><p><b>Зависимость от оборудования.</b> Результаты могут отличаться на разных машинах. Например, Sse.Prefetch0 (предзагрузка данных в L1) давала +10-20% на ноутбуке с DDR3, но почти нулевой эффект на десктопе с DDR5. На системах с AVX-512 и ARM у Sep есть аппаратные оптимизации, которых пока нет в FourLambda.Csv.</p><h2>Выводы</h2><p>История этого проекта — хороший пример того, как глубокое понимание низкоуровневых деталей (кодировки, устройство кэша, SIMD-инструкции) может привести к результатам, которые превосходят годы целенаправленных оптимизаций в существующих библиотеках.</p><p>Главные уроки:</p><ul><li>SIMD — не магия для избранных. В C# интринсики доступны из коробки и дают кратный прирост на задачах поиска и сравнения</li><li>UTF-8-совместимость ASCII — мощное свойство, которое можно эксплуатировать для быстрого парсинга</li><li>Минимализм побеждает сложность: меньше кода — меньше давления на кэш — быстрее выполнение</li><li>Не мешайте компилятору: иногда лучшая оптимизация — не оптимизировать вручную</li></ul><p>Библиотека доступна на GitHub: <a href="https://github.com/bbepis/FourLambda.Csv">bbepis/FourLambda.Csv</a>.</p><p><i>Перевод и адаптация статьи <a href="https://bepis.io/blog/turbo-csv-parser/">How I accidentally made the fastest C# CSV parser</a> с разрешения автора.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Ютубер научил свою собаку «программировать» игры с помощью Claude и Raspberry Pi</title>
      <link>https://tproger.ru/news/yutuber-nauchil-svoyu-sobaku--programmirovat--igry-s-pomoshhyu-claud</link>
      <comments>https://tproger.ru/news/yutuber-nauchil-svoyu-sobaku--programmirovat--igry-s-pomoshhyu-claud?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/yutuber-nauchil-svoyu-sobaku--programmirovat--igry-s-pomoshhyu-claud</guid>
      <description><![CDATA[<p>Ютубер превратил пса в «геймдизайнера»: Claude и Raspberry Pi собирают игру по случайным нажатиям клавиш, интерпретируя их как креативные идеи</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/yutuber-nauchil-svoyu-sobaku--programmirovat--igry-s-pomoshhyu-claud">Ютубер научил свою собаку «программировать» игры с помощью Claude и Raspberry Pi</a>»</p>]]></description>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Raspberry Pi]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 25 Feb 2026 12:21:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>YouTube-блогер Калеб Лик <a href="https://www.pcgamer.com/software/ai/i-taught-my-dog-to-vibe-code-games-yup-someone-actually-managed-to-get-claude-ai-to-code-a-game-based-on-the-keyboard-inputs-of-a-pooch/">превратил</a> своего пса-кавупу по кличке Момо в… геймдизайнера. Ему для этого оказалось достаточно Claude Code, Raspberry Pi и умной кормушки.</p><h2>Как это работает</h2><p>Момо нажимает клавиши на Bluetooth-клавиатуре. Сигнал проходит через Raspberry Pi 5 в небольшое Rust-приложение DogKeyboard, которое фильтрует спецклавиши и передает ввод ИИ Claude.</p><p>После определенного количества символов система:</p><ul><li>отправляет текст в Claude Code,</li><li>запускает сборку игры (на Godot 4.6, логика — на C#),</li><li>выдает собаке лакомство через автоматическую кормушку,</li><li>звуковым сигналом сообщает, что ИИ готов к следующему «брифингу».</li></ul><p>Один цикл — и еще один уровень готов. На создание играбельной сборки уходит 1–2 часа.</p><h2>Главный трюк — не в собаке</h2><p>Самое сложное, по словам Лика, было не научить собаку «долбить» клавиши, а убедить Claude воспринимать бессмысленный ввод как осмысленные команды.</p><p>Решение — хитрый системный промпт. Искусственному интеллекту сообщили, что перед ним «эксцентричный гениальный геймдизайнер, который говорит загадками». Любой набор символов нужно интерпретировать как скрытую креативную идею.</p><h2>Это глупость или в этом все же что-то есть?</h2><p>Формально Момо не «кодит». Но эксперимент показывает, насколько гибко современные агенты могут интерпретировать даже абсурдный ввод.</p><p>Да и в целом, как фановый проект, ставший популярным мемом — отличное отражение времени.</p>]]></content:encoded>
    </item>
    <item>
      <title>Google пообещала, что до конца года все смогут вайб-кодить видеоигры с помощью ИИ</title>
      <link>https://tproger.ru/news/google-poobeshhala--chto-do-konca-goda-vse-smogut-vajb-kodit-videoigry-s-pomoshhyu-ii</link>
      <comments>https://tproger.ru/news/google-poobeshhala--chto-do-konca-goda-vse-smogut-vajb-kodit-videoigry-s-pomoshhyu-ii?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/google-poobeshhala--chto-do-konca-goda-vse-smogut-vajb-kodit-videoigry-s-pomoshhyu-ii</guid>
      <description><![CDATA[<p>Google обещает, что до конца 2025 года любой сможет вайб-кодить видеоигры с ИИ — создавать их словами без единой строчки кода</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/google-poobeshhala--chto-do-konca-goda-vse-smogut-vajb-kodit-videoigry-s-pomoshhyu-ii">Google пообещала, что до конца года все смогут вайб-кодить видеоигры с помощью ИИ</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 28 Oct 2025 06:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Google <a href="https://www.bleepingcomputer.com/news/google/google-says-everyone-will-be-able-to-vibe-code-video-games/">заявила</a>, что уже к концу 2025 года любой пользователь сможет вайб-кодить собственные видеоигры — буквально создавать их, просто описывая идею словами.</p><p>Об этом рассказал Логан Килпатрик, продакт-лид Google AI Studio, в посте на X.</p><h2>Что такое вайб-кодинг</h2><p>Термин vibe coding (от англ. vibe — «ощущение», «настроение») появился в 2024 году и описывает подход к программированию, где разработчик не пишет код вручную, а общается с ИИ в свободной форме, задавая лишь общие направления: «сделай RPG про кота-самурая», «добавь погодные эффекты», «пусть враги становятся умнее».</p><p>Пока этот подход работал только с простыми проектами вроде сайтов и мобильных приложений, но Google обещает вывести его на новый уровень.</p><h2>Что умеет новый AI Studio</h2><p>По словам компании, обновленный <b>Google AI Studio</b> «понимает задачу и автоматически подбирает нужные модели, API и инструменты».</p><p>Например, если пользователь захочет сделать приложение, генерирующее изображения по промтам, AI Studio сам подключит соответствующий API (в данном случае — Nano Banana API) и настроит всю инфраструктуру.</p><blockquote><i>«Мы сделали процесс создания мощных, функциональных и ИИ-дополненных приложений максимально простым»,</i> — говорится в блоге Google.</blockquote><p>Теперь платформа сможет не только генерировать код, но и <b>автоматически подключать нужные сервисы, базы данных и библиотеки</b>, превращая процесс в полноценный гибрид no-code подхода с вайб-кодингом.</p><h2>Теперь и для игр</h2><p>Килпатрик уточнил, что уже к концу года пользователи смогут вайб-кодить не только веб-приложения, но и простенькие видеоигры.</p><blockquote><i>«Это откроет путь для новых 100 млн разработчиков. Многие мечтают сделать игру, но спотыкаются о C++, C# и Unreal Engine. Теперь они смогут создавать истории, персонажей и геймплей — без единой строчки кода»,</i> — написал он.</blockquote><p>Разумеется, до уровня <i>Civilization</i> или <i>Baldur’s Gate</i> дело не дойдет. По словам Килпатрика, речь идет о «небольших проектах для друзей», где игроки сами управляют сюжетом и механикой.</p><h2>Скепсис и ожидания</h2><p>Пока даже самые продвинутые ИИ-инструменты едва справляются с генерацией простых 2D-игр вроде <i>Wordle</i> или <i>Flappy Bird</i>.</p><p>Поэтому эксперты воспринимают обещания Google с осторожностью — для по-настоящему автономного вайб-кодинга нужно, чтобы ИИ умел проектировать архитектуру, писать оптимизированный код и тестировать его без участия человека.</p><p>Тем не менее, Google, по слухам, готовит к релизу <b>Gemini 3.0</b>, который может радикально улучшить креативные и кодогенерационные возможности.</p><p>Если планы компании сбудутся, то к концу года видеоигра мечты может начаться не с кода, а с фразы:</p><blockquote><i>«Сделай мне космический шутер, где коты сражаются против пылесосов».</i></blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Вышел NWinfo 1.4.4: открытый инструмент для быстрого просмотра характеристик ПК на Windows</title>
      <link>https://tproger.ru/news/vywel-nwinfo-1-4-4--otkrytyj-instrument-dlya-bystrogo-prosmotra-harakteristik-pk-na-windows</link>
      <comments>https://tproger.ru/news/vywel-nwinfo-1-4-4--otkrytyj-instrument-dlya-bystrogo-prosmotra-harakteristik-pk-na-windows?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/vywel-nwinfo-1-4-4--otkrytyj-instrument-dlya-bystrogo-prosmotra-harakteristik-pk-na-windows</guid>
      <description><![CDATA[<p>Вышел релиз NWinfo 1.4.4 — портативного open source инструмента для просмотра характеристик ПК на Windows. Новая версия получила поддержку Ctrl+C, отчёты в JSON/YAML/LUA и обновлённые драйверы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/vywel-nwinfo-1-4-4--otkrytyj-instrument-dlya-bystrogo-prosmotra-harakteristik-pk-na-windows">Вышел NWinfo 1.4.4: открытый инструмент для быстрого просмотра характеристик ПК на Windows</a>»</p>]]></description>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Процессор]]></category>
      <category><![CDATA[Hardware]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 06 Oct 2025 15:40:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>В начале октября 2025 года <a href="https://github.com/a1ive/nwinfo/releases/tag/v1.4.4">вышла новая версия</a> NWinfo 1.4.4 — лёгкого портативного инструмента для просмотра ключевых характеристик компьютера: от процессора и памяти до сетевых адаптеров и дисков. Программа работает на Windows, начиная с XP, и написана на языке C.</p><p>NWinfo позволяет мгновенно получить сводку по системе — включая данные о ЦП, ОЗУ, SMBIOS, CPUID, S.M.A.R.T., PCI, EDID, видеокартах и сетевых интерфейсах. Утилита не требует установки и может запускаться с любого носителя, что делает её удобным решением для диагностики и устранения неполадок. Также поддерживается экспорт отчётов в JSON, YAML и LUA, что облегчает обмен данными и автоматизацию.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-06/00ce5af3-c800-4aae-9869-d371448273a4.png" alt="" /></figure><p>В версии 1.4.4 разработчики исправили ряд ошибок, добавили поддержку копирования через Ctrl+C в графическом интерфейсе, внедрили отображение информации о целостности кода (Code Integrity) и обновили драйверы. Также появилась поддержка PawnIO, расширяющая взаимодействие с файловыми системами.</p><p>NWinfo часто сравнивают с другими инструментами для анализа аппаратной части ПК, но это не аналог HWiNFO. Последний, напомним, обновился до версии 8.30 в августе 2025 года и используется для системного мониторинга и диагностики. Похожий по функциональности проект Glow 25.12, выпущенный в сентябре 2025 года, предлагает детальный анализ компонентов в интерфейсе на C# под лицензией MIT.</p><p>Релиз NWinfo 1.4.4 подтверждает растущий интерес к лёгким и прозрачным инструментам для системного анализа, которые не требуют установки и уважают приватность пользователя.</p>]]></content:encoded>
    </item>
    <item>
      <title>«SQL хорош для данных, но плох для логики» — почему все больше разработчиков выносят бизнес-логику из базы</title>
      <link>https://tproger.ru/news/-sql-horow-dlya-dannyh--no-ploh-dlya-logiki----pochemu-vse-bolwe-razrabotchikov-vynosyat-biznes-logiku-iz-bazy</link>
      <comments>https://tproger.ru/news/-sql-horow-dlya-dannyh--no-ploh-dlya-logiki----pochemu-vse-bolwe-razrabotchikov-vynosyat-biznes-logiku-iz-bazy?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/-sql-horow-dlya-dannyh--no-ploh-dlya-logiki----pochemu-vse-bolwe-razrabotchikov-vynosyat-biznes-logiku-iz-bazy</guid>
      <description><![CDATA[<p>SQL отлично справляется с данными, но неудобен для бизнес-логики: разработчики выносят её в код ради гибкости, скорости и независимости</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/-sql-horow-dlya-dannyh--no-ploh-dlya-logiki----pochemu-vse-bolwe-razrabotchikov-vynosyat-biznes-logiku-iz-bazy">«SQL хорош для данных, но плох для логики» — почему все больше разработчиков выносят бизнес-логику из базы</a>»</p>]]></description>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Oracle]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 24 Sep 2025 11:06:25 GMT</pubDate>
      <content:encoded><![CDATA[<p>Современные приложения все чаще используют базы данных исключительно как «хранилище», а не как движок для бизнес-логики. <i>Почему? </i></p><p>Потому что SQL, несмотря на свое превосходство в работе с данными, неудобен, ограничен и рискован в роли полноценного языка программирования.</p><h2>Логика не по адресу</h2><p>Как <a href="https://ewaldbenes.com/en/blog/why-i-keep-business-logic-out-of-sql">отмечает</a> Эвальд Бенс, фуллстек разработчик и авторов популярного блога об IT, он <b>предпочитает держать как можно больше логики в приложении</b>, а не в SQL-хранилищах, представлениях и процедурах:</p><blockquote>Я отношусь к базе как к тупому хранилищу данных. Вся логика — в коде. SQL просто не предназначен для сложных сценариев.</blockquote><p>И дело не в том, что SQL чего-то «не умеет». Умеет — особенно с расширениями вроде PL/pgSQL или Oracle PL/SQL.</p><p><b>Но выразительность этих языков — далека от Python, TypeScript, Rust или C#</b>, особенно когда речь идет о бизнес-логике, объектной модели или сложных расчетах.</p><h2>Зачем выносить логику из базы?</h2><h2>1. SQL невыразителен</h2><p>Для манипуляций с табличками и JOIN — он король. Но как только начинается рекурсия, классы, вложенные состояния или обработка ошибок — SQL превращается в монстра с BEGIN, IF, LOOP, EXCEPTION, RAISE, CURSOR, FETCH, WHILE и т.д...</p><h2>2. Развертывание — боль</h2><p>Обновить приложение можно за минуту, откатить — за две. А вот миграции на проде — это:</p><ul><li>повышенные права доступа;</li><li>согласование с DBA;</li><li>боязнь сломать что-то «наживую»;</li><li>ручной откат схем.</li></ul><h2>3. Лочит на вендора</h2><p>Логика, написанная на PL/SQL — это билет в один конец к Oracle. Переезд на PostgreSQL или SQL Server становится в 5 раз сложнее.</p><h2>4. Меньше инструментов</h2><p>Вокруг SQL есть утилиты, но полноценной среды с юнит-тестами, статическим анализом, форматтерами, профайлерами, линтерами и отладчиками — почти нет.</p><h2>А что с производительностью?</h2><p>Да, есть нюанс: <b>иногда лучше обработать данные прямо в базе</b>, чтобы не гонять десятки тысяч строк по сети. Это особенно актуально, если не хочется получить классическую проблему N+1-запросов.</p><p>Но даже в этом случае большинство специалистов советует <b>сначала делать «просто и понятно», а не «оптимально заранее»</b>. До тех пор, пока не уперлись в реальные метрики, выносить логику в базу — преждевременная оптимизация.</p><h2>Что делать?</h2><p>Подход <i>«база — хранилище, логика — в коде»</i> стал де-факто стандартом во многих командах. Но это не догма:</p><ul><li>Для отчетности или простых ETL сценариев логика в SQL может быть уместной.</li><li>Для монолитных решений без CI/CD и DevOps — процедурный SQL вполне оправдан.</li><li>Но в современной разработке с частыми релизами, микросервисами и отказоустойчивостью <b>бизнес-логика в приложении — просто удобнее и безопаснее</b>.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft выпустил бесплатный курс по Model Context Protocol с практикой на Python, C# и Java</title>
      <link>https://tproger.ru/news/microsoft-vypustil-besplatnyj-kurs-po-model-context-protocol-s-praktikoj-na-python--c--i-java</link>
      <comments>https://tproger.ru/news/microsoft-vypustil-besplatnyj-kurs-po-model-context-protocol-s-praktikoj-na-python--c--i-java?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/microsoft-vypustil-besplatnyj-kurs-po-model-context-protocol-s-praktikoj-na-python--c--i-java</guid>
      <description><![CDATA[<p>Microsoft запустил бесплатный практический курс по протоколу Model Context Protocol (MCP) с примерами на Python, C#, Java и TypeScript для разработки LLM-приложений и серверов MCP.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/microsoft-vypustil-besplatnyj-kurs-po-model-context-protocol-s-praktikoj-na-python--c--i-java">Microsoft выпустил бесплатный курс по Model Context Protocol с практикой на Python, C# и Java</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Microsoft Project Scorpio]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 03 Jul 2025 10:13:53 GMT</pubDate>
      <content:encoded><![CDATA[<p>На GitHub появился полноценный <a href="https://github.com/microsoft/mcp-for-beginners/?tab=readme-ov-file">бесплатный курс</a> от Microsoft по Model Context Protocol (MCP) — протоколу, который помогает упростить интеграцию LLM и клиентских приложений и стандартизировать их взаимодействие. Учебная программа с открытым исходным кодом рассчитана на разработчиков ИИ, системных архитекторов и инженеров, которые хотят понять, как строить агентные системы и управлять контекстом запросов к языковым моделям.</p><p>Больше новостей — в нашем канале <a href="https://t.me/+WYtyV4-XYmdhZTMy">Представляешь</a></p><h2>Подробности</h2><p>MCP уже становится стандартом для корпоративных ассистентов и мультиагентных систем: протокол позволяет гибко управлять маршрутами вызовов между моделями и сервисами, снижает хаос в интеграциях и упрощает масштабирование LLM-приложений. Теперь у инженеров появилась возможность изучить MCP на практике: в курсе представлены готовые проекты и живой код на Python, C#, Java, TypeScript и JavaScript, есть пошаговые инструкции по настройке среды, запуску серверов и клиентов, интеграции с пайплайнами CI/CD, а также подробные объяснения архитектуры и рекомендаций по безопасности.</p><h3>Что есть в учебной программе</h3><p>Курс разделён на несколько блоков: от основ MCP и настройки окружения до практического создания серверов и клиентов, работы с потоковой передачей данных и построения мультимодальных систем. Также рассматриваются вопросы масштабирования, интеграции с Azure AI и OpenAI, построения защищённых серверов и развертывания LLM-агентов. Особое внимание уделено тому, как MCP помогает организовать работу с контекстом запросов и объединением нескольких моделей, включая сценарии корпоративного применения.</p><p>План следующий:</p><ul><li><b> Уроки 1–2 </b>— введение в протокол, настройка среды, запуск базового MCP-сервера и клиента, интеграция в существующие пайплайны, безопасность.</li></ul><ul><li><b> Урок 3 (большой модуль)</b> — создание и развертывание рабочего MCP-сервера и клиента: от локальной разработки и тестирования в Visual Studio Code с AI Toolkit до развертывания сервера с SSE и HTTP-стримингом, а также построения клиентов на Python и TypeScript.</li></ul><ul><li><b>Уроки 4–5</b> — практическое применение: от отладки и тестирования до масштабирования, мультимодальности и интеграции с Azure AI Foundry, OAuth2 и системами Entra ID.</li></ul><ul><li><b>Уроки 6–9</b> — лучшие практики, вклад сообщества, разбор реальных кейсов ранних внедрений, лабораторные работы.</li></ul><ul><li><b>Урок 10</b> — практическая лаборатория: создание MCP-сервера с помощью AI Toolkit для VSCode, демонстрация потоковой передачи данных в реальном времени, интеграции с внешними LLM и корпоративными пайплайнами.</li></ul><p>Курс будет полезен как тем, кто только начинает изучать работу с языковыми моделями и строит свои первые ассистенты, так и опытным разработчикам, которым нужны структурированные практики и кейсы. Для старта достаточно базового понимания Python, C# или Java, а также представления о модели клиент-сервер и API.</p><p>Учебная программа уже <a href="https://github.com/microsoft/mcp-for-beginners/?tab=readme-ov-file">доступна</a> в официальном репозитории MCP на GitHub. Там можно найти SDK с открытым исходным кодом, инструкции по работе с AI Toolkit для VSCode, шаблоны проектов и примеры кода, которые можно запускать и адаптировать под свои задачи.</p><p>Протокол MCP становится частью экосистемы OpenAI и Azure AI, и умение работать с ним может дать инженерам конкурентное преимущество в новых проектах, связанных с LLM и корпоративными ассистентами. Новые уроки и примеры будут постепенно добавляться в репозиторий, поэтому курс обещает оставаться актуальным в быстро меняющемся мире ИИ.</p><h4>Полезные ссылки</h4><ul><li><a href="https://modelcontextprotocol.io/">Документация MCP</a> — подробные учебные пособия и руководства пользователя</li><li><a href="https://spec.modelcontextprotocol.io/">Спецификация MCP</a> — архитектура протокола и технические рекомендации</li><li><a href="https://github.com/modelcontextprotocol">Репозиторий MCP на GitHub</a> — SDK с открытым исходным кодом, инструменты и примеры кода</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>n8n: установка, настройка и интеграция с Python, Node.JS и PHP</title>
      <link>https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php</link>
      <comments>https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Кирилл Косолапов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php</guid>
      <description><![CDATA[<p>Подробный туториал по установке и настройки n8n. Примеры интеграции с Python, Node.JS и PHP и взаимодействия с LLM Mistral AI.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php">n8n: установка, настройка и интеграция с Python, Node.JS и PHP</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Opera]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[DeFi]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 29 Jun 2025 09:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>n8n — open-source платформа для автоматизации рабочих процессов (workflow), позволяющая создавать сложные цепочки задач без глубоких знаний программирования.</p><p><b>В статье рассмотрим:</b></p><p>- Установку локально и в облаке;</p><p>- Интеграцию с Python, Node.js и PHP;</p><p>- Примеры автоматизаций;</p><p>- Интеграцию с AI Mistral.</p><h2>Установка n8n</h2><h3>Локальная установка</h3><p>Нам потребуется Docker, проверьте установку:</p><p><b>Шаги установки:</b></p><p>1. Создайте том данных:</p><p>2. Запустите контейнер:</p><p>После запуска откройте: `http://localhost:5678`</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/32713acd-811d-40dc-8141-4fb625cd4216.png" alt="" /></figure><h3>Установка на удаленном сервере</h3><p>Развертывание мы произведем в облаке <a href="https://amvera.ru/n8n">Amvera</a>, так как в нем n8n предоставляется как преднастроенный сервис с бесплатным доменом (он нам нужен), настроенными переменными и проксированием до заблокированных в РФ LLM (OpenAI, Gemini, Claude и др.).</p><p>1. Регистрируемся на <a href="https://amvera.ru/n8n">Amvera</a>;</p><p>2. Выбираем n8n в плитке на главной странице;</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/e74d96ee-5f96-4c61-bf7a-562a38edc703.png" alt="" /></figure><p>3. Вводим название для проекта и выбираем тариф.</p><p><b>Готово, через 30 секунд запустится n8n с выделенным доменом и настроенными основными переменными.</b></p><h2>Настройка n8n</h2><h3>Первоначальная настройка</h3><p>1. Откройте n8n (локально: `localhost:5678`, в облаке: ваш домен)</p><p>2. Заполните данные администратора:</p><ul><li>Email</li></ul><ul><li>Имя/Фамилия</li></ul><ul><li>Пароль</li></ul><p>3. По желанию вы можете получить бесплатный лицензионный ключ:</p><ul><li>Введите email → "Send me a free license key"</li></ul><ul><li>Активируйте в разделе Settings → Usage</li></ul><h3>Настройка для HTTP</h3><p>1. Создайте новый <b>workflow</b> → Start from scratc</p><p>2. Добавьте триггер: <b>Webhook</b> - <b>On webhook call</b></p><p>3. Настройте:</p><ul><li>HTTP Method: POST</li></ul><ul><li>Path: `/n8n` (пример)</li></ul><ul><li>Respond Mode: Using 'Respond to Webhook' node</li></ul><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/6e51fb08-a901-408c-833e-eb27c3ab1f17.png" alt="" /></figure><p>4. Добавьте обработчик: <b>Core</b> → <b>Respond to Webhook</b></p><p>5. Настройте ответ:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/37a5add7-0873-42e1-9004-d33a228d828b.png" alt="" /></figure><h2>Примеры использования</h2><h3>Пример на Python</h3><p>В примере на Python мы сделаем калькулятор. Суть: отправляем выражение через POST,  n8n делает вычисление, возвращаем результат.</p><p><b>Workflow</b>:</p><p>1. Добавьте <b>Core</b> → <b>Code node</b> между Webhook и Respons:</p><p><b>Клиент (Python):</b></p><p>Запустим код и посмотрим результат:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/c9a2bd14-0a7e-4c6f-8544-e4a098a5cd5e.png" alt="" /></figure><h3>Пример на PHP</h3><p>В примере на PHP мы сделаем валидацию данных. Суть: отправляем данные через POST, n8n проверяет данные, возвращает результат.</p><p><b>Workflow (Code node):</b></p><p><b>Клиент (PHP):</b></p><p>Можем зайти на нашу страницу, все работает нормально:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/722241bc-9794-41eb-9d32-8d73d7147800.png" alt="" /></figure><h3>Пример на Node.js</h3><p>Примером на node.js будет фильтр запрещенных слов. Суть: отправляем текст, n8n проверяет на наличие плохих слов, возвращает результат.</p><p><b>Workflow (Code node):</b></p><p><b>Клиент (Node.js):</b></p><p>Перед запуском установим библиотеку командой `npm install axios`</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/c56f275a-8c74-49bf-80e5-22d5becd222a.png" alt="" /></figure><h3>Интеграция n8n с Mistral AI</h3><p>Мы интегрируем нейросеть Mistral в телеграмм-бота на C# с помощью n8n. Перед тем как начать, нам нужно получить токен.</p><p>1. Зарегистрируйтесь на <a href="https://mistral.ai/">Mistral</a></p><p>2. Создайте агента <b>Сreate an agent</b></p><p>3. Перейдите в раздел <b>API Keys</b></p><p>4. Создайте и скопируйте API-ключ (звездочки наложены):</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/7bb95f2e-0ebe-47af-9089-5e10ee2822cf.png" alt="" /></figure><p>Теперь нужно создать credentials для работы с созданной моделью. Для этого в правом верхнем углу нажмите <b>Create credentials</b>. В списке найдите <b>Mistral Cloud API</b>. В открывшемся окне вставьте скопированный ключ и сохраните.</p><p>Осталось настроить workflow.</p><p>1. Добавляем <b>Webhook</b>:</p><ul><li>Method: POST</li></ul><ul><li>PATH: n8n</li></ul><ul><li>Respond: Using 'Respond to Webhook' Node</li></ul><p>2. Добавляем <b>AI Agent</b>:</p><ul><li>Source for Prompt: Define below</li></ul><ul><li>Prompt: `{{ $json.body.text }}`</li></ul><p>3. Подключаем <b>Chat Model </b>к созданному агенту:</p><ul><li>Credential to connect with: Mistral Cloud API</li></ul><ul><li>Model: mistral-large-2411</li></ul><p>4. Добавляем <b>Respond to Webhook</b></p><p>Вот так выглядит готовый workflow:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/b2618a94-f3eb-4055-9061-ab185aca9d9d.png" alt="" /></figure><p>Можем приступить к созданию бота. Для начала введите эти команды по очередности:</p><p>Переходим в папку с кодом и редактируем файл `Program.cs`:</p><p>Запустите бота с помощью команды `dotnet run`.</p><h3>Автоматизируем с помощью n8n</h3><p>В примере автоматизации мы сделаем бота, который будет отправлять уведомления при заполнении формы, полностью без кода.</p><p>Для работы с <b>Telegram Node</b> понадобиться создать credentials <b>Telegram API</b>. Туда вставляем токен бота, полученный в @BotFater. Сохраняем и переходим к настройке workflow.</p><p><b>Создаем новый workflow. </b></p><p>1. Добавляем <b>On form submission</b>. В качестве примера я создам самую простую форму:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/3bd6f188-16bd-4fa4-bde2-f7a88855bdad.png" alt="" /></figure><p>Перейдите по ссылке в <b>Producrion URL</b> чтобы заполнить форму.</p><p>2. Добавляем <b>Telegram Node</b>:</p><ul><li>Credential to connect with: Telegram account</li></ul><ul><li>Resource: Message</li></ul><ul><li>Operation: Send message</li></ul><ul><li>Chat ID: вставьте свой telegram id</li></ul><p>Text:</p><p>Готово! При новых заявках бот будет присылать уведомления.</p><h3>Деплой бота в Amvera Cloud</h3><p>Перед тем как начать деплой, мы должны создать конфигуационнный файл `amvera.yml`. Для этого создаем его в рабочем каталоге с ботом и вводим следующее:</p><p>Строго говоря, этот файл проще создать в конфигураторе в интерфейсе.</p><p>2. Структура проекта будет такой:</p><p>tg-bot/</p><p>├── Program.cs</p><p>├── tg-bot.csproj</p><p>├── amvera.yml</p><p>├── bin/</p><p>└── obj/</p><p>Идем В Amvera Cloud и создаем приложение <b>Приложения</b> — <b>Создать приложение</b>. Вводим название и выбираем тариф.</p><p>Далее загружаем все файлы, что есть у нас в каталоге, с ботом. В конце будет окно с настройкой конфигуцрации, выглядит оно так:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/7806bf2f-38e5-4aa4-ade2-6c12d3f6c214.png" alt="" /></figure><p>Нажимаем <b>Завершить</b> и ждем когда приложение будет запущено.</p><h2>Заключение</h2><p>n8n — мощный инструмент для создания интеграций и автоматизаций. Надеюсь, статья была вам полезна и буду рад обсудить в комментариях любые вопросы!</p>]]></content:encoded>
    </item>
    <item>
      <title>Эволюция программиста 2005–2025: от CRT-мониторов до квантовых алгоритмов</title>
      <link>https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov</link>
      <comments>https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov</guid>
      <description><![CDATA[<p>Эпохи развития программирования в России и в мире. Какие стадии прошли разработчики и к чему пришли в настоящий момент. Прогнозы на будущее. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/evolyuciya-programmista-2005-2025--ot-crt-monitorov-do-kvantovyh-algoritmov">Эволюция программиста 2005–2025: от CRT-мониторов до квантовых алгоритмов</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Stack Overflow]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[jQuery]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Ruby on Rails]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Облачные технологии]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[Mozilla]]></category>
      <category><![CDATA[WebAssembly]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Soft Skills]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Fullstack]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 25 Jun 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>За последние 20 лет программирование изменилось до неузнаваемости. Если в 2005 году разработчики писали код на PHP 4.0 под мерцание CRT-экранов, то в 2025-м нейросети помогают им генерировать целые модули, а квантовые компьютеры становятся частью исследовательских проектов.</p><p>Эта статья — подробная хроника эволюции программистов: какие языки и технологии они осваивали, как менялись их рабочие места, методы обучения и даже само восприятие профессии. Мы разберем ключевые этапы, от первых веб-гигантов до эпохи совместного программирования с ИИ, и попробуем представить, что ждет нас дальше.</p><h2>2005-2009: Эпоха авторских решений и первых веб-фреймворков</h2><p>В середине 2000-х типичный рабочий инструмент программиста — это громоздкий системный блок с процессором Intel Pentium 4 или новеньким Core 2 Duo. Мониторы с ЭЛТ-трубкой постепенно уступали место LCD-экранам с разрешением 1024×768 — именно на таких дисплеях создавались первые версии Wikipedia и набирающих популярность соцсетей. Оперативная память в 1-2 ГБ считалась нормой, а жесткие диски на 80-160 ГБ часто заполнялись до отказа — проекты редко весили меньше нескольких гигабайт.</p><p>Серьезная разработка велась преимущественно на стационарных компьютерах. Ноутбуки только начинали входить в обиход — их брали в офис, но для реальной работы предпочитали мощные десктопы. Операционная система Windows XP доминировала на рабочих станциях, в то время как серверы чаще всего крутили на Linux — Red Hat Enterprise или Debian.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/d5fca723-5450-4b72-8e8d-4cd57627fb99.jpg" alt="" /></figure><p>Среды разработки того времени сегодня кажутся архаичными. Eclipse и NetBeans потребляли гигабайты памяти, Visual Studio 2005 требовала серьезных ресурсов. Многие разработчики предпочитали простые текстовые редакторы вроде Notepad++, а для отладки использовали примитивные методы вроде вывода значений переменных через print. Контроль версий только начинал входить в практику — Git появился в 2005 году, но большинство команд продолжали использовать SVN или вообще заливали файлы по FTP напрямую на продакшен.</p><p>Языковая экосистема этого периода вращалась вокруг трех основных технологий. PHP версий 4 и 4.3 доминировал в веб-разработке — на нем работало около 80% всех сайтов в интернете. Однако его объектно-ориентированные возможности были крайне ограничены до выхода PHP 5 в 2004 году.</p><p>Java в лице J2EE оставалась стандартом для корпоративных решений — банковских систем, крупных порталов и ERP-комплексов. Spring Framework только начинал набирать популярность, а Hibernate упрощал работу с реляционными базами данных. C++ сохранял свои позиции в разработке игр (особенно с использованием Unreal Engine), драйверов и высоконагруженных сервисов.</p><p>Фронтенд-разработка в те годы была невероятно простой по современным меркам. Верстали преимущественно таблицами, а всю динамику реализовывали через jQuery, который появился в 2006 году и быстро вытеснил нативный JavaScript из повседневной практики. AJAX-запросы казались революционной технологией, позволяющей обновлять части страницы без ее полной перезагрузки.</p><p>Обучение программированию в этот период кардинально отличалось от современных подходов. Онлайн-курсы практически отсутствовали. Основными источниками знаний служили бумажные книги:</p><ul><li>«Философия Java» Брюса Эккеля;</li><li>«Совершенный код» Стива Макконнелла;</li><li>«PHP и MySQL. Разработка веб-приложений» Люка Веллинга.</li></ul><p>Русскоязычное сообщество активно обсуждало вопросы разработки на форумах RSDN.ru и CyberForum.ru. В 2008 году появился Stack Overflow, который постепенно стал главной площадкой для профессиональных обсуждений.</p><p>Университетское образование давало хорошую теоретическую базу — алгоритмы, структуры данных, принципы ООП. Однако практическим навыкам приходилось учиться самостоятельно, методом проб и ошибок. Документацию часто скачивали в формате CHM-файлов или читали непосредственно на сайтах вроде php.net и MSDN.</p><p>Типичный стек начинающего разработчика в 2009 году:</p><ul><li>HTML/CSS с jQuery для фронтенда;</li><li>PHP или Ruby on Rails для бэкенда;</li><li>MySQL в качестве базы данных.</li></ul><p>ORM-технологии еще не получили широкого распространения, поэтому SQL-запросы писали вручную. Многие проекты представляли собой монолитные приложения, где весь код хранился в единой кодовой базе без четкого разделения на модули.</p><p><b>Показательный кейс</b>:</p><p>В 2007 году разработчик PHP-приложений из МЭСИ (Москва) столкнулся с типичной для того времени проблемой — SQL-инъекциями. Вместо стандартных решений он создал DLAC (Data Logic Access Component) — обертку для работы с базой данных, которая автоматически экранировала параметры запросов. Это выглядело революционно на фоне типичного кода того периода, где строки запросов часто собирали через конкатенацию с пользовательским вводом.</p><p>Компонент использовал новую для 2005 года технологию Generics в C#. Он генерировал параметризованные запросы, что резко снижало риски взлома.</p><p><i>Разработчики в университетской среде тогда редко задумывались о безопасности — многие проекты содержали уязвимости вроде  </i>SELECT * FROM users WHERE name = ‘.$_POST[‘name’]<i>. </i></p><p><i>DLAC стал локальным спасением для внутренних систем МЭСИ, пока в 2009 году не появился NHibernate — порт популярного Java-фреймворка Hibernate.</i></p><p>Этот кейс хорошо иллюстрирует дух эпохи: отсутствие готовых безопасных решений заставляло программистов изобретать велосипеды. Многие подобные наработки позже легли в основу ORM-библиотек, но тогда они рождались в муках — через пробелы в безопасности и километры самописного кода.</p><h2>2010-2014: Мобильная революция и рассвет JavaScript</h2><p>Начало нового десятилетия ознаменовалось стремительным ростом мобильных технологий. Выход iPhone 4 в 2010 году и Android 2.3 Gingerbread задал новые стандарты мобильной разработки.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/7b640694-b2cd-4f03-a68f-51ed138557b2.jpg" alt="" /></figure><p>Программисты массово переходили на MacBook Pro — не столько из-за преимуществ macOS, сколько благодаря появлению Retina-дисплеев в 2012 году, которые кардинально улучшили качество отображения кода.</p><p>Железо продолжало стремительно эволюционировать. Твердотельные накопители (SSD) начали вытеснять традиционные жесткие диски в рабочих станциях. Облачные платформы вроде AWS и Heroku стали реальной альтернативой локальным серверам, которые раньше часто стояли прямо под рабочими столами в офисах. Оперативная память в 8 ГБ стала стандартом для комфортной разработки, а четырехъядерные процессоры ускорили сборку крупных проектов.</p><p>Языковая палитра этого периода значительно расширилась. Objective-C стал основным языком для iOS-разработки и оставался таковым до появления Swift в 2014 году. Python 3 начал набирать популярность благодаря веб-фреймворку Django и научным библиотекам NumPy и Pandas, которые открыли дорогу для анализа данных в массовом сегменте.</p><p>JavaScript пережил настоящий ренессанс — после выхода AngularJS в 2010 и Node.js в 2009 году он перестал быть просто «языком для анимаций на сайте», превратившись в полноценную платформу для fullstack-разработки.</p><p><b>Важный факт</b>. В 2011 году разработчик из Сан-Франциско Райан Даль представил Node.js — среду выполнения JavaScript на стороне сервера. За первые 24 часа после релиза проект собрал 10 000 звезд на GitHub, что для того времени стало рекордом. Многие скептически относились к идее использовать JavaScript вне браузера, но уже через год такие компании как LinkedIn и Walmart перевели части своего бэкенда на Node.js, получив прирост производительности в 2-3 раза по сравнению с традиционными решениями на Java и Ruby.</p><p>Образовательная сфера претерпела значительные изменения. В 2011 году запустилась Coursera с первым массовым курсом по программированию — Machine Learning от Эндрю Ына. В 2012 году в Кремниевой долине открылся Hack Reactor, ставший прототипом современных coding bootcamps (интенсивов по программированию). Эти форматы предложили альтернативу традиционному университетскому образованию, сделав акцент на практических навыках.</p><p>Параллельно в России:</p><ul><li>В 2012 году появился Hexlet — одна из первых русскоязычных платформ с практико-ориентированными курсами по программированию. Особенность: выполнение заданий в реальной среде разработки через браузер. Платформа до сих пор работает: на текущий момент 80% выпускников трудоустраиваются в IT, <a href="https://ru.hexlet.io/blog/posts/hse-research">согласно исследованию ВШЭ</a>. В 2012 этот показатель был еще выше.</li><li>«Нетология» (основана в 2011) к 2013 году запустила курсы по веб-разработке с акцентом на JavaScript и Python, сотрудничая с российскими tech-компаниями. Их модель включала менторство и проектные работы.</li><li>В 2013 году стартовал Stepik — платформа с открытыми курсами от ведущих вузов (ИТМО, МФТИ). Особенность: интерактивные задачи с автоматической проверкой кода, что было прорывом для местного рынка.</li></ul><p>Курс «Введение в Linux» от Stepik (2014) за полгода собрал 50 тыс. студентов — рекорд для Рунета. Задания включали настройку виртуальных серверов, что сразу применялось в работе.</p><p>Эти проекты заложили основу для бума EdTech в России после 2015 года, доказав, что онлайн-формат может давать актуальные навыки быстрее вузов.</p><p>Типичный разработчик среднего уровня в 2014 году:</p><ul><li>понимал принципы REST API;</li><li>начинал осваивать основы DevOps с появлением Docker в 2013;</li><li>экспериментировал с микроконтроллерами вроде Arduino или Raspberry Pi, создавая собственные IoT-устройства.</li></ul><p>В профессиональной среде начал формироваться консенсус о том, что PHP устаревает для сложных коммерческих проектов.</p><h2>2015-2019: Эра больших данных и облачных технологий</h2><p>Аппаратные возможности сделали очередной рывок вперед. Многоядерные процессоры Intel i7 и AMD Ryzen стали стандартом для рабочих станций. 16 ГБ оперативной памяти перестали быть роскошью, а мониторы с разрешением 4К стали доступны широкому кругу разработчиков. В 2015 году появился Visual Studio Code, который быстро обогнал по популярности Sublime Text и Atom благодаря удачному сочетанию функциональности и производительности.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/c92b70be-b3eb-4924-a40a-587ed3d43592.png" alt="" /></figure><p>Языковая экосистема продолжила развитие. TypeScript, представленный в 2014 году, предложил решение проблемы масштабируемости JavaScript-кода в крупных проектах. Go от Google, созданный еще в 2009, нашел свою нишу в разработке микросервисов и инструментов оркестрации вроде Kubernetes (2015). Rust от Mozilla начал завоевывать доверие системных программистов благодаря уникальной системе владения памятью.</p><p>JavaScript-сообщество столкнулось с первыми серьезными проблемами. В 2016 году инцидент с пакетом left-pad показал уязвимость экосистемы npm — удаление одного небольшого модуля привело к сбоям в работе тысяч проектов по всему миру. Это заставило разработчиков задуматься о зависимости от сторонних библиотек.</p><p>Типичный senior-разработчик в 2019:</p><ul><li>разбирался в микросервисной архитектуре и понимал, как избежать vendor lock-in (привязки к поставщику) при работе с облачными провайдерами;</li><li>имел опыт работы с React или <a href="http://vue.js">Vue.js</a>;</li><li>знал, что понимание принципов работы алгоритмов становится менее важным, чем развитие soft skills для работы в команде.</li></ul><p>Ключевые технологии этого периода включали Kubernetes, который стал стандартом де-факто для оркестрации контейнеров, а также TensorFlow (2015) и PyTorch (2016), открывшие эру машинного обучения для широкого круга разработчиков. Появились первые серьезные инструменты для работы с большими данными — Apache Spark, Hadoop.</p><p><i>Ключевой момент. В 2016 году Netflix раскрыл детали своего перехода на облачную инфраструктуру AWS. Компания полностью перенесла все сервисы — от рекомендательной системы до биллинга — в облако за семь лет. Главным триггером стала катастрофа 2008 года, когда три дня простоя дата-центра оставили 8,4 млн подписчиков без доступа к сервису. Миграция потребовала перепроектирования архитектуры: инженеры разбили монолит на 500 микросервисов и внедрили Chaos Monkey — инструмент для тестирования отказоустойчивости, который случайно отключал серверы в продакшене.</i></p><p>Этот кейс стал хрестоматийным примером cloud-native подхода. Облачные технологии стали активно использоваться в разработке, а обращение с ними — обязательным навыком для прогеров.</p><h2>2020-2024: AI-assisted разработка и новые парадигмы</h2><p>Пандемия COVID-19 ускорила переход на удаленную работу. Программисты по достоинству оценили макбуки на чипах M1 (2020) за их энергоэффективность и производительность. Домашние офисы оснащались 32-дюймовыми 4К-мониторами и механическими клавиатурами, ставшими своеобразным профессиональным стандартом.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-13/65ba41e0-844c-419f-8656-e78905e93540.jpg" alt="" /></figure><p>Языковая палитра продолжала обогащаться. Rust официально вошел в ядро Linux в 2022 году, подтвердив свой статус системного языка нового поколения. Zig появился как современная альтернатива «C» с акцентом на безопасность. WebAssembly (Wasm) позволил запускать ресурсоемкие приложения прямо в браузере, открыв новые возможности для веб-разработки.</p><p>Искусственный интеллект начал проникать в повседневную работу программистов. GitHub Copilot на базе GPT-3, представленный в 2021, изменил сам процесс написания кода, предлагая контекстные подсказки. Low-code платформы вроде Retool упростили создание внутренних инструментов для бизнеса.</p><p>Типичный lead-разработчик в 2024 году:</p><ul><li>умел эффективно работать в гибридных командах (офис + удаленка);</li><li>автоматизировал рутинные задачи через ChatGPT API;</li><li>следил за развитием квантовых вычислений, хотя практическое применение пока оставалось ограниченным.</li></ul><p><i>Ключевой момент. В 2023 году GitHub Copilot, разработанный совместно с OpenAI, стал катализатором перемен в индустрии. За первый год после релиза инструмент использовали более 1,3 млн разработчиков — каждый десятый подписчик GitHub. Система анализировала контекст кода и предлагала целые функции: например, при написании SQL-запроса она автоматически генерировала соответствующую модель данных на Python. Amazon внедрил аналогичный инструмент Amazon Q Developer для внутренних команд — по заявлению CEO Энди Джесси, это сэкономило компании 4,500 человеко-лет работы и $260 млн ежегодно.</i></p><p><i>Но были и курьезы. В 2024 году разработчик из Берлина случайно отправил в продакшен код, полностью сгенерированный Copilot. Система использовала фрагмент из GPL-лицензированной библиотеки, что нарушило политику компании по открытому ПО. Инцидент заставил пересмотреть процессы ревью: теперь 78% команд требуют ручной проверки AI-кода перед мержем (слиянием).</i></p><p><i>Параллельно выяснилось, что Copilot в 40% случаев предлагает уязвимый код при работе с СУБД — это привело к взлому API стартапа через SQL-инъекцию. Такие кейсы показали, что ИИ пока не заменяет программистов, а требует от них новых навыков — критического анализа машинных предложений и понимания юридических аспектов кода.</i></p><h2>2025: Современное состояние профессии</h2><p>Современные рабочие станции программистов оснащены ноутбуками с процессорами Apple M4 (3 нм) или Windows-машинами на Snapdragon X Elite. Мониторы с разрешением 8К используются для разработки AR-приложений, а OLED-экраны с HDR стали стандартом для работы с графикой. Появляются первые экспериментальные IDE с нейроинтерфейсами, способные предсказывать код на основе анализа мозговой активности.</p><p>Среди языков программирования выделяется Mojo (2023) — «Python для GPU», набирающий популярность в сфере машинного обучения. Carbon как потенциальный наследник C++ пока остается в тени Rust. Квантовые языки вроде Q# и Cirq интересуют в основном энтузиастов и исследователей.</p><p>Профессия претерпела значительные изменения. ИИ стал не конкурентом, а помощником — по некоторым оценкам, около 60% рутинного кода в 2025 году (тесты, документация) генерируется автоматически. Знание английского языка стало важнее знания сложных алгоритмов — без него невозможно эффективно работать с современными AI-инструментами. Понятие «fullstack-разработчик» трансформировалось — теперь оно подразумевает владение фронтендом, одним бэкенд-языком и основами машинного обучения.</p><p>За два десятилетия программисты прошли путь от одиночек за CRT-мониторами до участников глобальных распределенных команд. Если в 2005 ключевым навыком было умение написать работающий код, то в 2025 главное — способность эффективно взаимодействовать с ИИ-ассистентами. Однако основы профессии остались неизменными — логическое мышление, способность к абстракции и желание автоматизировать рутинные задачи.</p><p>Будущее обещает новые трансформации. К 2030 году нейроинтерфейсы смогут заменить традиционные устройства ввода, а квантовые компьютеры — перевернуть основы криптографии. Но пока актуальными остаются проверенные временем принципы: изучать перспективные технологии (вроде Rust и Mojo), осваивать работу с ИИ и, конечно, совершенствовать главный навык любого программиста — умение быстро и грамотно гуглить.</p><p>Ты уже программист, если читаешь это! Больше о кодинге <a href="https://t.me/+ezugB7gnIEsxNGMy">тут</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Комментарии в коде: зло или спасение ?</title>
      <link>https://tproger.ru/articles/kommentarii-v-kode--zlo-ili-spasenie--</link>
      <comments>https://tproger.ru/articles/kommentarii-v-kode--zlo-ili-spasenie--?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Baskon]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kommentarii-v-kode--zlo-ili-spasenie--</guid>
      <description><![CDATA[<p>Когда нужны комментарии в коде, а когда без них лучше. Объясняем на примерах, как писать понятные и полезные комментарии</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kommentarii-v-kode--zlo-ili-spasenie--">Комментарии в коде: зло или спасение ?</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Safari]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[DeFi]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[XML]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 23 Jun 2025 10:39:48 GMT</pubDate>
      <content:encoded><![CDATA[<p>Что делать с комментариями в коде — писать или не писать? Одни уверены: чистый код говорит сам за себя, другие не представляют работу без пояснений. Истина, как обычно, посередине. Комментарии — это инструмент, умелый программист применяет их с пользой, неумелый — только усложняет жизнь себе, коллегам, начальству, пользователям и вообщем всем сопричастным. Разберемся, когда комментарии действительно нужны, а когда от них больше вреда и приведем примеры в коде</p><h2>Зачем вообще писать комментарии в коде?</h2><p>Комментарии — это кусочки текста в программе, которые компилятор пропускает, а человек читает. Они не влияют на работу программы, зато сильно влияют на мозг того, кто будет с этой программой разбираться.</p><h3>Какие задачи они решают ?</h3><h4>1. Пояснить неочевидное</h4><p>Код показывает «что» делает программа, а комментарий — «зачем».</p><p>Такой комментарий не просто поясняет логику — он экономит десятки минут будущего чтения.</p><h3>2. Предупредить</h3><p>В коде бывает странное поведение. Иногда это не баг, а фича. И если не предупредить, другой разработчик обязательно «поправит» и всё сломает. Комментарий защитит от этого:</p><h3>3. Пометить незавершёнку</h3><p>TODO, FIXME, HACK — это специальные маячки. Их ставят туда, где нужно что-то доделать, починить или переписать по-человечески.</p><p>Бонусом, IDE умеют обрабатывать такие заметки, каждая по-своему.</p><h3>4. Временно отключить код</h3><p>Иногда нужно что-то закомментировать, чтобы проверить гипотезу. Но такой код нельзя оставлять надолго. Если от него нет пользы — в мусор. Историю всё равно сохранит git.</p><h3>5. Объяснить архитектуру</h3><p>Иногда важно не только «как» сделано, но и «почему так». Особенно это касается паттернов, нестандартных решений или компромиссов.</p><h3>6. Генерация документации</h3><p>Многие языки и фреймворки поддерживают специальные форматированные комментарии для генерации документации. Например, JavaDoc в Java, docstring в Python, XML в C# – предназначены для описания интерфейсов: что делает функция или класс, какие имеют входные параметры и какой результат дают. Такие Комментарии выполняют роль пользовательской документации прямо в коде и могут автоматически собираться в справочник по API.</p><h3>7. Пошутить</h3><p>Программисты – тоже люди, и иногда оставляют в коде шуточные либо эмоциональные комментарии, чтобы снять стресс. В открытых исходниках можно встретить комментарии с шутками, сарказмом или даже ругательствами, адресованными сложному коду или «костылям».</p><p>Как видно, диапазон применения комментариев очень широк. Но одинаково ли хорошо все эти виды влияют на качество кода? Рассмотрим случаи, когда комментарии приносят пользу, а когда создают проблемы.</p><h2>Когда комментарии помогают</h2><p>А часто без комментариев в коде сложно разобраться, особенно когда  код чужой.</p><h3>1. Когда логика не лежит на поверхности</h3><p>Есть участки кода, где без контекста трудно разобраться, даже если код написан довольно читабельно. Например, сложная формула, нетривиальный алгоритм или необычная структура данных – всё, что выбивается из обыденного опыта разработчиков. В таких случаях пара строк комментария, резюмирующих подход, или объясняющих, что происходит, сэкономят часы на анализ. Это особенно важно для командной работы: коллегам, незнакомым с модулем, не придётся разбираться «с нуля».</p><h3>2. Когда нужно документировать контракты и условия</h3><p>Комментарии могут  использоваться для обозначения контрактов – предусловий и постусловий функций, инвариантов и т.д. (подход Design by Contract). Хотя современные языки позволяют выразить многое (например, через assert или декораторы), комментарии могут дополнять код уточнениями вроде:</p><p>Также текстовые пометки в коде полезны для фиксации граничных условий и особых случаев, таких как обработка пустных массивов в бинарном поиске,  другой пример:</p><p>Да, можно это выразить через assert, но комментарий дает сразу и контекст, и предупреждение. Особенно если логика непростая.</p><h3>3. Когда нужно предоставить контекст и ссылки</h3><p>Иногда кусок кода существует благодаря внешнему источнику, например, когда решение просто скопировано из ответа на форуме или из книги по теме. Просто так его не понять — нужна ссылка на источник:</p><h3>4. Когда нужно облегчить ревью</h3><p>Когда код содержит много пояснений к его работе  новому участнику команды проще входить в проект – по сути, комментарии выполняют роль встроенной документации. Кроме того, код-ревью проходит эффективнее, если автор сразу помечает неочевидные места комментариями. Например:</p><p>В PEP 8 (стиле кодирования Python) прямо приводится пример: комментарий “Compensate for border” – полезный, в отличие от банального “Increment x”, который не даёт новой информации.</p><h3>5. Когда нужна поддержка самодокументируемости через структуру</h3><p>Иногда хочется написать: # Этап 1: авторизация пользователя, и в этот момент приходит мысль — а почему бы не вынести это в функцию authorize_user()? И комментарий уже не нужен. То есть сам порыв объяснить словами часто указывает, что код пора расчленить и упростить.</p><h3>6. Когда нужно кого-то обучить программированию или корпоративным стандартам оформления кода</h3><p>Когда человек обучается программированию или только пришел в компанию, где есть свои стандарты, комментарии в коде можно использовать, чтобы дать ему обучающий материал с примерами из практики, пример:</p><p>Комментарий — это инструмент. Если комментарий в коде дает информацию, которую нельзя вытащить из кода напрямую, — значит, работает как надо. Но бывает и обратное — когда комментарии мешают. Об этом — в следующей части.</p><h2>Когда комментарии вредят</h2><p>Худшее, что может случиться с комментариями – когда они вводят в заблуждение или засоряют код впустую. Рассмотрим подробнее:</p><h3>Дублируют очевидное</h3><p>Комментарий, который просто повторяет код своими словами, не несёт никакой пользы:</p><p>А вот так — лучше вообще без пояснений:</p><p>Комментарий должен объяснять, зачем что-то делается, а не что именно:</p><h3>Врут и вводят в заблуждение</h3><p>Классика: код переписали, а про комментарий забыли.</p><p>Спустя некоторое время код могли переписать, и old_api_call() заменили на new_api_call(), но комментарий остался от прежней версии и стал источником дезинформации: разработчик, читающий код, может принять заведомо неверное решение, доверившись устаревшей заметке. По этой причине крайне важно понимать: если уж пишете комментарий, держите его в актуальном состоянии вместе с кодом.</p><h3>Показывают, что код плохой</h3><p>Когда код плохо читается, и его пытаются «объяснить» словами, вместо того чтобы переписать:</p><p>Вместо этого — понятный код:</p><h3>Плодятся бесконтрольно</h3><p>Иногда встречается код, где каждое действие сопровождается избыточными пояснениями:</p><p>Здесь нет ни одной неочевидной строки. Лучше оставить так:</p><h3>Представляют собой мёртвый код</h3><p>Когда в коде остаются большие мёртвые блоки, которые просто закомментированы:</p><p>Может быть, раньше это что-то значило, но сейчас — просто мертвый груз. Если код не нужен — удаляй. История останется в git.</p><h3>Запутывают и размывают смысл</h3><p>Что значит «временное»? Когда переделывать? Почему не постоянное?</p><p>Лучше так:</p><p>Теперь ясно, почему так сделано, и можно отследить, когда это поведение закончится.</p><p>Итак, комментарии становятся злом, когда они не выполняют своей информативной роли, а лишь создают шум или дезинформируют. В худшем случае они могут привести к багам (если программист доверится неверному комментарию) и точно приведут к потере времени на их чтение и разбор. Единственный способ избежать этого зла —  писать комментарии ответственно: убедиться, что они нужны, правдивы и своевременны.</p><h2>Самодокументируемый код vs комментарии</h2><p>Есть мечта у программистов — писать код, который объясняет сам себя. Без сносок, без подсказок, без комментариев. Такой код читается как инструкция: открыл — понял. Это и называется самодокументируемым стилем.</p><p>Как его достигают?</p><ul><li>Говорящие имена. Не x и a, а temperature, retryLimit, userProfile. Лучше сразу по имени понять, что перед тобой — массив с ID или словарь с настройками.</li><li>Функции с характером. У функции должно быть имя-глагол, в котором есть ответ на вопрос “что делает этот код?”. Например: parseInvoice(), sendEmailReminder(), fetchUserByToken().</li><li>Использовать названия для константных значений. Вместо if (status == 4) — if (status == ORDER_CONFIRMED). Вместо 3000 — RETRY_TIMEOUT_MS.</li><li>Структура — как абзацы в тексте. Пустые строки, логические блоки, отступы — чтобы этапы выделялись сами собой.</li></ul><p>Посмотрим например, где простой код поясняется ненужным комментарием:</p><p>Другой пример:</p><p>Комментарий уже не нужен. Из имён всё понятно: считаем среднюю температуру. Здесь самое интересное — само документируемость имеет границы. Потому что:</p><ul><li>Код объясняет «что», но не всегда «почему».</li></ul><p>Вот есть строка:</p><p>А почему 5? Почему не 3, не 10? Если причина — ограничение API, бизнес-логика или чья-то странная прихоть — код не расскажет. А вот комментарий может:</p><p><b>Неочевидные решения и компромиссы</b></p><p>Иногда приходится делать что-то нестандартное. Например:</p><p>Такой кусок кода без пояснений вызовет недоумение: А почему не сортируем?</p><p>Старайтесь писать код так, чтобы его поняли без подсказок. Как будто у вас нет возможности что-то дополнительно объяснить. А если видите, что читателю будет трудно — помогите: добавьте комментарий, который действительно нужен.</p><h2>Влияние ИИ и новых инструментов на подход к комментариям</h2><p>В последние годы в распоряжении разработчиков появились мощные ассистенты на базе искусственного интеллекта — такие как GitHub Copilot (автодополнение кода на основе ИИ) и большие языковые модели вроде ChatGPT. Эти технологии начинают влиять и на практики комментирования кода.</p><p>Во-первых, автогенерация кода по комментариям стала реальностью.</p><p>Инструмент Copilot способен на лету написать фрагмент кода, ориентируясь на описания на естественном языке. Например:</p><p>Copilot тут же может подставить реализацию:</p><p>Такой подход превращает комментарий в своего рода промпт — описание задачи для ИИ. Это приучает писать коротко и по делу. Хотя такие комментарии потом часто удаляют, их роль в генерации кода становится всё важнее.</p><p>Во-вторых, ИИ сам пишет комментарии.</p><p>Можно просто показать код:</p><p>…и попросить ИИ: прокомментируй. В ответ он выдаст:</p><p>Или даже более детальный:</p><p>Такие автокомментарии могут быть полезны, но всё равно требуют проверки: всезнающий ИИ не всегда понимает скрытые нюансы логики, а часто просто галлюцинирует, поэтому доверять полностью не стоит, но, как черновик, вполне годится.</p><p>В-третьих, стало проще понимать чужой код без комментариев.</p><p>Раньше приходилось часами вчитываться, сегодня — можно просто спросить:</p><p>Запрос в ChatGPT: что делает эта функция?</p><p>Ответ: Она возвращает новый список, содержащий удвоенные значения тех элементов исходного списка, которые делятся на 3.</p><p>ИИ не волшебник, но в 90% случаев — удобный переводчик с машинного на человеческий. Это снимает часть нагрузки с необходимости документировать тривиальные вещи.</p><p>В-четвертых, новый тип комментариев: инструкции для ИИ</p><p>Может возникнуть ситуация, когда комментарий пишется не столько для человека, сколько как команда:</p><p>Если вы используете Cursor или Replit, это может очень полезным.</p><h2>Заключение</h2><p>Так всё-таки, комментарии – зло или спасение?</p><p>Это не абсолютное благо и не абсолютное зло, это просто инструмент. Всё зависит от того, в чьих он руках и зачем используется. Комментарии способны помочь понять неочевидные решения, разобраться в сложных структурах, подсказать направление для размышления. Но, как и любой инструмент, в неумелых руках это способ случайно (или не очень) испортить кровь себе и окружающим.</p><p>Но всё-таки чаще наличие комментариев делает жизнь лучше, ведь иногда формулирование мысли разговорным текстом, а не кодом, позволяет понять свою идею лучше, взглянуть на нее с другой стороны.</p>]]></content:encoded>
    </item>
    <item>
      <title>Нужен ли сеньору второй язык программирования? Опытом поделился разработчик с 18 годами стажа</title>
      <link>https://tproger.ru/news/--nuzhen-li-senoru-vtoroj-yazyk-programmirovaniya--opytom-podelilsya-razrabotchik-s-18-godami-stazha</link>
      <comments>https://tproger.ru/news/--nuzhen-li-senoru-vtoroj-yazyk-programmirovaniya--opytom-podelilsya-razrabotchik-s-18-godami-stazha?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/--nuzhen-li-senoru-vtoroj-yazyk-programmirovaniya--opytom-podelilsya-razrabotchik-s-18-godami-stazha</guid>
      <description><![CDATA[<p>Нужен ли сеньору второй язык программирования? Опыт и выводы разработчика с 18 годами стажа — когда и зачем изучать новые языки</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/--nuzhen-li-senoru-vtoroj-yazyk-programmirovaniya--opytom-podelilsya-razrabotchik-s-18-godami-stazha">Нужен ли сеньору второй язык программирования? Опытом поделился разработчик с 18 годами стажа</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[Ruby]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 06 May 2025 06:04:57 GMT</pubDate>
      <content:encoded><![CDATA[<p>В айтишных чатах нередко звучит мнение: хороший сеньор должен уметь программировать на любом языке.</p><p>Оскар — разработчик с 18-летним стажем. Он решил <a href="https://www.architecture-weekly.com/p/why-we-should-learn-multiple-programming">разобраться</a>, насколько утверждение про необходимость знать множество языков правдива.</p><p>Сам Оскар за свою карьеру успел поработать с C#, Java, C++, Python, Ruby, JavaScript, Perl и прочими языками. Но не потому что стремился к полиглотству, а потому что так сложилось — проекты, клиенты, задачи.</p><p>По его мнению, изучение новых языков не просто расширяет кругозор. Это помогает иначе смотреть на архитектуру и подходы к решению задач. Даже если вы продолжаете писать на своем основном языке, знакомство с другими помогает вырасти ментально.</p><h2>Синтаксис — это не все</h2><p>Проблема в том, что многие изучают новый язык на уровне «выучил синтаксис — значит, могу писать». Но это часто приводит к «Java-коду на Go» или «C#-архитектуре в TypeScript». Новички в языке переносят привычные паттерны, не понимая, как использовать сильные стороны новой платформы.</p><p>Чтобы писать идиоматично, нужно время. Неделя — чтобы освоить синтаксис. Пару месяцев — чтобы почувствовать экосистему. Год — чтобы писать как носитель языка.</p><h2>Когда стоит добавлять новый язык в стек</h2><p>Оскар выделяет три повода:</p><ul><li>Бизнес-задача. Например, для тяжелых расчетов стоит взять язык быстрее JavaScript.</li><li>Кадровый вопрос. Иногда проще найти разработчиков под Node.js, чем под Java.</li><li>Карьерный рост. Умение работать с востребованным стеком открывает больше возможностей.</li></ul><p>Но главное — не делать выбор из любопытства. Однажды Оскару пришлось переписать модуль с F# на C#, потому что никто не хотел его поддерживать. В другом проекте Python-модуль оказался узким горлышком и потребовал переделки. Эти эксперименты дорого обошлись бизнесу.</p><h2>Архитектору — особенно важно</h2><p>Если вы архитектор, то знание языков — не просто плюс, а необходимость. Без этого вы будете опираться на чужие слова и чужие слайды, а не на собственный опыт. Лучшие архитекторы, по словам Оскара, регулярно пишут код — пусть и не фуллтайм.</p><h2>Баланс между глубиной и гибкостью</h2><p>Итак, должен ли сеньор уметь писать на любом языке? Не обязательно. Но он должен уметь быстро адаптироваться, понимать принципы, а не только синтаксис. И главное — не бояться признать, что его любимый язык не всегда лучший выбор.</p><p>Языки — это инструменты. Хороший разработчик остается таковым вне зависимости от того, на чем он пишет.</p>]]></content:encoded>
    </item>
    <item>
      <title>Если бы я хотел стать разработчиком на Rust в 2025, с чего бы я начал?</title>
      <link>https://tproger.ru/articles/esli-by-ya-hotel-stat-razrabotchikom-na-rust-v-2025--s-chego-by-ya-nachal-</link>
      <comments>https://tproger.ru/articles/esli-by-ya-hotel-stat-razrabotchikom-na-rust-v-2025--s-chego-by-ya-nachal-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/esli-by-ya-hotel-stat-razrabotchikom-na-rust-v-2025--s-chego-by-ya-nachal-</guid>
      <description><![CDATA[<p>Гайд по Rust. Показываем, что нужно знать, чтобы научиться языку программирования Раст. Рассматриваем пошаговую инструкцию и практические примеры ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/esli-by-ya-hotel-stat-razrabotchikom-na-rust-v-2025--s-chego-by-ya-nachal-">Если бы я хотел стать разработчиком на Rust в 2025, с чего бы я начал?</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Операционные системы]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Haskell]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Асинхронное программирование]]></category>
      <category><![CDATA[WebAssembly]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Пет-проект]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 03 Apr 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Rust — язык общего назначения, который ориентирован на высокую производительность и безопасное управление памятью. На нем можно писать софт практически для любого направления: CLI-утилиты, высоконагруженные сервера, десктопные приложения, мобильные приложения (с некоторыми оговорками), игры и игровые движки, прошивки для микроконтроллеров, операционные системы, драйвера и даже браузерные приложения (через компиляцию в WebAssembly).</p><p>В рейтинге языков программирования TIOBE Rust занимает 14 место. Для сравнения — в прошлом марте он был на 17 позиции. Вместе с экспертами <a href="https://solvery.io/?utm_source=article&amp;utm_medium=partner&amp;utm_term=tproger&amp;utm_content=rust_2025&amp;utm_campaign=main_page">Solvery</a> <a href="https://solvery.io/ru/mentor/bondiano?utm_source=article&amp;utm_medium=partner&amp;utm_term=tproger&amp;utm_content=rust_2025&amp;utm_campaign=vasiliy_kuzenkov">Василием Кузенковым</a>, full-stack разработчиком в Web3 стартапе, и <a href="https://solvery.io/ru/mentor/belyaev_dmitry?utm_source=article&amp;utm_medium=partner&amp;utm_term=tproger&amp;utm_content=rust_2025&amp;utm_campaign=belyaev_dmitriy">Дмитрием Беляевым</a>, Rust developer в Wildberries, разбираемся, как стать разрабом на Расте в 2025 году.</p><h2>Немного об особенностях</h2><p>Если вы до этого программировали на ООП языках, то вам, возможно, бросалось в глаза отсутствие привычных классов. Вместо них здесь алгебраические типы данных и трейты для решения expression problem. Их механизм куда больше похож на typeclasses из Haskell, что также будет для вас новой концепцией при построении крупных приложений, и нужно будет перестраивать мышление.</p><blockquote>Также когда стартуешь, немного непривычно работать с move-семантикой, RAII, borrow checker’ом и лайф-таймами. Но компилятор сыпет довольно подробными ошибками, которые можно легко поправить, если разобраться.</blockquote><p>А еще у Rust очень строгая типизация и очень мощная система типов, а сами типы построены так, чтобы предоставлять некоторые гарантии программисту. Например, ссылки в Rust всегда ссылаются на объект, гарантировано существующий в памяти, а стандартные строки содержат только валидный UTF-8. При этом в подавляющем большинстве случаев тип необязательно указывать явно, компилятор способен выводить типы, анализируя контекст функции целиком. Кроме того, Rust следует идеологии «компилируется, значит, работает». От логических ошибок, конечно, Раст не спасёт, но тем не менее очень большой пласт багов можно отловить на этапе кодинга. Да, это сложно, но лучше помучиться при разработке, чем потом разбираться почему упал прод.</p><p>Ещё одна отличительная фишка — абстракции с нулевой стоимостью. Rust позволяет писать высокоуровневый и понятный код, который при этом будет иметь ту же производительность, что и более низкоуровневый оптимизированный вручную вариант.</p><blockquote>Хороший пример здесь — итерация по различным коллекциям. Многие языки позволяют использовать итераторы с их абстракциями вроде map или filter. Только такой код, как правило, будет в несколько раз медленнее, чем если то же самое переписать на циклы. Компилятор Rust способен развернуть такой итератор в обычные циклы сам, и производительность будет сравнима, а порой даже лучше, так как программисты часто при написании низкоуровневого кода заставляют процессор делать много лишних вычислений.</blockquote><h2>Сложно ли переходить на Rust</h2><p>У Rust достаточно нетривиальная кривая входа, и без понимания некоторых важных принципов сложно написать код, который хотя бы будет компилироваться. Это относится не только к полным новичкам в программировании, но и к людям, которые уже владеют другим языком.</p><blockquote>На рынке фактически все вакансии требуют уже какого-то опыта в разработке. И сложность перехода сильно разнится от вашего текущего стека. Для Go-программиста переход будет средне-сложным, а язык, возможно, покажется перегруженным. Для С++ — менее сложным, но язык покажется местами ограничивающим. Я переходил на него с JS/TS’а и столкнулся со множеством низкоуровневых концепций, о которых раньше мог не задумываться. Но если у вас есть опыт в системном программировании — переходить будет в разы проще.</blockquote><p>Однако Rust прививает программисту очень много хороших привычек, которые меняют подход к написанию кода и на других языках. Это однозначно хороший выбор в качестве первого языка, но при условии, что у вас есть достаточно времени и терпения на освоение.</p><blockquote>В моей практике менторства много успешных кейсов перехода на Rust с самых разных языков, но проще всего он даётся тем, кто раньше писал на современном C++ и уже понимает такие концепции, как move-семантика и RAII. Много привычного здесь обнаружат и те, кто писал на функциональных языках (Haskell  или OCaml). Но в целом, для остальных тоже нет никаких проблем, даже если вы совсем новичок.</blockquote><h2>С чего начать изучать Rust</h2><p>Вместе со стартом в изучении языка с The Rust Book — бесплатной официальной книгой по Rust’у — стоит углубить свои знания в более низкоуровневых вещах: в чем разница стека и кучи, что такое разметка памяти и адресация в памяти, как работает процессор, подходы и проблемы многопоточного программирования, плюс почитать про операционные системы и сети. Если вы решили осознанно применять Rust, оно вам пригодится.</p><blockquote>Начать можно даже имея только самую базу в программировании: переменные, ветвления, циклы, функции. Крайне желательно разобраться в устройстве памяти, что такое стек и куча, а так же какие области памяти бывают помимо них.</blockquote><p>Вот примерный список того, что нужно учить на старте:</p><ul><li><b>Переменные.</b> Они по умолчанию неизменяемые (let x). Чтобы x стал изменяемым, нужно указать это явно через let mut. Константы (const) и статические переменные (static) вам будут нужны редко, они имеют свои особенности.</li><li><b>Типы.</b> Стоит разобраться с составными типами, такими как массивы и кортежи, а также с пользовательскими объявляемыми конструкциями struct (тип-произведение) и enum (тип-сумма). Также типы данных в Расте есть стандартные: bool, i32, u64 и прочие числовые, но строки могут удивить, так как их видов сильно больше.</li><li><b>Match.</b> Нужно понять такую вещь, как pattern-matching, познакомиться с оператором match, а также осознать, что pattern-matching применяется не только в нём, а везде, где возможно объявление переменных.</li></ul><p>Таким образом, вы можете сразу проверить что-то и присвоить результат в переменную:</p><p>Здесь мы сразу проверили и присвоили:</p><p>Тут нам потребовалась дополнительная изменяемая переменная.</p><h2>Что такое Cargo</h2><p>Cargo —  это консольная утилита, которая устанавливается вместе с компилятором языка. Она служит одновременно для управления зависимостями, сборки проекта и запуска тестов. Плюс для Cargo есть расширения, например, в поставке по умолчанию уже есть форматтер и линтер clippy.</p><p>Cargo рассчитан на то, что вы будете запускать его через терминал, самые полезные команды это:</p><ul><li>cargo new — создаёт новый шаблонный проект в указанной папке;</li><li>cargo build — собирает проект;</li><li>cargo run — собирает проект и запускает получившийся исполняемый файл;</li><li>cargo check — dry-run сборки, делает все проверки компилятора, но ничего не собирает, что заметно быстрее полноценной сборки;</li><li>cargo test — собирает проект со всеми тестами и запускает их;</li><li>cargo fmt — форматирует проект в общепринятый стиль кода;</li><li>cargo clippy — запускает линтер, очень полезно, можно подсказать более оптимальные варианты кода, найти некоторые потенциальные логические ошибки;</li><li>cargo install — устанавливает пакет, содержащий исполняемые файлы;</li><li>cargo clean — очищает все артефакты сборки.</li></ul><p>Cargo позволяет описать структуру, настройки (профили сборки, описание крейта) и зависимости вашего крейта или даже монорепозитория (с помощью workspace). Кроме непосредственного запуска через терминал, многие вещи могут запускаться через средства интеграции в IDE, такие как rust-analyzer для VSCode.</p><h2>Как работать с ownership, borrowing и lifetimes?</h2><p>Для многих новичков системы владения (ownership), заимствования (borrowing) и времен жизни (lifetimes) выливаются в борьбу с компилятором раста. Эти механизмы нужны в первую очередь для безопасности памяти без сборщика мусора. Общее правило владения такое:</p><p><i>Каждое значение в Rust имеет переменную, которая называется его <b>владельцем</b>. В каждый момент времени может быть только <b>один владелец</b>. Когда владелец выходит из области видимости, значение уничтожается.</i></p><p>Когда значение перемещается (передается другой переменной или функции), владение переходит, и исходная переменная становится недействительной.</p><p>Для типов, реализующих трейт Copy (например, целые числа, булевы значения), значения копируются автоматически:</p><p>Для более сложных типов нужно использовать метод clone(), чтобы создать глубокую копию. В местах программы, где производительность не так важна — использование clone() не возбраняется.</p><p>Если же у вас критичный к производительности кусок кода, то вам также понадобится заимствоватние и лайфтаймы.</p><p>Заимствование позволяет использовать значение без получения владения через ссылки (&amp; и &amp;mut). Для мутабельных ссылок `&amp;mut` есть дополнительные ограничения: в каждый момент времени может существовать только одна изменяемая ссылка на значение.</p><p>Нельзя иметь изменяемую ссылку, если уже есть неизменяемая ссылка на то же значение.</p><p>Времена жизни же гарантируют, что ссылки действительны на протяжении всего времени их использования.</p><p>Аннотация 'a указывает, что возвращаемая ссылка будет жить как минимум столько же, сколько кратчайшая из входных ссылок.</p><p>Общие советы по заимствованию здесь такие:</p><ul><li>Используйте ссылки, когда не нужно владение.</li><li>Возвращайте значения из функций для передачи владения обратно.</li><li>Используйте клонирование для создания новых экземпляров (с пониманием стоимости).</li><li>Используйте типы с трейтом Copy, когда это возможно.</li><li>Еще полезно не забывать о контейнерах. Rc&lt;T&gt; позволяет иметь несколько владельцев одного значения через счетчик ссылок, а RefCell&lt;T&gt; обеспечивает проверку правил заимствования в рантайме.</li></ul><h2>О структурах, перечислениях, модулях и функциях, замыканиях, итераторах</h2><p>Структуры (structs) в Rust позволяют создавать пользовательские типы данных, объединяющие связанные значения и выступающие типом произведения.</p><p>Перечисления (enum) позволяют определить тип, перечисляя все возможные варианты значений.</p><p>Перечисления в Rust являются типами суммы, поскольку значение может быть одним из вариантов:</p><p>Тип Shape представляет объединение (сумму) всех возможных вариантов. И к этому есть мощное сопоставление с образцом для работы с ADT:</p><p>Модули позволяют организовать код и контролировать видимость элементов. Определяются они через синтаксис mod &lt;name&gt; {} и могут быть вложенны друг в друга:</p><p>Также модули могут быть организованы в различных файлах (имя файла в таком случае будет именем модуля):</p><p>Импорт модуля осуществляется через ключевое слово use:</p><p>Функции в Rust определяются через ключевое слово fn:</p><p>Можно делать функции высшего порядка и передавать в них, как обычные, так и анонимные функции:</p><p>Еще одним элементом функционального программирования в Rust выступает итератор:</p><p>Здесь мы создаем собственный итератор Counter, реализуя стандартный трейт Iterator. Он используется для многих встроенных коллекций, таких как Vec или HashMap. Этот трейт особенно удобен из-за различных функциональных комбинаторов из стандартной библиотеки:</p><p>Трейт Iterator предоставляет множество методов адаптеров, таких как enumerate, filter или map, которые возвращают новый итератор. Методы адаптеров ленивые, они не запускают итерацию. Также есть методы исполнители, которые итерируют пока не закончатся значения, например, collect, fold или count.</p><p>Большинство коллекций (и ссылки на них) реализуют трейт IntoIterator (способность кастоваться в Iterator). Также IntoIterator автоматически реализуется для любого Iterator (ничего не стоящий каст сам в себя). Цикл for в Rust работает только с объектами, реализующими IntoIterator.</p><h2>Как обрабатывать ошибки в Rust</h2><p>В Rust принято разделять ошибки на 2 вида: паники и результаты операций:</p><ul><li><b>Паники</b> используются для непредвиденных ситуаций и ошибок программиста, например, деление целочисленного типа на 0 или выход за границу массива. И хотя паники можно отловить, стандартное и рекомендуемое поведение при них — программа упадёт, будет напечатан стектрейс.</li><li><b>Результаты операций</b> выражаются типом Result&lt;T, E&gt;, который является перечислением из двух вариантов — Ok(T) и Err(E). Такой подход гарантирует, что все ошибки строго типизированы, а без обработки ошибки невозможно извлечь результат операции.</li></ul><p>Option&lt;T&gt; используется для представления значения, которое может отсутствовать:</p><p>Result&lt;T, E&gt; используется для операций, которые могут завершиться ошибкой:</p><p>Для удобства проброса ошибок наверх существует оператор ?, который пишется после любого выражения, возвращающего Result, и возвращает Ok вариант. В случае Err варианта будет выход из функции с возвращением ошибки.</p><p>Обычно все ошибки описываются в перечислениях, а для уменьшения шаблонного кода используются крейты вроде <a href="https://google.github.io/comprehensive-rust/error-handling/thiserror.html">thiserror</a>.</p><h2>Про асинхронное программирование</h2><p>Асинхронное программирование в Rust строится вокруг трейта Future— его реализуют для типов, представляющих значение, которое будет доступно в будущем.</p><p>Также в Rust есть синтаксис async/await. Ключевым словом async могут быть отмечены функции и блоки кода — они будут возвращать анонимный тип, реализующий Future. Async-блоки также могут захватывать окружение подобно замыканиям. Внутри async-блоков и функций возможно использовать ключевое слово await на любом выражении, возвращающем Future или IntoFuture (способность кастоваться к Future). В отличие от других языков с подобным синтаксисом, await записывается через точку после выражения, что очень удобно для построения цепочек вычислений.</p><p>Для исполнения асинхронного кода необходим рантайм, но стандартная библиотека такого рантайма не предоставляет, поэтому приходится использовать сторонние библиотеки. Самым популярным рантаймом является библиотека tokio.</p><blockquote>В асинхронное программирование на Rust я рекомендую приходить уже после углубленного изучения языка, первых пет-проектов и небольшой работы с многопоточным кодом. Хотя синтаксис и общие правила работы с асинхронным кодом покажутся знакомыми тем, кто знает JS или C#, из-за более низкоуровневой природы языка работать с ним немного сложнее.</blockquote><h2>Что еще должен знать новичок в Rust</h2><p>Вот примерный список:</p><ul><li>Очень желательно погрузиться в устройство памяти процесса, узнать, что помимо стека и кучи существуют и другие области (например, исполняемый машинный код так же отражён на память, а static-переменные хранятся не в стеке и не в куче, а в своей собственной области). Неплохо было бы и разобраться с тем, что у типов помимо размера есть выравнивание. Что в Rust бывают ZST (zero size type) — типы, размер которых честный 0, и DST (dynamic size type) — типы, размер которых неизвестен во время компиляции.</li><li>Обязательно разобраться, как Rust освобождает память, не используя сборщик мусора. Почитать, что такое RAII. Понять, как работает трейт Drop.</li><li>Избавится от стереотипов о Rust. Rust — не самый сложный язык, как только вы поймёте, как он работает. Плюс платят за Rust, как правило, больше, чем на аналогичных позициях на других языках.</li><li>Оставить свои привычки из других языков (за исключением разве что Haskell/OCaml). Здесь не получится писать, как на C++/Java/Go и т.д. Привыкайте к хорошему и станете лучше, чем были до освоения Rust.</li></ul><h2>Что изучать, если есть вся база: чек-лист</h2><ul><li>Макросы и метапрограммирование</li><li>Unsafe Rust для низкоуровневого контроля</li><li>Интеграция с C/C++ через FFI</li><li>Разработка встраиваемых систем</li><li>WebAssembly</li><li><a href="https://doc.rust-lang.org/nomicon/">rustnomicon</a></li><li>Undefined Behavior</li><li>unsafe-код</li></ul><h2>Тренды на 2025 год</h2><p>На Rust’е пишут все. Более полный список можно посмотреть тут: <a href="https://github.com/rust-unofficial/awesome-rust">https://github.com/rust-unofficial/awesome-rust</a></p><p>Вот несколько топовых фреймворков и библиотек:</p><ul><li>serde — фреймворк для сериализации/десериализации</li><li>tokio, futures — для асинхронного программирования</li><li>clap — парсер аргументов командной строки</li><li>anyhow, thiserror — удобная работа с ошибками</li><li>chrono — работа с датой и временем</li><li>dashmap — многопоточная hashmap</li><li>bytes — эффективная работа с сырыми байтами</li><li>log, tracing — для логирования</li><li>reqwest — для http запросов</li><li>axum — для http сервера и REST api</li><li>mockall, test-case — упростит написание тестов</li><li>bevy — игры</li><li>clippy — линтер</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Почему As Code — это не просто тренд, а новая реальность разработки</title>
      <link>https://tproger.ru/articles/pochemu-as-code---eto-ne-prosto-trend--a-novaya-realnost-razrabotki</link>
      <comments>https://tproger.ru/articles/pochemu-as-code---eto-ne-prosto-trend--a-novaya-realnost-razrabotki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-as-code---eto-ne-prosto-trend--a-novaya-realnost-razrabotki</guid>
      <description><![CDATA[<p>В статье Максим Морев расскажет, что такое подход As Code, как он развивался и почему он нужен компаниям.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-as-code---eto-ne-prosto-trend--a-novaya-realnost-razrabotki">Почему As Code — это не просто тренд, а новая реальность разработки</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Agile]]></category>
      <category><![CDATA[Amazon]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Финтех]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Openshift]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 19 Mar 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В IT-командах часто происходит одно и то же: правила, договоренности, решения живут отдельно от кода — в чатах, документах, в головах людей. Кто-то пишет тесты одним образом, кто-то иначе. Один деплоит в ручном режиме, другой автоматизировал на коленке в обход всех процессов. Со временем все это превращается в такой хаос, что проще снести и написать с нуля.</p><p>Хаос необходимо упорядочить — и тут на помощь приходит As Code. Это не просто методология, а философия, где все — от инфраструктуры до документации и политик безопасности — становится кодом. В этой статье я расскажу, почему подход As Code стал критически важен для современных IT-компаний и как он эволюционировал.</p><h2>С чего все началось</h2><p>На одном митапе по стандарту разработки нам с Head of Profession задали вопросы, которые зависли в воздухе, как нерешенный баг в коде: «А что за потребность все делать с помощью As Code? Какая от этого польза? Зачем число коммитящих в код?»</p><p>Мы, как архитекторы инженерной культуры, внедряем лучшие практики и подходы: <b>Infrastructure as Code, API First, unit-тесты, компонентное тестирование, TBD (Trunk Based Development), GitOps, Doc As Cod.</b> Мы дорабатываем пайплайны, как инженеры, собирающие сеть в подвале старого дата-центра. Мы создаем условия для Continuous Deployment с продуктовыми платформами, где <a href="https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html">blue-green deployment</a> и <a href="https://cloud.google.com/deploy/docs/deployment-strategies/canary">canary deployment</a> становятся порталами для перехода прода из одного состояния в другое.</p><p>Каждый коммит — шаг в будущее, где код становится не просто текстом, а нитью в живой ткани новой реальности. Число коммитящих — это не просто метрика, это сигнал, что система жива, дышит, развивается. И когда кто-то спрашивает «Зачем?», я отвечаю: «Потому что иначе мы останемся в прошлом, где ручные процессы, как старые провода, тянут нас назад в тишину, замедляя каждый шаг. Мы строим мир, где As Code не просто слова, код — наша новая реальность. И каждый, кто коммитит, становится частью этой вселенной».</p><p>В момент осознания вопроса я провалился на другой слой реальности, задумался об истории As Code и собрал этот текст из разбросанных по сети слепков. Эта статья — не руководство по Terraform или Kubernetes, а скорее практический взгляд на культуру As Code в масштабах крупной IT-компании.</p><h2>Эволюция As Code: от истоков до современности</h2><p>Концепция As Code возникла как ответ на ключевые вызовы IT-индустрии: рост сложности систем и ускорение темпов изменений. Она был естественным продолжением эволюции разработки — код стал не только инструментом создания программ, но и способом управления инфраструктурой, документацией, архитектурой и политиками.</p><p>У появления этого подхода было несколько предпосылок:</p><ol><li>Автоматизация и стандартизация. В 1990-х годах с развитием DevOps и agile-методологий возникла потребность в автоматизации процессов разработки и управления инфраструктурой. Новые задачи стали основой для появления подходов, где все описывается в виде кода.</li><li>Распространение систем контроля версий. В 2005 году появился Git, который стал инструментом для управления изменениями, что позволило хранить и версионировать не только код, но и документацию, конфигурации и архитектуры.</li></ol><p>Корнями As Code уходит в 1970-е годы. Ранние инструменты, такие как Unix “Make” и PXE boot, заложили фундамент для автоматизации конфигураций. Позже они эволюционировали в современные подходы: Infrastructure as Code, Documentation as Code, GitOps и другие. Это подчеркивает, что As Code — не просто тренд, а естественное развитие технологий, которое упрощает управление сложными системами.</p><h2>Почему все теперь в Git?</h2><p>С развитием подхода As Code универсальным инструментом управления изменениями стал Git. Это произошло благодаря нескольким ключевым причинам.</p><ul><li><b>История изменений: </b>Git хранит всю историю изменений, что позволяет отслеживать, кто, когда и что делал. Это критически важно для анализа и отката ошибок.</li><li><b>Коллаборация:</b> над проектом может работать несколько человек, и они не будут мешать друг другу.</li><li><b>Прозрачность:</b> все изменения видны, их можно обсудить, проверить и улучшить через механизмы pull/merge requests.</li><li><b>Автоматизация:</b> Git интегрируется с CI/CD — Continuous Integration / Continuous Deployment. Это позволяет автоматизировать тестирование, сборку и деплой. Работа в Git позволяет «все иметь под рукой» и упрощает создание систем поддержки и контроль стандартов ИТ-производства.</li><li><b>Безопасность: </b>Git позволяет контролировать доступ к коду и данным через ролевую модель и механизмы проверки изменений.</li></ul><h2>Как появился Git?</h2><p>Git был создан в 2005 году как ответ на кризис в разработке ядра Linux. Ранее команда Linux использовала проприетарную систему контроля версий BitKeeper, но юридические споры лишили программистов этой возможности. Linux-сообщество осталось без инструмента для управления кодом. Существующие системы — например, CVS или Subversion — не подходили для масштабных проектов.</p><p>Линус Торвальдс, создатель Linux, решил разработать собственную систему, которая бы отвечала потребностям крупных проектов:</p><ul><li>была быстрой,</li><li>поддерживала распределенную разработку,</li><li>гарантировала сохранность данных (через хеши SHA-1).</li></ul><p>Git был создан всего за 10 дней. Первая версия была настолько проста, что Торвальдс называл ее «игрушечной». При этом она уже решала ключевые задачи. Инструмент разработали с акцентом на децентрализацию: каждый разработчик имеет полную копию репозитория, что делает процесс гибким и устойчивым.</p><p>Создание Git — прекрасный пример проактивной позиции: если тебя что-то не устраивает, ты сам создаешь инструмент для решения задачи. Реагируешь на боль не нытьем, а делом, и оставляешь проблему позади. Этот инструмент родился из необходимости и стал революцией в мире разработки. Простота, скорость и распределенный подход сделали его незаменимым инструментом для команд любого масштаба.</p><p>Эволюция Git:</p><ul><li><b>2005:</b> первый релиз Git;</li><li><b>2008: </b>появление GitHub, который популяризировал Git среди разработчиков;</li><li><b>Сейчас:</b> Git де-факто стал стандартом для контроля версий, который используют разработчики по всему миру.</li></ul><h2>Основные подходы As Code</h2><h3>Infrastructure as Code (IaC)</h3><p>IaC — это описание в виде кода инфраструктуры: серверов, сети баз данных. Например, с помощью Terraform, Ansible, CloudFormation. Инструмент позволяет сделать инфраструктуру воспроизводимой, предсказуемой и легко управляемой. Вместо ручного создания серверов в облаке вы можете описать их в коде и развернуть одной командой.</p><p>Когда мы слышим термин Infrastructure as Code, то обычно думаем о современных инструментах, таких как Chef, Ansible или Terraform. Однако сама идея управления инфраструктурой и конфигурациями через код уходит корнями в 1970-е годы. Уже тогда инженеры сталкивались с необходимостью автоматизировать управление парками машин, будь то физические или виртуальные системы.</p><p>Одним из первых инструментов, позволявших автоматизировать сборку и настройку программного обеспечения, был Unix “Make” (1976). Хотя Make не стал полноценным инструментом управления инфраструктурой, он заложил основы для автоматизации задач конфигурации. Следующим важным шагом к автоматизации стал PXE boot (1981). Он позволял загружать и настраивать по сети целые машины — это стало прообразом современных подходов к управлению инфраструктурой.</p><p>Хотя эти ранние инструменты не считаются полноценными решениями для управления инфраструктурой, они создали основу для современных подходов. Unix “Make” и PXE boot показали, что автоматизация конфигураций возможна и необходима, особенно с ростом сложности систем.</p><p>Как дальше складывалась эволюция IaC:</p><ul><li><b>1990-е: </b>следующий этап развития начался с появлением CFEngine (1993). Это был один из первых инструментов, позволявших управлять конфигурациями на множестве машин.</li><li><b>2000-е:</b> с развитием облачных технологий и DevOps появились более мощные инструменты, такие как Puppet (2005) и Chef (2009). Они сделали управление через код отраслевым стандартом. 2010-е: Ansible (2012) и Terraform (2014) стали лидерами в области IaC. Они предложили более гибкие и мощные решения для управления облачной инфраструктурой.</li><li><b>2013: </b>появился Docker, который произвел революцию в контейнеризации. Он обеспечил легкость в создании, развертывании и масштабировании приложений, а также упростил процессы управления инфраструктурой.</li><li><b>2014: </b>Kubernetes предложил автоматизацию развертывания, масштабирования и управления контейнизированными приложениями.</li><li><b>2017: </b>создан Pulumi, который позволил управлять ресурсами облачной инфраструктуры с использованием таких языков программирования, как Go, JavaScript, TypeScript, Python, Java, C# и YAML. Благодаря этому инструменту разработчики смогли быстрее интегрировать IaC в свои процессы и создавать более сложные сценарии для автоматизации.</li><li><b>2021: </b>появился Brainboard, который значительно упростил разработку, визуализацию и управление инфраструктурой как кодом. Он предложил графический интерфейс для создания и изменения архитектуры облаков. Это помогло сделать IaC доступным не только для разработчиков, но и для более широкого круга пользователей, в том числе для аналитиков и проектировщиков.</li></ul><p>Эволюция IaC уходит корнями в историю зарождения машин. С тех пор задачи, с которыми мы сталкиваемся, остались прежними — просто мы решаем их через новые слои абстракции, создавая все более сложные и эффективные инструменты для автоматизации инфраструктуры и управления ею.</p><h3>Documentation as Code (Docs as Code)</h3><p>Подход Docs as Code позволяет разрабатывать техническую документацию с помощью тех же инструментов, что и код. Документы создаются в формате, который легко версионировать и хранить в Git, — например, Markdown или AsciiDoc. Это дает значительные преимущества:</p><ul><li>актуальность — документация API или архитектуры хранится в репозитории рядом с кодом, благодаря чему всегда остается актуальной;</li><li>версионирование — легко отслеживать изменения и возвращаться к предыдущим версиям;</li><li>интеграция в процесс разработки — документация становится частью DevOps-практики и развивается в Git вместе с кодом.</li></ul><p>Подход Docs as Code начал развиваться в 2000-х годах. В это время крупные компании, такие как Microsoft, начали использовать внутренние инструменты для генерации документации из исходного кода. Например, документация .NET Framework уже создавалась с помощью автоматизированных процессов.</p><p>В 2010-х годах термин Docs as Code был популяризирован. Тогда такие инструменты, как Markdown, AsciiDoc и Sphinx, стали широко использовать для создания и управления документацией в репозиториях Git.</p><h3>Architecture as Code (AaC)</h3><p>AaC позволяет описывать архитектуру системы в виде кода — например, с помощью DSL. Благодаря этому она становится понятной, проверяемой и легко изменяемой. С помощью таких инструментов, как Structurizr или PlantUML, можно генерировать архитектуры программного обеспечения в коде, чтобы интегрировать их в процессы разработки.</p><p>Подход Architecture as Code начал развиваться в 2010-х годах с появлением Structurizr (2014) и других инструментов. Сегодня AaC используют для описания в формате, который можно версионировать и тестировать. Например, <a href="https://c4model.com/">C4-модель</a> помогает разработчикам и архитекторам лучше понимать сложные системы.</p><p>Хотя конкретные компании редко публично афишируют использование C4-модели или Aac, есть несколько примеров, где эти подходы активно применяются.</p><h4>Крупные технологические компании</h4><ul><li>Microsoft использует C4-модель, чтобы документировать архитектуры своих облачных сервисов, таких как, допустим, Azure. Подход AaC помогает автоматизировать создание диаграмм и поддерживать документацию в актуальном состоянии.</li><li>Внутренние команды Amazon Web Services используют C4-модели для описания архитектуры своих сервисов, а инструменты AaC помогают интегрировать эти описания в CI/CD-процессы.</li></ul><h4>Финансовые организации</h4><p>Многие банки и финтех-компании используют C4-модели, чтобы документировать сложные распределенные системы. Например, ING и Goldman Sachs применяют AaC для автоматизации создания архитектурных диаграмм и проверки соответствия стандартам.</p><h4>Консалтинговые и IT-компании</h4><ul><li>Разработчик и поставщик программного обеспечения ThoughtWorks активно продвигает использование C4-модели и подхода Architecture as Code в своих проектах. Компания создает инструменты и практики для интеграции AaC в процессы разработки.</li><li>Производитель программного обеспечения Red Hat использует C4-модели для документирования архитектуры своих решений, таких как OpenShift, и применяет AaC для автоматизации создания диаграмм.</li><li>Также активно использует и применяет C4-модели X5 Tech — основной цифровой партнер торговых сетей и бизнесов X5 Group.</li></ul><h3>Policy as Code</h3><p>Этот подход позволяет описывать политики и управлять ими, например безопасностью или доступом. Policy as Code дает возможность автоматизировать проверку на всех этапах жизненного цикла ПО и обеспечить compliance — соответствие требованиям.</p><p>Подход Policy as Code стал популярным с появлением таких инструментов, как Open Policy Agent (OPA) и Hashicorp Sentinel. Они позволили описывать политики безопасности и compliance в виде кода, что стало особенно востребованным в облачных средах.</p><h3>GitOps</h3><p>GitOps — подход, в котором Git становится единым источником истины для управления инфраструктурой и приложениями. Они описываются в коде — например, с помощью Kubernetes manifests — а все изменения автоматически применяются через CI/CD.</p><p>Концепцию GitOps в 2017 году формализовала компания Weaveworks, этот подход дает несколько преимуществ:</p><ul><li>прозрачность — все изменения видны в Git;</li><li>автоматизация — процессы деплоя и обновления автоматизированы;</li><li>безопасность — изменения проходят код-ревью и тестирование.</li></ul><h3>GitSecOps</h3><p>GitSecOps — расширение GitOps с акцентом на безопасность, которое стало развиваться в 2020-х годах. С помощью этого инструмента можно интегрировать безопасность в процесс разработки и эксплуатации через код, он позволяет внедрить в CI/CD инструменты статического анализа кода (SAST) и анализа зависимостей (SCA).</p><p>Преимущества этого подхода:</p><ul><li>раннее выявление уязвимостей;</li><li>автоматизация проверок безопасности;</li><li>соответствие стандартам — например, GDPR или HIPAA.</li></ul><h2>Будущее с As Code</h2><p>Мы постепенно внедряем лучшие практики и шаг за шагом приближаемся к моменту, когда актуальность инженерной культуры будет соответствовать состоянию мастер-системы, которая тем временем бежит вперед, — и я вижу в пространстве новые коммиты актуальной реальности.</p><p>Но пока мы остаемся той самой медленной нодой в распределенной сети, которая, несмотря на все усилия, тормозит синхронизацию инженерной культуры с потребностями рынка. Мы — узкое горлышко в потоке данных, где каждая задержка отзывается эхом в бесконечном цикле итераций. И пока мы пытаемся догнать мастер-систему, бизнес не может уйти на следующий виток спирали, заторможенный устаревшими процессами и отсутствием коммитов нереализованных фич.</p><h4>Footnotes:</h4><p>• <a href="https://hackernoon.com/everything-as-code-explained-0ibg32a3">Everything as Code Explained</a></p><p>• <a href="https://www.writethedocs.org/guide/docs-as-code/">Write the Docs Guide: Docs as Code</a></p><p>• <a href="https://medium.com/@EjiroOnose/understanding-docs-as-code-01b8c7644e23">Understanding Docs as Code</a></p><p>• <a href="https://medium.com/@mike_tyson_cloud/the-origins-of-infrastructure-as-code-a-brief-history-of-devops-a883d8877f19">The Origins of Infrastructure as Code</a></p><p>• <a href="https://cloud.google.com/deploy/docs/deployment-strategies/canary">Canary Deployment Strategies</a></p><p>• <a href="https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html">AWS Whitepaper: Blue-Green Deployments</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Стартап Cal AI сделал двух подростков из США миллионерами</title>
      <link>https://tproger.ru/news/startap-cal-ai-sdelal-dvuh-podrostkov-iz-swa-millionerami-254898</link>
      <comments>https://tproger.ru/news/startap-cal-ai-sdelal-dvuh-podrostkov-iz-swa-millionerami-254898?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/startap-cal-ai-sdelal-dvuh-podrostkov-iz-swa-millionerami-254898</guid>
      <description><![CDATA[<p>Приложение для подсчета калорий Cal AI, разработанное тинейджерами из США, скачали более 5 млн раз — оно принесло ребятам более миллиона долларов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/startap-cal-ai-sdelal-dvuh-podrostkov-iz-swa-millionerami-254898">Стартап Cal AI сделал двух подростков из США миллионерами</a>»</p>]]></description>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Стартапы]]></category>
      <category><![CDATA[App Store]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Chromebook]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 17 Mar 2025 10:20:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Два 18-летних подростка из США — Зак Ягедари и Генри Лэнгмак — только окончили школу, но уже успели запустить собственное приложение для подсчета калорий Cal AI.</p><p>По словам Ягедари, апп скачали уже больше 5 млн раз за восемь месяцев, плюс он принес создателям более 2 млн долларов прибыли. TechCrunch не удалось подтвердить эту информацию, но они проверили, что в App Store у Cal AI рейтинг 4,8 звезд и 66 тысяч отзывов, а в Google Play — 4,6 звезд, 76+ тысяч отзывов и 1+ млн скачиваний.</p><p>Интересно, что если поискать это приложение в App Store, то информация совершенно другая. Возможно, проблема в регионе:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-03-17/fceda778-7dc8-4673-910c-5aefffaf6d27.jpg" alt="" /></figure><h2>Еда, чистый кодинг и ничего лишнего</h2><p>Суть приложения очень простая: снимаете еду на телефон, а программа моментально подсчитывает калории. Никаких сложных формул и долгого вбивания каждого продукта в поиск  — всё делает искусственный интеллект. Идея приложения, кстати, появилась, когда Ядегари начал посещать тренажерный зал, чтобы набрать вес и «произвести впечатление на девушек».</p><p>Да, такие приложения уже несколько лет существовали на рынке, например, SnapCalorie. Но у Cal AI есть большое преимущество: оно было разработано в самое подходящее время, когда ИИ становится все умнее и точнее. Приложение работает на моделях от Anthropic, OpenAI и RAG и обучается на базе данных с калорийностью продуктов и изображениях с разных сайтов, например, GitHub. Точность доходит до 90%.</p><p>Несмотря на то что Cal AI построено на моделях ИИ, сам код написан вручную. По словам Ягедари, пока другие подростки «вайбкодили» и изучали программирование с помощью нейросетей (если и вовсе изучали), он погружался в Python и C#.</p><blockquote>Мы обнаружили, что разные модели лучше подходят для разных продуктов.</blockquote><p>Попутно разработчики решали технические проблемы, например, распознавание ингредиентов в упаковках или на тарелках, где все сильно перемешано.</p><h2>И это даже не начало</h2><p>Свои первые $100 000 Ягедари заработал еще в 16 лет.</p><blockquote>После карантина школы раздали Chromebook’и всем ученикам, и неудивительно, что дети пытались злоупотребить этим, играя в игры во время уроков.</blockquote><p>Тогда школа решила заблокировать эти сайты, но современные проблемы требуют современных решений, поэтому Зак решил написать собственный сайт, который поможет обходить блокировки.</p><p>Название было крайне удачное — Totally Science. Кто захочет блокировать такой сайт, правда? Со временем Зак продал этот мини-бизнес игровой компании FreezeNova за $100 000.</p><p>Недавно Ягедари и Лэнгмак переехали в Сан-Франциско в хакерский дом, чтобы работать над прототипом Cal AI. Правда, эффект был абсолютно обратный: Зак решил, что все-таки хочет получить высшее образование, а не спать на полу и работать 24 часа в сутки, чтобы сделать крутой стартап. Именно так проходили будни большинства молодых ребят в этом хакерском доме (ну, и вспомните сериал «Кремниевая долина»).</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-03-17/94d8cd92-009f-4aa8-9370-f42198e6ce2f.png" alt="" /><figcaption>Основатели Cal AI</figcaption></figure><p>В любом случае, у Ягедари и Лэнгмака все хорошо: они продолжают с удовольствием управлять своей компанией. Теперь в нее входят еще один ко-фаундер, 28-летний Джейк Кастильо — исполнительный директором и руководитель отдела маркетинга, а также восемь штатных сотрудников — разработчики, дизайнер и SMM-менеджеры.</p>]]></content:encoded>
    </item>
    <item>
      <title>Состоялся релиз первого превью .NET 10: C# 14, улучшенный JIT и новые API</title>
      <link>https://tproger.ru/news/--sostoyalsya-reliz-pervogo-prevyu--net-10--c--14--uluchwennyj-jit-i-novye-api</link>
      <comments>https://tproger.ru/news/--sostoyalsya-reliz-pervogo-prevyu--net-10--c--14--uluchwennyj-jit-i-novye-api?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/--sostoyalsya-reliz-pervogo-prevyu--net-10--c--14--uluchwennyj-jit-i-novye-api</guid>
      <description><![CDATA[<p>Вышло превью .NET 10 с C# 14, улучшенным JIT и новыми API. Улучшена работа с памятью, производительность и поддержка Blazor, MAUI и ASP.NET Core</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/--sostoyalsya-reliz-pervogo-prevyu--net-10--c--14--uluchwennyj-jit-i-novye-api">Состоялся релиз первого превью .NET 10: C# 14, улучшенный JIT и новые API</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Asp.NET]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 05 Mar 2025 04:43:13 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>Microsoft представила первую превью-версию .NET 10</b>, которая принесла <b>обновленный язык C# 14</b>, значительные улучшения в JIT-компиляции и новые API.</p><p>Финальный релиз <b>ожидается в ноябре</b>, а пока разработчики могут опробовать нововведения в тестовой версии.</p><h2>C# 14: удобнее, быстрее, гибче</h2><p>В новой версии языка появились важные улучшения:</p><ul><li><b>Поддержка</b> System.Span&lt;T&gt; и System.ReadOnlySpan&lt;T&gt; на уровне языка, что делает работу с этими типами более естественной и повышает производительность без потери безопасности.</li><li><b>Упрощенная работа с дженериками</b> — теперь аргумент nameof может быть <b>непривязанным</b> (unbound) дженериком.</li><li><b>Лямбда-выражения стали гибче</b>: можно добавлять модификаторы параметров (scoped, ref, in, out, ref readonly) <b>без указания их типов</b>.</li></ul><p>Эти нововведения позволяют писать более <b>эффективный и компактный код</b> без потери производительности.</p><h2>Улучшенный JIT и производительность .NET 10</h2><p>Разработчики продолжают снижать <b>абстрактные накладные расходы</b> популярных языковых конструкций:</p><ul><li>JIT-компилятор теперь умеет <b>де-виртуализировать</b> вызовы методов для интерфейсов массивов, что ускоряет работу с массивами.</li><li><b>Автоматическое выделение небольших массивов в стеке</b>, если они не содержат указателей на управляемую память (GC), снижает нагрузку на сборщик мусора.</li></ul><p>Благодаря этим улучшениям <b>.NET 10 стал еще быстрее</b>, а нагрузка на память уменьшилась.</p><h2>Новые API и улучшения в библиотеках</h2><p><b>В стандартные библиотеки добавлены новые API</b>, которые оптимизируют работу с текстовыми данными и 3D-графикой:</p><ul><li><b>Обработка символов</b> теперь работает с Span&lt;char&gt;, что позволяет <b>избежать лишних выделений памяти</b>.</li><li><b>Поддержка матриц левой трансформации</b>, полезная при работе с <b>3D-графикой</b>.</li><li><b>Улучшена производительность</b> ZipArchive для работы с архивами.</li></ul><p>Эти обновления направлены на <b>ускорение работы кода и снижение потребления памяти</b>.</p><h2>Обновления ASP.NET Core, Blazor и MAUI</h2><ul><li><b>ASP.NET Core</b> теперь поддерживает <b>OpenAPI 3.1</b> и <b>генерацию API-документации в формате YAML</b>.</li><li><b>Blazor</b> получил <b>подсветку синтаксиса маршрутов</b>, что упрощает разработку.</li><li><b>.NET MAUI</b> теперь поставляется <b>в виде .NET workload</b> и через <b>NuGet-пакеты</b>, что облегчает фиксацию версий и тестирование экспериментальных сборок.</li></ul><p>Также в <b>Entity Framework</b> появился <b>метод</b> LeftJoin <b>для LINQ</b>, что упрощает написание SQL-запросов.</p><p>Скачать и опробовать .NET 10 можно перейдя по <a href="https://dotnet.microsoft.com/en-us/download/dotnet/10.0">ссылке</a> на официальный сайт Microsoft.</p>]]></content:encoded>
    </item>
    <item>
      <title>Вышел Godot 4.4: что нового в набирающем популярность игровом движке?</title>
      <link>https://tproger.ru/news/vywel-godot-4-4--chto-novogo-v-nabirayushhem-populyarnost-igrovom-dvizhke-</link>
      <comments>https://tproger.ru/news/vywel-godot-4-4--chto-novogo-v-nabirayushhem-populyarnost-igrovom-dvizhke-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/vywel-godot-4-4--chto-novogo-v-nabirayushhem-populyarnost-igrovom-dvizhke-</guid>
      <description><![CDATA[<p>Godot 4.4 вышел с улучшенной физикой, оптимизированной графикой и поддержкой XR. Теперь Jolt Physics встроен в движок, а C# получил поддержку .NET 8</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/vywel-godot-4-4--chto-novogo-v-nabirayushhem-populyarnost-igrovom-dvizhke-">Вышел Godot 4.4: что нового в набирающем популярность игровом движке?</a>»</p>]]></description>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 04 Mar 2025 11:52:31 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разработчики выпустили <b>Godot 4.4</b> — новую стабильную версию кроссплатформенного игрового движка.</p><p>Главное в этом обновлении — улучшенная физика, оптимизация рендеринга и новые возможности для работы с 3D-графикой и VR.</p><h2>Физика, графика и оптимизация работы движка</h2><p><b>Jolt Physics</b> интегрировали прямо в <b>Godot</b> — теперь этот физический движок доступен без установки дополнительных расширений. Добавлена <b>интерполяция 3D-физики</b>, что делает движение объектов более плавным.</p><p>Также появилась <b>поддержка Ubershaders</b>, снижающая подтормаживания при первом запуске шейдеров. Это особенно важно для игр с насыщенной графикой, где важно минимизировать зависания.</p><p>Тональная коррекция <b>AgX</b> стала доступна по умолчанию, обеспечивая <b>более реалистичное освещение и цветопередачу</b>.</p><p>Производительность в целом была улучшена за счет <b>нового компрессора текстур Betsy</b>, который <b>ускоряет импорт ассетов и снижает потребление ресурсов</b>.</p><h2>Редактор, XR и улучшения для разработчиков</h2><p>Редактор <b>Godot 4.4</b> получил <b>интерактивное редактирование</b> — теперь можно вносить изменения в код и сцену прямо во время «воспроизведения» игры, что делает процесс тестирования удобнее.</p><p>Появилась <b>поддержка XR-устройств</b> в редакторе: теперь можно изменять сцены прямо в виртуальной реальности. На данный момент официально поддерживаются гарнитуры <b>Quest 3, Quest 3S</b> и <b>Quest Pro</b>.</p><p>Важное изменение для разработчиков на <b>C# — полная поддержка .NET 8.0</b>, что повышает совместимость с актуальными технологиями Microsoft.</p><p>Также <b>обновлена система работы со скриптами</b> — внедрены <b>типизированные словари</b>, что делает код более предсказуемым и строгим.</p><h2>Что дальше?</h2><p>Разработчики <b>обещают дальнейшую оптимизацию производительности</b>, <b>улучшение</b> <b>редактора</b> и <b>расширение возможностей для 3D-графики</b>.</p><p>Подробнее можно узнать на <a href="https://godotengine.org/releases/4.4/">официальном сайте</a> Godot.</p>]]></content:encoded>
    </item>
    <item>
      <title>Часть 2: Как оптимизировать логирование в .NET: советы и примеры</title>
      <link>https://tproger.ru/articles/kak-optimizirovat-logirovanie-v--net--sovety-i-primery</link>
      <comments>https://tproger.ru/articles/kak-optimizirovat-logirovanie-v--net--sovety-i-primery?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Береговой]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-optimizirovat-logirovanie-v--net--sovety-i-primery</guid>
      <description><![CDATA[<p>Узнайте, как оптимизировать логирование в .NET на практике. Разбираем тесты производительности, сравниваем методы и показываем, как автоматизировать переход на эффективное логирование.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-optimizirovat-logirovanie-v--net--sovety-i-primery">Часть 2: Как оптимизировать логирование в .NET: советы и примеры</a>»</p>]]></description>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 13 Feb 2025 14:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Это продолжение нашей серии о логировании в .NET. <a href="https://tproger.ru/articles/pochemu-standartnoe-logirovanie-mozhet-tormozit--net-prilozheniya">В первой части</a> мы разобрали, как стандартные методы могут замедлять приложение, и познакомились с LoggerMessage. Теперь пора перейти к практике: мы покажем реальные тесты производительности и расскажем, как автоматизировать переход на эффективное логирование.</p><h2>Сравнение производительности: стандартное логирование против LoggerMessage</h2><p>Чтобы сравнить производительность LoggerMessage и методов расширения интерфейса, мы решили написать программу, подсчитывающую сумму четных элементов массива. Предварительно добавили несколько новых методов для записи дополнительных событий. Вот объявления для новых событий:</p><p>Обновленный код приложения:</p><p>Здесь строки вызова методов расширения ILogger закомментированы. А вызовы наших методов, построенных через механизм LoggerMessage, раскомментированы. Таким образом, можно прогнать программу, используя ILogger, либо, наоборот, LoggerMessage</p><p>При использовании механизма LoggerMessage затраты на выполнение методов логирования, которые мы вызывали в цикле (LogIterationStart и LogIterationComplete), составили <b>0,58%</b> и <b>0,52%</b> процессорного времени от общих затрат.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-01-30/e1164e87-c1a9-4e42-9847-a5d620953363.png" alt="" /></figure><p>При использовании методов расширения ILogger затраты на выполнение метода ILogger.LogInformation составили <b>35,12%</b><b></b> от общих затрат.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-01-30/a3f07e4f-0bf9-4df3-bf56-6f52b9d68277.png" alt="" /></figure><p>Да, можно заметить, что в затраты попали вызовы метода LoggerMessage.Define. Но заметим, что эти методы выполняются один раз на старте приложения. И если наше приложение серверное (долгоживущее), то затраты станут ничтожными по отношению к общим затратам за всё время жизни приложения.</p><p>При использовании же методов расширения ILogger затраты на выполнение будут расти, создавая нагрузку как на процессор, так и на память.</p><h2>AutoLoggerMessage: как легко перейти на высокопроизводительное логирование</h2><p>Мы рассмотрели два способа типизированных методов для ILogger. LoggerMessageAttribute упрощает процесс, но перевод готового проекта всё равно сложный.</p><p>К счастью, есть nuget-пакет, который умеет преобразовывать методы расширения ILogger.Log* из пространства имен Microsoft.Extensions.Logging в строго типизированные методы LoggerMessage.</p><p>Чтобы воспользоваться этим пакетом, нужно выполнить два простых шага:</p><p><b>Добавить в проект nuget-пакет stbychkov.AutoLoggerMessage</b></p><p>Это можно сделать либо через консоль с помощью инструмента Nuget package Manager, либо добавив ссылку на пакет в файл проекта.</p><p>Команда консоли Nuget Package Manager:</p><p>Install-Package stbychkov.AutoLoggerMessage</p><p>Добавление пакета с помощью утилиты dotnet:</p><p>dotnet add package stbychkov.AutoLoggerMessage</p><p><b>Разрешить перехватчики для генерации исходного кода</b></p><p>Для тестирования этого пакета мы создали отдельный проект консольного приложения и подключили в него указанный nuget-пакет. Далее добавили в модуль Program.cs пару строк с вызовами ILogger.LogInformation:</p><p>Если попытаться перейти к реализации метода LogInformation с помощью команды Go To Implementation, мы увидим, что попали не в метод расширения класса LoggerExtensions, а в строго типизированный метод в классе GenericLoggerExtensions:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-01-30/6f64462b-bed9-4e46-83cd-489887e518f7.png" alt="" /></figure><p>Для первого вызова, где передана только строка сообщения, будет вызван этот метод:</p><p>Для второго вызова, где передан параметр типа TimeSpan, будет вызван следующий метод:</p><p>Как видите, второй метод имеет обобщенный параметр.</p><p>Можно заметить, что внутри есть вызовы LoggerExtensions, которые не строго типизированы. Это нужно, поскольку во время компиляции вложенный вызов logger.Log должен быть заменен сгенерированным кодом, который в итоге будет вызывать подходящий строго типизированный метод расширения класса LoggerMessageExtensions.</p><p>Сборка проекта как в MS Visual Studio 2022, так и в <b>JetBrains Rider,</b> прошла без проблем. Так, если в <b>IDE Rider</b> запустить отладку проекта, предварительно поставив точку останова на вызове одного из методов logger.LogInformation(), то можно увидеть код, который будет вызван. Для этого выберите команду Step Into:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-01-30/b381b126-2726-4f1c-b771-6d1f9874372f.png" alt="" /></figure><p>Мы можем видеть, что дальше управление передается сгенерированному методу с типизированными параметрами:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-01-30/02872f1a-5598-4484-bbc9-dcb73c098fc0.png" alt="" /></figure><p>Этот код построен на LoggerMessage.Define – следующим шагом мы попадаем в один из методов расширения класса LoggerMessage:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-01-30/0f6d1cc7-39b0-4003-9c38-89b01a9a9cc3.png" alt="" /></figure><p>Таким образом, пакет AutoLoggerMessage позволяет перейти на высокопроизводительное логирование без ручного изменения исходного кода.</p><p>Правда, у AutoLoggerMessage есть ограничения:</p><ol><li>Поддерживается с .NET 8.0.8 и выше;</li><li>В ILogger.Log*() может быть не более 6 параметров, иначе параметры передаются как массив object, то есть вызывается упаковка значимых типов.</li></ol><h2>Какой подход к логированию выбрать</h2><p>Подводя итоги, приведем плюсы и минусы каждого подхода.</p><h3>ILogger и методы расширения Log*() класса LoggerExtensions</h3><p>+ Если используете ILogger из коробки, вам не нужно добавлять статический класс с объявлениями методов расширения.</p><p>- Так как дополнительные параметры передаются как object, то выполняется упаковка значимых типов.</p><p>- Разбор шаблонов сообщений выполняется при каждом вызове, что может увеличить нагрузку.</p><p>- Код загрязняется текстом шаблонов сообщений.</p><p>- Поскольку сообщения добавляются по мере необходимости прямо в код классов, то возможно дублирование сообщений.</p><h3>LoggerMessage и строго типизированные методы класса LoggerMessageExtensions</h3><p>+ Не загрязняют код шаблонами сообщений.</p><p>+ Методы расширений имеют строго типизированные параметры — это исключает упаковку значимых типов.</p><p>+ Шаблоны сообщений разбираются один раз во время старта приложения.</p><p>+ Все сообщения хранятся в одном статическом классе, которым проще управлять.</p><p>- Придется добавить статический класс и статический метод для каждого вновь добавляемого сообщения.</p><p>В целом, подход с LoggerMessage имеет больше преимуществ. А с пакетом AutoLoggerMessage можно легко перевести проекты на более производительное логирование.</p><p>Исходный код можно посмотреть на <a href="https://bitbucket.org/alexander-beregovoy/autologging/src/main/">bitbucket</a>. А узнать больше информации про .NET — в нашем <a href="https://t.me/+L9Wi95tNHhs1MTIy">канале</a>.</p><h2>Полезные ссылки</h2><p><a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/logging?tabs=command-line">Logging in C# - .NET | Microsoft Learn</a></p><p><a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/high-performance-logging#log-level-guarded-optimizations">High-performance logging - .NET | Microsoft Learn</a></p><p><a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/logger-message-generator?source=recommendations">Compile-time logging source generation - .NET | Microsoft Learn</a></p><p><a href="https://github.com/stbychkov/AutoLoggerMessage">AutoLoggerMessage</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Разработка игр для начинающих: с чего начать?</title>
      <link>https://tproger.ru/articles/razrabotka-igr-dlya-nachinayushhih--s-chego-nachat-</link>
      <comments>https://tproger.ru/articles/razrabotka-igr-dlya-nachinayushhih--s-chego-nachat-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Ксения Андреева]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/razrabotka-igr-dlya-nachinayushhih--s-chego-nachat-</guid>
      <description><![CDATA[<p>В этой статье рассмотрим основные шаги и этапы в разработке игр, независимо от того, хотите вы создать игру «для себя» для монетизации.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/razrabotka-igr-dlya-nachinayushhih--s-chego-nachat-">Разработка игр для начинающих: с чего начать?</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Unity]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Работа со звуком]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Epic Games]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Бета]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 06 Feb 2025 10:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сегодня создать свою игру может почти каждый, но у новичков в геймдеве неизбежно возникает множество вопросов. Какие инструменты использовать? Какую платформу выбрать? Какие навыки развивать в первую очередь? И, самое главное, как сделать игру, которая действительно понравится многим?</p><p>В этой статье рассмотрим основные шаги и этапы в разработке, независимо от того, хотите вы создать игру «для себя» или  для монетизации.</p><h2>Выбор платформы и инструментов</h2><p>Это первый и, пожалуй, самый важный шаг. Всё зависит от выбранного типа игры, ваших навыков, и платформы, на которой игра будет размещена.</p><ol><li><b>Unity</b> — самый популярный движок, известный своей гибкостью и возможностью создавать как 2D и 3D игры. На Unity можно клипать игры для ПК, консолей и мобильных устройств. Более половины всех игр созданы с этим движком.</li><li><a href="https://www.unrealengine.com">Unreal Engine</a> — движок от Epic Games, известный своей классной графикой и детализацией. Unreal Engine используют для создания ААА-игр за счёт работы на Blueprints. Кстати, многие крупные геймдев-компании предпочитают именно Unreal Engine.</li><li><a href="https://godotengine.org/">Godot</a> — открытый исходный код движка, который набирает популярность благодаря лёгкости освоения. У Godot есть свой язык, GDScript, который даёт возможность перейти к созданию игр без сложных настроек.</li></ol><p><b>Есть два способа создания игр:</b> программирование и визуальное программирование. И если с «обычным» программированием всё понятно, то с помощью Blueprints в Unreal Engine можно создавать сложные логические структуры; а GDScript — более традиционный способ программирования, но с упрощённым синтаксисом.</p><figure><img src="https://media.tproger.ru/user-uploads/106063/2025-01-23/64f771ee-c98f-4b36-9826-abe26749fc87.jpg" alt="" /><figcaption>Игра Into the Stars была создана полностью на базе Unreal Blueprints, вообще без кода.</figcaption></figure><p>Сообщество геймдева, кстати, активно поддерживает разработчиков через форумы (например,<a href="https://gamedev.ru/"> gamedev.ru</a>). Там вы сможете найти советы и истории разработки от профессионалов сферы.</p><h2>Основы игрового дизайна</h2><p><b>Первый шаг — идея. </b>А именно: мозговой штурм, анализ трендов и оценка ваших интересов и навыков. В первую очередь должна быть реализуемой, а не уникальной. Здесь на помощь придут сайты по типу<a href="https://www.gamasutra.com/"> Gamasutra</a> для поиска «вдохновения» и анализа тенденций.</p><p><b>Второй шаг — разработка простого геймплея и механик. </b>Геймплей — буквально сердце вашей игры, именно он определяет, как пользователь будет взаимодействовать с приложением. Основные элементы здесь — определение целей игры, правил и системы вознаграждений. Классно разработанный геймплей будет удерживать игроков.</p><p><b>Третий шаг — тестирование MVP. </b>Это тестирование идей и механик ещё до публикации игры. С помощью простых прототипов вы сможете проверить, как работает геймплей без необходимости полного погружения в разработку.</p><p>Кстати, с помощью Unity или Godot Engine можно быстро создавать базовые версии игр и проводить альфа/бета-тесты с небольшой группой пользователей. Так вы получите фидбек от пользователей и сэкономите время на поиске багов вручную.</p><h2>Базовые навыки в геймдеве</h2><p>Сюда относится <b>программирование, работа с визуалом и звуком, основы физики и анимации.</b></p><p>Без кода игра не будет работать так, как задумывалось (<i>спасибо, кэп</i>). <b>Самыми популярными языками программирования для разработки игр считаются C#, Python и C++.</b></p><p>C# широко используется благодаря движку Unity, который стал де-факто стандартом в геймдеве для инди-разработчиков и больших студий. Простота синтаксиса и широкая поддержка сообщества — вот за что выбирают C#.</p><p>Python обычно не используется для больших коммерческих проектов из-за ограничений по производительности. Но всё-таки он идеально подходит для обучения и создания простых прототипов. Всё благодаря его (относительной) лёгкости в теории и на практике.</p><p>C++ — ещё один популярный язык в индустрии геймдева, особенно когда речь идёт о проектах, которые требуют высокой производительности. Используется на базе Unreal Engine.</p><figure><img src="https://media.tproger.ru/user-uploads/106063/2025-01-23/69ca0d41-1a11-485c-8491-c0ed01d415ee.png" alt="" /></figure><p><b>Графика и звук очень важны в создании «атмосферности».</b> Именно с помощью них пользователи полностью погружаются в процесс игры.</p><ul><li>Начните с освоения базовых инструментов работы с графикой по типу Фотошопа или GIMP для 2D-графики и Blender или Maya для 3D-моделирования. Не забывайте про основы текстурирования и освещения — так сцены будут более реалистичными.</li><li>Работа со звуком — создание и поиск подходящей музыки и звуковых эффектов. С этим помогут программы по типу Audacity или FL Studio, а ещё сайт <a href="https://www.looperman.com/">Looperman</a>, где можно найти бесплатные сэмплы. Звук существенно влияет на восприятие игры пользователями — от тревожной музыки до ярких звуков во время победы.</li></ul><p><b>Начните изучение физики в играх с простых законов Ньютона</b>, чтобы понять, как объекты должны двигаться в игре.</p><figure><img src="https://media.tproger.ru/user-uploads/106063/2025-01-23/63e793f2-7ede-49c1-b4a3-8cab7af61b54.jpeg" alt="" /></figure><p><b>Анимация тоже важна.</b> Здесь имеется в виду движение персонажей и объектов в самой игре. С этим поможет Spine для 2D-анимации и Adobe After Effects.</p><h2>Что ещё важно</h2><p><b>На первых порах важно выбрать простую и реализуемую концепцию без сложных механик. </b>Попробуйте начать с разработки платформеров и пазлов, они отлично подходят для новичков. Так вы сможете сконцентрироваться на базовых механиках игрового процесса без сложной графики.</p><p>Платформеры хороши своей лёгкостью в реализации базовых механик прыжка и бега. К платформам можно отнести всем известный Super Mario или Terraria. Начать можно с создания простых уровней и изучения основ физики.</p><figure><img src="https://media.tproger.ru/user-uploads/106063/2025-01-23/eea7e6be-bdc1-4b11-8cd6-42e069ffd326.jpg" alt="" /><figcaption>Игра Life Goes On: Done to Death</figcaption></figure><p>А создание игр в жанре пазлов и головоломок помогут разработчикам сосредоточиться на логических задачах и интерактиве игры. А после публикации игры вы получите первые отзывы и поймёте, чего реально хочет аудитория.</p><figure><img src="https://media.tproger.ru/user-uploads/106063/2025-01-23/87008ac5-0053-4d66-8bea-ac8d9cbe66e7.jpg" alt="" /><figcaption>Сложная в реализации, но всё-таки головоломка и просто классная игра — Portal 2.</figcaption></figure><p><b>Прототипирование — критически важный этап,</b> на котором вы проверяете ваши идеи на жизнеспособность и получаете первые результаты:</p><ol><li><b>Определите ключевые элементы вашей игры.</b> Например, если вы делаете платформер, сосредоточьтесь на механике прыжков и взаимодействии с препятствиями.</li><li><b>Используйте Photoshop или GIMP для создания спрайтов </b>вашего персонажа и окружения.</li><li><b>Для программирования выбирайте игровые движки: Unity, Unreal Engine или Godot.</b> У каждого из этих движков большой набор инструментов для начинающих. А в интернете можно найти подробную документацию и руководства по созданию игры.</li><li><b>Создайте тестовый игровой уровень, </b>на котором вы и протестируете основные механики.</li></ol><p><b>Далее наступает время тестирования.</b> Это может быть либо самостоятельное тестирование, либо альфа/бета-тесты с привлечением небольшого пула игроков — так вы буквально сможете увидеть игру глазами ваших пользователя. А они укажут на элементы в игре, которые вы могли не заметить во время разработки.</p><p>После того, как получили первые отзывы на этапе тестов, <b>важно доработать игру:</b></p><ul><li>Исправьте выявленные ошибки;</li><li>Усильте графику, анимацию и звуковое сопровождение;</li><li>Добавьте новые уровни или усложните уже существующие.</li></ul><h2>Рекомендации</h2><p>Геймджемы и хакатоны — классная возможность прокачать свои геймдев-навыки в короткие сроки. На таких мероприятиях участники объединяются в команды и за короткое время создают игру на заданную тему. Так вы не только прокачаете навык быстрого и эффективного прототипирования, но и сможете завести полезные знакомства.</p><p>Среди самых известных геймджемов — Ludum Dare, который проводится с 2002 года. Многие игры, впервые созданные на LD, далее превращались в полноценные коммерческие проекты: например, игра <a href="https://partnerkin.com/blog/kejsy/history-of-two-developers">Druid</a>, <a href="https://stopgame.ru/game/broforce">Broforce</a>, <a href="https://www.pony-island.com/">Pony Island</a> (от создателей <a href="https://www.inscryption.com/">Inscription</a>).</p><p>А с помощью открытого исходного кода вы, как создатель игры, сможете изучить лучшие практики от опытных разработчиков и «забрать» их себе. На GitHub можно запросто найти много игр с открытым исходным кодом: от простых 2D-головоломок до сложных 3D-приключений.</p><p>Не забывайте и о постоянном самообразовании. В этом вам помогут специализированные курсы как на русском языке, так и на английском. С помощью них вы сможете набить руку и лучше понимать, какие практики стоит добавлять в игру, а какие нет.</p><p>И помните: многие игры создавались в одиночку. И при этом достигали большого успеха: Sally Face, Plague Inc, Papers, Please. И, конечно же, любимый многими разрабами Stardew Valley :)</p><p>Ручки чешутся, чтобы создать игру, а мозг пока не совсем готов? Заходите в наш <a href="https://t.me/+JR4NEBk3UWFiOTYy">тг по геймдеву</a>, обязательно поможем!</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>ТОП-40 курсов по языкам программирования C++ и C#, включая бесплатное онлайн-обучение</title>
      <link>https://tproger.ru/articles/kursy-c---i-c-</link>
      <comments>https://tproger.ru/articles/kursy-c---i-c-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анастасия Шишкина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kursy-c---i-c-</guid>
      <description><![CDATA[<p>Лучшие онлайн-курсы C++ и C#. Список школ, осуществляющих обучение на бесплатной или платной основе, а также цены на курсы по языкам программирования C++ и C#</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kursy-c---i-c-">ТОП-40 курсов по языкам программирования C++ и C#, включая бесплатное онлайн-обучение</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 23 Dec 2024 17:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Освоить популярные языки программирования из семейства Си вы можете на курсах C++ и C#. Хотя эти языки и имеют общего предка, у них есть свои особенности, от которых зависит их область применения. C++ имеет автоматическое управление памятью и используется для больших программных продуктов, например, для Diablo и WoW. Язык C# разработали в Microsoft как ответ Java и применяют в разработке игр на Unity, серверных программ на Windows, а также кроссплатформенных приложений.</p><p><i>Вместе со специалистами <a href="https://kursfinder.ru/">Kursfinder</a> я рассмотрела около 80 программ изучения C++ и C# и составила для вас подборку из 31 курса. Сюда входят по пять топовых программ по каждому языку, пять дополнительных по C# и пять — по C++, а также бесплатные онлайн-занятия и видеоуроки. Еще больше курсов по <a href="https://kursfinder.ru/cplusplus/">C++</a> и <a href="https://kursfinder.ru/csharp/">С#</a> — в нашем каталоге.   </i></p><h2>ТОП-5 лучших курсов по C++</h2><ol><li><a href="https://experts2.ru/fewCSy?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=1">Разработчик на C++</a> от «Нетологии» — программа обучения с выбором специализации.</li><li><a href="https://experts2.ru/bEnriA?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=2">C++ для робототехников</a> от Skillbox — прикладной экспресс-курс для робототехников.</li><li><a href="https://experts2.ru/TSjzcb?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=3">Профессия «Разработчик на C++»</a> от Skillfactory — три тарифа на выбор, в том числе, с возможностью индивидуальной работы над проектом с ментором.</li><li><a href="https://experts2.ru/qcyHJn?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=4">Разработчик C++</a> от «Яндекс Практикума» — постоянные вебинары и помощь с трудоустройством.</li><li><a href="https://experts2.ru/AlsOud?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=5">C++ Developer</a> от OTUS — углубленное обучение с нуля до Middle.</li></ol><h2>ТОП-5 лучших курсов по C#</h2><ol><li><a href="https://cake.courselink.ru/go/b67c2bd03176c821?dl=https://skillfactory.ru/c-sharp-razrabotchik&amp;">Профессия C#-разработчик</a> от Skillfactory — объемный курс с возможностью обучаться индивидуально с наставником.</li><li><a href="https://experts2.ru/xgbJIu?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=7">C# ASP.NET Core разработчик</a> от OTUS — углубленная программа для разработчиков на C# с опытом от двух лет.</li><li><a href="https://experts2.ru/oExPih?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=8">Курс C# разработчик</a> от itProger — обширный набор практических заданий.</li><li><a href="https://experts2.ru/CwJzof?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=9">C# для разработки игр</a> от XYZ School — узкоспециализированный курс для разработки игр на Unity.</li><li><a href="https://experts2.ru/gEWfxj?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=10">Изучение C# от новичка до профи</a> от itProger — программа обучения для быстрого освоения основ.</li></ol><p>Я разделила рейтинг на две части, чтобы вам было удобнее подбирать программу по нужному языку программирования. В ТОП вошли программы, рассчитаные на обучение без опыта в программировании, но их могут пройти и разработчики, желающие перейти на новый язык.</p><h2>Онлайн-курсы по программированию на C++</h2><p><b>1. </b><a href="https://experts2.ru/fewCSy?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=1">Разработчик на C++</a> | <b>Нетология</b></p><p><b><i>🎁Используйте эксклюзивный промокод «kursfinder», чтобы получить скидку 7% на курсы школы.</i></b></p><p>Пройти курс по C ++ можно в одном из двух форматов. Базовая программа предполагает изучение особенностей программирования на этом языке, углубленная — выбор специализации. В любом случае большая часть нагрузки приходится на выполнение практических задач, которые помогут на будущей работе. Регулярное общение с экспертами на вебинарах и обратная связь по домашним заданиям позволят лучше усвоить материалы. Вы не только отточите hard skills программиста, но и разовьете soft skills. Есть возможность стажировки и трудоустройства.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-12-19/cbad0395-070a-450c-9bf1-d39af01676b1.png" alt="" /></figure><ul><li>Стоимость: 133 000 рублей или от 3 889 рублей в месяц в рассрочку.</li><li>Длительность: от 12 месяцев (в зависимости от выбранного тарифа).</li><li>Формат обучения: теоретические материалы в видеоформате, вебинары, практика, тренажеры и кейсы.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет: </b>новичкам в IT, которые никогда не занимались разработкой.</p><p><b>Преимущества:</b></p><ul><li>программа трудоустройства включена;</li><li>15 проектов для портфолио</li><li>кейсы от работодателей;</li><li>программу регулярно обновляют;</li><li>80% практики;</li><li>возможность выбора специализации (для расширенной траектории);</li><li>вебинары с экспертами и обратная связь;</li><li>есть мобильное приложение для учебы;</li><li>2 траектории на выбор.</li></ul><p><b>Недостатки:</b></p><ul><li>группы набирают редко;</li><li>нет информации о том, сколько стоит расширенная траектория.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы программирования на C++.</li><li>Git.</li><li>Алгоритмы и структуры данных.</li><li>Базы данных.</li><li>Многопоточное и асинхронное программирование.</li><li>Проектирование.</li><li>Темы специализации.</li></ul><p><a href="https://experts2.ru/fewCSy?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=1">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>2. </b><a href="https://experts2.ru/bEnriA?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=2">C++ для робототехников</a> |<b> Skillbox</b></p><p>Прикладной интерактивный курс C ++, рассчитанный на робототехников. С его помощью вы научитесь писать программы для роботов. Примечательно, что в ходе обучения вы сможете тестировать код робота с помощью симулятора. Поймете, как писать и оптимизировать код, создавать графический интерфейс. Освоите фреймворки Arduino и Qt.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-12-19/ce26499c-8b49-4865-9382-82a326a5a7b9.png" alt="" /></figure><ul><li>Стоимость: 35 552 рубля или от 5 925 рублей в месяц в рассрочку.</li><li>Длительность: 1 месяц.</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>Основы C++.</li><li>Массивы.</li><li>Функции.</li><li>ООП.</li><li>Операторы.</li><li>Библиотеки и фреймворки.</li><li>Pybind11.</li></ul><p><a href="https://experts2.ru/bEnriA?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=2">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>3. </b><a href="https://experts2.ru/TSjzcb?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=3">Профессия «Разработчик на C++»</a> | <b>Skillfactory </b></p><p>Онлайн-курс по C ++ с индивидуальным обучением, доступным в тарифе VIP (в него включены персональные консультации и создание проекта с ментором). Независимо от выбранного тарифа, вы сможете общаться с экспертами, посещать интерактивные вебинары. В программу включена помощь с трудоустройством, а также бонусные модули для развития софт-скилов.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-12-19/dc4b8ef1-1de0-413a-a142-3f1a3005943f.png" alt="" /></figure><ul><li>Стоимость: от 3 724 рублей в месяц в рассрочку.</li><li>Длительность: 11 месяцев.</li><li>Формат обучения: зависит от выбранного тарифа.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет: </b>новичкам без опыта в программировании.</p><p><b>Преимущества:</b></p><ul><li>помощь Центра карьеры;</li><li>3 тарифа на выбор;</li><li>много практики;</li><li>проектная работа;</li><li>углубленная программа.</li></ul><p><b>Недостатки:</b></p><ul><li>высокая стоимость VIP-тарифа;</li><li>преимущественно самостоятельное обучение в базовом тарифе.</li></ul><p><b>Программа обучения:</b></p><ul><li>Конструкции языка.</li><li>Алгоритмы и структуры данных.</li><li>Linux.</li><li>Параллельное программирование.</li><li>Базы данных.</li><li>Тестирование.</li><li>Современные стандарты программирования.</li><li>Qt.</li></ul><p><a href="https://experts2.ru/TSjzcb?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=3">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>4. </b><a href="https://experts2.ru/qcyHJn?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=4">Разработчик C++</a> | <b>Яндекс Практикум</b></p><p>Программа этого курса C ++ с нуля позволит вам быстро освоить данный язык программирования за счет больших объемов практики и реального опыта работы над проектами. Вы освоите не только особенности программирования на С++, но и поработаете с прикладными решениями, которые необходимы, например, для Git, IDE, компиляторов. Все желающие могут пройти первый десятичасовой модуль бесплатно, чтобы оценить особенности обучения.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-12-19/0cf7bb1e-cff3-47c8-b416-fa7dc8b5a025.png" alt="" /></figure><ul><li>Стоимость: от 135 000 рублей или от 16 500 рублей в месяц в рассрочку.</li><li>Длительность: 9 месяцев.</li><li>Формат обучения: вебинары, практические задания для отработки навыков.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет:</b> новичкам, которые никогда не занимались программированием.</p><p><b>Преимущества:</b></p><ul><li>предусмотрен карьерный трек и помощь с трудоустройством (7 месяцев после обучения);</li><li>2 тарифа на выбор;</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>Основы C++.</li><li>Оптимизация.</li><li>Качество кода.</li><li>Сложные программы.</li><li>Модули расширенного курса.</li></ul><p><a href="https://experts2.ru/qcyHJn?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=4">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>5.</b> <a href="https://experts2.ru/AlsOud?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=5">C++ Developer</a> | <b>OTUS </b></p><p>Обширный курс обучения C ++ с нуля, который разделен на две ступени. Сначала вы погрузитесь в основы программирования на этом языке, а потом углубитесь в важные темы, расширите набор навыков и пул инструментов, чтобы достичь уровня Middle-специалиста. Вся программа построена на принципах постоянного взаимодействия с экспертами. Уроки проводятся в формате вебинаров, на которых вам ответят на возникшие вопросы, дадут фидбэк по сделанным домашним работам.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-12-19/f7b2cea2-51a4-4240-b3b2-6bd0b2282171.png" alt="" /></figure><ul><li>Стоимость: от 149 600 рублей или в рассрочку от 14 960 рублей в месяц.</li><li>Длительность: 10 месяцев.</li><li>Формат обучения: вебинары, практические и проектные работы.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет: </b>тем, кто хочет научиться программировать с нуля, тем, кто еще не определился с языком.</p><p><b>Преимущества:</b></p><ul><li>изучение C++ с нуля до Middle+;</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>Junior.</li><li>Middle.</li></ul><p><a href="https://experts2.ru/AlsOud?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=5">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><h2>Онлайн-курсы по программированию на C#</h2><p><b>1.</b> <a href="https://experts2.ru/kSOqys?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=6">Профессия C#-разработчик</a> | <b>Skillfactory</b></p><p>Объемная программа этого курса по основам C# поможет вам научиться создавать сайты, мобильные и десктопные игры и приложения, например, для «Яндекса», «Сбера» или «Газпрома». Для обучения не потребуются специальные технические знания и навыки — можно начать с нуля. Также курс подойдет разработчикам смежных направлений, желающих разбираться в тонкостях C#. В качестве итогового проекта вас ожидает создание собственного блога и многоуровневого приложения.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-12-19/162ffc77-4d47-495e-aaed-fa578e5efc4d.png" alt="" /></figure><ul><li>Стоимость: от 3 560 рублей в месяц.</li><li>Длительность: 1 год.</li><li>Формат обучения: зависит от тарифа.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет: </b>новичкам, а также разработчикам на других стеках.</p><p><b>Преимущества:</b></p><ul><li>итоговый проект в формате виртуальной стажировки;</li><li>бонусный модуль по основам DevOps;</li><li>объемный итоговый проект;</li><li>обучение на 80% состоит из практики;</li><li>3 тарифа на выбор.</li><li>оперативная поддержка;</li><li>подготовка к трудоустройству.</li></ul><p><b>Недостатки:</b></p><ul><li>дорогой VIP-тариф;</li><li>придется учиться практически самостоятельно в Базовом тарифе.</li></ul><p><b>Программа обучения:</b></p><ul><li>Программирование.</li><li>Backend.</li><li>Веб-разработка.</li><li>Десктоп и мобильная разработка.</li></ul><p><a href="https://experts2.ru/kSOqys?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=6">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>2.</b><a href="https://experts2.ru/xgbJIu?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=7"> C# ASP.NET Core разработчик</a> | <b>OTUS </b></p><p>Углубленная программа позволит вам расширить навыки создания веб-приложений и стать Fullstack-специалистом. Для поступления на курс требуется пройти вступительное тестирование. Программа построена таким образом, что вы в относительно короткие сроки сможете значительно расширить пул используемых инструментов. Благодаря постоянному взаимодействию с экспертами вы всегда сможете получить ответ на возникший вопрос.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-12-19/3c0dd11e-c17a-49de-9c9f-74c80135b50c.png" alt="" /></figure><ul><li>Стоимость: 116 450 рублей или 11 645 рублей в месяц в рассрочку.</li><li>Длительность: 6 месяцев.</li><li>Формат обучения: вебинары и практические задания, работа над проектом.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет: </b>разработчикам на C# с опытом от двух лет.</p><p><b>Преимущества:</b></p><ul><li>практика в scrum-команде;</li><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>ASP.NET и WebAPI.</li><li>Облачные приложения.</li><li>Фронтенд.</li><li>Микросервисная архитектура.</li><li>API.</li></ul><p><a href="https://experts2.ru/xgbJIu?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=7">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>3.</b> <a href="https://experts2.ru/oExPih?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=8">Курс C# разработчик</a> |<b> itProger </b></p><p>Недорогой курс программирования на C #, в котором содержится большое количество тестовых материалов и практических работ. Вы сможете не только осваивать тот язык, но и проходить все курсы на платформе по подписке. В зависимости от выбранного формата обучения меняются объемы практических и тестовых заданий. Поэтому оптимальным вариантом будет покупка тарифа «Все включено», так как разница в стоимости небольшая.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-12-19/72570975-d20b-48f2-af12-ff645c886118.png" alt="" /></figure><ul><li>Стоимость: от 11 400 рублей.</li><li>Длительность: 2–3 месяца.</li><li>Формат обучения: лекции, домашние задания, тесты.</li><li>Сертификат: есть (кроме тарифа «Мини»).</li></ul><p><b>Кому подойдет: </b>новичкам без опыта в разработке.</p><p><b>Преимущества:</b></p><ul><li>недорогое обучение;</li><li>проектные работы;</li><li>подписка на сайт за покупку курса (срок зависит от тарифа);</li><li>консультации с лектором (в тарифе «Все включено»);</li><li>материалы ко всем урокам.</li></ul><p><b>Недостатки:</b></p><ul><li>редкий набор групп;</li><li>ограниченное количество мест;</li><li>достаточно сжатый курс.</li></ul><p><b>Программа обучения:</b></p><ul><li>C#.</li><li>ООП.</li><li>Контроль версий.</li><li>Тестирование.</li><li>Базы данных.</li><li>Фреймворки.</li></ul><p><a href="https://experts2.ru/oExPih?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=8">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>4.</b> <a href="https://experts2.ru/CwJzof?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=9">C# для разработки игр</a> | <b>XYZ School</b></p><p><b><i>🎁Используйте эксклюзивный промокод «ADVXYZ», чтобы получить скидку 5% на курсы школы.</i></b></p><p>Онлайн-курс, который позволит вам не только освоить принципы программирования на C#, но и научиться создавать игры с помощью движка Unity. Эксперты-практики будут проверять ваши домашние задания с подробной обратной связью, чтобы вы могли улучшить код и результаты работы в целом. Вы сможете собрать портфолио из нескольких игр, а Центр карьеры поможет вам с трудоустройством.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-12-19/e9584fe5-b692-4e45-a1ed-cbf70e60f494.png" alt="" /></figure><ul><li>Стоимость: 60 400 рублей или 5 033 рубля в месяц в рассрочку.</li><li>Длительность: 4 месяца.</li><li>Формат обучения: теория в формате видеоуроков, практическая работа над проектами.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет: </b>новичкам, которым хочется не только освоить программирование. Но и начать делать игры.</p><p><b>Преимущества:</b></p><ul><li>индивидуальная проверка домашних заданий;</li><li>помощь карьерного центра;</li><li>возможность заморозить обучение при необходимости;</li><li>общение с однокурсниками и экспертами в закрытом чате;</li><li>оперативная поддержка.</li></ul><p><b>Недостатки:</b></p><ul><li>достаточно сжатый курс;</li><li>помощь с трудоустройством носит преимущественно консультационный характер.</li></ul><p><b>Программа обучения:</b></p><ul><li>Си шарп в Юнити.</li><li>ООП.</li><li>Организация кода.</li><li>Архитектурный подход.</li></ul><p><a href="https://experts2.ru/CwJzof?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=9">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>5.</b> <a href="https://experts2.ru/gEWfxj?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=10">Изучение C# от новичка до профи</a> | <b>itProger </b></p><p>Недорогой онлайн-курс, который позволит вам понять принципы программирования на C# и работы с базами данных. В программу обучения включено 30 видеоуроков и более 200 практических заданий. Курс доступен в 4 разных тарифах, но оптимальным вариантом становится максимальный благодаря небольшой разнице в стоимости. При этом объемы предоставляемых материалов сильно различаются.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-12-19/1bbbd30f-0c12-45b8-bc48-aede27bb12ea.png" alt="" /></figure><ul><li>Стоимость: от 1 700 рублей.</li><li>Длительность: 30 уроков.</li><li>Формат обучения: теория в видеоформате, практическая отработка навыков.</li><li>Сертификат: не во всех тарифах</li></ul><p><b>Кому подойдет:</b> новичкам, которые хотят освоить базу по C#.</p><p><b>Преимущества:</b></p><ul><li>4 тарифа на выбор;</li><li>подписка на сайт сроком до 3 месяцев (в зависимости от выбранного тарифа);</li><li>недорогое обучение;</li><li>без ограничений по времени прохождения курса;</li><li>доступны консультации экспертов (в тарифах «Наилучший» и «Все включено»);</li></ul><p><b>Недостатки:</b></p><ul><li>сертификат только в тарифах «Наилучший» и «Все включено»;</li><li>практические задания только в тарифе «Все включено».</li></ul><p><b>Программа обучения:</b></p><ul><li>C#.</li><li>Базы данных.</li><li>WinForms.</li></ul><p><a href="https://experts2.ru/gEWfxj?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=10">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><h2>Еще 5 курсов по программированию на C++</h2><p>Предлагаю дополнительные программы обучения по С++, которые не попали в топ. Тем не менее они отлично подойдут как для освоения основ, так и для углубленного изучения этого языка программирования.</p><ul><li><a href="https://experts2.ru/dAqRjp?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">C++ для разработки игр</a> от XYZ School — в отличие от курса по C#, эта программа рассчитана на обучение разработке игр на Unreal Engine. Данный движок используется ААА проектами, что позволит вам найти интересную и в перспективе высокооплачиваемую работу. В ходе обучения вы не только освоите необходимую базу языка C++, но и поймете, как использовать движок в разработке видеоигр под разные устройства.</li><li><a href="https://experts2.ru/pwCxZy?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">C++ Developer. Базовый курс</a> от OTUS — базовая программа, которая может стать первым шагом на пути к IT. Слушатели смогут освоить основы программирования, разработки. Вся теория подкрепляется практикой.</li><li><a href="https://experts2.ru/rtZbVp?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Профессия «C++ разработчик»</a> от itProger — программа, созданная для изучения основ языка программирования C++. Для слушателей подготовлены лекции, разбитые на подтемы, такой формат делает обучение проще и эффективнее.</li><li><a href="https://experts2.ru/fqQSuk?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">C++ Developer. Углубленный уровень</a> от OTUS — онлайн-курс, разработанный под нужды профессиональных разработчиков. Перед тем как записаться на обучение, у слушателей есть возможность пройти вступительное тестирование и определить уровень своей подготовки. Программа сочетает насыщенную теорию и практику.</li><li><a href="https://experts2.ru/rtZbVp?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">C++</a> от itProger — курс для новичков, в котором делается большой упор на практический формат. Начиная с нуля, слушатели смогут узнать, как писать программы и создавать проекты для Windows.</li></ul><h2>Еще 5 курсов по разработке на C#</h2><ul><li><a href="https://experts2.ru/vVajHu?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Основы .NET-разработки и языка C#</a> от IBS Training Center — базовая программа для студентов, желающих освоить C# и получить навыки .NET-разработки. По окончании обучения слушатели получают диплом о повышении квалификации.</li><li><a href="https://experts2.ru/sVmdnI?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Курс 20483: Программирование на C# </a>от «Эврики» — программа, доступная как в очном, так и в дистанционном формате, направлена на опытных программистов, желающих освоить C#. Слушателям предоставляются все необходимые материалы для обучения.</li><li><a href="https://experts2.ru/PurbHl?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Курс Программирование на C# — от новичка до специалиста</a> от beONmax.com — курс, включающий в себя более 100 видеоуроков, а также практические задания для отработки навыков. Обучаясь на платформе, слушатели смогут получить навык написания чистого кода. Курс универсален: он походит как для новичков в IT-сфере, так и для программистов, желающих познакомиться с новым для себя языком.</li><li><a href="https://experts2.ru/sImuqQ?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Курс Программирование на C#: от новичка до специалиста</a> от «Знанио» — программа, с которой слушатели могут получать новые навыки в комфортном темпе. Курс ориентирован на новичков, которые хотят познакомиться с основами программирования на C#.</li><li><a href="https://experts2.ru/nQtapA?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Backend-разработка на языке программирования C#</a> от ИТМО — программа, направленная на профпереподготовку слушателей. Одним из основных преимуществ обучения на платформе является то, что изучать темы можно в комфортном темпе. Курс состоит из 4 модулей, каждый из которых включает в себя много практики. Начиная с самых основ, слушатели смогут познакомиться с программированием на C#, углубиться в систему Git и др.</li></ul><h2>Бесплатные курсы по C++</h2><p>Получить базовые навыки, необходимые в разработке на C++ и C#, также можно на бесплатных курсах. В подборках представлены программы в свободном доступе, подходящие для знакомства с профессией.</p><p><b>1.</b> <a href="https://experts2.ru/gNntRq?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Как стать разработчиком на С++ с нуля</a> — <b>Нетология</b></p><p>Бесплатное занятие, в котором делается упор на профориентацию. Слушатели смогут узнать об особенностях профессии разработчика на С++. Также эксперты расскажут, что необходимо для успешного старта.</p><p><b>Главное о курсе: </b></p><ul><li>большое занятие;</li><li>обучение для новичков.</li></ul><p><b>2.</b> <a href="https://experts2.ru/mtaXzK?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Введение в C++: с нуля до первой программы за 5 дней</a> — <b>Skillbox</b></p><p>Мини-курс, разработанный для новичков. Обучаясь на платформе, студенты получают не только доступ к видеоурокам, но и необходимые методические материалы. Кроме того, курс дает возможность поработать над проектом для собственного портфолио.</p><p><b>Главное о курсе: </b></p><ul><li>материалы можно изучать в комфортном темпе;</li><li>сочетание теории и практики.</li></ul><p><b>3. </b><a href="https://experts2.ru/LuetRn?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Научись программировать на C++</a> — <b>Михаил Русаков</b></p><p>Авторский курс, включающий в себя 25 занятий. Программа ориентирована на новичков, она может стать базой для дальнейшего погружения в программирование. Помимо структурированных видеоуроков, слушатели получают домашние задания для закрепления.</p><p><b>Главное о курсе: </b></p><ul><li>студенты получают поддержку от автора;</li><li>ориентирован на новичков.</li></ul><p><b>4. </b><a href="https://experts2.ru/xACwjf?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Программирование на языке C++</a> — <b>Stepik</b></p><p>Курс программирования на языке C ++, ориентированная на слушателей, знакомых с синтаксисом хотя бы одного «стандартного» языка программирования. Начиная с введения слушатели смогут узнать, как работают программы, а также смогут углубиться в базовые понятия.</p><p><b>Главное о курсе:  </b></p><ul><li>предусмотрена выдача именного сертификата;</li><li>есть практические задачи для отработки.</li></ul><p><b>5. </b><a href="https://experts2.ru/xvbMWy?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Основы C++. Программирование для начинающих</a> — <b>Академия IT</b></p><p>Программа, включающая в себя 200 занятий. Курс универсален: он подходит как для новичков, так и для практикующих программистов, желающих восполнить пробелы в знаниях. Преподаватель рассмотрит такие темы, как типы данных, переменные, циклы и др. Помимо насыщенной теории, для слушателей подготовлены домашние задания, с ними можно более эффективно отработать изученный материал.</p><p><b>Главное о курсе: </b></p><ul><li>первые занятия подборки доступны в демодоступе;</li><li>насыщенная программа.</li></ul><h2>Бесплатные курсы по C#</h2><p><b>1. </b><a href="https://experts2.ru/qyIQku?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Бесплатный курс по C# для начинающих</a> — <b>Code Basics </b></p><p>Программа, в которой сочетается теория в текстовом формате и практика в браузере. Курс подходит для изучения основ. Материал структурирован и обеспечивает плавное, постепенное погружение. Для обучения на платформе требуется регистрация, однако первые занятия доступны в деморежиме.</p><p><b>Главное о курсе: </b></p><ul><li>сочетание теоретического и практического похода к обучению;</li><li>ориентирован на новичков.</li></ul><p><b>2.</b> <a href="https://experts2.ru/ecfaID?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">C# уроки для начинающих. С нуля!</a> — <b>Академия IT</b></p><p>Подборка авторских видеоуроков на образовательной платформе. Для слушателей не нужна предварительная подготовка, поэтому приступать к обучению можно с любым уровнем подготовки. Вместе с преподавателем слушатели смогут углубиться в типы данных, числа, массивы и другие темы.</p><p><b>Главное о курсе: </b></p><ul><li>требуется регистрация на платформе;</li><li>обучение, созданное для новичков.</li></ul><p><b>3.</b> <a href="https://experts2.ru/shaEjY?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">C# Тренажер</a> — <b>Stepik</b></p><p>Программа представляет собой тренажер для программистов с любым уровнем подготовки. Тренажер помогает более детально разобрать основы типов, переменных, массивов и др. Кроме того, обучение на платформе позволяет получить навык эффективного решения задач с использованием C#. Также отработка навыков на задачах сможет стать хорошей подготовкой к собеседованиям.</p><p><b>Главное о курсе: </b></p><ul><li>большой сборник интерактивных задач;</li><li>теоретических материалов не предусмотрено.</li></ul><p><b>4. </b><a href="https://experts2.ru/vgPyAa?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Программирование C# для начинающих</a> — <b>Михаил Русаков</b></p><p>Авторский курс, состоящий из 16 занятий. Все необходимые материалы высылаются слушателю, что открывает к ним доступ на неограниченное время. Курс включает в себя не только видеоуроки, но и практику, позволяющую отработать изученный материал. Обучение может послужить основательной базой для дальнейшего изучения языка программирования.</p><p><b>Главное о курсе: </b></p><ul><li>сочетание теории и практики;</li><li>слушатели получают бонусы от автора.</li></ul><p><b>5. </b><a href="https://experts2.ru/zubaUT?sub1=tproger-kf&amp;sub2=c#-i-c++-kursy&amp;sub4=netop">Разработка инженерных приложений в среде Visual Studio (C#)</a> — <b>Stepik</b></p><p>Программа, разработанная преподавателями НИУ «МЭИ». В курсе по изучению C # рассматриваются особенности создания ПО для инженерных расчетов. Программа ориентирована на новичков в программировании, поэтому изучения языка начинается с самых основ. Для подготовки материалов использовались только актуальные данные. Курс дает возможность не только изучить теорию, но и отработать полученные навыки на практике.</p><p><b>Главное о курсе: </b></p><ul><li>в программу включены тесты и интерактивные задачи для отработки;</li><li>упор на работу с инженерными ПО.</li></ul><h2>Видеоуроки по разработке на C++</h2><ol><li><a href="https://www.youtube.com/playlist?list=PLfnFOImnyWRWmpS_2emHHAuGNz3YAi8iM">Специализация C++ Developer</a> от OTUS — подборка демозанятий по C++ по разным направлениям и для слушателей с разным уровнем подготовки. Изучая материалы, можно узнать больше о настройках, тестах, использовании возможностей ИИ и др.</li><li><a href="https://www.youtube.com/watch?v=5l9nxwh5Wiw">Изучение C++ для начинающих</a> от itProger — видеокурс, подготовленный преподавателями одной из крупнейших российских школ программирования. Программа разработана специально для новичков, предусмотрена и отработка заданий на практике.</li><li><a href="https://live.skillbox.ru/webinars/code/server-na-c-podvodim-itogi101222/">Сервер на C++: подводим итоги</a> от Skillbox — программа, представляющая собой вебинар с экспертами в записи. Занятия универсальны: они подойдут как новичкам, так и практикующим программистам. Спикер расскажет, как улучшить серверный код, работать с облачным хостингом и др.</li><li><a href="https://www.youtube.com/playlist?list=PLSFKaqzwymbT14SCPfcJLYeGRghGTOOTy">Видеоуроки по программированию на C++ для начинающих</a> от Next Pro — программа, включающая в себя насыщенные и объемные видеоуроки по программированию. Начиная с введения. Слушатели узнают про переменные, циклы, типы данных и др.</li><li><a href="https://youtube.com/playlist?list=PLqs2IDfjfprGsEzCqRAHdaqXb_xlTrdPM&amp;si=_jQTAmMIZRf2Ng3A">C++ Продвинутый. Уроки</a> от Efremov Engineer — продвинутый видеокурс по C++. В рамках обучения слушатели узнают, как работать с битовыми полями, переменными и др. Материал насыщенный и структурированный, что облегчает процесс изучения.</li></ol><h2>Видеоуроки по программированию на C#</h2><ol><li><a href="https://youtube.com/playlist?list=PLDyJYA6aTY1laYPs6iS-SrYl9DZLVCUKr&amp;si=K2B5xbleLckrJ6OE">Уроки C# для начинающих</a> от Школы itProger / Программирование — подборка видеоуроков, созданная для знакомства с основными концепциями языка. Самостоятельно изучая материал, слушатели смогут получить навык работы над небольшими проектами.</li><li><a href="https://youtube.com/playlist?list=PLQOaTSbfxUtD6kMmAYc8Fooqya3pjLs1N&amp;si=cMLcNu4RLJVCpFBh">C# Уроки</a> от #SimpleCode — программа, ориентированная на новичков. Изучая небольшие, но в то же время насыщенные и информативные видеоуроки, слушатели смогут познакомиться с языком C#. Преподаватель поговорит о типах данных, переменных и др.</li><li><a href="https://youtu.be/o28Nx9DAdaU?si=Bz8sJZGESvZN0LZL">C# с нуля до уровня Senior от канала</a> «Путь к Senior-у» — подборка авторских видеоуроков, позволяющих познакомиться с C#. Программа подходит для слушателей с любым уровнем подготовки. Материал насыщенный и структурированный. Преподаватель рассмотрит такие темы, как операторы, циклы, массивы и др. Видеоуроки небольшие, в них нет «воды».</li><li><a href="https://youtu.be/w8rRhAup4kg?si=cZZZmgsE1bhNMhH2">C# 2025 с нуля до профи</a> от Романа Сакутина — данный видеоматериал представляет собой целый курс в одном большом ролике. Для удобства изучения есть разбивка на тайм-коды. Программа подходит для углубленного обучения языку C #. Преподаватель рассмотрит такие темы, как операторы, циклы и др. Кроме того, программа дает возможность на практике рассмотреть процесс создания различных типов игр.</li><li><a href="https://youtu.be/R-QyiX4nc6E?si=C54b92MJKRXFW3TH">Создание игр Unity 3D | Cтарт программирования на C#</a> от канала «Пиксель — школа программирования для детей» — небольшое занятие, в рамках которого изучается движок Unity 3D. C# в данном случае используется для написания скриптов, поэтому он также изучается. Дополнительно на канале можно найти и другие уроки по программированию для самых юных слушателей.</li></ol><h2>FAQ. Часто задаваемые вопросы</h2><h3>1. Как долго учить C++/ C#?</h3><p>C# можно выучить в срок от 4 месяцев до года в зависимости от интенсивности обучения, а также желаемого уровня владения языком. Переход с родственных языков программирования занимает обычно от 1 до 2 месяцев. C++ считается одним из самых сложных языков программирования. На изучение его овнов может потребоваться около года. Но нужно понимать, что выучить язык на достойном уровне можно только при больших объемах практики.</p><h3>2. Где используют C++/C#?</h3><p>Язык программирования C# является достаточно универсальным. Он применяется для разработки десктопных, веб- и мобильных приложений, игр на движке Unity, облачных приложений, решений для работы с базами данных и т. д. Язык отличается своей гибкостью и широкими возможностями. Так как язык разрабатывали в Microsoft, то лучшим его применением является написание программ для Windows, а также серверных приложений для Windows Server. Однако он подходит и для кроссплатформенной разработки.</p><p>Среди основных направлений использования C++ выделяются: веб-сервера, графика и сложные вычисления, десктопные приложения, приложения для аудио и видео. Язык является достаточно сложным, но зная его, вы всегда можете быстро освоить любой другой.</p><h3>3. Сколько зарабатывает разработчик на С++/C#?</h3><p>Уровень заработной платы зависит как от размера компании, опыта разработчика, так и отрасли, в которой он работает.</p><p>По данным <a href="https://hh.ru/">hh.ru</a>, в среднем <a href="https://hh.ru/search/vacancy?area=113&amp;hhtmFrom=main&amp;hhtmFromLabel=vacancy_search_line&amp;search_field=name&amp;search_field=company_name&amp;search_field=description&amp;text=c%23&amp;enable_snippets=false&amp;salary=115000&amp;only_with_salary=true">разработчики C# получают</a> от 115 тысяч рублей в месяц, но их доход может составлять и 500+ тысяч в зависимости от опыта и имеющихся навыков. <a href="https://hh.ru/search/vacancy?ored_clusters=true&amp;area=113&amp;hhtmFrom=vacancy_search_list&amp;hhtmFromLabel=vacancy_search_line&amp;search_field=name&amp;search_field=company_name&amp;search_field=description&amp;text=c%2B%2B&amp;enable_snippets=false&amp;salary=110000&amp;only_with_salary=true">Разработчики С++ более востребованы</a>: средняя зарплата примерно такая же, однако вакансий на <a href="https://hh.ru/">hh.ru</a> с доходом от 450 тысяч в месяц больше, чем у специалистов по C#.</p><h2>Заключение</h2><p>Курсы по C++ и C# помогут в освоении этих языков программирования в сравнительно короткие сроки. Если говорить о первом языке, то его будет достаточно сложно освоить без экспертной помощи и больших объемов практики. Не стоит питать надежд, что бесплатных видеоуроков будет достаточно. Второй язык проще для самостоятельного изучения, но отсутствие практики и портфолио может стать причиной возникновения проблем с трудоустройством. Поэтому если вы не хотите тратить много времени и ресурсов на академическое образование, то курсы станут наиболее подходящим вариантов.</p><p><i>Нашли ошибки и неточности в подборке? Пожалуйста, сообщите об этом в комментариях. Если вы обучались на одном из представленных курсов или хотите посоветовать другой, также буду рада, если вы поделитесь своим опытом. </i></p>]]></content:encoded>
    </item>
    <item>
      <title>Топ-5 языков программирования в 2026 году</title>
      <link>https://tproger.ru/articles/5-samyh-vostrebovannyh-yazykov-programmirovaniya-v-2025-godu</link>
      <comments>https://tproger.ru/articles/5-samyh-vostrebovannyh-yazykov-programmirovaniya-v-2025-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Сергей Лалетин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/5-samyh-vostrebovannyh-yazykov-programmirovaniya-v-2025-godu</guid>
      <description><![CDATA[<p>Python, JavaScript, Java, C/C++, C# — разбираем рейтинги TIOBE и GitHub Octoverse 2025, зарплаты в России и тренды языков программирования на 2026 год.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/5-samyh-vostrebovannyh-yazykov-programmirovaniya-v-2025-godu">Топ-5 языков программирования в 2026 году</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 15 Nov 2024 10:20:04 GMT</pubDate>
      <content:encoded><![CDATA[<p><i>Это обновлённая версия статьи. Все данные актуализированы по состоянию на март 2026: рейтинги TIOBE и GitHub Octoverse 2025, зарплаты по данным Хабр Карьеры за H2 2025.</i></p><p>Каждый год аналитики, институты и профильные ресурсы составляют рейтинг языков программирования: подводят итоги, делают прогнозы. Мы обновили статью на основе свежих данных за 2025-2026 годы и выяснили, какие ЯП будут востребованы на рынке в 2026 году. Советуем прочитать, если вы только учитесь или задумались о смене стека.</p><p><b>Главное из статьи:</b><br />— Python остается языком номер один по TIOBE (21,25%), но потерял 2,59 п.п. за год<br />— TypeScript обогнал Python на GitHub по росту активности (+66,63% год к году)<br />— В России рост зарплат разработчиков остановился: 0% за второе полугодие 2025 года<br />— Go-разработчики получают больше всех в России — 320 000 рублей в месяц<br />— Си вернулся на второе место в TIOBE, потеснив C++ и Java</p><p>Спойлер: топ-5 по-прежнему знакомые всем Python, Си, C++, Java и C#. Но есть заметные подвижки: Си перепрыгнул с четвертого на второе место по TIOBE, а Go обвалился с 7-й на 16-ю позицию. На GitHub же главная сенсация — TypeScript обогнал Python по темпам роста.</p><p>Статья основана на данных <a href="https://www.tiobe.com/tiobe-index/">TIOBE</a> (март 2026), <a href="https://github.blog/news-insights/octoverse/octoverse-2025/">GitHub Octoverse 2025</a> и <a href="https://career.habr.com/">Хабр Карьеры</a> (данные о зарплатах за второе полугодие 2025). Если вы знаете другие интересные исследования по теме — делитесь ими в комментариях.</p><h2>Python</h2><p>Занимает первое место по индексу TIOBE с долей 21,25%, хотя за год потерял 2,59 процентных пункта. На GitHub Octoverse 2025 — второй по росту активности (+48,78% год к году). Python остается главным языком машинного обучения, ИИ и всего, что связано с большими данными.</p><p>Остается в топе уже много лет и будет востребован как минимум в 2026 году. Все благодаря относительно простому входу и универсальности. И, конечно, тому, что Python — база для Data Science, AI-инструментов и облачных вычислений. Средняя зарплата Python-разработчика в России — 229 000 рублей в месяц (данные Хабр Карьеры за второе полугодие 2025).</p><h2>JavaScript</h2><p>По индексу TIOBE JavaScript держится на шестом месте с долей 3,45% — стабильная позиция. Зато на GitHub Octoverse 2025 он третий по темпам роста (+24,79% год к году). Вместе с TypeScript занимает ведущие позиции в веб-разработке.</p><p>Главный язык веб-разработки, и в 2026 году ничего не изменится. Интересный тренд: TypeScript, который компилируется в JS, на GitHub Octoverse 2025 вырос на 66,63% за год и обогнал даже Python. Средняя зарплата JS/TS-разработчика в России — 241 000 рублей в месяц.</p><h2>Java</h2><p>По TIOBE в марте 2026 года Java на четвертом месте с долей 7,99% — опустился на одну позицию, уступив Си. На GitHub Octoverse 2025 — четвертый по росту (+20,73%). По-прежнему база и для бэкенда, и для мобильных приложений, и для Big Data. На Java написано огромное количество сервисов, которыми мы пользуемся каждый день: от Netflix до Госуслуг.</p><p>Средняя зарплата Java-разработчика в России — 226 000 рублей в месяц. Несмотря на то что Java немного потерял в рейтингах, его экосистема огромна, а количество legacy-проектов гарантирует стабильный спрос на специалистов.</p><h2>Cи и C++</h2><p>Технически это два разных языка, но они часто идут в связке. В марте 2026 года произошла заметная рокировка: Си перепрыгнул с четвертого на второе место в TIOBE (11,55%), а C++ опустился с второго на третье (8,18%).</p><p>«База» для большинства разработчиков системного софта. На них написаны компиляторы, операционные системы, драйверы, встроенное ПО. Их изучают в университетах, и они точно останутся в топе в ближайшие годы: высокопроизводительные системы никуда не денутся, а вокруг огромное количество legacy-кода, который нужно поддерживать.</p><p>Средняя зарплата C++-разработчика в России — 241 000 рублей в месяц, что выше, чем у Python и Java.</p><h2>C#</h2><p>Пятый по индексу TIOBE с долей 6,36% и ростом на 1,49 процентных пункта за год. Также в топ-5 на GitHub Octoverse 2025. Разработан Microsoft, похож на Cи и C++, но не надстройка над ними.</p><p>Остается популярным благодаря совместимости с экосистемой Microsoft и универсальности. Кроме того, C# — язык разработки игр (спасибо, Unity). Средняя зарплата C#-разработчика в России — 251 000 рублей в месяц, что заметно выше Python и Java.</p><p>В целом топ-5 не удивляет: Python — язык AI и Data Science, JavaScript — веба, Java — корпоративного бэкенда, Cи/C++ — системного программирования, C# — игр и Microsoft-экосистемы. Но сюрпризы есть: TypeScript стал самым быстрорастущим языком на GitHub, а рост зарплат в России остановился.</p><h2>Какие языки набирают популярность</h2><p>Топ-5 — это языки-ветераны, которые давно на рынке. Но есть и языки, которые быстро набирают популярность. Вот пять из них, на которые стоит обратить внимание в 2026 году.</p><ul><li><b>TypeScript.</b> Главная сенсация 2025 года на GitHub: рост активности +66,63% год к году, обогнал Python. Компилируется в JS, но предлагает статическую типизацию. Всё больше проектов переходят на TS.</li><li><b>Kotlin.</b> Язык для разработки мобильных, серверных и веб-приложений. Сегодня чаще всего используется для Android-разработки, проще и лаконичнее Java.</li><li><b>Rust.</b> Быстрый и безопасный, с необычным подходом к управлению памятью. Всё чаще используется для высоконагруженных систем, облачных сервисов, операционных систем и драйверов.</li><li><b>Swift.</b> Язык Apple для iOS и macOS. Популярность растет с ростом числа компаний, которым нужны нативные приложения для экосистемы Apple.</li><li><b>Golang.</b> В 2025 году неожиданно обвалился в TIOBE с 7-го на 16-е место, но в России по-прежнему лидирует по зарплатам: 320 000 рублей в месяц. Простой, быстрый, идеален для микросервисов и облачной инфраструктуры.</li></ul><h2>А что в России</h2><p>По данным <a href="https://career.habr.com/">Хабр Карьеры</a> за второе полугодие 2025 года, средние зарплаты разработчиков в России выглядят так:</p><ul><li>Go — 320 000 рублей в месяц</li><li>C# — 251 000 рублей в месяц</li><li>C++ — 241 000 рублей в месяц</li><li>JavaScript/TypeScript — 241 000 рублей в месяц</li><li>Python — 229 000 рублей в месяц</li><li>Java — 226 000 рублей в месяц</li></ul><p>Важный тренд: рост зарплат разработчиков в России фактически остановился. Если за второе полугодие 2024 года зарплаты выросли на 19%, то за второе полугодие 2025 рост составил 0%. Это касается всех языков программирования.</p><p>В IT постоянно все меняется: появляются новые технологии, подходы, целые профессии. Но топ языков программирования остается стабильным уже много лет. Советуем изучать новое и экспериментировать, но не забывать о «мейнстримных» технологиях. А главное — следить не только за глобальными рейтингами, но и за российским рынком зарплат, потому что востребованность языка и уровень дохода не всегда совпадают.</p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft передала исходный код Mono разработчикам Wine</title>
      <link>https://tproger.ru/news/microsoft-peredala-ishodnyj-kod-mono-razrabotchikam-wine</link>
      <comments>https://tproger.ru/news/microsoft-peredala-ishodnyj-kod-mono-razrabotchikam-wine?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/microsoft-peredala-ishodnyj-kod-mono-razrabotchikam-wine</guid>
      <description><![CDATA[<p>Microsoft передала исходный код проекта Mono разработчикам Wine, чтобы поддержать и сохранить развитие кроссплатформенного .NET. Проект Mono, запущенный в 2001 году, сыграл важную роль в создании кроссплатформенных приложений</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/microsoft-peredala-ishodnyj-kod-mono-razrabotchikam-wine">Microsoft передала исходный код Mono разработчикам Wine</a>»</p>]]></description>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 28 Aug 2024 02:30:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>Microsoft <a href="https://www.mono-project.com/">приняла решение</a> передать исходный код проекта Mono разработчикам Wine.</p><p><b>Mono —</b> это открытая платформа для создания кроссплатформенных приложений, которая реализует .NET Framework на базе стандартов ECMA для C# и Common Language Runtime.</p><h2>История и значимость Mono</h2><p>Проект Mono был запущен в 2001 году и с тех пор сыграл важную роль в развитии экосистемы .NET.</p><p>После приобретения Xamarin в 2016-м, Microsoft взяла на себя управление проектом. Последний крупный релиз Mono вышел в июле 2019-го, а последнее обновление — в феврале 2024-го. Однако, со временем развитие проекта замедлилось.</p><h2>Передача проекта WineHQ</h2><p>Джефф Шварц из Microsoft сообщил на сайте Mono и на GitHub, что теперь управление проектом переходит к организации WineHQ.</p><p>Исходный код будет размещен на новой платформе, а существующие репозитории будут сохранены в архиве и останутся доступными для пользователей. Бинарные файлы также будут доступны в течение следующих 4 лет.</p><p>Microsoft также отметила, что завершила перенос всех рабочих нагрузок на современную ветку Mono в репозитории dotnet/runtime и рекомендует пользователям переходить на .NET, который включает эти разработки.</p><h2>Признание заслуг Mono</h2><p>В своём сообщении, Microsoft выразила благодарность всем разработчикам, которые трудились над Mono.</p><p>Компания подчеркнула, что Mono стал первым решением .NET для Android, iOS, Linux и других операционных систем, сделав кроссплатформенный .NET реальностью. Передача проекта WineHQ — это не только способ сохранить наследие Mono, но и признание важности работы команды Wine.</p><p>Подобное сотрудничество, по словам представителей Microsoft, откроет новые возможности для развития открытого программного обеспечения.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как создать видеоигру с нуля</title>
      <link>https://tproger.ru/articles/kak-sozdat-videoigru-s-nulya</link>
      <comments>https://tproger.ru/articles/kak-sozdat-videoigru-s-nulya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Влад Попов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-sozdat-videoigru-s-nulya</guid>
      <description><![CDATA[<p>Создание видеоигры с нуля может показаться сложной задачей, но при правильном подходе и упорстве это достижимая цель. Вот пошаговое руководство, которое проведет вас через процесс создания собственной видеоигры.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-sozdat-videoigru-s-nulya">Как создать видеоигру с нуля</a>»</p>]]></description>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Unity]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 04 Apr 2024 08:20:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Прежде чем погрузиться в мир создания игр, подумайте о новых карьерных возможностях. Если вы опытный тестировщик с полным стеком навыков, посмотрите <a href="https://tproger.ru/jobs/fullstack-qa-sberdrug-2?utm_source=site&amp;utm_medium=blog&amp;utm_campaign=jobs-sber&amp;utm_content=6">на вакансию Fullstack QA в Сбер</a>.</p><h2>1. Определите концепцию и дизайн игры</h2><ul><li>Определите жанр вашей игры (головоломка, экшен, приключение и т. д.).</li><li>Придумайте уникальную концепцию: основную механику, персонажей и сюжет игры.</li><li>Создайте дизайн-документ, описывающий особенности игры, уровни и игровую механику.</li></ul><h2>2. Выбор игрового движка</h2><ul><li>Игровой движок – это программное обеспечение, которое предоставляет<br />основу для создания вашей игры: графику, физику, звук и т. д.</li><li>Выберите игровой движок, соответствующий вашим потребностям и уровню навыков (например, Unity, Unreal Engine, Godot).</li></ul><h2>3. Разработка персонажей и окружения</h2><ul><li>Создайте привлекательных персонажей и детализированное окружение, которое оживит вашу игру.</li><li>Используйте программное обеспечение для 3D-моделирования (например, Blender, Maya) или наймите художников для создания ассетов.</li></ul><h2>4. Программирование игровой логики</h2><ul><li>Напишите код для игровой логики, включая движение, столкновения, искусственный интеллект и т. д.</li><li>Изучите язык программирования, используемый вашим игровым движком (например, C#, C++, GDScript).</li></ul><h2>5. Создание уровней и дизайна окружения</h2><ul><li>Создайте увлекательные уровни, используя игровые средства вашего движка.</li><li>Используйте текстуры, освещение и эффекты для улучшения визуального качества.</li></ul><h2>6. Добавление графики, звука и музыки</h2><ul><li>Импортируйте и оптимизируйте графические ресурсы, такие как текстуры, модели и анимации.</li><li>Запишите или найдите звуковые эффекты, музыку и озвучку для создания иммерсивного игрового окружения.</li></ul><h2>7. Тестирование и отладка игры</h2><ul><li>Тщательно тестируйте свою игру на наличие ошибок и проблем с производительностью.</li><li>Соберите отзывы от тестеров или игроков и внесите необходимые улучшения.</li></ul><h2>8. Публикация и маркетинг игры</h2><ul><li>Выберите платформу для публикации вашей игры (например, Steam, мобильные приложения).</li><li>Продвигайте свою игру через социальные сети, обзоры и маркетинговые кампании.</li></ul><h2>Дополнительные советы</h2><ul><li>Начните с небольших проектов: создавайте простые прототипы и постепенно расширяйте свою игру.</li><li>Найдите сообщество или наставника, который сможет поддержать вас и предоставить отзывы.</li><li>Изучайте игровой дизайн, программирование и 3D-моделирование, чтобы улучшить свои навыки.</li><li>Будьте терпеливы и настойчивы: создание видеоигр – это длительный процесс, требующий времени и усилий.</li></ul><p>Помните, создание видеоигр – это увлекательный и полезный опыт,  который не только развлекает, но и развивает ваши технические навыки и  творческий потенциал. Следуя этим шагам и прилагая упорные усилия, вы  сможете превратить свою игровую концепцию в увлекательную и  захватывающую игру.</p>]]></content:encoded>
    </item>
    <item>
      <title>Библиотека программиста: 37 книг для того, чтобы разобраться в IT</title>
      <link>https://tproger.ru/articles/knigi-po-programmirovaniyu</link>
      <comments>https://tproger.ru/articles/knigi-po-programmirovaniyu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Ирина Тюльпакова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/knigi-po-programmirovaniyu</guid>
      <description><![CDATA[<p>Подборка из 37 книг по программированию от Winderton: Computer Science, алгоритмы, Python, C++, Java, C#, JavaScript. Узнайте, с чего начать в IT.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/knigi-po-programmirovaniyu">Библиотека программиста: 37 книг для того, чтобы разобраться в IT</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Операционные системы]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[unix]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Фронтенд-разработка с нуля]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 29 Mar 2024 13:50:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Два года назад IT-блогер Winderton опубликовал собственную подборку из книг про программирование. Его библиотека включает как базовые книги по алгоритмике и основам компьютерных наук, так и более конкретные, посвященные языкам. Несмотря на то, что к 2024 году некоторые книги получили переиздание, список всё так же можно назвать мощной подготовительной базой для начинающего специалиста.</p><p>Ниже — транскрибация ролика, дополненная ссылками.</p><p>Шесть лет назад я,
Виндертон, будучи в состоянии аффекта,
выкладываю вот этот вот ролик, который
посмотрело уже больше 100 тысяч человек: «Техническая литература для программистов».
Чтобы сэкономить вам 10 минут вашего
времени, там были показаны вот эти вот
книги.</p><figure><img src="https://media.tproger.ru/user-uploads/88534/2024-03-29/f07dfe38-506e-480f-b7c7-2f70bdd6fb46.png" alt="" /></figure><p>Вопросов нет. Кнут — это классный автор
с крутыми материалами. На кто его
потянется со всей этой математикой, если даже
вот эти челы не тянут, а конкретно тот,
что с бородой — Шон Магресс. Тадембаум —
та же самая история. Классный материал,
но настолько сложное задание, что порой
вгоняет в депрессию. Корман заставляет
писать вас вообще деревья с нуля без
примеров.</p><p>Поэтому, если вы хотите освоить основу
программирования, влиться в компьютер-сайенс,
или вам просто нужны хорошие книжки по
программированию, то за следующие
несколько минут я на вас вывалю все
то, что есть на 2022 год, дам по каждой
комментарии, рекомендации и антирекомендации.
Грубо говоря, мы сейчас сделаем с вами
выборку.</p><p>Ну а мы разбиваем видео на три части:</p><ol><li>Введение в программирование и ядро computer science.</li><li>Моя библиотека. GameDev, прочее.</li><li>Языки программирования.</li></ol><h2>Введение и основы computer science</h2><p>«Внутри машины», или как работает ваш
компьютер, у нас это называется еще «архитектура ЭВМ». Как устроен процессор,
память и вся организация железа. Если
у вас нулевой бэкграунд, вам нравятся
картинки и тоненькие книжки (~300 страниц), то это то,
с чего вам точно стоит начать.</p><p>«Введение в компьютерные системы». Тут
автор начинает буквально с того, почему
процессор делается из кремния, потому
что они сами делали процессоры из
кремния. И проходится по всему
абстракционному стеку, начиная от
железа, через периферию, BIOS, операционную
систему, ассемблер, язык программирования
C, пишут на нем потом программы и покажут,
как это дело все между собой связано,
взаимодействует в очень интерактивной
манере.</p><p>«Код» Петцольда. Эта книга, как и
первая, тоже для полных новичков, без
бэкграунда в сфере. Там рассказывается
про то, что такое железо, операционная
система, компиляторы, языки программирования,
как это дело все между собой взаимодействует.
Если вам когда-нибудь было интересно,
почему компьютер именно такой, а программы
пишутся именно так, то Петцольд в очень
простой манере за 400 страниц вам об этом
простенько расскажет.</p><p>Если вдруг по каким-то причинам вы эти
книги не найдете или вам их будет мало,
то вот еще две.</p><p>Первое — это «Теоретический
минимум по Computer Science». Уровень подачи тут
не дотягивает до предыдущих трёх, он
немножко мудрёнее и сложнее, но тут
реально покрывается весь тот компьютер-сайенс необходимый, который вам нужен, и
в книге всего 150-200 страниц.</p><p>Единственный
минус, который связан у меня с этой
книгой — она вся развалилась пока я её читал.</p><p>«Computer Science: an Overview». Эта книга реально местами
довольно часто очень сложная. То есть,
если вы не знаете, что такое транзистор,
а там об этом узнаете, то вы вряд ли
поймете, что такое транзистор.</p><p>Но, (а) эта
книга реально походится по всему курсу
Computer Science, где говорят даже про базы
данных и графику, и, (б) там копают чуть
глубже, чем в этой, этой или этой. Поэтому,
если у вас есть хоть немного опыта
программирования, то смело берите эту
книгу и изучите Computer Science.</p><h3>Алгоритмы и структуры данных</h3><p>Как вы все
знаете, это Корман и Седжик.</p><p>Но Корман — это очень много математики
прямо с первых страниц, а Седжик — это
Java, которая, ну, не особо всем нравится.</p><p>Но нам везет, и со временем появляются
реально годные альтернативы. И одна из
них — это Grokking Algorithms. Я о ней узнал
года три назад, и года два назад полностью
заменил ею Кормана в менторинге. Книгу написал очередной гений, который
программирует с двух лет и продает свои
первые игры чуть ли не в 10 лет. Но она
реально написана простым языком, и хочу
сделать небольшую ремарку, если будете
читать перевод. В переводах есть ошибки,
поэтому просто будьте осторожны и всегда
рекомендую только оригинал.</p><h3>Операционные системы</h3><p>Для меня
это был и остается Томас Андерсон с вот
этой вот книжкой, потому что книги
Тененбаума более сухие, наверное, и выше
по уровню сложности. Поэтому, если вы
понимаете, что написано в этой книге,
можете перейти к Тененбауму, но не Вайзверсу.</p><p>Тут, наверное, есть какой-то
баланс, она не слишком глубокая и не
слишком поверхностная.</p><p>Также мне нравится
вот эта книжка, она супер просроченная,
я давным-давно ее купил, но если вы хотите
знать, как работает Unix, и вам нужен
туториал, как написать свой Unix, то это
как раз-таки то, и не важно, что ей 200 с
лишним лет.</p><h3>Компиляторы и дизайн языков</h3><p>Книгу с драконом сразу отсюда
убираем, потому что она, ну, прям
слишком сложная.</p><p>Берем сюда Николаса Вирза, 150 страниц,
и добавляем сюда Нистерна с его Crafting
Interpreters. Кстати, Нистерн — это тот самый
чел, который делал паттерны для геймдева,
которые являются чуть ли не аналогом
Банды Четырех.</p><h3>Software development</h3><p>Clean Code, Code Complete и так далее — ребят, это классные книги,
не поймите меня неправильно, они написаны
лучшими из нас, но читать их нужно только
тогда, когда вы имеете уже от двух до
трех лет опыта в программировании. Они
учат вас, как делать правильно, и вы,
скорее всего, не поймете, как делать
правильно, если вы сначала не поделаете
неправильно. Тут нереально учиться на
чужих ошибках. Рекомендую читать только
тогда, когда у вас будет пару пэт-проектов
и два-три года опыта в программировании
в целом.</p><p>Касаемо ООП, все советуют «Банду
Четырёх», которая прилично так всем уже
надоела.</p><p>А я посоветую вам вот эту книгу,
которая, на мой взгляд, будет лучше. Единственный момент, то, что там С++, но
его там на самом деле почти нет. Не
пугайтесь.</p><h2>Моя библиотека, GameDev, прочее</h2><p>Джейсон Грегори — это автор,
который написал Uncharted и, соответственно,
эту книгу. У него супер-обширные познания
в игровых движках как минимум и как
максимум в производстве игр. В моменте
этот человек решает написать вот эту
вот книгу, которая уже третье издание.
Отличная подача материала, углубление
в самый раз, максимально широченный
охват тем. И вот, например, то, что делает тот же
самый Ян Черников — это процентов 20-30
вот от этой вот как раз книги. Чаще всего
я читаю именно её.</p><p>Опять же, Андерсон «Операционки». Тут лучшее объяснение
виртуальной памяти, на мой взгляд. Книга
по введению в CS и программирование.
Просто всем советую. Конечно же, Корман
со своей бандой. Они тут явно борщат с
математикой, но, может быть, это просто
я тупой [здесь не даются ссылки на книги т.к. автор повторяет их из первого раздела, — прим.редактора].</p><p>Не особо классная книга по C++,
но как референс или подставка для
монитора вполне сходит.</p><p>Ещё одна классная книга — это Game Coding
Complete. Сложные темы рассказывают достаточно
простым языком. И именно отсюда я узнал,
что такое анимация и как они работают.</p><p>Конечно же «Си» Кернигана и Ричи, но я не
советую, если у вас с психикой не все в
порядке.</p><p>Ассембль от Apress, чтобы
хоть какое-то понимание было, что это
такое, как на него смотреть вообще&lt;...&gt;</p><h2>Языки программирования</h2><h3>Python</h3><p>Тут идёт, конечно же, Лутц с его громким именем. Книжка прям для
суперновичков, и Лутц, самое главное, не
страдает болезнью. Вот это вы пока не
понимаете, но через 10 страниц я вам это
объясню. Нет, он как в бакалее: всё сразу
по полочкам вам раскладывает, и вы
перелистываете страницу за страницей,
с приятным чувством, что вы все понимаете,
вы весь такой вообще умный и сообразительный.</p><p>Еще одна книга на уровне этой — «Краш-курс Питона», которая была написана
тоже автором, у которого куча классных
книг по питону. Он программирует с 5 лет
и пишет полжизни книги. Отличие от Лутца в том, что эта книга
подходит как и начинающим, так и типам
с опытом, поэтому читать ее реально не
скучно.</p><p>Еще одна классная книга и классный
автор — это Дэвид Бизли с его «Python
Cookbook». Вообще, Дэвид Бизли — это бывший
С-шник, который полжизни пишет на C и
в моменте решает преподавать Python. И
расскажет про всякие супер интересные
и занимательные штуки по типу, почему
на Python нельзя программировать многопоточные
приложения, почему на нем нельзя
программировать мобильные приложения.
И у него еще есть всякие видео на YouTube,
где он показывает всякие хаки с Python.
Поэтому Python Cookbook, если уже знаете основу,
то там вас научат расширять даже
питоновский интерпретатор.</p><h3>C</h3><p>Тут сразу запомните одно. Никогда не
читайте книгу Learn C the Hard Way, потому что
там автор сразу видно, что не знает, о
чем говорит, и упрощает то, что упрощать
не надо. У этой книги прям очень много
хейта в интернете, как и у книг Шилта,
который классно знает Java, но не знает
C++ и C, или как минимум не умеет их
преподавать.</p><p>Волк в овечьей шкуре или
Брайан Керниган и Денис Ричи и C, второе
издание. Книгу рекомендуют до сих пор
изучать по C, но на самом деле там есть
куча проблем. Во-первых, это то, что эта
книга подразумевает то, что вы уже знаете
компьютер-сайенс, как работает вообще
все, начиная от железа и вплоть до
операционных систем. Во-вторых, то, что
она по факту страниц 250, хотел сказать,
она по факту 2500, и там нет такого понятия,
как best practices, то есть книги 100 лет, и там
просто не знали, что такое хорошо, а что
такое плохо. Поэтому не рекомендую, если
вы не понимаете компьютер-сайенс.</p><p>Beginning C. Книга от Apress, которая, как вы
видели, у меня уже есть x86 Assembly. Классная
книга, классное издательство. Фишка
этой книги то, что там рассказывают про
C99, про C11, про многопоточность в C.</p><p>Эта книга
отлично работает как туториал, как
референс, как подставка. И там много
всяких работающих маленьких программулек
на C.</p><p>И напоследок, хочу скачать что мне запомнилась,
вот эта книга, которая называется Expert
C. Она была написана челами, которые
классно знают и разбираются в
интерпретаторах и работают в САН.</p><h3>C++</h3><p>Конкретно от меня, у меня Primer Plus, которая
не лучшая из этих книг, но мне хватило
ее как референса [автор упоминал её ранее, — прим.редактора].</p><p>Мне также очень нравятся
книги Скотта Майер Effective C++, которые
нравятся вообще всем.</p><p>Плюс я почитываю
вот эти вот две книги по метапрограммированию,
не самые хорошие, но выбора просто нет
никакого.</p><p>Само собой, многопоточность и C++
Concurrency in Action, потому что также нет никакого
выбора. Ну и само собой, Александр Эску,
которого почитывать нужно как минимум
для того, чтобы видеть, как делать не
надо, а это всегда в C++ интересно
посмотреть.</p><h3>Java</h3><p>Джава за
один день, всем советую, конечно же,
шучу, это полная фигня. Всегда избегайте
этих книг, каких бы отзывов вы там не
видели, потому что это чушь собачья, а
не книги. Простите, авторы.</p><p>А вот книга Шилда Java Complete Reference,
последний, который я читал, шестой и
седьмой, мне всегда нравились, потому
что простая подача, и они очень похожи
на GLS. Наверное, даже проще. Да и вообще,
у Шилда читать, мне кажется, можно всё,
что угодно, потому что он как бы папа джавы.</p><p>Конечно же, как только вы знаете
джаву-основу, это Джошуа Блок с ее Effective Java, это аналог Скотта Майера с Effective C++. На моей первой работе на Java, когда я
пришел и сказал своему тимлиду, что я
читаю Effective Java, он мне говорит, блин, это
классная книга, я там дженерики сейчас
изучаю. А я стоял в этот момент и думал,
что, блин, я ее тоже уже читаю. Было очень
приятное чувство, но меня тогда, типа,
я так и остался работать джуном, а он
так и остался работать тимлидом. Ничего
не поменялось. В этой книге реально
много практик использования джава в
реальном продакшене, поэтому, если
знаете основу, смело ее рекомендую.</p><p>Java Concurrency in Practice. То есть Java — это
исключение, это многопоточность, это
OOП. Такие книги, как Java Concurrency in Practice,
показывают вам, как использовать ту же
самую многопоточность, ее неотъемлемую
часть. А такие книги, как Хедферст или
какой-нибудь Шилдт, показывают вам, что
такое Java Core. Также на уровне с Шилдтом есть тип, которого зовут Кей Хорсман. У
него много всяких книг по типу «Как
работать с синхронизацией» или «Ближележащие топики». То есть какой-то Advanced
Java. Поэтому советую присмотреться тоже.</p><h3>C#</h3><p>Пусть Рихтера читают, пусть больше
ничего не читают.</p><h3>Javascript</h3><p>Симпсон «Вы не знаете
JavaScript». Неоднократно слышал про эти книги
от классных JS-ников, потому что там много
всяких how-to, то есть как работает это,
как работает это, почему не работает
это.</p><p>Советовать
Фленнегана или Дугласа Кроуфорда,
который хотел назвать JavaScript C++++ я не
буду, потому что, если бы вы хотели читать
книги, вы бы, наверное, изучали C++. Все-таки JavaScript — это попробовать,
потыкать и поучиться на практике.</p><h3>Assembly</h3><p>Я
покупал себе вот эту книгу и ни разу в
ней не разочаровался. Возможно, потому
что я прочитал ее только процентов на
30, но какая разница. Наверное, будет
хороший вопрос, если вы скажете, зачем
мне вообще ассембли в 2022 году. Да, он вам
не нужен, вы на нем писать ничего точно
не будете, но если вы пишете на плюсах,
то чтение ассембли во время дебаггинга,
что занимает большую часть вообще
времени в программировании, как минимум на C++, как минимум у меня,
понимать ассембли хотя бы нужно, поэтому
такая вот книга в этом отлично помогает.</p><p>Еще есть вот такая вот книга, но она прям
суперпростая, поэтому я бы рекомендовал
читать сразу вот эту.</p><p>Читайте также: <a href="https://tproger.ru/articles/kak-stat-programmistom">Как стать программистом с нуля — полный гайд</a>, <a href="https://tproger.ru/articles/backend-2024">Что знать бэкендеру в 2024 году</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что изучать начинающему разработчику на C#</title>
      <link>https://tproger.ru/articles/chto-izuchat-nachinashhemu-razrabotchiku-na-c-</link>
      <comments>https://tproger.ru/articles/chto-izuchat-nachinashhemu-razrabotchiku-na-c-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-izuchat-nachinashhemu-razrabotchiku-na-c-</guid>
      <description><![CDATA[<p>Спросили у специалистов уровня middle и senior, какие библиотеки, фреймворки и инструменты C# учить начинающим разработчикам.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-izuchat-nachinashhemu-razrabotchiku-na-c-">Что изучать начинающему разработчику на C#</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 16 Feb 2024 12:51:29 GMT</pubDate>
      <content:encoded><![CDATA[<p>Джунов и стажёров в айти интересует, какие библиотеки, фреймворки и инструменты C# учить, чтобы быстро и легко найти работу в разработке.</p><p>Мы опросили специалистов уровня middle и senior, которые дали свои комментарии.</p><p>Мы спросили:</p><ol><li>Какие библиотеки, инструменты, фреймворки C# уже устарели?</li><li>Какие библиотеки C# нужно знать в 2024 году?<br /></li><li>Какие фреймворки C# нужно знать в 2024 году?<br /></li><li>Какие инструменты C# нужно знать в 2024 году?<br /></li></ol><p>Вот, что они ответили.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><p>Постепенно устаревает Visual Studio, ее вытесняет новая облегченная версия - VS Code. .Net framework и .Net Core уже неактуальны и уходят в прошлое. На смену им приходят новые версии фреймворков .Net 8 и уже готовиться к релизу .Net 9. Устарела также библиотека Quartz для создания планировщиков.</p><p>В топе популярных библиотек на nuget.org остаются AutoMapper, Newtonsoft.Json, Serilog, FluentValidation, также набирает популярность Hangfire.</p><p>Последний актуальный фреймворк для C# на текущий момент – это .Net 8. Entity Framework - фреймворк для работы с БД.</p><p>По мимо IDE разработчики используют инструменты контроля версий (например Git), систему управления задач (Jira), многие продукты компании JetBrains также оказываются очень кстати.</p><p>Определенные C# библиотеки и фреймворки утрачивают актуальность. Примером устаревших технологий являются Web Forms для веб-разработки и Silverlight для создания интернет-приложений. ADO.NET Entity Framework был широко использован в прошлом, однако сейчас существуют более современные и удобные инструменты, такие как Entity Framework Core. Другие устаревшие библиотеки и инструменты включают в себя NUnit 2, WCF и Windows Forms.</p><p>Для успешной карьеры в C# разработке в 2024 году, следует овладеть следующими ключевыми библиотеками:</p><ol><li>ASP.NET Core – для разработки высокопроизводительных веб-приложений.</li><li>Entity Framework Core – мощный ORM фреймворк для работы с базами данных.<br /></li><li>Serilog или NLog – для продвинутого логирования приложений.<br /></li><li>AutoMapper – для упрощения маппинга между объектами.<br /></li><li>MediatR – для реализации шаблона "Посредник" и упрощения архитектуры приложений.<br /></li></ol><p>В 2024 году, следующие фреймворки будут на переднем крае C# разработки:</p><ol><li>.NET 6/7 – последняя версия платформы .NET, обеспечивающая кросс-платформенную поддержку и высокую производительность.</li><li>Blazor – для создания интерактивных веб-UI с использованием C# вместо JavaScript.<br /></li><li>MAUI – новый подход от Microsoft для создания кросс-платформенных мобильных и десктопных приложений.<br /></li><li>Orleans – фреймворк для создания распределенных высокомасштабируемых приложений.<br /></li><li>IdentityServer – фреймворк для реализации аутентификации и авторизации.<br /></li></ol><p>Для эффективной разработки на C# в 2024 году необходимо овладеть следующими инструментами:</p><ol><li>Visual Studio 2022/2023 – последняя версия IDE от Microsoft, предлагающая многочисленные улучшения для разработчиков C#. Visual Studio Code – популярный редактор кода с обширной поддержкой расширений для C# разработки.</li><li>Docker – для контейнеризации и упрощения развертывания приложений.</li><li>Azure DevOps – для автоматизации процессов CI/CD и управления проектами.</li><li>Rider от JetBrains – альтернативная IDE для разработки на C#, предлагающая множество продвинутых функций для работы с кодом.</li></ol><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Java или C# — что выбрать для бэкенда</title>
      <link>https://tproger.ru/articles/java-ili-c----kakoj-yazyku-uchit-bekenderu</link>
      <comments>https://tproger.ru/articles/java-ili-c----kakoj-yazyku-uchit-bekenderu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Сергей Баранов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/java-ili-c----kakoj-yazyku-uchit-bekenderu</guid>
      <description><![CDATA[<p>Java или C# для бэкенда: сравниваем вакансии, зарплаты, экосистемы и порог входа. Мнения опытных разработчиков с Reddit помогут вам сделать правильный выбор.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/java-ili-c----kakoj-yazyku-uchit-bekenderu">Java или C# — что выбрать для бэкенда</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 28 Jan 2024 16:36:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>Недавно наткнулся на Reddit на очередную дискуссию на тему Java и C# — пользователь спрашивал, что учить ему как начинающему бэкендеру. Разумеется, в треде собралось много комментариев от любителей этих языков. Рассказываю, к чему в итоге пришло обсуждение. Возможно, это поможет вам, если вы тоже выбираете, какой язык учить.</p><p>Java — лидер по количеству вакансий и зарплатам для бэкенд-разработчиков; экосистема крупнее и инструменты зрелее.</p><p>C# моложе и современнее: удобнее async/await, рефлексия и инкапсуляция; идеален для проектов на стеке Microsoft и .NET.</p><p>Оба языка объектно-ориентированы, используют сборщик мусора и имеют схожий синтаксис — перейти с одного на другой нетрудно.</p><p>Новичкам без базы программирования стоит начать с Python или JavaScript перед погружением в Java или C#.</p><p>Выбор языка не критичен на длинном горизонте: оба востребованы минимум 10–20 лет, а работодатели ценят понимание алгоритмов и систем.</p><h2>Почему Java и C# сравнивают?</h2><p>Java и C# — два объектно-ориентированных языка, на которые очень влияют Си и С++. Так что у них очень похожие подходы к проектированию и структурированию кода, схожий синтаксис. Более узкие примеры —  схожие подходы к кодогенерации, управлению памятью (оба используют сборщик мусора). К тому же оба языка используются для разработки десктопных и мобильных приложений, веб-приложений.</p><h2>Что советуют выбрать?</h2><p><b>GeneratedUsername5</b></p><p>Java, без сомнения. С ним больше возможностей, и у джавистов выше зарплаты. Просто так работает рынок труда: работодатель не поднимет вашу зарплату, если понимает, что вам некуда идти, поэтому чем меньше на рынке вариантов, тем ниже вероятность того, что зарплата будет хорошей.</p><p><b>Rjs617</b></p><p>Java — это огромная экосистема, у джавистов больше возможностей для трудоустройства. Если хотите разрабатывать что-то для экосистемы Microsoft (Windows, SQL Server, IIS, Azure), выберите C#. Во всех остальных случаях — Java.</p><p>Кроме того, сообщество Java больше, и гораздо легче найти ответы на вопросы о самом языке и фреймворках.</p><p>Для джавистов также больше удобных и бесплатных инструментов.</p><p><b>rbuen4455</b></p><p>Java по-прежнему самый популярный язык для создания корпоративных и крупномасштабных бэкендов. У него больше инструментов для бэкендера. А C# по сей день очень завязан на Windows.</p><p>Тем не менее у C# впереди светлое будущее.</p><p><b>AltDisk288</b></p><p>Это очень похожие языки со зрелыми экосистемами, оба востребованы на рынке.</p><p>Я слышал, как люди говорят, что Java потеряет долю рынка в течение десяти лет, но он все еще до смешного популярен и. В ближайшие 20 лет это вряд ли изменится, так что не принимайте решения на основе подобных прогнозов. Не ведитесь на «эта технология, которая была в топе более 20 лет, выходит из моды, теперь популярна другая!». Это неправда в 99,9% случаев.</p><p>Тем не менее C#, [хотя и моложе и современнее], безусловно, останется очень востребован. Я бы предпочел его.</p><p><b>DeeElsieGame</b></p><p>Я считаю, C# более последовательный и продуманный. И .NET хорошая база для бэкенда.</p><p>Также язык куда больше нравится разработчикам, чем Java, согласно <a href="https://insights.stackoverflow.com/survey/2021#technology-most-loved-dreaded-and-wanted">опросу разработчиков Stack Overflow</a>.</p><p><b>xcwxinn</b></p><p>Я бы порекомендовал C# для начинающих программистов. Он хорошо, его нетрудно выучить и он похож на Java, так что если захотите перейти на второй язык, проблем не будет.</p><p><b>Zealousideal_Ice3743</b></p><p>C# моложе, поэтому некоторые идеи в нем лучше и новее. Мне особенно нравится, как в C# работают рефлексия и инкапсуляция (проще, чем в Java).</p><p><b>wayne0004</b></p><p>Если вы новичок в программировании, я рекомендую начать с других языков, может быть, Python или Javascript.</p><p>C# и Java являются объектно-ориентированными и классными языками, но если вы не знакомы с основами программирования, они могут показаться слишком сложными.</p><p><b>lionhart280</b></p><p>Я слышал кое-что от джавистов, которые перешли на C#, что вывело в мозг глазах C# в топ:</p><p>В C# async и await существенно чище и проще. И это важно, потому что большая часть коммерческих проектов завязана на асинхронности (все, что связано с вызовами веб-API и базами данных, например) &lt;…&gt;.</p><p>На .NET у меня нет проблем с параллельным кодом. Я не копал глубоко в Java, но когда смотрел в последний раз, увидел много странностей, сторонних библиотек (в C# все решается базовыми Task/await/async) &lt;…&gt;.</p><p>Еще одна фишка C# — IAsyncEnumerable, который позволяет совершать асинхронные вызовы во время получения результатов. &lt;…&gt; Не нужно писать код типа «проверь, могли ли я сделать А. Если могу, выполни А, если не могу — поспи немного».</p><p>Хороший пример можно увидеть <a href="https://github.com/SteffenBlake/Iot.Device.Subscriptions">в моей библиотеке Iot.Device.Subscriptions</a>.</p><p>Если вы ещё определяетесь с первым языком программирования, загляните в наш обзор <a href="https://tproger.ru/articles/kakie-yazyki-programmirovaniya-uchit-v-2025-godu">какие языки программирования учить в 2025 году</a> и рейтинг <a href="https://tproger.ru/articles/5-samyh-vostrebovannyh-yazykov-programmirovaniya-v-2025-godu">5 самых востребованных языков программирования в 2025 году</a> — там собраны актуальные данные по рынку труда и рекомендации под разные цели.</p><p><i>А как вы используете Java? Какие версии и фреймворки? Вклад каждого очень важен, чтобы развитие Java отвечало истинным потребностям разработчиков.</i></p><p><a href="https://forms.yandex.ru/cloud/6657b16a505690246c6d6a64/">Поделитесь</a>, можно <i>отвечать </i>анонимно. А в благодарность вам придет сертификат и фотоотчет о посадке персональной сосны в бору Java.</p>]]></content:encoded>
    </item>
    <item>
      <title>Шестой раунд битвы языков программирования в 2023 году</title>
      <link>https://tproger.ru/articles/westoj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu</link>
      <comments>https://tproger.ru/articles/westoj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/westoj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu</guid>
      <description><![CDATA[<p>В шестом раунде батла лучших языков программирования в 2023 году встретились C# и Pascal, JavaScript и Си. Голосуйте сердцем!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/westoj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Шестой раунд битвы языков программирования в 2023 году</a>»</p>]]></description>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 24 Dec 2023 08:00:05 GMT</pubDate>
      <content:encoded><![CDATA[<p>Пятый раунд батла лучших языков программирования окончился разгромной победой Python над Swift с отрывом в 60% голосов и победой Golang над Kotlin с небольшим отрывом в 5% голосов.</p><p>Результаты пятого раунда <a href="https://tproger.ru/articles/pyatyj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">можно посмотреть здесь</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2023-12-24/73b4308b-d03a-49e2-b00c-e1879663793a.png" alt="" /><figcaption>Турнирная таблица батла лучших языков программирования в 2023 году</figcaption></figure><p>Сегодня за звание лучшего языка соревнуются:</p><ul><li>C# и Pascal;</li><li>JavaScript и C.</li></ul><p>Голосование продлится до завтра, 25 декабря 2023 года, до 11 часов по МСК.</p><p>Выберите те языки, которые вы любите больше других. Голосуйте сердцем! Не думайте о популярности языков или их востребованности. В этом турнире важна только народная любовь.</p><p>Со всеми условиями батла <a href="https://tproger.ru/articles/startuet-batl-yazykov-programmirovaniya-2023">можно ознакомиться в анонсе</a>.</p><p>Чтобы не пропустить следующие раунды, подпишитесь на тэг <a href="https://tproger.ru/tag/toplang2023">Лучший язык 2023</a>. Тогда новые раунды появятся в вашей личной ленте, а вам будут приходить уведомления об их публикации.</p>]]></content:encoded>
    </item>
    <item>
      <title>Третий раунд битвы языков программирования в 2023 году</title>
      <link>https://tproger.ru/articles/tretij-raund-bitvy-yazykov-programmirovaniya-v-2023-godu</link>
      <comments>https://tproger.ru/articles/tretij-raund-bitvy-yazykov-programmirovaniya-v-2023-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tretij-raund-bitvy-yazykov-programmirovaniya-v-2023-godu</guid>
      <description><![CDATA[<p>В третьем раунде батла лучших языков программирования в 2023 году встретились C++ и C#, Visual Basic и Pascal. Голосуйте сердцем!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tretij-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Третий раунд битвы языков программирования в 2023 году</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 21 Dec 2023 08:03:26 GMT</pubDate>
      <content:encoded><![CDATA[<p>Завершился второй раунд батла лучших языков программирования. Kotlin обошёл Java, а Golang обогнал Rust. Оба языка программирования выиграли с 60% голосов против 40% у своих соперников.</p><p>Результаты второго раунда <a href="https://tproger.ru/articles/vtoroj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">можно посмотреть здесь</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2023-12-21/158e3023-33fd-408e-8825-c5e0a9233120.png" alt="" /><figcaption>Турнирная таблица батла лучших языков программирования в 2023 году</figcaption></figure><p>Сегодня за звание лучшего языка соревнуются:</p><ul><li>C++ и C#;</li><li>Visual Basic и Pascal.</li></ul><p>Голосование продлится до завтра, 22 декабря 2023 года, до 11 часов по МСК.</p><p>Выберите те языки, которые вы любите больше других. Голосуйте сердцем! Не думайте о популярности языков или их востребованности. В этом турнире важна только народная любовь.</p><p>Со всеми условиями батла <a href="https://tproger.ru/articles/startuet-batl-yazykov-programmirovaniya-2023">можно ознакомиться в анонсе</a>.</p><p>Чтобы не пропустить следующие раунды, подпишитесь на тэг <a href="https://tproger.ru/tag/toplang2023">Лучший язык 2023</a>. Тогда новые раунды появятся в вашей личной ленте, а вам будут приходить уведомления об их публикации.</p>]]></content:encoded>
    </item>
    <item>
      <title>Какие проблемы могут встретится во время изучения языка программирования C#</title>
      <link>https://tproger.ru/articles/kakie-problemy-mogut-vstretitsya-vo-vremya-izucheniya-yazyka-programmirovaniya-c</link>
      <comments>https://tproger.ru/articles/kakie-problemy-mogut-vstretitsya-vo-vremya-izucheniya-yazyka-programmirovaniya-c?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Никита Смирнов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kakie-problemy-mogut-vstretitsya-vo-vremya-izucheniya-yazyka-programmirovaniya-c</guid>
      <description><![CDATA[<p>Разработчик C# рассказал, как выучить язык программирования, какие ошибки могут возникнуть при обучении, как их избежать или решить.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kakie-problemy-mogut-vstretitsya-vo-vremya-izucheniya-yazyka-programmirovaniya-c">Какие проблемы могут встретится во время изучения языка программирования C#</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 19 Dec 2023 10:25:24 GMT</pubDate>
      <content:encoded><![CDATA[<p>Всем давно известно, что IT — это высокооплачиваемая и востребованная профессия. Многие из вас стремятся изучить хотя бы один язык программирования. Вы вкладываете душу, но раздражаетесь, потому что не всё понимаете, и в итоге бросаете обучение или просто обращаетесь к ChatGPT, чтобы он всё решил за вас.</p><p>Однако, сейчас я не хочу учить вас, как задавать правильные вопросы ChatGPT или писать свою первую веб-страницу на языке разметки HTML. Я хочу рассказать вам свою историю, которая поможет разобраться в тех проблемах, с которыми я столкнулся, и как их преодолеть.</p><p>Всё началось в далёком 2016 году, когда я, молодой Никита Смирнов, с большим интересом решил создать свой собственный веб-сайт и задался вопросом: “Как его создать?”.</p><p>Как и многие другие люди, я начал искать информацию в интернете, где нашёл множество видеоуроков, которые помогли мне начать понимать, как устроены HTML и CSS. Вначале всё казалось очень сложным и непонятным, но со временем я освоил некоторые атрибуты, такие как &lt;a&gt;, &lt;p&gt;, &lt;table&gt;. Но вместо того, чтобы продолжать обучение, я совершил ошибку — я просто забросил его и стал скачивать готовые шаблоны из интернета. Это сильно повлияло на мой процесс обучения, и со временем я почти потерял свои навыки верстки.</p><p>В наше время, в 2020 году, я наконец решил серьезно заняться программированием. Я больше не хотел создавать стандартные шаблоны для страниц, а хотел заняться чем-то более глобальным. И всё началось с идеи: я хотел запустить свою собственную онлайн-радиостанцию, но не нашёл адекватного и бесплатного программного обеспечения для вещания. В то время компания, производящая такое программное обеспечение, ответила на мой вопрос о языке программирования, на котором они пишут свою программу: “В основном на C#”. Это стало отправной точкой для моего обучения программированию.</p><p>Я выбрал C# и Windows Forms, потому что для новичка это гораздо удобнее, чем создавать пользовательский интерфейс с нуля. К счастью, по C# было много видеоуроков, и мне очень повезло найти друга, который помог мне изучать этот язык. Начал я с основных вещей: с простых типов переменных, таких как int, string, float, и постепенно перешёл к более сложным концепциям, таким как классы. Как только я стал понимать, как работает весь язык, столкнулся с множеством проблем. Одну из таких проблем, с которой стоит познакомиться, можно назвать ошибкой “NullReferenceException” — она будет следовать за вами, как хвост у кошки.</p><p>Какие проблемы я могу выделить в процессе изучения языка C# и какие советы я могу дать вам для преодоления этих проблем:</p><ol><li>Никогда не ленитесь — это является самой главной ошибкой при изучении любых языков программирования, включая C#. Если вы чувствуете усталость, всегда найдите время для отдыха, прогулок или общения с друзьями. Позвольте себе расслабиться и восстановить силы, чтобы вернуться к обучению с новым энтузиазмом.</li><li>Всегда проявляйте интерес к тому, что вы изучаете. Не бойтесь задавать вопросы в интернете или на форумах о возникающих у вас проблемах в коде. Помните, что все в программировании были новичками когда-то, и никто не родился с полным знанием.</li><li>Получайте мотивацию от своих друзей и собственных идей. Фантазируйте и получайте удовольствие от творческого процесса программирования. Позвольте своей фантазии раскрыться и воплотить в жизнь интересные проекты.</li></ol><h2>Ошибки при изучении C#</h2><p>Кроме того, при изучении C# новички часто делают следующие ошибки.</p><h3>Недостаточное понимание основных понятий и принципов программирования</h3><p>Прежде чем погружаться в язык C#, важно знать основы алгоритмов, структур данных и других фундаментальных концепций.</p><p>Рекомендуется начать с изучения общих принципов программирования, прежде чем переходить к языку C#.</p><h3>Неправильное использование объектов и ссылок</h3><p>В C# объекты передаются по ссылке, и неправильное обращение к ссылкам может привести к ошибкам, включая “NullReferenceException”. Важно осознавать, как работают ссылки, и правильно использовать указатели и операторы для предотвращения подобных ошибок.</p><p>К примеру, существует ряд ошибок, которые возникают ежедневно у программистов, они возникают не заметно, ты вроде их не ждёшь и вроде тут всё должно быть правильно, но тут возникают они.</p><p>NullReferenceException возникает, когда вы пытаетесь обратиться к члену объекта или вызвать метод у переменной, которая имеет значение null, то есть не ссылается на конкретный экземпляр объекта. Это означает, что вы пытаетесь обратиться к чему-то, чего на самом деле не существует.</p><p><b>Решение:</b></p><ol><li>Проверьте, является ли переменная, к которой вы обращаетесь, null. Если это так, то нужно либо создать новый объект, либо присвоить переменной ссылку на существующий объект перед использованием.</li><li>Убедитесь, что переменная инициализируется перед использованием. Если она объявлена, но не инициализирована null, присвойте ей значение или создайте новый объект.</li><li>Проверьте, правильно ли вы используете объекты и ссылки. Убедитесь, что вы не пытаетесь обратиться к члену объекта (например, свойству или методу) до его инициализации.</li></ol><h3>IndexOutOfRangeException</h3><p>Также IndexOutOfRangeException возникает, когда пытаетесь получить доступ к элементу массива или коллекции с помощью индекса, который находится вне допустимого диапазона.</p><p><b>Решение:</b></p><p>Проверьте, что используемый индекс находится в допустимом диапазоне элементов массива или коллекции перед доступом к нему.</p><h3>StackOverflowException</h3><p>StackOverflowException возникает, когда стек вызовов переполняется из-за рекурсивного вызова методов без выхода из рекурсии.</p><p><b>Решение:</b></p><ol><li>Проверьте рекурсивную функцию или метод на наличие правильно написанного условия выхода из рекурсии.</li><li>Убедитесь, что рекурсивный вызов прерывается, когда достигнуто нужное состояние или выполнено определенное условие.</li><li>Если у вас глубокая рекурсия и количество вложенных вызовов слишком велико, попробуйте переписать код с использованием итеративного подхода (циклы) вместо рекурсии или используйте Debug.</li></ol><h3>Отсутствие практики и проектов</h3><p>Изучение языка программирования требует практики. После освоения основных концепций C# рекомендуется работать над реальными проектами, чтобы применять полученные знания на практике и развивать навыки программирования.</p><p>Если взять пример со мной, то во время моего обучение, я очень много занимался практикой, практически каждый раз, как только я узнавал, что-то новое, я сразу запускал Visual Studio и экспериментировал. Никто не запрещает брать и экспериментировать ведь это даже придаёт опыт, если читать одни книги и просто учить материал, тогда вам будет очень трудно.</p><p>Моей первой программой был обычный простой калькулятор в консоли, который складывал только два числа, после этого началось развитие дальше, я изучил условные операторы, познакомился с классами, циклами. И уже переходил на Windows Forms, уже начал совмещение языка и интерфейса, получалось если честно не очень. Однако упорство и целеустремлённость дала понять, куда нужно двигаться.</p><p>За период своего обучения я написал программы:</p><figure><img src="https://media.tproger.ru/user-uploads/93981/2023-12-18/6c484fee-5163-4882-974a-bab120b84433.png" alt="" /><figcaption>Первая программа на C# с интерфейсом, автоматизация радиовещания</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/93981/2023-12-18/75741130-bd41-45dd-83c9-91e34eb1caf6.png" alt="" /><figcaption>Скриншотер для windows</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/93981/2023-12-18/2bc84c81-3658-48dc-8415-82a546a5dc50.png" alt="" /><figcaption>Автоматизация отельного бизнеса</figcaption></figure><h3>Нежелание изучать сторонние материалы</h3><p>C# имеет обширное сообщество разработчиков и огромное количество ресурсов для помощи в изучении языка. При изучении C# стоит обратить внимание на онлайн-курсы, книги и форумы, чтобы получить полноту и глубину знаний.</p><p>Я бы хотел выделить, что без определённого учебного плана, вы не сможете продвигаться дальше к более сложному, ведь, как и всегда всё обучение начинается с азов. Я хочу поделиться своим учебным планом, который я создавал себе примерно 3 года назад.</p><h2>Изучение основных понятий и принципов программирования</h2><ol><li>Переменные, типы данных и операторы: изучение различных типов данных, их объявление, присваивание значений и использование операторов для создания выражений.</li><li>Условные операторы и циклы: ознакомление с операторами условия (if, switch) и циклами (for, while, do-while) для управления потоком выполнения программы.</li><li>Функции и методы: понимание концепции функций и методов, их объявление, передача аргументов и возвращаемые значения.</li><li>Массивы и коллекции: изучение создания и использования массивов для хранения и обработки данных, а также ознакомление с различными коллекциями для эффективного управления данными.</li></ol><h2>Изучение C#</h2><ol><li>Синтаксис и структура базовых программ на C#: ознакомление с синтаксисом языка, правилами написания кода и общей структурой программы на C#.</li><li>Классы и объекты: понимание понятий классов и объектов, создание классов, определение полей, методов и свойств, а также использование объектов для работы с классами.</li><li>Наследование: изучение концепций наследования, создание и использование производных классов, переопределение методов и работа с базовыми и производными классами.</li><li>Исключения и обработка ошибок: ознакомление с обработкой исключений и ошибок через блоки try-catch-finally, обработку исключительных ситуаций и создание собственных пользовательских исключений.</li><li>Ввод и вывод данных: изучение различных способов ввода и вывода данных, включая работу с консолью, файлами и сетью.</li></ol><h2>Практика и проекты</h2><ol><li>Решение задач: регулярное решение задач программирования, как ученических, так и сложнее, чтобы закрепить изучаемые концепции.</li><li>Создание простых программ и приложений: начните с небольших проектов, чтобы применить знания и освоить практические навыки разработки на C#. Можно начать с простых консольных приложений, а затем перейти к разработке приложений с графическим интерфейсом пользователя, например Windows Forms.</li><li>Работа с API и базами данных: изучение взаимодействия с внешними сервисами через API, а также работа с базами данных, включая CRUD операции (создание, чтение, обновление, удаление данных).</li></ol><h2>Книги для изучения C#</h2><p>Во время изучения языка программирования C#, мне очень пригодились такие книги как:</p><h3>Программирование на C# для начинающих (2023). Автор: Алексей Васильев</h3><p>Учебник, созданный Алексеем Васильевым, известным автором популярных российских пособий по программированию, представляет базовый уровень азов языка программирования C#. В нем рассматривается история развития языка, его структура, основные типы данных и переменные, операторы, циклы и другие важные концепции, необходимые для работы с ним. Книга также содержит примеры кода с разъяснениями автора, что помогает лучше усвоить материал.</p><p>Этот учебник идеально подходит для начинающих программистов, желающих изучить C# самостоятельно.</p><h3>C# 10 и .NET 6. Современная кроссплатформенная разработка (2023). Автор: Марк Прайс</h3><p>Еще одно руководство, разработанное с учетом функций C# 10 и .NET 6, поможет читателю начать уверенно программировать на C#. С ним вы научитесь создавать многофункциональные веб-интерфейсы с помощью Blazor, Razor Pages, шаблона Model-View-Controller (MVC) и других функций ASP.NET Core. Поймете, как интегрировать и обновлять базы данных в своих приложениях, используя модели Entity Framework Core. Научитесь создавать сервисы с использованием Web API и Minimal API.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стартует батл языков программирования 2023</title>
      <link>https://tproger.ru/articles/startuet-batl-yazykov-programmirovaniya-2023</link>
      <comments>https://tproger.ru/articles/startuet-batl-yazykov-programmirovaniya-2023?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/startuet-batl-yazykov-programmirovaniya-2023</guid>
      <description><![CDATA[<p>Стартует турнир за звание лучшего языка программирования в 2023 году среди читателей Tproger. Кто же победит в этом году?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/startuet-batl-yazykov-programmirovaniya-2023">Стартует батл языков программирования 2023</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Язык Си]]></category>
      <category><![CDATA[BASIC]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Pascal]]></category>
      <category><![CDATA[Dart]]></category>
      <category><![CDATA[Лучший язык 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 18 Dec 2023 08:27:48 GMT</pubDate>
      <content:encoded><![CDATA[<p>Подходит к концу 2023 год, а это значит, пора подвести его итоги и запустить традиционный батл за звание лучшего языка программирования на Tproger.</p><p>Мы уже проводили батл в прошлых <a href="https://tproger.ru/articles/battl-jazykov-programmirovanija-2022-zavershilsja">2020</a>, <a href="https://tproger.ru/articles/battl-jazykov-programmirovanija-2021-zavershilsja">2021</a> и <a href="https://tproger.ru/articles/battl-jazykov-programmirovanija-2022-zavershilsja-2">2022</a> годах: первые два раза в голосовании победил Python, а в прошлом году — C#.</p><p>Вот, кто поборется за звание лучшего языка в 2023 году:</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2023-12-18/7e3c300f-7dab-486d-af02-360ba8dc5952.png" alt="" /></figure><p>Правила батла остаются прежними:</p><ol><li>В батле участвует 16 языков программирования.</li><li>Ежедневно соревнуются две пары.</li><li>За любимый язык можно проголосовать в течение 24 часов.</li><li>Пары составляются рандомно, так что выбирайте язык, который субъективно нравится больше.</li><li>В финале мы определим тройку победителей.</li><li>Старт — 19 декабря, финал — 26 декабря.</li></ol><p>Примечание Сохраните эту запись в закладки: сюда мы добавим ссылки на все раунды батла во время голосования.</p><ol><li><a href="https://tproger.ru/articles/nachalsya-battl-yazykov-programmirovaniya-2023">Первый раунд</a></li><li><a href="https://tproger.ru/articles/vtoroj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Второй раунд</a></li><li><a href="https://tproger.ru/articles/tretij-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Третий раунд</a></li><li><a href="https://tproger.ru/articles/chetvyortyj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Четвёртый раунд</a></li><li><a href="https://tproger.ru/articles/pyatyj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Пятый раунд</a></li><li><a href="https://tproger.ru/articles/westoj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Шестой раунд</a></li><li><a href="https://tproger.ru/articles/polufinal-bitvy-yazykov-programmirovaniya-v-2023-godu">Полуфинал</a></li><li><a href="https://tproger.ru/articles/final-bitvy-yazykov-programmirovaniya-v-2023-godu">Финал</a></li><li><a href="https://tproger.ru/articles/batl-yazykov-programmirovaniya-2023-zaverwilsya">Результаты</a></li></ol><p>Также подпишитесь на тэг <a href="https://tproger.ru/tag/toplang2023">Лучший язык 2023</a>. Тогда новые раунды батла появятся в вашей личной ленте, а вам будут приходить уведомления об их появлении.</p><p>Старт уже завтра — 19 декабря в 11:00 МСК. Следите, участвуйте, голосуйте!</p>]]></content:encoded>
    </item>
    <item>
      <title>IT-задачи о кофе, switch и шумах</title>
      <link>https://tproger.ru/articles/it-zadachi-o-kofe-switch-i-wumah</link>
      <comments>https://tproger.ru/articles/it-zadachi-o-kofe-switch-i-wumah?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Бобкова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/it-zadachi-o-kofe-switch-i-wumah</guid>
      <description><![CDATA[<p>Собрали самые каверзные задачи на тему программирования по Go, C# и QA, которые удивили инженеров Ozon Tech, и делимся решениями.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/it-zadachi-o-kofe-switch-i-wumah">IT-задачи о кофе, switch и шумах</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Задачи повышенной сложности]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 12 Dec 2023 08:51:26 GMT</pubDate>
      <content:encoded><![CDATA[<p>В ноябре Ozon Tech и Tproger провели<a href="https://ozontechchallenge.tproger.ru/"> конкурс</a>, в котором участникам не нужно было ничего решать, а наоборот, прислать свои задачи команде инженеров.</p><p>Разобрали решения четырёх лучших задач и предлагаем вам тоже подумать над вариантами.</p><h2>1. Go: нужно ли использовать внешний пул?</h2><p>Дано:</p><ul><li>Master-slave postgres стенд (репликация асинхронная посредством patroni);</li><li>Внешний пул коннекшенов (pgpool/pgbouncer), приконекченный к мастеру.</li><li>Одно/несколько приложений с внутренним реализованным пулером, работающие с внешним пулом из предыдущего пункта.</li></ul><p>Вопросы:</p><ul><li>Не добавляет ли точек отказа наличие внешнего пулера, ведь он не реплицирован как postgres, и в случае его неработоспособности упадёт всё? Как и где архитектурно предусмотреть fallback-механизм для такого?</li><li>Есть ли вообще смысл использовать внешний пул? Если да, то какой, при условии что количество коннекшенов с реплик сервисов (даже с учётом разумной работы автоскейлера, если он есть) разумно и не превосходит значение в конфигурации postgres?</li><li>Предположим, что мы решили отказаться от внешнего пула. На кластере postgres произошёл failover (мастер переключился на реплику). Как быстро приложения переподключатся к новому мастеру? Возможна ли ситуация, что в используемых вами C# и Go пулерах не произойдёт инвалидация коннекшена?</li></ul><p>Автор задачи: Иосиф Петрович</p><p>Если вы хотите сначала решить задачу самостоятельно, то не открывайте решение инженеров сразу.</p><h2>2. C#: сколько кофе пьют коллеги?</h2><p>Разработайте систему для учёта потребления кофе в офисе и автоматического пополнения запаса кофейных зёрен. Система должна учитывать изменение потребительской активности, включая возрастающее потребление при завершении спринтов и снижающееся потребление во время праздничных дней.</p><p>Автор задачи: Александр Катков</p><h2>3. Go: когда лучше использовать оператор switch, а когда if / else?</h2><p>Абстрактный алгоритм в Go можно реализовать оператором switch на четыре варианта событий или четырьмя последовательными if-else. Когда целесообразно сделать через switch и чем тут Go отличается от остальных — С, Java, Kotlin и т. д.?</p><p>Автор задачи: Денис Пащенко</p><p>По его статистике только 10% кандидатов отвечают на вопрос правильно.</p><h2>4. QA: откуда шумы в ШУМе?</h2><p>Когда-то я работал в около-космической сфере. Мы разрабатывали ШУМ — широкополосный усилитель мощности СВЧ. Прибор состоит из трёх модулей:</p><ul><li>алюминиевый корпус, покрытый никелем с впаянными в него разъёмами;</li><li>СВЧ-часть на микрополосках с мощным усилительным транзистором;</li><li>умная система питания с прошивками ПО.</li></ul><p>Я проверял прибор в сборке. Прибор включали на половину мощности, нагревали до +90, охлаждали до -70, трясли сутками, делали вакуум, давление в 10 атмосфер, проверяли на влагостойкость и т. д.</p><p>По итогам проверки приборы показали себя отлично. Пришло время контрольной проверки на максимальную мощность, и тут в сигнале появился шум (паразитный сигнал). Непонятно, откуда он возникал, но этим была поражена вся партия приборов последней сборки.</p><p>Вопрос: как и откуда возникал этот сигнал, и какие действия мы предприняли, чтобы его найти?</p><p>Для меня эта задача оказалась очень сложной, так как пришлось применить все свои знания в материаловедении, микроэлектронике и СВЧ.</p><p>Автор задачи: Илья Баранов</p><p>На время конкурса участники попали в зазеркалье королевства Nozo, где всё происходит наоборот: код пишется слева направо, а тестирование начинается до разработки. Чтобы выбраться из зазеркалья, участники бросили вызов инженерам Ozon Tech и устроили им своё техсобеседование.</p><p>На конкурс прислали больше 90 задач по Go, C# и QA. Мы поделились четырьмя самыми каверзными. Если вы хотите решить задачи остальных участников, переходите <a href="https://ozontechchallenge.tproger.ru/">на сайт конкурса.</a></p><p>Хотя все задачи финалистов были увлекательными, победить и действительно выпить кофе с лидом команды инженеров удалось автору задачи по QA про шумы. Остальные финалисты получили мерч от Ozon Tech. А сколько задач решили вы?</p>]]></content:encoded>
    </item>
    <item>
      <title>Как появился С# и при чём тут конфликт Sun и Microsoft</title>
      <link>https://tproger.ru/articles/kak-poyavilsya-s-i-pri-chyom-tut-konflikt-sun-i-microsoft</link>
      <comments>https://tproger.ru/articles/kak-poyavilsya-s-i-pri-chyom-tut-konflikt-sun-i-microsoft?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-poyavilsya-s-i-pri-chyom-tut-konflikt-sun-i-microsoft</guid>
      <description><![CDATA[<p>Рассказали, как появился язык программирования C# после неудачного сотрудничества Microsoft и Sun и долгих войн между компаниями.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-poyavilsya-s-i-pri-chyom-tut-konflikt-sun-i-microsoft">Как появился С# и при чём тут конфликт Sun и Microsoft</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[История IT]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Oracle]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 29 Aug 2023 09:55:18 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рассказали, как появился язык программирования C# после неудачного сотрудничества Microsoft и Sun и долгих войн между компаниями.</p><h2>Конфликт Sun и Microsoft</h2><p>Sun выпустила Java в 1995 году, сделав главным девизом языка “Компилируй один раз, запускай где угодно”. Такие амбиции заставляли Sun добиться от всех существующих ОС поддержки Java “из коробки”. В числе компаний, с которыми Sun предстояло договориться о поддержке, была Microsoft.</p><p>Язык показался Microsoft довольно перспективным, поэтому компании приступили к совместной разработке IDE только для Java — Visual J++. Также Microsoft разработала виртуальную машину Windows Java (JVM), на которой Java работала быстрее, чем на других ОС, и которая поддерживала несколько специфичных для Windows команд.</p><p>Разработки оказались настолько успешными, что Java работала быстрее на компьютере Windows стоимостью 1000 долларов, чем на компьютере Sun стоимостью 5000 долларов.</p><p>Однако у виртуальной машины были и недостатки: она не поддерживала удаленный вызов методов (RMI) или собственный интерфейс Java (JNI). Это не устраивало Sun.</p><p>Во-первых, это противоречило подходу Java “Компилируй один раз, запускай где угодно”. Программы, написанные на Java для Windows, не могли запускаться на станциях и серверах самой Sun.</p><p>Вышло так, что экосистема Sun рушилась, и компании стали перетягивать одеяло первенства на себя. Microsoft действительно сделала многое для того, чтобы Java стала удобным языком программирования, но и Sun не собиралась отступать от своих принципов.</p><p>Во-вторых, в Sun хотели, чтобы у Java была только одна среда выполнения — их собственная. В компании хотели сохранить контроль над развитием языка программирования, но Microsoft попросту не могла сделать реализацию достаточно сложной спецификации на 100% совместимой с другими системами и платформами, это невозможно.</p><p>Хэл Беренсон, бывший сотрудник Microsoft, рассказывал, что решение компании было отчасти вынужденным: было необходимо, чтобы Java поддерживала всю экосистему Windows. Sun не хотела идти на уступки и настаивала на том, чтобы Microsoft внедряла только их решения, а не собственные. В конце концов, Sun подала в суд.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2023-08-29/717b4d22-2966-4fe6-9c56-b7a78d981339.png" alt="" /></figure><p>Тогда в Microsoft просто отказались от Java. Не было никакого смысла создавать собственные решения, сталкиваясь с постоянными ограничениями. Если бы в Microsoft продолжили разработку продуктов для Java, те бы ничем не отличались от решений Sun. Тем более, пользователь мог самостоятельно выбрать и установить любую симпатичную ему IDE и пользоваться ей.</p><h2>Как появился C# — ответ Java</h2><p>Восстановить отношения с Java уже не представлялось возможным, но Microsoft всё ещё нравилась идея языка, программы на котором можно было бы запустить на любой платформе.</p><p>Кроме того, некоторые сотрудники уже пытались разработать подобные языки, и результатами этих экспериментов стали Common Language Runtime и .NET.</p><p>Microsoft решили продолжить заниматься инновациями в сфере языков программирования. Сперва они внедрили поддержку C++ и Visual Basic (VB) в .NET, и на VB были сделаны большие ставки. В компании ожидали, что именно VB станет самым популярным языком программирования в .NET-среде.</p><p>Параллельно Microsoft обратилась к Андерсу Хейлсбергу и попросила его создать новый язык, который подходил бы под это определение. Этим языком программирования и стал C#. Спустя время оказалось, что C# так хорош, что уверенно обогнал Visual Basic по популярности в .NET. Конечно, этому способствовали и минусы самого Visual Basic.</p><p>Любопытный факт Изначально Microsoft хотела, чтобы C# работал только на их собственных ОС, и язык должен был быть только для Windows.</p><p>Спустя время компания обнаружила, что C# действительно превосходит Java в некоторых аспектах, но Java всё же удалось стать королевой кросс-платформенности. Microsoft задумался и решил поступить так же, пойдя навстречу другим операционным системам типа UNIX. Это решение принял Сатья Наделла, который сейчас является СЕО Microsoft.</p><p>Оказалось, что С# всё же опоздал на гонку вооружений, и догнать Java в плане кросс-платформенности языку всё же не удалось. И неизвестно, удастся ли ещё когда-нибудь.</p><p>Хэл Беренсон признаётся, что гонка Java и C# случилась не из-за стремления создать лучший язык программирования. Это был вопрос развития экосистем: Sun встала в позу и не позволила Microsoft создавать своё ПО для Java, а компания Гейтса нуждалась в подобных решениях. Создание и развитие C# стали вопросами поддержки инфраструктуры, и цели “убить” Sun у Microsoft не было.</p><h2>Чем всё закончилось</h2><p>Sun не отличалась эффективным менеджментом. Спустя время компания обнаружила, что Java не используют на настольных ПК и снова подала в суд на Microsoft, обязав ту распространять Java в течение следующих 10 лет.</p><p>У Microsoft к тому времени было достаточно собственных проблем, поэтому они согласились на условия Sun. Срок дистрибьюции Java ещё не подошёл к концу, как Sun выкупила компания Oracle. Когда срок соглашения истёк, ни Oracle, ни Microsoft не были заинтересованы в продвижении Java, и долгие войны подошли к концу.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2023-08-29/6d8f8396-cf79-40ba-9d30-3a9cbad8e972.png" alt="" /></figure><p>Согласно рейтингу TIOBE, в августе 2023 года Java опережает C# в популярности: 10% против 7%.</p>]]></content:encoded>
    </item>
    <item>
      <title>Дорожная карта: из C# Middle разработчика в Senior C#</title>
      <link>https://tproger.ru/articles/dorozhnaya-karta-iz-c-middle-razrabotchika-v-senior-c-erid-ljn8kvpnf</link>
      <comments>https://tproger.ru/articles/dorozhnaya-karta-iz-c-middle-razrabotchika-v-senior-c-erid-ljn8kvpnf?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Екатерина Соколова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/dorozhnaya-karta-iz-c-middle-razrabotchika-v-senior-c-erid-ljn8kvpnf</guid>
      <description><![CDATA[<p>Как вырасти из Middle C# программиста в уверенного сеньора с нужным багажом знаний и навыков? Составили роадмап для будущего Senior C# developer.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/dorozhnaya-karta-iz-c-middle-razrabotchika-v-senior-c-erid-ljn8kvpnf">Дорожная карта: из C# Middle разработчика в Senior C#</a>»</p>]]></description>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Функциональный C#]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 18 Aug 2023 07:10:13 GMT</pubDate>
      <content:encoded><![CDATA[<p>Путь от Middle C# до сеньора похож на переходный возраст: нужно становиться самостоятельным и брать на себя всё больше ответственности. Для тех, кто готов шагнуть во «взрослый» карьерный этап и стать Senior C# разработчиком, мы совместно с экспертами <a href="https://ozon.ru/t/weAY2L8">курсов для Middle-специалистов Route 256 от Ozon Tech</a> сделали роадмап. Держите дорожную карту перехода C# Middle-разработчика в статус Senior.</p><ul><li><a href="https://tproger.ru/#part1">Чем Senior отличается от Middle</a></li><li><a href="https://tproger.ru/#part2">Что необходимо, чтобы стать Senior C# разработчиком</a>Технические навыкиПлатформа .NET и базы данныхПаттерны проектированияМикросервисыКонтейнеризация и облачные решенияCI/CD и тестированиеВидение проектаЛичностные качестваЛюбовь к «чистоте» кодаКоммуникативные навыкиНавыки ментораРабота с сообществом</li><li><a href="https://tproger.ru/#part15">Полезные ресурсы</a></li><li><a href="https://tproger.ru/#part16">Вместо эпилога</a></li></ul><h2>Чем Senior отличается от Middle</h2><p>Middle C# developer — это разработчик, который хорошо освоил язык и платформу .NET, понимает процессы разработки на проекте, умеет пользоваться всеми необходимыми инструментами и может справиться с повседневными задачами практически без помощи старших коллег.</p><p>У Senior C# разработчика больше опыта, экспертизы и потому больше ответственности. Он глубоко понимает архитектуру, устройство фреймворков и библиотек, видит технические риски и знает, как их предотвратить. А ещё сеньор умеет организовать работу над проектом: сформулировать и раздать задачи, следить за разработкой и сроками и презентовать результат. Как вы уже поняли, сеньор должен уметь не только программировать, но и управлять проектами и людьми.</p><h2>Что необходимо, чтобы стать Senior C# developer</h2><p>Чтобы начать путь от мидла к сеньору, необходимо развиваться в двух направлениях: прокачивать технические навыки и личностные качества. Поэтому мы разделили дорожную карту на две части и структурировали и подробно раскрыли оба направления.</p><h3>Технические навыки</h3><h4>Платформа .NET и базы данных</h4><p>То, что C# Middle разработчик воспринимает как функциональность языка C#, сеньор понимает глубже — как возможности для построения сложных систем.</p><p>Старший специалист в деталях знает, как работает многопоточность, асинхронность и чем они отличаются друг от друга. А ещё — как применять примитивы синхронизации потоков (lock, Monitor, Mutex, Semaphore и SemaphoreSlim), зачем нужен ThreadPool, какие операции лучше выполнять синхронно, а какие асинхронно (CPU bound, IO bound), что такое контекст синхронизации, CancellationToken и в каких случаях может пригодится ValueTask.</p><p>Сеньор точно знает, какие структуры данных лучше использовать и почему, как посчитать сложность алгоритма и измерить эффективность выбранного подхода. Для этого на уровне мидл необходимо уверенно освоить способ Big O Notation, алгоритмы сортировки и поиска элементов в коллекции, а также иметь чёткое представление, в чём разница между Array и List, как устроен Dictionary и почему он работает быстрее чем List, что такое коллизии в Dictionary и как он взаимодействует с ними.</p><p>Не менее важно для Senior C# developer уметь работать с базами данных. Старший специалист не просто знает, как писать запросы и в чём разница между SQL и NoSQL. Он может обоснованно выбрать ту или иную базу данных для решения конкретной задачи, построить план запросов и правильно их прочитать.</p><p>Сеньору следует знать, что такое уровни изоляции транзакций и какие проблемы они решают, как нормализовать данные и какие индексы необходимо использовать для ускорения выборки данных. А ещё иметь понимание, что такое ACID и BASE, теорема CAP, шардинг и вертикальное масштабирование.</p><h4>Паттерны проектирования</h4><p>Старшему специалисту пригодится умение работать с паттернами проектирования. У сеньора должен быть навык выявления необходимого и достаточного паттерна проектирования для конкретной ситуации, чтобы не допустить «кода ради кода».</p><p>Senior C# разработчику необходимо понимать, как следовать принципам SOLID, DRY, KISS, YAGNI и GRASP. А также знать, как и когда применять архитектурные паттерны, например, SOA, Microservices, MVC, MVVM, Client-Server, Broker, и контролировать использование антипаттернов, таких как Spaghetti code, Accidental complexity, Lava flow, God Object, Dependency hell.</p><p>Чтобы научиться обдуманно подходить к использованию паттернов, рекомендуем ресурс <a href="https://www.dofactory.com/net/design-patterns">dotfactory</a> — здесь вы найдёте подборку паттернов проектирования на C# с подробным описанием и примерами реализации.</p><h4>Микросервисы</h4><p>Senior C# разработчику нужно знать, что такое микросервисы и уметь их строить. Как проектировать сервис, как делить его на слои, чем отличается многослойная архитектура от чистой, что такое low coupling и high cohesion, как обеспечивать консистентность данных — всё это не должно вызывать вопросов.</p><p>Чтобы прокачаться до уровня сеньора, необходимо подтянуть следующие темы:</p><ul><li>межсервисное взаимодействие: HTTP call, Message Broker (AMQP) и gRPC;</li><li>подходы микросервисных решений: CQRS, Event Sourcing, Circuit Breaker, Saga pattern, Sidecar, Database per Service, Shared Database per Service, API Gateway;</li><li>безопасность микросервисов: Basic Authentication, JWT, ASP.NET Core Identity, OpenID Connect или OAuth.</li></ul><p>А также разобраться с RESTful-сервисами, stateless и уровнями зрелости дизайна REST API.</p><p>Чтобы научиться правильно строить микросервисную архитектуру, рекомендуем прочитать книги Криса Ричардсона <a href="https://www.labirint.ru/books/707677/">«Микросервисы. Паттерны разработки и факторинга»</a> и Сэма Ньюмена <a href="https://www.labirint.ru/books/937994/">«Создание микросервисов»</a>.</p><h4>Контейнеризация и логирование</h4><p>Сегодня сложно представить проект, в котором не используются контейнеризация и методы оркестрации контейнеров. Поэтому сеньору важно знать, что такое Docker, зачем использовать Kubernetes, и разбираться в технологиях Docker swarm, Nomad, Consul.</p><p>Немаловажной частью работы над сложными системами является мониторинг и алертинг компонентов. В этом сеньору пригодится навык настройки логирования таким образом, чтобы оно не перегружало инфраструктуру ненужной информацией. Здесь помогут навыки работы с Grafana, ELK-стеком, Prometheus, OpenTelemetry.</p><h4>CI/CD и тестирование</h4><p>Ещё сеньору пригодятся знания CI/CD-процессов и умение их использовать, чтобы выпускать более качественный продукт. Сеньор должен понимать, какие критерии проверки необходимо включить в CI/CD-процесс, какие использовать тесты — unit или integration, и какой процент покрытия тестами удовлетворительный для конкретного проекта.</p><p>Сеньор может успешно выстроить CI/CD-процесс на проекте. Он не забывает об автоматизации билда, Self-testing сборке, о том, что каждый commit в master должен быть сбилженным, билды — быстрыми, тестирование на pre-prod среде — максимально приближенное к production, а деплой — автоматизированным.</p><p>Старший специалист уверен в том, что находить дефекты в продукте — прежде всего задача разработчиков, а не тестировщиков. Именно разработчики отвечают за качество и функционал кода. Чтобы подтянуть свои навыки в тестировании, необходимо изучить библиотеки MSTest, xUnit, NUnit, Moq, NSubstitute, а также разобраться в разнице между Dummy, Fake, Stubs, Spies и Mock объектами.</p><h4>Видение проекта</h4><p>Старший разработчик C# понимает, как устроен проект в целом, и старается принести своими решениями максимальную выгоду бизнесу. Он видит проблемы и осознаёт, как применение того или иного подхода повлияет на проект и его компоненты. Хороший Senior C# на уровне рефлексов знает, какое решение правильное, а какое нет, — опыта за плечами хватает.</p><p>Ещё один необходимый скилл для сеньора — находить точки интеграции компонентов с другими командами, системами. Зачастую некорректная интеграция может критически сказаться на разработке и принести много проблем и рисков.</p><p>Также Senior C# программисту важно понимать изолированный контекст компонентов системы, чтобы они не становились большими и перегруженными. И в этом помогут знания DDD-подхода — рекомендуем изучить.</p><h3>Личностные качества</h3><h4>Любовь к «чистоте» кода</h4><p>Читаемый код с понятной архитектурой и логикой, который без труда могут разобрать другие разработчики — вот, к какому коду следует стремиться Middle C# разработчику, чтобы вырасти до старшего специалиста.</p><p>При этом на уровне старшего программиста нужно не только заботиться о чистоте и простоте своего кода, но и учить этому своих младших коллег. По мере возможности сеньору стоит погружаться технически не только в свои задачи, но и в задачи коллег и тщательно проводить код-ревью.</p><h4>Коммуникативные навыки</h4><p>Разработчик сеньор часто ведёт проекты самостоятельно. Он умеет обрабатывать ТЗ, разбивать его на мелкие задачи и выстраивать план работ. Сеньор знает, кому из специалистов и что делегировать, и какие задать вопросы коллегам для прояснения ТЗ, чтобы задачи были выполнены корректно и в срок.</p><p>А ещё Senior C# — хороший командный игрок. Он правильно выстраивает коммуникацию, организовывает процесс работы и знает, как избегать конфликтных ситуаций. Научиться этому поможет книга Дж. Ханк Рейнвотера <a href="https://www.labirint.ru/books/497448/">«Как пасти котов. Наставление для программистов, руководящих другими программистами»</a>.</p><h4>Навыки ментора</h4><p>Одна из задач сеньора — помогать младшим специалистам развиваться и расти. У сеньора достаточно опыта за плечами и набитых шишек, поэтому он точно знает, как достичь цели или решить задачу быстрее и с меньшими потерями.</p><p>Менторский опыт важно приобретать уже на уровне мидл. Станьте наставником для своих младших коллег или присоединитесь к сообществу IT-менторов. Это поможет прокачать лидерские, преподавательские навыки, эмпатию и эмоциональный интеллект. Нелишним будет прочесть книги Гарвардской школы бизнеса <a href="https://www.labirint.ru/books/363439/">«Делай как я! Руководитель как играющий тренер»</a> и Ларри Кинга <a href="https://www.labirint.ru/reviews/goods/476482/">«Как разговаривать с кем угодно, когда угодно и где угодно»</a>.</p><h4>Работа с сообществом</h4><p>Не ограничивайтесь только рабочими задачами и находите время делиться опытом и знаниями с коллегами. Вклад в комьюнити шарпистов может быть хорошим толчком к развитию C# Middle разработчика.</p><p>Устраивайте семинары в своей команде, пишите полезные статьи на Tproger, Habr или англоязычных Medium или Hackernoon, выступайте с докладами, — например, ребята из dotnet.ru регулярно проводят оффлайн- и онлайн-встречи и всегда открыты к сотрудничеству.</p><p>Публикуйте свои pet-проекты на Github или участвуйте в open-source проектах на площадке. Такой опыт даст возможность поработать со специалистами из разных стран и областей разработки. И, возможно, именно вам удастся внести свой вклад в следующий популярный фреймворк или новую технологию.</p><h2>Полезные ресурсы</h2><p>Чтобы путь от Middle уровня C# до старшего разработчика был максимально коротким, следует запастись полезными ресурсами.</p><p>Кроме тех книг, которые мы рекомендовали по ходу дорожной карты, стоит прочесть также:</p><p>Также советуем подписаться на YouTube-канал сообщества разработчиков .NET <a href="https://www.youtube.com/@DotNetRu">DotNetRu</a> и авторский канал <a href="https://www.youtube.com/@nickchapsas">Nick Chapsas</a>, на котором регулярно выходят интересные разборы проблем C# разработчиков и обсуждаются новые возможности .NET.</p><p>А ещё рекомендуем читать новостной ресурс <a href="https://www.infoq.com/dotnet/">InfoQ</a> о разработке программного обеспечения и регулярно заглядывать на сайт глобального онлайн-сообщества шарпистов <a href="https://www.c-sharpcorner.com/">C-Sharpcorner</a>, где разработчики обмениваются знаниями и опытом.</p><h2>Вместо эпилога</h2><p>Чтобы быстро освоить базис дорожной карты, рекомендуем пройти курс для Middle-специалистов Route 256 от Ozon Tech <a href="https://ozon.ru/t/weAY2L8">«Продвинутая разработка микросервисов на C#»</a>.</p><p>Программа рассчитана на разработчиков с опытом от 3 лет. Преподаватели и тьюторы — инженеры Ozon Tech. За два месяца вы сможете подтянуть скилы и освежить знания. На курсе вы научитесь создавать и настраивать микросервисы на ASP.NET Core, эффективно работать с асинхронным кодом, проектировать сложные распределенные системы, создавать REST и gRPC API и другое.</p><p><a href="https://ozon.ru/t/weAY2L8">Учиться вместе с Ozon Tech</a></p><p>Надеемся, статья оказалась для вас полезной. Остались вопросы? Задайте их в комментариях.<br />Реклама ООО «Озон технологии» LjN8KVpnf</p>]]></content:encoded>
    </item>
    <item>
      <title>Рейтинг лучших программистов в мире 2023: результаты</title>
      <link>https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-rezultaty</link>
      <comments>https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-rezultaty?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-rezultaty</guid>
      <description><![CDATA[<p>Линус Торвальдс получил звание лучшего программиста в мире. Второе место в батле занял Бьёрн Страуструп, а третье место — Андерс Гейлсберг.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-rezultaty">Рейтинг лучших программистов в мире 2023: результаты</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Pascal]]></category>
      <category><![CDATA[Лучший программист 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 02 Aug 2023 08:06:31 GMT</pubDate>
      <content:encoded><![CDATA[<p>Битва за звание лучшего программиста в мире 2023 подошла к концу. Вот тройка победителей битвы по <a href="https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-final/">результатам финального голосования</a>:</p><ol><li>Линус Торвальдс, создатель Linux — первое место. Торвальдс обошёл своего главного противника, Бьёрна Страуструпа, всего на 29 голосов. Он стал лучшим программистом в 2023 году.</li><li>Бьёрн Страуструп, создатель С++, занимает второе место в нашем голосовании в 2023 году, уступив Торвальдсу всего 13% голосов в финальном голосовании.</li><li>Андерс Гейлсберг, создатель Turbo Pascal, Delphi, C# и TypeScript — занимает третье место, набрав 156 голосов против 49 голосов за Билла Гейтса в финальном голосовании.</li></ol><p>Напоминаем, что турнирная таблица составлялась случайным образом, а лучший язык программирования выбирается не по его функциональности. В голосовании всё решала только народная любовь.</p><p>Поздравляем Линуса Торвальдса — между прочим, первого маскота Tproger — с заслуженной победой!</p><figure><img src="https://media.tproger.ru/uploads/2023/08/74296f4f-e05d-4648-a120-cf8ca5ac6f98.png" alt="" /></figure>]]></content:encoded>
    </item>
    <item>
      <title>Рейтинг лучших программистов в мире 2023: финал</title>
      <link>https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-final</link>
      <comments>https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-final?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-final</guid>
      <description><![CDATA[<p>За звание лучшего программиста в мире сразятся Линус Торвальдс и Бьёрн Страуструп, а за третье место — Андерс Гейлсберг и Билл Гейтс.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-final">Рейтинг лучших программистов в мире 2023: финал</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Pascal]]></category>
      <category><![CDATA[Лучший программист 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 01 Aug 2023 08:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Начинается финальное голосование за звание лучшего программиста в мире.</p><p>За первое и второе место будут бороться:</p><ul><li>Бьёрн Страуструп, создатель С++,</li></ul><ul><li>Линус Торвальдс, создатель Linux.</li></ul><p>За третье и четвёртое место будут бороться:</p><ul><li>Андерс Гейлсберг, создатель Turbo Pascal, Delphi, C# и TypeScript,</li></ul><ul><li>Билл Гейтс, сооснователь Microsoft.</li></ul><p>Выберите из них, кого вы лично считаете лучшим программистом в мире, но помните: не ориентируйтесь на их популярность, востребованность или устоявшиеся топы лучших программистов.</p><p>В этом турнире важны только народная любовь и ваша субъективная оценка.</p><p>Подробнее об условиях батла читайте в <a href="https://tproger.ru/articles/startuet-batl-luchwih-programmistov-mira-2023/">анонсе</a>.</p><p>По итогам полуфинала Бьёрн Страуструп, создатель С++, обогнал Билла Гейтса.</p><p>Также Линус Торвальдс, создатель Linux, обошёл Андерса Гейлсберга, создателя Turbo Pascal, Delphi, C# и TypeScript.</p><p>Результаты прошлого раунда можно посмотреть <a href="https://tproger.ru/articles/final-bitvy-jazykov-programmirovanija-2022/">здесь</a>.</p><p>Подпишитесь на тег <a href="https://tproger.ru/tag/luchshij-programmist-2023/">Лучший программист 2023</a> и следите за обновлениями в личной ленте, чтобы не пропустить итоги битвы.</p><p><b>Турнирная таблица:</b></p><figure><img src="https://media.tproger.ru/uploads/2023/08/6c604ac5-3fcb-4100-88c8-d922b79f297e.png" alt="" /></figure><p>Голосование продлится до завтра, 2 августа 2023 года, до 11 часов по московскому времени.</p>]]></content:encoded>
    </item>
    <item>
      <title>Рейтинг лучших программистов в мире 2023: полуфинал</title>
      <link>https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-polufinal</link>
      <comments>https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-polufinal?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-polufinal</guid>
      <description><![CDATA[<p>В полуфинале батла за звание лучшего программиста в мире сразятся Билл Гейтс и Бьёрн Страуструп, а также Андерс Гейлсберг и Линус Торвальдс.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-polufinal">Рейтинг лучших программистов в мире 2023: полуфинал</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Лучший программист 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 31 Jul 2023 08:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сегодня за звание лучшего программиста в мире будут бороться две пары.</p><p>Первая пара:</p><ul><li>Бьёрн Страуструп, создатель С++,</li><li>Билл Гейтс, сооснователь Microsoft.</li></ul><p>Вторая пара:</p><ul><li>Андерс Гейлсберг, создатель Turbo Pascal, Delphi, C# и TypeScript,</li></ul><ul><li>Линус Торвальдс, создатель Linux.</li></ul><p>Выберите из них, кого вы лично считаете лучшим программистом в мире, но помните: не ориентируйтесь на их популярность, востребованность или устоявшиеся топы лучших программистов.</p><p>В этом турнире важны только народная любовь и ваша субъективная оценка.</p><p>Подробнее об условиях батла читайте в <a href="https://tproger.ru/articles/startuet-batl-luchwih-programmistov-mira-2023/">анонсе</a>.</p><p>По итогам шестого раунда Линус Торвальдс, создатель Linux, с большим отрывом обошёл Никлауса Вирта, создателя языка Паскаль.</p><p>Также Стив Возняк, программист и сооснователь Apple, проиграл Биллу Гейтса с небольшой разницей в голосах.</p><p>Результаты прошлого раунда можно посмотреть <a href="https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-raund-6/">здесь</a>.</p><p>Подпишитесь на тег <a href="https://tproger.ru/tag/luchshij-programmist-2023/">Лучший программист 2023</a> и следите за обновлениями в личной ленте, чтобы не пропустить финал битвы.</p><p><b>Турнирная таблица:</b></p><figure><img src="https://media.tproger.ru/uploads/2023/07/187232be-ca14-4b81-86fc-75cb5441ac73.png" alt="" /></figure><p>Голосование продлится до завтра, 1 августа 2023 года, до 11 часов по московскому времени.</p>]]></content:encoded>
    </item>
    <item>
      <title>Рейтинг лучших программистов в мире 2023: раунд 5</title>
      <link>https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-raund-5</link>
      <comments>https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-raund-5?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-raund-5</guid>
      <description><![CDATA[<p>В пятом раунде батла за звание лучшего программиста в мире встретятся Павел Дуров и Бьёрн Страусберг, а также Сергей Брин и Андерс Гейлсберг.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-raund-5">Рейтинг лучших программистов в мире 2023: раунд 5</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[ВКонтакте]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Pascal]]></category>
      <category><![CDATA[Павел Дуров]]></category>
      <category><![CDATA[Лучший программист 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 29 Jul 2023 08:00:55 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сегодня за звание лучшего программиста в мире будут бороться две пары.</p><p>Первая пара:</p><ul><li>Павел Дуров, создатель Вконтакте и Telegram,</li></ul><ul><li>Бьёрн Страуструп, создатель С++.</li></ul><p>Вторая пара:</p><ul><li>Сергей Брин, соучредитель Google,</li></ul><ul><li>Андерс Гейлсберг, создатель Turbo Pascal, Delphi, C# и TypeScript.</li></ul><p>Выберите из них, кого вы лично считаете лучшим программистом в мире, но помните: не ориентируйтесь на их популярность, востребованность или устоявшиеся топы лучших программистов.</p><p>В этом турнире важны только народная любовь и ваша субъективная оценка.</p><p>Подробнее об условиях батла читайте в <a href="https://tproger.ru/articles/startuet-batl-luchwih-programmistov-mira-2023/">анонсе</a>.</p><p>По итогам четвёртого раунда Линус Торвальдс, создатель Linux, обогнал ChatGPT с огромным отрывом — за него проголосовали 92% пользователей.</p><p>Также Стив Возняк, программист и сооснователь Apple, обогнал Энди Рубина, разработчика Android.</p><p>Результаты прошлого раунда можно посмотреть <a href="https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-raund-4/">здесь</a>.</p><p>Подпишитесь на тег <a href="https://tproger.ru/tag/luchshij-programmist-2023/">Лучший программист 2023</a> и следите за обновлениями в личной ленте, чтобы не пропустить финал битвы.</p><p><b>Турнирная таблица:</b></p><figure><img src="https://media.tproger.ru/uploads/2023/07/49948955-690a-4093-93f9-a3d94c348d9c.png" alt="" /></figure><p>Голосование продлится до завтра, 30 июля 2023 года, до 11 часов по московскому времени.</p>]]></content:encoded>
    </item>
    <item>
      <title>Рейтинг лучших программистов в мире 2023: раунд 2</title>
      <link>https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-raund-2</link>
      <comments>https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-raund-2?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-raund-2</guid>
      <description><![CDATA[<p>В раунде №2 батла за звание лучшего программиста в мире схлестнутся Джеймс Гослинг и Бьёрн Страуструп, Гвидо ван Россум и Андерс Гейлсберг.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-raund-2">Рейтинг лучших программистов в мире 2023: раунд 2</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Pascal]]></category>
      <category><![CDATA[Лучший программист 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 26 Jul 2023 07:59:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сегодня за звание лучшего программиста в мире будут бороться две пары.</p><p>Первая пара:</p><ul><li>Джеймс Гослинг, создатель Java,</li><li>Бьёрн Страуструп, создатель С++.</li></ul><p>Вторая пара:</p><ul><li>Гвидо ван Россум, создатель Python,</li><li>Андерс Гейлсберг, создатель Turbo Pascal, Delphi, C# и TypeScript.</li></ul><p>Выберите из них, кого вы лично считаете лучшим программистом в мире, но помните: не ориентируйтесь на их популярность, востребованность или устоявшиеся топы лучших программистов.</p><p>В этом турнире важны только народная любовь и ваша субъективная оценка.</p><p>Подробнее об условиях батла читайте в <a href="https://tproger.ru/articles/startuet-batl-luchwih-programmistov-mira-2023/">анонсе</a>.</p><p>По итогам первого раунда Павел Дуров обогнал Марка Цукерберга с гигантским отрывом, а Илон Маск проиграл Сергею Брину. Результаты прошлого раунда можно посмотреть <a href="https://tproger.ru/articles/rejting-luchwih-programmistov-v-mire-2023-raund-1/">здесь</a>.</p><p>Подпишитесь на тег <a href="https://tproger.ru/tag/luchshij-programmist-2023/">Лучший программист 2023</a>  и следите за обновлениями в личной ленте, чтобы не пропустить финал битвы.</p><p><b>Турнирная таблица:</b></p><figure><img src="https://media.tproger.ru/uploads/2023/07/2d5f4571-0cb0-4416-b5a2-155abb32f0a7.png" alt="" /></figure><p>Голосование продлится до завтра, 27 июля 2023 года, до 11 часов по московскому времени.</p>]]></content:encoded>
    </item>
    <item>
      <title>Рейтинг лучших программистов в мире 2023: анонс</title>
      <link>https://tproger.ru/articles/startuet-batl-luchwih-programmistov-mira-2023</link>
      <comments>https://tproger.ru/articles/startuet-batl-luchwih-programmistov-mira-2023?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/startuet-batl-luchwih-programmistov-mira-2023</guid>
      <description><![CDATA[<p>Объявляем батл за звание лучшего программиста мира. Читатели Tproger смогут выяснить, кто самый крутой айтишник в мире.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/startuet-batl-luchwih-programmistov-mira-2023">Рейтинг лучших программистов в мире 2023: анонс</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Bitcoin]]></category>
      <category><![CDATA[Ethereum]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Pascal]]></category>
      <category><![CDATA[Павел Дуров]]></category>
      <category><![CDATA[Илон Маск]]></category>
      <category><![CDATA[Лучший программист 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 24 Jul 2023 08:01:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Ежегодно, перед Новым годом, мы проводим <a href="https://tproger.ru/articles/battl-jazykov-programmirovanija-2022-zavershilsja-2/">батл лучших языков программирования</a>. Этот батл мы очень любим: он весёлый, а результаты бывают непредсказуемыми.</p><p>Начитавшись новостей о противостоянии Илона Маска и Марка Цукерберга, которое перетекает из борьбы бизнесов в борьбу физическую и наоборот, мы решили провести новый летний батл за звание лучшего программиста мира.</p><p>Читатели Tproger смогут проголосовать за своего фаворита и выяснить, кто на самом деле самый крутой айтишник.</p><p>Правила батла просты:</p><ol><li>В батле участвует 16 всемирно известных программистов.</li><li>Ежедневно соревнуются две пары.</li><li>За любимого программиста можно проголосовать в течение 24 часов.</li><li>Пары составляются рандомно, так что выбирайте программиста, который субъективно, лично вам нравится больше.</li><li>В финале мы определим тройку победителей.</li><li>Старт — 25 июля, финал — 1 августа.</li></ol><p>Забирайте эту запись в закладки, ведь именно в неё будут добавляться ссылки на последующие этапы голосования.</p><p><b>Турнирная таблица:</b></p><figure><img src="https://media.tproger.ru/uploads/2023/07/14f247b0-4d7c-4f6f-ac24-319da3157686.png" alt="" /></figure><p>Старт уже завтра — 25 июля в 11:00 МСК. Следите, участвуйте, голосуйте!</p>]]></content:encoded>
    </item>
    <item>
      <title>Использование C# и NPOI для работы с файлами Excel</title>
      <link>https://tproger.ru/articles/ispolzovanie-c-i-npoi-dlya-raboty-s-fajlami-excel</link>
      <comments>https://tproger.ru/articles/ispolzovanie-c-i-npoi-dlya-raboty-s-fajlami-excel?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Atwinta]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ispolzovanie-c-i-npoi-dlya-raboty-s-fajlami-excel</guid>
      <description><![CDATA[<p>В этой статье я собираюсь познакомить вас с тем, как создавать, читать и обновлять файлы .XLSX с использованием NPOI на языке C#.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ispolzovanie-c-i-npoi-dlya-raboty-s-fajlami-excel">Использование C# и NPOI для работы с файлами Excel</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 03 Jul 2023 11:33:30 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Что такое NPOI?</h2><p><a href="http://poi.apache.org/">NPOI</a> – это<br />.NET-версия проекта POI на Java. POI является проектом с открытым исходным кодом,<br />который может помочь вам читать/записывать файлы xls(x), doc(x), ppt(x). Он<br />имеет широкое применение.</p><p>Например,<br />вы можете использовать его для:</p><ol><li>создания отчета Excel без установленного на сервере пакета Microsoft Office и более эффективной работы, чем вызов компонента Microsoft Excel ActiveX в фоновом режиме;</li><li>извлечения текста из документов Office для реализации функции полнотекстового индексирования;</li><li>извлечения текста и изображений из документов Excel, Word и PowerPoint;</li><li>создания листов Excel, содержащих формулы.</li></ol><p>В этой<br />статье я собираюсь познакомить вас с тем, как создавать, читать и обновлять<br />файлы .XLSX с использованием NPOI на языке C#.</p><h2>Установка NOPI через NuGet</h2><p>Install-Package<br />NPOI</p><h2>Использование пространства имен NPOI</h2><h2>Пример 1. Создание нового документа Excel и добавление данных</h2><h2>Пример 2. Чтение данных из существующего документа Excel</h2><h2>Пример 3. Обновление данных в документе Excel</h2><h2>Дополнительные настройки</h2><p><b>Объединение ячеек</b></p><p><b>Настройка выравнивания</b></p><p><b>Настройка шрифта</b></p><p><b>Настройка цвета заливки ячейки</b></p><p><b>Настройка высоты строки и ширины столбца</b></p>]]></content:encoded>
    </item>
    <item>
      <title>Почему C# — оптимальный язык программирования для начала пути в разработке игр</title>
      <link>https://tproger.ru/articles/pochemu-c-mozhno-nazvat-optimalnym-vyborom-yazyka-programmirovaniya-dlya-nachala-puti-v-razrabotke-igr</link>
      <comments>https://tproger.ru/articles/pochemu-c-mozhno-nazvat-optimalnym-vyborom-yazyka-programmirovaniya-dlya-nachala-puti-v-razrabotke-igr?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Сергей Тарасенко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-c-mozhno-nazvat-optimalnym-vyborom-yazyka-programmirovaniya-dlya-nachala-puti-v-razrabotke-igr</guid>
      <description><![CDATA[<p>Рассказываем, почему C# лучший язык программирования для начала пути в клиентской разработке игр на самых популярных игровых движках.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-c-mozhno-nazvat-optimalnym-vyborom-yazyka-programmirovaniya-dlya-nachala-puti-v-razrabotke-igr">Почему C# — оптимальный язык программирования для начала пути в разработке игр</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Разработка игр]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 21 Jun 2023 08:30:18 GMT</pubDate>
      <content:encoded><![CDATA[<p>Идея разрабатывать компьютерные игры привлекает множество людей, увлеченных видеоиграми, и в этом нет ничего удивительного — эта профессия интересна и хорошо оплачиваема, она позволяет раскрыть свои творческие способности и иногда даже получить мировую известность.</p><p>Перед начинающим разработчиком достаточно быстро встает вопрос: “какой язык программирования учить, чтобы делать игры?”. Однозначного ответа на этот вопрос быть не может, учитывая огромное количество инструментов и технологий существующих в настоящее время. Однако, если провести небольшой анализ, становится понятно, что среди многообразия решений существует несколько фаворитов, которые и будут рассмотрены ниже. Забегая вперед, можно сказать, что одним из лучших выборов может быть язык C#, применяемый для разработки игр на самых популярных игровых движках.</p><p>Нужно сразу оговориться, что речь в статье пойдет исключительно о клиентской разработке. Помимо этого, в игровой индустрии распространена серверная разработка – в статье эта тема затрагиваться не будет.</p><h2>Критерии оценки</h2><p>Для оценки целесообразности изучения языка программирования будут использованы следующие критерии:</p><ul><li>Распространенность языка – этот критерий является исключительно важным по многим причинам: обилие учебных материалов, популярных библиотек и фреймворков, размер сообщества и доступность готовых решений типовых проблем и задач;</li><li>Востребованность языка – рано или поздно приходит время искать работу и присоединяться к команде. Крайне важно, чтобы полученные знания и умения можно было применить в реальных коммерческих проектах;</li><li>Технические особенности языка – нужно понимать, что рассмотренные языки программирования во многом отличаются друг от друга в плане синтаксиса, производительности, подходу к типизации, “высоко-уровневости” и т.п.;</li><li>Разнообразие инструментов для разработки игр – во многом выбор “правильных” и качественных инструментов определяет личное ощущение относительно того или иного языка программирования, а также эффективность работы программиста.</li></ul><h2>Сравнение</h2><p>Невозможно и бессмысленно перечислять все популярные языки программирования по причине того, что для многих из них не существует серьезной игровой инфраструктуры, поэтому будут рассмотрены только самые распространенные варианты из рейтинга <a href="https://www.tiobe.com/tiobe-index/">TIOBE</a>, обладающие таковой.</p><h3>Статистика</h3><p>Для начала, рассмотрим перспективы трудоустройства разработчика на популярных языках программирования как в сфере разработки игр, так и за ее пределами.</p><p>Цифры, приведенные ниже, актуальны по состоянию на июнь 2023 года. В качестве “бенчмарка” будет использоваться язык C#, поскольку он представляет особый интерес в рамках этой статьи.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/5afe4d12-72e6-4bfb-9ebd-9ed03686fe28.png" alt="" /></figure><h2>Пример формата запросов вакансий для языка C#</h2><ol><li>hh.ru <a href="https://hh.ru/search/vacancy?text=%28Unity+OR+Godot+OR+Unigine+OR+Game%29+AND+c%23+AND++%28Programmer+OR+Developer+OR+%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82+OR+%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%29+NOT+%28Manager+OR+Designer%29&amp;salary=&amp;area=113&amp;ored_clusters=true">117</a> вакансий (100%)</li><li>indeed-US <a href="https://www.indeed.com/jobs?q=%28Unity+OR++Godot+OR+Unigine+OR+GAME%29+AND+%22C%23%22+AND+%28Developer+OR+Engineer%29&amp;l=&amp;vjk=3f5935a7db9296b1">1,664</a> вакансий (100%)</li><li>hh.ru <a href="https://hh.ru/search/vacancy?text=%28%22C%23%22+OR+%22.Net%22%29+AND+%28%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82+OR+%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA+OR+Programmer+OR+Developer%29+NOT+%28%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C+OR+1C+OR+%D0%BC%D0%B0%D1%80%D0%BA%D0%B5%D1%82%D0%BE%D0%BB%D0%BE%D0%B3+OR+%D0%BF%D1%80%D0%BE%D0%B4%D0%B0%D0%B6%D0%B8+OR+%D0%BF%D1%80%D0%BE%D0%B4%D0%B0%D0%B6%D0%B0%D0%BC+OR+%D0%BC%D0%B5%D0%BD%D0%B5%D0%B4%D0%B6%D0%B5%D1%80%29&amp;salary=&amp;area=113&amp;ored_clusters=true">2,223</a> вакансий (100%)</li><li>indeed-US <a href="https://www.indeed.com/jobs?q=%28%22C%23%22+or+%22.Net%22%29+AND+%28Developer+OR++Engineer%29&amp;l=&amp;vjk=b5ed2a23ea6f0aab">25,577</a> вакансий (100%)</li></ol><h4>Комментарии</h4><p>* Настроить фильтры на сайтах поиска работы абсолютно точно не представляется возможным, поэтому в статье они приведены в большей степени для иллюстрации соотношения числа вакансий для разных языков. Допускается случайное попадание нерелевантных вакансий в результат выдачи, однако влияние таких результатов на соотношение можно считать незначительным для целей этой статьи. При желании, для каждого из языков можно изменить фильтры и получить, как большее число вакансий, так и более точное совпадение с желаемым стеком.</p><p>** Относительно высокое число вакансий Python в большей степени отражает востребованность в сферах backend, tools, devops, чем, непосредственно, в клиентской разработке.</p><p>*** Поиск выдает нерелевантные вакансии для запросов по языку C.</p><h4>Выводы</h4><ul><li>Количество участников сообществ и обсуждений по Python и JavaScript почти на порядок опережает другие представленные языки программирования;</li><li>Несмотря на высокий рейтинг TIOBE, язык C обладает наименьшим сообществом среди представленных языков. Кроме того, сложно оценить реальную востребованность языка, поскольку почти всегда он упоминается лишь как дополнительный навык в C++ вакансиях;</li><li>По количеству вакансий в разработке игр C# борется с C++. Остальные языки проигрывают;</li><li>По количеству вакансий вне разработки игр C# отстает от конкурентов, но все еще показывает хорошую востребованность;</li></ul><h2>Базовые характеристики</h2><p>Рассмотрим базовые характеристики языков безотносительно их роли в разработке игр:</p><figure><img src="https://media.tproger.ru/uploads/2023/06/c24c8752-88fa-4689-8fec-3a910f3e3fe9.png" alt="" /></figure><h4>Комментарии</h4><p>* Часто Python-код используется лишь для верхнего слоя программы, тогда как тяжелые операции выполняются в нижнем слое, написанном на производительных языках программирования, а часто даже использующем различные функции аппаратного ускорения (например, векторные инструкции, GPU-вычисления). В результате часто программы, написанные на Python, выполняются быстро.</p><p>** C в этом списке является единственным процедурным языком программирования. Вероятно, именно из-за этой особенности язык C не получил распространения в современной разработке видеоигр.</p><h4>Выводы</h4><ul><li>Язык C выбивается из ряда соперников по своему типу, коим является “процедурный”. Исторически менялся подход как к языкам программирования, так и к дизайну компьютерных программ. Это привело к тому, что на смену процедурным языкам пришли другие, в частности, объектно-ориентированные. Обновленные подходы предлагают более элегантные и эффективные способы программирования;</li><li>В таблице присутствуют как языки с динамической типизацией, так и статической. Не существует однозначного ответа, какой из них лучше, но в обществе сложилось представление, что обучаться языкам с динамической типизацией проще. Однако в плане использования, такие языки не являются более простыми, так как автоматический синтаксический анализ в них сильно ограничен, ровно как и помощь IDE в написании кода;</li><li>Однозначным лидером по производительности считаются языки C и C++, но в то же время, их использование затруднено непоследовательным сложным синтаксисом и необходимостью ручного управления памятью;</li><li>Производительность Python и JavaScript значительно уступают всем представленным конкурентам;</li><li>Главный герой статьи, C#, не обладает какими-либо существенными недостатками, как с точки зрения производительности, так и с точки зрения сложности изучения и использования.</li></ul><h2>Место в разработке игр</h2><p>Фактически, выбирая язык программирования для разработки игр, приходится думать на 1 шаг вперед и выбирать сразу симпатизирующий игровой движок. Дело в том, что компьютерные игры являются исключительно сложным видом программного обеспечения, в силу того, что охватывают бесчисленное количество областей: отображение графики, вывод звука, поддержка устройств ввода, поддержка запуска на конечных устройствах игроков, интеграция со сторонними сервисами и экосистемами (включая игровые консоли и площадки дистрибуции игр). Конечно, решение всех этих проблем, может занять у одного человека годы и даже десятилетия.</p><p>К счастью, для людей, которые хотят просто разрабатывать игры (игровую логику), существует большое число игровых движков, решающих за разработчика вышеобозначенные проблемы и позволяют сосредоточиться на разработке, непосредственно, игровой логики. Необходимо отметить, что использование игровых движков накладывает определенные финансовые обязательства. Но почти всегда существует вариант бесплатного использования до определенного порога дохода или использования по модели Royalty (процент от дохода). В совокупности это означает, что разработка игр в наши дни может быть несложной и доступной.</p><p>С внушительным списком существующих игровых движков можно ознакомиться в <a href="https://en.wikipedia.org/wiki/List_of_game_engines">Wikipedia</a>, а наиболее распространенные игровые движки, которые допускают скриптинг при помощи рассматриваемых языков программирования представлены ниже:</p><figure><img src="https://media.tproger.ru/uploads/2023/06/196e55f9-8f4a-47b9-b948-03400902a59e.png" alt="" /></figure><h2>Выводы</h2><ul><li>Можно заметить, что инфраструктура для разработки игр некоторых участников сравнения сильно уступает конкурентам. Речь идет о Python, C, Java – одна из проблем тут состоит в том, что для них отсутствуют WYSIWYG редакторы, что делает почти невозможным их использование новичками и не программистами;</li><li>Самые продвинутые игровые движки доступны для языков C# (Unity, CryEngine, GODOT, UNIGINE), C++ (Unreal Engine, CryEngine, UNIGINE, GODOT, Cocos Creator), JavaScript (Cocos Creator, PixiJS, Phaser);</li><li>Наиболее востребованными коммерческими решениями на настоящий момент являются Unity (C#) и Unreal Engine (C++), однако область применения у Unity шире, чем у второго: помимо десктопных и консольных игр, она включает также web и мобильные игры;</li><li>В трех строчках таблицы фигурирует GODOT. Дело в том, что он поддерживает скриптинг на большом количестве языков программирования (некоторые из которых даже не попали в эту статью). К слову, движок является опенсорсным и абсолютно бесплатным для использования в любых проектах.</li></ul><h2>Почему же C#?</h2><p>В настоящее время существует действительно огромное количество доступных инструментов для разработки игр, и это делает выбор для новичка как никогда сложным.</p><p>Однако по совокупности критериев можно выделить C#: он широко распространен, востребован как в разработке игр, так и за ее пределами. Популярный игровой движок Unity фактически стал стандартом для разработки web/мобильных/indie (а часто и AAA) игр, а на пятки Unity уже наступают другие мощные решения, включая, CryEngine, GODOT и UNIGINE.</p><p>Все это означает, что будущий разработчик игр, выбрав C#, с высокой степенью вероятности сможет найти учебные материалы, удобные инструменты разработки, ответы на свои вопросы и решения проблем, готовые плагины и интеграции. И это не пустые слова: в случае выбора действительно нишевого решения плагины для интеграции с платформами и сторонними сервисами, вероятно, придется писать или адаптировать самому.</p><p>Что если в ходе работы в разработке игр выяснится, что разрабатывать игры все-таки не так весело, как в них играть? Можно переквалифицироваться в backend, desktop или web разработчика и дальше пробовать свои силы там. Благо, после перехода .Net Framework (среды выполнения C#) на рельсы open-source и ребрендинга в .Net Core, а в последствии в .Net, этот язык можно, по праву, назвать универсальным. А экосистема вокруг C# растет буквально взрывными темпами.</p><p>Для Разработки на C# существует множество IDE, включая, как платные, так и бесплатные. В наличии также продвинутые инструменты для отладки и профайлинга. Большая часть инструментов одинаково доступна на всех системах на основе современных версий Windows, Linux и MacOS. Таким образом, начать погружаться в разработку можно абсолютно бесплатно и почти на любом программном и аппаратном обеспечении.</p><p>Может показаться, что C++ подходит для разработки игр не меньше, чем C#, и в какой-то степени это, действительно, так: количество возможностей для разработчика игр на C++ тоже велико. Однако этот язык проигрывает в простоте синтаксиса и в способе управления памятью, а за пределами разработки игр C++ популярен там, где нужно выжать максимальную производительность из имеющегося аппаратного обеспечения, обычно это специфичные области программирования, например, программирование высоконагруженных систем, микроконтроллеров, баз данных, движков, операционных систем и т.п. – это может быть по душе далеко не всем в силу сложности предметной области.</p>]]></content:encoded>
    </item>
    <item>
      <title>Какие языки учить в 2023 году, если собираетесь в геймдев</title>
      <link>https://tproger.ru/articles/kakie-yazyki-uchit-v-2023-godu-esli-sobiraetes-v-gejmdev</link>
      <comments>https://tproger.ru/articles/kakie-yazyki-uchit-v-2023-godu-esli-sobiraetes-v-gejmdev?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[МТС]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kakie-yazyki-uchit-v-2023-godu-esli-sobiraetes-v-gejmdev</guid>
      <description><![CDATA[<p>На чём разрабатывают игры для браузеров, мобильных телефонов, консолей и ПК. Вспоминаем самые популярные языки для геймдева.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kakie-yazyki-uchit-v-2023-godu-esli-sobiraetes-v-gejmdev">Какие языки учить в 2023 году, если собираетесь в геймдев</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Разработка игр]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Unity]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 19 Jun 2023 14:49:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если любите компьютерные игры, наверняка задумывались о том, чтобы попробовать себя в разработке. И это хорошая мысль, ведь, по данным <a href="https://disk.yandex.ru/d/2K-qNZjaiNbI_w?roistat_visit=939804">исследования</a> Moscow Digital School, средняя зарплата разработчика в геймдеве превышает 280 000 рублей.</p><p>Сегодня расскажем, какие языки программирования нужно знать, чтобы стать новыми Джоном Кармаком или Гейбом Ньюэллом.</p><h2>Языки для программирования браузерных игр</h2><p>Большинство веб-игр работает на комбинации HTML, CSS и JavaScript. HTML формирует структуру и содержимое веб-страницы, CSS определяет внешний вид и стиль элементов, а JavaScript управляет игровой логикой, анимациями и интерактивными элементами. Если добавить сюда PHP, можно прописать бэкенд, настроить взаимодействие с серверной частью и сделать игру многопользовательской.</p><h3>Примеры браузерных игр</h3><p>Браузерные игры могут быть как довольно примитивными (головоломки, загадки, ребусы), так и детализированными (с разными персонажами, экипировкой, сюжетом). Вот примеры некоторых из них.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/a84beeda-af9c-4ae5-902f-e471b54a44cc.png" alt="" /><figcaption>Quick, Draw! — игра, в которой за 20 секунд надо нарисовать загаданный предмет, а нейросеть попробует его угадать</figcaption></figure><figure><img src="https://media.tproger.ru/uploads/2023/06/298e4428-1100-499c-bc54-41403a882158.png" alt="" /><figcaption>Paс-Man — легендарная игра, адаптированная для браузеров. Игроку в роли колобка нужно съесть все белые точки в лабиринте, избегая встречи с призраками</figcaption></figure><h2>Языки для программирования мобильных игр</h2><p>Игры для смартфонов и планшетов обычно сложнее и интереснее браузерных, однако до компьютерных они не дотягивают из-за ограничений мобильных устройств: небольшого экрана и низкой производительности.</p><p>Но в этом есть и плюс — простота разработки. Можно использовать один из движков (например, Unity) и за несколько недель собрать свою игру, добавив только спрайты и модели и прописав логику на одном из поддерживаемых языков программирования (для Unity это C#).</p><p>Другой вариант — написать мобильную игру с нуля, не ограничивая себя готовыми движками.</p><p>Тогда для геймдева понадобятся следующие языки:</p><h3>● Java</h3><p>Язык для разработки нативных мобильных игр под платформу Android. Программы обычно преобразуются в байт-код, который выполняется на любой виртуальной машине Java (JVM), независимо от характеристик процессора. Для Java также разработаны библиотеки и фреймворки, которые помогают в создании игр, например LibGDX.</p><h3>● Kotlin</h3><p>Ещё один язык для геймдева на Java, который появился не так давно. Он полностью совместим с Java, поэтому эти языки можно использовать в проекте одновременно или быстро переписать код с одного на другой. С помощью SDK Kotlin Multiplatform Mobile на этом языке можно создавать кроссплатформенные игры для iOS и Android.</p><h3>● Objective-C и Swift</h3><p>Objective-C — первый язык программирования приложений и игр для устройств Apple. Он был создан в 80-х годах XX века как объектно-ориентированное расширение языка C.</p><p>Objective-C активно использовался Apple на протяжении многих лет, но всё же с годами его синтаксис и другие особенности устарели. Поэтому в 2014 году в компании создали новый язык программирования Swift. Он имеет более современный и интуитивно понятный синтаксис, обеспечивает статическую типизацию и автоматическое управление памятью, что помогает устранить некоторые ошибки Objective-C и упростить отладку.</p><h4>Примеры мобильных игр</h4><figure><img src="https://media.tproger.ru/uploads/2023/06/0e06d279-a090-4ea5-95f5-e721ee27d84f.jpg" alt="" /><figcaption>Genshin Impact — экшн-RPG с большим открытым миром, разнообразными игровыми механиками и головоломками. Разработана на игровом движке Unity</figcaption></figure><figure><img src="https://media.tproger.ru/uploads/2023/06/f64dd41e-a7c6-4b6a-a287-964a9107e581.jpg" alt="" /><figcaption>Diablo Immortal — многопользовательская игра в жанрах Action/RPG и hack and slash, разработанная для мобильных устройств на движке Messiah</figcaption></figure><h2>Коммерческие движки и языки программирования</h2><p>Коммерческие движки произвели революцию в сфере создания игр. Теперь, чтобы выпустить сложный игровой продукт для консоли или ПК, необязательно нанимать огромный штат программистов и тратить годы на разработку.</p><h3>Unity</h3><p>Кроссплатформенный игровой движок, популярный у независимых игровых студий. По сути это не просто движок, а среда разработки, под капотом которой находятся текстовый редактор, компилятор, отладчик и другие полезные инструменты.</p><p>Unity легко освоить даже новичку в геймдеве, но для создания сценариев взаимодействия с сервером понадобится знание <b>C#</b>. Это объектно-ориентированный язык, созданный компанией Microsoft в 2000 году для работы с платформой .NET. Он не такой сложный, как C++, и на нём не нужно писать много шаблонного кода, как на Java.</p><h4>Примеры игр, созданных на Unity</h4><figure><img src="https://media.tproger.ru/uploads/2023/06/8a8d54b2-6c96-429f-9474-e13f4317e174.png" alt="" /><figcaption>Among Us — многопользовательская игра, вдохновлённая настолкой «Мафия». Задача игроков — вычислить двух предателей на борту космического корабля, пока они не убили всю команду</figcaption></figure><figure><img src="https://media.tproger.ru/uploads/2023/06/69d20591-a815-44e7-bb7f-a26372a6fd22.jpg" alt="" /><figcaption>Outer Wilds — игра про космос, в которой главный герой исследует маленькую планету, погибающую каждые 22 минуты</figcaption></figure><h3>Unreal Engine</h3><p>Движок от известной игровой компании Epic Games, выпущенный в 1998 году. Уже больше двух десятков лет его используют в геймдеве для создания сложных игр категории AAA разных жанров — от MMORPG до шутеров от первого лица.</p><p>Unreal Engine ценят за шикарные визуальные эффекты, но освоить этот движок сложнее, чем Unity. Для создания сценариев в нём используется <b>C++</b>, правда с определёнными отличиями (без низкоуровневого управления памятью и библиотеки шаблонов).</p><p>Это довольно старый и сложный язык, но благодаря визуальному редактору Blueprints создавать скрипты и размещать объекты в Unreal Engine можно и без C++.</p><h4>Примеры игр, созданных на Unreal Engine</h4><figure><img src="https://media.tproger.ru/uploads/2023/06/67b74bcf-403c-40b7-bc4e-f017051f7dbe.jpg" alt="" /><figcaption>Fortnite — онлайн-игра, которая сочетает в себе королевскую битву, песочницу и кооперативный симулятор выживания в открытом мире</figcaption></figure><figure><img src="https://media.tproger.ru/uploads/2023/06/4df3d929-4a1f-4606-be62-92c4643c7fa2.jpg" alt="" /><figcaption>Hogwarts Legacy — RPG во вселенной Гарри Поттера со множеством квестов, интересным геймплеем и, конечно же, полётами на мётлах</figcaption></figure><h2>Итоги</h2><p>Если собираетесь работать в геймдеве и хотите выбрать язык программирования, лучше заранее понять, какие игры вы хотите создавать:</p><ol><li>для браузерных игр понадобится знание JavaScript и PHP;</li><li>мобильных — Java, Kotlin и Swift;</li><li>консольных и ПК-игр — C++ и C#, а ещё опыт работы с коммерческими движками.</li></ol>]]></content:encoded>
    </item>
    <item>
      <title>Как использовать C# для преобразования PDF в изображения PNG или JPG</title>
      <link>https://tproger.ru/articles/kak-ispolzovat-c-dlya-preobrazovaniya-izobrazhenij-pdf-v-png-ili-jpg</link>
      <comments>https://tproger.ru/articles/kak-ispolzovat-c-dlya-preobrazovaniya-izobrazhenij-pdf-v-png-ili-jpg?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Неопознанный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ispolzovat-c-dlya-preobrazovaniya-izobrazhenij-pdf-v-png-ili-jpg</guid>
      <description><![CDATA[<p>Как конвертировать PDF-документы в изображения форматов PNG и JPG с помощью инструмента Free Spire.PDF for .NET.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ispolzovat-c-dlya-preobrazovaniya-izobrazhenij-pdf-v-png-ili-jpg">Как использовать C# для преобразования PDF в изображения PNG или JPG</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 09 Jun 2023 11:05:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>PDF — это широко используемый формат файлов, который сохраняет последовательный формат и макет в различных операционных системах и устройствах. png — это сжатый без потерь формат изображений, который сохраняет высокое качество и детализацию изображения. Конвертирование файлов PDF в формат PNG может сделать изображения более четкими, а также облегчить их использование в Интернете. В этой статье описывается, как конвертировать PDF в PNG и JPG изображения с помощью <a href="https://www.e-iceblue.com/Introduce/free-pdf-component.html">Free Spire.PDF for .NET</a>.</p><h2>Как установить Free Spire.PDF for.NET</h2><p>Сначала нам нужно открыть наш проект в Visual Studio. Затем нам нужно открыть менеджер пакетов NuGet и найти FreeSpire.PDF. В результатах поиска мы можем найти Free Spire.PDF for .NET и нажать на кнопку установки. После завершения установки мы можем начать использовать Free Spire for .NET.</p><p>Примечание: Бесплатная версия поддерживает конвертирование только первых 3 страниц документа. Если ваш документ содержит много страниц, вы можете поискать в NuGet для установки коммерческой версии, т.е. Spire.PDF for .NET.</p><h2>C# для преобразования изображений PDF в PNG или JPG</h2><p>В приведенном выше коде мы сначала загружаем документ PDF, а затем используем<br />метод <b>SaveAsImage()</b> для преобразования указанной страницы PDF в изображение <b>Bitmap</b>. Наконец, мы сохраняем изображение Bitmap в формате PNG или JPG.</p><h2>Конвертирование в другие форматы</h2><p>Помимо преобразования PDF в Word, Free Spire.PDF for .NET также поддерживает преобразование PDF в другие форматы, такие как:</p><ol><li><a href="https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Conversion/C-Convert-PDF-to-HTML.html">Преобразование PDF в HTML на C#, VB.NET</a></li><li><a href="https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Convert-HTML-to-PDF-Customize-HTML-to-PDF-Conversion-by-Yourself.html">Преобразование HTML в PDF на C#, VB.NET</a></li><li><a href="https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Conversion/How-to-convert-PDF-to-Doc-in-C-VB.NET.html">Преобразование PDF в Word на C#, VB.NET</a></li><li><a href="https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/C-/VB.NET-Convert-Image-to-PDF.html">Конвертирование изображений в PDF на C#, VB.NET</a></li></ol><h2>Резюме</h2><p>В этой статье мы узнали, как конвертировать PDF в PNG и JPG изображения с помощью Free Spire.PDF for .NET. Мы также узнали о других методах конвертирования, поддерживаемых продуктом. Мы надеемся, что эта статья будет вам полезна.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как использовать C# для преобразования PDF в Word</title>
      <link>https://tproger.ru/articles/kak-ispolzovat-c-dlya-preobrazovaniya-pdf-v-word</link>
      <comments>https://tproger.ru/articles/kak-ispolzovat-c-dlya-preobrazovaniya-pdf-v-word?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Неопознанный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ispolzovat-c-dlya-preobrazovaniya-pdf-v-word</guid>
      <description><![CDATA[<p>Рассказываем, как использовать FreeSpire.PDF for .NET для программного преобразования PDF в Word на языке программирования C#.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ispolzovat-c-dlya-preobrazovaniya-pdf-v-word">Как использовать C# для преобразования PDF в Word</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 09 Jun 2023 09:29:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>Преобразование файлов PDF в документы Word является распространенным требованием, поскольку во многих случаях формат PDF является наилучшим выбором, но при необходимости редактирования или изменения документа более гибким является формат Word.</p><p>Файлы PDF обычно используются для онлайн-публикаций, печати и архивирования, а документы Word — для создания, редактирования и форматирования файлов. Однако вручную копировать и вставлять содержимое PDF в документ Word может занимать много времени и быть ошибочным.</p><p>В этой статье мы расскажем, как использовать <a href="https://www.e-iceblue.com/Introduce/free-pdf-component.html">FreeSpire.PDF for .NET</a> для программного преобразования PDF в Word.</p><h2>Как установить Free Spire.PDF for .NET</h2><p>В первую очередь, необходимо открыть наш проект в Visual Studio. Затем нужно открыть менеджер пакетов NuGet и выполнить поиск FreeSpire.PDF. В результате поиска мы найдем Free Spire.PDF for .NET и нажмем кнопку «Установить». После установки мы можем начать использовать Free Spire.PDF for .NET.</p><p><b>Обратите внимание</b>: бесплатная версия поддерживает преобразование только первых 3 страниц документа. Если ваш документ содержит много страниц, вы можете найти и установить коммерческую версию Spire.PDF for .NET в NuGet.</p><h2>Фоновые знания</h2><p>Free Spire.PDF предоставляет два режима преобразования, преимущества и недостатки которых описаны ниже:</p><p>• <b>Режим фиксированной компоновки</b>: обеспечивает быстрое преобразование и максимально сохраняет оригинальный вид PDF-файла. Однако, возможность редактирования сгенерированного документа будет ограничена, поскольку каждая строка текста в PDF будет отображаться в отдельном фрейме в сгенерированном документе Word.</p><p>• <b>Режим потоковой компоновки</b>: поточный формат является полным режимом распознавания. Преобразованный контент не будет отображаться в виде рамок, и структура сгенерированного документа будет поточной. Сгенерированный документ Word легко редактируется, но может выглядеть иначе, чем исходный файл PDF.</p><h2>Как преобразовать PDF в Doc/Docx с фиксированной компоновкой</h2><h2>Преобразовать файл PDF в документ Doc/Docx с поддержкой форматирования</h2><h2>Итог</h2><p>В этой статье мы рассмотрели, как использовать Free Spire.PDF для .NET для преобразования PDF в Word. Кроме того, мы рассмотрели другие методы преобразования форматов, поддерживаемые этим продуктом. Надеемся, что эта статья была полезна для вас.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что полезного в новых версиях C#</title>
      <link>https://tproger.ru/articles/chto-poleznogo-v-novyh-versiyah-c-erid-ljn8k484i</link>
      <comments>https://tproger.ru/articles/chto-poleznogo-v-novyh-versiyah-c-erid-ljn8k484i?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Екатерина Соколова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-poleznogo-v-novyh-versiyah-c-erid-ljn8k484i</guid>
      <description><![CDATA[<p>Вместе с экспертами Ozon Tech и Route 256 подготовили обзор полезных и неочевидных фич в новых версиях языка С# за последние четыре года.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-poleznogo-v-novyh-versiyah-c-erid-ljn8k484i">Что полезного в новых версиях C#</a>»</p>]]></description>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 13 Apr 2023 07:42:24 GMT</pubDate>
      <content:encoded><![CDATA[<p>С# продолжает развиваться, и в новых версиях команда разработчиков языка регулярно добавляет в него новые функции и возможности. Вместе с экспертами Ozon Tech и <a href="https://tprg.ru/FWpH">Route 256</a> подготовили обзор полезных и неочевидных фич, которые появились в языке за последние четыре года. Это не тот C#, который вы учили пять лет назад.</p><ol><li><a href="https://tproger.ru/#part1">История версий C#</a></li><li><a href="https://tproger.ru/#part2">Операторы верхнего уровня — программы без Main методов</a></li><li><a href="https://tproger.ru/#part3">Nullable-типы</a></li><li><a href="https://tproger.ru/#part4">Типы записи и записи структуры</a></li><li><a href="https://tproger.ru/#part5">Индексы и диапазоны</a></li><li><a href="https://tproger.ru/#part6">Паттерн-матчинг</a></li></ol><h2>История версий C#</h2><figure><img src="https://media.tproger.ru/uploads/2023/04/122f0f84-ba60-4a45-b04c-f2ef517a41d4.png" alt="" /></figure><p>C# был придуман в Microsoft под руководством Андерса Хейлсберга, который до этого работал над языком Delphi. Язык создавался как конкурент Java со свойствами и событиями.</p><p>Первая версия C# увидела свет в 2002 году. Затем каждые два или три года Microsoft выпускал новую версию языка. В C# постепенно добавили обобщённые типы и итераторы, Linq, фичи функциональных языков программирования, ключевое слово dynamic для упрощения работы с COM, интеграции с динамическими языками на платформе .NET, async\await, кортежи и другое.</p><figure><img src="https://media.tproger.ru/uploads/2023/04/8625746e-c3ab-4f6c-ba6c-546ce9c29190.png" alt="" /></figure><p>Начиная с C# 8, разработчики выпускают новую версию языка ежегодно. В них уже нет масштабных изменений, вроде введения Linq или async\await, а некоторые фичи, такие как паттерн-матчинг, развиваются от релиза к релизу. К сожалению, это приводит к тому, что на момент появления многие фичи просто не используются. Программисты, которые изучали C# по книжкам и статьям пятилетней давности, даже не подозревают об их существовании.</p><p>В этой статье попытаемся восполнить этот пробел и опишем важные изменения в языке, которые вам стоит использовать в своих программах.</p><h2>Операторы верхнего уровня — программы без Main методов</h2><p>Все языки, унаследовавшие синтаксис от языка C, страдают многословностью. C# не стал исключением и перенял у Java необходимость писать следующим образом:</p><p>В C# 9 появилась фича Top-level statements. Теперь тот же самый код возможно переписать короче:</p><p>Более того, используя implicit usings, using System писать необязательно. Компилятор автоматически добавляет юзинги для популярных пространств имён. Начиная с .NET 6 и C# 10 новое консольное приложение выглядит так:</p><p>Если вам не подходит автоматика, то можете глобально задать юзинги в отдельном .cs файле или в файле проекта.</p><p>Код, написанный таким образом, «под капотом» заворачивается в функцию Main. Все функции, которые вы определите, станут локальными и смогут использовать переменные, определённые ранее. Определять типы можно в том же файле, но только после всех top-level statements.</p><h2>Nullable-типы</h2><p>В C# 8 появилась фича — Nullable Reference Types, аналогичная Nullable Value Types. В проектах, созданных до .NET 6, фича была отключена по умолчанию. Она работает по следующим правилам:</p><ul><li>Если есть переменная или параметр ссылочного типа T, то ему необходимо присвоить значение, не являющееся null (non-nullable).</li><li>Чтобы присвоить null, нужно поставить знак вопроса после имени типа — T? (nullable).</li><li>Чтобы привести T? к T, необходимо использовать оператор ! после nullable выражения, иначе компилятор выдает ошибку.</li><li>При обращении к членам T? компилятор статически проверяет, что значение ссылки не равно null.</li></ul><p>В отличие от Nullable Value Types, string и string? — не разные типы. Это один и тот же тип string, подсказка компилятору и набор атрибутов, помогающих проводить статический анализ.</p><p>Как следствие, Nullable Reference Types не даёт гарантий за пределами вашего кода. Если в коде функция публичного интерфейса класса принимает string, а не string?, то вам необходимо написать проверку на null, хоть она и выглядит избыточной.</p><p>Компилятор, в свою очередь, при нарушении правил Nullable Reference Types генерирует предупреждения, а не ошибки. Но это легко исправить, указав в свойствах проекта, что Nullable предупреждения стоит воспринимать как ошибки.</p><figure><img src="https://media.tproger.ru/uploads/2023/04/094488c1-e146-41ff-899b-e62219484540.png" alt="" /></figure><p>Важная вещь, которую стоит помнить, — оператор var всегда создаёт переменную nullable reference типа.</p><h2>Типы записи и записи структуры в C#</h2><h3>Как появились</h3><p>Анонимные типы добавили ещё в третью версию C#. Они неизменяемые, имеют структурную, а не ссылочную эквивалентность, и удобное представление в ToString().</p><p>Анонимные типы очень понравились программистам: они удобно описывают структуры данных, их можно использовать как ключи для словарей и группировки данных. Но у анонимных типов есть недостатки: их нельзя принимать в качестве параметров методов, нельзя создать поля класса анонимного типа, а также в анонимных типах не получится реализовать интерфейсы.</p><p>Такие типы можно создать и «руками», но вам быстро надоест каждый раз переопределять Equals,  GetHashCode и ToString, и вы начнёте искать более простые способы.</p><p>Один из них — кортежи, которые появились в C# 7.0. Кортежи можно красиво использовать в варианте с именами полей:</p><p>Кортежи тоже имеют структурную эквивалентность и удобное представление в ToString(). Но в отличие от анонимных типов кортежи изменяемые.</p><p>Однако, как и Nullable Reference Types, имена кортежей — магия компилятора. «Под капотом» там всегда System.ValueTuple, поля Item1..ItemN, и  никакие интерфейсы реализовать не получится.</p><h3>Как создавать</h3><p>Начиная с C# 8, можно создавать свои типы, которые объединяют фичи кортежей и анонимных типов, но при этом могут иметь методы и реализовывать интерфейсы. Такие типы называются записями, а для их создания используется ключевое слово record.</p><p>Тип, объявленный как record, автоматически реализует деконструктор (не путать с деструктором), Equals, GetHashCode, ToString, а также интерфейс IEquatable и перегружает операторы сравнения. Свойства FirstName и LastName будут неизменяемыми. В остальном это обычный класс. Он может содержать методы, наследовать другие классы, реализовывать интерфейсы.</p><p>В примере выше используется фича из C# 9 — Target-typed new operator, когда после new не нужно использовать имя типа, если выражение присваивается переменной или параметру этого типа. Это облегчает использование Nullable Reference Types.</p><p>Начиная с C# 11 можно создать тип запись, которая является полным эквивалентом анонимного класса:</p><p>В отличие от предыдущего варианта, при таком объявлении деконструкция не будет работать, а имена свойств придётся писать каждый раз при создании экземпляра:</p><p>Позиционные параметры и обычные свойства записей можно комбинировать. Обычные свойства легко сделать необязательными и даже изменяемыми.</p><h3>Записи структуры</h3><p>В C#10 добавили возможность создавать записи, которые являются структурами, а не классами. В отличие от записей классов записи структуры по умолчанию изменяемы.</p><p>Если вам потребуются неизменяемые записи структуры, добавьте ключевое слово readonly, как и для обычных структур.</p><h3>Оператор with</h3><p>Для работы с неизменяемыми типами данных в языке появился оператор with. Он копирует запись и изменяет значения свойств.</p><p>Оператор with работает не только с типами записями, но и с readonly структурами и анонимными типами.</p><h2>Индексы и диапазоны в C#</h2><p>В C# 8 разработчики языка добавили возможность писать следующим образом:</p><p>Аналогично можно обратиться ко второму элементу с конца: ^2, к третьему: ^3 и так далее.</p><p>Кроме того, появилась возможность извлекать подмассив из массива с помощью индексов, как в языках F#, Python и многих других:</p><p>Обратите внимание: в операторе диапазона левая граница включается в диапазон, а правая — нет. В диапазонах можно не указывать левую или правую границу, или не указывать обе. В качестве границ могут быть указаны индексы как с конца, так и сначала.</p><p>Под капотом оператор диапазона превращается в структуру System.Range:</p><p>Индексы работают с коллекциями, у которых есть свойство-индексатор с целыми индексами и свойство Length или Count. Диапазоны требуют наличие свойств Length или Count и метода Slice с двумя аргументами. Например, вы можете получить подстроку из строки с помощью оператора диапазона:</p><p>Большинство типов-коллекций автоматически получит поддержку индексов, а для диапазонов нужно будет реализовать метод Slice. Кроме того, вы можете определить свои свойства и методы, которые работают со структурами System.Range и System.Index.</p><h2>Паттерн-матчинг</h2><p>Паттерн-матчинг, или сопоставление с шаблоном, — это обобщённое название множества фич, добавленных в компилятор. Попробуем разобрать их все от простого к сложному.</p><h3>is на стероидах</h3><p>Оператор is существует с первой версии языка C# и используется для проверки переменной на соответствие определённому типу. До сих пор в статьях и книгах по C# можно встретить такой код:</p><p>В современном C# нет необходимости проверять тип и приводить к нему в два действия. Можно просто использовать паттерн-матчинг:</p><p>Более того, в C# 11 в паттерн-матчинг можно внести вырезание строки:</p><p>Как это читать: выражение после is говорит, что переменная x должна быть строкой (паттерн типа) и может быть разложена на три подстроки (паттерн списка):</p><p>— один символ в начале, который мы в дальнейшем никак не используем, так как указали подчёркивание вместо имени переменной (паттерн отбрасывания значения);</p><p>— один символ в конце, который мы также игнорируем, а подстроку из любого количества символов в середине присваиваем переменной s и просим компилятор вывести её тип (var-паттерн).</p><p>Ключевое слово and создает логический паттерн, когда переменная должна соответствовать обоим паттернам слева и справа от and.</p><p>В этом случае, если строка содержит меньше двух символов, то выражение is вычисляется как false и Console.WriteLine не будет выполнено. Если нам хочется, чтобы подстрока s имела длину больше нуля, то необходимо написать ещё одно условие:</p><p>Теперь мы проверяем, чтобы переменная s, полученная в результате сопоставления с шаблоном, соответствовала паттерну (паттерн свойства): свойство Length должно иметь значение больше 0 (паттерн сравнения). Здесь важно не путать логические паттерны и булевы операторы. Это не одно и то же, и они не взаимозаменяемы.</p><p>То же самое можно записать в виде логического паттерна внутри лист-паттерна:</p><p>На этом примере становится понятно, что сложные логические условия можно записать компактно. Однако читаемость таких выражений сопоставления с шаблоном падает очень быстро.</p><h3>switch и паттерн-матчинг</h3><p>В выражениях case оператора switсh также можно использовать паттерны:</p><p>В примере выше используются паттерн деконструкции (в документации «позиционный паттерн») и паттерны сравнения.</p><p>В C# 8 ввели switch expression с более компактным синтаксисом, похожим на функциональные языки:</p><p>В этом и предыдущем примере используется case guard — произвольное булево выражение после ключевого слова when. Оно необходимо в случаях, когда мы не можем выразить необходимые условия в паттернах.</p><p>switch expression удобно использовать для создания машины состояний. На одном из форумов была такая задача: для последовательности цифр требуется убедиться, что 1 есть как минимум один раз, 2 — только один раз, 3 — как минимум один раз, а после этого ничего быть не должно.</p><p>Компилятор проверяет, что паттерны покрывают всё пространство входных значений, и если это не так — выдаёт предупреждение. Если паттерн-матчинг не смог найти подходящий паттерн, в рантайме будет ошибка. Как превратить предупреждения в ошибку компиляции вы уже знаете.</p><h3>Проверка на null</h3><p>После появления паттерн-матчинга проверку на равенство ссылки null необходимо проделывать следующим образом:</p><p>Это связано с тем, что перегруженные операторы == и != могут давать ошибки если левосторонний аргумент равен null.</p><h2>Заключение</h2><p>Мы рассмотрели неполный список нововведений, появившихся в новых версиях С#, начиная восьмой версии языка. Однако затронули наиболее важные из них, которые влияют на то, как мы пишем программы.</p><p>Чтобы поддерживать в форме свой уровень языка, советуем ознакомиться с <a href="https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-version-history">историей версий C#</a> и прочитать <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/">руководство по языку</a> — скорее всего, узнаете много нового, если давно в него не заглядывали.</p><p>А тем, кому хочется большего, рекомендуем курс Route 256 от Ozon Tech по современным технологиям C#.</p><p>Программа рассчитана на разработчиков с опытом от 3 лет. Преподаватели и тьюторы — инженеры Ozon Tech. За два месяца вы сможете подтянуть скилы и освежить знания. На курсе вы научитесь создавать и настраивать микросервисы на ASP.NET Core, эффективно работать с асинхронным кодом, проектировать сложные распределенные системы, создавать REST и gRPC API и другое.</p><p>Надеемся, статься оказалась для вас полезной. Остались вопросы? Задайте их в комментариях.</p><p><i>Реклама ООО</i><i> «Озон технологии» LjN8K484i</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Пишем систему омниканальной рассылки оповещений в Telegram</title>
      <link>https://tproger.ru/articles/pishem-sistemu-omnikanalnoj-rassylki-opoveshhenij-v-telegram</link>
      <comments>https://tproger.ru/articles/pishem-sistemu-omnikanalnoj-rassylki-opoveshhenij-v-telegram?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Мария Кривоченко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pishem-sistemu-omnikanalnoj-rassylki-opoveshhenij-v-telegram</guid>
      <description><![CDATA[<p>Рассказали, как устроена система омниканальной рассылки без сложной персонализации и как реализовать что-то похожее с отправкой в Telegram</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pishem-sistemu-omnikanalnoj-rassylki-opoveshhenij-v-telegram">Пишем систему омниканальной рассылки оповещений в Telegram</a>»</p>]]></description>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 14 Mar 2023 08:11:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Все мы знаем о рассылках, где нас приглашают что-то купить или дарят бонусные рубли. Они не пишутся и не отправляются в ручном режиме — это долго, дорого и непрактично (особенно, если вы вдруг решили порадовать скидкой сразу миллионы клиентов). Такими сообщениями занимаются системы, которые на основе правил собирают «уникальные» предложения и отправляют их по SMS, на почту или в пуш-уведомлениях.</p><p>В статье постараемся разобраться, как устроена система омниканальной рассылки без сложной персонализации и большой базы данных клиентов. Обсудим вводные и посмотрим, как реализовать что-то похожее с отправкой в Telegram (в нашем случае, в банке, мы отправляем информацию по инцидентам). И даже организуем простенькую систему защиты каналов от незваных гостей.</p><h2>Немного о системе</h2><p>Для своего, узкого, пользования мы разработали систему омниканальной отправки сообщений. И научили её собирать сообщения в raw-, markdown- и html-форматах для отправки по разным каналам: hpsm, Ivanti, email, Mattermost и Telegram.</p><p>Сервис помогает удобно и быстро встраивать уведомления для разных каналов связи в другие системы. Что позволяет в режиме реального времени менять шаблоны сообщений, а также учетные записи и, например, адреса smtp-серверов. Единственная проблема — ещё одна точка отказа для других систем.</p><p>Углубляться в систему не будем — лишь выделим интересующий нас API-метод /interact, и назовём его точкой входа. В этот метод мы будем передавать инструкции по сборке и отправке сообщений. Ключевыми параметрами для выполнения запроса будут: список каналов и получателей, набор параметров и «фич», а также нагрузка.  Например, такие:</p><p>В системе мы объявляем несколько уровней:</p><ol><li>Система. В нём мы определяем токены для интеграции API, указываем пути доставки с адресами, пароли, триггеры и все необходимое.</li><li>Триггеры. В них указываются базовые характеристики: имя, ключ доступа, поля, которые необходимо указать в инструкции, их характеристики и модификаторы; способы доставки, которые описывают, по какому каналу, объявленному на уровне системы, необходимо отправить сообщение, и как будет выглядеть само сообщение. Например, поле name имеет тип string, модификатор toUpperCase и так далее.</li></ol><p>Финальный API-метод исполнения инструкции отправки выглядит так: /api/v1/trigger_name_or_uid/interact.</p><p>Тут может возникнуть вопрос: куда делся первый уровень? Всё просто. Определение системы вшито в токен интеграции API.</p><p>Маршрут до оповещения выглядит так: system→ trigger → transport → template. Где transport — канал, по которым мы будем отправлять сообщения, а template — шаблон сообщения по транспорту. На этом моменте мы оставим дальнейшую работу системы под капотом.</p><h2>Шаблоны и параметры заполнения сообщения</h2><p>Триггер может включать в себя большой набор каналов доставки. Но не хватает самого сообщения, для которого, в свою очередь, нужны шаблон и параметры заполнения.</p><p>Шаблон вручную заполняет оператор системы — для каждого выбранного транспортного узла в триггере. То есть описывает инструмент и параметры отправки сообщения по каналу: Telegram, email, Mattermost и прочим.</p><p>Далее мы совмещаем шаблон с параметрами. Для этого используется движок Razor. Упрощенно, код инициализации экземпляра выглядит так:</p><p>А метод компиляции сообщения — так</p><h2>Telegram</h2><p>Телеграм предоставляет разработчикам несколько способов создать чат-бот и готовые библиотеки для работы с API. Нам понадобится способ Bot API. Это REST, поэтому много новой информации по взаимодействию искать не придётся.</p><p>Разработчики Bot API придумали интересный метод организации методов. Они разделили запрос на два части: токен доступа и название метода. Запрос на получение информации о боте в Telegram выглядит так: https://api.telegram.org/bot/getMe. Во всех адресах обращения к API будут меняться лишь названия методов:</p><ul><li>/getMe;</li><li>/sendMessage;</li><li>/getFile и так далее.</li></ul><p>Всю информацию по доступным методам можно найти здесь: <a href="https://core.telegram.org/bots/api#available-methods">https://core.telegram.org/bots/api#available-methods</a>.</p><h3>Регистрация бота в Telegram</h3><p>Для начала необходимо создать бота:</p><ul><li>заходим в приложение и запускаем чат с @BotFather;</li><li>отправляем команду /newbot и следуем инструкциям:пишем имя бота;вводим username, который обязательно должен заканчиваться на bot.</li></ul><p>Выполнив все шаги, мы получим сообщение об успешном создании бота и токен для работы с ним.</p><p>Храните токен в защищённом месте и не публикуйте его вместе с кодом в репозиторий. Если вдруг всё пошло не так, и секретность токена под угрозой, вы можете перевыпустить токен или отключить бота до момента решения вопросов с безопасностью.</p><h3>Учимся отправлять сообщения в чаты</h3><p>Для теста подойдёт любой канал, в котором вы являетесь администратором. Для отправки сообщений нам понадобится метод sendMessage.</p><p>Объявляем структуру сообщения:</p><p>Передаём идентификатор канала и сообщение:</p><p>Почти все запросы к Bot API будут с типом POST, так как это самый удачный метод для передачи большого набора данных (но можно и GET). Тело запроса на отправку сообщения в канал будет выглядеть так:</p><p>Поле parse_mode нужно, чтобы регулировать формат текста, выбрать html или markdown-разметку.</p><p>В модели Message поле parse_mode не указано для упрощения, но вы можете его добавить и поиграться с html или markdown-разметкой.</p><p>Отправлять сообщения пользователям тоже можно, но вот начать переписку с ботом в Telegram должен человек. Дальше надо научиться слушать события.</p><h3>Слушаем чаты</h3><p>Чтобы бот умел реагировать на команды, понадобится «сканирование» на обновления. Есть <a href="https://core.telegram.org/bots/api#getting-updates">два метода прослушивания обновлений</a>: регулярно ходить в Telegram или предоставлять ему адрес прослушивания на вашем сервере, то есть webhook.</p><p>Для реализации веб-хуков в корпоративном контуре нужно обосновать необходимость доступа и согласовать изменения. Это долго и сложно, поэтому мы используем первый вариант и будем получать обновления по методу getUpdates.</p><p>В теле запроса мы будем отправлять следующие данные: offset, limit, allowed_updates.</p><h4>offset</h4><p>Поле offset самое интересное. Оно обеспечивает последовательное чтение обновлений с сервера. Его магия в том, что если мы не будем указывать его в каждом последующем запросе, то будем всегда получать одни и те же обновления раз за разом. Назовём это поле «ластиком», который стирает все полученные ранее обновления, и предоставляет свежие.</p><p>Важно! Для корректного функционирования системы, в запросах getUpdates всегда необходимо указывать — идентификатор последнего полученного обновления. При первом вызове метода у нас его не будет — мы получим его после первого запроса getUpdates. При каждом последующем запуске приложения, что логично, идентификатора обновления снова не будет, вы получите его после первого запроса, конечно же, если в потоке будет хоть одно обновление.</p><h4>limit</h4><p>Это лимит обновлений, которые мы можем получить в одном запросе getUpdates. Получать можно от 1 до 100 обновлений за раз. По умолчанию стоит значение 100, поэтому поле можно не указывать, если вы хотите получать максимальное количество обновлений.</p><h4>allowed_updates</h4><p>Это поле — массив строк, то есть список типов обновлений, которые мы хотим получить в ответ. Для полного охвата нам будет достаточно: chat_member, message и my_chat_member. Полный список можно посмотреть тут: <a href="https://core.telegram.org/bots/api#update">https://core.telegram.org/bots/api#update</a>.</p><p>Вы получите ровно те объекты обновлений, типы которых были указаны в поле allowed_updates. В нашем случае объект может выглядеть так:</p><p>Каждый объект обновления в массиве результата будет включать в себя набор данных, к которому относится обновление. Исходя из них, мы сможем реагировать на сообщения пользователей, получать информацию о вступивших и вышедших пользователях канала.</p><h3>Верифицируем пользователей</h3><p>Нам нужно подтверждать легитимность присутствия пользователей в чате. Для этого используем:</p><ul><li>таблицу сопоставления логина телеграмм с логином в AD;</li><li>статус верификации;</li><li>кодовое слово — случайно сгенерированную строку в 1024 символа.</li></ul><p>Процесс выглядит так:</p><ol><li>Заводим заявку на подключение пользователя к Telegram.</li><li>В заявке генерируются необходимые данные: запись сопоставления логинов, ключ верификации и так далее.</li><li>На корпоративную почту отправляется сообщение с инструкцией, как пройти верификацию.</li><li>Пользователь отправляет секретный ключ через команду /verify в чат с ботом.</li><li>Мы обрабатываем все обновления с объектом message в ответе. То есть ищем поля message.chat.type, которым эквивалентно значение private.</li><li>Определяем команду /verify.</li><li>Подтверждаем верификацию в системе, сохраняем ID пользователя в таблицу сопоставления и отправляем ему письмо об успешной верификации.</li></ol><p>Мы решили обойтись без усложнений и не стали регистрировать команды в боте. Но вы можете зарегистрировать их для удобства ваших клиентов.</p><h3>Приглашаем пользователей в чаты</h3><p>Сперва нам нужно запросить разблокировку пользователя, даже если он не был заблокирован ранее. Для этого воспользуемся командой unbanChatMember. Как тело запроса передаём поля: chat_id и user_id — и проверяем в поле в коде OK 200.</p><p>Далее генерируем ссылку на приглашение методом createChatInviteLink. В теле передаём поля chat_id, expire_date, member_limit = 1. Лимит нужен, чтобы ограничить количество вошедших по ней пользователей. (все равно неавторизованного пользователя мы забаним<b>????</b>).</p><p>Дата «протухания» приглашения передаётся в формате unix (seconds).</p><p>Далее отправляем сообщение пользователю со ссылкой на приглашение. Например, «Вам отправлено приглашение на вступление в группу ‘{chat.FriendlyName}’.\n{inviteLink.Link}\n Приглашение активно до {invite.ExpireDate.ToUniversalTime():dd.MM.yyyy H:mm:ss zzz».</p><h3>Блокировка неверифицированных пользователей</h3><p>Для определения нового вошедшего в канал  пользователя получаем значение из поля chat_member.member.status. Оно должно быть эквивалентно значению member. Если пользователь есть в системе, и он помечен как верифицированный, то мы игнорируем сообщение. Иначе смотрим на него с презрением и выписываем перманентный бан.</p><p>Для блокировки в чате используем метод banChatMember. В тело запроса передаём 2 поля: chat_id и user_id. И пишем пользователю в личку информацию о блокировке c инструкцией, как выйти и зайти правильно.</p><h2>Что в итоге</h2><p>Так, мы научили бота Telegram отправлять сообщения, получать обновления, верифицировать, приглашать в чаты и блокировать пользователей. Благодаря этому, нам не нужен оператор Telegram-чатов, который добавлял бы пользователей и сообщения в канал вручную. За все отвечает автоматизированная система, для которой достаточно указать обязательные поля, чтобы она собрала все необходимые варианты сообщений и отправила их в соответствующие каналы.</p>]]></content:encoded>
    </item>
    <item>
      <title>Актуальность C# и выбор его как первого языка программирования</title>
      <link>https://tproger.ru/articles/aktual-nost-c-i-vybor-ego-kak-pervogo-yazyka-programmirovaniya</link>
      <comments>https://tproger.ru/articles/aktual-nost-c-i-vybor-ego-kak-pervogo-yazyka-programmirovaniya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Igor Lopushko]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/aktual-nost-c-i-vybor-ego-kak-pervogo-yazyka-programmirovaniya</guid>
      <description><![CDATA[<p>В обзоре на C# рассказываем, почему этот язык актуален, какие проекты на нём пишут, какие у языка плюсы и минусы и какие у него перспективы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/aktual-nost-c-i-vybor-ego-kak-pervogo-yazyka-programmirovaniya">Актуальность C# и выбор его как первого языка программирования</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 16 Feb 2023 13:19:31 GMT</pubDate>
      <content:encoded><![CDATA[<p>Первая версия язык программирования C# была выпущена в январе 2002 года вместе с Visual Studio .NET 2002. Это объектно-ориентированный язык программирования общего назначения разработанный в компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота.</p><p>Язык относится к C-подобным языкам и больше всего близок к С++ и Java. Название языка было позаимствовано из музыкальной нотации, где символ # (диез) означает повышение стоящих справа от него нот на один хроматический полутон. Это означало то, что язык является инкрементальным продолжение языка C++, в то время как C++ был последователем C.</p><p>За более чем 20-ти летнюю историю язык пережил большое количество ревизий, а так же путь от технологии строго привязанной к платформе Windows, до кроссплатформенного языка программирования работающего на многочисленных операционных системах.</p><p>Первая версия C# была разработана как простой многоцелевой язык общего назначения, и по сравнению с ней, сегодня C# это современный и мощный язык программирования.</p><h2>Какие проекты пишут на C#</h2><p>Когда речь идет о языке программирования C#, нельзя забывать о платформе .NET, которая дает большой спектр технологий основанных на C#. Как уже было сказано ранее, C# является языком программирования общего назначения, а значит покрывает большое количество задач и областей, а именно:</p><ul><li>Web – разработка web-приложений и сервисов для платформ macOS, Windows, Linux и Docker.</li><li>Mobile – разработка единой кодовой базы для построения нативных приложения для iOS и Android.</li><li>Desktop – разработка нативных приложения под Windows и macOS.</li><li>Microservices – разработка независимых компонентов запускаемы в Docker контейнерах.</li><li>Cloud – использование существующих облачных решений или создание собственных. C# поддерживается большинством облачных платформ, такими как Azure и AWS.</li><li>Machine learning – разработка приложений искусственного интеллекта и машинного обучения, решающие проблемы машинного зрения, обработки речи, моделей предсказания, и тд.</li><li>Game development – разработка 2D и 3D игра для самых популярных десктопных и мобильных платформ.</li><li>Internet of Things (IoT) – разработка приложений для интернета вещей, имеющие поддержку Rasbery Pi и других одноплатных компьютеров.</li></ul><p>Исходя из вышеперечисленных областей применения видно, что платформа .NET и язык программирования C# покрывают большой спектр проектов на рынке. Это говорит нам о том, что изучив язык программирования C# с легкостью можно найти проект на любой вкус.</p><h2>Рейтинг языка C#</h2><p>Популярность языка программирования C# была разной на протяжении всего существования языка. От снижения интереса к языку привязанного к Windows платформе примерно в 2013-2015 годах, до возрождения после появления кроссплатформенного .NET Core.</p><p>На данный момент язык занимает твердое пятое место в рейтинге языков по версиям <a href="https://www.tiobe.com/tiobe-index/">TIOBE</a> и <a href="https://octoverse.github.com/2022/top-programming-languages">Github</a>. Именно релиз кроссплатформенной среды .NET Core с открытым исходным кодом в июне 2016 года дал новый толчок развития языка программирования C# и вернул Майкрософт прежние позиции на рынке.</p><h2>Перспективы развития языка C#</h2><p>Компания Mайкрософт после объединения старой версии .NET Framework поддерживаемого платформой Windows и нового кроссплатформенного .NET Core в единую платформу .NET, объявила о ежегодном обновлении языка. Данная динамика отслеживается на протяжении последних нескольких лет.</p><p>Так же в связи с тем, что исходных код .NET Core стал публично доступен, вокруг этой платформы вновь стали собираться энтузиасты и большое сообщество, что позитивно отражается на динамике развития языка C#. Компания Майкрософт старается занять как можно больше ниш рынка, поэтому активно развивает свою платформу .NET.</p><p>Как же меняется язык ежегодно? Конечно же не вносятся какие-то кардинальные изменения в язык программирования C#, к примеру как это было в первых версиях, появления встроенного LINQ или переходом от классической много поточности к асинхронному программированию и Task-ам. В языке появляются новые операторы, конструкции, типы данных. Кто-то может сказать, что это синтаксический сахар и язык не меняется кардинальные, но суть в том, что C# развивается в соответствии с потребностями рынка и сообщества, которым им пользуется.</p><h2>Изучение C# и платформы .NET как первого языка</h2><p>Ни для кого не секрет, что IT-индустрия очень быстро развивается и меняется. Следует заметить, что за последние 20 лет произошло много изменений. Это касается как ролей на проектах и состава команд, так и технологий и подходов в программировании. Переход от низкоуровневых и сложных языков программирования, где необходимо большое количество фундаментальных знаний и навыков, к платформенным и управляемым языкам, которые ускоряют разработку и упрощают жизнь программистам.</p><p>Язык программирования C# идеально подходит для изучения для студентов вузов и людей, у которых есть фундаментальные знания в области IT. Для тех, кто только хочет попробовать свои силы в IT-индустрии и не знаком с основами программирования, C# может быть сложным для изучения. C# строгий и систематичный язык, поэтому с помощью его вы сможете четко понять и изучить все тонкости программирования.</p><h2>Преимущества использования и изучения C#</h2><p>C# является управляемым языком программирования, что позволяет разработчику не следить за выделением и использованием памяти. Для этого существует CLR (Common Language Runtime) – виртуальная машина, которая занимается запуском приложения, а также управлением памятью.</p><p>Также C# является строго типизированным и объектно ориентированным языком, что позволяет использовать ООП в его классическом виде. Здесь нет множественного наследования классов, что упрощает понимание ООП, но есть множественная реализация интерфейсов, что дает большую гибкость для разработчиков.</p><p>Большое сообщество и универсальность языка дают большое поле для деятельности. Как уже было указано ранее, вы можете разрабатывать веб-приложения, сложные микросервисные платформы, игры, а так же мобильные приложения. Здесь действительно серьезный инструментарий для разработки, такие IDE как Visual Studio или JetBrains Rider. Наличие огромнейшего разнообразия библиотек на все случаи жизни, от обратки изображений и видео, до нейросетей. А кроссплатформенность дает возможность писать код как на Windows, так и на macOS и Linux.</p><h2>Недостатки языка C#</h2><p>Недостатки следуют из преимуществ. Как уже было упомянуто ранее на языке С# можно разрабатывать множество различных приложений. Это делает язык достаточно емким и обширным в плане подходов и конструкций. На собеседовании скорее всего вас будут спрашивать все глубины .NET платформы и языка C#. Но на практике не всегда приходится всем этим пользоваться.</p><p>Из-за того, что C# используется в интерпрайз сегменте, есть вероятность попасть на “старый” проект или задержаться на одном проекте очень долго. Так же обычно такого рода проекты имеют сложную доменную область, которую волей не волей необходимо изучить в ходе выполнения проекта.</p><h2>Заключение</h2><p>Язык программирования C# зрелый и достаточно современный. Большинство последних подходов добавлены в язык или планируются в ближайших версиях. Основная территория платформы .NET и языка C# это энтерпрайз, а это возможность работать над большими и сложными проектами в различных доменных областях, а относить это к преимуществам или недостаткам, это решать вам. Возможна мобильная разработка и разработка игр. Огромное сообщество разработчиков, множество литературы и ресурсов для изучения, большое количество открытых вакансий на рынке, говорит о стабильности и крепких позициях C# на рынке.</p>]]></content:encoded>
    </item>
    <item>
      <title>МТС перевела «Щелкунчика» на пять языков программирования</title>
      <link>https://tproger.ru/articles/mts-perevela-shhelkunchika-na-pjat-jazykov-programmirovanija</link>
      <comments>https://tproger.ru/articles/mts-perevela-shhelkunchika-na-pjat-jazykov-programmirovanija?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Виктория Овсянникова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/mts-perevela-shhelkunchika-na-pjat-jazykov-programmirovanija</guid>
      <description><![CDATA[<p>Участники хакатона МТС «ЩЕЛКУНЧИК. Меньше слов — больше кода!» переводили текст сказки Гофмана на Python, Java, JavaScript, C# и Go.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/mts-perevela-shhelkunchika-na-pjat-jazykov-programmirovanija">МТС перевела «Щелкунчика» на пять языков программирования</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 01 Feb 2023 12:50:18 GMT</pubDate>
      <content:encoded><![CDATA[<figure><img src="https://media.tproger.ru/uploads/2023/02/Shhelkunchik.png" alt="" /></figure><p>МТС провела хакатон «ЩЕЛКУНЧИК. Меньше слов — больше кода!», на котором более 1600 программистов переводили текст сказки Гофмана на пять языков программирования: Python, Java, JavaScript, C# и Go.</p><p>Каждая глава начинается с описания процесса перевода слов в код. Сам текст сказки представлен в двух видах: на языке кода и в оригинале. Иллюстрации к книге созданы открытой нейросетью Stable Difusion и чат-ботом MTS (AI) guided image diffusion bot.</p><figure><img src="https://media.tproger.ru/uploads/2023/02/Snimok-jekrana-2023-02-01-v-14.00.06.png" alt="" /></figure><p>MTS (AI) guided image diffusion bot создал техлид MTS AI Андрей Иванов. Бот генерирует изображения на основе текстового описания с помощью двух нейросетей. kandynsky/stable_diffusionv2 обрабатывает текст и создаёт первичные изображения. Потом полученные картинки дорабатываются с помощью stable_diffusionv2-img2img, параллельно запрос переводится на английский через онлайн-переводчик. После этого stable_diffusionv2 увеличивает разрешение в два раза, до 1024х1024 пикселей. Сейчас бот работает в тестовом режиме для внутренних проектов MTS AI и МТС.</p><p>«В этом проекте ПАО «МТС» и MTS AI объединили талантливых людей для решения креативных задач. Щелкунчик, переведенный на 5 языков программирования, станет напоминаем о том, что AI — это сфера, где разработчики могут создавать настоящие шедевры — к ним можно отнести и код, и изображения, сгенерированные нейросетью», —Александр Ханин, генеральный директор MTS AI.</p><p>Проект будут использовать для обучения по искусственному интеллекту и интегрируют в образовательные проекты МТС. Скачать книгу можно <a href="https://hr.mts.ru/book_shelk?utm_source=habr">по ссылке</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Лучший язык программирования: рейтинг TIOBE 2022</title>
      <link>https://tproger.ru/articles/luchshij-jazyk-programmirovanija-rejting-tiobe-2022</link>
      <comments>https://tproger.ru/articles/luchshij-jazyk-programmirovanija-rejting-tiobe-2022?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/luchshij-jazyk-programmirovanija-rejting-tiobe-2022</guid>
      <description><![CDATA[<p>В этом году рейтинг языков программирования TIOBE удивил тройкой лидеров. Узнайте, какой из языков потеснил Java и вышел в топ-3!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/luchshij-jazyk-programmirovanija-rejting-tiobe-2022">Лучший язык программирования: рейтинг TIOBE 2022</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Статистика]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Perl]]></category>
      <category><![CDATA[Язык Си]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 23 Dec 2022 12:35:23 GMT</pubDate>
      <content:encoded><![CDATA[<p>На днях у нас прошёл батл языков программирования 2022, и настало время обратиться к рейтингам TIOBE.</p><p>Напомним, что индекс TIOBE оценивает популярность языков программирования, основываясь на поисковых запросах, которые содержат тот или иной язык. Для формирования индекса используются такие ресурсы, как Google, YouTube, Amazon, Wikipedia, Yahoo!, Bing и Baidu.</p><p>В 2023 году популярность языков изменилась. Какие языки потеряли популярность, а какие — нет, <a href="https://tproger.ru/articles/best-prog-lang-2023">рассказали в этой статье</a>.</p><ol><li>Python, C и C++ соревнуются за звание лучшего языка</li><li>Пара слов о других языках</li><li>Выводы</li></ol><h2>Python, C и C++ соревнуются за звание лучшего языка</h2><p>Именно таковы результаты по состоянию на конец декабря — двадцать языков программирования с наибольшей рыночной долей по версии TIOBE:</p><figure><img src="https://media.tproger.ru/uploads/2022/12/9bcee0e3-9325-45a6-985b-c850cc01a924.jpg" alt="" /></figure><p>Ещё в прошлом году Java уверенно держалась в тройке, но теперь уступила своё место «плюсам». Любопытно, что в последний раз C++ становился лидером рейтинга TIOBE в далёком 2003 году, и это впервые, когда данный язык программирования обошёл Java по поисковым запросам. При этом Java входила в топ-3 свыше двадцати лет, начиная с 2001.</p><p>Уже в следующем месяце мы узнаем имя победителя. Каждый из лидирующей тройки уже занимал первое место по итогам года:</p><ol><li>C++ — 1 раз (2003).</li><li>C — 3 раза (2008, 2017, 2019).</li><li>Python — 5 раз (2007, 2010, 2018, 2020, 2021).</li></ol><h2>Пара слов о других языках</h2><p>Помимо прочего, мы видим, как Kotlin и Julia приближаются к топ-20, JavaScript держится в семёрке, а PHP вырывается в десятку, тогда как в прошлом году занял 12-е место.</p><p>Интересно, что Go поднялся аж на 7 позиций и теперь занял 12-е место рейтинга. Стоит отметить, что по версии GitHub за третий квартал 2022 Golang также находится на четвёртом месте по популярности, обогнав при этом PHP, C, C#, Ruby, TypeScript и JavaScript. Тенденция налицо:</p><figure><img src="https://media.tproger.ru/uploads/2022/12/d6659c61-2e2c-4fa7-8d63-f8121e17b018.jpg" alt="" /></figure><p>На 18-е место рейтинга TIOBE вернулся Perl. Rust удерживает 20 позицию. Что касается Delphi, то он всю осень прыгал туда-сюда:</p><ul><li>сентябрь — 13 место (1.09%);</li><li>октябрь — 18 место (0.85%);</li><li>ноябрь — 14 место (1.08%).</li></ul><p>В декабре же язык опустился на 16 место (0.85%), что соответствует результатам декабря прошлого года.</p><h2>Выводы</h2><p>Разумеется, рейтинг языков программирования 2022 TIOBE сложно назвать объективным, так как он рассматривает лишь один аспект — популярность ЯП в поисковых запросах пользователей. Он не отражает реальный рыночный спрос или количество написанного кода, как это делает GitHub в своих отчётах на основе проектов.</p><p>Тем не менее, индекс TIOBE можно использовать, чтобы проверить, актуальны ли ваши навыки, или принять решение о том, на какой язык программирования можно перейти или какой следует использовать при написании новой программы.</p>]]></content:encoded>
    </item>
    <item>
      <title>Баттл языков программирования 2022 завершился</title>
      <link>https://tproger.ru/articles/battl-jazykov-programmirovanija-2022-zavershilsja-2</link>
      <comments>https://tproger.ru/articles/battl-jazykov-programmirovanija-2022-zavershilsja-2?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/battl-jazykov-programmirovanija-2022-zavershilsja-2</guid>
      <description><![CDATA[<p>Закончилась битва за звание лучшего языка программирования в 2022 году. C# занимает первое место, Python — второе, а Java — третье.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/battl-jazykov-programmirovanija-2022-zavershilsja-2">Баттл языков программирования 2022 завершился</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Лучший язык 2022]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 21 Dec 2022 08:05:36 GMT</pubDate>
      <content:encoded><![CDATA[<p>Битва за звание лучшего языка программирования 2022 подошла к концу. Вот тройка победителей битвы по <a href="https://tproger.ru/articles/final-bitvy-jazykov-programmirovanija-2022/">результатам финального голосования</a>:</p><ol><li>C# — первое место. Си шарпу удалось обойти Python всего на 100 голосов, и он становится лучшим языком программирования в 2022 году.</li><li>Python — язык программирования, который был признан лучшим в 2020 и 2021 годах. В этом году Python занимает второе, не менее почётное место, уступив всего лишь 6% голосов C#.</li><li>Java — занимает третье место, набрав 1200 голосов против 845 голосов за TypeScript в финальном голосовании.</li></ol><p>Сравните результаты 2022 года с <a href="https://tproger.ru/articles/battl-jazykov-programmirovanija-2021-zavershilsja/">прошлогодними</a>.</p><p>Напоминаем, что турнирная таблица составлялась случайным образом, а лучший язык программирования выбирается не по его функциональности. В голосовании всё решала только народная любовь.</p><p>Поздравляем C#-программистов с долгожданной и заслуженной победой! ?</p><figure><img src="https://media.tproger.ru/uploads/2022/12/Frame-9.png" alt="" /></figure>]]></content:encoded>
    </item>
    <item>
      <title>Финал битвы языков программирования 2022</title>
      <link>https://tproger.ru/articles/final-bitvy-jazykov-programmirovanija-2022</link>
      <comments>https://tproger.ru/articles/final-bitvy-jazykov-programmirovanija-2022?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/final-bitvy-jazykov-programmirovanija-2022</guid>
      <description><![CDATA[<p>В 2022 году за третье и четвёртое место в битве лучших языков программирования борются TypeScript и Java, за первое и второе — Python и C#.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/final-bitvy-jazykov-programmirovanija-2022">Финал битвы языков программирования 2022</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Лучший язык 2022]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 20 Dec 2022 08:00:29 GMT</pubDate>
      <content:encoded><![CDATA[<p>Начинается финальное голосование за звание лучшего языка программирования в 2022 году.</p><p>За третье и четвёртое место в рейтинге борются TypeScript и Java. За первое и второе место — Python и C#.</p><p>По итогам полуфинала C# обошёл Java всего на 6%, а Python выиграл TypeScript с отрывом в 16% голосов. Результаты прошлого раунда можно посмотреть <a href="https://tproger.ru/articles/polufinal-bitvy-jazykov-programmirovanija-2022/">здесь</a>.</p><p>Подпишитесь на тег <a href="https://tproger.ru/tag/luchshij-jazyk-2022/">Лучший язык 2022</a> и следите за обновлениями в личной ленте, чтобы не пропустить результаты финала.</p><figure><img src="https://media.tproger.ru/uploads/2022/12/battle_table1.png" alt="" /></figure>]]></content:encoded>
    </item>
  </channel>
</rss>