V mým světě u jednočipů je to denní chleba a bez paralelního programování si člověk neškrtne.
Jednoduchá deska s multiplexní segmentovkou, ADC, sériovkou a pár tlačítky. Jeden procesor, který současně
1. Měří hodnoty z ADC
2. Sleduje stisky tlačítek (včetně debouncingu)
3. Refreshuje hodnoty na displeji
4. Vypočítává zobrazenou hodnotu
5. Komunikuje po sériovce
6. Vykonává nějakou vnitřní logiku aplikace
7. Krmí watchdog
8. Sleduje napájení a při poklesu pod danou mez se uspí
A všechno pochopitelně v jednom okamžiku. Prostě ledničky, mikrovlnky, pračky, termostaty v místnosti, plynový kotel, stopky, elektroměry,... používají paralelní programování.
Proto se taky v embedded systémech používá z 90% ANSI C a jede se podle K&R nebo jiných knížek, kde se multitasking vůbec neřeší :D
Vývojáři mohou dělat a také dělají chyby při vývoji i v Ada, ale pravděpodobnost takových chyb je mnohem nižší, než při použití jiných programovacích jazyků.
Čím je to podloženo? Můžete například porovnat pravděpodobnost chyb v Adě a Javě (uvažme implementaci, jenž podporuje Real-Time Specification for Java)?
Jak si Ada vede při tvorbě konkurentních programů vůči jazykům jako ParaSail (mj. navržený rovněž Tuckerem Taftem) nebo Rust?
"Tím spíše je otázkou, proč učit Adu?"
na to si musis najit odpoved sam...
chapu, ze spousta lidi zde spise resi takove to "domaci" bastleni...
nicmene se muzes inspirovat treba tady
http://www.seas.gwu.edu/~mfeldman/ada-project-summary.html
Težko ověřit, protože to by zabralo opravdu HODNĚ dlouho a pravděpodobně nikdo by na to prostředky a čas nevynaložil. (Myslím tím, komplexní srovnání u programů s více než 100k řádek)
Každopádně, jelikož se ADA používá v letadlech, myslím si, že tvrzení je celkem oprávněno a lidé co vybírali jazyk pro použití v takto kritických systémech měli celkem jasnou představu o chybovosti programů v Adě.
Každopádně, jelikož se ADA používá v letadlech, myslím si, že tvrzení je celkem oprávněno a lidé co vybírali jazyk pro použití v takto kritických systémech měli celkem jasnou představu o chybovosti programů v Adě.
Tam se používá i C a C++ (například MISRA), tudíž si nejsem jist, zda z toho lze něco vyvodit. Navíc tam často jde právě o RT systémy.
Težko ověřit, protože to by zabralo opravdu HODNĚ dlouho a pravděpodobně nikdo by na to prostředky a čas nevynaložil.
Pak tedy nerozumím, proč to autor v článku tvrdí.
Jestli se nepletu, tak nam na MFF rikali, ze ADA je dite Pentagonu. Ten jazyk vznikl na zaklade pozadavku US ARMY. Je to pry take prvni priklad pouziti softwaroveho inzenyrstvi v praxi. Bylo to v hitorii poprve kdy specifikaci a samotnou implementaci psali ruzni lide.
Je to sice pruser ale jedna se jen o generatory u motoru - kazdy motor ma 2.
"If the four
main GCUs (associated with the engine mounted generators) were powered up at the same time, after 248 days of continuous power..."
Na leteckem prumyslu je krasne to ze se spoleha na redundanci na vsech urovnich vcetne te lidske,
I kdyby selhaly vsechny ctyri GCU, tak neni problem nahodit APU a vytapet s ni jeste bazen...:)
Na prechod nahleho vypadku staci baterie(ano ty dymajici;) nastesti se to netyka startovacich na APU a pripadu vybijeni;) 787 ma jednak po novu elektricke hydra pumpy na palube, ale take ma tradicni hydra pumpy pres mechanicky nahon v motorech. Takze se jich vypadek generator control unit nedotkne.
Na druhou stranu pokud bude cist pilot dva kilometry dlouhy checklist a odtukavat failed systemy tak ani tech 10 minut v baterkach nemusi stacit... Nekdy se za svuj obor dost stydim. Piloti nas musi mit dost za nezodpovedne <zdrobnelina od slova hlupak> a maji pravdu.
2x225kVa bohate staci. Asi se poleti v low power rezimu, takze vytapeni bazenu a sauna nebude k dispozici a kafe studeny...
Tak je jen otazka casu, kdy piloti z kokpitu zmizi. Ti v Boeingu pilotuji prumerne 7 minut za let, zatimco v Airbusu jen polovinu casu. Jsou drahy a litaj s letadlama do skal kdyz maj depresi :)
K veci - jak muze takova chyba vubec vzniknout? Nepouzivaji se formalni metody jako napr. abstraktni interpretace?
K veci - jak muze takova chyba vubec vzniknout? Nepouzivaji se formalni metody jako napr. abstraktni interpretace?
Formálně ověřit nějakou vlastnost může být docela náročné. Pokud tedy nástroj pro analýzu programu řekne, že něco neumí ověřit, tak se to IMO většinou nechá na lidech.
Navíc může být chyba v HW, chyba v kompilátoru jazyka, chyba v nástroji, co ověřuje vlastnosti programů - málokdy má kompilátor nebo pomocný SW formální důkaz správnosti.
Vše je navíc komplikováno faktem, že jazyky nemají formální specifikace.
Čím je to podloženo?
Silna typova kontrola. Jazyk navrzeny tak aby vyloucil nektere mnoziny chyb: napr.range checking by default; neexistuje dangling else; kontrola kompletnosti u case; detekce aliasingu; [silne omezeny] profil ve kterem je garantovano ze nemuze dojit k deadlocku; od Ady 2012 podpora kontraktu; standardizovana podpora pro distribuovane programovani (komunikace + synchronizace); to jestli task pobezi in-process, out-of-process nebo na jine masine je otazka zmeny konfigurace. Standartni knihovny kontejneru, podpora alokace v oddelenych memory poolech ktere muzou byt volitelne GC (standart GC povoluje, pry snad zadna implementace to by default nepodporuje ale je dostupna minimalne jedna open-source implementace zalozena na BoehmGC). Subset Spark s durazem na jednoznacnost a automatickou verifikovatelnost (samozrejmosti je moznost linkovat dohromady Adu, Spark, C, C++, Fortran a cokoli dalsiho).
Ada byla od zacatku navrzena predevsim pro "bezpecne programovani s ohledem na velke projekty s dlouhym obdobim podpory / v trvalem vyvoji", na ukor komfortu (je strasne "ukecana"). Read-Only jazyk ;-)
ParaSail je zatim work in progress (vypada hodne zajimave), ale pokud se nepletu implicitne pocita s virtualni masinou a GC, zatimco Ada bez ztraty mnoha featur jde pouzit i bez jejiho lehkeho run-timu. Rust je daleko vic high-level nez ADA (ve smyslu fetury, ne run-time naroky ;-) a rekl bych ze poskytne silnejsi garance pro kontrolu dynamickych alokaci. Oba dva "konkurenti" jsou ale zatim prilis mladi.
Ada u leta lita v letadlech (nejvic se vytahujou 707 myslim) a rizenych strelach, sedi na letistich, jezdi s vlacky, nejake uziti v medine a spousta dalsiho. Nejjednodussi je se podivat na to jak se na svych strankach vytahuji vyvojari (napr. AdaCore).
Vic o Ade nez root zvladne vypublikovat za 100 let (pro ty stastne kteri se neboji emerictiny ;-).
http://www.adacore.com/adaanswers/resources
http://www.adaic.org/ a http://www.adaic.org/learn/materials/
http://libre.adacore.com/ (GNAT GPL pokud vase platforma nema Adu ve spravci baliku ;-)
http://en.wikibooks.org/wiki/Ada_Programming
To samosebou něco říká, na druhé straně ale vzniká obrovské množství jazyků a nemálo z nich má podobné cíle. Proto stále pochybuji, že tvrzení
pravděpodobnost takových chyb je mnohem nižší, než při použití jiných programovacích jazyků.
je pravdivé (zvláště, pokud se nebudeme omezovat na jazyky pro RT systémy).
Oba dva "konkurenti" jsou ale zatim prilis mladi.
Souhlas.
v com je to lepsi oproti cecku s dostupnymi nastroji (http://www.astree.ens.fr/)?
Některé konstrukce se na Pascalu nedají ukázat
V Adě se snad dají ukázat všechny konstrukce?
že pro výuku vhodnější
Záleží pro výuku čeho. Pokud jde o výuku programování, pak si myslím, že je vhodnější dobře navržený vysokoúrovňový jazyk bez objektů. Například Standard ML.
Protoze jen tak mas aspon nejakou predstavu o tom, co pocitac bude ve skutecnosti delat.
Napriklad deklarativni jazyky casto spolehaji na nejakou implementaci vyhledani spravneho reseni. (Prolog, SQL, ...)
Funkcinonalni programovani se s imperativnim dost casto prolina. Nicmene i ja mam obcas problem s beznym syntaxem funkcionalniho programovani, proste proto, ze chci zapsat:
objekt_a -> transformace1(parametr1) -> transformace2(parametr2) -> transformace3(parametr3) -> zapis do promenne_b
a musim napsat:
promenna _b = transformace3(parametr3, transformace2(parametr2, transformace1(parametr1, objekt_a)))
Coz je takove pekne lispove, ale spatne citelne. Protoze program by mel predevsim vyjadrovat to, co chci udelat. Pokud zapis odpovida tomu, jak o dane veci zrovna premyslim, tak je vyrazne citelnejsi.
Ovšem to co jsi napsal, tedy:
objekt_a -> transformace1(parametr1) -> transformace2(parametr2) ->
transformace3(parametr3)
je s pomocí jednoduchého makra (Clojure, Lisp) přepsatelný na
-> objekt_a transformace1(parametr1) transformace2(parametr2) transformace3(parametr3)
a s jiným makrem by šlo ty šipečky psát klidně i mezi transformace (akorát to asi nikdo zatím nepotřeboval, ale klidně bych si troufnul to makro napsat)
[hint pro Google: threading macro]
No, ano, v dostatecne vysokourovnovych skriptovacich jazycich je mozne napsat
"aplikator" (at uz to bude makro, nebo funkce, nebo objekt).
Jen se mi ho nechce pro kazdy jazyk psat znovu a vymyslet, jak to udelat obecne, kdyz se mi tam budou michat (globalni) funkce a metody toho objektu, tak aby to zustalo citelne.
To jak o dane veci premyslis nemusi znamenat ze tak budou premyslet ostatni lide v tymu. Citelnost daneho kodu tak muze byt znacne subjektivni zalezitost.
To ze o dane veci nejak premyslis neznamena ze to bude dostatecne prehledne napsano tak, aby se kolem nesesel hloucek lidi "co tim chtel basnik rici".
Pokud bude ta vec "bez zahusteni" napsana na jednu, nebo dve radky misto na deset, tak to vyrazne zvetsuje rozhled (kontext) ctenare programu.
Jako ilustraci, kde je to videt asi nejlepe je pythonovske:
[ foo(x) for x in bar if foobar(x) ]
misto extremniho pseudokodu (je fakt, ze podobne hrozny byl snad jen bash):
ret = array()
for (int i=0; i<bar.length(); i++) {
if (foobar(bar[i])) {
ret[ret.length()] = bar[i]
}
}
Oboji je napsano blbe. Kod dole vratim vyvojari k prepsani.
Kod nahore v pythonu opatrim komentarem ze by to mel rozdelit aspon v te podmince protoze clobrda co to po nem bude zkoumat v te hromade kodu tohle prehledne. Mezitim mne predbehne asi nekdo kdo dela review a "usmerni" juniora z matfyzu. A to nemam kdovijake naroky na citelnost a kvalitu ( v pythonu by to byl asi stejne normalni neuzitecny webovy odpad ) jako vyvojari avioniky kde se diskutuje o kazdym znaku.
Jde o to ze kdyz do toho bude nekdo cucet, tak pythonovskeho radku si nevsimne podminky a druhy radek je tak priserny ze to zas prepise aby to bylo citelnejsi.
> má se věnovat obligátnímu Pascal/Delphi/Lazarus a ne historickým slepým uličkám jako Ada
Jako kdyby pascal nebyl slepá ulička. Každý kdo ho v roce 2015 cpe studentům by zasloužil na náměstí sešlehat fraktálním dildem.
Na druhou stranu bych jako programátor možná měl být rád, alespoň mám míň konkurence.
Když učím programování, tak učím primárně někoho programovat! Je to stejné jako v autoškole - měli by Vás naučit řídit auto + pravidla provozu - nikoliv naučit řídit škodovku.
Každá doba má svoje dogma - když jsem začínal, tak platilo, že kdo začínal na Basicu bude zkažený a kdo začínal s OOP bude king. Dneska máte tuny zbastlených OOP aplikací a pořád se hledá způsob jak správně programovat OOP a do toho se tlačí funkcionální programování, a tak pořád dokola ... Pro dobrého programátora je jedno, kterým jazykem začíná - základem je, aby měl k programování vztah - programovací jazyk je jen nástroj.
Ehm: <i>"Pro dobrého programátora je jedno, kterým jazykem začíná"</i> - to si delate legraci, ne?
Jak muze nekdo byt dobry programator, kdyz jeste nezacal?
A hlavne jak muze byt dobry programator, kdyz ho silene komplikovane a primitivni jazyky (C++, Java, Pascal nebo i ta Ada) naucily, ze programovani je "opruz", protoze kdyz chce neco udelat, musi resit tisice problemu, ktere nesouviseji s problemem jaky ma, ale s pouzitym jazykem, a tak se rozumne rozhodl, ze pujde radsi studovat sociologii, protoze na tohle nema?
Ja jsem skalopevne presvedceny, ze zacinat je treba tak, aby to dotycneho bavilo - tj s jazykem, ktery je minimalisticky (tj. staci znat par konceptu a muzu zacit programovat), a zaroven neni omezeny (tj. kdyz pokrocim dal, nechci abych zjistil ze jazyk treba nema lambda funkce, closures, apod.) a zaroven se mi nesnazi stat v ceste (tj. kdyz chci nekam nacpat pole, tak napisi [1, 2, 3] a nemusim na 4 radkach vytvaret objekt, a po jednom do nej cpat hodnoty.. napriklad).
Tj. je potreba jazyk, ve kterem jsou "snadne veci snadne, a slozite veci zvladnutelne".
Napriklad z meho pohledu dnes toto naplnuji: Python, Ruby, Clojure (!!) a urcite i dalsi.
Bohuzel ADA je v tomto zcela na urovni "snadne veci komplikovane a slozite veci jeste komplikovanejsi".
Nicmene urcite lepsi nez lidem znicit mozek pomoci monstrozniho frankensteina zvaneho C++
Ne, nic takového opravdu nepředpokládám. Jen jsem zastáncem toho názoru, že začátečníci by měli dostat do ruky něco prakticky použitelného a ne nepraktické krámy vhodné jen pro výuku. Učit začátečníky dneska pascal je stejné, jako učit na základce latinu. Gratuluji vám studenti, teď jste zvládli cizí jazyk a pochopili na něm některé koncepty. Nyní ho račte zapomenout a naučit se něco použitelného, protože k ničemu kromě pár historických omylů není.
Spousta z nich se dál programování na vyšší úrovni věnovat nebude a rozhodně se nebudou učit pět dalších jazyků, to z nich udělá jen minimum. Většina by však upotřebila různě v životě mít možnost si věci scriptovat, to vidím všude kolem sebe.
V pascalu se praktická využitelnost blíží nule, i když by člověk zrovna chtěl. Byl to problém už tenkrát při přechodu z Win98 na WinXP, jak je tomu v dnešní době s Win8 a mobilními zařízeními si ani nedělám iluze. Nehledě tedy na to, že komunity jsou mrtvé, knihoven vzniká minimum, ..
Jen jsem zastáncem toho názoru, že začátečníci by měli dostat do ruky něco prakticky použitelného a ne nepraktické krámy vhodné jen pro výuku.
Studenti informatiky na VŠ by měli dostat do ruky něco, co je dobře navrženo - nejspíše se tím totiž budou sami inspirovat.
Bohužel mainstreamové programovací jazyky jsou navrženy dost podivně - už takové základní věci jako proměnné nebo "rovnost" tam jsou špatně. Nemluvě o tom, že tam neplatí ani základní zákony aritmetiky jako asociativita sčítání.
Nelíbí se mi, jak z Clojure prosakuje JVM - to je možná výhodné pro praktické použití, ale jazyk to komplikuje.
Příkladem jsou protokoly, které tam jsou AFAIK proto, že jsou efektivnější než multimetody. Nebo absence TCO - místo toho je třeba použít trampolínu. A nakonec celé Java Interop.
dozví se o transakcích (a to možná pochopitelnějším způsobem než později při probírání DB) a ten jazyk je navíc praktický.
S tím souhlasím, podpora pro konkurentní programování je v Clojure velmi dobrá a navíc je to jednoduché (na rozdíl od Haskellu).
Jo to je pravda, TCO by se hodilo (minimálně pro výuku, zvláštní je, že v praktických programech jsem ještě nepotřeboval ani recur :-)
Jinak je dost škoda, že se na našich SŠ tak moc drží Algolské jazyky, vede to k docela jednostrannému pohledu na problematiku, to se v praxi těžko napravuje (navíc se to často v hodinách zvrhá jen na popis syntaxe, kterou mají Algolské jazyky zbytečně košatou).
Student by si neměl plést programování s matematikou. Pokud je více low level zaměřený tak by hlavně mel zhruba vědět co Compiler asi vyrábí za instrukce pro danou arch a jak psát kód aby ho mohli číst I jiní z týmu. Obvykle je I přehlednost více zadaná nes nějaký Brutus algoritmus v pěti radkach který nikdo nedesifruje.
„Studenti informatiky na VŠ by měli dostat do ruky něco, co je dobře navrženo - nejspíše se tím totiž budou sami inspirovat.“
Podstata programování se dá vysvětlit pouze na čistých konceptech bez balastu (má pár jazyků) a pak studenta konfrontovat s praktickými implementacemi těchto konceptů v používaných jazycích, aby bylo zřejmé, jak to kdekterý samozvaný vořežprut zkurvil. To, si myslím, je nejlepší školou.
Musím oponovat, ale základy latiny byly jedním z nejužitečnějších předmětů, který mi na střední škole vtloukli do hlavy. Nejen kvuli dalsim jazykům (nejsem humanitní typ), ale především kvůli přírodním vědám. Je úplně jiné kafe skutečně rozumět odborné terminologii než s ní zacházet jako s magickými formulemi.
Jo, to si pamatuju dodneška z přednášek - plusplusáků z průmek byla narvaná aula, všechny ostatní jazyky odmítali se slovy, že přece „takové pičoviny se učit nebudou“.
Osobně považuju C++ za jednu z největších sraček, co kdy vznikla, a pro výuku programování vyloženě za škodlivý.
http://en.wikipedia.org/wiki/Design_by_committee
Vypada to ze na tech vysokych skolach stale porad neco vynechavaji... a tim nemyslim v tomto pripade ty technicke.
C++ jeste neni tak hrozne. Da se to ucit postupne behem pouzivani. Je to sice slepenec, ale alespon se trochu snazi o to, aby kdyz se clovek nauci nejakou jazykovou konstrukci, tak mu fungoval vicemene vsude. Narozdil treba od PHP, to je slepenec, ktery se snazi cloveka odnaucit nove konstrukce, protoze vetsinou funguji jen v zakladnim pripade a kombinace dvou pokrocilych konstrukci vyhodi chybu kompilace. (No dnes uz je to mozna o trosku lepsi, tenhle pocit mam z doby PHP 5.2)
Ehm: <i>"Pro dobrého programátora je jedno, kterým jazykem začíná"</i> - to si delate legraci, ne?
Jak muze nekdo byt dobry programator, kdyz jeste nezacal?
no predstavoval bych si to asi jako kdyz dobry muzikant sedne k jakemukoli nastroji a po chvili ladeni atd. na to ciste zahraje. proste nekdo ma talent, nekdo to nadre a nekdo jenom keca a cumi. ale to asi tezko pochopis ;-)
No, protože umět programovat a umět programovací jazyk je dost rozdíl (a, bohužel, v druhém případě je to dost vidět).
Třeba já začínal bez programovacího jazyka. S něčím, čemu se říkalo vývojové diagramy. Pak "programovací jazyk" Karel. Pak Basic a od 12 let assembler.
Ne každý rozumí C/C++ od narození, jako ty.
Pascal/Delphi je možno chápat jako jistou podmnožinu jazyka C/C++, mnoho věcí funguje stejně jenom se to jinak zapisuje, tudíž student nabyté znalosti využije i v praxi v C/C++/C#. Navíc je v tom možno vytvořit GUI aplikaci v krátké době, tudíž to studenty baví. Najít něco obdobného je dost oříšek.
> Ne každý rozumí C/C++ od narození, jako ty.
Myslím, že do mého příspěvku vkládáš vlastní projekce. O C/C++ jsem neřekl ani slovo, podle mého názoru jsou jako první jazyk možná ještě více nevhodné, ale alespoň ne nepraktické a mrtvé.
Já na pascalu začínal. Naučil jsem se ho sám, chvíli mě bavil, než jsem zjistil, že už v roce 2004 to byla mrtvola, s minimální podporou knihoven, komunity a všeho. Moc dobře tedy vím, o čem mluvím. Je to jazyk k hovnu, zombie obvázaná obvazy, dnes beznadějně mrtvá, kdyby nebylo těch pár lidí, co ho za každou cenu musejí učit, protože o něm tvůrce (kdysi!) prohlásil, že je vhodný k výuce.
> Pascal/Delphi je možno chápat jako jistou podmnožinu jazyka C/C++
To jsi co fetoval?
Pokud nechceš začátečníka posadit rovnou k C++/C#/Java, potom je k hovnu skoro všechno. Rozdíl je v tom, že v Pythonu nebo Javascriptu začátečník nepochopí správně základní programovací techniky a při přechodu na C++/C#/Java bude značně rozčarován.
> To jsi co fetoval?
Tvrzení je pravdivé, základní programovací postupy jsou víceméně stejné.
" Rozdíl je v tom, že v Pythonu nebo Javascriptu začátečník nepochopí správně základní programovací techniky a při přechodu na C++/C#/Java bude značně rozčarován."
Napriklad?
Zakladni konstrukty typu promenna, podminka, cykly? Nevidim problem.
Funkce? Opet zadny problem. Navic jsou first class.
Typy? Pochopi, neseznami se se statickym typovanim. V pythonu se alespon seznami se sylnym typovanim.
OOP? V Pythonu asi lepe nez v C++ a pokracovatelich. V JS proste jinak.
Rekurze? Neni problem.
Pointery? Clovek je musi pochopit cestou, ale musi to byt v prvnim jazyce?
Dost záleží na tom, co má být cílem toho předmětu. Pokud všeobecný úvod do programování - který je dnes víceméně nutný v mnoha disciplínách - tak se bez všech těch zmínených věcí dá obejít, jejichž přidání by spíš ty základy zamlžilo.
Pokud to má být předmět pro budoucí lidi z IT, tak by asi měl být konstruován jinak.
Tak notna cast z toho jsou proste volby, ktere ne kazdy vnima jako pozitivni. Jinak predpokladam, ze kdyz mluvis o typove kontrole, tak myslis "staticke typovani"?
A vazne netusim, co z toho by bylo potreba v jazyce pro prvni programy a co z toho by se rekneme kvuli pouzivani Pythonu stalo v budoucnu obtizne naucitelne.
(Uplne stejne bych mohl zacit argumentovat proti vyuce v Jave protoze nema pointery nebo proti vyuce v Haskellu, protoze obvykle nema dependent types)
Nemluvim o tom, jak se uci ted ale o tom, jak se uci vzdycky - vzdycky musis najit nejaky vhodne velky kus k vysvetleni a pozdeji zjistis, ze kus z toho kusu proste neni presny, je zavadejici... Pekne je to videt trebas na vyuce evoluce - na zakladce proste nemuzes na deti vytahnout modely neutralni evoluce, takze je proste naucis, co jde (+- Darwina), a na vejsce jim to halt nekdo musi vytlacit z hlavy a nahradit presnejsim.
Zivi mne hlavne Java, smocil jsem si prsty v Haskellu, Cecku, Pythonu, Rku, Prologu, Groovy, Pascalu...
Takze: v Pythonu je to uplne spravne. Stejne spravne jako v Haskellu nebo Prologu.. nebo v te Jave. Adekvatne ucelu.
Ze se pri tom typy neresi neni pravda, typovani v Pythonu je silne.
Jiné typování než statické neexistuje:
Tak urcite. Ted se muzeme zacit trumfovat delkou brad akademickych autoru, kteri tvrdi ruzne veci. ja si mohu vytahnout trebas Erika Meijera.
Bud jak bud to nic nemeni na tom, ze Python to udelal vzhledem k ucelu a dobe vzniku vicemene dobre.
(jenom na okraj - jsem fanda spis statickeho a silneho typovani s typovou inferenci, kde to jde, ale fakt si nemyslim, ze to je "spravne" reseni. Spravne reseni to je pro nektere ucely. A kdo mel v rukach par zacateciku vi, ze ze zacatku jsou radi za kazdy cyklus, co zvladnou, a to, ze za par let mozna potkaji jazyky, ktere se na veci divaji hodne jinak, je jedno - maji problem prezit pristich par tydnu)
A kdo mel v rukach par zacateciku vi, ze ze zacatku jsou radi za kazdy cyklus, co zvladnou, a to, ze za par let mozna potkaji jazyky, ktere se na veci divaji hodne jinak, je jedno - maji problem prezit pristich par tydnu
S tím souhlasím, také nenavrhuji Coq nebo něco podobného, ale navrhuji Racket a Standard ML, což jsou decentní jazyky.
Bud jak bud to nic nemeni na tom, ze Python to udelal vzhledem k ucelu a dobe vzniku vicemene dobre.
Jak jsem zmínil výše, vadí mi i takové drobnosti jako (něco z toho platí i pro Python):
canEqual
),Dříve jsem si myslel, že Python je dobrý jazyk (ale moc jsem se o něj nikdy nezajímal), pak mi dal JS1 následující odkazy a už si to nemyslím:
Jazyk Standard ML vznikl (1990, revize 1997) dříve než Python a přesto mi přijde mnohem lépe navržený. Viz například formální specifikace The Definition of Standard ML, Revised a seznam chyb Defects in the Revised Definition of Standard ML.
Mj. z výše zmíněných nedostatků řeší Standard ML vše kromě "aritmetika s čísly v plovoucí řádové čárce je složitá".
Tak urcite. Ted se muzeme zacit trumfovat delkou brad akademickych autoru, kteri tvrdi ruzne veci. ja si mohu vytahnout trebas Erika Meijera.
Tohle je o tom, že po roce 1990 vznikl standardní způsob, jak specifikovat programovací jazyky (přesněji jejich core kalkuly) a jejich typové systémy, který dnes drtivá většina lidí z oboru používá. Osobně nevidím žádný důvod, proč vytvářet definice, které jdou buď proti tomuto standardnímu způsobu (dynamické typování), nebo nemají žádný přesný význam (např. silné typování).
Vytáhněte Erika Meijera.
Mohl bych poprosit o vysvětlení předposledního odstavce?
Jak chápu silné vs statické typování já, jde o to, že:
1. Objekt má nebo nemá konkrétní typ. Pokud má (Python), je možné se na něj zeptat a dá se očekávat, že se bude chovat nějakým způsobem. Pokud nemá (Perl, JavaScript, ale třeba i C s přetypováváním ukazatelům a prací přímo nad pamětí nebo Java s přetypováváním na Object a zpět), v závislosti na kontextu je to pro nás jeden typ nebo jiný typ. První případ nazýváme silným typováním, druhý slabým.
2. Chlívek/štítek striktně obsahuje (odkazuje na) hodnotu určitého typu daného obyčejně deklarací. To je statické typování. Pokud je ten chlívek nebo štítek typově agnostický, je to dynamické typování.
Co je na takovém dělení špatné nebo proč Ti to připadá neužitečné?
Obvykle má zpracování programu dvě fáze - statickou a dynamickou. Statická fáze je to, co se děje před spuštěním (parsování, typová kontrola), a dynamická fáze je vykonání programů, které úspěšně prošly typovou kontrolou.
Programy, jenž neprošly úspešně typovou kontrolou, se obvykle nevykonávají - ani se jim nepřiřazuje význam.
Typový systém je sada pravidel, jak přiřadit typy částem programu - například výrazům. Tj. typy nejsou přiřazovány jen hodnotám jako například číslu 5
nebo řetězci "ahoj"
, ale i celým výrazům například cos x + i*sin x
.
Existují různé typové systémy (sady pravidel) - v některých mohou typy obsahovat kvantifikátory, příkladem je typ prázdného seznamu ∀x.[x]
. Často pak můžeme za vázanou typovou proměnnou dosadit (např. za x
) a dostat tak jiný typ (takto například můžeme odvodit, že prázdný seznam má nekonečně mnoho typů). Typové systémy s podtypovým polymorfismem obsahují pravidlo subsumce, které říká, že má-li výraz e
typ s
a je-li s
podtyp t
, pak má výraz e
typ t
. Výraz tedy může mít neomezeně mnoho typů.
Typový systém rozděluje výrazy programu do skupin a říká, jaké výrazy jde použít v jakých situacích.
Programům, jenž prošly typovou kontrolou, je přiřazen význam - sémantika. Například operační sémantika určí, jak se mají výrazy vyhodnocovat. Zde už se typy nepoužívají. Výraz se vyhodnocuje tak dlouho, dokud to jde. Vyhodnocení tedy nemusí skončit. Když už nejde výraz dále vyhodnocovat (neexistuje žádné pravidlo operační sémantiky, které by šlo na výraz použít) máme buď hodnotu nebo chybu (angl. stuck). Například operační sémantika neříká, co dělat s výrazem 1 + Pes()
, tudíž máme chybu.
Smyslem typového systému je, aby se předešlo chybám. Typový systém, který to dokáže se nazývá korektní. Obvykle se dokáže, že 1) postupné vyhodnocování nemění typ (preservation) a 2) má-li výraz pevný typ, tak je to buď hodnota nebo jde vyhodnotit (progress).
Pozn.: U některých jazyků se typ výrazu mění při vyhodnocování, tudíž se to musí dokázat trochu jinak.
Typ tedy předpovídá nebo odhaduje chování výrazu při vyhodnocování, korektnost typového systému neboli typová bezpečnost zajišťuje, že tyto předpovědi jsou správné.
Například jazyk C není typově bezpečný neboť tam můžete přetypovat cokoliv na cokoliv jiného.
Například Python definuje sémantiku pro všechny výrazy, co se podařilo naparsovat - tedy neprobíhá žádné rozdělování výrazů do skupin s tím, že na určitých místech jde použít jen některé výrazy - například vyhodnocení výrazu 1 + Pes()
může vyhodit výjimku (sémantika výrazu je definována). Můžeme to chápat tak, že v Pythonu existuje pouze jedna skupina výrazů, pouze jeden typ.
Hodnoty v Pythonu mají tzv. tagy - nesou si nějaký štítek, z něhož lze zjistit například název třídy. Podobně mají i některé hodnoty v Javě štítek a také tam lze zjistit název třídy, ale tento název třídy není typ - například můžeme vytvořit instanci třídy Pes
a uložit ji do proměnné typu Zvíře
- pak je typ proměnné Zvíře
, ale hodnota má štítek Pes
.
Na rozdíl od typů štítky (neboli tagy) existují za běhu programu a jsou pouze na hodnotách, nikoliv na výrazech. Na hodnotě obvykle bývá nejvýše jeden štítek, ale hodnota může mít nekonečně mnoho typů.
Díky za odpověď. Nemůžu říct, že by to nedávalo smysl, ale podle mě je to prostě jiné pojetí ontologie. Když je v Pythonu (nebo jiném OO jazyku, třeba Smalltalku) nějaký objekt instancí třídy Pes, prostě je to pes a chová se jako pes. Tam, kde se typy deklarují (inferují) staticky, tam je samozřejmě úplně jedno, že jde o psa, jednou se rozhodl chovat jako Zvíře a už z toho nemůže vyskočit (no, v Javě a dalších jazycích může, ale to je spíš smutné).
Proti teorii typů vystupovat nechci, užitečná je, ale v praxi mi přijde zbytečné argumentovat tím, že daná hodnota má štítek, protože pes prostě JE pes. Je instancí třídy Pes a v Pythonu na to existuje funkce type(), která vrací typ objektu. Jelikož tvrdíš, že v Pythonu existuje (ze statického pohledu) pouze jeden typ, nevidím smysl to dále zkoumat touto optikou a musíme použít jinou. Zásadně nesouhlasím s používáním pojmu "typový štítek", protože to není pojem ontologický, nýbrž implementační. Pokud to mělo být pouze k dovysvětlení, OK, tam mi to nevadí. Pak se vracíme k dilematu typ výrazu a typ hodnoty. V čase běhu programu má každý objekt v Pythonu jednoznačný typ (je instancí třídy), tj. hodnota má typ. Jestli je daný štítkem nebo čím jiným je přece jedno, programátora to nezajímá a z hlediska ontologie to nic neřeší.
Pro programátora to má význam v tom, že se může spolehnout na informaci dostupnou v době běhu programu (prostřednictvím type() například). Dokonce ale, s určitou mírou jistoty, lze typy dovozovat i statickou analýzou, pokud do hry nevstupuje eval vstupu od uživatele apod. Pak, přestože Python nebyl navržen s přihlédnutím k teorii typů, lze dosáhnout podobného výsledku jako u jazyků typu ML. Problém vidím spíš v tom, že Python nemá algebraické datové typy a věci okolo. Tam mi ty typy začínají teprve dávat pořádný smysl, protože už neslouží pouze ke kontrole správnosti, ale umožňují jasnější vyjadřování myšlenky programem.
BTW docela dobrá skriptíčka o typových systémech jsou z kurzu Type systems, jenž pořádají francouzské univerzity.
Ono by to asi chtělo rozlišit na studenty, kteří mají o programování opravdu zájem a těm to vysvětlit od začátku pořádně.
A ty, kteří se to učí jen proto, aby věděli, že něco takého vůbec existuje, tak těm naordinovat třeba Scratch.
Samotná výuka se dá značně vylepšit přístupem vyučujícího, který by měl mít předpřipravené projekty a na nich vysvětlovat jednotlivé kusy. Podle mě i průměrný student dokáže pochopit OOP paradigma bez problémů, když se mu to dobře podá (např. že třída může být něco jako forma na bábovky, nebo že pracujeme s odkazy na objekty což je něco jako telefonní číslo na známého, podobně s ukazeteli atd.).
OK (uvažuju hlavně Python):
není deklarace proměnných - to je koncept poplatný určité skupině jazyků, každý pochopí hned, když se mu řekne, že než nějakou proměnnou začne používat, musí to v jazyce BŽ napřed nahlásit
typová kontrola - typová kontrola při kompilaci? v jazyce BŽ není možné všechno strkat kamkoliv, když nadeklarujete typ, musíte ho držet (jasné hned). Navíc v jazyce DŽ není možné stejnému jménu přiřadit jinou hodnotu nikdy!
předávání parametrů odkazem - u nás jsme všichni odkaz
case - no to záleží jaké case máme na mysli - v jazyce BŽ je to syntaktický cukr pro if/else, v jazyce DŽ se bavíme o variantách hodnot jedné proměnné, v jazyce FŽ jde o pattern matching, ne, fakt nejde o regexpy
overloading - nevedeme (dost specifická záležitost, něco jako multimetody v jiných jazycích)
interface - nepotřebujeme, máme násobnou dědičnost, na rozdíl od jiných...
funkční multithreading - z hlediska teorie máme, v praxi záleží na okolnostech, umíme ale navíc multiprocessing, asyncio a jiné finty
Nemá smysl to takto dál pitvat, každopádně i myslím, že je lepší se naučit používat základní datové struktury a koncepty a pak si ukázat, jak to řešit v C (spojový seznam, dynamicky alokované pole, pointerová aritmetika) než se trápit s hello worldem a přemýšlet, proč má main návratovou hodnotu int nebo void, jestli je parametr *arg[] nebo **argv, kde použít printf() a kde puts() atd.
Nehledě na to, že moderní programovací jazyky přicházejí často s konstrukcemi ve světě C/Pascalu/Ady apod. nevídanými. A mainstream (C#, Java, C++) to nějakým způsobem reflektuje.
Já nic neobhajuju. Programuj si klidně v C++, pokud Ti přijde nezprasené nebo v jakém jazyce se Ti dělá nejlíp a nejvíc vyděláš, to je fuk. Jenom tvrdím, že k výuce základů programování podle mě nejsou C++, Java, Ada ani Pascal vhodné a svoje argumenty jsem uvedl.
Ten zbytek je na jinou debatu a na tu nemám náladu tady ani jinde, sorry. Já se snažím k problematice přistupovat profesionálně a když po mně zákazník bude chtít, abych naprogramoval neco v APL nebo Cobolu, udělám to. Z jazyků mě momentálně nejvíc zajímají Haskell a Rust a Python mě živí. Jeho slabiny znám velice dobře, ale snažím se je vidět v souvislostech, protože žádný superjazyk se samými výhodami a bez nevýhod neexistuje, jinak by nikdo nic jiného už na nic nepoužil.
Mně by ten Python nepřišel úplně špatný. Když to vezmu obecně, řekl bych, že:
1. By to měl být jazyk, u kterého Hello world nepotřebuje 10 řádků kódu, aby šel vůbec spustit.
2. Jazyk nepotřebuje šílené IDE, pokud bude mít REPL, o to lépe.
3. Asi bych preferoval syntaxi ala Algol před Lispovou.
4. Měl by mít k dispozici ideálně nějaké vyšší abstrakce, ne jenom větvení a cykly a komplexnější datové struktury (množiny, hashe apod.). Jestli by byl dynamický nebo statický je mi vcelku jedno. Obojí má výhody a nevýhody.
Fuj, Pascal. Klasickej Pascal je v praxi nepouzitelna historicka vykopavka, Object pascal byl totalne zprznen, treba tim ze na rozhrani nalepili spravu pameti. Nebo ze pres veskere kecy o bezpecnosti neni pouziti jinak typovane konstanty hlaseno jako chyba. O neco bezpecnejsi nez C, ale treba oproti Ade se neda mluvit o typove bezpecnosti. Dangling else. Pokud si dobre pamatuju, desny bordel mezi stringem, ansistringem, pcharem a unicode stringy. A na kazdem foru nekolik totalnich pitomcu kteri masturbuji u toho kdyz si opakuji jak uz _ciste_ begin/end dela z pascalu _radove_ lepsi jazyk nez C.
Kdyby FPC neprevzalo tuhle historickou bagaz, a naopak podporovalo veci ktere ma Delphi davno (advanced RTTI, runtime packages), byla by to skvela (no dobre, prijatelna, s Lazarem nebo CodeTyphonem potom skvela) platforma.
Delphi je pouze pro masochisty kteri se chteji nechat od Embarcadera dojit a pritom masirovat bicem. A flexibilne menit smer podle toho kam Embarcadero rozhodne ze jejich zakaznici pujdou. A hledat nahradu za knihovny ktere se Embarcadero rozhodne zabit. A obchazet chyby, ktere se Embarcadero rozhodne neopravit. Chce Vase spolecnost jezdit na Delphi konference ? Tak to byste asi nemeli nakrknout Embarcadero (napr. udelat neco lip), jinak zacnou konfere vyhrozovat ze ji nedaji slibene penize pokud Vam dovoli prezentovat. Jestli mate radi Microsoft, budete milovat Embarcadero ;-)
Jde o návyky, které jsou obdobné jako v C++/C#/Java a pouze pro studenty, které není možno posadit k C++/C#/Java. Student se pak nemusí pak složitě přeučovat jinak. Nikde není psáno, že v praxi musíš dělat tohle.
Co se týká směrování, tak to je všude stejné, i v C++/C#/Java to rozhoduje pár jedinců.
Dobry den,
vazim si toho, ze se snazite vytvaret ekosystem k vyuce programovani. Mam ale pocit, ze timto zpusobem jen rozdelite studenty na dva tabory. Jedni budou celou vyuku nenavidet a jen mensi skupina milovat.
V soucasnem svete takto prijdete o spoustu potencialnich studentu, ktere proste Vas material (at je kvalitni sebevic) nezaujme do x sekund a prejdou na facebook nebo k nejake hre. K lidem, ktere bavi fyzika se s Adou mozna vubec nedostanete a k tem, ktere bavi umeni uz vubec ne. Pritom tito vsichni budou ve sve praci potrebovat znalosti programovani. Minimalne ke komunikaci s nama programatorama.
Cca pred rokem jsem dostal dotaz: "Co se mam ucit, kdyz se chci naucit programovat?" Nez jsem zacal hledat "jazyk", tak jsem si nastavil kriterium, aby bylo lehke vytvorit malou grafickou aplikaci a aby existovalo velke mnozstvi zajimave dokumentace nejen pro nadsene programatory. Jazyk anglictina, kdyz uz se ted uci skoro od materske skoly, tak by to snad na konci zakladky a zacatek stredni nemel byt problem. Priznam se, ze prvni co me napadlo byl Pascal a ted vim, ze by to asi bylo i dobre doporuceni, protoze na strojarne v Brne se uci Delphi.
Nakonec jsem doporucil Processing.
Nejvic me asi presvedcila kniha Processing A programming Handbook for Viual Designers and Artists Reas and Fry.
Duvody?
Skvela dokumentace - nemusim nic pripravovat sam
Dalsi zajimava kniha je The Nature of Code od Daniel Shiffman. Zajimave programovani fyzikalnich jevu a je dokonce zdarma na webu http://natureofcode.com/
Dalsi mozny postup k robotum, protoze Arduino se s processingem docela kamaradi
http://playground.arduino.cc/interfacing/processing
a takovy Sparki robot pouziva IDE, ktere je napsane v processingu.
Mame tu taky ProcessingJS - interpreter processingu do javascriptu, takze je mozne (podmnozinu) praci ukazat primo interaktivne na www strankach http://processingjs.org/ jak to treba dela in kniha The nature of Code
http://natureofcode.com/book/chapter-3-oscillation/ Cviceni 3.1
Amen. Kriticke je zacatecniky motivovat a to jde nejlepe snadnymi uspechy na zacatku.
Z toho duvodu neco jednoducheho, s bohatym API (idealne kreslicim a hrajicim a interagujicim) a s REPLem.
Ja bych vzal Python, ale naprosto chapu, ze nekdo zvoli Scheme, Haskell, Processing... C++ nebo Ada jako uvodni jazyky nechapu.
Tady se silně přeceňuje vliv jazyka na výuku - mnohem důležitější jsou znalosti učitele, jeho pedagogické schopnosti, schopnost odhadnout, čeho je konkrétní student schopný, případně motivovat ty schopnější studenty k obtížnějším úlohám. Jestli to je Python, Lua, Visual Basic, C, PHP je více méně jedno. A samozřejmě něco jiného je výuka na základce, na střední škole, na vysoké škole, a něco jiného se by měli učit budoucí botanici, něco jiného strojaři a něco jiného budoucí programátoři. Navíc studenti i učitelé jsou individuality - s vlastním myšlením, s vlastním vnímáním světa.
Kdo má tendence k programování, tak může začít s tím nejhorším jazykem - a možná se naučí víc, protože nebude mít uhlazenou cestu. Kdo k programování nemá vazbu, tak mu Python, Processing nepomůže.
Ano, ucitel je extremne dulezity. To nema smysl popirat.
Ale hodne bych se divil, ktery ucitel bude tlacit zaky do drsnych jazyku hned na zacatku - jazyk (prostredi...) mu mohou velmi vyrazne pomoci motivovat.
Jo. Ale velka cast (vetsina?) lidi je nekde mezi. S trochou motivace se ledacos nauci. A vazne neni duvod kteroukoli skupinu tyrat nevhodnym jazykem do zacatku.
Co je nevhodný jazyk? Asi Assembler - ale pro začátek - a začátky končí u zanořených cyklů není mezi neúplně obskurními jazyky téměř žádný rozdíl. Dále už se to silně začíná diverzifikovat - OOP v každém jazyku jiné, událostní programování, datové struktury -- tam už neexistuje téměř žádná shoda, co je lepší nebo horší - navíc je otázka, jestli je to důležité - 99% lidí se za tuhle základní hranu nikdy nedostane a navíc nepotřebuje dostat.
Programovací jazyky jsou těžce módní záležitost - trefíte se do vlny, a Python bude těžce cool - jako před 10 roky, pak bylo Ruby, Javascript, když jsem byl na výšce, tak ti největší borci dělali v C a kdo byl opravdu dobrý udělal UI v Delphi, přičemž o vlastním programování to skoro vůbec nic neříká. Každý jazyk je dobrý v několika málo oblastech a ve zbytku je průměr.
Souhlasím. Ještě dodám:
Člověk (např. učitel) by měl být schopen se naučit celý jazyk. Když dostane nějaký výraz v daném jazyce, měl by ho být schopen vyhodnotit (resp. dělat kroky, které k vyhodnocení vedou). V ideálním případě by měl být schopen i o nějakém řetězci rozhodnout, zda je to vůbec výraz v daném jazyce.
Indikátorem je délka formální specifikace (pokud tedy jazyk vůbec nějakou má). Například ne více než 100 stran.
Myslím, že nejen syntaxi, ale i třeba metatabulky.
A pomocí metatabulek lze naimplementovat objektový model. Za výhodu považuji to, že takový objektový model není přímou součástí jazyka, takže si můžeš přečíst a pochopit jeho zdrojáky a případně je i někde zmodifikovat.
Temer zadny rozdil?
Ja tech rozdilu mezi Adou a Processingem vidim hromadu. Ted nemyslim syntax, ale to, ze treba knih pro uplne zacatecniky je nekolik. Jedna dokonce z MIT. S Adou si urcite muzu taky zacit programovat robota, ale je to nachystany tak, aby mohl zacit i temer zacatecnik?
Prumerny zak 5 tridy zakladni skoly i studen stredni skoly v 2 rocniku uz nemaji jen knihu a televizi o dvou kanalech. Te zabavy kolem je hromada a jsem si jisty, ze az na vyjimky vetsina deti/studentu odpadne, pokud je to nebude bavit.
Btw ma Ada neco takovehoto? http://www.openprocessing.org/
Mit moznost se pochlubit s tim co delam je taky dulezite.
Jsem si jisty, ze by me Ada bavila, ale taky si vzpominam jak jsem jeden rok stval ucitele tim, ze kdyz nas ucil FoxPro, tak jsem vzdy stejny domaci ukol vyresil jeste v PC Fandu za zlomek casu a daval jsem to pri odevzdavani domaciho ukolu nalezite najevo.
Myslim ze mluvite o vecech ktere nejsou podstatne. To jestli je nejaky jazyk "modni zalezitost", nebo "cool" je absolutne irelevantni vec. Jak vubec nekdo, kdo zjevne uci programovani muze vubec neco takoveho napsat!?! To je neco co bych cekal od "HR specialisty" nebo jineho "nezasvecence".
Kdo s programovanim zacina, se hlavne musi CHTIT ucit programovat. A to dokazete prave jenom tim, ze uz v prvni hodine dokaze dotycny clovek vytvorit programek ktery neco (idealne vizualne zajimaveho) dela. Pokud dokaze napsat programek ktery zobrazi pohybujici se krouzek, bude nadseny a bude se tesit na dalsi hodinu a s nejvetsi pravdepodobnosti si stahne prislusne IDE/SDK doma a bude to zkouset sam a vymyslet co udela dalsiho a jak by to udelal atd.
Pokud ho prvni hodinu budete polovinu casu nudit definicemi na tabuli a pak na konci hodiny je nechate napsat hello world, tak jste pravdepodobne ztratil 90% vsech potencialnich programatoru ve tride.
A jeste dulezitejsi je, aby za 2 mesice, kdyz par lidi ve tride (je jasne ze vsechny to bavit nebude) dosahne vyrazne vyssi urovne, aby treba mohli zkusit z hybajicich krouzku udelat jednoduchou hru, nebo simulaci gravitacnich sil ve slunecni soustave a prulety sond.. to vsechno ale vyzaduje, aby ten jazyk, ktery se naucil byl dostatecne "mocny" na to, aby v nem byl schopen vyjadrit i komplexnejsi logiku stale stejne jednoduchym zpusobem. A to je bod, ve kterem vetsina "historicko-pragmatickych" jazyku (pascal, C++, ada, Java) totalne selze, a "primitivni" jazyky jako jsou rizne dialekty lispu (vcetne clojure), python, ruby, javascript a dalsi vyhravaji na cele care.
Kdyz rikate "OOP v každém jazyku jiné, událostní programování, datové struktury" zni to jako Vera Pohlova ("..ty vsechny higher-order functions vsechny jenom otravuji, ja bych vsechny ty vyssi jazyky zakazala!"). V celem tom odstavecku mi chybi nejaky obecnejsi rozhled. To ze je to v ruznych jazycich ruzne je jasne, ale v nekterych jazycich nektere veci VUBEC NEJSOU - jako treba podpora syntaxe pro asociativni pole, funkce jako first class object apod. To je podstatne. Nejde o to jak krypticky se zapisuje "object/class/whatever" ale o to jaky koncept to podporuje. A podle toho, jestli to podporuje koncept dostatecne jednoduse, pochopitelne a konzistentne se uz da jazyk vybrat snadno (hint: neni to ada ani c++)
Zkuste si na 2h (!!!) precist tutorial k pythonu a neco v nem napsat! Jde to primo samo, a brzy zjistite jak SNADNE a POHODLNE je psat neco v podobnem jazyku. A jake utrpeni je se snazit pak vratit k byrokraticke zrudnosti jako je Ada.
Trochu mi to pripada, jako ze propagujete Python jako jazyk pro zacinajici programatory s poruchou pozornosti. Uceni musi byt alespon trochu "vopruz" a znacna cast lidi se programatory nestanou jednoduse proto, ze na to nemaji bunky.
Na uceni je potreba, aby to od zacatku v lidech alespon vyvolavalo dojem ze tomu rozumi a ze to maji pod kontrolou. A zaroven by to ale nemelo umoznovat odvatet pozornost uplne pryc.
Ty mas pocit, ze i kdyz zvolis ten nejlepsi jazyk, co na vyuku je, tak pak ta vyuka bude prochazka ruzovou zahradou a zadny vopruz? Programovani je v ledascemz tezke a i kdyz mladym umeteme nejhorsi miny z cesty, tak, presne jak pises, mnozi nemaji sanci. To ale neni duvod jim tu cestu neumetat.
A ano, jsou lidi, co se narodili s klavesnici v ruce, lidi, kteri nemaji sanci napsat ani nejvetsi spolecny delitel a pak je vetsina tech, kteri se mohou za vhodnych podminek neco naucit. Uplne stejne jako u cizich jazyku, tvurciho psani nebo trebas chemie.
Reaguji na celou diskuzi.
TLDR: je to v lidech a ne v jazycich. Sikovny clovek se nauci sam, snazivy potrebuje obcasnou konzultaci, prumerne to bud bavit bude nebo ne. Nicmene nakonec vzdy rozhoduje vnitrni motivace a chut objevovat nove. To kde clovek zacne a kam nakonec doiteruje je veci osobniho pohledu a nema to na prubeh moc vliv.
A ted to okecam:
Prosel jsem davno krouzkem pascalu, odpad tam byl velky, ale par lidi jsme u toho vydrzeli a programovali jsme jak o zivot. Ani jsem si nedovedl predstavit neco jineho nez pascal. Pak jsem prosel spoustou jazyku, ale kvuli me nature mi nejvic vyhovuje java.
Mezitim jsem potkal spoustu lidi, kteri se chteli naucit programovat a jelikoz nechci investovat moc casu uceni nekoho kdo to stejne vzda, tak se jich v prvni rade ptam, co si od toho slibujou a co je bude bavit. Pak az volim jazyk a platformu. Jsou lidi, kterym staci ukazat javascript, canvas, w3cschools a kutej si co chtej. Pak mam pripad uplneho samouka, ktery zacal programovat az na vejsce a udelal naprosto uzasnou hru v jave.
Nekdo rekl, ze nejlepsi navyky maji ti co zacali pascalem. Opravte me pokud se mylim, ale v prvni pulce 90. let se snad nic jineho nez pascal neucilo. I na mff to byl v prvaku pascal.
Takze tipuju, ze je to zas v lidech. Nekteri si udrzuji ciste zdrojaky, nekdo navrh, nekdo VCS, nekdo to patla jak to prijde a nevadi mu to.
Nerikam ze je motivace dana predem, ale ze muze zaviset na tom co se resi. A to pak urcuje i volbu toho jazyka.
Pokud uz ten clovek vi, ze chce udelat nejakou matlaci apku pro mobil, tak ho nasmeruju jinak, nez kdyz bude chtit delat weby a jinak kdyz bude chtit zpracovavat nejaky textovy soubory. A klidne se muze stat, ze nekdo bude chtit vypsat nejaky graf a po letech v tom matlabu vytvori neskutecny veci a bude mu uplne jedno co jsou nejaky pointery a typy atd.
Cili chci rict, ze cela tahle debata o tom, ktery jazyk je ten pravy zacatecnicky, motivacni a rychlovysledkovy z cele problematiky resi asi tak 20%.
Ostatne kdyz jsme tenkrat honili karla po obrazovce, tak to hned melo vysledky, hned to neco delalo a stejne to nakonec bavilo malokoho.
Přesně tak. Docela z gruntu to vzali ve Velké Británii, kde kromě RPi (Scratch+Python) mají i rozjetý https://www.gov.uk/government/publications/national-curriculum-in-england-computing-programmes-of-study
Jsou k tomu i materiály apod.
http://www.codecademy.com/schools/curriculum/resources
OT: Dost mě překvapuje, jak spousta škol investovala do interaktivních tabulí, na kterých se potom promítají PowerPointové prezentace, ale na geniální Scratch se už jaxi nedostává prostoru.
Vidím to podobně
Ke kombinaci Scratch + Python jsem dospěl také.
15 let učím programovat na ZŠ (převážně první stupeň). Děti v první třídě ještě neumí pořádně číst a prostředí jako Scrach je pro ně použitelné a hlavně je to baví.
Stačí 4 kostičky a už jim tam lítá kocour po ploše a maluje. Ostatní věci se začnou nabalovat tak jak se rozkoukávají v prostředí a chtějí dělat víc.
Dřív to také bylo o různých Karlech, želvách Logo, Baltíkovi, Petrovi a Petře od Gemtree, Gamemakeru. Zmíním ještě Robocode a v Americe rozšířenou Alice http://www.alice.org
Jaké jazyky vybrat a použít na výuku programování jistě závisí na mnoha faktorech. Nemyslím si, že na úplné základy je třeba použít nějaký v praxi použitelný jazyk/prostředí. (Byť i ten Scratch je použitelný například pro učitele k vytváření aplikací pro interaktivní tabule.)
Po hrátkách se Scratchem, když už potřeby žáků začnou přerůstat jeho možnosti, je rád nasměruji na Python + PyGame, případně na Google App Inventor ať si tvoří pro Android, v blízké budoucnosti očekávám, že vzniknou pěkná IDEčka pro HTML5 canvas a Javascript.
Dá se říci, že nic není dokonalé (ani učitelé), všechno se vyvíjí a mění pod rukama, ale špetka toho talentu a hromádka nadšení si s tím hravě poradí.
Ať se nám daří.
Pro úplné základy je parádní minecraftí open source server bukkit/spigot s pluginem https://github.com/zhuowei/RaspberryJuice . Všichni se připojí k jednomu serveru, v community pycharmu jim běží triviální pythonovské prográmky. Programují si zdi, celé domy (nejlépe z TNT, to se pak nejsnáze odstraní :-) ), navzájem si mění polohy hráčů, dá se v tom vyblbnout i s minihrami. Proměnné, cykly, podmínky, procedury, od začátku objekty, základy v pohodě.
Samozřejmě musí mít všichni koupenou licenci MC (používají normální MC klienta) a víc než 4 draky neuhlídáš, aby při tvém sebemenším polevení pozornosti nezačali spolu na serveru pařit :-)
Chtěl bych to postupně začít propojovat s reálným světem - arduino robot bude jezdit podle polohy hráče v MC, objede si místnost a s pomocí sensoru vzdálenosti za pár korun v MC zakreslí její základy, atd. atd.
Ale na základku to není, viz licence a paření. Pro menší skupinku doporučuji.
Minecraft je i pro děti na prvním stupni žhavé téma. S oblibou tiskneme postavičky na 3D tiskárně.
Pokud by bylo možné k tomu bukkit/spigot a RaspberryJuice napsat něco víc, ideálně článek, jak to rozběhat a příklady ovládání, byl bych za to rád.
Ještě, kdyby to šlo bez placeného účtu to by bylo fajn.
Jasně, je to pro první stupeň, to jsou do MC nejvíc zažrané. Do školy se to ale nehodí, protože je neudržíš, aby nezačali spolu hrát a neztratili tak pozornost. Společný MC svět je pro ně mocné lákadlo.
Placený účet - používá se standardní MC klient, který se musí autorizovat vůči serverům mojangu. Kreknuté by možná taky šly, ale to jsem nikdy neřešil a řešit nebudu. Pro domácí "skupinovou výuku" není to pětikilo žádný problém. Samozřejmě ve třídě je to o něčem jiném...
Je to jednoduché - spigot má detailní popis instalace (jen se spustí instalační jar, sám si natáhne a zkompiluje vše potřebné, otestováno ve win i linuxu). Vyleze z toho jar, ten se spustí (opět jen java -jar spigot.jar), java si rozbalí strukturu a už server běží. Pak se do jeho adresáře plugins nakopíruje jar raspberryjuice stažený z netu
Rozšířená pythonní knihovna mcpi se stáhne z toho githubu RJuice a vloží do pythonního adresáře. Návodů na tyhle pythoní prográmky je na webu celá řada, fakt žádná věda, i já to dal na první dobrou :-)
Jen to chce v MC klientovi vypnout opuštění hry při ztrátě fokusu, aby se šlo přepnout do IDE a pořád vidět, co se v MC děje. Triviální změna jednoho parametru v konfigu http://gaming.stackexchange.com/questions/15664/can-i-alt-tab-out-of-minecraft-without-the-game-auto-pausing
Všechny komponenty jsou zcela multiplatformní. Server máme na linuxu (doma ani žádné win nemám), kluci jedou na obojím. Ve win je to pro mě opruz, protože je pořádně neznám a chybí mi v ních základní nástroje. Ale to už je jiná diskuse...
MC docela žere CPU (a samožejmě grafiku), na starém čtyřjádru ale jede kombinace spigot/MC jednoho z kluků úplně v pohodě. Samozřejmě když si naprogramují kostku TNT se stranou 1000, tak spigot dle povelu umisťující kostičky TNT do skonání věku vypínám a přemazávám jeho adresář čistou zálohou...
Taky Zelená hnáta http://www.greenfoot.org/overview pokud teda netrpíte Javaaverzí.
Vždy když slyším o Adě, vybaví se mi tahle satira: http://www.pipeline.com/~hbaker1/sigplannotices/gigo-1997-04.html. Je/bylo to opravdu tak zlé?
Ten článek je výborný, moc dobře jsme se pobavil. Myšlenka, že je potřeba sovětům implantovat myšlenku na jazyk naprosto dysfunkční, do embedded zařízení pro vojenské účely zvláště nevhodný, je prostě kouzelná.
Jenom pár ukázek:
Even knowledge of the Ada Project's name required the highest clearances and a need-to-know. The code name itself was an inside joke: Ada Augusta, Countess of Lovelace, was a famous armchair programmer/system architect who never in her entire life had gotten a single program to compile, link, or run. {An analogous joke would be giving an Air Force plane the name "Kiwi," after a flightless bird.}
Ada's code name was finally declassified--extensive research had shown that no one ever got the inside joke. {`Project Ada' was not the first name suggested; `Project Potemkin' was rejected when it was realized that Soviets might recognize this old Russian ruse.}
The Ada Project was designed from the beginning as a international NATO project. Without the complicity of other countries, it would have had much less credibility with Ivan. Furthermore, the American military was not sure that American ingenuity could accomplish such a fiendishly difficult task without help from abroad. Prior to Ada, no one had ever attempted to design a computer language whose primary goal was dysfunctionality. However, the timely appearance of inscrutible documents from the European Algol-68 project provided hope and guidance.
We now know that the Ada Project was very successful. Ivan accepted the Ada wizards' humbuggering at face value. At the time of the Fall of Communism, a number of Soviet Ada projects were under way, and afterwards, at least one Soviet Ada compiler was offered for commercial sale over the Internet.
Now that the Wicked Witch of the East is dead, the wizards have finally allowed Ada to evolve into Ada9X, which fixed some of Ada's more egregious dysfunctions. However, even today the brilliance of Ada's original conception still shines brightly through.
( ¬‿¬)
Clanok o Ade je iste zaujimavy - ale IMO "pro výuku programování na středních a vyšších odborných školách" je tento jazyk uplne nevhodny. Je to velmi kompikovany jazyk - ako naprikald PL/I mal nahradit FORTRAN a COBOL ale stal sa opak PL/I sa neujal a oba nedokonale jazyky sa pouzivaju doteraz.
Mozno pri vyuke na vysokej skole by Ada nasla svoje miesto
Decka chcu grafiku, hry, ... atd. a preto je vhodnejsie zacat s vecami ako napr.
https://scratch.mit.edu/
http://studio.code.org/
http://smallbasic.com/
Pri starsich by som zacal so skriúptovacimi jazykmi ktorych uzitocnost je nepopieratelna a pomoze im zautomatiozovat pracu, t.j.
Python, Ruby, Perl, REXX a Tcl
Ak nechcete Pascal tak ucte decka radsej Fortran alebo C. Moderny Fortran je oproti Ada ovela jednoduchsi - a takisto aj C.
Ja si vsak myslim, ze treba ucit univerzalny jazyk, ktory ma co najviac moznosti vyuzitia - grafika, numerika, spracovanie textovych suborov - a v ktorom dosiahnu co najrychlejsie vysledky. Preto doporucujem Python, Ruby, Perl, REXX, Tcl, Lua, VBscript ... alebo trebars aj Small Basic od Microsoftu :-)
http://smallbasic.com/
Adu pre zaciatocnikov urcite nedoporucujem.
Je to mrtvy jazyk - skoncil presne tak isto ako PL/I.
Ponuka prace pre Adu je nulova. S COBOLom by sa mohli slusnejsie uzivit - ale ucit COBOL by bolo komplikovane .
Ak budete ucit Adu prispejete tym urcite k znizeniu poctu potencialnych programatorov...
Zacinal som v QBasicu (zakladka) a nebolo nikoho, kto by mi poradil. Ako priemyslovak som presiel na FreePascal, lebo sa z toho dá spravit .exe súbor a bolo tam viac funckii. Bolo o nieco viac literatury, ale aj tak po anglicky. Ked uz som vedel co to po anglicky, tak ma postretlo stastie v podobe C, ktory som sa ako samouk nedokazal naucit, pretoze mi nesiel skompilovat ani hello world. Bez vysky by som sa daleko nedostal. Potom som presiel na C++ a je to moj najoblubenejsi jazyk, pretoze je pouzitelny, rychly a opat vdaka prednasajucim na vyske a cviciacim som ho porozumel. Qt framework a ine kniznice ukazuju, ako je hole C++ a tym aj C skoro k nicomu. Este som sa dotkol Prologu, Lisp ma obisiel, v J2ME som spravil dva skutocne pouzitelne midlety a zistil som, ze ta java to uz moc komplikuje.
Rekapitulacia: moja cesta k prvej pouzitelnej okennej aplikacii trvala 9 rokov. Bolo to treba? Nie. Nemal mi kto poradit, dlho som bol bez netu, zacinal som zo starym PC s DOSom, ked sa uz zacali predavat Win 98.
Vsetko je to o dostupnych informaciach a vybavenii. Zostat pri konceptoch programovania, vseobecnych drystoch a nadchynat sa nad vykopavkou je realne blbost.
Zaciatocnikom Python. Pre zaciatok je tam vsetko, co realne treba a daleko, daleko viac.
Díky za tenhle seriál.
Možná pro ten úvodní díl není ke zmínce o bezpečnostně kritických aplikacích bez zajímavosti, že v ADA (tedy v podmnožině ADA - C-SMART (Certifiable SMall Ada Run-Time) je napsán diverzní ochranný systém reaktoru JE Temelín. To jen jako příklad té bezpečností aplikace v plné kráse.
http://www.iaea.org/inis/collection/NCLCollectionStore/_Public/29/006/29006338.pdf
Internet Info Root.cz (www.root.cz)
Informace nejen ze světa Linuxu. ISSN 1212-8309
Copyright © 1998 – 2021 Internet Info, s.r.o. Všechna práva vyhrazena.