раздел 01
Чем языки различаются
Языков десятки, но различаются они по нескольким понятным осям. Если держать их в голове, любой незнакомый язык становится чуть понятнее: достаточно спросить, где он находится на каждой шкале.
Почти все различия языков сводятся к одному выбору: что важнее в этой задаче - чтобы программа работала максимально быстро или чтобы её было быстро и просто писать.
Четыре главные оси
Компилируемые и интерпретируемые
Компилируемый язык сначала целиком переводит код в понятный машине вид, а потом запускает - как заранее перевести книгу и отдать готовый перевод. Это быстро в работе. Примеры: Go, Rust.
Интерпретируемый язык переводит и выполняет код по ходу дела - как синхронный переводчик. Запускать и править проще, но работает медленнее. Примеры: Python, JavaScript.
Типизация: строгая и динамическая
Тип - это какого рода данные: число, текст, дата. При строгой типизации язык требует заранее обозначить тип и ругается, если вы складываете текст с числом. Это занудно, но ошибки всплывают раньше. При динамической типизации язык разбирается сам и не мешает - писать быстрее, но баг может вылезти уже у пользователя.
Высоко- и низкоуровневые
Высокоуровневые языки прячут детали работы памяти и железа, берут рутину на себя - на них думаешь про задачу, а не про процессор. Низкоуровневые дают прямой контроль над железом: можно выжать максимум, но и отвечать за всё приходится самому. Для большинства задач высокий уровень - то, что нужно.