Какие бывают языки программирования?

Студенты периодически спрашивали меня какой язык программирования учить чтобы получить хорошую работу и зарплату. Конечно, я не мог сказать учите этот язык, а этот не учите и будет вам счастье. Но зато мог дать информацию о языках программирования чтобы этот выбор был легче. Проклассифицируем языки программирования с семи сторон: Модные и не модные • Компилируемые и интерпретируемые • Универсальные и специализированные • Алгоритмические и языки описания данных • Низкоуровневые и высокоуровневые • Объектно-ориентированные и языки структурного программирования • Сопутствующие Фреймворки, Библиотеки и Технологии.
Первый способ классификации, в котором есть доля шутки: Модные или популярные языки программирования, и вышедшие из моды или активного применения
Почему некоторые языки становятся модными, а о других почему-то забывают? Во-первых, смена технологий. Например, во времена операционной системы MS DOS, которая работала на 16-битных процессорах Intel, огромной популярностью пользовались языки Турбо C и Турбо Паскаль. А владеющие Ассемблером программисты считались элитой. Но, по понятным причинам, мы теперь не пользуемся ни этими устаревшими процессорами, ни системой MS DOS, так что языки отпали сами собой. Хотя мне, например, они до сих пор очень нравятся.
Другая ситуация с языком Delphi, который был продолжением Турбо Паскаля, и который был очень популярен во времена первых 32-х битных версий Windows, однако не выдержал конкуренции с другими языками программирования, в том числе от компании Microsoft, которые развивались более активно.
Это может быть и победа в конкуренции двух аналогичных языков, например, таких как JScript от Microsoft для веб-браузеров и JavaScript, первоначально представленный компанией Netscape. Популярным JavaScript стал за счет большей открытости и поддержки большим числом компаний разработчиков.
Языки С и С++ долгое время остаются популярными благодаря мнению о высокой эффективности программ, которые написаны на них. В общем, так оно и есть. Однако, постепенно другие языки программирования стали приобретать популярность не только за эффективность выполнения, но и за легкость в изучении, написании и поддержке программ, чего нельзя с уверенностью сказать о C++.
За большие возможности и гибкость С++ требует от программиста дисциплины и культуры программирования, иначе, как шутят программисты, он может превратиться из языка написания программ в язык для написания ошибок.
Несмотря на провозглашаемый стандарт языков C и C++, программы, написанные для компиляторов разных фирм редко когда бывают полностью совместимы по исходным кодам. Эту особенность тоже надо учитывать при его изучении.
Один из конкурентов C++, язык С# (читается ‘си шарп’) появился и стал популярным с приходом новой технологии от Microsoft — .Net.
А язык TypeScript получил популярность в качестве ответа на проблему сложности поддержки программ написанных на JavaScript, языке, который сам по себе достаточно популярен.
Из современных популярных языков стоит отметить Python из-за сравнительной простоты изучения, открытости, и возможности применения в различных предметных областях, таких как веб, искусственный интеллект, компьютерные игры.
Практически у каждого языка программирования есть своя группа фанатов, хотя популярность сегодня совсем не означает популярность в ближайшем будущем или что популярный язык обязательно станет полезен именно вам. В общем, выбор всегда за вами.
2. Компилируемые и Интерпретируемые
Компилируемые: С, С++, Pascal
Интерпретируемые: Visual Basic Script (VBScript), JavaScript, Python, PHP
Условно компилируемые: C# и остальные языки .Net, Java для Java-машины
Любая программа на языке программирования это прежде всего текст. Текст понятен человеку, и сравнительно легко может быть обработан компьютером, потому что буквы и другие текстовые символы в компьютере представлены некими целыми числами, их еще называют кодами символов. Программа, которая обрабатывает текст на языке программирования и создает по нему последовательность команд микропроцессора называется компилятор. То есть компилятор переводит числа, которые человек воспринимает как текст в другие числа, которые компьютер воспринимает как команды микропроцессора.
Языки, для которых требуется компилятор, называются компилируемыми. Чтобы запустить такую программу, мало просто написать ее. Надо еще прогнать ее через компилятор, получить исполняемый модуль, например, в операционной системе Windows это файл с расширением .exe, и только после этого запустить его на выполнение.
Такая схема, конечно, не всех устраивала и программисты придумали языки, которым не требуется компилятор. Для таких языков перевод текста в команды микропроцессора происходит незаметно сразу после запуска текстовой программы. Правда, для этого текстовая программа должна запускаться под управлением другой уже готовой программы, которая называется Интерпретатор. Интерпретатор и делает эту незаметную компиляцию. Языки для которых требуется интерпретатор назвали Интерпретируемыми.
Главное отличие компилируемых языков от интерпретируемых в скорости выполнения программ. Считается, что программы написанные на компилируемых языках выполняются быстрее чем на интерпретируемых. Но сам процесс написания и тестирования интерпретируемой программы проходит проще, так как нет необходимости в промежуточном шаге компиляции.
Для некоторых языков, таких как С#, компиляция проходит особым образом в два этапа. Дело в том, что в среде .Net программа на C# после компиляции становится не набором команд микропроцессора, а преобразуется в программу на еще одном промежуточном языке CIL — Common Intermediate Language, (ранее называвшийся MSIL — Microsoft Intermediate Language), которая для запуска передается на вход Just-In-Time (JIT) компилятору .Net. Такая последовательность преобразований из одного языка в другой позволяет не заботиться о типе микропроцессора установленного в компьютере и дает большую универсальность для работы программ.
Похожим образом, программа на TypeScript сначала компилируется в текстовую программу, или, как говорят, в код на JavaScript, который затем уже может быть выполнен интерпретатором JavaScript. Такое усложнение позволяет воспользоваться преимуществами строгой типизации данных и отловом ошибок на этапе компиляции, которые доступны в TypeScript.
3. Универсальные и специализированные
Классификация говорит сама за себя. Есть языки, на которых можно в принципе написать любую программу, но не всегда это можно сделать, например, быстро. Или такая программа не обязательно будет оптимально быстро работать. Типичный универсальный язык всех времен и народов: С++. И в этом его большой плюс. А, может, даже два плюса )).
Специализация в языках программирования касается, как правило, либо предметной области, например, математические вычисления (Fortran, F#), искусственный интеллект (LISP), веб-разработка (PERL, PHP), компьютерные игры (Unity, Lua), бухгалтерия (1С) и т.д., либо какой-то технологии программирования, например, многопоточность как в языке Cи-Омега (Cw) или способ записи операторов как в F#.
Для разных областей приложений создаются свои языки или скрипты. Особенно это относится к компьютерным играм, в которых переплетаются сразу несколько видов искусства, науки и технологии. Но системы разработки игр также используют и уже известные языки, например, Python в системе нарративных игр Ren’Py или язык Swift для устройств Apple.
Универсальные: семейство Pascal/Delphi, C/C++, C#, Java
Специализированные:
Математические вычисления: Fortran, F#
Математическое моделирование: MatLab, Wolfram (Mathematica)
Искусственный интеллект: LISP,
На основе передачи сообщений: Small Talk,
Многопоточные приложения Cw,
Веб-разработка: Perl, PHP, JavaScript
Базы данных: SQL
Компьютерные игры: Lua, Unity, Godot, Twine
Компьютерная графика: MEL (Maya), MAX Script (3ds Max)
Бухгалтерия: 1С
4. Алгоритмические и Языки описания данных
Алгоритмические: Pascal, C++, Java, C#
Языки описания данных: XML, XAML, JSON, HTML, DDL SQL
Алгоритмические языки, конечно, тоже умеют описывать данные, но в основном предназначены для создания больших и сложных программ, которые описывают действия, то есть алгоритмы.
Языки же описания данных предназначены только для описания данных для разных типов приложений. Эти языки можно считать необходимой нагрузкой к обычным алгоритмическим языкам. Например, если вы учите JavaScript для разработки веб-приложений, то скорее всего вам придется также изучить и синтаксис каскадных таблиц стилей CSS и язык описания данных JSON, в формате которого удобно передавать данные между веб-сервером и клиентом.
Или, например, язык работы с базами данных SQL, по сути является языком для обработки и получения данных, но также включает в себя раздел Data Definition Language или Язык Описания Данных.
Вообще, на способы описания и управления данными сейчас разработчикам приходится обращать внимания, пожалуй, не меньше чем на описание алгоритмов.
5. Низкоуровневые и Высокоуровневые
Низкоуровневые: Assembler, CIL,
Высокоуровневые: любой объектно-ориентированный или поддерживающий сложные типы данных язык.
Этот тип классификации, хоть и немного теряет актуальность, поскольку подавляющее большинство языков теперь можно отнести к высокоуровневым, но все еще имеет место, поскольку низкоуровневые языки существуют.
Эта классификация была актуальна на заре развития компьютеров, когда число доступных компиляторов можно было пересчитать по пальцам, а написать, например, драйвер клавиатуры на Ассемблере можно было в качестве развлечения в свободное время.
Напомню, что Ассемблер, это язык, команды которого максимально соответствуют командам самого микропроцессора, которые позволяют обрабатывать данные размером один, два или четыре байта, за счет чего представить на нем сложные типы данных очень и очень проблематично. Но зато по скорости выполнения программ языку Ассемблера просто нет равных.
Язык CIL, который уже упоминался выше, это в некотором смысле аналог ассемблера, но для системы .Net. Команды CIL преобразуются JIT-компилятором .Net в наборы инструкций микропроцессора в зависимости от типа самого микропроцессора, на котором установлен .Net. Как правило, программа на CIL это результат компиляции программы написанной на одном из языков высокого уровня .Net.
Кроме того, CIL это особый язык. Писать программу непосредственно на нем может оказаться слишком долго. Программы на этом языке генерируются компиляторами и используются программным обеспечением платформы .Net. Поэтому он считается языком программирования скорее для машины чем для человека.
6. Объектно-Ориентированные и Структурные языки программирования
Появление объектно-ориентированного программирования, сокращенно ООП, примерно со второй половины 80-х годов 20-го века стало настоящей технологической революцией. Это был буквально переворот, сейчас объясню почему. До ООП были популярны языки структурного программирования. И программисты были вполне счастливы писать программы на структурных языках высокого уровня, потому что в свое время это тоже было колоссальным шагом вперед.
Дело в том, что компьютер удалось создать только после титанических усилий таких гениев как Алан Тьюринг, который разработал свою теорию — машину Тьюринга, на основе которой и работают все числовые компьютеры в наши дни. Принцип машины Тьюринга, вкратце, состоит в том, что в оперативной памяти записана последовательность команд микропроцессора, в том числе команд условных или безусловных переходов на другие команды. Эти переходы на ассемблере называются JMP (англ.: jump — прыжок, переход), а в языках высокого уровня обозначаются командой GOTO (англ.: go to — перейти к чему-л.).
Для программирования компьютера первоначально существовал язык Ассемблер, команды которого почти один в один соответствуют командам микропроцессора. Теоретически, на Ассемблере можно написать любую программу, но практически перенос абстракций прикладных задач на него совсем не простое дело.
Для программирования прикладных задач, примерно с начала 70-х годов 20-го века и появилось структурное программирование, для создания которого потребовались усилия других гениев, таких как Никлаус Вирт, создатель языка Паскаль и Эдсгер Дейкстра, который первым написал о необходимости избавляться от оператора GOTO в языках высокого уровня и предложил решение как это сделать с помощью трех типов операторов и функций.
На практике это вылилось в появление языков программирования, таких как Basic, С, Паскаль, Algol, Cobol, Fortran, PL1. Разработка программ методом «сверху вниз» в структурном программировании превратилась в сплошное удовольствие. Суть ее состояла в написании набора функций, содержащих подфункции, которые можно вызывать, подставляя на вход нужные данные и получая соответствующий результат.
Таким образом, в языках структурного программирования алгоритмы на основе функций стоят как бы на первом месте, а данные для них можно брать откуда угодно. Не последнюю роль в этом сыграла идея автора кибернетики Норберта Винера о функции как о черном ящике, на вход которому можно подавать любые данные и наблюдать получаемый выход.
Для небольших задач типа сортировки данных или нахождения кратчайшего пути структурное программирование подходило идеально. Были найдены решения для большинства сложных алгоритмических задач. Появились фундаментальные труды, такие как многотомник “Искусство программирования” Дональда Кнута, который до сих пор считается настольной книгой для программистов.
Однако, увеличение сложности программ в результате привело к появлению и бо́льших шансов на внесение ошибок в программы, так как возможность подставлять любые данные на вход процедурам и функциям влекло за собой побочные эффекты. Так, например, в 1999 году космический аппарат NASA «Mars Climate Orbiter» потерпел крушение в из-за ошибки в программе — подстановки неправильных данных.
В результате появилась новая концепция объектно-ориентированного программирования, в котором во главу угла ставится, как я его называю, принцип актуальности данных, а функции становятся как бы приложением к данным, которые они должны обрабатывать. Объект это, в первую очередь, набор данных со своими функциями. В ООП вводятся ограничения на доступ функций к «чужим» данным, что уменьшает возможность непреднамеренного изменения данных и резко повышает надежность программ.
После появления объектно-ориентированных языков программирования, таких как С++, Object Pascal, Java, С#, а также новых аппаратных возможностей компьютеров, объемы программ и данных для них увеличились многократно, если не на порядки, что легко оценить хотя бы по объемам дистрибутивов программ, которые перестали помещаться сначала на дискеты, а потом и на компакт диски. А программирование снова как бы встало с головы на ноги.
Update 24.02.2021
См. также видео-версию этой главы.
7. Сопутствующие Фреймворки (Frameworks), Библиотеки и Технологии
С определенным языком программирования может быть связана технологическая цепочка или целая система программирования, которые также называют термином фреймворк.
Примеры: платформа или фреймворк .Net. Языки программирования, такие как C#, F#, работают только на этой платформе и понимание особенностей платформы важно для понимания того как работают программы, написанные на этих языках.
Для использования языка С++ от Microsoft для первых 32-х битных версий Windows программистам для создания оконных приложений также приходилось изучать библиотеку MFC.
Для разработки веб-приложений с помощью технологии MVC от Microsoft программистам также потребуется язык разметки веб-страниц Razor.
Для создания современных приложений на универсальной платформе Microsoft может потребоваться язык разметки XAML.
Другие примеры:
Ruby on Rails — серверная платформа разработки веб-приложений.
Для компьютерных игр, такие как Unity, Cocos, Unreal Engine.
Для 3D графики: OpenGL, DirectX.
Наверно, возможны и другие способы классификации языков программирования, например, со строгой типизацией и без. Но они интересны тем, кто уже разбирается в программировании, этот же обзор скорее для начинающих.
Выводы
В принципе, чем больше языков знает программист, тем увереннее себя чувствует как профессионал. Но в наше скоростное время возможно и такое, что версия языка может потерять свою актуальность буквально за полтора-два года. Например, у языка TypeScript c 2015 по 2019 год, то есть примерно за 5 лет, было выпущено, внимание, более 20-ти обновлений.
Если человек уже определился с прикладной областью, с операционной системой, с компанией в которой будет работать, то выбор языка программирования упрощается. Правда, компании могут иметь довольно экзотические требования, от которых у начинающих может просто рябить в глазах. Например, такой стек языков и технологий в описании вакансии одной из крупных российских компаний: .Net Core 3.1, Java 14, Kotlin, ElasticSearch, Lucene, Kafka, Redis, PostgreSQL, MSSQL, Airflow, Spark, Kubernetes, GitLab CI, Prometheus, Graylog, Jaeger, Grafana. Этот набор так или иначе затрагивает по крайней мере четыре языка программирования: Java, Kotlin, SQL и Lua.
Если же с компанией еще не определились, то можно начать с одного из универсальных языков программирования. Из-за повсеместного проникновения интернета, для программиста желательно хотя бы в общих чертах представлять себе что такое язык HTML, а также сопутствующие языки описания данных типа XML и JSON. Желательно также иметь представление о языке управления базами данных SQL.
Прошло то время, когда работать с одной и той же версией языка программирования можно было десятилетиями. В наше время особенность работы программиста состоит в постоянном изучении новых языков и технологий. Курсы по программированию могут быть хорошим трамплином, но основной опыт программисты получают в процессе работы, как бы учась и работая одновременно.
И напоследок, буквально за несколько лет как грибы после дождя стали появляться системы визуального программирования без программистов, например для создания веб-сайтов, такие как WordPress, Wix, Bitrix24. Для обычных пользователей они позволяют выбрать дизайн, подключиться к данным и самому запрограммировать бизнес-процессы.
Глядя на эти системы может сложиться впечатление, что программисты скоро окажутся не нужны. Но отгадайте, кто создает все эти системы программирования без программистов? Те же программисты с помощью все тех же обычных языков программирования.
Выбираем язык программирования
Какие бывают языки программирования и в чём их отличия.

Маргарита Катрич
Автор статьи
6 ноября 2023 в 12:58
Базовый список популярных языков программирования для тех, кто только присматривается к профессии программиста.
Какие бывают направления у языков программирования
Разработчики могут выбирать направление, которое подходит их интересам и целям.
Веб-разработка — это разработка сайтов и веб-приложений.
Системная разработка — разработка операционных систем, драйверов, встроенных систем и низкоуровневых компонентов.
Десктоп-разработка — создание сайтов и приложений для ПК и ноутбуков.
Мобильная разработка — создание приложений для мобильных устройств: смартфонов и планшетов.
Геймдев — разработка компьютерных и мобильных игр.
Data science — направление, связанное с анализом и обработкой данных, чтобы получать ценную информацию для разных сфер применения.
У каждого направления — свои особенности, требования и инструменты. Расскажем о самых распространенных языках.
Языки для веб-разработки
Сфера веб-разработки глобально делится на две части: фронтенд и бэкенд.
Фронтенд (англ. frontend — «внешняя часть») — всё, что пользователь видит и с чем взаимодействует на сайте или в приложении. Frontend-разработчики заботятся о том, как сайт выглядит и как пользователи взаимодействуют с кнопками, формами и другими элементами.
Бэкенд (англ. backend — «задняя часть») — внутренняя сторона сайта или приложения, которую пользователь не видит напрямую. Backend-разработчики управляют данными, обрабатывают запросы и взаимодействуют с базами данных. Создают логику, с помощью которой пользователи могут регистрироваться, входить в систему, сохранять данные и выполнять другие задачи.
Языки для фронтенда
Вот самые распространенные языки, на которых разработчики пишут frontend-часть.
HTML и CSS
HTML (HyperText Markup Language) — язык разметки, который используют, чтобы создать структуру веб-страницы. Он определяет, какие существуют элементы на странице: заголовки, абзацы, таблицы и изображения.
CSS (Cascading Style Sheets) — это каскадные таблицы стилей. Используются для стилизации веб-страниц. С помощью CSS frontend-разработчики могут задавать цвета, шрифты, размеры и другие параметры элементов на странице.
JavaScript
JavaScript — это язык программирования, с помощью которого во фронтенде добавляют интерактивность и динамику на веб-страницах. Его используют, чтобы создавать:
- слайдеры и анимацию;
- динамические меню, которые раскрываются или сворачиваются при клике на кнопку или элемент;
- модальные окна, всплывающие диалоги и уведомления для взаимодействия с пользователями.
Еще с помощью JavaScript можно валидировать формы — это проверка данных, которые пользователь вводит в веб-форму. Если данные ввели неверно или неполно, высвечивается окно с ошибкой.
Чтобы упростить написание кода и не выстраивать логику с нуля, разработчики используют фреймворки. Фреймворк — это набор готовых инструментов, библиотек и правил, который помогает быстрее и эффективнее создавать сайты и приложения. По сути фреймворк — это заранее написанный код, который можно использовать как конструктор для остальных элементов.
В JavaScript есть несколько самых распространенных фреймворков.
React — популярный JS-фреймворк для разработки пользовательских интерфейсов. С его помощью создают компоненты, которые автоматически обновляются при изменении данных. Это делает веб-приложения более отзывчивыми.
Angular — еще один фреймворк для разработки веб-приложений от Google. Он предоставляет множество инструментов и библиотек, чтобы создавать крупные и сложные приложения.
Vue.js — легковесный JS-фреймворк, который дополнительно используют, чтобы создавать пользовательские интерфейсы. У него простой и понятный синтаксис.
С помощью JavaScript можно писать и backend-часть. Для этого JavaScript обычно реализуют с помощью среды выполнения Node.js — это программное окружение для работы на серверной стороне. С этим инструментом разработчики создают серверные приложения и обрабатывают HTTP-запросы, взаимодействуют с файловой системой, работают с базами данных.
Почему стоит выбрать JavaScript:
✔️ Подходит и для фронтенда, и для бэкенда — а значит, его можно использовать для fullstack-разработки, которая включает клиентскую и серверную части.
✔️ Много библиотек и фреймворков.
✔️ Легко изучать новичку за счет обширного сообщества программистов, которые подскажут в сложный момент.
✔️ Востребованный язык.
В онлайн-университете Skypro вы можете освоить профессию «Frontend-разработчик» с нуля, даже если ничего не знаете о программировании. Вы научитесь верстать сайты с помощью HTML и CSS, адаптировать их под разные устройства, работать с JavaScript, тестировать и отлаживать свой код.
Уже через 12 месяцев учебы получите диплом о профпереподготовке и с новыми знаниями сможете устроиться на первую работу. С этим вам помогут в центре карьеры Skypro: расскажут, как составить резюме для разработчика без опыта, как писать сопроводительные письма и отвечать на сложные вопросы на собеседованиях.
Со Skypro путь к новой профессии окажется проще, чем вы думали.
Языки для бэкенда
Самые распространенные языки, с которыми работают backend-разработчики.
Python
Python — это высокоуровневый интерпретируемый язык программирования с простым и читаемым кодом. «Высокоуровневый» и «интерпретируемый» означает, что язык использует команды и понятия, близкие к человеческому языку. Такие языки, как Python, обычно не требуют компиляции в машинный код и непосредственно интерпретируются компьютером.
Python стал одним из самых популярных благодаря универсальности — его применяют в разных областях. Например, его широко используют, чтобы создавать веб-приложения с фреймворками Django и Flask.
Python популярен в анализе данных, машинном обучении и искусственном интеллекте. Библиотеки NumPy, Pandas, Matplotlib и TensorFlow делают Python особенно мощным в этих областях. К примеру, NumPy помогает поддерживать работу с многомерными массивами и математическими функциями, необходимыми для вычислений. А Pandas дает инструменты для анализа данных и манипуляции ими в формате таблиц — чем-то похоже на Excel.
Почему стоит выбрать Python:
✔️ Простота и читаемость — делают его идеальным для начинающих программистов и облегчают совместную работу в команде.
✔️ Меньше кода — язык лаконичен по сравнению с другими.
✔️ Многозадачность — поддерживает параллельное выполнение задач.
✔️ Кросс-платформенность — работает на различных операционных системах, что позволяет переносить код с одной платформы на другую.
✔️ Большой набор библиотек и фреймворков.
11 января 18:00 МСК
Лучшие IT-профессии 2024 года: тренды, зарплаты, перспективы

C/C++
C и C++ — два мощных и широко используемых языка программирования со своими особенностями и областями применения.
Язык C разработали еще в начале 1970-х годов — это был один из первых низкоуровневых языков программирования. По сравнению с высокоуровневыми низкоуровневые языки напрямую взаимодействуют с железом компьютера.
Сейчас язык C широко используют в системном программировании. С его помощью создают операционные системы, разрабатывают встроенное программное обеспечение. Еще на языке С пишут прикладные программы, где критически важны производительность и управление памятью. Это означает, что у программистов есть прямой доступ к физической памяти компьютера и контроль над ней.
C++ — это расширение языка C с поддержкой объектно-ориентированного программирования (ООП). Он используется в разработке приложений, где важна оптимизация производительности и где могут эффективно использовать объекты и классы для структурирования кода.
Язык C++ используют для создания игр, графических приложений, систем управления базами данных, а еще во встроенных системах и разработке программного обеспечения для научных и инженерных расчетов.
Почему стоит выбрать C/С++:
✔️ ООП — дает возможность создавать объекты и классы, что упрощает структурирование кода и управление им. Объекты и классы — это способы организации кода для более легкой и структурированной работы.
Класс можно рассматривать как шаблон или описание, которое определяет, какие данные и функции будут включены в объект. Например, класс «Автомобиль» помогает определить, что каждый автомобиль будет иметь марку, модель, цвет и функции. Объект — это экземпляр класса. Если класс «Автомобиль» — это описание, то конкретный автомобиль с определенными характеристиками — объект этого класса.
За счет классов и объектов разработчики могут лучше организовывать код — создавать множество объектов на основе одного класса.
✔️ Высокая производительность — возможность оптимизировать производительность благодаря низкоуровневому (прямому) доступу к памяти и другим ресурсам.
✔️ Углубленное понимание — если вы выучите C/C++, то поймете, как компьютеры работают на низком уровне, то есть непосредственно внутри железа. Это полезно для тех, кто связан с системным программированием.
✔️ Широкий спектр областей — можно работать в различных сферах: встраиваемые системы, игровая разработка, высокопроизводительные вычисления и другие.
Но C и C++ могут быть сложными для новичков из-за их низкоуровневой природы, сложного синтаксиса и деталей управления памятью.
C#
C# (произносится как «си-шарп») — это объектно-ориентированный язык c автоматическим управлением памятью, который разработали в компании Microsoft.
У C# широкий спектр применения, он пользуется популярностью в разных областях разработки программного обеспечения.
C# часто применяют, чтобы:
- создавать веб-приложения с использованием платформы .NET;
- разрабатывать десктопные приложения под Windows;
- создавать мобильные приложения под платформы Android и iOS;
- разрабатывать игры с использованием движка Unity.
Почему стоит выбрать C#:
✔️ Поддержка ООП — за счет этого можно структурировать и организовать код более эффективно.
✔️ Обширная библиотека классов .NET — упрощает разработку приложений.
✔️ Многообразие платформ и сфер применения — можно работать в разных областях разработки: от создания веб-приложений до игр.
Java
Java — это строго типизированный объектно-ориентированный язык. Код, написанный на Java, может выполняться на разных операционных системах без изменений. Это происходит за счет посредника среды выполнения Java — Java Virtual Machine (JVM).
Java достигает кросс-платформенности благодаря JVM, которая интерпретирует (или компилирует) код на Java и выполняет его на конкретной операционной системе. Когда разработчик создает программу на Java, она компилируется в байт-код (промежуточный код), который затем исполняется JVM. В итоге разработчики создают программы, которые можно использовать на разных устройствах и платформах, без необходимости переписывать код с нуля.
Еще Java обладает механизмами безопасности: контроль доступа и проверка наличия памяти помогают предотвращать ошибки и уязвимости. Благодаря автоматизации процессов Java освобождает время разработчиков от управления памятью и сборки мусора. У Java большая стандартная библиотека классов, которая предоставляет множество готовых решений для различных задач.
Почему стоит выбрать Java:
✔️ Богатая документация и активное сообщество разработчиков.
✔️ Многообразие сфер применения — универсальный язык для карьеры в программировании.
✔️ Большой спрос на специалистов на рынке труда.
Обучитесь профессии «Java-разработчик» с нуля в онлайн-университете Skypro. За 11 месяцев освоите все необходимые инструменты, чтобы чувствовать себя в программировании уверенно и спокойно. В процессе учебы вы будете слушать теорию, выполнять домашние задания и создавать собственные проекты на практике.
В конце курса получите диплом о профпереподготовке и сможете работать в IT-компании над первыми коммерческими проектами. Со Skypro у вас всё получится! Нужно только сделать первый шаг к новой профессии — а дальше мы постоянно будем рядом, чтобы поддерживать и помогать в течение всей учебы.
Go
Go, или Golang, — это компилируемый статически типизированный язык программирования, который разработала компания Google.
Когда язык программирования называется «компилируемым», это означает, что вводимый код сначала переводится в машинный код, понятный компьютеру, с помощью специальной программы — компилятора.
Статически типизированный язык — язык, в котором для каждой переменной, функции и объекта назначается определенный тип данных. Он указывается при написании кода, и этот тип не может меняться позже. Это означает, что программист должен четко определить, какие виды данных будут храниться в программе, а компилятор проверяет, чтобы типы данных соответствовали друг другу. Это помогает предотвратить ошибки и повысить надежность программ.
Golang компилируется в машинный код, что дает высокую производительность — при этом не нужно устанавливать интерпретатор на целевой машине. Он интерпретирует и выполняет код программы построчно или по командам, когда программу запустили на компьютере или устройстве конечного пользователя.
На языке Golang разработчик может автоматически управлять памятью через сборщик мусора, что облегчает работу и предотвращает утечки. С этим языком вы можете создавать параллельные программы — то есть приложения, которые выполняют несколько задач одновременно.
Это возможно с помощью специальных функций — горутин и каналов, которые позволяют горутинам обмениваться информацией. Благодаря этому приложения на Golang работают быстро и эффективно, даже если выполняют множество задач одновременно.
Golang популярен для создания высокопроизводительных серверов и микросервисов.
Еще это основной язык для разработки контейнерных технологий, таких как Docker и Kubernetes.
Почему стоит выбрать Go:
✔️ Лаконичный и понятный синтаксис — всего 25 ключевых слов в языке.
✔️ Высокая производительность.
✔️ Растущая популярность — в сфере серверной разработки и области контейнеризации.
Языки для мобильной разработки
Мобильные приложения и версии сайтов могут разрабатывать и для операционной системы Android, и для iOS. Для первой используют языки Java и Kotlin, а для второй — Swift.
Kotlin
Kotlin создали на основе Java, сейчас этот язык считается предпочтительным для работы с Android. На Kotlin перешли гугл, пинтерест, тикток, тиндер и многие другие приложения и сервисы.
Kotlin может взаимодействовать с существующим Java-кодом без проблем, что делает его привлекательным для разработчиков, которые работают в средах, где используется Java. Kotlin обеспечивает статическую типизацию — это позволяет выявлять ошибки на этапе компиляции.
Почему стоит выбрать Kotlin:
✔️ Более чистый и краткий синтаксис по сравнению с Java.
✔️ Современный синтаксис.
✔️ Высокий уровень безопасности — язык помогает найти ошибки на этапе компиляции, что помогает создавать надежные приложения.
Swift
Swift — это компилируемый язык программирования, который разработала компания Apple для iOS, Mac, Apple TV и Apple Watch.
Почему стоит выбрать Swift:
✔️ Популярность — один из самых популярных языков программирования в мире мобильной разработки за счет связи с экосистемой Apple.
✔️ Лаконичный синтаксис.
✔️ Четкая типизация данных — то есть у каждой переменной или значения есть определенный тип данных, который должен соответствовать строго заданным правилам. Это позволяет уменьшить ошибки в коде.
Языки для геймдева
Чаще всего для разработки игр используют языки C++, C# и Java.
C++ — один из популярных языков программирования в геймдеве. Он гарантирует высокую производительность, близкую к машинному коду. Множество игровых движков, например Unreal Engine и Unity, предоставляют API на C++.
C# часто используют для разработки игр под платформу Windows и Xbox. Unity, один из популярных игровых движков, предоставляет среду разработки, основанную на C#.
Java применяют в геймдеве чаще при создании игр для платформы Android, но за счет кросс-платформенности у него широкий спектр использования — можно делать игры для любой системы.
Выучить Java — значит получить универсальный билет в мир IT! На курсе «Java-разработчик» вы сможете не только выучить язык Java с нуля, но и освоить другие инструменты программирования: PostgreSQL, HTTP, Docker, Hibernate, Spring Boot, Swagger, Debug, Git, GitHub и другие.
Преподаватели будут проверять домашние работы и давать конструктивную обратную связь в течение суток или двух (в зависимости от тарифа). Материалы курса даже после окончания учебы останутся у вас навсегда, поэтому при необходимости в будущем вы сможете не раз к ним возвращаться.
Профессия разработчика стала еще ближе!
Языки системного программирования
Чтобы создавать программы и операционные системы, которые работают близко к аппаратному уровню компьютера, разработчики чаще всего пишут код на языках С, C++ и Rust.
Rust — современный низкоуровневый системный язык программирования, который обеспечивает высокую производительность, безопасность памяти и устойчивость к множеству ошибок. Его не рекомендуют учить новичкам.
Главное о языках программирования
Языки программирования используются в нескольких направлениях: веб-разработка, системное программирование, десктоп-разработка, мобильная разработка, геймдев и data science.
Всю веб-разработку можно условно разделить на фронтенд и бэкенд. Фронтенд отвечает за внешний вид сайта, для него используют языки HTML, CSS и JavaScript. JavaScript добавляет интерактивные элементы: слайдеры, анимацию и валидацию форм. JS-фреймворки React, Angular и Vue.js упрощают разработку. JavaScript используется и для backend-разработки: с Node.js можно разрабатывать серверную логику и обрабатывать запросы.
Backend-разработчики работают с разными языками программирования: Python, C/C++, C#, Java и Go. Python популярен благодаря простоте и используется для веб-приложений, анализа данных и машинного обучения. C и C++ чаще используют в системном программировании и разработке прикладных программ. C# популярен в веб-разработке, десктопных приложениях и создании игр с Unity. Java используют в разных сферах разработки, а Golang — в серверной и контейнерной разработке.
Для мобильной разработки на Android используют языки Java и Kotlin. Kotlin выбирают чаще из-за современного синтаксиса и безопасности. Для iOS-разработки используют Swift, разработанный Apple. Он известен своей популярностью и лаконичным синтаксисом.
Для разработки игр часто используют языки C++, C# и Java. C++ дает высокую производительность и точное управление ресурсами. C# часто применяется для игр под Windows и Xbox с использованием Unity. Java используют в основном для создания игр на платформе Android. В системном программировании наиболее распространены языки C, C++ и Rust.
Язык программирования C

С — один из первых низкоуровневых языков программирования, появившийся еще в 70-х годах прошлого века и до сих пор не теряющий свою актуальность. В этой статье мы кратко разберем основные возможности языка, приведем примеры программ на С, а также проясним главные отличия С от других инструментов разработки.
Преимущества языка С
- На синтаксисе С основываются другие языки, в том числе Java, JavaScript и PHP. Зная базовые принципы, можно легко освоить новый инструмент, расширяющий возможности для создания программ и приложений.
- Его ответвления — С++ и С# — самые популярные инструменты кодеров. Они применяются во многих сферах от операционных систем для банкоматов и до бэкенда кроссплатформенных приложений. В основе одного из самых известных игровых движков Unity — лежит С++.
- Си обладает чертами высокоуровнего языка, то есть близок к машинному коду.
- Программы на С отличаются быстротой и гибкостью, не требуют больших вычислительных мощностей.
- Код на С является кроссплатформенным. Большинство процессоров сейчас имеют компиляторы для этого языка.
Отличия С, С++ и С#

Как ни странно, приведенные языки похожи и не похожи друг на друга одновременно.
Си — процедурный язык, изначально предназначенный для написания операционных систем и драйверов.
С++ — язык общего назначения, совмещающий процедурную и объектно-ориентированную парадигмы.
С# — чисто объектно-ориентированный язык, разработанный инженерами компании Microsoft и заточенный под платформу .NET Framework.
Схожи эти три языка по большей части лишь в синтаксисе. В остальном они достаточно различны — от подхода к работе с памятью до объявления переменных.
Если говорить кратко, С — в целом более понятный и быстродейственный язык. Но C++ и C# за счет своей объектно-ориентированности лучше решают практические задачи. Именно на них пишутся масштабные игры и крупные бизнес-приложения для различных устройств и операционных систем.
Основные области применения
Изначально С создавался как инструмент для разработки в ОС UNIX. Правда, за счет своих свойств: быстродействия и близости к машинному коду, Си стали применять при разработке других операционных систем. Сейчас большинство “умных” устройств, подключенных к интернету вещей, основываются на С или C++. Пишутся на этих языках и пользовательские программы специалистами 1C под самые популярные платформы — Windows, Mac, Android, iOS.
Переменные в С
В классическом С переменные различаются по типу и предельному весу. Приведем список команд для инициализации всех возможных вариантов.
int a — целое число в 4 байта.
short int b — укороченный вариант, целое число в 2 байта.
long int с — длинная переменная, целое число в 8 байт.
float d — переменная для дроби на 4 байта.
double f — переменная для дроби на 8 байт;
int g [5] — массив из 5 целых чисел.
char h — символьная переменная.
struct str_name — структура, сочетающая целое число и символы.
Несколько переменных одного типа можно объявить в одной строке, написав, например:
Далее можно присвоить переменной конкретное значение, просто написав x=3 или задав алгебраическое выражение, например x=y+z.
Основные команды в языке программирования С
Рассмотрим восемь основных операторов, с помощью которых пишутся алгоритмы на языке C.
Подключение внешних файлов
Для использования некоторых функций необходимо подключать внешние библиотеки. Подключение происходит до начала основной программы через команду #include.
К примеру, чтобы задействовать библиотеку ввода-вывода данных, нужно написать строку #include .
Комментарии
Чтобы закомментировать строку в коде, в начале нее ставится знак /* , а в конце — */. Текст внутри этих знаков не будет обрабатываться компилятором, и будет виден только разработчику.
Ввод и вывод данных
За ввод пользовательских данных отвечает команда scanf. Вывод данных производится через оператор printf.
Простейшая программа Hello World на языке С выглядит так.
/*библиотека ввода-вывода данных*/ #include /* основная функция */ void main()
Строка void main означает начало программы, а return 0 — ее конец. Вместо пустого оператора “void” может быть указан конкретный тип используемых в коде данных — например, int или float.
Рассмотрим пример программы с вводом данных.
#include int main()

Здесь символ %d говорят компилятору, что в этом месте ожидается целое десятичное число. Символ &x присваивает введенное значение объявленной ранее переменной x.
Если нам необходимо ввести символьные, а не числовые данные, основная функция будет выглядеть так.
#include void main() < char name[21]; /* символьный массив с определенным количеством знаков */ printf( "Введите ваше имя: " ); scanf( "%s", name ); printf( "Вы ввели %s", name ); return 0; >

Если, то
Оператор условия проверяет существующие данные и выполняет указанные действия в зависимости от результатов проверки. Допустим, мы хотим, чтобы введенное пользователем число было двузначным. Пропишем для этого условное выражение и вывод результата после проверки.
#include void main() < int x; printf("Введите ваш номер: "); scanf("%d", &x); if (x>10) < printf("Ваш номер подтвержден"); /*если условие не соблюдается, выводим другое сообщение*/ >else < printf("Номер должен быть двузначным"); >return 0; >

Множественный выбор
Если нужно выбрать одно из множества значений, оператор if — не самое удобное решение. Вместо него лучше использовать оператор switch. Напишем программу, выводящую на экран название определенного месяца в зависимости от введенного числового значения.
#include int main() < short int day; printf("Введите месяц"); scanf("%d", &day); /* выводим название месяца */ switch (day) < case 1: printf("Январь"); /* выходим из дальнейших проверок */ break; case 2: printf("Февраль"); break; case 3: printf("Март"); break; case 4: printf("Апрель"); break; case 5: printf("Май"); break; case 6: printf("Июнь"); break; /* И так далее. Для чисел меньше 12 выводим следующую надпись*/ default: printf("Введено неверное значение"); >return 0; >
Цикл For
Рассматриваемый цикл состоит из трех частей:
- переменная, над которой производится действие;
- заданное условие;
- порядок обновления переменной.
Пока условие верно, программа последовательно будет выполнять нужное действие над инициированной переменной.
В примере выведем на экран квадраты всех чисел от 1 до 10.
#include void main() < int x; for (x=1; x /* выводим значения квадратов */ return 0; >

Команда x++ здесь пошагово добавляет единицу к каждому новому значению переменной x, пока цикл не завершится.
While и do-while
Цикл While немного проще по синтаксису, чем цикл For, но выполняет схожие функции. Здесь нужно лишь указать условие и изменяемую переменную.
#include int main() < int y; while (y return 0; >
В этом примере на экран выводится сумма двух переменных y, пока y меньше или равен 15.

Цикл do while сначала выполняет условие, а затем проверяет получившийся результат.
#include int main() < int y; y = 0; /* сначала заходим в цикл */ do < printf("%d\n", y); y++; /* а в конце проверяем, нужно ли идти на новый повтор*/ >while(y
Функции
Чтобы не прописывать несколько раз одно и то же действие, в программу добавляются функции, то есть автономные куски кода. Команда main () обозначает собой основную функцию. Но над ней можно прописать дополнительные операции.
Разберем на примере. Напишем код, который автоматически будет складывать два введенных числа. Для этого введем инициализируем функцию add и пропишем ее содержание.
#include int add ( int x, int y ) < return x + y; >int main()

При создании функции всегда указываются:
- тип используемых переменных;
- название функции;
- аргументы;
- тело функции.
Код становится более рациональным и читаемым при использовании функций, поэтому их освоение — одна из главных задач программиста на С.
Примеры программ
1. Напишем код, который по введенным данным — пройденному расстоянию и времени в пути — будет определять скорость передвижения.
#include float speed( float l, float t ) < return l/t; >float main()
Здесь мы использовали дробный тип переменных, так как результатом деления может быть не целое число.

2. Перепишем выражение if с несколькими условиями.
В зависимости от возраста, введенного пользователем, выведем на экран соответствующую приветственную надпись.
#include int main() < int age; printf( "Пожалуйста, введите свой текущий возраст: " ); scanf( "%d", &age ); if ( age else if ( age < 20 ) < printf( "Здравствуй, юный друг!\n" ); >else if ( age < 40 ) < printf( "Добро пожаловать!\n" ); >else < printf( "Рады Вас видеть!\n" ); >return 0; >

Как видно из примера, связка else if внутри функции может повторяться несколько раз.
Заключение
Язык С — основа для создания операционных систем и вычислительных программ. В отличие от С++ и С#, в классическом С нет объектов, методов и классов. Это одновременно можно считать и плюсом, и минусом языка. Часть задач программирования сложно решить без инструментов ОПП, но с другой их частью С справляется быстрее и “изящнее”.
Синтаксис С лег в основу многих более поздних языков, что делает его знание особенно полезным для специалиста в разработке программного обеспечения.
Язык С#: где используют, что пишут, как появился и чем хорош
Изучаем под микроскопом популярный язык от Microsoft, который называется совсем не «Си решётка».


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

Максим Сафронов
Автор, редактор, IT-журналист. Рассказывает о новых технологиях, цифровых профессиях и полезных инструментах для разработчиков. Любит играть на электрогитаре и программировать на Swift.
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. Если перевести это на программистский, получится как-то так:

В теории на 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#, надо сначала указать, что в ней лежит — строка, число или массив. Так разрабатывать чуть дольше, зато ваш код работает предсказуемо — числа взаимодействуют с числами, строки со строками и так далее. В языках со слабой типизацией свободы и драйва больше, но есть шанс пропустить ошибку, которая всплывёт в готовой программе.
Большое сообщество. На С# пишут более миллиона программистов по всему миру. В соцсетях полно чатов и сообществ «шарпистов», где можно задать вопрос, обсудить сложную тему или найти готовое решение. В теории можно даже найти ментора, который поделится знаниями и поможет быстрее освоить язык.
Синтаксический сахар. В С# есть много способов сократить код, не нарушая логику программы. Программисты называют такие приёмы «синтаксическим сахаром» — они помогают сделать код проще, понятнее и в целом симпатичнее. Сравните, например, как выглядит сложение чисел с «сахаром» и без.

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

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

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