Классификаций языков программирования существует великое множество, но в данной статье мы рассмотрим только самые интересные:
По уровню реализации:
Низкоуровневые (C, C++, Assembler)
Плюсы: полный контроль над всем (в том числе и над памятью, что в других языках практически невозможно)
Минусы: дополнительный контроль несет дополнительные сложности, контроль над памятью может быстро стать утомительным, относительно бедная стандартная библиотека (Набор функций, макросов, глобальных переменных, доступных из любого места любой программы, написанной на этом языке. Служит для облегчения жизни программистам, чтобы не "изобретать велосипед").
Среднеуровневые (C#, Java)
Плюсы: памятью все еще можно управлять, но не обязательно; богатые стандартные библиотеки; компилируются в байт-код, чем упрощается взаимодействие с другими языками
Минусы: Требуется дополнительно установленная среда для выполнения байт-кода (Java Runtime Environment для Java); сложно для освоения новичку, так как надо понимать, как устроена память, сборка мусора;
Высокоуровневые (PHP, Python, Ruby, JavaScript)
Плюсы: Значительно проще синтаксис, абстракции упрощают жизнь, большие стандартные библиотеки (не надо изобретать велосипед), в целом все просто и интуитивно понятно
Минусы: Сравнительно низкая производительность; Страдает архитектура (изменения могут вноситься в любом месте кода, а не там, где это действительно нужно).
По способу реализации:
Компилируемые (C++, Objective-C, Delphi, Go)
Исходный код программы переводится в двоичные коды инструкций процессора. Это делает компилируемые языки сравнительно быстрее интерпретируемых, так как код уже переведен к машинному виду и не требует дополнительных программ-интерпретаторов для обработки. Но в этом кроется также и минус, так как скомпилированная программа может выполняться только на том типе компьютера и на той операционной системе, на которые был рассчитан компилятор.
К примеру, код, выводящий на экран фразу “Hello, world!”, написанный на Java:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
И то же самое на машинном коде для процессора архитектуры х86:
BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Кстати, всем знакомые файлы с расширение .exe как раз и есть скомпилированные файлы с машинным кодом.
Интерпретируемые (Python, Ruby, Perl, PHP)
Исходный код, вместо компиляции в машинный код, исполняется специальной программой интерпретатором. Главными плюсами таких языков являются кроссплатформенность (один и тот же код будет работать на разных операционных системах) и динамическая типизация (переменная связывается с типом – число, строка, указатель - в момент присваивания данных, а не в момент ее объявления)
Также программы, написанные с использованием интерпретируемых языков, можно запускать сразу же после изменений в коде, что облегчает разработку.
По парадигмам программирования
Парадигма программирования – это совокупность идей, понятий и концепций, которые определяют подход к написанию программ. От парадигмы зависит, как будут организованы вычисления и какова будет структура программы.
Процедурное программирование (C, Pascal, MATLAB)
Суть написания программ на таких языках сводится к тому, чтобы из операторов языка и мелких синтаксических единиц собирать более крупные куски кода, а куски кода в целые программы.
То есть у вас есть переменная А равная 10. После выполнения операторов в определенном порядке, переменная А становится равной 20. Преобразование исходных данных в заключительные, путем последовательного выполнения операторов, и есть суть этой парадигмы.
Объективно-ориентированное программирование (C++, PHP, Python, Ruby, JavaScript), ООП.
ООП возникло в результате развития процедурного программирования. Основные понятия тут – это классы и объекты этих классов. ООП было создано, чтобы облегчить жизнь программистом. Когда вы пишете программы по этой парадигме, то разбиваете одну большую проблему на несколько маленьких. Объект, по сути, – это набор свойств и методов для работы с ними. Объекты независимы, и через их взаимодействие между собой строится ваше приложение.
Одним из плюсов ООП – это повторное использование. К примеру, вам нужно загрузить изображение на сайт и изменить его размеры. Есть уже множество готовых классов, написанных другими программистами, вам лишь остается подключить класс к своему коду и использовать его. Это сильно экономит время и повышается эффективность работы.
Декларативное программирование (Haskell, Lisp, SQL)
Эта парадигма в отличие от двух предыдущих описывает, не КАК мы получаем результат, а ЧТО мы хотим получить.
Вот вы захотели пиццу: вы просто звоните в пиццерию и заказываете ее. Вам неважно, где и как ее приготовили, вы просто декларируете ваше желание.
Кстати, язык разметки web-страниц HTML является хорошим примером такого программирования. Если вы хотите отобразить на вашей странице изображение, вы просто пишете тэг <img> в вашем html-файле. Как браузер получит эту страницу с сайта, как выведет изображение – это его проблемы, вы лишь хотите видеть на странице картинку с котиками и получаете это.