Portál AbcLinuxu, 1. května 2025 14:14
V druhé části rozhovoru z roku 1986 mluví Butler Lampson o tom, jak programy navrhuje, nakolik je programování umění a informatika věda a jak lidem pomůže rozšíření osobních počítačů. Kromě toho vysvětluje, proč nemá cenu se učit BASIC...
Programmers at Work je kniha 19 rozhovorů s významnými programátory, kteří svou prací a myšlenkami tvarovali podobu dnešních operačních systémů a mnoha dalších aplikací. Ačkoliv vyšla již v roce 1986, rozhovory jsou z velké míry nadčasové a stále velmi zajímavé. Susan Lammers se po více než 20 letech od prvního vydání knihy rozhodla zveřejnit rozhovory na Internetu a dala AbcLinuxu.cz souhlas k jejich překladu a vydání. Kvůli jejich délce bude většina rozhovorů rozdělena na dva díly. Každý rozhovor doplníme o krátký dodatek, ve kterém budou shrnuty další osudy jednotlivých programátorů.
První část rozhovoru: Butler Lampson (Programmers at Work).
Daly vám takovou práci i jazyky, na kterých jste pracoval?
Někdy to jde rychle: Společně s Peterem Deutschem jsme první verzi jednoho jazyka rozběhli asi během dvou měsíců. Na druhou stranu pracuji s Rodem Burstallem na jazyce vhodném pro psaní jádra. Dostaneme se k němu dvakrát nebo třikrát do roka, už na něm pracujeme asi pět let a ještě pořád nemáme implementaci. Pokaždé změníme názor.
Myslíte si, že existuje nějaký návod, jak dojít k dobrému programu nebo systému?
Ano. Nejdůležitější je definovat co nejpřesněji rozhraní mezi systémem a zbytkem světa a mezi jednotlivými hlavními částmi systému navzájem. Můj styl návrhu se za ta léta nejvíc změnil v tom, že dnes dávám mnohem větší důraz na řešený problém a snažím se najít co nejlepší způsob, jak přesně definovat rozhraní. To se obrovsky vyplatí, jednak člověk lépe pochopí funkce programu a jednak najde všechny jeho zásadní části. Navíc je pak lépe vidět, jak celý systém pasuje dohromady. To je nejdůležitější část návrhu programu.
Návrh programu je něco úplně jiného než vymýšlení algoritmů. Vymýšlení algoritmů spočívá v tom, že si celé zadání dáte dohromady v hlavě a pak jednotlivé kousky různě přesouváte, dokud nepřijdete na nejlepší řešení. Základní trik je v dostatečně přesné definici algoritmu, abyste ho dostali do hlavy.
Odkud berete při návrhu systémů a programů jistotu, že se dají implementovat?
Jedna možnost je napsat návrh až na úroveň programu, kde mám zaručené dvě věci. Za prvé znám programátorské stavební bloky – už byly implementované tisíckrát, takže si můžu být do velké míry jistý, že program bude fungovat i tentokrát. A za druhé těmto stavebním blokům rozumím natolik, abych dokázal v rámci řekněme dvojnásobné nebo trojnásobné chyby odhadnout jejich paměťové nároky. Takže mohu program navrhnout rozumně. Dohromady si tedy mohu být celkem jistý, že daná funkce půjde napsat, a jsem schopen odhadnout její výkon. Samozřejmě se může stát, že i přesto něco zásadního přehlédnu. S tím se nedá dělat nic.
Druhá možnost je pečlivě a formálně popsat vlastnosti, které by program měl splňovat, a pak sám sebe přesvědčovat o tom, že je skutečně splňuje. Neformálně to dělá každý. Čím formálněji to děláte, tím víc je to práce, ale klesá pravděpodobnost, že přehlédnete něco opravdu důležitého. V určitém bodu začne být formální analýza kontraproduktivní. Pokud ji na druhou stranu děláte jen málo, roste riziko, že přehlédnete něco důležitého. Když na chybějící kus narazíte až po implementaci, musí se zahodit obrovský kus práce.
V praxi se taková práce samozřejmě většinou nezahazuje; zkouší se nějak zalepit. Což má velice nepříjemné důsledky. Za prvé, problém se nevyřeší. Jen z něj uděláte jiný problém, který jste původně vůbec řešit nechtěli. A tak program záplatujete, dokud není tenhle druhý problém vyřešený. Takový přístup je značně neuspokojivý.
Někdy si říkám, že si lidé zkrátka berou příliš velké sousto. Programátoři často zapomínají na to, že problémy při psaní softwarových systémů vznikají, protože se snaží udělat něco příliš těžkého. Věří tomu, že počítač je univerzální stroj, který zvládne cokoliv. Velice snadno se dá podlehnout představě, že skupina dvou nebo pěti nebo deseti nebo padesáti nebo tisíce programátorů může počítač přinutit k čemukoliv. Což zjevně není pravda.
Jaké kvality potřebuje programátor k napsání úspěšného programu?
Nejdůležitější kvalitou je schopnost uspořádat řešení problému do zvladatelné podoby, ve které bude každá komponenta popsaná dostatečně jednoduše. Někteří úspěšní programátoři to umí, ale neumí zpětně vysvětlit, co udělali, protože nevidí příslušnou strukturu. Někteří lidé jsou dobří programátoři, protože dokážou zvládnout mnohem víc podrobností než ostatní. Ale výběr takových programátorů má řadu nevýhod – může vést k programu, ve kterém se nikdo jiný nevyzná. To už se dnes podle všeho tolik nestává, protože dnes je v módě nechat návrh na jednom člověku nebo skupině a pak najmout někoho jiného, kdo napíše veškerý kód.
Je to podle vás riziko?
Riziko je v tom, že autor návrhu může časem ztratit kontakt s realitou a vznikají návrhy, které se nedají implementovat.
Navrhl jste někdy program, který by se nedal implementovat?
Ne, myslím že ne. Nejblíž jsem tomu byl uprostřed sedmdesátých let v Xeroxu. Společně s několika dalšími lidmi jsem navrhl souborový systém, který měl transakce. To je schopnost provést několik změn v uložených datech atomicky – buď se provedou všechny změny, nebo ani jedna. Příkladem transakce je převod peněz z účtu v jedné bance na účet v jiné bance. Nechcete systém nechat ve stavu, ve kterém by se peníze odečetly z prvního účtu, ale nepřipsaly se na druhý. Na úvodním návrhu systému jsem udělal hodně práce. Když se pak implementoval, fungoval, ale celkově byl shledán nedostatečným.
Jak podle vás vypadá krásný program?
Nevím, jestli se na takovou otázku dá odpovědět. Neřeknu vám, co je krásný obraz nebo krásná hudba. Programy se možná lépe popisují kvůli tomu, že mají různé kvality; jsou řemeslný výrobek a zároveň umění.
Krásný program je jako krásná matematická věta: Splní svůj úkol s grácií. Má jednoduchou a srozumitelnou stavbu; řeknete si: „No ovšem, takhle to musí být.“
Kdybyste měl najít nějakou paralelu mezi programováním a jiným uměním, například malbou, psaním, skládáním hudby nebo sochařstvím, kde byste ji hledal?
Bylo by lepší zvolit architekturu, ve které hraje velkou roli technika. Jen málo programů se dá považovat za čisté umění. Program by měl něco dělat a umění je jednou z jeho částí. Ale pokud programování prohlásím za umění, je to podobné jako s matematikou – matematika se běžně za umění nepovažuje.
V jakém smyslu je informatika vědou?
Nejjednodušší odpověď zní, že ve stejném smyslu jako matematika. Počítačový program se dá považovat za matematický objekt. Pokud tento objekt chcete pochopit, můžete sáhnout k nějakým abstraktním tvrzením, která se dají dokázat. Jediná druhá možnost je systém pokusu a omylu, který ovšem příliš nefunguje. Pokud je objekt třeba jen trochu složitější, můžete se snažit dlouho a nikdy na jeho vlastnosti nepřijdete.
Myslíte si, že se způsob návrhu a vývoje systémů časem radikálně změní?
Ano a ne. Co návrhu opravdu pomáhá, je vývoj vyšších abstrakcí, se kterými se dá pracovat. Například pro řešení některých úloh je mnohem jednodušší napsat program v tabulkovém procesoru VisiCalc než dejme tomu v Basicu.
Na druhou stranu ale neustále rostou i naše cíle, takže vývoj lepších abstrakcí programování zase tolik neusnadňuje – jen nám umožňuje dělat složitější věci. Zvládneme toho víc, protože používáme mnohem silnější stavební bloky.
Myslíte si, že mikropočítače a osobní počítače jsou jen trend, který časem ustoupí něčemu dalšímu?
Samozřejmě, že ne! Mám jednu přednášku pro veřejnost nazvanou Počítačová revoluce ještě nepřišla. Její hlavní téma zní, že velké změny světa zaberou nějakou dobu. Vezměte si třeba průmyslovou revoluci. Od jejího začátku uplynulo přinejmenším šedesát let, než se výrazně projevila na lidských životech. Totéž platí i pro druhou průmyslovou revoluci. Vynález telefonu a elektrického osvětlení přišel někdy v 80. letech devatenáctého století, ale do širšího použití se obojí dostalo až někdy ve dvacátých letech.
Totéž podle mě platí pro výpočetní revoluci. Lidé si myslí, že je dnes všechno mnohem rychlejší, protože se od nápadu k hotovému produktu dostaneme za šest měsíců. Nesmysl. Výpočetní technika teprve začíná hrát významnou roli v ekonomii a lidských životech. Technické trendy porostou neuvěřitelnou rychlostí a jejich přirozenou podobou bude takzvaný osobní počítač.
Trendy se dají odhadnout podle vývoje základních technologií. Na počítač je potřeba křemík, rotační magnetické médium, klávesnice a obrazovka. Každá z těchto součástek se vyvíjí, takže jsou k dostání čím dál lepší počítače v malé krabici za rozumnou cenu. Nic nenasvědčuje tomu, že by se to mělo v dohledné době změnit. Neříkám, že doba velkých počítačů skončila, ale trend směrem k osobním počítačům je velice silný.
Jak bude podle vás počítačový průmysl vypadat za pět nebo deset let?
Alespoň dvacet let slušně poroste. Existuje bezpočet věcí, které budou počítače časem dělat a dnes nedělají, protože nejsou dost levné, dost rychlé, nebo protože lidé příslušnému problému prostě dost nerozumí.
Myslíte si, že se změní postavení informatiky nebo počítačového průmyslu v naší společnosti? Budou hrát informatici podobnou roli jako fyzici začátkem dvacátého století? Přijdou se zásadními objevy, které podstatně změní naši společnost?
Ne. Nic podobného fyzice z počátku dvacátého století se nestane. Většina lidí vůbec netušila, že fyzici existují, dokud se v roce 1945 nedostali do povědomí kvůli atomové bombě. Počítače podle mě nejsou dostatečně dramatické. Ale fráze „počítačová revoluce ještě nepřišla“ znamená, že za dvacet let bude počítač na každém prstu. Počítače budou všudypřítomné, a to způsobem, který dnes dokážeme předpovídat jen částečně. Způsobí velkou změnu ve fungování světa, stejně jako například automobilová revoluce. Ale bude to dlouho trvat, stejně jako trvala změna společnosti po příchodu automobilu. Když se v roce 1920 objevil první automobil, důsledky se daly jen těžko předpovídat. Některé byly zjevné, jiné nikoliv. U počítače to platí dvojnásob, protože počítače povedou k zásadnějším změnám.
Pokud má být počítač za dvacet let na každém prstu, plynou z toho podle vás nějaké nevýhody?
Nic špatného na tom nevidím. Na každém zápěstí určitě. Počítače jsou tu od toho, aby pomáhaly; doufám že se jim to povede.
Nedávno jsem četl zajímavý článek o tom, jak by mohl člověk díky novým šifrovacím technikám získat větší kontrolu nad svými osobními daty. Těžko předvídat, jak tyhle věci nakonec dopadnou, protože je v tom řada politických i technických problémů. Ten článek je ale zajímavým dokladem toho, jak může člověk prostřednictvím počítače získat větší kontrolu nad svým vlastním životem. Dokonce i v době, kdy jsou do našeho života nevyhnutelně zapletené velké organizace, například banky, může člověk chytrým využitím stroje získat mnohem větší vládu nad svým životem. Před deseti lety by nikoho nenapadlo, že počítače půjdou k něčemu takovému použít. Ve skutečnosti si všichni mysleli pravý opak.
V čem vidíte slabiny současných osobních počítačů?
Současné osobní počítače jsou brak. Ale to bych jako problém neviděl. Jsou nové a lidé se s nimi teprve učí zacházet; navíc se rychle zlepšují. Alan Kay měl jeden dobrý postřeh o Macu – to byl první počítač, který stálo za to kritizovat. Autoři příští generace počítačů a programů už se dnes mohou zamyslet nad nedostatky té současné generace, aby ta příští byla lepší.
Proto si mimo jiné myslím, že je tak nesmyslná myšlenka počítačové gramotnosti. Alespoň pokud počítačová gramotnost spočívá v tom, že se někdo naučí aktuální generaci Basicu a textových procesorů. To nemá co dělat s realitou. Je pravda, že dnes hodně pracovních míst vyžaduje programování v Basicu – ale představa, že Basic bude vaší oporou v informační společnosti jednadvacátého století, je naprostý blábol. V jednadvacátém století nejspíš vůbec žádný Basic nebude.
Jak bychom se tedy měli připravit na budoucnost?
K čertu s počítačovou gramotností. Je to absolutní nesmysl. Studujte matematiku. Naučte se přemýšlet. Pište. Čtěte. Takové věci mají trvalejší hodnotu. Naučte se dokazovat matematické věty: historické zkušenosti naznačují, že se tato schopnost dá dobře uplatnit v mnoha jiných oborech. Učit se základy Basicu je absurdní.
Převálcují programátoři v Basicu celý počítačový průmysl?
Ne; a já si především nemyslím, že by na programování v Basicu bylo něco tak špatného. Špatné je, když se někdo bojí, že jeho děti nebudou mít budoucnost, pokud se nenaučí programovat v Basicu. Pro takové obavy není jediný důvod.
Ale nikdo neumí s jistotou odhadnout, jaké schopnosti budou potřeba.Na tom něco je, ale my máme alespoň přibližnou představu o tom, kam počítačový průmysl směřuje. Stačí se podívat na systémy, které vznikají ve výzkumných laboratořích, a uděláte si obrázek. Kdybyste v roce 1975 navštívili Xerox, získali byste velice dobrou představu o tom, jak bude vypadat špička osobní výpočetní techniky v roce 1985.
Dočkáme se podle vás dne, kdy si bude každý psát své vlastní programy?
Jsou různé úrovně programování. Když vznikal systém SmallTalk, Alan Kay chtěl, aby s ním mohly pracovat i děti a psát zajímavé programy. Ale nevyšlo to. Řekl, že dát dětem SmallTalk bylo jako dát jim hromadu kostek: Děti si z kostek něco postaví, ale jen zřídka dojdou třeba k oblouku.
Kdybychom programování vzali jednoduše jako zadávání příkazů počítači, pak ho podle mě bude na nějaké úrovni dělat každý. Většina podnikatelů pracuje s tabulkovým procesorem, což je v jistém smyslu programování. Myslím, že podobných příkladů bude přibývat. Tvůrčí programování je ale něco jiného.
Zjistil jste někdy jako programátor, že vám práce spolkla větší část běžného života?
Tímhle jsem si prošel, když jsem byl mladší. Dnes už ne, na to jsem moc starý.
¶
© Susan Lammers 1986–2008, přeloženo s laskavým dovolením autorky.
¶
Butlerovi Lampsonovi je dnes 65 let a pracuje pro výzkumné oddělení Microsoftu, kde se zabývá protipirátskou ochranou, bezpečností, odolností proti výpadkům a návrhem uživatelských rozhraní. „Chytré využití strojů pro získání větší kontroly nad svým životem“ ho zřejmě zaujalo, protože patří mezi autory návrhu technologie NGSCB (dříve Palladium), která je implementací takzvaného Trusted Computingu. Kromě své práce pro Microsoft přednáší jako mimořádný profesor na MIT; v roce 1992 získal prestižní Turingovu cenu za své příspěvky k informatice a technologii osobních počítačů.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.