Софтуерът (на английски: software — програмно осигуряване) е съвкупността от цялата информация от инструкции и данни, необходими за работата на всяка електронноизчислителна машина. Употребява се главно в сферата на информационните технологии.
Обикновено инструкциите се задават като съвкупност от алгоритми, групирани като програми с различно предназначение. Освен самите алгоритми, за изпълнението на програмите са необходими и начални данни. Резултатът от действието на даден алгоритъм може да служи като начални данни за стартирането на друг и т.н., обединявайки програмите в едно. В този смисъл все повече се налага и терминът софтуер, който исторически се е наложил като антоним на хардуер - физическата част на компютърните системи. Все пак границата между софтуер и хардуер се размива, когато се отчете, че програмното осигуряване има все пак някакви физически носители, от които изчислителната машина чете програмите. Тези носители, както и инструкциите за работа с програмите и тяхната поддръжка (документация), са спомагателни елементи от софтуера.
В масовите електронноизчислителни машини (компютри) голяма част от софтуера е разположена на външна памет и може лесно да бъде променяна от потребителите според нуждите им. Инструкциите в централните процесори и специализираните интегрални схеми обаче се задават при програмирането им, и не могат да бъдат променяни директно от потребителя.
По принцип хардуерът е неизползваем без програмно осигуряване или софтуер. Най-ясно разликата между софтуер и хардуер се обяснява така: Хардуерът е всяко едно видимо и осезаемо устройство, както самият компютър, така и всяко еднопериферно устройство. Софтуерът е само видим, но не и осезаем, когато работи — това са именно програмите.
Със създаването на алгоритми и писането на програми се занимават програмистите. Според нивото на действие на написаните от тях инструкции има език за програмиране на ниско ниво, на средно ниво и на високо ниво. Езиците на високо ниво позволяват лесно редактиране от програмист, и това се нарича изходен код (програмен код). За да се превърне в изпълними инструкции от машината, той се компилира (превежда) към обектен код или машинен език.
Езикът за програмиране от високо ниво може да бъде и скриптов език. Когато е написан на скриптов език, се компилира при изпълнението на програмния код (интерпретиране). Скриптовете обикновено са малки до средно големи програми, които изпълняват потребителски команди или вършат действия в определен ред. Пример за това са JavaScript, Perl, ти си ел скрипт или PHP. Програмите, писани на скриптов език, са по-бавни при стартиране (защото всеки път програмният код трябва да се преведе на машинен език), но обикновено по-лесно и бързо се разработват и тестват.
Видове софтуер Схема на взаимодействието между системен и приложен софтуер СистеменОсновна статия: Системен софтуер Към системния софтуер се отнасят програми, изпълняващи системни функции и грижещи се за компютърния хардуер и връзката между него и потребителя. Системният софтуер обикновено е обединен в пакет от взаимодействащи си програми, наричан операционна система. Предназначението на системния софтуер е да освободи авторите на приложни програми от пряко взаимодействие с компютърния хардуер, който е много разнороден. Той дава достъп хардуера, който е унифициран и независим от начина на работа на конкретните устройства.
Приложен Основна статия: Приложен софтуер Потребителски приложения и програми, работещи като краен продукт и тясно свързващи потребителя със софтуер от по-ниско ниво. Това са най-известните сред потребителите програми, с който те имат пряк контакт и използват най-често. Пример за такъв софтуер са компютърните игри, текстовите редактори, уеб браузърите и т.н.