18
Kapitoly z dějin informatiky 3 Vývoj software ve 20. století Michal Musílek Centrum talentů M&F&I, Univerzita Hradec Králové, 2010

Kapitoly z dějin informatiky 3 Vývoj software ve 20. století

Embed Size (px)

Citation preview

Kapitoly z dějin informatiky 3

Vývoj software ve 20. století

Michal Musílek

Centrum talentů M&F&I, Univerzita Hradec Králové, 2010

2

Obsah Předmluva .......................................................................................................................................................... 3

7 Vývoj programování počítačů, programovací jazyky ................................................................................. 4

7.1 Strojový kód ........................................................................................................................................... 4

7.2 Jazyk symbolických adres (assembly language) .................................................................................... 5

7.3 Vyšší programovací jazyky zrozené v 50. letech 20. století ................................................................... 6

7.4 Výběr z procedurálních programovacích jazyků 60. a 70. let 20. století ............................................... 8

7.5 Funkcionální programovací jazyky ........................................................................................................ 9

7.6 Dětské programovací jazyky ................................................................................................................ 10

7.7 Logické programovací jazyky .............................................................................................................. 11

8 Operační systémy a uživatelská rozhraní .................................................................................................. 12

8.1 Vznik operačních systémů sálových počítačů ...................................................................................... 12

8.2 Operační systém UNIX ........................................................................................................................ 13

8.3 Operační systémy unixového typu na osobních počítačích .................................................................. 14

8.4 Vývoj uživatelských rozhraní počítačů ................................................................................................ 15

8.5 Grafická uživatelská rozhraní počítačů ................................................................................................ 17

3

Předmluva

Toto vyprávění o nejzajímavějších momentech historického vývoje informatiky vzniklo jako

studijní text pro nadané zájemce o informatiku (případně výpočetní techniku či matematiku) z řad

středoškolských studentů v rámci projektu Centrum talentů MFI Pedagogické fakulty Univerzity

Hradec Králové. Stejně dobře může posloužit i jejich učitelům pro zpestření výuky informatiky.

Historie informatiky nebo, chcete-li, výpočetní techniky začíná už v době starověkých civilizací

výpočetními pomůckami (abakus, čínské počítací hůlky) a pokračuje v novověku od dob renesance

dokonalejšími mechanickými kalkulátory buď digitálními (konstrukce Shickardova, Pascalova,

Leibnizova, Colmarova, Odhnerova), nebo analogovými (logaritmické pravítko), aby v 19. století

mechanická etapa vývoje vyvrcholila velkolepými projekty jednoúčelových počítačů – diferenčních

strojů, jež dokázaly automaticky počítat a tisknout tabulky matematických funkcí, a Hollerithových

děrnoštítkových systémů, jež dokázaly zpracovávat rozsáhlé relační databáze. Těmto tématům byl

věnován první díl mého vyprávění.

Masovému rozvoji informačních technologií ve 20. století, jdoucímu ruku v ruce s prudkým

vývojem elektroniky, projevujícímu se rychlým zvyšováním výkonu počítačů při současném

zmenšování jejich rozměrů, byl zasvěcen druhý díl kapitol z dějin informatiky. Věnoval jsem jej

zcela hardware elektronických počítačů, jak číslicových, tak analogových, včetně vstupních

a výstupních (periferních) zařízení. Zmínil jsem se také o vzájemném ovlivňování výpočetní,

záznamové a sdělovací techniky, které nakonec vedlo k jejich současnému propojení.

Poslední, třetí díl publikace je věnován vývoji programovacích jazyků různého typu, operačních

systémů a uživatelských rozhraní počítačů. Na rozdíl od předchozích dvou dílů jsem zde mohl

postihnout jen některé směry vývoje, protože software je mnohem více rozrůzněný než hardware

a tak zdaleka není možné postihnout vše, co se odehrálo. Nezabýval jsem se zatím vůbec historií

aplikačního software různého typu, protože na to by plánovaný rozsah textu nemohl stačit. Cílem

bylo jen načrtnout některé hlavní „dějové linky“ a probudit v čtenářích zájem o dějiny informatiky,

do nichž historie software bezesporu patří.

Přeji vám, milí čtenáři, aby vás čtení kapitol z historie informatiky bavilo alespoň tak, jako mne

těšilo je pro vás psát.

V Hradci Králové v dubnu 2010

Michal Musílek

4

7 Vývoj programování počítačů, programovací jazyky

7.1 Strojový kód

První počítače měly velmi daleko k dnešním univerzálním nástrojům, provádějícím výpočty,

zpracovávajícím informace různých druhů a umožňujícím rychlou komunikaci prostřednictvím

světové počítačové sítě internet. První počítače prováděly skutečně „pouze“ výpočty, které předtím

ručně realizovaly týmy lidských počtářů. V angličtině se právě v tuto dobu posunul význam slova

computer od původního počtář (člověk profesionálně provádějící výpočty) k počítač (stroj, který

provádí výpočty).

První generace počítačů se programovala ručním propojováním vodičů (propojováním zdířek

spojovacími vodiči na ovládacím panelu, přepínáním přepínačů apod.), k němuž s o něco později

přidalo čtení vstupních instrukcí a dat z papírové děrné pásky. Přeprogramování počítače na jinou

úlohu byl pracný úkon, který vyžadoval trpělivost a pečlivost a souhru několika členů týmu. Kromě

programátorů, kteří vymysleli a zapsali algoritmus, byli potřeba kodéři, kteří přepsali celý program

do posloupnosti dvojkových čísel a operátoři, kteří řídili vlastní spuštění a provedení kódu. Ladění

programu bylo velmi obtížné a časově náročné, protože pro něj neexistovaly žádné pomůcky.

Odborníků s potřebným matematickým vzděláním bylo v době 2. světové války málo, muži sloužili

v armádě. Proto byly k službě u prvních počítačů ve větším počtu povolány také ženy. Záhy se to

ukázalo být velmi dobrým řešením, protože tolik potřebné přesnosti, pečlivosti a trpělivosti nutné

při programování prvních počítačů měly

ženy více než jejich mužští kolegové.

Jednou z prvních programátorek byla

Kathleen McNulty (* 1921), která

pracovala nejprve jako počtářka (computer)

na výpočtech balistických tabulek pro

armádu USA a v roce 1943 se spolu s pěti

dalšími ženami stala první programátorkou

počítače ENIAC. Možná, že je nejznámější

z týmu programátorek i proto, že se po válce

stala druhou ženou ovdovělého Johna

Mauchlyho a společně pečovali o pět dětí.

Obr. 72 Kathleen McNulty, Alyse Snyder a Sis Stump

Další nevýhodou první generace byla neexistence jednotících norem. Co počítač, to originál s jinou

sadou příkazů procesoru, s jiným strojovým kódem. Programátor musel myslet nejen na algoritmus,

ale i na uložení kódu v operační paměti, stejně jako na alokaci paměti pro všechny proměnné, pole

proměnných atd. To vše v absolutní pozici v paměti, tedy konkrétní instrukce programu (početní

operace, rozhodovací operace, skok v programu, …) měla v podstatě předem pevně dané místo

operační paměti, ve kterém byla uložena.

5

7.2 Jazyk symbolických adres (assembly language)

S rozvojem výpočetní techniky bylo brzy zřejmé, že software (strojový kód) zaostává za možnostmi

hardware a že je potřeba vymyslet novou „technologii“ programování, která by využití počítačů

nebrzdila. Prvním krokem od strojového kódu k symbolickému jazyku přístupnému člověku byla

skupina jazyků symbolických adres (JSA; angl. assembly language), které místo číselných kódů pro

jednotlivé instrukce procesoru používaly symbolické zkratky (např. ADD pro součet, JMP pro skok,

MOV pro přesun hodnoty z paměti do registru) a současně nepožadovaly absolutní alokaci paměti,

místo níž použily symbolické adresy, jejichž konkretizaci pak zařídil překladač typu assembler

(tedy „sestavovač“, program, který z programu v JSA sestaví strojový kód). Často se nesprávně

název assembler používá i pro JSA, ve skutečnosti je assembler historicky první typem překladače

programovacího jazyka, který překlad z JSA do strojového kódu provádí na několik průchodů, při

nichž postupně provede potřebnou alokaci paměti pro vlastní program i pro potřebné proměnné.

Assemblery se pro některé speciální úlohy používají i v současnosti. Např. tam, kde je nutný přímý

přístup k hardware (ovladače zařízení), vysoký výpočetní výkon, nebo řízení procesů v reálném

čase. V JSA se také psaly první operační systémy pro sálové počítače. Dalším typickým prvkem,

který usnadní programování v JSA, je zavedení pseudoinstrukcí a maker, čímž se zjednoduší zápis

opakujících se částí kódu. Jde o předstupeň plnohodnotných podprogramů.

JSA jsou tak jako strojový kód vázané na konkrétní typ, resp. konkrétní řadu procesorů. Programy

napsané v JSA pro určitý hardware nejsou buď přenositelné vůbec, nebo přenositelné jen s velkými

obtížemi na jinou hardwarovou platformu. JSA přinesly programátorům velké zjednodušení práce,

byly typickým nástrojem druhé generace počítačů, ale bylo zřejmé, že ani ony nejsou elegantním

a jednoduchým řešením zápisu algoritmů. Na cestě od stroje k člověku bylo potřeba učinit další

krok.

Obr. 73 Ukázka strojového kódu (vlevo) a JSA (vpravo) v emulátoru procesoru Intel 8086

6

7.3 Vyšší programovací jazyky zrozené v 50. letech 20. století

Třetí generaci softwaru představují obecné problémově orientované programovací jazyky. Často se

jim říká také vyšší programovací jazyky a myslí se tím, že se od nízké úrovně strojového kódu či

JSA dostali značně vysoko směrem k algoritmickému myšlení člověka plánujícího složitý výpočet.

Podobně označení „problémově orientovaný“ znamená, že programátor nemusí myslet na procesor

a jeho instrukční sadu, ale může se plně soustředit na problém, který chce vyřešit. V praxi to značí

nezávislost na konkrétním hardware, a tedy snadnou přenositelnost napsaných programů.

Takových programovacích jazyků existovala už na konci 50. let celá řada. Kdybychom se snažili

postihnout celou šíři vývoje, hrozilo by, že ztratíme potřebný nadhled. Proto se soustředíme pouze

na tři nejvýznamnější představitele vývoje, za něž považuji jazyky FORTRAN, COBOL a ALGOL.

Jazyk FORTRAN (z angl. FORmula TRANslator) vyvíjela ve firmě IBM od roku 1954 skupina,

kterou vedl John Backus (1924 – 2007). Důraz při vývoji jazyka a překladače byl kladen

na rychlost a efektivnost zejména vědecko-technických výpočtů, přenositelnost nebyl na prvním

místě, protože šlo o projekt orientovaný na sálové počítače IBM řady 700. Díky této koncepci se

FORTRAN stal jedním z nejrozšířenějších programovacích jazyků své doby. Vývoj jazyka

intenzivně pokračoval do roku 1963 (FORTRAN IV), jazyk byl později normalizován (standardy

ANSI a ISO), byly vydávány jeho nové verze a své uživatele má ještě dnes (FORTRAN 2008).

John Backus je znám také jako spolutvůrce Backus-Naurovy formy pro popis gramatik formálních

jazyků. Používá se jak pro popis gramatik programovacích jazyků, instrukčních sad, komunikačních

protokolů a dokonce i částí gramatik skutečných jazyků. Ještě před jazykem FORTRAN vyvinul

jazyk Speedcoding, který se však nerozšířil. Později spolupracoval na vývoji jazyka ALGOL a také

podnítil zájem o funkcionální programování, o němž budeme mluvit později.

Jazyk COBOL (z angl. COmmon Business Oriented Language) byl oficiálně vydán roku 1959

sdružením CODASYL, založeným z iniciativy Ministerstva obrany USA. Administrativní pokyn

vlády USA z roku 1960 pak nařídil vybavit překladačem COBOLu každý komerčně instalovaný

počítač, čímž došlo jeho k masovému rozšíření. Matkou COBOLu bývá nazývána Grace Hopper

(1906 – 1992), která stavěla na předchozích zkušenostech z práce matematičky a programátorky

ve firmě Eckert-Mauchly Corporation (výrobce počítačů BINAC a UNIVAC), pro níž a pro firmu

Remington Rand zpracovala programovací jazyky FLOW-MATIC a MATH-MATIC. Tato dáma je

autorkou první příručky počítačové terminologie a matkou myšlenky použití jednotné matematické

notace a jednoduchých anglických příkazů k sestavení zápisu programu v podobě srozumitelné

člověku i počítači. COBOL umožnil kromě vědecko-technických výpočtů také základní zpracování

databází. Po formální stránce nedosáhl přehlednosti FORTRANu či ALGOLu, ale z praktického

hlediska šlo o snadno implementovatelný a dobře použitelný programovací jazyk pro běžné rutinní

výpočty v komerční sféře.

Oba výše uvedené jazyky vznikly v USA a odtud se šířily do celého světa. Třetí – programovací

jazyk ALGOL (z angl. ALGOrithmic Language) vznikl z iniciativy evropského Odborného výboru

pro programování (GAMM), která na společném zasedání s americkou ACM (Association for

Computing Machinery) v roce 1958 vydala první verzi jazyka – ALOGOL 58. Velmi rychle byla

7

zapracována řada připomínek a vylepšení a vydána verze ALGOL 60. Významný podíl na vývoji

konečné verze ALGOL 68 měl svými pracemi, věnovanými operativní sémantice, holandský

informatik Adriaan van Wijngaarden (1916 – 1987). Jazyk ALGOL se od konce 60. let dále

nevyvíjel, nikdy nedosáhl tak masového rozšíření v praxi jako FORTRAN či COBOL, ale se stal

obecně uznávaným standardem pro publikování algoritmů v odborných časopisech a zároveň byl

východiskem a inspirací pro řadu dalších programovacích jazyků, např. Pascal, Simula 67 či Ada.

Ukázka zápisu programu v jazyce ALGOL 68. Program najde pomocí Eratosthenova síta všechna

prvočísla menší než 100 a vypíše je:

begin # Algol-68 prime number sieve, functional style #

proc error = (string s) void:

(print(( newline, " error: ", s, newline)); goto stop);

proc one to = (int n) list:

(proc f = (int m,n) list: (m>n | nil | cons(m, f(m+1,n))); f(1,n));

mode list = ref node;

mode node = struct (int h, list t);

proc cons = (int n, list l) list: heap node := (n,l);

proc hd = (list l) int: ( l is nil | error("hd nil"); skip | h of l );

proc tl = (list l) list: ( l is nil | error("tl nil"); skip | t of l );

proc show = (list l) void: ( l isnt nil | print((" ",whole(hd(l),0)));

show(tl(l)));

proc filter = (proc (int) bool p, list l) list:

if l is nil then nil

elif p(hd(l)) then cons(hd(l), filter(p,tl(l)))

else filter(p, tl(l))

fi;

proc sieve = (list l) list:

if l is nil then nil

else

proc not multiple = (int n) bool: n mod hd(l) ≠ 0;

cons(hd(l), sieve( filter( not multiple, tl(l) )))

fi;

proc primes = (int n) list: sieve( tl( one to(n) ));

show( primes(100) )

end

8

7.4 Výběr z procedurálních programovacích jazyků 60. a 70. let 20. století

V roce 1961 přinesla titulní strana časopisu „Communications of the ACM“ (Vol. 4, No. 1) seznam

73 různých programovacích jazyků a v průběhu 60. let tento počet dál prudce rostl. Proto se budeme

věnovat opět jen několika vybraným jazykům. Hlavním hlediskem pro výběr je rozšířenost jazyků

v programátorské praxi.

Velmi populárním jazykem je pro svoji jednoduchost BASIC (Bigginer’s All-purpose Symbolic

Instruction Code), který roku 1963 navrhli John Kemeny (1926 – 1992) a Thomas Kurtz (*1928)

a který zažil obrovský rozmach v 80. letech jako základní programovací nástroj na osmibitových

domácích počítačích a v současnosti zažívá comeback díky firmě Microsoft a jejím produktům

Visual Basic, MS Office (makrojazyk VBA) a MS Internet Explorer (skriptovací jazyk VB Script).

Společnou nevýhodou FORTRANu a BASICu je fakt, že nenutí

programátory k přehledným, dobře strukturovaným zápisům. Proto se i

sám tvůrce programu může s určitým časovým odstupem špatně

orientovat ve zdrojovém kódu, který vypracoval. To spolu s otázkou

přesného popisu struktury dat, která pak usnadní psaní algoritmu,

motivovalo profesora Niklause Wirtha (*1934) z Vysoké školy

technické v Curychu k vytvoření programovacího jazyka Pascal. Pro

svoji perfektní strukturovanost je Pascal ideálním jazykem pro výuku

programování na vysokoškolské úrovni. První implementaci Pascalu

realizoval Niklaus Wirth v roce 1970.

Obr. 74 Niklaus Wirth

Popularizaci jazyka prospěla levná a přitom kvalitní implementace Turbo Pascal, díky které se

masově rozšířil na osobních počítačích typu IBM PC. Ta vznikla ve firmě Borland v roce 1983

a hlavní zásluhy na jejím vývoji mají dánský programátor Anders Hejlsberg (*1960) a francouzský

informatik Philippe Kahn (*1962). Jazyk Pascal je dodnes součástí vývojového prostředí Delphi.

Kromě toho existují open source alternativy Free Pascal a Lazarus. Niklaus Wirth navrhl několik

dalších programovacích jazyků (Algol W, Modula, Oberon) a je autorem vynikající, dodnes

používané učebnice programování Algorithms + Data Structures = Programs.

Dalším významným jazykem začátku 70. let byl v roce 1972 programovací jazyk C. Jeho autorem

je Denis Ritchie (*1941). Referenční příručku „The C Programming Language“ napsal v roce 1978

společně s Brianem Kernighanem (*1941). Popsaná verze se stala de facto standardem K&R

jazyka C. O jazyce C se jšetě zmíníme v následující kapitole, věnované operačním systémům.

Na přelomu 60. a 70. let se objevují také první objektově orientované jazyky. Nejprve jazyk Simula

norských informatiků Ole-Johana Dahla (1931 – 2002) a Kristena Nigaarda (1926 – 2002), který

sice nebyl masově rozšířený, ale svým přístupem k řešení problémů položil základy objektově

orientovaného programování. Na práce norských průkopníků pak navázal americký počítačový

vědec Alan Key (*1940) s jazykem Smalltalk, který svou důslednou objektovostí byl mimo jiné

vhodný k programování grafických aplikací. Díky tomu se Allan Key stal také tvůrcem grafického

uživatelského rozhraní se systémem překrývajících se oken, jaké známe z moderních operačních

9

systémů pro osobní počítače. Zajímavé je, že Alana Keye kromě prací norských předchůdců

ovlivnil také Seymour Papert (autor jazyka LOGO), který ho přivedl ke studiu konstruktivismu.

Posledním procedurálním jazykem, který bych rád zmínil, je Forth. Vyvinul jej roku 1970, nejprve

pro svoji osobní potřebu Charles Moore (*1938) a použil jej pro ovládání soustavy radioteleskopů

v Národní radio-astronomické observatoři (NRAO) na hoře Kitt Peak v Arizoně. O jazyk však měli

zájem další programátoři a rychle se rozšířil, i když ne tak masově jako výše uvedené jazyky. Roku

1973 založil Charles Moore společnost Forth inc. a začal jazyk nabízet komerčně. Roku 1976 se

jazyk stal standardem programování v Mezinárodní astronomické unii. Dodnes je udržován a dále

rozvíjen. Forth je typický prací se zásobníky a použitím postfixové notace. Nepotřebuje pro svoji

práci operační systém a hodí se pro programování řídících a měřicích systémů, založených

na mikroprocesorech s kratší délkou slova (dnes 8, 16 bit), tedy ve vestavěných (angl. embedded)

systémech a pro práci v reálném čase

7.5 Funkcionální programovací jazyky

Již jsme se zmínili, že John Backus (1924 – 2007) podnítil zájem o funkcionální programování.

Přestože byl autorem komerčně velmi úspěšného procedurálního jazyka FORTRAN, nepovažoval

procedurální přístup za jediný možný. Při převzetí Turingovy ceny v roce 1977 přednesl přednášku

s názvem Může být programování osvobozeno od von Neumannova stylu?, v níž představil projekt

jazyka FP. Tento projekt byl dokončen a distribuován, na rozdíl od pozdějšího FL (Function Level),

který zůstal na úrovni firemního projektu IBM a distribuován nebyl. Podnítil však zájem o směr

deklarativního programování, kterému říkáme funkcionální.

Moderním funkcionálním jazykem je Miranda, navržená v roce 1985 britským informatikem

Davidem Turnerem (*19..) a její následník Haskell vyvinutý v roce 1990 skupinou informatiků a

dále zdokonalovaný v současnosti. Jazyk Haskell je pojmenován po matematikovi, který vybudoval

matematické základy funkcionálního programování. Byl to Haskell Brooks Curry (1900 – 1982),

zakladatel kombinatorické logiky.

Mnohem starším funkcionálním jazykem je LISP (LISt Processing), který pochází z roku 1960.

Jeho autorem je John McCarthy (1927), který je známý také svým výrazným podílem na vymezení

pojmu umělá inteligence. V oblasti umělé inteligence je LISP stále využíván. Má jednoduchou

strukturu, protože nerozlišuje mezi kódem a daty. Na vše se dívá jako na seznamy. Problematická je

nutnost používání velkého množství závorek. Staví na něm některé systémy pro zpracování jazyků,

ať přirozených (editor textů Emacs), či formálních (systém počítačové algebry Maxima). Vychází

z něj další programovací jazyky (Smalltalk, Scheme) a dokonce i dětský programovací jazyk Logo.

10

7.6 Dětské programovací jazyky

Již jsme se zmínili, že ideálním jazykem pro výuku neobjektového procedurálního programování

na vysokoškolské úrovni je Pascal. Který jazyk však máme zvolit, chceme-li učit programovat žáky

základní školy, nebo středoškoláky? Existuje několik jazyků vhodných pro výuku programování,

nebo, chcete-li, k rozvoji algoritmického myšlení. Protože s výukou algoritmizace je nejlépe začít

už v dětském věku, tj. na základní škole (všimněte si, že neříkám na 2. Stupni ZŠ), říká se jim často

„dětské programovací jazyky“. To samozřejmě neznamená, že by nebyly vhodné pro počáteční

výuku algoritmizace u adolescentů a dospělých.

Vlajkovou lodí této kategorie programovacích jazyků je Logo, které je zároveň plnohodnotným

programovacím jazykem vycházejícícm z LISPu. Navrhl ho v roce 1967 matematik, informatik

a pedagog Seymour Papert (*1928) na základě konstruktivistických teorií švýcarského filozofa,

přírodovědce a psychologa Jeana Piageta (1896 – 1980). Logo je známé svojí želví geometrií, jde

však o plnohodnotný funkcionální programovací jazyk, použitelný i v oblasti umělé inteligence.

Existuje celá řada implementací loga, např. zdařilé Comenius Logo a Imagine Logo z dílny autorů

Andreje Blaha, Ivana Kalaše a Petra Tomcsányie z Univerzity Komenského v Bratislavě.

Mnohem jednodušším prostředím je Karel, jazyk který navrhl Richard Pattis v roce 1981. Nazval

jej Karel (nikoliv Charles) na počest Karla Čapka, který dal světu slovo robot ve své světoznámé

divadelní hře RUR. Robot Karel nenásilně uváděl jeho studenty do tajů programování pomocí světa

v podobě čtvercové sítě, čtyř základních příkazů (krok, vlevo v bok, polož a zvedni) a dvou testů (je

zeď?, je značka?) a příkazů pro vytvoření struktury (podmínka, cyklus). Tento přístup se používá

často i dnes, kdy se Karel implementuje jako program v některém programovacím jazyce (Pascal,

C, Java). Studenti pak začnou úvod do algoritmizace v Karlově světě, následně si ukážou zdrojový

kód prostředí a plynule přejdou k výuce daného jazyka. Karel je ovšem také ideální prostředí

pro seznámení se základy algoritmizace v rámci povinné výuky informatiky na základní škole.

K novým projektům patří například Alice kolektivu autorů z Carnegie Mellon University, která učí

děti programovat ve trojrozměrném světě animovaných postav. Postava Alice je také inspirována

literaturou, známou knihou z roku 1865 Alice’s Adventures in Wonderland anglického matematika,

logika, spisovatele a fotografa Charlese Dodgsona (1832 – 1898).

Úspěšný je také projekt Baltík – Baltie – Baltazar českého informatika Bohumíra Soukupa.

Vizuální prostředí (volitelně 3D či 2D) je propojeno s osvojováním syntaxe programovacích jazyků

C a C#. Hlavní postavou je zde malý kouzelník Baltík, kterému děti pomáhají vyčarovat objekty a

potom ovlivňovat jejich vlastnosti a chování.

K výuce základů programování jsou poměrně vhodné také některé jednoduché skriptovací jazyky,

které interpretují např. webové prohlížeče. K nim patří JavaScript a VBScript. V tomto případě však

nejde o dětské programovací jazyky s prostředím blízkým světu dětí.

11

7.7 Logické programovací jazyky

Roku 1972 navrhl francouzský informatik Alain Colmerauer (*1941) deklarativní, neprocedurální

jazyk Prolog, založený na predikátové logice prvního řádu. Deklarativní jazyk je přímým opakem

procedurálního, to znamená, že popíšeme výchozí situaci (zadání) a cíl výpočtu, ale vůbec neříkáme

jakým postupem by se program měl k výsledku dostat. Počítač vlastně výsledek vyvozuje ze zadání

pomocí pravidel formální matematické logiky. Proto mluvíme o logickém programování.

Následující ukázka kódu v jazyce Prolog řeší obecný algebrogram na součet dvou čísel. Úkolem

řešitele je nahradit písmena číslicemi (stejné písmeno samozřejmě představuje vždy stejnou číslici):

%priklad zadani otazky

%soucet([0,M,O,R,E],[0,S,E,N,D],[M,O,N,E,Y]).

%reseni [Bratko 1985]

soucet(Slovo1,Slovo2,[H|T]):- %slova zadana v seznamech

s(Slovo1,Slovo2,[H|T],

0,0, %rad desitek

[1,2,3,4,5,6,7,8,9,0],_),not(H=0).

s([],[],[],0,0,Cisla,Cisla).

s([H1|T1],[H2|T2],[H|T],C1,C,Cislo1,Cislo):-

s(T1,T2,T,C1,C2,Cislo1,Cislo2),

soucetcis(H1,H2,C2,H,C,Cislo2,Cislo).

soucetcis(H1,H2,C1,H,C,Cislo1,Cislo):-

del(H1,Cislo1,Cislo2),

del(H2,Cislo2,Cislo3),

del(H,Cislo3,Cislo),

S is H1+H2+C1,

H is S mod 10,

C is S // 10.

del(A,L,L):- nonvar(A),!.

del(A,[A|L],L).

del(A,[B|L],[B|L1]):- del(A,L,L1).

Novějším logickým programovacím jazykem je jazyk Gödel, který roku 1992 vytvořila dvojice

informatiků John Lloyd a Patricia Hillová. Byl nazván na počest rakouského logika, matematika

a filozofa, brněnského rodáka Kurta Gödla (1906 – 1978).

12

8 Operační systémy a uživatelská rozhraní

8.1 Vznik operačních systémů sálových počítačů

První generace počítačů neměla operační systém (OS) a jednu ze tří základních funkcí OS – předání

vstupů počítači a získání výstupů z počítače – řešil každý jednotlivý program individuálně. Potřebné

procedury se musely programovat či přizpůsobovat znovu a znovu. Řešení do značné míry záviselo

na hardware, tedy na použitých vstupních a výstupních zařízeních. Zpracování úloh bylo zásadně

dávkové, to znamená, že stroj načetl dávku děrných štítků (program a data), nebo úsek děrné pásky,

či magnetické pásky, pak vše zpracoval a vytiskl požadované výstupy. Další program bylo možné

zavést a spustit až po dokončení předcházejícího.

Podobná situace pokračovala i u počítačů druhé generace. Elektronky byly nahrazeny tranzistory,

místo strojového kódu a JSA zaujaly vyšší programovací jazyky (FORTRAN, COBOL, ALGOL),

ale počítače stále pracovaly dávkově, v danou chvíli běžel jen jeden program. Přitom počítačový čas

(potřebná doba pro běh určitého programu) byl, měřeno dnešními měřítky, velmi drahý a uživatelé

počítače se zapisovali do pořadníků. Tím vyvstala potřeba automatizovat a tím urychlit zavádění

programů do operační paměti a umožnit běh několika úloh různého typu současně. Některá úloha je

náročná na paměť, jiná na výkon procesoru, další má mohutné tiskové výstupy a mohlo by být

výhodné je spustit současně, aby žádná část hardware sálového počítače nezahálela. První operační

systém pro sálové počítače byly vyvíjeny ve 2. polovině 60. let 20. století. Zhruba ve stejné době se

jako konstrukční prvek hardware začínají používat první integrované obvody. Počítače mají OS až

počínaje 3. generací.

Je zajímavé, že vývoj OS začal velmi velkorysým projektem Multics (MULTiplexed Information

and Computing Service), který měl umožnit mnohouživatelský multitasking až pro 1000 současně

připojených uživatelů k supervýkonnému sálovému počítači (mainframe) GE-645 firmy General

Elecrtic. Vývoj OS Multics byl spuštěn v roce 1964 a podílely se na něm Bellovy laboratoře firmy

AT&T, General Electric a MIT. Projekt Multics přinesl spoustu dobrých myšlenek a částečných

řešení, ale byl až příliš velkorysý, takže po pěti letech, v roce 1969 rozhodlo vedení AT&T, hlavní

řešitel projektu, vývoj zastavit pro jeho velkou složitost a časovou a finanční náročnost zastavit.

Ve vývoji pak pokračovala firma Honeywell až do roku 1985 a OS Multics byl rutinně používán

Kanadským úřadem národní obrany až do roku 2000. Nikdy se však masově nerozšířil a nebyl

komerčně úspěšný. Jeho obrovským přínosem je, že na jeho základech byl postavem UNIX.

Zhruba ve stejné době, v roce 1967 vyvinula firma IBM pro své počítače řady 360 výrazně

jednodušší operační systém MFT (Multiprogramming with a Fixed number of Tasks). Jak říká

název OS, počet současně spuštěných úloh byl shora omezen pevně daným číslem. IBM souběžně

vyvíjela také systém MVT (Multiprogramming with a Variable Number of Tasks), který však byl

mnohem složitější a nebyl příliš spolehlivý, takže se v praxi téměř nepoužíval. OS MFT se používal

také u pozdější řady počítačů IBM 370 a ve verzi MFT II byl počet současně spuštěných úloh

zvýšen tak, že z praktického hlediska uživatele neomezoval.

13

8.2 Operační systém UNIX

Když byl v roce 1969 firmou AT&T zastaven projekt Multics, zůstaly „mozky“ vývojového týmu

v Bellových laboratořích a začaly hned pracovat na novém víceuživatelském a multitaskingovém

operačním systému, ale tentokrát s důrazem na jednoduchost. Původní název projektu Unics (Unary

Information and Computing Service) byl později změněn na UNIX. Revolučním počinem bylo

přeprogramování celého operačního systému v jazyce C v roce 1973. Do té doby byly všechny OS

programovány výhradně v JSA.

Hlavními tvůrci OS UNIX jsou Kenneth Thompson (*1943) a Dennis Ritchie (*1941). Kenneth

Thompson byl vedoucím týmu projektu Multics, společně s Denisem Ritchiem vyvinuli OS UNIX,

samostatně vytvořil programovací jazyk B (předchůdc jazyka C), byl propagátorem myšlenky užití

regulárních výrazů v informatice, společně s Robertem Pikem (*1956) navrhli znakovou sadu

UTF-8 a podíleli se po UNIXu také na vývoji OS Plan 9. Kenneth Thompson je mimo jiné nadšený

šachista a propagátor počítačového šachu, tvůrce software pro šachový počítač Bell. Druhým

hlavním autorem UNIXu je člen týmu Multics Dennis Ritchie, autor programovacího jazyka C.

Společně s Brianem Kernighanem (*1942) napsali v roce 1978 knihu (The C Programming

Language), kterou de facto definovali standard jazyka C, nazývaný podle iniciál jejich příjmení

K&R. Brian Kernighan je autorem názvu OS Unics a mimo jiné je spoluautorem skriptovacího

jazyka AWK.

Obr. 75 Kenneth Thompson Obr. 76 Dennis Ritchie Obr. 77 Brian Kernighan

Kenneth Thompson a Dennis Ritchie obdrželi za vývoj OS UNIX v roce 1983 Turingovu cenu

a v roce 1999 převzali z rukou prezidenta USA Billa Clintona Státní medaili za technologii.

Operační systém UNIX se dále vyvíjí a zdokonaluje. Ochranou známku UNIX vlastní nyní

konsorcium The Open Grup a požaduje certifikaci podle Single UNIX Specification. Kromě toho se

UNIX stal se základem mnoha dalších operačních systémů unixového typu (Unix-like systems),

jako jsou XENIX, MINIX, Linux (různě nazývané distribuce), FreeBSD, OpenBSD, NetBSD,

Mac OS X, Solaris.

14

8.3 Operační systémy unixového typu na osobních počítačích

Od počátku 80. let soupeřily spolu na trhu osobních počítačů především dvě firmy. Firma IBM,

která se svojí otevřenou stavebnicovou koncepcí dokázala stlačit ceny, a proto byla komerčně více

úspěšná, a firma Apple, která sázela na kompaktnost a jednotný elegantní design. Je zajímavé, že na

obou platformách se úspěšně prosadily operační systémy unixového typu.

Prvním operačním systémem unixového typu pro IBM PC kompatibilní počítače

byl MINIX (MINI uniX) amerického vysokoškolského profesora informatiky,

trvale žijícího v Amsterdamu (Nizozemí) Andrewa Tanenbauma (*1944). Je

sympatické, že tento odborník sám sebe označuje za v první řadě učitele

informatiky. Cílem MINIXu, který vytvořil v roce 1987, bylo především naučit

studenty, jak pracuje OS. Napsal knihu, kde vše podrobně popsal a do přílohy

dal všechny zdrojové kódy. Současně nabídl zdrojové kódy zájemcům na sadě

disket.

Obr. 78 Andrew Tanenbaum

Jedním z jeho studentů (na dálku - prostřednictvím diskuze ve fóru na internetu)

byl Linus Torvalds (*1969), finský programátor, nyní žijící v USA. Linus

Torvalds se MINIXem inspiroval, převzal souborový systém, ale vypracoval

svůj vlastní operační systém. Chtěl jej nazvat Freax (z angl. Free + Freak +

uniX), ale dříve než to stihl udělat, dovolil kamarádovi vystavit systém na síti.

Ari Lemmke vystavil systém na FTP serveru v adresáři Linux (LINUsův uniX)

a nový OS měl jméno. Linus Torvalds se vždy zabýval a stále zabývá pouze

jádrem OS, do jehož vývoje se zapojila řada dalších lidí a on sám už dnes jen

koordinuje práce a rozhoduje o tom, jaký kód se stane součástí jádra.

Obr. 79 Linus Torvalds

Pro uživatele se pak vytvářejí balíčky, které vznikají spojením jádra, utilit a aplikačního software

a kterým se říká linuxové distribuce. Přínosem Linuxu je důsledné dodržení standardů POSIX

(Portable Operating System Interface) pro rozhraní OS, díky němuž je převod programů mezi

jednotlivými typy UNIXu (a tím spíš mezi distribucemi a verzemi Linuxu) velmi snadné, snadnější

než mezi různými verzemi MS Windows.

K OS unixového typu přešla také firma Apple se svými počítači Macintosh, a to od roku 2001, kdy

po verzi klasického Mac OS 9 změnila směr vývoje. Novou verzi nazvala Mac OS X a založila ji

na zkušenostech s OS NeXTSTEP, zkušenostech se svým klasickým Mac OS a dalších unixových

komponentách z různých zdrojů. Základ systému Mac OS X uvolnila firma Apple pod názvem

Darwin. Upravenou verzi Mac OS X používají také zařízení iPhone a iPod.

15

8.4 Vývoj uživatelských rozhraní počítačů

Uživatelským rozhraním rozumíme technickou realizaci interakce a komunikace mezi člověkem

(uživatelem stroje) a počítačem (nebo jiným strojem). Signály počítače i jiných automatizovaných

zařízení může člověk vnímat zrakem, sluchem či hmatem. V tomto smyslu patří mezi uživatelská

rozhraní zvukové rozhraní s hlasovým syntezátorem, či tzv. braillský řádek, které umožňují užívat

počítač nevidomým. Běžný uživatel počítače ovšem vnímá naprostou většinu informací z počítače

prostřednictvím zraku, takže v užším slova smyslu rozumíme uživatelským rozhraním optickou

informaci na monitoru. V praxi je tato informace doplněna ještě o jednoduché zvukové signály

a signalizační diody (LED), které indikují např. zapnutí počítače, činnost pevného disku, připojení

počítače k místní počítačové síti (metalické, wi-fi), osobní síti (Bluetooth), nebo nastavení

přepínačů klávesnice (Caps Lock, Num Lock, Scroll Lock). Nejvíce pozornosti však uživatelé

právem věnují informacím na obrazovce monitoru. Své povely pak předávají počítači především

prostřednictvím klávesnice a myši.

Historický vývoj vzhledu informací na obrazovkách proběhl ve třech základních etapách. Masově

se nyní používá ta nejnovější a nejdokonalejší, ale ve speciálních aplikacích a na úrovni základního

operačního systému může být pro svoji jednoduchost a malé hardwarové nároky použita i jedna

ze starších variant. Uživatelská rozhraní dělíme na:

CLI … Command Line Interface … příkazový řádek ,

TUI … Text User Interface … textové uživatelské rozhraní,

GUI … Graphical User Interface … grafické uživatelské rozhraní.

Příkazový řádek byl typickým uživatelským rozhraním prvních operačních systémů. Jeho zavedení

šlo ruku v ruce s nástupem textových (znakových) terminálů. Výhodou CLI je z pohledu uživatele

jednoznačnost příkazů a jejich velká variabilita použitím přepínačů a parametrů, z pohledu počítače

nízká hardwarová náročnost a z pohledu programátora snadnější práce při vytváření uživatelského

rozhraní. Nevýhodou je nutnost relativně složitého zaškolení uživatele počítače. CLI nenabízí

uživateli na výběr žádné řešení, ale jen prázdné místo za dohodnutou sekvencí znaků, které říkáme

výzva (prompt). Tím vyžaduje od nezkušeného uživatele značné úsilí, a proto jej nelze doporučit

začátečníkům a svátečním uživatelům počítače.

Pro své nesporné výhody je stále využíván jako rozhraní operačního systému UNIX a jeho klonů

(např. Linux). Nezastupitelný je při ovládání některých typů aplikačního software, jako jsou třeba

systémy počítačové algebry (CAS – Computer Algebra System). Počítač zobrazuje výzvu (prompt)

a za ní kurzor, zpravidla blikající, naznačující, že je očekáván vstup uživatele. Uživatel zapíše vstup

jako krátký text a odešle jej počítači stiskem k tomu určené klávesy (Enter).

Krokem vstříc k uživateli je textové uživatelské rozhraní. Využívá maximálně možností barevných

textových (znakových) monitorů, uživateli nabízí jednoduché uživatelské dialogy (výběr z několika

možností) a alternativní ovládání myší nebo klávesnicí v celé řadě situací a funkcí. Rozmach TUI

nastal s vývojovým prostředím Turbo Pascal 5.5 firmy Borland, které obsahovalo nástroje pro jeho

snadné vytváření.

16

Obr. 80 Typická ukázka textového uživatelského rozhraní – dialog pro otevření souboru k editaci

Obr. 81 Manažer souborů v okně s dvěma panely Midnight Commander pod OS Linux

Uživatelé osobních počítačů typu IBM PC v 90. letech si jistě pamatují, jakým ulehčením práce se

soubory a složkami bylo použití programu Norton Commander, který představoval moderní textové

uživatelské rozhraní, v porovnání se zadáváním odpovídajících příkazů MS DOSu do příkazového

řádku.

17

Textové uživatelské rozhraní představovalo určitý vývojový mezistupeň mezi příkazovým řádkem

a grafickým uživatelským rozhraním. Dnes se používá jako určitý kompromis mezi CLI a GUI, lze

ho snadno používat na starších, méně výkonných počítačích. Kdo si na něj zvykne, může mít

k dispozici kvalitní textový editor (Vim), souborový manažer (Midnight Commander), či prohlížeč

webových stránek (Lynx), aniž by potřeboval výkonný procesor a velkou paměť.

8.5 Grafická uživatelská rozhraní počítačů

Grafické uživatelské rozhraní se zrodilo v roce 1973 ve vývojovém centru PARC firmy Xerox. Jeho

hlavním duchovním otcem byl Alan Key (*1940). Na práci Alana Keye potom navázal Merzouga

Wilberts, který v roce 1980 doplnil myšlenku grafického rozhraní o okna, v nichž běží jednotlivé

aplikace a vzniklé interaktivní uživatelské prostředí nazval WIMP (Windows, Icons, Menus,

Pointing device). Zkušeností členů vývojového týmu PARC využila firma Apple Computer

pro GUI svého operačního systému pro počítače Apple Macintosh v první polovině roku 1984. Šlo

o první komerčně úspěšné GUI, které navíc bylo součástí operačního systému. Ve druhé polovině

roku 1985 použila myšlenky firma Microsoft, která vydala grafickou nadstavbu operačního systému

MS DOS a nazvala ji Windows 1.0. Zhruba ve stejné době byl pro systémy typu UNIX vyvinut

standard X Window System, který je pod unixovými systémy, včetně Linuxu, používán dodnes.

Často bývá nazýván krátce X11, nebo jen X.

Obr. 82 Grafické uživatelské rozhraní a prostředí pracovní plochy GNOME 2.28

18

Firma Microsoft šla cestou monolitního operačního systému, jehož je GUI nedílnou součástí

(počínaje verzí Windows 95). Unixové systémy zůstaly naopak u mikrojádra, které se GUI vůbec

nezabývá, na které navazuje X Window System zobrazující grafické objekty a na něm postavené

konkrétní prostředí pracovní plochy. To je teprve GUI, s kterým interaguje uživatel počítače. Mezi

nejznámější prostředí pracovní plochy pod OS Linux, BSD či Solaris patří GNOME (GNU Network

Object Model Environment) a KDE (K Desktop Environment), obě vyvíjená od roku 1997.

Obr. 82 Grafické uživatelské rozhraní a prostředí pracovní plochy KDE 4.30