Программное обеспечение
Програ́ммное обеспе́че́ние (ПО, программная система; англ. software), набор программ, баз данных, файлов, а также описывающих их документов, составляющих систему, для решения группы связанных задач на одном или нескольких взаимодействующих компьютерах.
Термин впервые применил математик из Принстонского университета Дж. Тьюки в 1958 г. В компьютерном сленге часто используется слово «софт» (англ. soft – мягкий, гибкий).
В отличие от программы, в состав ПО обычно включаются все информационные материалы, необходимые для его функционирования, понимания деталей его работы, поддержки работоспособности и дальнейшего развития при возникновении изменений или дополнений в постановке решаемых задач. В компьютерных системах ПО дополняет аппаратное обеспечение (вычислительные устройства и различное оборудование). Изучением характеристик, правил функционирования, а также методов создания и развития ПО занимается программная инженерия.
По типу решаемых задач и виду программ различают прикладное, системное и встроенное ПО. К прикладному относят любое ПО, решающее конкретные практические задачи и имеющее интерфейс для взаимодействия с пользователями: веб-браузеры, текстовые и графические редакторы, электронные таблицы, системы подготовки презентаций, информационные системы для бизнеса, игровое ПО, системы документооборота, управления технологическими процессами, вычислительного моделирования и др. Системное ПО служит для разработки программ или предоставляет среду для работы других программ, решая задачи эффективного выделения им вычислительных ресурсов и доступа к различным устройствам. К системному ПО относят: операционные системы; системы управления базами данных; драйверы различных устройств; реализации телекоммуникационных протоколов; ПО промежуточного слоя, служащее для построения распределённых компьютерных систем и решающее задачи обеспечения взаимодействия между их составляющими и управления ресурсами поверх операционных систем отдельных компьютеров; защитное и антивирусное ПО; широко используемые библиотеки программ, а также интерпретаторы, компиляторы, среды разработки программ (современное название инструментов разработки, позволяющих объединять другие инструменты для выполнения задачи), инструменты тестирования программ, средства контроля версий и др. Системное ПО, необходимое для разработки программ, но ненужное для их дальнейшего функционирования, часто называют инструментальным. Встроенное ПО размещено в каком-либо устройстве или системе (например, станок, телевизор или автомобиль) и играет важную роль в решении задач этой системы, не взаимодействуя с её пользователями непосредственно (такое взаимодействие осуществляется только через интерфейс самой системы).
Современное ПО часто имеет очень высокую сложность. На обычном персональном компьютере работает ПО общим размером в сотни миллионов строк кода, написанное на различных языках программирования. Это обусловлено потребностями пользователей в решении большого количества разнообразных задач в рамках одной компьютерной системы и технологиями создания программ, позволяющими строить огромные иерархические программные системы из небольших компонентов. Сложность ПО приводит к возникновению многочисленных ошибок в силу ограниченной способности разработчиков адекватно воспринимать сложные системы, анализировать их поведение и предсказывать возможные сценарии их развития. Поэтому устранение всех ошибок в практически значимом ПО слишком трудоёмко, вместо этого при его создании обычно пытаются достичь максимально возможного при заданных затратах уровня качества, как можно больше снизить вероятность проявления ошибок и ущерба от них. Разные виды ПО имеют различные приемлемые уровни качества, часто регулируемые специализированными стандартами в тех областях, где ошибка в работе компьютерной системы может привести к значительному ущербу.
Широкая востребованность различных видов ПО привела к развитию производства ПО в достаточно мощную отрасль, в рамках которой отдельные компании, за исключением наиболее крупных, специализируются на создании ПО лишь одного или нескольких видов. Отрасль на протяжении нескольких десятков лет является одной из наиболее быстро растущих. Значительную часть доходов отрасли приносят различные услуги по настройке и сопровождению ПО, притом что само ПО иногда распространяется бесплатно.
Аналогом ПО в докомпьютерную эпоху можно считать перфокарты, описывающие узор ткани для программируемой ткацкой машины Жаккарда, а также применявшиеся для записи данных в машинах-табуляторах в конце 19 в. сменные барабаны с записью различных мелодий для музыкальных шкатулок и шарманок. ПО как хранимые программы появляются после работ Дж. фон Неймана, опиравшегося на идеи А. Тьюринга, К. Цузе, а также П. Эккерта и Дж. Мокли. Первые программы были вычислительными. Операционные системы появились как средства автоматизации пакетного выполнения заданий (GM-NAA I/O от General Motors для компьютера IBM 704, 1956) и оптимизации использования вычислительных ресурсов за счёт многозадачности (Master Control Program – MCP от Burroughs, 1961). Языки программирования высокого уровня потребовали создания компиляторов; первым компилятором считается A-0, созданный Г. Хоппер (США) для машины UNIVAC I (1951–1952). Примерно в это же время аналогичное ПО создавалось и в СССР. Быстрое расширение области использования компьютеров привело к появлению многочисленных видов прикладного ПО. Первая компьютерная игра OXO, реализующая крестики-нолики, была создана в 1952 г. для машины EDSAC, существовавшей в единственном экземпляре в Кембриджском университете. Первым встроенным ПО можно считать систему управления для встроенного компьютера D-17B американской межконтинентальной баллистической ракеты «Минитмен-I» (1961).