Раздел описывает общие принципы создания и выполнения программ: от представления данных и организации исходного кода до компиляции, управления памятью, конкурентного выполнения и взаимодействия с операционной системой.

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

Основные направления

  • Основы программирования — переменные, типы данных, выражения, операторы, ветвления, циклы, функции и базовые способы организации вычислений.
  • Парадигмы программирования — императивное, процедурное, объектно-ориентированное, функциональное, декларативное и событийно-ориентированное программирование.
  • Системы типов — статическая и динамическая типизация, сильная и слабая типизация, вывод типов, преобразования, generics и проверка корректности операций.
  • Структуры данных языка — массивы, списки, словари, множества, структуры, классы, перечисления и другие встроенные способы представления данных.
  • Функции и области видимости — параметры, возвращаемые значения, замыкания, рекурсия, области видимости, время жизни переменных и передача данных между частями программы.
  • Модули и организация кода — пакеты, пространства имён, импорт, экспорт, разделение ответственности и формирование программных компонентов.
  • Обработка ошибок — коды возврата, исключения, специальные типы результатов, распространение ошибок, восстановление после сбоев и обработка нештатных состояний.
  • Компиляция — преобразование исходного кода в машинный код или промежуточное представление, этапы компиляции, оптимизация, сборка и связывание.
  • Интерпретация — выполнение исходного или промежуточного кода интерпретатором, динамическая загрузка и особенности интерпретируемых языков.
  • Среды выполнения — виртуальные машины, runtime-библиотеки, управление программой во время выполнения и взаимодействие с операционной системой.
  • Управление памятью — stack, heap, выделение и освобождение памяти, ссылки, указатели, владение данными и автоматическая сборка мусора.
  • Конкурентность — потоки, задачи, goroutines, процессы, синхронизация, блокировки, атомарные операции, состояния гонки и взаимные блокировки.
  • Асинхронное программирование — callbacks, promises, futures, async/await, event loop, неблокирующий ввод-вывод и управление асинхронными операциями.
  • Ввод и вывод — работа с файлами, потоками, терминалом, стандартными потоками, буферизацией и внешними устройствами.
  • Сетевое программирование — сокеты, TCP, UDP, HTTP-клиенты, HTTP-серверы, обработка соединений и сетевых ошибок.
  • Сериализация данных — преобразование объектов и структур данных в JSON, XML, Protocol Buffers и другие форматы обмена.
  • Управление зависимостями — пакеты, модули, версии, lock-файлы, репозитории, разрешение зависимостей и публикация библиотек.
  • Конфигурация программ — аргументы командной строки, переменные окружения, конфигурационные файлы, значения по умолчанию и проверка конфигурации.
  • Тестирование программ — модульные, интеграционные, функциональные и системные тесты, тестовые двойники, генерация данных и измерение покрытия.
  • Отладка — breakpoints, пошаговое выполнение, исследование состояния программы, stack trace, core dump и анализ ошибок выполнения.
  • Профилирование — измерение времени выполнения, потребления процессора и памяти, поиск узких мест и анализ поведения программы под нагрузкой.
  • Производительность — вычислительная стоимость операций, управление выделениями памяти, кеширование, конкурентное выполнение и оптимизация критических участков.
  • Инструменты разработки — компиляторы, интерпретаторы, линтеры, форматтеры, анализаторы кода, отладчики, профилировщики и средства сборки.
  • Стандартные библиотеки — базовые средства языков для работы с коллекциями, файлами, сетью, временем, конкурентностью, кодировками и системными функциями.
  • Языки программирования — особенности синтаксиса, модели типов, управления памятью, конкурентности и экосистем конкретных языков.
  • Командные приложения — разработка CLI-программ, обработка аргументов, интерактивный ввод, exit codes и интеграция с командной оболочкой.
  • Системное программирование — взаимодействие с системными вызовами, памятью, процессами, файловыми дескрипторами, сигналами и ресурсами операционной системы.
  • Прикладное программирование — создание серверных, пользовательских, автоматизационных и интеграционных приложений.

Языки и технологии

  • Go — компилируемый язык со статической типизацией, встроенной поддержкой конкурентности и развитой стандартной библиотекой для сетевых и инфраструктурных приложений.
  • Python — динамический язык для автоматизации, обработки данных, прототипирования, backend-разработки и создания вспомогательных инструментов.
  • Java — язык и платформа для корпоративных, серверных и распределённых приложений, выполняемых в виртуальной машине JVM.
  • JavaScript — язык браузеров и серверной среды Node.js, основанный на событийной модели и асинхронном выполнении.
  • TypeScript — расширение JavaScript со статической системой типов и инструментами для разработки крупных приложений.
  • Bash и командные оболочки — языки управления командами, системной автоматизации и объединения инструментов операционной системы.
  • Rust — системный язык со статической типизацией, контролем владения памятью и безопасной моделью конкурентности.

Основные вопросы раздела

Материалы раздела должны помогать отвечать на следующие вопросы:

  • Как исходный код превращается в выполняющуюся программу?
  • Чем компиляция отличается от интерпретации?
  • Какую роль выполняет среда выполнения?
  • Как язык представляет и проверяет типы данных?
  • Где хранятся переменные и объекты программы?
  • Как управляется время жизни данных?
  • Чем автоматическая сборка мусора отличается от ручного управления памятью?
  • Как программа взаимодействует с операционной системой?
  • Чем поток отличается от процесса, задачи и goroutine?
  • Как возникают состояния гонки и взаимные блокировки?
  • Чем асинхронное выполнение отличается от параллельного?
  • Как организовать обработку ошибок без потери контекста?
  • Как управлять зависимостями и версиями библиотек?
  • Как тестировать отдельные компоненты и программу целиком?
  • Как найти причину ошибки, утечки памяти или высокой нагрузки?
  • Как выбрать язык и среду выполнения для конкретной задачи?
  • Какие свойства языка влияют на надёжность, производительность и сопровождение программы?

Границы раздела

Раздел посвящён общим механизмам программирования, особенностям языков и поведению программ во время выполнения.

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

в этой папке 0 элементов