Software is een gangbaar woord voor computerprogramma's. Naast toepassingen voor de mainframes, pc's en spelcomputers, bevatten ook apparaten als televisies, (mobiele)telefoons, auto's en allerhande machines steeds vaker software.
Software kan worden ingedeeld naar toepassingsgebied of gebruikersgroep.
Het begrip 'software' komt uit het Engels, en is de tegenhanger van hardware ('tastbare' apparatuur).
Het onderscheid tussen hardware en software werd al gebruikt voordat de computer bestond, al worden de termen in die zin niet vaak gebruikt. Een radiotoestel is hardware, het radioprogramma is software. Een grammofoon is hardware, de plaat is software. Hardware kan niet zonder software.
Systeemsoftware wordt ook wel een besturingssysteem genoemd, met als bekende voorbeelden Windows, Macintosh en Unix. Dit zijn alle programma's die nodig zijn voor het functioneren van het systeem, bijvoorbeeld programma's om bestanden te kopiëren, te verwijderen, mappen aan te maken en de inhoud van een bestandssysteem zichtbaar te maken.
Er zijn verschillende soorten software:
Het wetenschappelijk veld dat zich bezighoudt met softwareontwikkeling wordt software engineering genoemd. Software engineering is een vakgebied binnen de informatica. Er zijn bedrijven gespecialiseerd in de ontwikkeling van software(pakketten). Dit kan software zijn voor algemeen gebruik (te gebruiken door iedereen met een computer) of specifiek ontwikkelde software voor een bedrijf, organisatie of instelling.
Het (laten) ontwikkelen van software is niet goedkoop aangezien er in het programmeerwerk erg veel tijd gaat zitten. Veel software ontwikkelaars werken daarom met standaard software componenten, best-of-breed libraries en frameworks en integreren standaard softwareprogramma's om het werk (het wiel hoeft maar 1 keer uitgevonden te worden) en de kosten beheersbaar te houden. Voorbeelden van grote bedrijven die zich bezighouden met softwareontwikkeling zijn o.a. Ordina, Exact en Quintor.
Het ontwikkelen van software is het totale proces van het schrijven van software. De onderstaande stappen zullen niet voor ieder te ontwikkelen programma gebruikelijk zijn maar gelden veelal voor het ontwikkelen van uitgebreide pakketten.
Stappen in het ontwikkelproces: