Перейти к содержимому

Для чего можно использовать c

  • автор:

Языки C и C++. Где их используют и зачем?

Андрей Шагин

Сфера применения C и C++ на удивление широка. Даже в сегодняшнем мире, несмотря на всё многообразие современных надёжных инструментов, эти два языка программирования остаются незаменимыми. Давайте же выясним, какие популярные приложения написаны на этих языках и зачем нам использовать их сегодня.

Когда и зачем используются C и C++ ?

1. Операционные системы

Язык C первоначально создавался для системного программирования, поэтому не удивительно, что его так активно применяют при создании операционных систем и программного обеспечения.

Быстрый и энергоэффективный, он достаточно близок к аппаратному слою, что позволяет работать с кодом низкого уровня.

Вот почему он идеален для разработки операционных систем.

Любая операционная система в первую очередь должна быстро запускаться и эффективно управлять системными ресурсами. Например, Linux, Microsoft Windows, Mac OS полностью написаны на языке C, а Android и iOS — частично.

Разработчик на языке C может реализовывать все структуры данных самостоятельно, производя тонкую настройку мельчайших деталей операционной системы. Такая высокая гибкость — весомый аргумент в пользу языка.

В отличие от других языков программирования, язык C не имеет зависимостей времени исполнения. Это означает, что программа может выполняться силами аппаратных средств без участия менеджера памяти, входного или выходного слоя.

2. Программирование встроенных систем

Язык программирования C просто необходим при проектировании встроенных систем.

Главным образом из-за высокой производительности и простоты использования. Язык C очень экономичен в потреблении ресурсов системы, благодаря чему программа выполняется быстро. В результате встроенные системы работают в реальном времени без замедления.

Ещё важнее здесь — код на C, будучи платформенно-независимым, не связан с каким-либо конкретным микропроцессором или системой. Так что встроенную программу можно скомпилировать в разных устройствах и платформах с незначительными изменениями или вовсе без них.

Вот почему беспилотные автомобили, умные часы, сенсоры и устройства, использующие технологию Интернета вещей (например, кофемашины), имеют встроенное ПО, целиком написанное на C или C++. В связанных системах C позволяет работать непосредственно с ресурсами памяти и править любую часть кода.

3. Разработка игр и игрового движка

Производительность крайне важна для игры, поэтому выбор языка программирования здесь ограничен.

Являясь самым быстрым на сегодняшний день языком программирования, С++ оказывается одним из лучших для игр в 3D, многопользовательских и других.

Например, Counter-Strike, StarCraft: Brood War, Diablo I, World of Warcraft — все эти игры написаны на C++. Не говоря уже о консолях Xbox и PlayStation, в основе которых лежит программирование C++.

В ядре игрового движка Unity — самого популярного движка для создания видеоигр под несколько операционных систем одновременно — также использовался C++.

Средства разработки C++ могут совладать даже с самой сложной игровой графикой. Они позволяют оптимизировать и регулировать то, как именно будут использоваться ресурсы памяти и структуры данных в игре.

4. Разработка настольных и кроссплатформенных приложений

C++ также можно использовать для создания настольных приложений. Всё благодаря превосходным кроссплатформенным средствам разработки (иногда называемым фреймворками), таким как Qt. Оно позволяет нацелиться на Windows, Linux, macOS, Android и встроенные системы — все c единой кодовой базой. Так что разработка приложений с помощью Qt оказывается отличным решением для тех, кто хочет сэкономить на времени и стоимости программирования.

Стоит упомянуть и о библиотеке SDL, нашпигованной функциями, позволяющими создавать приложения одновременно для Windows, Linux, Android, MacOS и iOS.

Кстати, Photoshop, Illustrator и Adobe Premiere целиком написаны на C++.

Какие ещё есть приложения?

В Facebook перевели часть кода из PHP на язык C++, чтобы сократить затраты электроэнергии в расчёте на одного пользователя. Возможно, облачные системы хранения, базы данных, драйверы устройств и другие виды ПО тоже используют C++.

Сюда также можно отнести банковские и другие приложения, обладающие высокой степенью многопоточности и низким периодом ожидания. Словом — всё, что должно работать быстро и без проблем.

Выводы

Принимая во внимание всё вышесказанное, будем считать, что языки C/C++ вполне годятся для:

  1. разработки операционных систем,
  2. программирования встроенных систем,
  3. разработки игр,
  4. разработки баз данных,
  5. разработки настольных и кроссплатформенных приложений (с помощью средств C++).

Также можно отметить, что в проектах, имеющих дело со сложными типами данных, разработка ПО с использованием C++ предотвращает перегрузку данными и похожие проблемы.

Так что, если вы спросите:

Почему мы до сих пор используем C/C++?

Есть короткий ответ: C и C++ гибкие, очень быстрые и эффективные. К тому же они ближе к машинному коду, чем любой другой язык программирования. Именно поэтому в некоторых случаях эти языки просто незаменимы.

Так что наш прогноз таков: в ближайшем будущем язык C не сойдёт с технологической арены. Особенно по причине роста количества устройств, поддерживающих технологию Интернета вещей, а эти устройства крепко завязаны на управлении машинным кодом и памятью.

Для чего хорош C++?

C++ хорош для проектов, в которых важна производительность кода. Почему это так, и в каких областях применяется C++? Разбираем в этом материале.

С++ — это как Си, только с ООП[1. Строго говоря, это не совсем верно. Хотя C++ произошёл от Си, с тех пор оба языка изменились и стали совершенно разными. Вы можете писать на C++ без ООП и использовать ООП в Си. ООП — это скорее подход или методология, а не конкретная функциональность. Но в C++ однозначно больше возможностей для реализации принципов ООП.].

  • можно работать с памятью на низком уровне;
  • нет «виртуальных машин» или фреймворков, которые занимаются, например, сборкой мусора или выделением памяти;
  • быстрое (иногда очень быстрое) выполнение кода по сравнению с более высокоуровневыми языками (Python, C#, Java и другими);
  • полный доступ к API операционной системы без обёрток (в которых может быть реализовано не всё).

Но чем больше силы, тем больше ответственности. По сравнению с языками более высокого уровня, на С++ проще ошибиться. Причём так, что компилятор не подскажет и вы сразу не поймёте, в чём дело.

Где применяется С++?

В недавнем интервью по ссылке ниже создатель языка рассказал, что C++ используют практически во всех областях. Мы выделим три направления, в которых лучше всего раскрываются преимущества языка.

Оптимизация

Перепишите любой код с языка более высокого уровня на C++, чтобы программа работала быстрее. Так часто делают в сфере глубокого обучения и других алгоритмических областях, где важна скорость. Подход может выглядеть так:

  • пишу код на Python;
  • заставляю работать нейросеть, которая решит мою проблему;
  • переношу код на C++.

Но это не всегда приносит пользу: иногда быстрая разработка важнее производительности, или выгода от переноса кода на C++ совсем незначительна.

В инди-играх обычно используются высокоуровневые языки и игровые движки (C# и Unity, Java и jMonkeyEngine), но на том же Unreal Engine можно создавать игры и на C++. Множество игр AAA-класса пишутся на C++ по нескольким причинам:

  • топовые игры надо хорошо оптимизировать, а С++ достаточно гибкий для этого. Но вместе с тем на нём удобно писать в ООП-стиле, не спускаясь до очень низкого уровня;
  • использование собственного движка для полного контроля любых игровых механик. Да, так делают не всегда, но часто — в основном из-за проблем с лицензиями и необходимостью делить прибыль с продаж;
  • кроссплатформенность: игра должна хорошо работать на всех поддерживаемых устройствах. Хотя многие движки по умолчанию предоставляют эту особенность, она не всегда эффективна: у кого-то игра может работать быстрее, а у кого-то медленнее. Код пишется так, чтобы оптимизировать компиляцию в бинарные файлы на разных платформах.

GPU-вычисления

Nvidia CUDA и OpenCL — две платформы, позволяющие запускать код C++ на графическом процессоре. GPU содержат сотни небольших вычислительных ядер, которые могут одновременно выполнять простые математические операции. Написав код для GPU, распараллеливающий сложные вычисления, можно добиться очень высокой производительности и скорости. C++ отлично подходит для этого.

Среди возможных применений:

  • майнинг биткоинов: код на C++ помогает майнить быстрее;
  • обучение нейросетей: большинство библиотек Deep Learning используют C/C++ код на CUDA или OpenCL, чтобы нейросети обучались и работали быстрее. Однако многие функции доступны как на C++, так и на более высокоуровневых языках;
  • шейдеры для игр и графического ПО. Шейдеры — небольшие участки кода, параллельно запускающиеся на GPU и выполняющие сложные графические задачи (например, трассировку лучей).

Чтобы работать с языком было комфортно, нужно выбрать хорошую среду разработки. Это поможет сделать наша подборка с популярными IDE для программирования на C++.

Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.

Зачем писать на C++ в 2022 году?

C++ — это язык программирования, основы которого были заложены более 40 лет назад, но который по-прежнему повсеместен. В этой статье мы с вами разберемся, где и почему он используется, и порассуждаем, есть ли у него будущее.

Где сегодня используется C++?

С++ повсюду. Код, написанный на C++, можно найти в вашем телефоне, в вашей стиральной машине, в вашем автомобиле, в самолетах, в банках и вообще везде, где только можно представить.

Но давайте будем более конкретными. Многие приложения для работы с изображениями, такие как Adobe Photoshop или Illustrator, написаны на C++. 3D-игры также часто пишут на C++. Программное обеспечение для 3D-анимации, моделирования и рендеринга также в основном написано на C++. Манипуляции с изображениями — довольно сложная и ресурсоемкая область, требующая скорости и близости к аппаратной части C++.

Но работа с изображениями — далеко не единственная область, в которой доминирует C++. С большой долей вероятности браузер, который вы используете для чтения этой статьи, также был написан на C++, как, например, Chrome и Firefox.

Если мы спустимся еще ниже и посмотрим на компиляторы и операционные системы, то многие из них написаны на C++. Если нет, то, скорее всего, это C.

Но это все пока только примеры в пределах десктопного мира.

В мире корпоративного программного обеспечения вы, конечно, найдете и другие языки, но там, где критична производительность, вполне обоснованно выбирают C и C++.

В мире встраиваемых систем, где и память, и ЦП более ограничены, чем у десктопных компьютеров, C++ процветает. Независимо от того, смотрите ли вы на свои умные часы, телефон, включаете ли вы стиральную машину, садитесь ли в автомобиль и включаете зажигание, вам следовало бы испытывать немного благодарности в отношении неизвестного C++ разработчика, который сумел не испортить все из-за ошибки сегментации сразу после запуска.

Почему С++ используется до сих пор?

Итак, мы увидели, что C++ по-прежнему используется почти везде. Но почему? Можно встретить очень много скептиков, которые считают, что это чистой воды легаси и его следует удалять из кодовой базы большинства современных компаний.

Так все-таки это легаси?

Некоторые люди утверждают, что C++ все еще используется только потому, что это технология, унаследованная от старых приложений. Под “старым” я часто подразумеваю программное обеспечение десятилетней давности.

Это правда только отчасти.

Давайте порассуждаем о Cobol-ковбоях. Мало кто хорошо владеет Cobol, поэтому, если на него есть спрос, то они могут заработать кучу денег.

Cobol по-прежнему широко используется в финансовой индустрии. Эти системы были написаны много десятилетий назад и до сих пор работают довольно хорошо. Может быть, они не соответствуют всем современным требованиям, но они устойчивы, надежны и настолько сложны, что никто не осмеливается их переписывать.

C++ не так уж плох, он не так стар, как Cobol, и все больше людей изучают его и знают, более или менее, как его использовать.

Но иногда он используется только потому, что компания уже очень много в него инвестировала. У нее вокруг C++ уже развились целые экосистемы. Мигрировать их было бы слишком дорого. Даже руководители, которые по каким-либо причинам не в восторге от C++, сочтут такую ​​миграцию экономически бессмысленной.

Но является ли C++ таким уж прям легаси?

C++ эволюционирует

Вовсе нет! C++ развивается совершенно предсказуемым образом. Как я подробно объяснял в одной из своих предыдущих статей, с 2011 года C++ следует модели подобной отправлению поездов. Каждые три года выпускается новая версия с новыми языковыми фичами и библиотеками, а также с исправлениями ошибок и доработками более ранних фич.

Четкий график релизов и стандартизированная работа гарантируют, что новые версии являются результатом продуманных дополнений, а не разовых решений. У разработчиков компиляторов есть время, чтобы реализовать их должным образом, а у сообщества — чтобы адаптироваться.

В то же время одной из суперсил C++ является обратная совместимость. Код, скомпилированный вчера, скорее всего, скомпилируется и завтра. Даже больше — код, который можно было скомпилировать в 1985 году, скорее всего, можно будет скомпилировать и в 2025 году.

Эволюция C++ была направлена ​​на то, чтобы минимизировать головную боль разработчиков и сделать написание более безопасного кода проще.

Одной из важнейших особенностей C++ является предсказуемое управление памятью. Тут нет сборки мусора, которая в конечном итоге происходит (или нет). Когда и как память будет освобождена и возвращена операционной системе — абсолютно детерминировано. Хотя все всегда было абсолютно детерминировано, было также довольно легко выстрелить себе в ногу и испортить все, не высвобождая память или наоборот пытаясь высвободить ее дважды или даже больше раз.

Современный C++ предоставляет интеллектуальные указатели, которые сделали динамическое управление памятью менее подверженным ошибкам за счет добавления указателей, которые могут “убирать за собой”.

Еще одним поводом для головной боли у многих разработчиков выступают шаблоны. SFINAE, невероятно длинные и трудные для чтения сообщения об ошибках, перестают быть такой большой проблемой с введением концептов в C++20, которые помогают нам ограничивать типы, принимаемые шаблонами, и предоставлять релевантные и относительно легко читаемые сообщения об ошибках, если что-то все-таки идет не так.

В последние годы была проделана большая работа по внедрению библиотеки <ranges>, с помощью которой мы можем переписать иначе очень процедурные циклы в функциональном стиле.

Экономическое преимущество

C++ близок к аппаратному обеспечению, может легко манипулировать ресурсами, поддерживает процедурное программирование для функций, интенсивно использующих ЦП, и является очень быстрым. Он также отлично справляется со сложностями 3D-игр и позволяет создавать многослойные сетевые конфигурации. Все эти преимущества делают его главным выбором для разработки игровых систем, а также инструментария для разработки игр.

Если вы используете так называемый “современный” язык, такой как Python или Javascript, зачастую вам придется прибегать к написанию некоторых важных функций или библиотек на C или C++, просто чтобы сделать их скорость приемлемой.

Существует очень мало языков, которые могут конкурировать с C++ по скорости, и один из них это — C.

Но скорость — это еще не все.

Вы можете сказать, что вы не так сильно заботитесь о скорости. Вам нужно обрабатывать относительно небольшое количество транзакций, и у вас нет серьезных требований к скорости. Вы предпочитаете код, который легче в написании.

Вас можно понять.

Как мы уже говорили ранее, C++ становится все проще в разработке. Конечно, легкость написания современного C++ не идет ни в какое сравнение с Python, но все не так однозначно.

Некоторые современные языки ориентированы на простоту написания кода, другие — на большие функциональные возможности.

Когда вы выбираете автомобиль, вы думаете не только о комфорте или скорости, хотя они могут быть очень важны. Скорее всего вам также придется учитывать расход топлива. Делаем ли мы то же самое, когда разрабатываем приложения? Думаем ли мы о том, сколько энергии они будут потреблять? В этом смысле трио C/C++/Rust работает намного лучше, чем все остальные языки. По сути, они находятся совершенно на другом уровне.

Приведенные выше цифры впечатляют.

Теперь давайте посмотрим на слайд, который был представлен на CPPP Дэмиеном Булом (Damien Buhl).

Используя C++, мы можем значительно сократить выбросы CO2. Удивительно, не правда ли?

Получается, что по большей части, даже если ваши требования к производительности не являются определяющим фактором, энергопотребление и защита окружающей среды все-таки подталкивают вас к использованию C++.

Каковы его недостатки?

Если C++ так развивается и становится проще в работе, и, кроме того, если он даже позитивно сказывается на счетах за электроэнергию и, следовательно, на нашей родной планете, то в чем проблема? Почему многие люди так не хотят с ним связываться?

Давайте обсудим пару моментов.

Плохая реклама

Нужно признать, что C++ имеет плохую репутацию.

Если вы читали Coders At Work, то могли отметить, что многие писали о том, что C и C++ слишком сложны в использовании, и вообще существует всего несколько причин чтобы их использовать в принципе. С C очень легко выстрелить себе в ногу, с C++ это немного сложнее, но когда это происходит, вы можете отстрелить себе ногу целиком.

Не очень обнадеживающие заявления, правда?

Эти комментарии определенно были небезосновательны, но их актуальность постепенно угасает.

Язык развивается, но старые книги и интервью никуда не денутся. Очень сложно изменить общественное мнение, особенно среди тех, кто больше не пишет код. Как, например, большинство нынешних руководителей.

По мере того, как язык развивается, его становится все труднее изучать

Как я уже несколько раз говорил ранее, C++ развивается. Он получает все больше и больше фич, и на нем становится все проще писать выразительный код.

То, что раньше было стандартным циклом, сегодня можно записать таким вот функциональным образом:

Хотя это все очень модно и прекрасно, это также означает, что те, кто хочет писать лучший код на C++, должны больше учиться. Многие считают, что самая большая суперсила C++ заключается в том, что он почти полностью обратно совместим. Такая важная фича, что Мэтт Годболт (Matt Godbolt) посвятил ей почти весь свой главный доклад на CPPP 2021!

Также правда, что некоторые старые лучшие практики со временем стали антипаттернами. Но они по-прежнему компилируются, их синтаксис по-прежнему валиден, и обычно это базовый синтаксис, поэтому мы изучаем их. Возможно, вам больше не нужно заниматься арифметикой указателей, по крайней мере, не в такой степени, как раньше, но вам все равно нужно в этом разбираться. То же самое касается ручного управления памятью, C-массивов и так далее.

Я лично думаю, что такие темы больше не должны преподаваться настолько глубоко, но, как я могу наблюдать, в большинстве университетов преподают устаревший C++, и людям приходится заново изучать современный C++, когда они начинают работать в реальных компаниях. Если конечно компания использует более современную версию.

Интеллектуальная небрежность

Как поделился со мной в Твиттере Марек Краевски (Marek Krajewski), некоторые люди просто не стали бы использовать C++ из-за интеллектуальной инертности. Да, его сложнее изучать, чем Python или Javascript. Да, вы можете создавать отличные вещи с более простыми в освоении альтернативами. И на самом деле вам не всегда нужны возможности C++. Это все правда.

Вы должны использовать самый подходящий инструмент для конкретной работы.

Проблема в том, что многим просто лень изучать эти инструменты или даже признать, что иногда это правильные инструменты. Это происходит часто из-за фанатизма, из-за ограниченности и, в основном, из-за интеллектуальной небрежности.

Наша работа — показать и объяснить, когда C++ (или Rust. ) — излишен, а когда — правильное решение. Что еще более важно, мы должны показать, что это уже не тот язык, которым он когда-то был.

Экосистема

В своем докладе на C++ MythBusters Виктор Чиура (Victor Ciura) развеял миф о том, что у C++ не все так гладко с вспомогательными инструментами. Они есть, и их в нашем распоряжении достаточно много. Но Виктор считает, что у нас никогда не будет “стандартизированных” инструментов, нам всегда нужно искать подходящий инструмент, разбираться, как он работает, и только потом использовать его.

Хоть я и разделяю его точку зрения, мы должны признать, что в других языках есть более простые решения простых проблем. Если вы работаете с Python, вы точно знаете, как и откуда вы должны получать свои пакеты. Похожая ситуация и с Java, не говоря уже о Javascript. Эти языки не стандартизированы, но в них есть стандартные способы простой доставки и использования библиотек, совместного использования и создания кода, которые не требует много времени и сил на то, чтобы разобраться с ними.

C++ этим похвастаться не может.

Написание мейкфайлов — не самая простая задача. Многие де-факто принимают CMake за стандарт для написания скриптов сборки, но это явно не так. Многим он не нравится из-за его синтаксиса, и существует множество других способов создания скриптов сборки. У многих компаний даже есть собственные системы, в том числе у Amadeus.

А как насчет управления пакетами?

C++ в этом плане еще есть куда расти.

Так что на счет будущего C++?

Я опросил некоторых выдающихся представителей сообщества C++, и вот что они сказали:

C++ сегодня как никогда верен своей первоначальной миссии по предоставлению абстракций с нулевой стоимостью над низкоуровневым системным кодом, где это возможно, и недорогих абстракций, за которые вы платите только тогда, когда используете, когда первое невозможно. И мы получаем это вместе с совместимостью с C и более ранними версиями C++, несмотря на то, что язык постоянно развивается и внедряет современные языковые фичи. — Фил Нэш (Phil Nash), автор Catch2, главный организатор C++ On Sea

C++ — это и наше наследие, и наше будущее. Несмотря на все его недостатки и исторические проблемы, он имеет множество современных фич, многие из которых специально разработаны для смягчения/замены старых идиом/конструкций. В настоящее время C++ программисты могут легко писать программы, полностью избегая таких опасных старых вещей. [. ] STL C++ значительно выросла благодаря стандартам ISO 11,14,17,20, а C++23 принесет еще ряд очень ценных дополнений. От новых алгоритмов и диапазонов (ranges) до различных утилит и вспомогательных библиотек для IO, сетей, корутин, параллелизма, гетерогенного параллелизма и многого другого. Да, есть более специализированные вещи, которые могут понадобиться программисту, но здесь приходит на помощь экосистема C++, которая заполняет пробелы множеством стабильных библиотек коммерческого качества практически под каждую потребность. Каждая ключевая часть программного обеспечения, которое мы используем сегодня, содержит в себе C++: может быть, это целиком C++, может быть, там там только некоторые важные компоненты написаны на C++, может быть, его библиотека изначально скомпилирована на C++, может быть, его компилятор/среда выполнения написаны на C++, .

C++ по-прежнему остается королем языков программирования. Да здравствует король! — Виктор Сиура, старший инженер-программист команды Visual C++ в Microsoft

C++, широко используется в разработке игр, в частности, игр для консолей и ПК. Он обеспечивает прямой доступ к аппаратному обеспечению через абстракции с нулевой стоимостью. Мощь и гибкость, которые он предоставляет, делают его трудным для изучения, потому что в вашем распоряжении оказывается огромное количество возможных решений широчайшего спектра задач. Глядя на международный стандарт с обязательством обратной совместимости, вы уверены, что не будет ситуации Python2/Python3. Будущее выглядит радужным, параллелизм и работа в сети выглядят очень многообещающими в C++26, не говоря уже о множестве фич, предназначенных для рационализации и упрощения языка. — Джей. Гай Дэвидсон (J. Guy Davidson), руководитель инженерной практики Creative Assembly, соавтор книги Beautiful C++, член с правом голоса комитета ISO C++

Заключение

C++ мог бы считаться устаревшим в глазах тех, кто был знаком только со старыми шаблонами, со старыми стандартами, но язык постоянно развивается. С 2011 года, начиная с C+11, каждые 3 года мы получаем новую версию с исправлениями ошибок и новыми фичами. Экосистема растет, хотя она далеко не так проста, как у некоторых других новых языков, где, например, управление пакетами везде выполняется очень похожим образом.

Тем не менее, язык и экосистема растут, сообщество очень большое, а C++ неизбежно повсеместен. Так или иначе, его хотя бы частично можно найти почти в каждом написанном на сегодня программном обеспечении. Я не говорю, что C++ — это молоток, который должен превратить все вокруг вас в гвозди, но его все же стоит изучить и освоить. Даже в 2022 году и далее.

Мир фракталов породил много интересных изображений, которые описываются простыми математическими формулами. Для построения этих изображений нам потребуется язык программирования и в рамках открытого урока мы рассмотрим, как можно написать программу для генерации фракталов на C++. Приглашаем всех желающих присоединиться.

Язык С#: где используют, что пишут, как появился и чем хорош

Изучаем под микроскопом популярный язык от Microsoft, который называется совсем не «Си решётка».

Иллюстрация: Polina Vari для Skillbox Media

Максим Сафронов

C# (читается как «Си шарп») — это язык программирования от компании Microsoft. Изначально его создавали для проектов под Windows, но теперь это по-настоящему универсальный язык: на нём пишут игры, десктопные приложения, веб-сервисы, нейросети и даже графику для метавселенных.

Один из ведущих разработчиков языка — легендарный Андерс Хейлсберг, который до C# успел сделать Turbo Pascal и Delphi, а после — TypeScript (майкрософтовский JS на стероидах).

Если коротко, этот язык:

  • Кросс-платформенный — запускается почти на любом железе.
  • Объектно-ориентированный — состоит из классов и объектов, которые умеют передавать свойства друг другу.
  • Постоянно развивается — для тех, кто любит учиться.
  • Дружит с экосистемой Windows — для этого и был написан.

Есть две основных версии, зачем Microsoft стала делать свой язык программирования.

Официальная: чтобы упростить разработку приложений под Windows. А то языки в то время были сложные и плохо адаптировались под разные Windows-компьютеры.

Правдоподобная: чтобы заменить Java, на который у Microsoft не было лицензии. В итоге получился почти такой же язык, но с интеграцией под Windows. Как и Java, он основан на языке C и легко запускается на любом устройстве. А название «Си» с решёткой как бы говорит: «У нас тут не копия Java, а новый язык в линейке „Си“».

Кстати, всю эту историю о борьбе Microsoft за Java и причинах появления C# мы рассказывали в статье о Java Virtual Machine — в разделе о конкурентах JVM.

Привет, C#: пишем первую программу

Запуск любой программы на C# начинается с главной функции — Main(). В ней прописано, как программа будет себя вести дальше — что за чем пойдёт, что за что отвечает и так далее. Выполняется она из главного класса — назовём его HelloWorld. Если перевести это на программистский, получится как-то так:

Можете вставить этот код в компилятор и посмотреть, что получится. Если всё сделать правильно, консоль сначала спросит ваше имя, а потом поздоровается. А если туда потом добавить реплик, функций и визуала, получится настоящий чат-бот — как его запилить, рассказываем в этой статье.

Кто и для чего использует C#

C# — пятый по популярности язык программирования в мире. Его используют банки, диджитал-агентства, провайдеры связи и крупные IT-компании. Вот что пишут на C# российские и зарубежные корпорации:

  • Microsoft — приложения для Windows и Xbox.
  • Tesla — корпоративные веб-сервисы и программы.
  • Stack Overflow — серверную логику сайтов.
  • Сбербанк — 3D-графику и программы виртуальной реальности.
  • Ozon — складские и логистические системы.
  • «Яндекс» — приложения для автоматизации продаж.

Рассмотрим сферы применения «шарпов».

Игры и виртуальная реальность на Unity

Если вы увлекаетесь геймдевом или просто играете в игры, то наверняка слышали про Unity. Это такая среда, где можно быстро собрать игру из готовых объектов, а потом запустить почти на любом железе. Процесс разработки выглядит так: вы продумываете содержание игры и её сюжет, а Unity берёт на себя графику, физику, звук и другие технические штуки.

В теории на Unity можно делать не только игры, но и любые проекты, где нужна 3D-графика, — метавселенные, программы для VR-устройств, дизайн интерьеров и так далее. А пишут под Unity в основном на языке C# — отличный повод выучить именно его, если видите себя в геймдеве или виртуальной реальности.

Программы для Windows

Поскольку C# — это язык от Microsoft, на нём удобно писать настольные приложения для Windows. Для этого разработчики придумали специальную платформу — называется .NET Framework. Она умеет переводить код из понятного человеку в понятный процессору — то есть компилировать.

Преимущество платформы в том, что она может исполнить любую C#-команду на любом процессоре — а на Windows работает не меньше тысячи разных моделей. Если бы не .NET, пришлось бы компилировать код под каждое железо отдельно. А ещё .NET поддерживает много плагинов, библиотек и шаблонов для наглядной разработки интерфейсов — это фактически целый мир и экосистема для программиста на Windows.

Кросс-платформенные приложения

С помощью фреймворка Mono один и тот же С#-код можно запускать в разных десктопных системах — например, в Linux или macOS. А если код надо запустить на мобильных платформах, используют версию Mono для смартфонов — Xamarin.

Допустим, мы пишем приложение для смартфона — мобильные карты. Они должны одинаково работать и на айфоне, и на Android-устройстве, но выглядеть нативно — то есть по дизайн-коду своих платформ. Вот как эту идею можно воплотить на Xamarin:

  • Проектируем дизайн приложения в визуальном редакторе.
  • Привязываем к нему логику на C#.
  • Всё это дело подхватывает Xamarin и переводит в родные для iOS и Android интерфейсы.
  • На выходе получаем целых два приложения — для Android и iPhone. А программировали мы всего один раз — удобно вышло.

Подробнее о том, как писать мобильные приложения на Xamarin, мы рассказываем в этой статье.

Серверная логика веб-сайтов

Когда пользователь что-то нажимает на сайте, его действия сначала обрабатывает сервер. Например, мы ставим лайк фотографии — сервер это получает и записывает у себя в базе данных: «Вот такому пользователю понравилось». Или, допустим, логинимся на сайте — сервер сверяет пароли и отвечает: «Войти разрешаю».

В чистом виде сервер — это просто машина, и, чтобы она заработала, нужен специальный софт. Нередко его пишут на языках PHP и Java, но если вам нужен софт для сервера на Windows, эксперты рекомендуют именно C#. Он хорошо работает с фреймворками от Microsoft и быстро запускается на Windows-машинах.

Нейросети

В любое приложение на C# можно встраивать алгоритмы машинного обучения — например, компьютерное зрение, распознавание лиц или музыкальные рекомендации в плеере. Фишка в том, что для этого не надо глубоко разбираться в математике или Data Science. Достаточно подключить специальную библиотеку от Microsoft — ML.NET, — и она возьмёт все внутренности на себя.

А ещё с ML.NET работает кросс-платформенность — то есть алгоритмы в теории можно запускать вообще где угодно. Например, на банкомате, если надо сделать авторизацию по лицу.

Преимущества C#

Независимость от железа. Программисту не надо адаптировать программу под разные платформы и системы — за него это делает виртуальная машина, вшитая в .NET Framework. В итоге один и тот же код можно запускать на любых устройствах — смартфонах, компьютерах, серверах, банкоматах и даже умных часах.

Отличная совместимость с Windows. Не зря же язык разработали именно в Microsoft. Так же как Swift идеально подходит для программирования под экосистему Apple, C# прекрасно вписывается в экосистему Windows.

Управление памятью. Чтобы программа работала стабильно, её надо иногда чистить от ненужных объектов, ссылок, кэша и прочего мусора. В C# это происходит автоматически — разработчику не надо следить за расходом памяти, бороться с её утечками или удалять мёртвые куски кода.

Строгая типизация. Когда вы объявляете переменную в C#, надо сначала указать, что в ней лежит — строка, число или массив. Так разрабатывать чуть дольше, зато ваш код работает предсказуемо — числа взаимодействуют с числами, строки со строками и так далее. В языках со слабой типизацией свободы и драйва больше, но есть шанс пропустить ошибку, которая всплывёт в готовой программе.

Большое сообщество. На С# пишут более миллиона программистов по всему миру. В соцсетях полно чатов и сообществ «шарпистов», где можно задать вопрос, обсудить сложную тему или найти готовое решение. В теории можно даже найти ментора, который поделится знаниями и поможет быстрее освоить язык.

Синтаксический сахар. В С# есть много способов сократить код, не нарушая логику программы. Программисты называют такие приёмы «синтаксическим сахаром» — они помогают сделать код проще, понятнее и в целом симпатичнее. Сравните, например, как выглядит сложение чисел с «сахаром» и без.

Важно: «сахар» не стоит использовать слишком часто, иначе можно ненароком получить «синтаксический диабет» — ситуацию, когда в программе всё так зашифровано, что ничего не понять. Применять «сахар» нужно осторожно и только под присмотром профессионалов.

Недостатки языка

Есть у C# и недостатки, причём довольно серьёзные, — давайте разберём и их тоже.

Скорость. Когда мы запускаем программу на C#, код исполняется не сразу, а сначала адаптируется под нужное железо. Так мы охватываем больше платформ, но теряем в скорости — программе нужно сделать двойную работу, чтобы просто стартовать. Из-за этого интерфейсы на С# иногда подтормаживают при первом запуске.

Безопасность. Эксперты говорят, что код на C# легко декомпилировать — то есть перевести из машинного обратно в человеческий. Проблема в том, что так программу может легко прочитать хакер или конкурент — и изучить её уязвимости, украсть фрагменты кода или написать для неё вредоносный софт.

Мало доступа к железу. Так как С# — язык высокого уровня, на нём редко пишут проекты, где нужно полное взаимодействие с железом, — игровые движки, операционные системы, авиационный софт и так далее. Та же Unity целиком написана на низкоуровневом языке C++, хотя и умеет исполнять С#-команды.

Что по деньгам

По данным «Хабр Карьеры», средняя зарплата «шарпистов» составляет 162 000 рублей в месяц. Это не самые космические цифры для IT, но вполне приличные — примерно столько же получают программисты на Java, Python, PHP и других популярных языках.

На российском hh.ru мы нашли около 4 тысяч вакансий для разработчиков на C#. Больше всего предложений в Москве и Петербурге — это неудивительно, ведь там сосредоточена львиная доля энтерпрайза, где C# является стандартом. В основном компании ищут программистов для разработки бэкенда и десктопных программ, но есть варианты и в геймдеве, и в больших данных.

Интересно, что стажёры, которые только пришли в профессию, могут получать в районе 40 тысяч рублей в месяц. А если у новичка хорошая теоретическая база или уже есть какой-то опыт разработки, можно сразу пробоваться на Junior-позиции — там зарплаты уже около 64 тысяч рублей. Среди крупных компаний, которые готовы брать джунов-шарпистов, — Сбербанк, «МТС», Ozon и Kaspersky.

Более опытным Middle-разработчикам компании готовы платить в районе 120–150 тысяч рублей, а сеньорам и тимлидам — от 234 тысяч. Но такие программисты должны не только хорошо кодить, но и кое-что понимать в управлении командой и проектом.

Подходит ли С# новичку?

Если вы ищете язык для старта в программировании, обязательно рассмотрите С# — он популярен, широко распространён и официально поддерживается Microsoft. Его используют тысячи компаний, поэтому новичок может довольно быстро получить оффер. Особенно понравится язык тем, кто хочет делать 3D-графику на Unity или писать программы для Windows.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *