Dziś Oprogramowanie to temat, który staje się coraz bardziej istotny w naszym społeczeństwie. Stało się punktem zainteresowania ludzi w każdym wieku i na całym świecie. Jej wpływ można zaobserwować w różnych obszarach życia codziennego, od polityki i ekonomii, po kulturę i rozrywkę. Oprogramowanie wywołał namiętne debaty i wygenerował różne opinie i perspektywy. W tym artykule zbadamy różne aspekty związane z Oprogramowanie, od jego powstania po dzisiejszy wpływ, a także możliwe przyszłe scenariusze, które mogą powstać w wyniku jego ewolucji.
Oprogramowanie (ang. software) – ogół informacji w postaci zestawu instrukcji, zaimplementowanych interfejsów i zintegrowanych danych przeznaczonych dla komputera do realizacji wyznaczonych celów. Celem oprogramowania jest przetwarzanie danych w wyznaczonym przez twórcę zakresie. Określenie „oprogramowanie” może funkcjonować jako synonim terminów „program komputerowy” oraz „aplikacja”, przy czym stosuje się je zazwyczaj na oznaczenie większych programów oraz ich zbiorów.
Oprogramowanie tworzą programiści w procesie programowania. Oprogramowanie jako przejaw twórczości jest chronione prawem autorskim, twórcy zezwalają na korzystanie z niego na warunkach określanych w licencji.
Oprogramowanie pisane jest zazwyczaj przy użyciu różnych języków programowania z wykorzystaniem algorytmów. Programy przekształcające oprogramowanie z postaci źródłowej na binarną to kompilatory. Niektóre rodzaje oprogramowania napisane w całości w językach interpretowanych, mogą występować tylko w jednej postaci, spełniającej zadania źródła i programu wykonywalnego.
Zarys (algorytm) tego, co byłoby pierwszym oprogramowaniem, napisała Ada Lovelace w XIX wieku dla planowanej maszyny analitycznej. Jednak ani kompletna maszyna analityczna, ani oprogramowanie do niej nie zostały opracowane.
Pierwsza teoria na temat oprogramowania (przed stworzeniem dzisiejszych komputerów) została zaproponowana przez Alana Turinga w jego eseju opublikowanym w roku 1936. Doprowadziło to ostatecznie do powstania bliźniaczych akademickich dziedzin informatyki i inżynierii oprogramowania, które zarówno badają oprogramowanie, jak i jego tworzenie. Informatyka jest bardziej teoretyczna (esej Turinga jest przykładem informatyki), natomiast inżynieria oprogramowania koncentruje się na bardziej praktycznych zagadnieniach.
Przed rokiem 1946 oprogramowanie jakie teraz znamy, czyli programy przechowywane w pamięci komputerów cyfrowych – jeszcze nie istniało.
Narzędzie programistyczne to również oprogramowanie w postaci programów lub aplikacji internetowych, które twórcy oprogramowania (zwani również programistami lub inżynierami oprogramowania) używają do tworzenia, debugowania, utrzymywania (tj. ulepszania lub naprawiania). Oprogramowanie jest napisane w jednym lub kilku językach programowania. Istnieje wiele języków programowania i każdy ma przynajmniej jedną implementację, z których każda składa się z własnego zestawu narzędzi programistycznych. Narzędzia te mogą być względnie samodzielnymi programami, takimi jak kompilatory, debuggery, interpretery, łączniki i edytory tekstu, które można łączyć w celu wykonania zadania. Mogą one również tworzyć zintegrowane środowisko programistyczne (IDE), które łączy w sobie wiele funkcji takich samodzielnych narzędzi.
Użytkownicy często postrzegają istotę oprogramowania inaczej niż programiści. Osoby korzystające z nowoczesnych komputerów ogólnego przeznaczenia (w przeciwieństwie do systemów wbudowanych, komputerów analogowych i superkomputerów) zazwyczaj widzą trzy warstwy oprogramowania wykonującego różnorodne zadania: platformę, aplikację i oprogramowanie użytkownika.
Platforma obejmuje oprogramowanie sprzętowe, sterowniki urządzeń, system operacyjny i zazwyczaj graficzny interfejs użytkownika, który pozwala użytkownikowi na interakcję z komputerem i jego urządzeniami peryferyjnymi.
Systemy do projektowania dostosowane do specyficznych potrzeb użytkowników. Oprogramowanie użytkownika obejmuje szablony arkuszy kalkulacyjnych i szablony edytorów tekstów. Nawet filtry poczty e-mail są rodzajem oprogramowania użytkownika. Użytkownicy tworzą to oprogramowanie samodzielnie. W zależności od tego, w jakim stopniu oprogramowanie napisane przez użytkownika zostało zintegrowane z domyślnymi pakietami aplikacji, wielu użytkowników może nie być świadomych rozróżnienia między oryginalnymi pakietami, a tym, co zostało dodane przez współpracowników.
Oprogramowanie komputerowe musi zostać „załadowane” do pamięci komputera (np. dysku twardego lub pamięci). Proces ten obejmuje przekazywanie instrukcji z oprogramowania aplikacyjnego, poprzez oprogramowanie systemowe, do sprzętu, który ostatecznie otrzymuje instrukcję jako kod maszynowy. Każda instrukcja powoduje, że komputer przeprowadza operację przesuwając dane, wykonując obliczenia lub zmieniając sterowanie instrukcjami.
Przesyłanie danych odbywa się zwykle z jednego miejsca w pamięci do drugiego. Czasami obejmuje to przenoszenie danych między pamięcią a rejestrami, które umożliwiają szybki dostęp do danych w CPU. Przenoszenie danych, zwłaszcza dużych ich ilości, może być kosztowne. Czasami unika się tego, wykorzystując zamiast tego „wskaźniki” do danych. Obliczenia obejmują proste operacje, takie jak zwiększanie wartości zmiennego elementu danych. Bardziej skomplikowane obliczenia mogą obejmować wiele operacji.
Jakość oprogramowania jest bardzo istotna, szczególnie w przypadku oprogramowania komercyjnego i systemowego, takiego jak Microsoft Office, Microsoft Windows i Linux. Wadliwość oprogramowania może na przykład doprowadzić do awarii komputerowej.
Oprogramowanie często jest również ofiarą tak zwanego starzenia się, postępującej degradacji wydajności wynikającej z kombinacji niewidocznych błędów. Wiele błędów jest odkrywanych i eliminowanych (debugowanych) podczas testowania oprogramowania. Jednak testowanie oprogramowania rzadko – jeśli w ogóle – eliminuje każdy błąd. Niektórzy programiści mówią, że „każdy przetestowany program ma co najmniej jeszcze jeden błąd” (prawo Lubarskiego).
Oprogramowanie można testować za pomocą testów jednostkowych, testów regresji i innych metod, które są wykonywane ręcznie lub najczęściej automatycznie, ponieważ ilość kodu do przetestowania może być dość duża. Na przykład NASA ma wyjątkowo rygorystyczne procedury testowania oprogramowania dla wielu systemów operacyjnych i funkcji komunikacyjnych. Wiele operacji opartych na NASA wchodzi w interakcje i identyfikuje się nawzajem za pomocą programów sterujących. Dzięki temu wiele osób pracujących w NASA może sprawdzać i oceniać ogólnie systemy funkcjonalne. Programy zawierające oprogramowanie sterujące pozwalają na łatwiejsze współdziałanie inżynierii sprzętowej i operacji systemowych.
Oprogramowanie dzieli się ze względu na przeznaczenie: