1.09M
Категория: ПрограммированиеПрограммирование

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

1.

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

2.

Концепции Языков Программирования
Понимание языков программирования начинается с их классификации по
уровню абстракции, принципам решения задач (парадигмам) и моделям
исполнения.

3.

Эволюция Абстракции
Историческое развитие языков программирования демонстрирует
устойчивое стремление к повышению человеческой производительности за
счет увеличения уровня абстракции от аппаратного обеспечения.

4.

Уровни (поколения)

5.

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

6.

Ассемблер
Представляет низкий уровень
абстракции, используя
мнемонические команды, которые
напрямую соответствуют машинному
коду. Хотя это значительно удобнее
машинного кода, он все еще требует
детального понимания архитектуры
процессора.

7.

Языки высокого уровня
(C, FORTRAN, COBOL)
ориентированы на человека и
описывают как выполнить задачу.
Они являются основой для
процедурного и объектноориентированного
программирования

8.

Декларативные
Характеризуются высокой степенью
абстракции и являются
преимущественно декларативными.
Примеры включают SQL, MATLAB, и
R. Разработчик описывает что нужно
получить, а не как это реализовать,
перекладывая процесс оптимизации
на среду исполнения.

9.

ИИ
Представляют собой высочайший уровень абстракции и основаны на логике
и ограничениях, как, например, Prolog и Mercury. Они чаще всего
применяются в области искусственного интеллекта и экспертных систем.

10.

Общие тенденции
Императивного подхода (пошаговое описание алгоритма) к декларативному
подходу (описание желаемого результата). Понимание этой эволюции
критически важно, поскольку современные языки, такие как Python или
JavaScript, часто объединяют обе парадигмы, позволяя разработчику
использовать императивные конструкции (циклы, функции) или
декларативные подходы (например, при работе с данными или
функциональным программированием)
numbers = [1, 2, 3, 4, 5, 6]
total = 0
for num in numbers:
if num % 2 == 0:
total += num ** 2
print(total)
numbers = [1, 2, 3, 4, 5, 6]
total = sum(num ** 2 for num in numbers if num % 2 == 0)
print(total)

11.

Системы Типизации. Статика vs. Динамика

12.

Статическая типизация
Типы переменных определяются и проверяются на этапе компиляции (Java,
C++, Go). Это позволяет обнаруживать ошибки на ранней стадии и обычно
приводит к более высокой производительности.

13.

Динамическая типизация
Типы связаны со значениями, а не с переменными, и проверяются во время
выполнения (Python, JavaScript). Это обеспечивает гибкость и ускоряет
начальную разработку.

14.

Модели Исполнения

15.

Компилируемые языки
Исходный код преобразуется в машинный код перед выполнением (C, C++,
Go, Rust), обеспечивая максимальную скорость.

16.

Интерпретируемые языки
Код исполняется построчно

17.

Виртуальные машины (VM)
Языки компилируются в промежуточный байт-код (Java Virtual Machine —
JVM). Этот подход обеспечивает кросс-платформенность. Современные VM
используют JIT-компиляцию (Just-In-Time) для оптимизации байт-кода во
время выполнения, что повышает итоговую скорость.

18.

Рейтинги Популярности и Востребованность
Лидеры рынка: Python, C, Java и C++ традиционно занимают верхние
строчки рейтингов TIOBE и PYPL, что подтверждает их фундаментальное
значение. Например, C/C++ занимают вторую и четвертую позицию в PYPL,
а Java — вторую.
Растущие игроки: Такие языки, как Go, Rust, и Kotlin, показывают уверенный
подъем. Go занимает 8-е место в TIOBE, а Rust — 14-е, с более высокой 8-й
позицией в PYPL.

19.

Python
Data Science, AI/ML, Web Backend,
Скриптинг
Динамическая, строгая типизация.
Структурный, ООП.
Исключительная читаемость и простой
синтаксис. Обширная библиотека и сильное
сообщество. Высокая медианная зарплата.
Ограничение производительности. Низкая
скорость выполнения.

20.

Java
Enterprise-приложения, Android Mobile, Big Data
Статическая, строгая типизация. Работа на JVM
(байт-код). ООП. Долгосрочная стабильность.
Зрелая, огромная экосистема и инструментарий.
Надежность и стабильность для крупных
корпоративных систем. Кросс-платформенность.
Многословность кода. Высокий расход памяти
JVM. Долгая кривая обучения по сравнению с
Python.

21.

C#
.NET Backend, Unity (Игры), Windows-приложения
Статическая типизация. Работа на CLR
(виртуальная машина Microsoft). Структурный,
ООП.
Глубокая интеграция с платформой Microsoft
(.NET). Удобство разработки в IDE, высокая
производительность. Современный синтаксис
Историческая привязка к экосистеме Microsoft,
хотя.NET Core значительно улучшил кроссплатформенность.

22.

C
Операционные системы, Встраиваемые системы,
Драйверы
Процедурный. Низкий уровень абстракции. Слабая
типизация.
Максимальная скорость исполнения. Лежит в основе
большинства современных систем. Фундаментален для
понимания архитектуры
Ручное управление памятью (высокий риск утечек и
ошибок). Слабая типизация может привести к
неопределенному поведению

23.

C++
Игровые движки, Высокие вычисления (HPC), Системное
ПО
Мультипарадигменный. Расширение C. ООП.
Абсолютный контроль над аппаратными ресурсами.
Максимальная производительность. Огромное
сообщество и инструментарий.
Чрезвычайно высокий порог входа. Сложность отладки
ошибок, связанных с памятью (в том числе
многопоточностью).

24.

Go (Golang)
Микросервисы, Высоконагруженный Backend, Сетевое
ПО
Разработан Google. Статическая типизация. Встроенная
конкурентность (горутины). Компилируемый.
Исключительная скорость компиляции. Простота
синтаксиса и освоения. Высокая производительность и
масштабируемость. Высокая зарплата.
Минималистичность синтаксиса накладывает
ограничения на реализацию некоторых ООП-паттернов.

25.

Rust
Системное ПО, WebAssembly, Замена C/C++
Компилируемый. Уникальная система владения
(Ownership). Гарантированная безопасность памяти.
Высочайшая скорость и безопасность без сборщика
мусора. Предотвращение большинства ошибок времени
выполнения на этапе компиляции. Самая высокая
медианная зарплата.
Очень крутая и сложная кривая обучения (порог входа).
Медленная компиляция по сравнению с Go.

26.

JavaScript (JS)
Frontend (браузер), Backend (Node.js), Мобильные (React
Native)
Динамическая типизация. ООП (прототипное).
Интерпретируемый.
Универсальность (Full Stack). Самое большое
сообщество разработчиков. Быстрый старт.
Высокая вероятность Runtime ошибок в крупных
проектах. Ненадежность в масштабе без использования
статических линтеров.

27.

TypeScript (TS)
Крупные JS-проекты, Корпоративный Web
Статическая типизация поверх JS. Транспиляция в JS.
Значительно повышает надежность, поддерживаемость и
читаемость кода. Улучшенная IDE-поддержка и рефакторинг
Требует дополнительной стадии сборки (транспиляции).
Сообщество менее массовое, чем у чистого JS

28.

PHP
Веб-Backend, CMS (WordPress, Drupal)
Структурный, ООП. Легкость развертывания.
Лёгкость изучения, быстрая разработка вебприложений. Очень большое количество готовых
сценариев и фреймворков. Стабильность.
Проблемы масштабируемости в старых версиях
(хотя современные PHP 7/8 лучше). Склонность к
ошибкам новичков из-за низкого порога входа.

29.

Kotlin
Android Mobile, JVM Backend
Статическая типизация. Полная совместимость с Java.
Улучшенная обработка null.
Лаконичность (меньше кода, чем Java). Современный
синтаксис. Активное развитие, поддерживаемое Google
Может уступать оптимизированной Java в выполнении
некоторых тяжелых вычислений

30.

Swift
iOS/macOS, Разработка приложений для Apple
Статическая типизация. Разработан Apple.
Акцент на безопасности и скорости.
Оптимизация под Apple-аппаратное
обеспечение. Чистый и современный дизайн.
Высокая производительность.
Ограничение экосистемой Apple.

31.

Dart
Кросс-платформа (Flutter)
Статическая типизация. JIT/AOT
компиляция.
Единая кодовая база для 6 платформ
(iOS, Android, Web, Desktop). Отличная
производительность UI.
Относительно молодая экосистема.

32.

SQL
Управление реляционными БД
Язык 4-го поколения. Декларативный.
Простота использования и гибкость.
Фундаментальная технология для работы с
данными. Кросс-платформенность.
Проблемы с производительностью и
масштабируемостью при работе с очень
большими объемами данных

33.

Ruby
Web Backend (Ruby on Rails), Скриптинг
Динамическая типизация, чистая ООПфилософия.
Высокая продуктивность. Элегантный,
интуитивно понятный синтаксис.
Низкая скорость выполнения. Снижение
популярности по сравнению с Python/Go.

34.

Развитие
Сравнение языков, работающих на одной платформе (например, Java и
Kotlin на JVM), демонстрирует стремление к эволюции без потери
стабильности. Kotlin полностью совместим с Java, но при этом решает одну
из ключевых проблем Java — NullPointerExceptions — через явное
управление значениями null.
Этот пример показывает, что индустрия ищет способы повышения
безопасности и лаконичности кода, используя преимущества зрелых,
надежных платформ, таких как JVM.
English     Русский Правила