Лекция 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,и т. д.

Жизненный цикл ПО

  1. Постановка задачи
  2. Создание алгоритма
  3. Написание программного кода
  4. Отладка и тестирование
  5. Сопровождение ПО

Жизненный цикл программы — это весь период её разработки и эксплуатации, начиная с момента возникновения замысла и заканчивая прекращением всех видов её использования.


Процессы жизненного цикла, определяемые международным стандартом 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[Конец]