Чем отличаются языки программирования
Прежде чем начать изучать какой-то из языков программирования, нужно очень чётко представлять себе, а почему вы выбрали учить именно его.
На моём опыте и в школе и в универе особо не заостряли на этом моменте внимания, и как итог, многие люди считают, что языки отличаются только тем, что "один быстрее другого", или "на одном языке писать код легче, чем на другом".
Основные различия ЯП
Разное предназначение
Перед разработкой нового языка программирования, авторы в первую очередь закладывают какую-то цель, какую-то потребность, которую должен восполнять новый создаваемый инструмент.
Например:
- C был задуман как язык с удобным синтаксисом, на котором возможно писать низкоуровневые эффективные приложения, и первое применение получил в написании операционной системы (ОС) Unix.
- Golang был придуман как простой язык с низким порогом входа, для быстрого создания маленьких и быстрых программ.
- С++ был создан как продолжение языка C с реализацией новых концепций программирования (о чём мы более подробно поговорим в других статьях).
- Ada был создан как очень безопасный и надёжный язык для работы на военных объектах и самолётах
- и так далее...
Причём стоит различать конкретные области, в которых используется ЯП, и его предназначение.
Например, С++ зачастую используют для создания игр - но это не была его изначальная цель (на момент появления C++ ещё не был создан тетрис). В этом случае характеристики языка просто очень удачно подходят для решения заданной задачи.
Предназначение языка программирования выражается на практике в его реализации, о чём мы поговорим далее.
Исполнение программ на ЯП
Существуют разные способы "запуска" кода на каком-то языке программирования. Подробнее об этом говорится здесь.
Но если коротко, код, написанный на разных языках программирования, запускается и работает по-разному.
Какой-то код собирается в готовую программу (например, .exe
), какой-то нет.
Для программ на одном языке может использоваться сборщик мусора (что это такое, рассмотрим в другой статье), для программ на другом языке нет.
Это может значительно влиять как на производительность программ, так и на простоту их переноса с одной системы на другую.
Идиомы и парадигмы
Люди занимаются программированием (...в том или ином виде) уже больше сотни лет, и за это время у разработчиков выработалось огромное число разных подходов и основных техник написания кода, планирования архитектуры программы, и так далее.
Если говорить обобщённо, то какие-то из этих подходов и техник можно назвать идиомами, а какие-то парадигмами. Конкретно об этих понятиях мы будем говорить далее.
Яркими примерами парадигм программирования являются Объектно-ориентированное программирование (ООП), Функциональное программирование (ФП) и Аспектно-ориентированное программирование.
Как пример самых простых идиом же можно привести RAII, Обмен значениями и Инкремент.
Реализованные концепции
В языках программирования существуют разные инструменты, которые облегчают работу над какими-то задачами, или просто позволяют подстроить процесс написания программы под себя.
В разных языках реализовываются разные концепции. Например, в C++ есть перегрузка операторов, шаблонное программирование, указатели, и так далее.
Низкоуровневость
Разные языки на разных уровнях взаимодействуют с железом компьютера.
Компьютеру, чтобы, например, вывести на экран окно графического приложения (например, того же калькулятора), нужно сделать очень много вычислений: просчитать координаты всех пикселей на экране, которые нужно вывести, закрасить их каким-то цветом, и т.д. и т.п.
И на каких-то языках можно программировать очень близко к тем самым низкоуровневым командам, которые на самом деле выполняются на машине, а на каких-то нет.
В том же питоне, например, то же самое окно можно инициализировать буквально за пару строчек кода.
Низкоуровневость языка влияет на его скорость: чем ближе мы с помощью ЯП общаемся с компьютером, тем точнее и быстрее будут программы на этом языке (очень грубо говоря).
Но у низкоуровневости есть и свои минусы: из-за того, что мы близко общаемся с целевым компьютером, переносить приложения на таких ЯП с одной машины на другую может быть достаточно проблематично. Также увеличивается время и сложность разработки в целом.
Дизайнерские решения
Это те отличия, которые и без всякой теоретической базы вы заметите при переходе от одного языка программирования на другой.
В основном, это конечно же разный синтаксис, разные правила оформления кода, разные структуры и расширения файлов с исходным кодом и так далее.
Косвенные различия ЯП
Итак, всё то, что мы обсуждали выше - это основные различия языков программирования, то есть различия, которые в язык были заложены самими создателями языка. Далее же мы посмотрим на более бытовые, и из-за этого чуть более актуальные, раличия между ЯП.
Сферы применения
Об этом мы частично говорили в пункте про разное предназначение.
Какие-то языки используют в основном для написания игр и серверных программ, какие-то - для веб-разработки, какие-то для написания драйверов и программирования микроконтроллеров, какие-то языки используют для научных расчётов, и т.д.
Зачастую люди выбирают ЯП именно из-за конкретной сферы разработки, с которой они хотели бы работать.
Порог входа
Какие-то языки программирования легко начинать изучать с нуля, а на какие-то необходимо потратить не один десяток часов, чтобы начать хотя бы примерно понимать, что там вообще происходит.
Как пример ЯП с низким порогом входа, можно вспомнить Python и Golang (у Golang низкий порог входа вообще является чуть ли не одним из главных преимуществ).
Как пример ЯП с высоким порогом входа упомяну:
- NASM, TASM и прочие диалекты ассемблера
- C
- Rust
- С++
- ...
Актуальность
Возможно, учить какой-нибудь Lisp
, COBOL
или Eiffel
очень интересно, но в реальном мире эти языки не особо то и применяются, и работу со знанием этих технологий будет найти очень тяжело.
Но актуальность языка выражается не только в количестве рабочих мест: это отражается и на самом процессе разработки. В устаревшем ЯП скорее всего не будут поддерживаться современные технологии и концепции, реализованные в новых языках, для него будет мало современных библиотек, фреймворков и SDK (что это такое подробнее обсудим позже), из-за чего писать программы на нём будет уже не так удобно.
Уровень з/п
Пункт, который косвенно связан с предыдущим. Но здесь скорее играет роль спрос и предложение на специалистов в конкретной области.
Ведь питон, например, сейчас очень востребован, и применяется в практически любой крупной компании. Но одновременно с этим людей, которые ищут работу для начинающего разработчика на этом языке тоже огромное множество: из-за огромной популярности языка, низкого порога входа и бесчисленных курсов.