rozdział I - wstęp

rozdział II - charakterystyka języków programowania

rozdział III - podsumowanie

Rozdział I - Wstęp

Historia języków programowania rozpoczyna się w epoce taśm perforowanych i komputera Eniac. Jednak w tym opracowaniu analiza tego zagadnienia oparta będzie o języki programowania używane na komputerach osobistych. Wśród nich najstarszym językiem programowania jest Fortran. Język ten był wielokrotnie udoskonalany, stąd jego wersje: Fortran II, Fortran IV, Fortran 77 i ostatnio Fortran 90. Jest on do dziś niezwykle popularny wśród fizyków. Jednocześnie jest językiem wyjątkowo źle skonstruowanym. Za językiem Fortran przemawia olbrzymia ilość gotowych procedur numerycznych - w tym języku programy są pisane już od ponad 30 lat . Określająca go norma ANSI 3.9 powstała w 1966 roku. Przekonanie o jego szczególnej przydatności w rozwiązywaniu problemów numerycznych wynika z istnienia bardzo dobrych kompilatorów tego języka. Komplementarnym do Fortranu miał być Basic - prosty język do nauki programowania. Basic został zastosowany w pierwszych komputerach domowych, takich jak Spectrum czy Commodore C64, jako podstawowy środek porozumiewania się z maszyną. Odmiana Visual Basic jest lansowana przez firmę Microsoft jako łatwy i szybki sposób na tworzenie aplikacji w systemie operacyjnym tej firmy. Z założenia Basic był językiem nieefektywnym w obliczeniach, lecz znacznie wygodniejszym dla programistów, zwłaszcza początkujących. Fortran miał służyć do poważnych obliczeń - Basic to pisania krótkich, klikunastolinijkowych, programików. Pierwszym językiem o solidnych podstawach teoretycznych miał być Algol. Algol się jednak nie przyjął, chociaż właśnie od niego wywodzi się większość współczesnych języków programowania.

Język Pascal został stworzony jako język dydaktyczny, gdyż Basic nie pozwalał na programowanie strukturalne i łatwe operowanie na dynamicznych strukturach . W praktyce stał się językiem do wszystkiego i do dzisiaj jest jednym z najbardziej lubianych, choć ma wiele ograniczeń tylko po to, aby początkujący programista uniknął pewnych typowych błędów.

Programowanie strukturalne, które zrewolucjonizowało tworzenie oprogramowania, opiera się na bardzo prostej zasadzie: dziel i rządź. Duży problem rozbija się na kilka mniejszych. Te rozbija się na jeszcze mniejsze. I tak dalej. Zaletą programowania strukturalnego jest możliwość tworzenia programu zespołowo: każdy konkretny programista dostaje pewną część zadania do rozwiązania. Standardowy język Pascal nie wspiera jednak programowania obiektowego. Istnieją różne dialekty, w tym obiektowo zorientowane, ale są one nieprzenośne. W praktyce oznacza to, że np. ucząc się Delphi, wiążemy się z jedną firmą i jednym typem komputera. Tym samym jest prawdopodobne, że napisany przez nas program nie będzie poprawnie pracował po kilkunastu latach czy też na innej platformie (tj. kiedy stare komputery będą zastępowane nowymi).

Język Pascal ogranicza inwencję programisty i brak w nim standaryzacji procesu łączenia z bibliotekami. Piszącemu program wolno tylko to, co kompilator uzna za bezpieczne. W praktyce "zwykły" Pascal jest zbyt krępujący. Brak możliwości dołączania bibliotek uniemożliwia korzystanie z gotowych procedur, o ile nie są one dostępne w formie tekstu źródłowego. Konkurencyjnym w stosunku do Pascala językiem programowania był język C. Jest to język bardzo prosty w konstrukcji, niezbyt łatwy w użyciu, niezbyt teoretycznie konsekwentny w składni, lecz bardzo praktyczny. Jest podstawowym językiem programowania w systemie Unix od lat siedemdziesiątych. W nim jest napisane jądro systemu Linux. Także firma Microsoft uważa język C za fundament dla swojego systemu Windows. Obecnie jest jednak już nieco przestarzały.

Język C ewoluował w język C++, nazywany językiem programowania lat dziewięćdziesiątych. Język C++ jest językiem służącym do programowania obiektowego. Co ciekawe, rozbudowane C++ jest językiem znacznie łatwiejszym w użyciu niż "czyste" C i pozwala łatwo, po jedynie drobnych i automatycznych modyfikacjach, adaptować kod źródłowy pierwotnie napisany w Fortranie, Algolu czy Pascalu. Naturalne jest więc przechodzenie w ośrodkach naukowych zajmujących się fizyką z języka Fortran na C++ jako na de facto język standardowy, jak to np. ma miejsce w CERN. Pewnym zagrożeniem dla języka C++ może być, podobny do niego, język Java. Przewaga Javy nad C++ leży w lepszym podejściu do programowania współbieżnego. Java powstała niedawno, nic więc dziwnego, że udało się jej autorom stworzyć język XXI wieku. Jedynym problemem, jaki jest związany z językiem Java, jest polityka licencyjna firmy Sun, będącej formalnie właścicielem tego języka - cokolwiek by to mogło oznaczać. Istnieje wiele innych języków programowania, takich jak Prolog, Oberon, Python, Forth czy Ada, których nie będę przedstawiać. Liczbę języków programowania oceniano na ponad 200 już 20 lat temu i nie istnieje żadna przeszkoda, aby nie powstawały ciągle nowe.

Język programowania to inaczej język opisu algorytmów przeznaczonych do wykonywania na komputerze. Językiem programowania nazywa się maszynowo-ukierunkowanym (język niskiego poziomu), gdy odzwierciedla listę rozkazów komputera ( asembler), a maszynowo-niezależnym ( język wysokiego poziomu), gdy nie jest związany z określonym typem komputera (komputer wymaga wyposażenia go w translator określonego językiem programowania). Ze względu na sposób przedstawienia algorytmu obliczeniowego rozróżnia się: język programowania imperatywnego, funkcyjnego i język programowania w logice. Języki programowania imperatywne (np. Pascal, C, Modula, Cobol) charakteryzuje użycie instrukcji, w przypadku języka niskiego poziomu zwanych rozkazami, jako jednostek wykonawczych. Wyrażają one czynności składające się na wykonanie programu. Języki programowania funkcyjne (np. Lisp, Hope) są systemami notacyjnymi dla wyrażania funkcji, umożliwiającymi obliczanie ich wartości. Przedstawiana funkcja jest wyrażeniem zbudowanym z wyrażeń przyjętych za pierwotne poprzez stosowanie specyficznych dla danego języka operatorów, np. pozycji, wskazania argumentów i in. Języki programowania w logice (np. Prolog) są systemami notacyjnymi do zapisywania relacji i formuł logicznych. Wykonanie programu przebiega jako proces weryfikacji prawdziwości określonej formuły lub relacji.

Gdy język programowania pozwala na tworzenie pewnych jednostek (zw. obiektami), wiązanie ich w różne struktury oraz dokonywanie na nich innych, specyficznych dla danego języka, operacji - to mówi się o języku programowania obiektowego (np. Smalltalk, Simula, Loglan, C++). Obiektami mogą być ciągi instrukcji (zw. wtedy współprogramami), grupy danych, struktury graficzne wyświetlane na monitorze (np. okienka) i inne. Ze względu na sposób komunikacji z komputerem języki programowania dzieli się na niekonwersacyjne (większość), w których cały program wprowadza się do komputera przed rozpoczęciem jego wykonywania, oraz konwersacyjne (np. Basic), w których wprowadza się określony zwrot językowy (instrukcję lub pytanie) i w zależności od reakcji komputera wykonuje się kolejny krok itd.

Języki programowania dzieli się przede wszystkim pod względem stopnia zaawansowania:

  • Języki pierwszej generacji - są to języki maszynowe, czyli języki procesorów. Instrukcje są w nich zapisywane w postaci liczb binarnych.

    Przykładowy kod programu:
    111010100000000000001111111111111111100010011101100000000010100000001

  • Języki drugiej generacji - języki symboliczne, asemblery. Języki niskiego poziomu, pod względem składni tożsame z maszynowymi, z tą różnicą że zamiast liczb używa się tu łatwiejszych do zapamiętania mnemoników.

    Przykładowy kod programu:
    jmp ffff:0
    mov ax, bx
    add ax, 1

    Należy dodać, iż pod względem znaczenia kod ten jest jednoznaczny z kodem binarnym przedstawionym w poprzednim punkcie (tylko dla procesorów z grupy 80x86).

  • Języki trzeciej generacji - języki wysokiego poziomu, proceduralne (imperatywne). W językach tych jedna instrukcja jest tłumaczona na kilka instrukcji procesora, najczęściej od 5 do 10. Pierwszym językiem tego typu był ALGOL. Do tej grupy należą między innymi: FORTH, BASIC - języki niestrukturalne, Pascal, C, FORTRAN - języki strukturalne, C++, Java - języki zorientowane obiektowo.

    Przykładowy kod:
    if(!x)
    {
    printf("Nie wolno dzielić przez zero\n");
    return 1;
    }

  • Języki czwartej generacji - języki bardzo wysokiego poziomu, nieproceduralne (deklaratywne). Korzystając z tych języków programista skupia się na problemie, a nie na sposobie jego rozwiązania (języki zorientowane problemowo, ang. task oriented languages). Syntaktyka wielu języków czwartej generacji przypomina składnię języka naturalnego. Są one często używane do dostępu do baz danych. Przykładem języka z tej grupy jest: SQL.

    Przykładowy kod:
    SELECT Nazwa FROM "Faktura.db" WHERE Cena > 1000

  • Języki piątej generacji - języki sztucznej inteligencji, języki systemów ekspertowych. Języki najbardziej zbliżone do języka naturalnego. Przykładem języka piątej generacji jest PROLOG.