Лекция 1. Технологии и языки программирования - osleek/IFST GitHub Wiki
Что это такое?
Среды разработки
- Microsoft Visual Studio
- Qt Creator
- Eclipse
- Code::Blocks
- CLion
- PhpStorm
- PyCharm
- IntelliJ IDEA
- NetBeans
- Xcode
- Goland
Компиляторы
- GCC / G++
- Linux ICC
- Clang
- QCC
Редакторы кода
- Atom
- Visual Studio Code
- Kate
- Vim
- GNU Emacs
- Sublime Text 3
Языки программирования
- Java
- C
- C++
- C#
- PHP
- Python
- JavaScript
- TypeScript
- Go
- Kotlin
- Rust
Система управления базами данных (СУБД)
- Oracle
- Microsoft SQL Server
- MySQL
- Microsoft Access
- PostgreSQL
- SQLite
- Mongo DB
Архитектура современных программных приложений
Model-View-Controller — шаблон в разработке пользовательского интерфейса (Модель-Представление-Контроллер). Концепция MVC была описана Трюгве Реенскаугом в 1978 году.
graph LR
Controller -.-> Model
View -.-> Model
Слой | Функции | Используемые технологии и языки |
---|---|---|
Представление (View) | Отображение данных, обработка событий пользовательского интерфейса, обслуживание запросов HTTP | HTML+CSS+JS UI-библиотеки для различных платформ (WinForms, WPF, QT) |
Модель (Model) | Обращение к базе данных, обмен сообщениями, управление транзакциями | СУБД (Oracle, Microsoft SQL Server, MySQL, Microsoft Access PostgreSQL, SQLite) |
Контроллер (Controller) | Бизнес логика приложения | С/С++, С#, Java, PHP, JS |
Рейтинг популярности языков программирования
Индекс TIOBE специализируется на оценке и отслеживании качества программного обеспечения. TIOBE — индекс, который считает количество поисковых запросов о языках.
Aug 24 | Aug 23 | Change | Programming Language | Ratings | Chance |
---|---|---|---|---|---|
1 | 1 | Python | 18.04% | +4.71% | |
2 | 3 | ⯅ | C++ | 10.04% | -0.59% |
3 | 2 | ⯆ | C | 9.17% | -2.24% |
4 | 4 | Java | 9.16% | -1.16% | |
5 | 5 | C# | 6.39% | -0.65% | |
6 | 6 | JavaScript | 3.91% | +0.62% | |
7 | 8 | ⯅ | SQL | 2.21% | +0.68% |
8 | 7 | ⯆ | Visual Basic | 2.18% | -0.45% |
9 | 12 | ⯅ | Go | 2.03% | +0.87% |
10 | 14 | ⯅⯅ | Fortran | 1.79% | +0.75% |
Python
Плюсы
- Интуитивно простое чтение и написание, прост в изучении.
- Простая интеграция с веб-службами.
- Обширная нативная библиотека и упрощенный экспорт со встроенным диспетчером пакетов Python (pip).
- Может масштабировать даже самые сложные приложения.
- Идеально подходит для создания прототипов и быстрого тестирования идей.
Минусы
- Интерпретируемый язык. Построчное выполнение кода снижает скорость выполнения программы.
- Большая нагрузка на память. Производительность Python требует компромисса — повышенного потребления системных ресурсов.
- Не подходит для разработки мобильных и фронтэнд приложений.
- Плохо развитое взаимодействие с базами данных.
- Возможны ошибки выполнения (Runtime Error), связанные с динамическим изменением типа данных переменной.
- Не поддерживает многопоточность из-за встроенного механизма глобальной блокировки интерпретатора (GIL, Global Interpreter Lock).
Области применения
Веб-разработка, десктопные графические интерфейсы, бизнес-приложения, машинное обучение (ML) и глубокое обучение (DL), наука о данных (Data science), искусственный интеллект (AI), игры, анализ и визуализация данных. 2D-изображения и 3D-анимации (Blender, Inkscape и Autodesk). Видеоигры (Civilization IV, Vegas Trike и Toontown). Вычислительные приложения (FreeCAD и Abacus), веб-сайты (YouTube, Quora, Pinterest и Instagram).
С/С++
Плюсы
- Достижима максимально возможная производительность на конкретной платформе, сравнимая с ассемблером
- Универсальность. Возможна реализация любых задач, решаемых узко-специализированными языками.
- Наличие компиляторов под все известные аппаратные платформы (от 8-битных AVR до многоядерных ARM)
- Работает близко к системному оборудованию и предлагает низкий уровень абстракции.
- Поддержка многопоточности на уровне языка (начиная с C++11)
- Практически полное отсутствие альтернатив для встроенных систем.
- Богатая библиотека классов.
Минусы
- Не поддерживает пространство имен программ [C].
- Нет сборки мусора [C/C++].
- Нет строгой проверки типов [C].
- Проблемы с переполнением буфера и повреждением памяти [C/C++].
Области применения
Настольные приложения и ПО, мобильные приложения, игровые движки и игры, VR, робототехника, cloud computing, веб-приложения. На С++ пишут операционные системы, разнообразные прикладные программы, драйверы устройств, приложения для встраиваемых систем и игры. На C написаны операционные системы, приложения реального времени. Также его используют в качестве промежуточного при компиляции более высокоуровневых языков.
Java
Плюсы
- Независимость от платформы (благодаря прослойке JVM) и объектно-ориентированное программирование.
- Изобилие библиотек с открытым исходным кодом.
- Автоматическое выделение памяти и сборка мусора.
- Система распределения стека.
- Высокая безопасность благодаря исключению явного указателя и включению менеджера безопасности, ответственного за определение доступа к классам.
- Идеально подходит для распределенных вычислений.
- Предлагает множество API-интерфейсов для выполнения различных задач, таких как подключение к базе данных, работа в сети, утилиты и синтаксический анализ XML.
- Поддерживает многопоточность.
Минусы
- Отсутствие шаблонов ограничивает создание качественных структур данных.
- Ресурсоемкое управление памятью.
- Медленнее, чем языки программирования, скомпилированные в собственном коде, такие как C и C++.
Области применения
Веб-сервисы, мобильная разработка (Android), кроссплатформенное ПО для настольных ПК, геймдев. На Java написаны: RuneScape, Yahoo, Amazon, eBay, LinkedIn. Java используют в своем технологическом стеке такие компании, как Amazon, Adobe, Flipkart и Instagram. Google создала на основе Java превосходную среду для Android-разработки — Android Studio.
JavaScript
Плюсы
- Язык прост в освоении и реализации.
- Не требует компиляции и может работать сразу в браузере на стороне клиента.
- Снижает нагрузку на сервер веб-сайта, так как работает на стороне клиента.
- Регулярные обновления через спецификацию ECMAScript (ES).
- Отсутствие альтернатив для фронтенда.
Минусы
- Веб-браузеры могут отключать выполнение кода JavaScript.
- Может интерпретироваться по-разному разными браузерами, что затрудняет написание кросс-браузерного кода.
- Нет встроенной функции для выполнения клонирования или эквивалентного метода.
- Разрешает только одиночное наследование.
Области применения
Фронтенд, бэкенд (Node.js), мобильные приложения (React Native), игры. Google Maps и веб-клиент Gmail используют JavaScript.
РНР
Плюсы
- Простота разработки и возможность интеграции со многими различными инструментами.
- Гибкость в подключении к базам данных.
- Обилие мощных фреймворков.
- Поддерживает объектно-ориентированные и функциональные парадигмы программирования.
Минусы
- Разработка веб-сайтов полностью на PHP происходит медленнее по сравнению с использованием других вариантов.
- Не подходит для больших приложений.
- Недостатки с точки зрения безопасности.
- Плохая обработка ошибок.
- Не может поддерживать большое количество приложений.
Области применения
Бекэнд
C#
Плюсы
- Прост в освоении.
- Мультипарадигменный объектно-ориентированный язык поддерживает универсальный, императивный, функциональный и декларативный стили программирования.
- Полностью интегрирован с библиотеками .NET.
- Идеально подходит для всех типов разработки под Windows.
- Богатый набор библиотечных функций и типов данных.
- Поддерживает безопасность типов.
- Быстрое время компиляции и выполнения.
Минусы
- Требует наличия CLR.
- Разрешает указатели в «небезопасных» блоках.
- Почти все переменные являются ссылками, а освобождение памяти осуществляется с помощью сборщика мусора.
- Предлагает меньшую гибкость, чем C++.
- Устранение ошибок требует серьезного опыта и знаний.
Области применения
Разработка игр (Unity), десктопные приложения (Microsoft, Windows), веб-сервисы и приложения. Используется такими ведущими IT-компаниями, как Microsoft, Stack Overflow, Accenture и Alibaba Travels.
Assembly language
Плюсы
- Возможность максимально полного использования всех особенностей аппаратной платформы позволяет, теоретически, писать самый быстрый и компактный код из всех возможных для данного процессора.
- Возможность непосредственного доступа к аппаратуре, и, в частности, портам ввода-вывода, конкретным адресам памяти, регистрам процессора.
Минусы
- Сложнее читать и понимать программу, что затрудняет сопровождение программ.
- Объём текста программы по количеству команд больше.
- Растёт вероятность внесения ошибок при разработке и модификации кода, усложняется его отладка.
- Доступно меньшее количество библиотек по сравнению с современными популярными языками программирования.
- Нельзя перекомпилировать программу с автоматической оптимизацией под особенности новой целевой платформы.
- Отсутствует возможность прямой простой переносимости программ на языке ассемблера на компьютеры с другой архитектурой и системой команд.
Области применения
Драйверы устройств, компьютерные игры, загрузочные секторы, встроенное программное обеспечение, программы для микроконтроллеров и процессоров с ограниченными ресурсами, вирусы, программные защиты.
Почему С/С++?
- За счет своей универсальности языки C и C++ подходят для решения любых задач, которые зачастую принято решать с помощью узко-специализированных языков.
- Максимально достижимая производительность в ресурсоемких вычислениях, научных рассчетах, поддержка многопоточности на уровне языка и библиотек (OpenMP, TBB).
- Возможность использования внешних сверхпараллельных устройств (например GPU) для решения задач массового параллелизма (OpenCL, CUDA, SYCL)
- Отсутствие альтернатив языку C в разработке встроенных устройств, рынок которых в разы превосходит рынок Desktop- и мобильных систем.
- Подавляющее число современных языков являются C-подобными, соответственно, освоив синтаксис C, проще изучать другие языки программирования.
Стандарты языка
C11 или ISO/IEC 9899:2018 C ++ 20 является версией стандарта ISO / IEC 14882
Редактор или IDE?
IDE (Integrated Development Environment)
IDE (Integrated Development Environment) – интегрированная среда разработки, которая используется для создания программного обеспечения.
IDE:
- Текстовый редактор
- Компилятор либо интерпретатор
- Средства автоматизации сборки
- Отладчик
- Дизайнер интерфейсов
Редактор кода + Компилятор
Редактор кода — текстовый редактор для создания и редактирования исходного кода программ.
Редактор кода:
- Подсветка синтаксиса
- Автоматические отступы
- Автодополнение
- Разделение рабочей области
- Внешний вид
- Плагины
- Система контроля версий
- Консоль
- Дебаггер
Компилятор — программа, переводящая написанный на языке программирования текст в набор машинных кодов.
Выбор среды разработки
Название | Разработчик | Платформа | Языки | Компилятор |
---|---|---|---|---|
CLion | JetBrains | Windows/Linux/MacOS | C, C++, Objective C, Kotlin, Python, Swift,Fortan, JavaScript, CSS | IDE |
Microsoft Visual Studio | Microsoft | Windows/MacOS | AJX, ASP.NET, DHTML,JavaScript, VisualBasic,Visual C#, Visual C++,Visual F#, XAML | IDE |
Eclipse Foundation | Eclipse Foundation | Windows/Linux/MacOS | C, C++, Java, Perl, PHP,Python, Ruby | IDE |
NetBeans | Oracle | Windows/Linux/MacOS/BSD | C, C++, C++ 11, Fortran,HTML 5, Java, PHP | IDE |
Code::Blocks | The Code::Blocks team | Windows/Linux/MacOS | C, C++, Fortran | IDE |
Qt Creator | Qt DevelopmentFrameworks | Windows/LinusMacOS | C, C++, JavaScript, QML | IDE |
Visual Studio Code,Kate Vim, Sublime Text | Windows/Linux/MacOS | GCC/G++,Linux ICC,CLang QCC,и т. д. |
Жизненный цикл ПО
- Постановка задачи
- Создание алгоритма
- Написание программного кода
- Отладка и тестирование
- Сопровождение ПО
Жизненный цикл программы — это весь период её разработки и эксплуатации, начиная с момента возникновения замысла и заканчивая прекращением всех видов её использования.
Процессы жизненного цикла, определяемые международным стандартом ISO 12207
Основные процессы:
- Приобретение
- Поставка
- Разработка
- Эксплуатация
- Сопровождение
Вспомогательные процессы:
- Документирование
- Управление
- Обеспечение
- Верификация
- Аттестация
- Совместная оценка
- Аудит
- Разрешение
Организационные процессы:
- Управление
- Создание инфраструктуры
- Усовершенствование
- Обучение
Алгоритм
Абу Абдуллах Мухаммад ибн Муса аль-Хорезми — один из крупнейших средневековых ученых IX века, математик, астроном, географ и историк. Термин "алгоритм" означает набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий.
Исполнитель алгоритма
Исполнитель — это некоторый объект, способный выполнять определённый набор команд.
Виды исполнителей:
- Формальный
- Неформальный
Характеристики:
- Круг решаемых задач
- Среда исполнителя
- Режимы работы
Свойства алгоритма
- Дискретность — путь решения задачи разделён на отдельные шаги.
- Понятность — команды понимаются однозначно.
- Определённость — чёткое выполнение команд.
- Результативность — обеспечивается получение ожидаемого результата.
- Массовость — решение задач с различными исходными данными.
Способы записи алгоритмов
Виды записи:
- Словесный — обычный разговорный язык.
- Блок-схема — геометрические фигуры для отображения логики алгоритма.
graph TD
A[Начало] --> B[Ввод значений X и Y]
B --> C{X = Y?}
C -- Да --> D[НОД = X]
C -- Нет --> E{X > Y?}
E -- Да --> F[X = X - Y] --> C
E -- Нет --> G[Y = Y - X] --> C
D --> H[Конец]