раздел 01

Чем языки различаются

Языков десятки, но различаются они по нескольким понятным осям. Если держать их в голове, любой незнакомый язык становится чуть понятнее: достаточно спросить, где он находится на каждой шкале.

Почти все различия языков сводятся к одному выбору: что важнее в этой задаче - чтобы программа работала максимально быстро или чтобы её было быстро и просто писать.

Четыре главные оси

Компилируемые против интерпретируемых
Компилируемые (Go, Rust) заранее переводят весь код в машинный - работают быстро. Интерпретируемые (Python, JavaScript) выполняются на ходу - запускать проще.
Строгая против динамической типизации
Строгая (как в TypeScript) заставляет заранее объявить, что число - это число. Ловит ошибки рано. Динамическая (Python) прощает, но даёт ошибиться.
Высоко- против низкоуровневых
Высокоуровневые ближе к человеку, берут рутину на себя. Низкоуровневые (C, Rust) ближе к железу: больше контроля, но больше ручной работы.
Скорость против простоты
Итог всех осей. Чем ближе к железу и строже язык, тем быстрее результат и тем дольше писать. И наоборот.

Компилируемые и интерпретируемые

Компилируемый язык сначала целиком переводит код в понятный машине вид, а потом запускает - как заранее перевести книгу и отдать готовый перевод. Это быстро в работе. Примеры: Go, Rust.

Интерпретируемый язык переводит и выполняет код по ходу дела - как синхронный переводчик. Запускать и править проще, но работает медленнее. Примеры: Python, JavaScript.

Типизация: строгая и динамическая

Тип - это какого рода данные: число, текст, дата. При строгой типизации язык требует заранее обозначить тип и ругается, если вы складываете текст с числом. Это занудно, но ошибки всплывают раньше. При динамической типизации язык разбирается сам и не мешает - писать быстрее, но баг может вылезти уже у пользователя.

Высоко- и низкоуровневые

Высокоуровневые языки прячут детали работы памяти и железа, берут рутину на себя - на них думаешь про задачу, а не про процессор. Низкоуровневые дают прямой контроль над железом: можно выжать максимум, но и отвечать за всё приходится самому. Для большинства задач высокий уровень - то, что нужно.