<?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>Для чего хорош язык X</title>
    <description>Цикл статей, в котором мы рассказываем о самых распространённых применениях языков программирования.</description>
    <link>https://tproger.ru/tag/what-language-x-is-good-for</link>
    <atom:link href="https://tproger.ru/tag/what-language-x-is-good-for/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Tue, 06 Oct 2026 05:55:35 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Для чего хорош язык X</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Типизированный Go: четыре преимущества языка</title>
      <link>https://tproger.ru/articles/tipizirovannyj-go-chetyre-preimushhestva-yazyka</link>
      <comments>https://tproger.ru/articles/tipizirovannyj-go-chetyre-preimushhestva-yazyka?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Виталий Левченко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tipizirovannyj-go-chetyre-preimushhestva-yazyka</guid>
      <description><![CDATA[<p>Как Go защищает от ошибок и повышает производительность и какое значение в разработке имеет улучшенная читаемость и документация языка.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tipizirovannyj-go-chetyre-preimushhestva-yazyka">Типизированный Go: четыре преимущества языка</a>»</p>]]></description>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Для чего хорош язык X]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 22 Aug 2023 08:07:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Одно из делений языка программирования заключается в типизации. От того, типизирован язык или нет, зависит база, на которой строится код. К типизированным, кроме прочих, относится язык Go (Golang).</p><p>Лид курса по языку Go в Яндекс Лицее и лид backend community Практикума <b>Виталий Левченко</b> написал колонку о том, какие преимущества Go имеет перед другими языками и какие задачи это помогает решать на практике.</p><h2>Где активно применяют Go</h2><p>В реальности на Go пишут в первую очередь веб-сервисы и инфраструктурные утилиты. И если по веб-сервисам есть богатый выбор языков программирования: Java, Python, Ruby, РНР и другие, то в случае инфраструктурных сервисов альтернатив практически нет. С релиза Go, который был в 2013 году, практически все новые инфраструктурные утилиты open source писались на Go, включая Prometheus, Kubernetes, Docker и Terraform.</p><p>В этом плане важно помнить, что Go — типизированный язык, что даёт ему несколько преимуществ.</p><h2>Улучшенная читаемость и понимание кода</h2><p>Существенная часть разработки — это не писать код, а читать его и разбираться, как в него внести изменения, как довести до состояния, которое можно выкатывать в продакшен.</p><p>Типизация помогает эффективнее работать с этим кодом, позволяя лучше понимать, как на самом деле функционирует код. Go преподают даже для старшеклассников — такой курс есть в том же Яндекс Лицее.</p><p>Приведу пример типизации — в Go она требует от разработчика чётко объявить тип данных. Так разработчики понимают, какие данные ожидаются и какие операции можно с ними выполнить. Это ясно даже по сигнатуре функций.</p><p>Например, сравните типичную функцию обработчика событий:</p><p>И в Go:</p><p>Причём добавление типов не сильно меняет ситуацию:</p><h2>Прямая документация</h2><p>Допустим, в сервисе на Go есть строки из примера выше.</p><p>Из них мы понимаем, что в программу будут переданы переменные с явно заданными полями типов Action и ProcessParams, а возвращается переменная типа Event, может быть ошибка, которую важно обработать.</p><p>Наличие типов к переменным или параметрам, которые имеют внятное название, делает функцию, класс или структуру самодокументируемыми. И уже по сигнатуре понятно, какая есть вариативность того, что она умеет делать.</p><p>Скажем, в функцию передаётся params, extra или props (так в JavaScript называют передачу properties). Из документации языка ясно, какие данные они принимают к себе, какие операции с ними могут или не могут проводить, каким образом переменные при них обрабатываются.</p><p>Так, params — структура с несколькими десятками полей. Если этого нет, а просто идёт какая-то переменная, которая выводится как массив, то разработчику сложно понять, что она ожидает, как работает и прочее. Чтобы понять, как работает конкретный параметр и можно ли поправить его поведение, приходится реверс-инжинирить, разбираться в коде функции и во всех её вызовах.</p><p>Типизация от этого избавляет.</p><h2>Безопасность и защита от ошибок</h2><p>В масштабном проекте избежать ошибок при написании кода полностью невозможно, но даже отсутствие 1% этих ошибок значительно повышает качество разработки.</p><p><b>Во-первых</b>, в Go за счёт типизации есть уверенность в том, что ты вызываешь и к чему это приведёт. В итоге процесс разработки ускоряется, он не требует перепроверки и не вызывает неожиданных ошибок в рантайме.</p><p><b>Во-вторых</b>, существует проблема, связанная с неявным преобразованием типов данных, которые есть в языках типа PHP, JavaScript или Python, когда программа начинает вести себя неожиданным образом. Например, код</p><p>выглядит как проверка статуса на null и некорректно срабатывает на нулевом значении статуса enum.</p><p>Особо неприятно, что это может быть ожидаемым поведением, а может — типичной ошибкой при разработке в потоке. И такая проблема системна, я вижу её раз за разом в большом количестве проектов, и строгая типизация от неё избавляет, потому что в ней нет неявного преобразования.</p><p>Такая же проблема встречается и в YAML, где неудачно написанная строка Yes внезапно интерпретируется как true, что тоже становится неявным преобразованием.</p><p><b>В-третьих</b>, типизация мотивирует разработчика подумать над сигнатурами и типами, которые передаются. То есть нужно указать тип, и потому приходится подумать, какой тип необходим, а не просто указать переменную.</p><p>Данный этап мотивирует сразу подумать об архитектуре. Само это улучшает качество программы.</p><p>В итоге мы имеем ситуацию, что со строгой типизацией нужно написать чуть больше кода, но на практике это экономит время при чтении, перепроверке и всём остальном.</p><p>Поэтому обычно вырисовывается картина, что языки без типизации хороши для стартапа, который собирает MVP, чтобы проверить гипотезы и начать зарабатывать деньги. Многие криптовалютные проекты писались на JavaScript именно потому, что их можно быстро создать на коленке, не заботясь ни об архитектуре, ни о типах данных.</p><p>В момент же, когда появляются требования к качеству сервиса и ресурсы на него, проект переезжает на типизированный язык.</p><h2>Улучшенная производительность</h2><p>Строгая типизация позволяет компилятору или интерпретатору оптимизировать код и использовать более эффективные алгоритмы, чтобы работать с типами данных. И это может привести к улучшению производительности программы.</p><p>Любой программный код транслируется в машинный. Процессор при этом про высокоуровневые типы данных знать не хочет. Ему для работы необходимы байты и числа.</p><p>В случае с нетипизированным кодом хорошо, если рантайм-компилятор (JIT) способен оптимизировать его для процессора. Если же рантайм на это не способен, то на уровне машинного кода начинает происходить сложная обработка в зависимости от того, что у нас за тип данных пришёл на каждый нетипизированный параметр.</p><p>По итогу программа на свою работу тратит больше времени — и это может быть в десять раз дольше, чем при типизированном языке.</p><p>Проблему частично решает JIT-компилятор, но делает это довольно специфично — «смотрит» на статистику использования.</p><p>Допустим, в одну переменную приходил тип данных int, в другую — string. Компилятор анализирует это и решает скомпилировать код под те переменные, которые приходят статистически. И если в переменную приходят и int, и string, то он создаёт две копии, скомпилированные и под первый, и под второй тип.</p><p>За счёт этого решения JavaScript работает достаточно быстро и сопоставимо с Go, несмотря на то что один язык типизированный, а другой нет. Но это создаёт некий набор проблем в рантайм, потому что:</p><ul><li>Оптимизация срабатывает не сразу.</li><li>Есть ограничения с типами, которые для каждого языка бывают специфичны. К примеру, JIT-компилятор может перестать работать, если видит в коде эксепшен.</li><li>В Python до сих пор не могут затащить JIT как стандарт.</li></ul><p>В Go этой проблемы нет: нет неявной типизации, а следовательно, не нужно прыгать с типами.</p><h4>В конечном итоге для крупных сервисов с нетривиальными задачами Go оказывается безопаснее и производительнее, а работать с ним проще из-за простой документации и типизации.</h4>]]></content:encoded>
    </item>
    <item>
      <title>Для чего хорош Swift?</title>
      <link>https://tproger.ru/articles/what-swift-is-good-for</link>
      <comments>https://tproger.ru/articles/what-swift-is-good-for?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Олег Борисенков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/what-swift-is-good-for</guid>
      <description><![CDATA[<p>Родной язык экосистемы Apple для iOS, iPadOS, watchOS, tvOS и macOS: чем он выигрывает у Objective-C и почему его легко освоить новичку.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/what-swift-is-good-for">Для чего хорош Swift?</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Для чего хорош язык X]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 19 Nov 2020 14:22:51 GMT</pubDate>
      <content:encoded><![CDATA[<p>Swift — это родной язык для приложений экосистемы Apple: iOS, iPadOS, watchOS, tvOS и macOS. С его помощью пишут мобильные приложения и десктопные программы. А с недавнего времени мобильные приложения можно запускать и на компьютере.</p><p>Предок Swift, Objective-C, уже сдаёт позиции и проигрывает в скорости работы. К тому же, код на Swift гораздо лучше читается и его легко <a href="https://tproger.ru/digest/free-mobile-courses/">изучить даже новичкам</a>.</p><p>Плюсы Swift:</p><ul><li>современные синтаксические конструкции: замыкания, дженерики, кортежи;</li><li>безопасность: защита от переполнения, Optional`ы, которые позволяют больше не бояться null;</li><li>отличная читаемость кода.</li></ul><figure><img src="https://media.tproger.ru/uploads/2020/11/Swift-code.png" alt="" /></figure><h2>Мобильные приложения</h2><p>Swift — единственный современный язык для разработки мобильных приложений в экосистеме Apple. Так же как и XCode — единственная официальная IDE для этого. Что с одной стороны ограничивает в выборе, с другой — вы имеете специализированный инструмент для работы.<br />С помощью Metal API (официальной библиотеки от Apple) делают игры и 3D графику. А библиотека ARKit позволяет создавать приложения дополненной реальности (AR).</p><h2>Десктоп</h2><p>Ещё одно из основных предназначений языка — десктопные приложения для macOS. Разработка также ведется в XCode с использованием множества нативных библиотек для кода и UI. Кроме того, <a href="https://swift.org/getting-started/#installing-swift">Visual Studio 2019</a> позволяет писать на Swift под Windows.</p><h2>Серверные и веб приложения</h2><p>Этот язык позволяет и такое. Например <a href="https://github.com/vapor/vapor">Vapor</a> — веб-фреймворк, который написан на Swift. Vapor позволяет писать веб-приложения, сайты, API, используя HTTP либо WebSockets. К тому же Vapor <a href="https://medium.com/@codevapor/server-side-swift-vs-the-other-guys-2-speed-ca65b2f79505">значительно быстрее</a> многих фреймворков. Да и использовать один и тот же язык на клиенте и сервере — это удобно.</p>]]></content:encoded>
    </item>
    <item>
      <title>Для чего хорош Java?</title>
      <link>https://tproger.ru/articles/what-java-is-good-for</link>
      <comments>https://tproger.ru/articles/what-java-is-good-for?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Тимур Кондратьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/what-java-is-good-for</guid>
      <description><![CDATA[<p>Java как платформа и мультипарадигмальный язык: принцип «Write Once, Run Anywhere», роль JVM и области, где язык применяют чаще всего.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/what-java-is-good-for">Для чего хорош Java?</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Для чего хорош язык X]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 24 Mar 2020 13:10:41 GMT</pubDate>
      <content:encoded><![CDATA[<p>Java — это программная платформа и мультипарадигмальный язык программирования.</p><p>Слоган Java — «Write Once, Run Anywhere» («Напишите один раз, запускайте где угодно») — хорошо отражает главный плюс языка. Программисту не нужно писать разные реализации одного и того же кода для разных ОС. За него всё сделает <a href="https://tproger.ru/blogs/jvm-insides/">JVM</a> (виртуальная машина Java). Это среда интерпретации кода, которая переводит код в инструкции, понятные каждой ОС и процессору.</p><p>Кроме того, с этого языка часто начинают обучение программированию.</p><p>Рассмотрим подробнее области, в которых Java является лидером.</p><h2>Мобильная разработка под Android</h2><p>Большинство популярных Android-приложений, вроде мобильных клиентов Telegram, Twitter и Chrome, написаны на Java. Язык обладает нативной поддержкой инструментов для <a href="https://developer.android.com/studio">Android SDK</a>, а плагины для Android-разработки встроены в популярные IDE, вроде <a href="https://www.jetbrains.com/ru-ru/idea/">IntelliJ IDEA</a> и <a href="https://www.eclipse.org/ide/">Eclipse</a>.</p><p>Конечно, с 2019 года Google объявил Kotlin от JetBrains предпочтительным языком для Android-разработки. Но всё ещё остаётся множество поддерживаемых приложений, обучающих материалов и документации, написанных специально для Java.</p><h2>Серверная разработка</h2><p>Один из самых популярных веб-фреймворков для серверной разработки — <a href="https://spring.io/projects/spring-framework">Spring Framework</a> — написан на Java.</p><p>Среди плюсов фреймворка:</p><ul><li>«из коробки» уже доступна функциональность для большинства задач;</li><li>в комплекте есть драйверы для множества реляционных и нереляционных СУБД, вроде MySQL, PostgreSQL, MongoDB, Cassandra и Clickhouse;</li><li>встроенные механизмы объектно-реляционного отображения (ORM);</li><li>программные системы безопасности.</li></ul><p>На Spring удобно разрабатывать из-за высокой модульности — базовую конфигурацию проекта можно буквально накликать на сайте <a href="https://start.spring.io/">Spring Initializr</a>.</p><h2>Многопоточные распределённые системы</h2><p>Распределённые системы — тренд последнего десятилетия. Топовые компании стремятся перенести разработку в облака, которые крутятся на серверных установках в удалённых дата-центрах.</p><p>Такой подход позволяет разбить решение одной задачи на множество маленьких равноценных подзадач, каждая из которых выполняется в выделенном узле. Это может быть полезно при работе с высоконагруженными веб-приложениями или большими объёмами данных.</p><p>Для распределённых вычислений существует несколько Java-фреймворков, вроде <a href="https://hadoop.apache.org/">Hadoop</a>, <a href="http://sparkjava.com/">Spark</a> и <a href="https://kafka.apache.org/">Kafka</a>, курируемых Apache. Они предлагают оптимизированные для поиска и обработки хранилища данных и эффективные алгоритмы работы с ними.</p><h2>Энтерпрайз</h2><p>Крупные компании Enterprise-сектора, среди которых Microsoft, Netcracker, IBM и многие банки, используют Java для разработки и поддержки внутренних приложений. Язык популярен из-за своей мультиплатформенности, масштабируемости и разнообразия программных средств. К тому же, Java-программиста найти намного проще, чем разработчика на Erlang или Elixir.</p>]]></content:encoded>
    </item>
    <item>
      <title>Для чего хорош Си?</title>
      <link>https://tproger.ru/articles/what-c-is-good-for</link>
      <comments>https://tproger.ru/articles/what-c-is-good-for?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/what-c-is-good-for</guid>
      <description><![CDATA[<p>Язык Си обычно используется в довольно сложных задачах. В каких? Отобрали для вас самые популярные области применения Си.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/what-c-is-good-for">Для чего хорош Си?</a>»</p>]]></description>
      <category><![CDATA[Язык Си]]></category>
      <category><![CDATA[Для чего хорош язык X]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 28 Feb 2020 13:56:35 GMT</pubDate>
      <content:encoded><![CDATA[<p>Авторы: Dor Marciano, Мария Багулина</p><p>Си применяют в сферах, где важен код, наиболее тесно взаимодействующий с «железом». Под влиянием Си появились языки C++, C#, Java и Objective-C.</p><p>Си иногда называют подмножеством C++ или «C++ без классов», но это не совсем верно. Почему это не так, можно узнать в <a href="https://tproger.ru/articles/what-cpp-is-good-for/">статье про C++</a>.</p><p>Си поддерживает исключительно процедурное программирование. Никаких классов, ООП, наследования — только функции и структуры. К основным особенностям языка относятся:</p><ul><li>доступ к памяти через указатели (особые переменные, в которых хранится адрес объекта);</li><li>активное использование структур и объединений;</li><li>чистый стиль программирования (код проще отлаживать, но сложнее писать).</li></ul><p>Си обычно используется в довольно специфичных и сложных задачах, потому что более лёгкие задачи проще сделать с помощью высокоуровневых языков. Мы отобрали несколько наиболее популярных применений Си.</p><h2>Оптимизация участков кода на C++</h2><p>Объектно-ориентированные возможности C++ часто обходятся дороже, чем «чистый Си», так как расходуют больше ресурсов (в частности оперативной памяти). Поэтому иногда код в стиле Си может быть эффективнее. Если нужно заставить какой-либо алгоритм работать быстрее — используйте процедурный стиль и откажитесь от встроенных инструментов C++ для ООП, например от полиморфизма.</p><p>Но если нужна действительно высокая скорость, лучше переписать часть кода на ассемблере.</p><h2>Информационная безопасность</h2><p>Сюда относятся сложные хакерские приёмы. Среди них:</p><ul><li>Использование уязвимостей: переполнения буфера, двойные удаления (повреждения кучи).</li><li>Инъекция (сокрытие) кода. Если получить доступ к другому процессу, используя уязвимость, то можно спрятать свой код внутри чужого и заставить процесс выполнять его. Теперь скрытый код будет жить в «невинном» процессе, спрятанном от глаз пользователя.</li><li>Перехват (hooking). Если вы хотите мониторить чьи-то взаимодействия с системой (нажатие клавиш, открытие файлов), вам, как правило, нужно вызывать отслеживающий код всякий раз, когда пользователь что-то делает. Для этого вы заменяете какой-либо фрагмент API операционной системы вашим кодом.</li></ul><p>Почти для всех этих применений используется PIC код (position-independent code — код, не зависящий от адреса). Он может выполняться в любом месте памяти, независимо от того, где находится и кто его запустил. У PIC-кода нет доступа к глобальным переменным и таблицам, поэтому C++ для его написания не подойдёт (классам C++ нужны глобальные таблицы для реализации наследования).</p><h2>Код ядра</h2><p>Код, который выполняется в режиме ядра (kernel mode) имеет полный доступ к памяти и оборудованию: RAM, GPU, жёсткому диску. В режиме ядра работают:</p><ul><li>Аппаратные драйверы — здесь без доступа к железу не обойтись. Драйверы являются посредниками между пользовательским кодом (не в режиме ядра) и оборудованием.</li><li>Ядро операционной системы. На Си, кстати, написано множество ядер ОС, в том числе Unix и Android.</li></ul><p>Использовать для всего этого код на C++ почти невозможно, поскольку в режиме ядра нет доступа к тем же глобальным таблицам, о которых говорилось выше. Иногда в режиме ядра тоже необходим PIC код — например для загрузчика (bootloader). Загрузчик — самая первая программа, выполняющаяся при запуске ПК. Биос извлекает её из жёсткого диска, помещает в память и говорит процессору запустить эту часть памяти.</p><h2>Embedded-разработка</h2><p>Для программирования встраиваемых систем часто используется как Си, так и C++. Но Си имеет преимущество, поскольку позволяет разрабатывать встроенное ПО при ограниченных ресурсах — например когда у микроконтроллера очень мало RAM. Помимо Си также может пригодиться знание ассемблера (как вариант, ARM-ассемблера) для написания ассемблерных вставок, чтобы ещё больше оптимизировать код и получить доступ к специфичным инструкциям процессора.</p>]]></content:encoded>
    </item>
    <item>
      <title>Для чего хорош C++?</title>
      <link>https://tproger.ru/articles/what-cpp-is-good-for</link>
      <comments>https://tproger.ru/articles/what-cpp-is-good-for?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/what-cpp-is-good-for</guid>
      <description><![CDATA[<p>C++ выигрывает там, где важна производительность кода. Три направления, в которых преимущества языка раскрываются лучше всего, включая оптимизацию.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/what-cpp-is-good-for">Для чего хорош C++?</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Для чего хорош язык X]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 08 Feb 2020 15:30:12 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>С++ — это как Си, только с ООП</b></p><p>Что это значит?</p><ul><li>можно работать с памятью на низком уровне;</li><li>нет «виртуальных машин» или фреймворков, которые занимаются, например, сборкой мусора или выделением памяти;</li><li>быстрое (иногда очень быстрое) выполнение кода по сравнению с более высокоуровневыми языками (Python, C#, Java и другими);</li><li>полный доступ к API операционной системы без обёрток (в которых может быть реализовано не всё).</li></ul><p>Но чем больше силы, тем больше ответственности. По сравнению с языками более высокого уровня, на С++ проще ошибиться. Причём так, что компилятор не подскажет и вы сразу не поймёте, в чём дело.</p><p>Итак, C++ хорош для проектов, в которых важна производительность кода.</p><h2>Где применяется С++?</h2><p>В недавнем интервью по ссылке ниже создатель языка рассказал, что C++ используют практически во всех областях. Мы выделим три направления, в которых лучше всего раскрываются преимущества языка.</p><h3>Оптимизация</h3><p>Перепишите любой код с языка более высокого уровня на C++, чтобы программа работала быстрее. Так часто делают в сфере глубокого обучения и других алгоритмических областях, где важна скорость. Подход может выглядеть так:</p><ul><li>пишу код на Python;</li><li>заставляю работать нейросеть, которая решит мою проблему;</li><li>переношу код на C++.</li></ul><p>Но это не всегда приносит пользу: иногда быстрая разработка важнее производительности, или выгода от переноса кода на C++ совсем незначительна.</p><h3>Игры</h3><p>В инди-играх обычно используются высокоуровневые языки и игровые движки (C# и Unity, Java и jMonkeyEngine), но на том же Unreal Engine можно создавать игры и на C++. Множество игр AAA-класса пишутся на C++ по нескольким причинам:</p><ul><li>топовые игры надо хорошо оптимизировать, а С++ достаточно гибкий для этого. Но вместе с тем на нём удобно писать в ООП-стиле, не спускаясь до очень низкого уровня;</li><li>использование собственного движка для полного контроля любых игровых механик. Да, так делают не всегда, но часто — в основном из-за проблем с лицензиями и необходимостью делить прибыль с продаж;</li><li>кроссплатформенность: игра должна хорошо работать на всех поддерживаемых устройствах. Хотя многие движки по умолчанию предоставляют эту особенность, она не всегда эффективна: у кого-то игра может работать быстрее, а у кого-то медленнее. Код пишется так, чтобы оптимизировать компиляцию в бинарные файлы на разных платформах.</li></ul><h3>GPU-вычисления</h3><p>Nvidia CUDA и OpenCL — две платформы, позволяющие запускать код C++ на графическом процессоре. GPU содержат сотни небольших вычислительных ядер, которые могут одновременно выполнять простые математические операции. Написав код для GPU, распараллеливающий сложные вычисления, можно добиться очень высокой производительности и скорости. C++ отлично подходит для этого.</p><p>Среди возможных применений:</p><ul><li>майнинг биткоинов: код на C++ помогает майнить быстрее;</li><li>обучение нейросетей: большинство библиотек Deep Learning используют C/C++ код на CUDA или OpenCL, чтобы нейросети обучались и работали быстрее. Однако многие функции доступны как на C++, так и на более высокоуровневых языках;</li><li>шейдеры для игр и графического ПО. Шейдеры — небольшие участки кода, параллельно запускающиеся на GPU и выполняющие сложные графические задачи (например, трассировку лучей).</li></ul><p>Чтобы работать с языком было комфортно, нужно выбрать хорошую среду разработки. Это поможет сделать наша <a href="https://tproger.ru/digest/5-cpp-ide/">подборка с популярными IDE для программирования на C++</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Базис JavaScript: для чего хорош и где применяется</title>
      <link>https://tproger.ru/articles/what-javascript-is-good-for</link>
      <comments>https://tproger.ru/articles/what-javascript-is-good-for?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/what-javascript-is-good-for</guid>
      <description><![CDATA[<p>Когда затрагивают основы JavaScript, то в первую очередь рассматривают веб-разработку. Рассказываем, где ещё применяется JS.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/what-javascript-is-good-for">Базис JavaScript: для чего хорош и где применяется</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Для чего хорош язык X]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 30 Jan 2020 13:43:47 GMT</pubDate>
      <content:encoded><![CDATA[<h2>JavaScript и основы применения</h2><p>Перед тем как перейти к основам JavaScript, необходимо разобраться с назначением данного языка программирования.</p><p>Самое известное применение JS — это, конечно же, веб-разработка. Чаще всего к JS прибегают, когда нужно добавить динамичности на сайт или сделать браузерное приложение, но при желании на нём можно написать и бэкенд.</p><p>JavaScript отличается:</p><ul><li>прототипным стилем программирования (вместо классов и наследования — прототипы и клонирование);</li><li>слабой динамической типизацией;</li><li>функциями как объектами первого класса (то есть их можно создавать прямо во время выполнения программ).</li></ul><p>Итак, в каких областях нашёл себя JavaScript.</p><h2>Динамические веб-страницы</h2><p>Всплывающие подсказки, движущиеся картинки, падающие снежинки и прочие анимашки — за всем этим можно идти к JS. JS-код встроен в веб-страницу, и когда пользователь открывает её, скрипт выполняется прямо в браузере.</p><p>Без JavaScript почти невозможно создать полноценный сайт. Добавьте к JS знания HTML, CSS, и вы получите неплохой набор навыков начинающего фронтенд-разработчика. Для полноты картины стоит освоить пару популярных фреймворков: например <a href="https://reactjs.org/">React</a>, <a href="https://svelte.dev/">Svelte</a>, <a href="https://ru.vuejs.org/index.html">Vue.js</a>.</p><h2>Веб-приложения и игры</h2><p>JavaScript пригодится и здесь. Для примера, <a href="https://en.wikipedia.org/wiki/Google_Maps">Google Maps</a> и <a href="https://ru.wikipedia.org/wiki/Gmail">веб-клиент Gmail</a> используют JavaScript. А если вы хотите написать игру — возьмите JS, HTML5, одну из готовых библиотек (скажем, EaselJS или <a href="https://www.pixijs.com/">PixiJS</a>) и создайте свою браузерную бродилку, «три в ряд» или во что там сейчас все играют.</p><h2>Расширения для браузера</h2><p>Раз в основе JavaScript лежит выполнение кода в браузере, это отличный выбор для создания браузерных расширений. Напишите свой чекер почты или, например, счётчик активности, который будет отслеживать, сколько времени вы провели за работой, а сколько за просмотром соцсетей.</p><h2>Серверные приложения</h2><p>Да, на JavaScript спокойно можно написать веб-сервер. Но если в браузере у JS практически нет конкурентов, то в мире бэкенда ему приходится соревноваться с другими языками: PHP, Python и прочими. Главное преимущество JavaScript в этой битве — возможность разрабатывать клиентскую и серверную часть на одном и том же языке. Чтобы писать бэкенд на JavaScript, обычно используется <a href="https://nodejs.org/en/about/">движок Node.js</a> — он позволяет выполнять JS-код вне браузера.</p><h2>Мобильные приложения</h2><p>Возможно, не самое популярное, но вполне реальное применение JavaScript. Чаще всего мобильные приложения разрабатываются на языках, специфичных для операционной системы (Swift для iOS и Java/Kotlin для Android). JavaScript же хорош тем, что позволяет создавать кроссплатформенные приложения — для этого можно использовать фреймворки <a href="https://facebook.github.io/react-native/">React Native</a>, <a href="https://ionicframework.com/">Ionic</a> или PhoneGap. Хотя и тут у JS есть конкуренты — например языки Kotlin и Dart.</p><h2>Десктоп</h2><p>JavaScript добрался и до настольных приложений. Так, GitHub соединил упомянутый выше Node.js, движок рендеринга Chromium и разработал фреймворк <a href="https://www.electronjs.org/">Electron</a>, на котором можно писать кроссплатформенные десктопные проекты. Среди примеров — GitHub Desktop, Visual Studio Code, Skype, WordPress Desktop. У Electron есть аналог — <a href="https://nwjs.io/">NW.js</a>, который в основном используется для создания настольных версий сайтов и игр.</p><p>Держите <a href="https://tproger.ru/video/javascript-basics-free-youtube-course/">бесплатный видеокурс</a> по JavaScript основам и связанным темам.</p><p>Автор Алексей Морозов</p>]]></content:encoded>
    </item>
    <item>
      <title>Для чего хорош Python?</title>
      <link>https://tproger.ru/articles/what-python-is-good-for</link>
      <comments>https://tproger.ru/articles/what-python-is-good-for?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/what-python-is-good-for</guid>
      <description><![CDATA[<p>О плюсах и минусах Python написано уже немало. Рассказываем, зачем вообще учить этот язык, что вы сможете на нём написать и в каких сферах IT работать.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/what-python-is-good-for">Для чего хорош Python?</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Для чего хорош язык X]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 21 Jan 2020 14:59:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Автор Алексей Морозов</p><p>Python хорош для всего, что хочется сделать быстро, но чтобы при этом всё нормально работало.</p><h2>Одноразовые скрипты</h2><p>Самое простое, но распространённое применение — одноразовые скрипты для манипуляций с данными, конвертеры и прочие такие вещи. Да, не самый крутой софт в мире, но мелкие задачи типа «прочитать 200 Мб данных, отфильтровать записи и залить их в базу данных, а заодно посчитать базовую статистику и нарисовать график» или «отфильтровать файлы логов по дате создания, не соответствующие маске удалить, а все старше часа Ч заархивировать» возникают регулярно.</p><h2>Прототипы</h2><p>Cкорость и удобство разработки позволяют делать прототипы: например бот для ВКонтакте (автопостинг, удаление комментариев по блэклисту, отрисовка статистики сообщества прямо на аватарке) делается за час от поиска «VK API library python» до рабочего продукта. Начать писать такие мелочи можно буквально после пары уроков.</p><h2>Бэкенд</h2><p>При этом язык позволяет браться и за достаточно сложные проекты. На Python (<a href="https://www.djangoproject.com/">Django</a>, <a href="https://palletsprojects.com/p/flask/">Flask</a> и прочие фреймворки) пишется веб-бэкенд. Это уже не про мелкие скрипты, а про коммерческую разработку и большие проекты с командами. Ну и про трудоустройство, да. Python-бэкендщик с опытом Django/Flask без работы точно не останется. К тому же нативно поддерживается асинхронное программирование и есть быстрые асинхронные веб-фреймворки, такие как <a href="https://aiohttp.readthedocs.io/en/stable/">AIOHTTP</a> или <a href="https://sanic.readthedocs.io/en/latest/">Sanic</a>.</p><h2>Data Science и машинное обучение</h2><p>И, наконец, всякие хайповые штуки про data science и машинное обучение. Если заниматься машинным обучением всерьёз — то надо учить скорее математику, а не программирование, но поиграться с небольшой нейросеткой или собрать статистику своего паблика вполне можно по материалам из интернета. Первичный анализ данных в <a href="https://pandas.pydata.org/">pandas</a>, вычисления в <a href="https://numpy.org/">NumPy</a>/<a href="https://scipy.org/">SciPy</a>, машинное обучение в <a href="https://scikit-learn.org/stable/">sklearn</a>, нейросети в <a href="https://www.tensorflow.org/">TensorFlow</a> или <a href="https://pytorch.org/">PyTorch</a>.</p><p>Если получится и захочется делать что-то более сложное — то почему нет, профессионалы в тех же самых библиотеках работают. Для перемалывания данных в промышленных масштабах существуют вещи вроде <a href="https://towardsdatascience.com/a-brief-introduction-to-pyspark-ff4284701873">PySpark</a>, позволяющие управлять распределёнными вычислениями на кластерах.</p><h2>Data engineering</h2><p>Отдельно стоит упомянуть data engineering, то есть промышленный подход к data science: не когда дата саентист на коленке набросал решение конкретной задачи, а когда опытный программист взял и превратил это в регулярный процесс поставки данных. Тут всё так же: легко писать скрипты и есть библиотеки для связывания буквально с любым Big Data инструментом — этого достаточно.</p>]]></content:encoded>
    </item>
  </channel>
</rss>