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 ;-)
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ů.