ithr-school

Код

Что такое язык программирования?

Язык программирования

  • искусственный язык
  • текстовый язык
  • состоит из синтаксиса и семантики

Синтаксис

  • набор формализированных правил по составлению текстов на языке
  • правила называются грамматиками и сильно ограничивают языки программирования

Семантика

  • описывает смыслы, которые содержат в себе разные части языка
  • описывает взаимодействия между разными частями языка
a = 2
b = 3
print(a + b)

Синтаксис - как написать так, чтобы компьютер тебя понял

Семантика - смысл того, что ты написал

Шла Саша по шоссе

Что такое код?

Просто текст

Как код хранится?

Системы контроля версий

git, mercurial, CVS

Коммит (commit)

  • фиксация изменений в одном или нескольких файлах
  •  🚑 Fix critical bug with empty email on registration
  • коммиты идут последовательно, образуя цепочку изменений

Ветка (branch)

  • Ответвление от какого-то коммита
  • Нужно для параллельной работы
  • Помогает избежать наслоения похожих коммитов
  • Позволяет делать код-ревью

Как и где выполняются программы?

Машинный код

  • простейшие операции, которые понимает компьютер (процессор)
  • переложи байты, сложи два числа, сравни два числа
  • совсем (или почти) нечитаем

Транспиляция

перевод из текста в машинный код

На примере Python

Так и живём

Классификация языков программирования

Низкоуровневые vs. Высокоуровневые

Низкоуровневые

  • максимально близки к машинному коду
  • Ассемблер (Assembler), Fort
  • иногда включают также C, как представителя низкоуровневых

Сферы

  • Если очень мало ресурсов, а надо делать очень много
  • У программы основная задача — работать на низком уровне.

Высокоуровневые

  • Все остальные 🤷
  • Работают с высокими абстракциями
  • Нужны везде, где работаем не с байтами
  • Java, C#, Python, JS

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

Интерпретируемые

  • Читает код
  • Переводит его в промежуточный  байт-код
  • Выполняет в машинном коде шаг за шагом
  • Программа, которая эта делает, называется интерпретатор

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

  • Однажды читает код
  • Компилирует его в машинный код (исполняемый файл)
  • Исполняемый файл запускается без дополнительных программ
  • Программа, которая компилирует, называется компилятор

По типизации

Динамическая vs Статическая

Динамические

  • Язык сам пытается угадать что за тип у переменной
  • Одна переменная может менять свой тип 
a = "abc"
print(type(a))  # string
a = 1  # wo error
print(type(a))  # int
a + "abc"  # error (runtime)

Статическая

  • Язык ждёт от тебя типа
  • Переменная не может менять тип
  • Можно быть уверенным, что однажды не сложишь строку с числом
a: str = "abc"
print(type(a))  # string
a = 1  # error
print(type(a))  # int
a + 2  # error (pre-run time)

Динамическая vs Статическая

Строгая vs Нестрогая

"2" + 2  # "22"
2 + "2"  # 4

Императивные vs Декларативные vs Функциональные

Императивная

  • От "приказывать"
  • Набор последовательных команд, можно ходить куда угодно и что угодно
  • Все популярные языки программирования

Декларативная

  • От "описание"
  • Описывает состояние, к которому нужно привести систему
  • Языки описания инфраструктур, девопсы все, data-driven структуры

Функциональные

  • От "лямбда-исчисление"
  • Строгая математическая 
  • Языки описания инфраструктур, девопсы все, data-driven структуры

Императивные vs Декларативные vs Функциональные

Рейтинг языков программирования

Мобильная разработка

iOS

  • Swift и objectiveC
  • Много гайдлайнов, строгие правила
  • Разработчиков не очень много
  • Нужен макбук

Android

  • Java и Kotlin
  • Правила нестрогие
  • Разработчиков больше
  • Большая неконсистентность устройств

Межплатформы

  • C# (Xamarin), JS (React Mobile)
  • Любой фронтендер справится
  • Много проблем если большое приложение
 

Низкоуровневая разработка

C/C++

  • Игры, драйверы, системы, вирусы
  • Сложный язык, разработчики часто бородатые
  • Много легаси и устаревших стандартов
  • Языки медленно развиваются

Assembler

  • Целая серия языков
  • Ну вы видели
  • Вирусы, совсем низкоуровневые системы, взлом чужих программ
  • Знание даёт супер-силу

Title Text

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi nec metus justo. Aliquam erat volutpat.

Языки программирования p1

By b0g3r

Языки программирования p1

Смотрим как работает

  • 161