- Языки программирования отличаются по области применения

- Уровень абстракции. Низкоуровневые языки ближе к машинному коду и требуют глубокого понимания архитектуры компьютера. Высокоуровневые языки более абстрактны и ближе к человеческому языку, что делает их проще для изучения и использования
- Парадигма программирования. Процедурные языки основаны на концепции процедур или функций. Объектно-ориентированные языки основаны на концепции объектов и классов. Функциональные языки основаны на математических функциях. Логические языки основаны на логических выражениях.
- Тип компиляции. В интерпретируемых языках программа выполняется последовательно, строчка за строчкой в соответствии с исходным кодом. Компилируемые языки требуют, чтобы предварительно программист скомпилировал исходный код в машинный или объектный код — и лишь затем происходит запуск программы.
- Типизация. Статическая типизация определяет типы данных в программе до её запуска (во время компиляции). В динамически-типизированных языках тип переменной определяется во время запуска программы.
- Мощность. Характеризуется количеством и разнообразием задач, алгоритмы решения которых можно записать, используя данный язык.
- Уровень. Характеризуется сложностью решения задач с помощью этого языка.
Эффективность:
Читабельность
• простота, ясность, единообразие понятий языка
• ортогональность
• структурированность потока управления в программе
Легкость создания программ
• Концептуальная целостность языка
• Естественность для приложений
• Поддержка абстракций
• Выразительность
Надежность
• Проверка типов
• Обработка исключений
• Совмещение имен
Стоимость
• Стоимость выполнения программы
• Стоимость трансляции программы
• Стоимость создания, тестирования и использования программы
• Стоимость сопровождения программы
Простота, ясность, единообразие понятий языка
Обозначает наличие разумного количество синтаксический сахара. К примеру
x = x + 1
x += 1
x++
++x
В данном случае единичку к числу можно прибавить двумя способами
Ортогональность
Представим, что язык программирования поддерживает три базовых типа данных: целые числа (int), вещественные числа с плавающей точкой (float) и символы (char). Кроме того, в языке есть две конструкции данных: массивы и указатели. Если эти конструкции можно применять не только к базовым типам, но и к самим конструкциям, то говорят, что язык обладает ортогональностью. Это означает, что можно создавать множество различных структур данных, комбинируя базовые элементы языка.