Upload
karel-minarik
View
3.771
Download
0
Embed Size (px)
DESCRIPTION
Přednáška z cyklu Úvod do programování aneb Do nitra stroje na FFUK v Praze
Citation preview
Úvod do programování aneb Do nitra stroje
Karel MinaříkPŘEDNÁŠKA 2
Úvod do programování
Opakování1
Ú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
Úvod do programování Přednáška 2
Úvod do programování Přednáška 2
Vztah ke stroji
Úvod do programování Přednáška 2
Úvod do programování Přednáška 2
Úvod do programování Přednáška 2
HLEDISKO UŽIVATELE
Kontext×
KonzistenceHLEDISKO PROGRAMÁTORA
Ú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
Ú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
Ú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
Ú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
Ú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
Ú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
Ú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
Ú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.
Ú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
Ú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
Úvod do programování Přednáška 2
www.pine.fm/LearnToProgram (původní verze)
Úvod do programování Přednáška 2
www.poignantguide.net/rubyNEJBLÁZNIVĚJŠÍ UČEBNICE PROGRAMOVÁNÍ NA SVĚTĚ
Úvod do programování Přednáška 2
Ruby on Rails
Úvod do programování
Historie programovacích jazyků2
Úvod do programování Přednáška 2Ada Lovelace (1815—1852)
Úvod do programování Přednáška 2
Co je to programovací 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
Úvod do programování Přednáška 2
Programovací jazyk je umělý jazyk, který slouží k formální zápisu algoritmu.
Ú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.
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
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
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
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
Jacquardův tkalcovský stavJacquard’s Loom
První „programovatelný stroj“
Difference Engine (okolo roku 1850)Charles Babagge
Difference Engine (okolo roku 1850)Charles Babagge
Ú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
Ú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
Ú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)
Úvod do programování Přednáška 2
Česky jako Mašina zázraků
Úvod do programování Přednáška 2
ProgramovatelnostProgrammability
Ú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
Úvod do programování Přednáška 2ENIAC
Úvod do programování Přednáška 2ENIAC — „Program“ je nastavení kabelů a přepínačů
Ú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.
ˇ
Ú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ů.
Ú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.
Ú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í.
˚
Ú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
´
Úvod do programování Přednáška 2
MAX/MSP www.cycling74.com/products/maxmsp
Ú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?
Děkuji!