Слайд 1. Языки программирования
- Как устроены языки, на которых человек ставит задачу вычислительной машине: история, классификация и современная практика
Доклад: Здравствуйте! Тема нашей презентации — языки программирования. Мы разберём, что вообще представляет собой язык программирования как формальная система, как эти языки появились и почему их так много. Разговор пойдёт не о синтаксисе конкретного языка, а о принципах, общих для всех.
Слайд 2. Содержание
- Введение
- Что такое язык программирования
- Устройство языка
- История языков программирования
- Первые машины и машинный код
- Пионеры программирования
- Уровни абстракции
- Классификация языков программирования
- Парадигмы программирования
- Компиляция и интерпретация
- От исходного кода к работающей программе
- Типизация данных
- Создатели языков высокого уровня
- Python: язык-универсал
- Популярность языков программирования
- Сравнение популярных языков
- Языки веб- и мобильной разработки
- Как выбрать первый язык
- Тенденции развития
- Выводы
- Список литературы
Доклад: Вот план нашего выступления. Сначала мы определим само понятие и разберём устройство языка, затем пройдём по истории — от машинных кодов до современных средств. После этого рассмотрим классификации, парадигмы и способы выполнения программ, познакомимся с создателями ключевых языков и закончим практическими рекомендациями по выбору первого языка.
Слайд 3. Введение
- Язык программирования — основной инструмент, с помощью которого человек описывает алгоритм и получает работающую программу.
- За историю вычислительной техники создано более 700 языков, но в промышленной разработке применяется около двадцати пяти.
- Выбор языка определяет скорость разработки, надёжность программы и стоимость её сопровождения на годы вперёд.
- Понимание принципов устройства языков важнее знания синтаксиса одного из них: оно позволяет быстро осваивать новые инструменты.
Доклад: Начнём с того, зачем вообще нужен этот разговор. Язык программирования — главный рабочий инструмент разработчика, и от его выбора зависит не только скорость написания программы, но и стоимость её поддержки в течение многих лет. Языков создано более семисот, однако в реальной промышленной практике используется около двадцати пяти. Именно поэтому важно понимать принципы, а не заучивать синтаксис одного инструмента.
Слайд 4. Что такое язык программирования
- Язык программирования — формальная знаковая система для записи алгоритмов в виде, однозначно понятном вычислительной машине: она задаёт допустимые символы, строгие правила записи команд и точный смысл каждой конструкции.
- 700+ — языков создано — за восемь десятилетий вычислительной техники
- 25 — языков в массовой практике — на них написана основная часть программ
- 1957 — первый промышленный транслятор — компилятор языка Фортран
Доклад: Дадим строгое определение. Язык программирования — это формальная знаковая система, которая позволяет записать алгоритм так, чтобы машина поняла его однозначно. Обратите внимание на цифры справа: за восемьдесят лет создано более семисот языков, массово применяется около двадцати пяти, а первый промышленный транслятор — компилятор Фортрана — появился в тысяча девятьсот пятьдесят седьмом году.
Слайд 5. Устройство языка
- Алфавит и лексика — допустимые символы, ключевые слова и правила образования имён
- Синтаксис — правила сборки корректных конструкций из слов языка
- Семантика — точный смысл конструкции: что именно выполнит машина
- Среда и библиотеки — транслятор, отладчик и готовые модули для типовых задач
Доклад: Любой язык, независимо от его назначения, устроен из одних и тех же составных частей. Алфавит и лексика задают, какие символы и слова вообще допустимы. Синтаксис определяет, как из этих слов собираются правильные конструкции. Семантика отвечает за смысл: что именно машина сделает, встретив ту или иную запись. А среда и библиотеки превращают язык в рабочий инструмент.
Слайд 6. История языков программирования
- За восемьдесят лет языки прошли путь от записи двоичных чисел до описания задачи почти обычными фразами.
- Каждое новое поколение снимало с программиста часть рутины и передавало её транслятору.
- 1843 — первая программа для аналитической машины
- 1949 — Планкалкюль, язык высокого уровня
- 1957 — Фортран для научных расчётов
- 1972 — язык Си и системное программирование
- 1991 — Python и ставка на читаемость
- 1995 — Java и переносимость программ
Доклад: Проследим историю по ключевым датам. В тысяча восемьсот сорок третьем году появилась первая программа — для аналитической машины Бэббиджа. В сороковых годах Конрад Цузе создал Планкалкюль, первый язык высокого уровня. Дальше идут Фортран для научных расчётов, язык Си для системных задач и, наконец, Python и Java, определившие облик современной разработки.
Слайд 7. Первые машины и машинный код
- Первые электронные вычислительные машины настраивали переключателями и кабелями на коммутационных панелях: подготовка одной задачи занимала несколько дней.
- Машинный код — последовательность двоичных команд конкретного процессора, где ошибка в одном разряде меняет смысл всей программы.
- Ассемблер заменил двоичные коды мнемоническими обозначениями команд и стал первым шагом к удобной записи алгоритмов.
- Именно трудоёмкость такой работы породила спрос на языки высокого уровня.
Доклад: На фотографии — машина ЭНИАК конца сороковых годов, одна из первых электронных вычислительных машин. Обратите внимание: программирование здесь означало переключение тумблеров и перекоммутацию кабелей, и подготовка одной задачи занимала дни. Работа в машинных кодах была настолько трудоёмкой и опасной с точки зрения ошибок, что именно она породила спрос на языки высокого уровня.
Слайд 8. Пионеры программирования
- Ада Лавлейс, 1815–1852, Составила первую в истории программу — для аналитической машины Бэббиджа
- Конрад Цузе, 1910–1995, Создал Планкалкюль — первый язык программирования высокого уровня
- Грейс Хоппер, 1906–1992, Разработала первый компилятор и стояла у истоков языка Кобол
- Джон Бэкус, 1924–2007, Руководил созданием Фортрана и предложил строгую форму записи синтаксиса
Доклад: Эти четыре человека стоят у истоков программирования. Ада Лавлейс составила первую программу задолго до появления вычислительных машин. Конрад Цузе создал первый язык высокого уровня. Грейс Хоппер разработала первый компилятор и участвовала в создании Кобола. Джон Бэкус руководил проектом Фортрана и предложил строгую форму записи синтаксиса, которой пользуются до сих пор.
Слайд 9. Уровни абстракции
- Языки различаются тем, насколько далеко запись программы отстоит от команд процессора.
- Чем выше уровень, тем короче текст программы и тем меньше автор думает о памяти и регистрах.
- Плата за удобство — потеря части контроля над ресурсами машины.
- Крупный проект обычно сочетает сразу несколько уровней.
- Предметно-ориентированные языки — описание задачи в терминах области
- Языки высокого уровня — операторы, функции и типы данных
- Ассемблер — мнемоники команд, один к одному с машинными
- Машинный код — двоичные команды конкретного процессора
Доклад: Языки удобно расположить по уровням абстракции. Внизу — машинный код, двоичные команды конкретного процессора. Выше — ассемблер, где команды получили короткие мнемонические имена. Ещё выше — языки высокого уровня с операторами, функциями и типами данных. На вершине — предметно-ориентированные языки, где задача описывается в терминах самой области. Чем выше уровень, тем короче текст, но тем меньше контроля над ресурсами.
Слайд 10. Классификация языков программирования
- Единой классификации не существует: один и тот же язык попадает сразу в несколько групп по разным основаниям деления.
- низкого уровня
- высокого уровня
- сверхвысокого уровня
- компилируемые
- интерпретируемые
- с промежуточным кодом
- универсальные
- системные
- прикладные
- учебные
Доклад: Единой классификации языков не существует, и это нормально: один и тот же язык попадает в разные группы по разным основаниям. По уровню различают языки низкого, высокого и сверхвысокого уровня. По способу выполнения — компилируемые, интерпретируемые и работающие через промежуточный код. По назначению — универсальные, системные, прикладные и учебные.
Слайд 11. Парадигмы программирования
- Императивная — программа задаёт последовательность действий, меняющих состояние памяти
- Объектно-ориентированная — задача разбивается на объекты с собственными данными и поведением
- Функциональная — вычисление строится как применение функций без изменяемого состояния
- Логическая — автор описывает факты и правила, а вывод решения выполняет сама машина
- Многопарадигменная — язык допускает несколько стилей сразу, как C++ или Python
Доклад: Парадигма — это стиль мышления, который язык поддерживает и поощряет. Императивный подход описывает последовательность действий. Объектно-ориентированный делит задачу на объекты со своими данными и поведением. Функциональный строит вычисление как применение функций. Логический описывает факты и правила, оставляя вывод машине. Большинство современных языков многопарадигменны и позволяют сочетать стили.
Слайд 12. Компиляция и интерпретация
- Способ перевода исходного текста в действия машины определяет и скорость программы, и удобство поиска ошибок. Сравним два основных подхода.
- Весь текст переводится в машинный код заранее
- Готовая программа работает без транслятора
- Скорость выполнения максимальная
- Ошибки в типах видны до запуска
- Примеры: Си, C++, Rust
- Команды разбираются и выполняются по ходу работы
- Нужна установленная среда исполнения
- Скорость ниже, зато программа переносима
- Часть ошибок проявляется только при запуске
- Примеры: Python, JavaScript, PHP
Доклад: Здесь сравниваются два способа перевода исходного текста в действия машины. При компиляции весь текст переводится в машинный код заранее — программа работает быстро и не требует транслятора при запуске. При интерпретации команды разбираются по ходу выполнения — это медленнее, зато код легко переносится между платформами. Оба подхода живы, потому что закрывают разные потребности.
Слайд 13. От исходного кода к работающей программе
- Между текстом программы и её выполнением стоит цепочка обязательных преобразований.
- Каждый этап отвечает за свой класс ошибок — от опечатки до неверного поведения.
- Написание кода — запись алгоритма по правилам языка
- Разбор текста — проверка лексики и синтаксиса
- Трансляция — перевод в машинный или промежуточный код
- Компоновка — сборка модулей и библиотек в единый файл
- Отладка — поиск и устранение ошибок выполнения
Доклад: Путь от текста программы до её выполнения — это цепочка обязательных преобразований. Сначала разработчик пишет код, затем транслятор проверяет лексику и синтаксис, потом переводит текст в машинный или промежуточный код. Компоновщик собирает модули и библиотеки в единый файл, и только после отладки и тестирования программа считается готовой. На каждом этапе выявляется свой класс ошибок.
Слайд 14. Типизация данных
- Тип данных задаёт множество допустимых значений и разрешённых над ними операций.
- Две независимые оси — момент проверки и строгость преобразований — дают четыре сочетания.
- Строгая статическая — типы объявлены в коде, несовпадение видно до запуска; Java, Rust
- Строгая динамическая — тип хранится в значении, сложение числа со строкой запрещено; Python
- Слабая статическая — типы объявлены, но приводятся друг к другу почти свободно; Си
- Слабая динамическая — преобразования выполняются молча, ошибки всплывают позже; JavaScript
Доклад: Типизация — одна из самых важных характеристик языка. Матрица показывает два независимых признака: когда проверяются типы — до запуска или во время работы, и насколько строго язык относится к преобразованиям. Строгая статическая типизация даёт максимум проверок до запуска, слабая динамическая — максимум свободы и максимум скрытых ошибок. Java и Rust на одном полюсе, JavaScript — на другом.
Слайд 15. Создатели языков высокого уровня
- Никлаус Вирт, 1934–2024, Автор языка Паскаль и школы структурного программирования
- Деннис Ритчи, 1941–2011, Создал язык Си, на котором написаны операционные системы
- Бьёрн Страуструп, р. 1950, Разработал C++, добавив к языку Си объектно-ориентированные средства
- Джеймс Гослинг, р. 1955, Руководил созданием языка Java и виртуальной машины для него
Доклад: Перед вами создатели языков, которыми пользуются до сих пор. Никлаус Вирт — автор Паскаля и школы структурного программирования, на его учебниках выросло несколько поколений. Деннис Ритчи создал язык Си, на котором написаны операционные системы. Бьёрн Страуструп добавил к Си объектно-ориентированные средства и получил C++. Джеймс Гослинг руководил созданием Java.
Слайд 16. Python: язык-универсал
- Гвидо ван Россум, р. 1956, Нидерландский программист, автор языка Python
- Первая версия языка опубликована в 1991 году; замысел автора — предельно читаемый код, пригодный и для обучения, и для крупных проектов.
- Отступы вместо фигурных скобок сделали единообразное оформление обязательным, а чужие программы — понятными с первого взгляда.
- Строгая динамическая типизация и автоматическое управление памятью заметно снижают порог входа для начинающего.
- Обширные библиотеки численных расчётов и машинного обучения сделали язык стандартом в анализе данных.
- Плата за удобство — невысокая скорость выполнения, поэтому критичные участки выносят в модули на языке Си.
Доклад: Отдельно остановимся на Python — сегодня это самый массовый язык. Его автор, нидерландский программист Гвидо ван Россум, опубликовал первую версию в тысяча девятьсот девяносто первом году, поставив во главу угла читаемость кода. Отступы вместо скобок, динамическая строгая типизация и огромный набор библиотек сделали язык стандартом в анализе данных. Расплата — невысокая скорость выполнения.
Слайд 17. Популярность языков программирования
- Лидерство Python объясняется применением сразу в трёх областях: анализ данных, автоматизация и веб-разработка.
- Доли оценены по числу открытых репозиториев и вакансий и меняются в пределах нескольких процентов ежегодно.
Доклад: График показывает примерное распределение популярности языков. Python уверенно лидирует, потому что закрывает сразу три направления: анализ данных, автоматизацию и веб-разработку. Java и JavaScript держатся на втором и третьем местах за счёт корпоративных систем и браузерных интерфейсов. Доли рассчитаны по открытым репозиториям и вакансиям и год от года меняются в пределах нескольких процентов.
Слайд 18. Сравнение популярных языков
- Универсального языка нет: каждый закрывает свой круг задач.
- Год создания объясняет и синтаксис языка, и накопленный объём библиотек.
Доклад: Таблица сводит воедино главные характеристики пяти языков. Хорошо видно, что каждый из них занял свою нишу: Си и C++ работают там, где важна скорость и близость к оборудованию, Java — в корпоративных и банковских системах, Python — в расчётах и автоматизации, JavaScript — в интерфейсах сайтов. Универсального языка нет и, вероятно, не будет.
Слайд 19. Языки веб- и мобильной разработки
- В браузере исполняется единственный язык — JavaScript, и все прочие средства при сборке проекта сводятся к нему.
- Серверную часть сайтов пишут на PHP, Python, Java и Go: выбор диктуют нагрузка и опыт команды.
- Мобильные приложения для Android создают на Kotlin и Java, для iOS — на Swift.
- Кроссплатформенные среды позволяют одним кодом покрыть обе мобильные системы, жертвуя частью производительности.
Доклад: Веб- и мобильная разработка — самая массовая область применения языков сегодня. В браузере исполняется только JavaScript, и любые другие средства при сборке проекта сводятся к нему. Серверную часть пишут на PHP, Python, Java или Go. Мобильные приложения для Android создают на Kotlin и Java, для операционной системы iOS — на Swift. Кроссплатформенные среды экономят время, но отнимают часть производительности.
Слайд 20. Как выбрать первый язык
- Начинающему важна не популярность языка, а скорость получения первого работающего результата.
- Базовые понятия — переменные, ветвления, циклы и функции — почти одинаковы во всех языках.
- Сменить инструмент после первого освоенного языка значительно легче.
- Определите задачу — сайт, расчёты, игры и автоматизация требуют разных инструментов
- Оцените порог входа — простой синтаксис позволяет быстрее увидеть результат
- Изучите спрос — посмотрите вакансии в своём регионе и отрасли
- Оцените сообщество — обилие учебников и готовых библиотек экономит месяцы
- Напишите первый проект — язык осваивается только собственной практикой
Доклад: Практический вопрос, который волнует каждого начинающего: с чего начать. Алгоритм простой. Сначала определитесь с задачей — сайт, расчёты и игры требуют разных инструментов. Затем оцените порог входа и посмотрите на спрос в вакансиях вашего региона. Обязательно учтите размер сообщества: учебники и готовые библиотеки экономят месяцы. И главное — сразу напишите первый небольшой проект.
Слайд 21. Тенденции развития
- Безопасность памяти выходит на первый план: Rust теснит язык Си в критичных системах
- Статические проверки типов приходят в динамические языки
- Растёт доля предметно-ориентированных языков для запросов и настройки инфраструктуры
- Среды разработки дополняются помощниками на основе искусственного интеллекта
- Языки сближаются, заимствуя друг у друга удачные конструкции
Доклад: Куда движутся языки программирования. Во-первых, на первый план вышла безопасность работы с памятью — здесь Rust постепенно теснит язык Си. Во-вторых, статические проверки типов приходят в динамические языки. В-третьих, растёт доля узкоспециализированных языков. И наконец, среды разработки дополняются помощниками на основе искусственного интеллекта, а сами языки заимствуют друг у друга удачные решения.
Слайд 22. Выводы
- Язык программирования — формальная система записи алгоритмов, задающая и синтаксис, и точный смысл каждой конструкции.
- История языков есть последовательное повышение уровня абстракции: от двоичных кодов к описанию задачи в терминах предметной области.
- Классификация по уровню, способу выполнения и парадигме объясняет сильные и слабые стороны конкретного инструмента.
- Универсального языка не существует: выбор определяют задача, требования к скорости и состав команды.
- Освоение общих принципов устройства языков позволяет специалисту менять инструмент без потери квалификации.
Доклад: Подведём итоги. Язык программирования — это формальная система записи алгоритмов, задающая и форму, и точный смысл конструкций. Вся история языков — это последовательное повышение уровня абстракции. Классификации по уровню, способу выполнения и парадигме объясняют сильные и слабые стороны каждого инструмента. Универсального языка не существует, поэтому специалисту важно владеть общими принципами, а не одним синтаксисом.
Слайд 23. Список литературы
- Ахо А., Лам М., Сети Р., Ульман Дж. Компиляторы: принципы, технологии и инструменты. — М.: Вильямс, 2018. — 1184 с.
- Вирт Н. Алгоритмы и структуры данных. — СПб.: Невский Диалект, 2008. — 352 с.
- Керниган Б., Ритчи Д. Язык программирования Си. — М.: Вильямс, 2019. — 288 с.
- Лутц М. Изучаем Python: в 2 томах. — М.: Диалектика, 2020.
- Себеста Р. Основные концепции языков программирования. — М.: Вильямс, 2001. — 672 с.
Доклад: В списке литературы — классические работы, на которые опирается доклад. Книга Себесты остаётся лучшим обзором концепций языков. «Компиляторы» Ахо и Ульмана — фундаментальный труд о трансляции. Учебники Вирта, Кернигана с Ритчи и Лутца дают практическое знакомство с Паскалем, Си и Python соответственно. Все издания доступны в вузовских библиотеках.
Слайд 24. Спасибо за внимание!
Доклад: На этом доклад завершён. Мы разобрали устройство языков программирования, их историю, классификации и практические критерии выбора. Спасибо за внимание — готов ответить на ваши вопросы.