57
Úvod do programování aneb Do nitra stroje Karel Minařík PŘEDNÁŠKA 2

Historie programovacích jazyků

Embed Size (px)

DESCRIPTION

Přednáška z cyklu Úvod do programování aneb Do nitra stroje na FFUK v Praze

Citation preview

Page 1: Historie programovacích jazyků

Úvod do programování aneb Do nitra stroje

Karel MinaříkPŘEDNÁŠKA 2

Page 2: Historie programovacích jazyků

Úvod do programování

Opakování1

Page 3: Historie programovacích jazyků

Úvod do programování Přednáška 2

„Používat nějaký nástroj na počítači vyžaduje zřídkakdy více

než  umět klikat myší; vytvořit takový nástroj vyžaduje

rozumět  tajemnému umění programovat počítač“

— John Maeda, Creative Code

Page 4: Historie programovacích jazyků

Úvod do programování Přednáška 2

Page 5: Historie programovacích jazyků

Úvod do programování Přednáška 2

Vztah ke stroji

Page 6: Historie programovacích jazyků

Úvod do programování Přednáška 2

Page 7: Historie programovacích jazyků
Page 8: Historie programovacích jazyků

Úvod do programování Přednáška 2

Page 9: Historie programovacích jazyků

Úvod do programování Přednáška 2

HLEDISKO UŽIVATELE

Kontext×

KonzistenceHLEDISKO PROGRAMÁTORA

Page 10: Historie programovacích jazyků

Úvod do programování Přednáška 2

Algoritmus je konečný seznam uspokojivě definovaných instrukcí pro splnění určitého úkolu. Z počátečního stavu algoritmus skončí v definovaném konečném stavu.

— Wikipedia

Page 11: Historie programovacích jazyků

Úvod do programování Přednáška 2

1. Nalít olej do pánve2. Zapálit plyn3. Vzít vejce4. Rozklepnout vejce o okraj pánve

Page 12: Historie programovacích jazyků

Úvod do programování Přednáška 2

? Vzít pánev1. Nalít olej do pánve2. Zapálit plyn3. Vzít vejce4. Rozklepnout vejce o okraj pánve

Page 13: Historie programovacích jazyků

Úvod do programování Přednáška 2

? Najít pánev? Najít olej1. Nalít olej do pánve2. Zapálit plyn3. Vzít vejce4. Rozklepnout vejce o okraj pánve

Page 14: Historie programovacích jazyků

Úvod do programování Přednáška 2

? Najít pánev? Najít olej1. Nalít olej do pánve2. Zapálit plyn? Čím zapálit plyn3. Vzít vejce4. Rozklepnout vejce o okraj pánve

Page 15: Historie programovacích jazyků

Úvod do programování Přednáška 2

? Najít pánev? Najít olej1. Nalít olej do pánve2. Zapálit plyn? Čím zapálit plyn3. Vzít vejce4. Rozklepnout vejce o okraj pánve

Page 16: Historie programovacích jazyků

Úvod do programování Přednáška 2

? Najít pánev? Najít olej1. Nalít olej do pánve2. Zapálit plyn? Čím zapálit plyn3. Vzít vejce4. Rozklepnout vejce o okraj pánve

OK

Fatal Error

Do!ly vejce

Cancel

Page 17: Historie programovacích jazyků

Úvod do programování Přednáška 2

JEDNODUCHÝ ALGORITMUS

Nalezení největšího čísla z neuspořádaného seznamu čísel

1. Předpokládejme, že první číslo v seznamu je největší.

2. Podívejme se na postupně na každé zbývající číslo v seznamu. Pokud je větší než dosud největší číslo, zapišme si je.

3. Jakmile jsme prošli všechna čísla, je poslední zapsané číslo největším číslem v  seznamu.

Page 18: Historie programovacích jazyků

Úvod do programování Přednáška 2

ZÁPIS V PROGRAMOVACÍM JAZYCE

1 class MaxApp {2 public static void main (String args[]) {3 int[] input = {1, 5, 3, 95, 43, 56, 32, 90, 2, 4, 19};4 int largest = input[0];5 for (int i = 0; i < input.length; i++) {6 if (input[i] > largest)7 largest = input[i];8 }9 System.out.println("Nejvyšší číslo je: " + largest + "\n");10 }11 }

Java

Page 19: Historie programovacích jazyků

Úvod do programování Přednáška 2

ZÁPIS V PROGRAMOVACÍM JAZYCE

1 input = [1, 5, 3, 95, 43, 56, 32, 90, 2, 4, 19]2 largest = input.first3 input.each do |i|4 largest = i if i > largest5 end6 print "Nejvyšší číslo je: #{largest} \n"

Ruby

Page 20: Historie programovacích jazyků

Úvod do programování Přednáška 2

www.pine.fm/LearnToProgram (původní verze)

Page 21: Historie programovacích jazyků

Úvod do programování Přednáška 2

www.poignantguide.net/rubyNEJBLÁZNIVĚJŠÍ UČEBNICE PROGRAMOVÁNÍ NA SVĚTĚ

Page 22: Historie programovacích jazyků

Úvod do programování Přednáška 2

Ruby on Rails

Page 23: Historie programovacích jazyků

Úvod do programování

Historie programovacích jazyků2

Page 24: Historie programovacích jazyků

Úvod do programování Přednáška 2Ada Lovelace (1815—1852)

Page 25: Historie programovacích jazyků

Úvod do programování Přednáška 2

Co je to programovací jazyk?

Page 26: Historie programovacích jazyků

Úvod do programování Přednáška 2

Algoritmus je konečný seznam uspokojivě definovaných instrukcí pro splnění určitého úkolu. Z počátečního stavu algoritmus skončí v definovaném konečném stavu.

— Wikipedia

Page 27: Historie programovacích jazyků

Úvod do programování Přednáška 2

Programovací jazyk je umělý jazyk, který slouží k formální zápisu algoritmu.

Page 28: Historie programovacích jazyků

Úvod do programování Přednáška 2

Počítač nedělá to, co chceme, aby dělal.

Počítač dělá přesně to, co mu řekneme, aby dělal.

Page 29: Historie programovacích jazyků

1986 1990 1990 1991 1991 1993 1994 1995 1996 1996 1997 1997 2000 2001 2001 2003 2003 2004

History of Programming Languages

©2004 O’Reilly Media, Inc. O’Reilly logo is a registered trademark of O’Reilly Media, Inc. All other trademarks are property of their respective owners. part#30417

19601954 1965 1970 1975 1980 1985 1990 1995 2000 20022001 2003 2004

For more than half of the fifty years computer programmers have beenwriting code, O’Reilly has provided developers with comprehensive,in-depth technical information. We’ve kept pace with rapidly changingtechnologies as new languages have emerged, developed, andmatured. Whether you want to learn something new or needanswers to tough technical questions, you’ll find what you need in O’Reilly books and on the O’Reilly Network.

This timeline includes fifty of the more than 2500 documented programming languages. It is based on an original diagram createdby Éric Lévénez (www.levenez.com), augmented with suggestionsfrom O’Reilly authors, friends, and conference attendees.

For information and discussion on this poster, go to www.oreilly.com/go/languageposter.

www.oreilly.com

Page 30: Historie programovacích jazyků

1986 1990 1990 1991 1991 1993 1994 1995 1996 1996 1997 1997 2000 2001 2001 2003 2003 2004

History of Programming Languages

©2004 O’Reilly Media, Inc. O’Reilly logo is a registered trademark of O’Reilly Media, Inc. All other trademarks are property of their respective owners. part#30417

19601954 1965 1970 1975 1980 1985 1990 1995 2000 20022001 2003 2004

For more than half of the fifty years computer programmers have beenwriting code, O’Reilly has provided developers with comprehensive,in-depth technical information. We’ve kept pace with rapidly changingtechnologies as new languages have emerged, developed, andmatured. Whether you want to learn something new or needanswers to tough technical questions, you’ll find what you need in O’Reilly books and on the O’Reilly Network.

This timeline includes fifty of the more than 2500 documented programming languages. It is based on an original diagram createdby Éric Lévénez (www.levenez.com), augmented with suggestionsfrom O’Reilly authors, friends, and conference attendees.

For information and discussion on this poster, go to www.oreilly.com/go/languageposter.

www.oreilly.com

Page 31: Historie programovacích jazyků

1986 1990 1990 1991 1991 1993 1994 1995 1996 1996 1997 1997 2000 2001 2001 2003 2003 2004

History of Programming Languages

©2004 O’Reilly Media, Inc. O’Reilly logo is a registered trademark of O’Reilly Media, Inc. All other trademarks are property of their respective owners. part#30417

19601954 1965 1970 1975 1980 1985 1990 1995 2000 20022001 2003 2004

For more than half of the fifty years computer programmers have beenwriting code, O’Reilly has provided developers with comprehensive,in-depth technical information. We’ve kept pace with rapidly changingtechnologies as new languages have emerged, developed, andmatured. Whether you want to learn something new or needanswers to tough technical questions, you’ll find what you need in O’Reilly books and on the O’Reilly Network.

This timeline includes fifty of the more than 2500 documented programming languages. It is based on an original diagram createdby Éric Lévénez (www.levenez.com), augmented with suggestionsfrom O’Reilly authors, friends, and conference attendees.

For information and discussion on this poster, go to www.oreilly.com/go/languageposter.

www.oreilly.com

Page 32: Historie programovacích jazyků

1986 1990 1990 1991 1991 1993 1994 1995 1996 1996 1997 1997 2000 2001 2001 2003 2003 2004

History of Programming Languages

©2004 O’Reilly Media, Inc. O’Reilly logo is a registered trademark of O’Reilly Media, Inc. All other trademarks are property of their respective owners. part#30417

19601954 1965 1970 1975 1980 1985 1990 1995 2000 20022001 2003 2004

For more than half of the fifty years computer programmers have beenwriting code, O’Reilly has provided developers with comprehensive,in-depth technical information. We’ve kept pace with rapidly changingtechnologies as new languages have emerged, developed, andmatured. Whether you want to learn something new or needanswers to tough technical questions, you’ll find what you need in O’Reilly books and on the O’Reilly Network.

This timeline includes fifty of the more than 2500 documented programming languages. It is based on an original diagram createdby Éric Lévénez (www.levenez.com), augmented with suggestionsfrom O’Reilly authors, friends, and conference attendees.

For information and discussion on this poster, go to www.oreilly.com/go/languageposter.

www.oreilly.com

Page 33: Historie programovacích jazyků
Page 34: Historie programovacích jazyků
Page 35: Historie programovacích jazyků

Jacquardův tkalcovský stavJacquard’s Loom

První „programovatelný stroj“

Page 36: Historie programovacích jazyků

Difference Engine (okolo roku 1850)Charles Babagge

Page 37: Historie programovacích jazyků

Difference Engine (okolo roku 1850)Charles Babagge

Page 38: Historie programovacích jazyků
Page 39: Historie programovacích jazyků
Page 40: Historie programovacích jazyků

Úvod do programování Přednáška 2

Difference Engine (1822—1849)

→ Mechanický stroj→ Zpracování složitých výpočtů→ Nahrazení lidské práce (logaritmické tabulky)→ Babaggovi pokračovatelé jej skutečně sestrojili

Page 41: Historie programovacích jazyků

Úvod do programování Přednáška 2

Analytical Engine (1837—1871)

→ Parní stroj (externí zdroj energie)→ Vstup pomocí děrných štítků→ Výstup: text, obraz a zvuk (!)

→ Výstup: děrné štítky (!) „meta-programming“

→ Nerealizován

Page 42: Historie programovacích jazyků

Úvod do programování Přednáška 2

…the Engine might compose elaborate and scientific pieces of music of any degree of complexity or extent.— Ada Lovelace (1843)

Page 43: Historie programovacích jazyků

Úvod do programování Přednáška 2

Česky jako Mašina zázraků

Page 44: Historie programovacích jazyků

Úvod do programování Přednáška 2

ProgramovatelnostProgrammability

Page 45: Historie programovacích jazyků

Úvod do programování Přednáška 2

von Neumannova architektura→ Oddělení řídící jednotky a paměti→ Společná paměť pro programy (instrukce) a pro data → (modifikovatelnost instrukcí programem)

→ Základní důsledek: počítač je univarzální a lze jej přeprogramovat

Page 46: Historie programovacích jazyků

Úvod do programování Přednáška 2ENIAC

Page 47: Historie programovacích jazyků

Úvod do programování Přednáška 2ENIAC — „Program“ je nastavení kabelů a přepínačů

Page 48: Historie programovacích jazyků
Page 49: Historie programovacích jazyků

Úvod do programování Přednáška 2

Konrad Zuse, 1943Plankalkül (Gottlob Frege: Begriffsschrift — eine der arithmetischen nachgebildete Formelsprache des reinen Denkens, 1879)

John von Neumann, 1945DVA ZÁKLADNÍ PRINCIPY:„Shared-program technique“ — hardware mý být jednoduchý, nikoliv mít napevno zadané instrukce. Má být řízen komplexními instrukcemi, aby bylo možné hardware snadno přeprogramovat.„Conditional control transfer“ — pojem sub-routine, malého bloku kódu, který lze opakovaně volat a znovu použít. Základní idea, která odlišuje počítačový program od kuchynského receptu (sekvenční, chronologický). Kód je zapisován binárně, tzn. pomocí „nul a jedniček“.

Grace Hopper, 1952První kompilátor, překladač, který překládá z kódu v lidském jazyce do jazyka počítače pro programovací jazyk A-0.

ˇ

Page 50: Historie programovacích jazyků

Úvod do programování Přednáška 2

FORTRAN, 1954IF, DO (smyčky), GOTO, true/false a základní datové typy (řetězce, čísla)

Lisp, 1958Dynamické typování, objektově-orientovaný, matematická syntax, rekurze

COBOL, 1959Grace Hopper: Programovací jazyk by se měl podobat více přirozenému jazyku než jazyku strojů.Common Business Oriented Language: SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST.

Smalltalk, 1972Xerox PARC, objekty a třídy, „čistě objektový“, reflektivní, modifikovatelný za běhu

C, 1972Optimalizovaný, rychlý. Často slouží jako interpreter vyšších programovacích jazyků.

Page 51: Historie programovacích jazyků

Úvod do programování Přednáška 2

Perl, 1987Skriptovací jazyk, práce s textem, knihovny (CPAN), duct-tape of the internet

Java, 1995Objektový, nezávislý na platformě (Write once, run anywhere). Java <applet> běží v internetových prohlížečích.

PHP, 1995Dynamické webové stránky —  snadná integrace, zprovoznění. Masivní rozšíření — tzv. LAMP.

Page 52: Historie programovacích jazyků

Úvod do programování Přednáška 2

„GENERACE“ PROGRAMOVACÍCH JAZYKU

První generaceStrojový kód: 0 a 1. První počítače: přepínače, nikoliv text. Absolutní výkon. Závislý na hardware. Příklad: 10110000 01100001

Druhá generaceAssembler (assembly language). Závislý na hardware. Příklad: mov al, 61h

Třetí generaceČitelný a snadno zapsatelný lidmi. Většina moderních jazyků. Příklad: let b = c + 2 * d

Čtvrtá generaceReportovací nástroje, SQL (structured query language), domain-specific languages. Navržené pro konkrétní účel.Příklad: SELECT * FROM employees ORDER BY surname

Pátá generaceSynonymum pro vizuální programování nebo označení vývoje pomocí definic omezení, stroj sám má zkonstruovat algoritmus. Akademické použití.

˚

Page 53: Historie programovacích jazyků

Úvod do programování Přednáška 2

PŘÍSTUPY K PROGRAMOVÁNÍ (PARADIGMATA)

Procedurální programováníBud synonymum pro imperativní programování — prostá posloupnost kroků („recept“). Nebo označení pro programování stylem volání procedur (rutina, sub-rutina, funkce). Modularita.Zejména: PHP, Perl

Objektově orientované programováníObjekty, jejich vlastnosti a vztahy (Malý pes štěká na chlapce). Dědičnost, modularita, polymorfismus, zapouzdření.Zejména: Java, Ruby

Funkční programováníNepopisuje kroky algoritmu, ale matematické vztahy. Zejména: Lisp, Erlang

Vizuální programováníVytváření instrukcí a posloupností vizuálně, pomocí grafických reprezentací, nikoliv textem. Zejména: Max/MSP, Apple Automator

´

Page 54: Historie programovacích jazyků

Úvod do programování Přednáška 2

MAX/MSP www.cycling74.com/products/maxmsp

Page 55: Historie programovacích jazyků
Page 56: Historie programovacích jazyků

Úvod do programování Přednáška 2

The days when it made sense to do your own memory management in a new program are long over, outside of a few specialty areas like kernel hacking, scientific computing and 3-D graphics—places where you absolutely must get maximum speed and tight control of memory usage, because you need to push the hardware as hard as possible.

For most other situations, accepting the debugging overhead of buffer overruns, pointer-aliasing problems, malloc/free memory leaks and all the other associated ills is just crazy on today's machines. Far better to trade a few cycles and a few kilobytes of memory for the overhead of a scripting language's memory manager and economize on far more valuable human time.— Eric Raymond, Why Python?

Page 57: Historie programovacích jazyků

Děkuji!