Fórum Root.cz
Práce => Studium a uplatnění => Téma založeno: Hackman 29. 05. 2020, 14:38:12
-
Dobrý den jsem student střední průmyslové školy , z matematiky mám 1. V poslední době jsem uvažoval o začátku s programováním, podíval jsem se na internet, jaký je dobrý začínací jazyk. Dohrabal jsem se k Javě nebo PHP. Je tu ještě nějaký jazyk, který byste doporučili pro začátečníka? (dělal jsem něco v html, ale to programování není)
Osobně zvažuji začít Javou
Děkuji
-
Java je dobra volba.
Jazyk je to prijemny, obcas krapet ukecany.
Potiz z javou je v tom, ze za historii se v tom nahromadila hromada veci, ktere se postupem casu nahradily necim lepsim, ale z duvodu kompatibility zustaly i ty stare.
Takze v jave je potreba vedet i to, ze nektere zakouti javy je vhodne nepouzivat.
Treba logovaci subsystem Commons Logging - nyni se vsude pouziva mnohem lepsi SLF4J
Java jako samotvy jazyk neni zadna stribrna kulka, tu dela az celkovy ekosystem kolem javy, jako je Apache Foundation nebo Maven Central
A rozhodne zacni primo psat v plnem IDE jako je Eclipse, Netbeans nebo IntelliJ, usetri to spoustu prace.
A az zvladnes samotny jazyk Java, pak je potreba mit povedomi o frameworcich jako je Maven nebo Spring.
https://www.w3schools.com/java/default.asp - jednoduchy java tutorial
https://www.jetbrains.com/lp/academy/?gclsrc=aw.ds&&source=google&medium=cpc&campaign=EM+CIS_en_DC_JBAcademyJavaBeginners_Search&gclid=CjwKCAjw5cL2BRASEiwAENqAPgENf7Irm1xxcE-zQX_tZHCaa2tL3TF4-bfKYAiwujKt6kUN_i-zkBoCrykQAvD_BwE
tutorial zalozeny na implementaci realnych prikaldu
-
Jazyků je spousta začít se dá prakticky s kterýmkoliv (důležité je především, aby tě práce s daným jazykem bavila) jen u některých to vyžduje více dřiny na začátku než u jiných (to ale nemusí být nutně špatně). Kromě tebou jmenovaných jazyků bych na seznam snadných voleb pro začátečníka přihodil následující jazyky python, go a javascript. Z tebou jmenovaných jazyků si nejsem jistý na začátek javou, je to sice průmyslový standart, ale na úplný začátek možná trochu moc nastavování než to rozchodíš, navíc v javě budeš dlouho psát konzolové aplikace než se někam dostaneš. Jako alternativu javy bych možná zkusil spíše kotlin (s současnosti standart pro mobiloní aplikace na androidu). Pokud by jsi chtěl rovnou skočit do hluboké vody, pak vyzkoušej jazyk c, není úplně přívětivý pro začáteníka, ale dovolí ti pochpit it problematiku pochopit opravdu do hloubky.
-
Pro matematika bych doporučil Python jako jazyk první volby. Po instalaci ho můžeš hned začít používat, třeba i místo kalkulačky.
-
https://www.codingame.com/
-
Dohrabal jsem se k Javě nebo PHP. Je tu ještě nějaký jazyk, který byste doporučili pro začátečníka? (dělal jsem něco v html, ale to programování není)
Osobně zvažuji začít Javou
Java je myslím dobrá volba, pokud byste chtěl druhý jazyk, doporučil bych asi Python. Dokonce existuje Jython implementace nad JVM nebo se dá Python provozovat nad GraalVM, takže se ty jazyky dají i propojovat (ale to je jen taková perlička, rozhodně bych to nezkoušel hned na začátku – ty jazyky zas nejsou tak kompatibilní, aby je šlo v aplikaci promíchat).
Od PHP bych někoho, kdo začíná s programováním, spíš odrazoval. Z hlediska nějaké čistoty kódu, dobrých návyků apod. to býval docela špatný jazyk. Postupem času se to dost vylepšilo a dnes už se v PHP myslím dá psát docela čistě. Ale na internetu najdete spoustu návodů, kde se to bude různě patlat – a jako začátečník nemáte šanci to rozlišit. Takže byste si budoval špatné návyky.
-
ak si uplny zaciatocnik a nikdy v zivote si neprogramoval, najlepsie je na zaciatok naucit sa algoritmicky rozmyslat a riesit problemy na vyssej urovni, nezamyslat sa nad programovacim jazykom, alebo nad tym, ci ho niekedy v zivote este budes pouzivat ani nad tym, ako veci na pozadi toho co robis funguju....,
ked uz mas rozumne zaklady CS (poznas cykly, zakladne datove struktury, rekurziu, zakladne algoritmy) a vies si s tymito nastrojmi vyskladat nieco vlastne (napr. nejaku jednoduchu hru stylu snake, tetris..) potom sa oplati zamyslat sa nad ucenim sa veci do praxe..
odporucam Python alebo JS preto, lebo sa nemocu prilis pod nohy zbytocne komplikovanou syntaxou ani komplikovanym balastom + existuju k nim jednoduche programatorske prostredia s dobrymi kurzami...
clovek co nikdy v zivote neprogramoval by fakt nemal riesit co je to slf4j, graalvm, maven, aky je rozdiel medzi eclipse a intellij, ako funguje web, a podobne veci..., obzvlast ak je este na strednej skole...., casu na specializaciu bude dost.., ked sa naucis zaklady v jednom jazyku, potom najlepsi druhy krok je vyskusat si rozne veci v roznych jazykoch a zistit co ti najviac vyhovuje, s dobrymi zakladmi vies chytit lubovolnu vec a zvladnut jej tutorialy bez problemov...
-
Python a až budeš umět nějaké základy, tak přidat C.
A ještě předtím (nebo možná současně se začátky) bych doporučil naučit se efektivně ovládat svůj počítač, pokud to ještě neumíš. Zejména to znamená shell a související utility.
-
Dobrý den jsem student střední průmyslové školy , z matematiky mám 1. V poslední době jsem uvažoval o začátku s programováním, podíval jsem se na internet, jaký je dobrý začínací jazyk. Dohrabal jsem se k Javě nebo PHP. Je tu ještě nějaký jazyk, který byste doporučili pro začátečníka? (dělal jsem něco v html, ale to programování není)
Osobně zvažuji začít Javou
Děkuji
Pokud jsi matematicky založený, tak Haskell není vůbec špatná volba. Znáš-li webové prostředí, může být zajímavý JavaScript. Ani Python není špatný. Javě bych se ze začátku vyhnul, je to obrovské a ukecané.
Záleží také, co si od toho představuješ, respektive co máš třeba v plánu programovat..
-
Pokud jsi matematicky založený, tak Haskell není vůbec špatná volba.
Někde jsem slyšel, že když člověk nemůže říct nic slušnýho, měl by mlčet.
Tak asi k tomuhle fakt pomlčím a půjdu si vybarvit jedno políčko modrýho života.
---
Pro tazatele: ne, propánakrále, hlavně nezačínat Haskellem. Tak na pět let zapomeň, že jsi to slovo vůbec slyšel. Ani to PHP není moc dobrý. Jak radili kolegové přede mnou: Python, Go, Java, C (v tomhle pořadí).
-
Začni Pythonem, s tím se dá začít jednoduše a dá se s ním dostat daleko. Je to jazyk akademické sféry, možná že ti postačí sám o sobě. Pokud budeš chtít víc prohloubit znalosti a chápání programování, pak jazyk C ti ukáže trochu jiný pohled na věc. A pak už si budeš umět vybrat sám.
-
Pokud jsi matematicky založený, tak Haskell není vůbec špatná volba.
Pro tazatele: ne, propánakrále, hlavně nezačínat Haskellem.
Důvod?
-
Důvod?
Pádný.
-
slozita otazka jakym jazykem zacit.
mozna, ze ten BASIC kdysi na zacatek nebyl spatny, tam se clovek mohl naucit zaklady a cykly, podminky.
takze tohle bych opravdu mozna doporucil zacit s Pythonem.
me jako C++_kare uz nekdy otravuje ten sileny zaber a chtel bych zas jednoduchost, tak na rychle prototypovani zkousim pouzivat golang.
-
Pokud jsi matematicky založený, tak Haskell není vůbec špatná volba.
ne, propánakrále, hlavně nezačínat Haskellem.
;D
-
me jako C++_kare uz nekdy otravuje ten sileny zaber a chtel bych zas jednoduchost
V “novém” C++ se dá psát jednoduše, kód v C++20 je krásně jednoduchý a přehledný, když ho člověk nezasviní historickým balastem.
-
Důvod?
Pádný.
Takže zase nic. :)
-
me jako C++_kare uz nekdy otravuje ten sileny zaber a chtel bych zas jednoduchost
V “novém” C++ se dá psát jednoduše, kód v C++20 je krásně jednoduchý a přehledný, když ho člověk nezasviní historickým balastem.
To je ale poměrně těžké, protože C++20 je dost čerstvé a tedy i tutoriálů a různých příkladů je málo -> při hledání řešení narazí právě na ten historický balast. No a C je na začátek už dost low-level.
-
Je tu ještě nějaký jazyk, který byste doporučili pro začátečníka?
Go nebo Python. PHP asi spíš ne. Případně (na Windows) C#, to je podobné Javě a umí jednoduše GUI.
-
me jako C++_kare uz nekdy otravuje ten sileny zaber a chtel bych zas jednoduchost
V “novém” C++ se dá psát jednoduše, kód v C++20 je krásně jednoduchý a přehledný, když ho člověk nezasviní historickým balastem.
To je ale poměrně těžké, protože C++20 je dost čerstvé a tedy i tutoriálů a různých příkladů je málo -> při hledání řešení narazí právě na ten historický balast. No a C je na začátek už dost low-level.
Tak C++14/17, začátečník asi hned neskočí na koncepty nebo korutiny. Nicméně Java, Python nebo Go jsou lepší volba.
-
Pokud jsi matematicky založený, tak Haskell není vůbec špatná volba.
ne, propánakrále, hlavně nezačínat Haskellem. Tak na pět let zapomeň, že jsi to slovo vůbec slyšel.
Jsou lidé, kterým hlava nebere Python, ale Haskell vstřebají během chvilky jako nic. To je moje čerstvá zkušenost a docela mě to překvapilo.
-
Takže zase nic. :)
On to je takový zajímavý paradox, žádný jiný podobný mě nenapadá: pokud někdo požaduje vysvětlení, proč nemá nováček začínat Haskellem, tak je zhola zbytečné se mu to pokoušet vysvětlovat.
Vlastně jo, znám něco podobnýho - otázku "A proč bych si neměl léčit rakovinu CDS?"
-
Jsou lidé, kterým hlava nebere Python, ale Haskell vstřebají během chvilky jako nic. To je moje čerstvá zkušenost a docela mě to překvapilo.
Jo. Typicky jsou to studenti střední průmyslové školy :)
-
Jsou lidé, kterým hlava nebere Python, ale Haskell vstřebají během chvilky jako nic. To je moje čerstvá zkušenost a docela mě to překvapilo.
Jo. Typicky jsou to studenti střední průmyslové školy :)
Tak ono záleží asi jaké průmyslové školy... Proto jsem zmínil jakousi podmínku. ;) Funkcionální programování jako první paradigma má spoustu výhod. Například na FI se teď učí v prvním semestru Haskell vedle Pythonu. Pro samouka je to ale poněkud hůře realizovatelné...
-
Například na FI se teď učí v prvním semestru Haskell vedle Pythonu. Pro samouka je to ale poněkud hůře realizovatelné...
Na FI se Haskell učil odjakživa.
-
Takže zase nic. :)
pokud někdo požaduje vysvětlení, proč nemá nováček začínat Haskellem,
Nejen nováček, kolem Haskellu a celého FP je tolik mýtů (a blábolů), že je lepší nechat ho akademické sféře. Je na čase, aby někdo napsal článek “Monads considered harmful” a celé to utnul. I když ono to není jen o Haskellu, hejže...
-
Funkcionální programování jako první paradigma má spoustu výhod.
Jakých?
-
Jakých?
Mě to napadlo už před drahnou dobou, že by byl zajímavý sociální experiment, porovnat, jak FP vstřebávají lidi, kteří nemusí překonávat mindtwist z klasických imperativních jazyků oproti těm, co musí.
Takže odpověď na tvou otázku: má to výhodu, že by se takový experiment dal skvěle publikovat s vysokým impact factorem :)
-
Jakých?
Mě to napadlo už před drahnou dobou, že by byl zajímavý sociální experiment, porovnat, jak FP vstřebávají lidi, kteří nemusí překonávat mindtwist z klasických imperativních jazyků oproti těm, co musí.
Tenhle “mindtwist” je jen další z mýtů. Nehledě na to, že klasické FP je prostě matematika psaná obzvlášť hnusnou syntaxí (něco na způsob HAL/S).
-
vzit deti, ktere maji zajem o IT a rozdelit je na dve poloviny a jedne dat klasicke imperativni programovani, proti funkcionalnimu a porovnat jak tomu porozumeli by bylo moc zajimave. blbe je, ze to ovlivni i kvalita ucitelu toho ci onoho zpusobu.
-
Například na FI se teď učí v prvním semestru Haskell vedle Pythonu. Pro samouka je to ale poněkud hůře realizovatelné...
Na FI se Haskell učil odjakživa.
Těm pomalejším jsem to zvýraznil.
-
vzit deti, ktere maji zajem o IT a rozdelit je na dve poloviny a jedne dat klasicke imperativni programovani, proti funkcionalnimu a porovnat jak tomu porozumeli by bylo moc zajimave. blbe je, ze to ovlivni i kvalita ucitelu toho ci onoho zpusobu.
Na týrání dětí je ale paragraf.
-
Například na FI se teď učí v prvním semestru Haskell vedle Pythonu. Pro samouka je to ale poněkud hůře realizovatelné...
Na FI se Haskell učil odjakživa.
Těm pomalejším jsem to zvýraznil.
A jak to těm prvokům jde? To se ptám se vší vážností, je nějaký feedback?
-
vzit deti, ktere maji zajem o IT a rozdelit je na dve poloviny a jedne dat klasicke imperativni programovani, proti funkcionalnimu a porovnat jak tomu porozumeli by bylo moc zajimave. blbe je, ze to ovlivni i kvalita ucitelu toho ci onoho zpusobu.
Na týrání dětí je ale paragraf.
:-)
to mi pripomelo, ze jsme se s kamarady programatory bavili, ze obdobi IT maniaku uz je pryc.
ze silenci do programovani, sitovani atd. z 90. let byli jen peak a nyni uz budou ajtaci ve stejnem mnozstvi jako je stavaru, chemiku, dopravnich inzenyru, atd.
co si myslite, jsme stale jeste na vlne zvyseneho zajmu o programovani, nebo uz to odpovida jen normalni urovni jinych technickych odboru?
-
Těm pomalejším jsem to zvýraznil.
A pořád nechápu pointu, budeš na mě muset asi ještě pomaleji :)
Tenhle “mindtwist” je jen další z mýtů. Nehledě na to, že klasické FP je prostě matematika psaná obzvlášť hnusnou syntaxí (něco na způsob HAL/S).
Není. Velká spousta lidí s tím má reálný problémy. A pak píšou na SO otázky typu "jak udělat for loop v Elixiru". Protože si život bez for loopu prostě nedokážou představit :)
vzit deti, ktere maji zajem o IT a rozdelit je na dve poloviny a jedne dat klasicke imperativni programovani, proti funkcionalnimu a porovnat jak tomu porozumeli by bylo moc zajimave. blbe je, ze to ovlivni i kvalita ucitelu toho ci onoho zpusobu.
Blbé je, že by musel být připravený pořádný budget na odškodnění těch dětí, kterým z toho praskla hlava :)
-
A jak to těm prvokům jde? To se ptám se vší vážností, je nějaký feedback?
Dělají se velmi pečlivé průzkumy spokojenosti studentů. Ale výsledky je přísně zakázáno zvěřejňovat. Proč je to zakázáno, je přísně tajné.
-
vzit deti, ktere maji zajem o IT a rozdelit je na dve poloviny a jedne dat klasicke imperativni programovani, proti funkcionalnimu a porovnat jak tomu porozumeli by bylo moc zajimave. blbe je, ze to ovlivni i kvalita ucitelu toho ci onoho zpusobu.
Na týrání dětí je ale paragraf.
:-)
to mi pripomelo, ze jsme se s kamarady programatory bavili, ze obdobi IT maniaku uz je pryc.
ze silenci do programovani, sitovani atd. z 90. let byli jen peak a nyni uz budou ajtaci ve stejnem mnozstvi jako je stavaru, chemiku, dopravnich inzenyru, atd.
co si myslite, jsme stale jeste na vlne zvyseneho zajmu o programovani, nebo uz to odpovida jen normalni urovni jinych technickych odboru?
Možná je vyšší zájem, ale motivací jsou hlavně peníze. Ono to teď je takové exponential decay, největší úlet byl, když nejlepší ajťáci (tehdy se jim tak ještě neříkalo) chtěli dělat ve Slušovicích. To už mladým ani nejde vysvětlit.
-
Těm pomalejším jsem to zvýraznil.
A pořád nechápu pointu, budeš na mě muset asi ještě pomaleji :)
A jak tě mám, Cikádo, rád, tak jsem si to kvůli tobě našel. Měl jsem Haskell v prvním semestru v roce 2001. Konkrétně tenhle: https://is.muni.cz/auth/predmet/fi/podzim2001/I015
"Studenti by měli vystačit s běžnými středoškolskými znalostmi a jistou schopností matematické abstrakce."
Akorát teda pokud se bavíme o škole s kreditovým systémem a předmětem, na kterém nic moc nezáviselo, je ten první semestr docela zavádějící. Ale náhodou zrovna mně to tak vyšlo. Asi z lásky k tobě :)
-
Velká spousta lidí s tím má reálný problémy. A pak píšou na SO otázky typu "jak udělat for loop v Elixiru".
To je ale validní otázka. S jednoduchou odpovědí.
-
To je ale validní otázka. S jednoduchou odpovědí.
Nejde o otázku, ale o motivaci k jejímu položení.
-
A jak to těm prvokům jde? To se ptám se vší vážností, je nějaký feedback?
Dělají se velmi pečlivé průzkumy spokojenosti studentů.
Ty jsou o ničem, ta cháska líná si bude stěžovat vždy. Třeba podle studijního katalogu “informatika s rozšířenou matematikou” má méně matematiky než za nás informatika bez rozšířené matematiky. Celé to je na hlavu.
-
"Studenti by měli vystačit s [...] jistou schopností matematické abstrakce."
A vo tom to je.
-
To je ale validní otázka. S jednoduchou odpovědí.
Nejde o otázku, ale o motivaci k jejímu položení.
Ta je taky validní.
-
Ty jsou o ničem, ta cháska líná si bude stěžovat vždy. Třeba podle studijního katalogu “informatika s rozšířenou matematikou” má méně matematiky než za nás informatika bez rozšířené matematiky. Celé to je na hlavu.
A co bys chtěl? Srovnání průměrné mzdy deset let po absolutoriu u lidí, kteří si zapsali Haskell, a lidí, kteří si zapsali Prolog?
To bych ti kdyžtak mohl dát metodou poučeného odhadu :)
-
Ty jsou o ničem, ta cháska líná si bude stěžovat vždy. Třeba podle studijního katalogu “informatika s rozšířenou matematikou” má méně matematiky než za nás informatika bez rozšířené matematiky. Celé to je na hlavu.
A co bys chtěl? Srovnání průměrné mzdy deset let po absolutoriu u lidí, kteří si zapsali Haskell, a lidí, kteří si zapsali Prolog?
Ne, to bych nechtěl. Ale třeba podobné srovnání lidí, co vystupovali IT, a lidí, kteří se nechali zlákat na nějakou humanitní pavědu. U těch druhých pak s omezením na ty, co neskončili v IT :)
-
vzit deti, ktere maji zajem o IT a rozdelit je na dve poloviny a jedne dat klasicke imperativni programovani, proti funkcionalnimu a porovnat jak tomu porozumeli by bylo moc zajimave. blbe je, ze to ovlivni i kvalita ucitelu toho ci onoho zpusobu.
No hlavně blbé je, že použitelnost programovacího jazyka alespoň pro mě mnohem víc ovlivňuje ten ekosystém okolo, množství snadno použitelných knihoven pro věci co potřebuješ, nalezení úplně čehokoli na stackoverflow atd. Proto jsem doporučoval ten Python a o chvíli později C -- ne kvůli nějakým inherentním technickým kvalitám, ale právě kvůli tomuto.
-
Dobrý den jsem student střední průmyslové školy , z matematiky mám 1. V poslední době jsem uvažoval o začátku s programováním, podíval jsem se na internet, jaký je dobrý začínací jazyk. Dohrabal jsem se k Javě nebo PHP. Je tu ještě nějaký jazyk, který byste doporučili pro začátečníka? (dělal jsem něco v html, ale to programování není)
Osobně zvažuji začít Javou
Děkuji
Zkus Processing. Je to nad jvm a je to i pro neprogramatory. Podle me idealni jazyk pro zacatecnika. Zdokonalis i anglictinu.
https://processing.org/
Zajimava kniha online https://natureofcode.com/book/ ukazky jak vyuzivat gravitacni engine etc.
Dalsi zdroje https://www.openprocessing.org/browse/#
Engine pro pouziti na webu
http://processingjs.org/
asi jediny programovaci jakzy, kde vydali knihu o programovani pro umelce https://www.processing.org/handbook/ :)
-
vzit deti, ktere maji zajem o IT a rozdelit je na dve poloviny a jedne dat klasicke imperativni programovani, proti funkcionalnimu a porovnat jak tomu porozumeli by bylo moc zajimave. blbe je, ze to ovlivni i kvalita ucitelu toho ci onoho zpusobu.
použitelnost programovacího jazyka alespoň pro mě mnohem víc ovlivňuje ten ekosystém okolo, množství snadno použitelných knihoven
Teď už má každý aspoň trochu rozšířeny jazyk použitelné FFI. A rozumné jazyky mají vše potřebné ve své standardní knihovně, přinejmenším jako obal nějaké nativní knihovny.
-
Na Javu bych se vysral, je to moc tezka platforma pro zacatecniky, zatizena 25 lety stareho vyvoje. To je jak by si chtel mladoch koupit prvni auto a nekdo by mu doporucoval traktor nebo kombajn. Doporucuju Python.
-
Na Javu bych se vysral, je to moc tezka platforma pro zacatecniky, zatizena 25 lety stareho vyvoje. To je jak by si chtel mladoch koupit prvni auto a nekdo by mu doporucoval traktor nebo kombajn. Doporucuju Python.
Někdo tvrdí, že je Java moc lehká, vy zase, že je moc těžká… Koučoval jsem teď kurz Javy od Czechitas pro úplné začátečníky a nikdo s tím neměl problém, že by byla Java moc těžká. A neřešili jsme ani slf4j, GraalVM, Maven, ani rozdíl mezi Eclipse a IntelliJ Idea, ani jak funguje web.
-
Například na FI se teď učí v prvním semestru Haskell vedle Pythonu. Pro samouka je to ale poněkud hůře realizovatelné...
Na FI se Haskell učil odjakživa.
Těm pomalejším jsem to zvýraznil.
A jak to těm prvokům jde? To se ptám se vší vážností, je nějaký feedback?
Záleží. Je potřeba odfiltrovat ty, kteří na to nemají nebo zjistili, že informatika není úplně pro ně. Každopádně můj dojem byl spíše pozitivní. Zvlášť u prváků, kteří předtím moc neprogramovali, mi přišlo, že do toho lépe vpluli. Naopak někteří druháci nebo prváci, kteří už programovali (nebo dokonce i mají nějakou práci/brigádu), mají někdy problém s absencí cyklů, neměnností, rekurze bývá problém atp. Feedback byl spíše pozitivní, problém je, že navazující semestr teď byl zabit jistým virem, takže se hůř posuzuje, jací lidé z těch předmětů vyšli (typicky v druhém semestru byl problém v algoritmech -- při implementaci).
Funkcionální programování jako první paradigma má spoustu výhod.
Jakých?
Řekl bych, že (a teď to vztahuji k tomu doporučenému Haskellu)
* zlepší chápání typů (ať už to, že by funkce nemusela vracet z každého ifu něco jiného, nebo i to, že místo "spešl stringů" by nebyl od věci enum atd.); obecně se někteří na typy začnou dívat jako na kamarády, ne nepřátele
* odnaučí (resp. nenaučí) zneužívat stav / "globální" proměnné
* vede k lepší dekompozici na podproblémy
* naučí rekurzi (zvlášť v aplikaci na datové typy)
* lidé se odnaučí (spíš nenaučí, když s ním začnou) brát funkce jako něco speciálního, takže jim třeba nepřijde divné předávat funkci jako parametr
* vzory
* naučí polymorfismus
( * výjimečně i lidi donutí přemýšlet nad vyhodnocováním; takovou klasikou bývá null xs vs. length xs == 0, kde je xs je nekonečný )
Neříkám, že toho nelze dosáhnout i jinak, resp. že se to týká jen a pouze Haskellu/FP, ale tohle je takový opakující se pattern. (A ano, některé body závisí na učiteli/materiálech.)
-
* zlepší chápání typů (ať už to, že by funkce nemusela vracet z každého ifu něco jiného, nebo i to, že místo "spešl stringů" by nebyl od věci enum atd.); obecně se někteří na typy začnou dívat jako na kamarády, ne nepřátele
To jednoznačně ano. Škoda, že velká část featur, které se jim v Haskellu začnou líbit, budou v jiných jazycích postrádat. Ale jako tréning na budoucí frustrace v práci je to skvělý. Ještě lepší by bylo je naučit psát všema deseti a pak jim uříznout jednu ruku.
* vede k lepší dekompozici na podproblémy
Je to něčím doložitelné, nebo jenom tvůj subjektivní dojem?
* naučí rekurzi (zvlášť v aplikaci na datové typy)
Což je fajn jako rozšíření obzorů, ale pokud budou dál programovat v mainstreamových jazycích, je to spíš mínus, protože tam bude mít rekurze jiné vastnosti, v nejhorším případě bude použití rekurze, jak se to naučí v Haskellu, přímo nebezpečný antipattern.
* lidé se odnaučí (spíš nenaučí, když s ním začnou) brát funkce jako něco speciálního, takže jim třeba nepřijde divné předávat funkci jako parametr
Callbacky by se měly učit ve všech jazycích, takže pokud někomu předávání funkce přijde divné, je to chyba výuky, ne jazyka.
* vzory
Které velmi pravděpodobně v praxi nepoužijí, protože nikdy FP v praxi používat nebudou (drtivá většina z nich).
* naučí polymorfismus
Opět se naučí jiný polymorfismus, než jaký budou v praxi používat.
( * výjimečně i lidi donutí přemýšlet nad vyhodnocováním; takovou klasikou bývá null xs vs. length xs == 0, kde je xs je nekonečný )
Což opět v praxi, v jiných jazycích, nebudou prakticky vůbec potřebovat, protože problémy, které jsou v Haskellu, tam typicky nemají obdobu, čili to, že se je naučí řešit, si můžou narvat do špic.
ale tohle je takový opakující se pattern. (A ano, některé body závisí na učiteli/materiálech.)
Ano, je to opakující se pattern získávání znalostí a dovedností, které skvěle rozšíří obzory někomu, kdo už nějaký klasický jazyk umí, ale nováčkovi je to zhusta úplně na prd, protože se prvně potřebuje dobře naučit něco praktického a pak teprve něco obohacujícího, ne naopak.
P.S. Tím ani trochu nehaním Haskell, je to skvělý jazyk. Ale pro (přinejmenším) pokročilého juniora, rozhodně ne pro začátečníka, který se chce "naučit programovat" (čti: řešit reálné problémy reálného světa prostředky a způsoby v IT obvyklými).
-
Například na FI se teď učí v prvním semestru Haskell vedle Pythonu. Pro samouka je to ale poněkud hůře realizovatelné...
Na FI se Haskell učil odjakživa.
Těm pomalejším jsem to zvýraznil.
A jak to těm prvokům jde? To se ptám se vší vážností, je nějaký feedback?
Záleží. Je potřeba odfiltrovat ty, kteří na to nemají nebo zjistili, že informatika není úplně pro ně. Každopádně můj dojem byl spíše pozitivní. Zvlášť u prváků, kteří předtím moc neprogramovali, mi přišlo, že do toho lépe vpluli. Naopak někteří druháci nebo prváci, kteří už programovali (nebo dokonce i mají nějakou práci/brigádu), mají někdy problém s absencí cyklů, neměnností, rekurze bývá problém atp. Feedback byl spíše pozitivní, problém je, že navazující semestr teď byl zabit jistým virem, takže se hůř posuzuje, jací lidé z těch předmětů vyšli (typicky v druhém semestru byl problém v algoritmech -- při implementaci).
Funkcionální programování jako první paradigma má spoustu výhod.
Jakých?
Řekl bych, že (a teď to vztahuji k tomu doporučenému Haskellu)
* zlepší chápání typů (ať už to, že by funkce nemusela vracet z každého ifu něco jiného, nebo i to, že místo "spešl stringů" by nebyl od věci enum atd.); obecně se někteří na typy začnou dívat jako na kamarády, ne nepřátele
* odnaučí (resp. nenaučí) zneužívat stav / "globální" proměnné
* vede k lepší dekompozici na podproblémy
* naučí rekurzi (zvlášť v aplikaci na datové typy)
* lidé se odnaučí (spíš nenaučí, když s ním začnou) brát funkce jako něco speciálního, takže jim třeba nepřijde divné předávat funkci jako parametr
* vzory
* naučí polymorfismus
( * výjimečně i lidi donutí přemýšlet nad vyhodnocováním; takovou klasikou bývá null xs vs. length xs == 0, kde je xs je nekonečný )
Neříkám, že toho nelze dosáhnout i jinak, resp. že se to týká jen a pouze Haskellu/FP, ale tohle je takový opakující se pattern. (A ano, některé body závisí na učiteli/materiálech.)
To jsou všechno užitečné znalosti a je záslužné, že se to učí tak brzy, akorát v této fázi by možná byl lepší OCaml. A ano, nejdůležitější je, kdo a jak to učí. Možná se přece jen na českých VŠ něco mění k lepšímu.
-
akorát v této fázi by možná byl lepší OCaml.
Jj, taky jsem na to myslel. Nebo jakýkoli jiný ne-pure jazyk. Ideálně samozřejmě Elixir :) protože pomocí něj by se naučili i principy, které pak využijí v OOP nebo distribuovaném programování.
-
zkus
https://www.codingame.com
nebo
https://www.codewars.com/
diskutuj s lidmi tam, o reseni konkretnich uloh.
-
Na Javu bych se vysral, je to moc tezka platforma pro zacatecniky, zatizena 25 lety stareho vyvoje. To je jak by si chtel mladoch koupit prvni auto a nekdo by mu doporucoval traktor nebo kombajn. Doporucuju Python.
Někdo tvrdí, že je Java moc lehká, vy zase, že je moc těžká… Koučoval jsem teď kurz Javy od Czechitas pro úplné začátečníky a nikdo s tím neměl problém, že by byla Java moc těžká. A neřešili jsme ani slf4j, GraalVM, Maven, ani rozdíl mezi Eclipse a IntelliJ Idea, ani jak funguje web.
A neni to tak nahodou ten problem, ze prave toto jste neresili? Protoze kdyz si Franta bude chtit udelat svoji knihovnu a dat si to na Maven central, tak presne toto bude muset resit.
Naucit se jenom zaklady jazyka a nic vic, tak to muzu klidne c++.
Zrovna pred par dny jsem delal jednu a tu samou knihovnu pro Pyrhon i pro Javu. Java, vozpruz nejvetsi a prjit procesem deploye do Maven Centraly ani nemluve, v porovnani s deployem do PyPi.com.
Delam ted na projektu s jednim skoro dedou, co zacinal jako databazista, a ted dela v Jave. A vstavaji mi vlasy hruzou pokazde, kdyz to prase v tom vidim neco naprogramovat. Neumi si blbec jeden dat dohromady 1+1 a vyrabi shity, ani Jackson si neda dohromady jak pouzit, misto toho rucne pracuje s jsnem v Mape misto aby si to namapoval na objekt a kdyz mu na to neco rikam, tak je protivny. Proste to nepobira a nema na to. A pritom hloupy neni. Jsem presvedcen, ze v Pythonu by dokazal programovat lip, protoze je jednodussi.
-
A neni to tak nahodou ten problem, ze prave toto jste neresili?
Ne.
Protoze kdyz si Franta bude chtit udelat svoji knihovnu a dat si to na Maven central, tak presne toto bude muset resit.
Když si někdo dělá knihovnu, nepotřebuje jí dávat na Maven cventral. A začínající programátor rozhodně nebude začínat programování open source knihovny.
Naucit se jenom zaklady jazyka a nic vic, tak to muzu klidne c++.
Neřekl bych, že C++ je vhodný jazyk pro začátečníka.
Zrovna pred par dny jsem delal jednu a tu samou knihovnu pro Pyrhon i pro Javu. Java, vozpruz nejvetsi a prjit procesem deploye do Maven Centraly ani nemluve, v porovnani s deployem do PyPi.com.
To jste si vybral fakt dobrý příklad – něco, s čím se většina programátorů v životě nesetká.
Delam ted na projektu s jednim skoro dedou, co zacinal jako databazista, a ted dela v Jave. A vstavaji mi vlasy hruzou pokazde, kdyz to prase v tom vidim neco naprogramovat. Neumi si blbec jeden dat dohromady 1+1 a vyrabi shity, ani Jackson si neda dohromady jak pouzit, misto toho rucne pracuje s jsnem v Mape misto aby si to namapoval na objekt a kdyz mu na to neco rikam, tak je protivny. Proste to nepobira a nema na to. A pritom hloupy neni. Jsem presvedcen, ze v Pythonu by dokazal programovat lip, protoze je jednodussi.
Myslím, že to vypovídá víc o vás než o programovacích jazycích.
-
Booze, to je zase tradicni diskuze s FJ s kognitivni poruchou. Ne, v Jave se vetsina programatoru s deployem do Maven centraly opravdu nesetka, protoze je to kurevsky vopruz z ktereho s jezi vlasy hruzou. V Pythonu to je uplne jednoduche. A clovek si tu knihovnu muze udelat jen pro sebe a deploynout ji tam, treba konzolovou utilitu.
-
Ne, v Jave se vetsina programatoru s deployem do Maven centraly opravdu nesetka, protoze je to kurevsky vopruz z ktereho s jezi vlasy hruzou.
Mýlíte se. V Javě se většina programátorů s deployem do Maven central repository nesetká proto, protože to dělají jen správci (obvykle open source) knihoven.
A clovek si tu knihovnu muze udelat jen pro sebe a deploynout ji tam, treba konzolovou utilitu.
Než zase budete chtít ostatní poučovat o programování, nastudujte si, jaký je rozdíl mezi knihovnou a aplikací.
-
V poslední době jsem uvažoval o začátku s programováním, podíval jsem se na internet, jaký je dobrý začínací jazyk.
Šel bych na to obráceně. Neptal bych se jaký jazyk, ale to co chci naprogramovat, jaký jazyk je pro to nejlepší, protože budeš-li se učit jazyk jen proto, aby jsi ho uměl, nebude tě to bavit. Takhle mám doma knížku o jazyku Ruby. Píšeš že jsi se potkal s HTML. Já jsem na php také začínal.
1) Webové stránky
Klidně bych ti php doporučil v nejnovější verzi 7.4 a zapnutou striktností hledej strict_types https://www.php.net/manual/en/control-structures.declare.php.
Pravděpodobně budeš potřebovat databázi, kde nejrozšířenější je Mysql alternativa MariaDb, ale jak víme co je nejrozšířenější nemusí být nejlepší, doporučil bych ti PostgreSQL. Základy budou všude stejný.
Pak se neobejdeš bez javascriptu a pokud nechceš php, tak na servru můžeš využít také javascript, hledej nodejs.
2) Aplikace pro android
Kotlin nebo Java, to IDE (Android studio) co dodává google je fakt dobře připravený pro začátečníka a spustit první aplikaci a nahrát ji do telefonu je celkem jednoduchý a když vidíš výsledky hned, v ten moment máš chuť zkoušet víc. Tady bude databáze sqlite.
3) Aplikace pro Apple
- swift
4) Aplikace/hry pro PC
- C#, python, Java, aj...
5) Ve světě linuxu se nevyhneš shellu konkretně jazyku bash
V čase zjistíš že budeš potřebovat další nástroje, například k verzování se používá git, aj.
Z počátku se budeš učit jazyk, ale aby jsi se naučil programovat, musíš pochopit návrhové vzory, algoritmizaci, SOLID principy aj... Tohle hledej až si budeš myslet že umíš jazyk.
-
V poslední době jsem uvažoval o začátku s programováním, podíval jsem se na internet, jaký je dobrý začínací jazyk.
1) Webové stránky
Klidně bych ti php doporučil v nejnovější verzi 7.4 a zapnutou striktností hledej strict_types https://www.php.net/manual/en/control-structures.declare.php.
Pravděpodobně budeš potřebovat databázi, kde nejrozšířenější je Mysql alternativa MariaDb, ale jak víme co je nejrozšířenější nemusí být nejlepší, doporučil bych ti PostgreSQL. Základy budou všude stejný.
Pak se neobejdeš bez javascriptu a pokud nechceš php, tak na servru můžeš využít také javascript, hledej nodejs.
To je dost komplikované. Respektive určitě bych do toho netahal databáze (může používat regulérní soubor). Nevím, jak je na tom php, ale nodejs také dost bolí. Pokud webové stránky, tak bych se vydal cestou čistého JS, případně ten TypeScript, když už musí být. Naprogramovat si nějakou skákačku v klientovi také lecos naučí. (a seznámit se s async prostředím hned na začátku taky nemusí být od věci)
2) Aplikace pro android
Kotlin nebo Java, to IDE (Android studio) co dodává google je fakt dobře připravený pro začátečníka a spustit první aplikaci a nahrát ji do telefonu je celkem jednoduchý a když vidíš výsledky hned, v ten moment máš chuť zkoušet víc. Tady bude databáze sqlite.
To ho zabije. Java v kombinaci s Android Studiem je jedna z nejšílenějších věcí. Také to není nejrychlejší (ale čtyřku jsem ještě nezkoušel).
Pokud by byla cílem mobilní platforma, tak by nemusel být od věci Flutter. Na takové ty první aplikace se to jeví celkem použitelně (a kreslí se na canvas), ale to by měl potvrdit někdo, kdo s tím má víc zkušeností.
3) Aplikace pro Apple
- swift
Flutter je multiplatformní, to by mohlo být zajímavé.
-
V poslední době jsem uvažoval o začátku s programováním, podíval jsem se na internet, jaký je dobrý začínací jazyk.
1) Webové stránky
Klidně bych ti php doporučil v nejnovější verzi 7.4 a zapnutou striktností hledej strict_types https://www.php.net/manual/en/control-structures.declare.php.
Pravděpodobně budeš potřebovat databázi, kde nejrozšířenější je Mysql alternativa MariaDb, ale jak víme co je nejrozšířenější nemusí být nejlepší, doporučil bych ti PostgreSQL. Základy budou všude stejný.
Pak se neobejdeš bez javascriptu a pokud nechceš php, tak na servru můžeš využít také javascript, hledej nodejs.
To je dost komplikované. Respektive určitě bych do toho netahal databáze (může používat regulérní soubor). Nevím, jak je na tom php, ale nodejs také dost bolí. Pokud webové stránky, tak bych se vydal cestou čistého JS, případně ten TypeScript, když už musí být. Naprogramovat si nějakou skákačku v klientovi také lecos naučí. (a seznámit se s async prostředím hned na začátku taky nemusí být od věci)
2) Aplikace pro android
Kotlin nebo Java, to IDE (Android studio) co dodává google je fakt dobře připravený pro začátečníka a spustit první aplikaci a nahrát ji do telefonu je celkem jednoduchý a když vidíš výsledky hned, v ten moment máš chuť zkoušet víc. Tady bude databáze sqlite.
To ho zabije. Java v kombinaci s Android Studiem je jedna z nejšílenějších věcí. Také to není nejrychlejší (ale čtyřku jsem ještě nezkoušel).
Pokud by byla cílem mobilní platforma, tak by nemusel být od věci Flutter. Na takové ty první aplikace se to jeví celkem použitelně (a kreslí se na canvas), ale to by měl potvrdit někdo, kdo s tím má víc zkušeností.
3) Aplikace pro Apple
- swift
Flutter je multiplatformní, to by mohlo být zajímavé.
Flutter je zajímavý, už jen tím, že kašle na Javu. Současná verze je rozumně použitelná na iOS i Androidu (a mají i betu pro macOS and alfy pro Windows a Linux). Dart je poměrně slušný jazyk (pro tyto účely), na rozdíl od třeba JS, se kterým jinak mnohé vlastnosti sdílí. Elegancí sice nemá na SwiftUI, ale to je taky ještě zabugované a nedotažené (a hlavně nejde použít mimo Apple). Kdybych potřeboval psát aplikaci pro Android, sáhnu po Flutteru. Pro začátečníka to je taky docela vhodná platforma, pokud jej zajímá mobilní vývoj.
-
Flutter je zajímavý, už jen tím, že kašle na Javu.[/quote]
No nevím. Dart mi přijde jako Java, do které zkusili dobastlit některé modernější vlastnosti, ale výsledek je takový... polovičatý. Asi lepší, než drátem do oka, ale když to porovnám s Typescriptem, tak ten je prostě úplně jinde.
-
Flutter je multiplatformní, to by mohlo být zajímavé.
Flutter je zajímavý, už jen tím, že kašle na Javu. Současná verze je rozumně použitelná na iOS i Androidu (a mají i betu pro macOS and alfy pro Windows a Linux). Dart je poměrně slušný jazyk (pro tyto účely), na rozdíl od třeba JS, se kterým jinak mnohé vlastnosti sdílí. Elegancí sice nemá na SwiftUI, ale to je taky ještě zabugované a nedotažené (a hlavně nejde použít mimo Apple). Kdybych potřeboval psát aplikaci pro Android, sáhnu po Flutteru. Pro začátečníka to je taky docela vhodná platforma, pokud jej zajímá mobilní vývoj.
Dovolím si oponovat.
Flutter není vhodná platforma na mobilní vývoj pro začátečníky, stejně jako jakýkoli jiný multiplatformní nástroj.
Realita je taková, že mobilní vývoj je roztříštěný a hlavní platformy mají každý svůj nativní toolkit pro vývoj aplikací, a tyto jsou navzájem na úrovni kódu a architektury aplikací nekompatibilní. A také vývoj aplikací pro mobily má vyšší nástupní práh než třeba pro vytváření webových stránek.
To jsou fakta která se nedají - principielně - obejít. Žádná zkratka kolem neexistuje. Její hledání je marnění času a úsilí. Pokud to někdo myslí s vývojem na mobily vážně, měl by toto přijmout, a vyjít z toho. Ušetří si hodně zklamání a zbydou mu síly na to dělat věci pořádně.
Nadšenci kteří do toho naskočí přes nějaký multiplatformní nástroj který se pokouší překlenou tuto roztříštěnost dalšími vrstvami neustále se rozpadávajícího toolchainu dalších nástrojů, nadšeně napíšou Hello World a pak možná kalkulačku, a pak zjistí že na cokoli dalšího potřebují rozumět nejen té multiplatformní věci navrchu, ale i těm platformám pod tím, k čemuž je jim zkušenost s Flutterem, React Native nebo Ionicem v podstatě nanic, a k tomu všemu musí rozumět i těm udělátorům které z jejich multiplatformní aplikace udělají nativní appku, a že jim spousta věcí z nativních frameworků chybí a tak buď začnou programovat i nativně a bastlit to zpětně do své multiplatformní aplikace, nebo jsou odkázáni na komponenty třetích stran do kterých nevidí a které ty jejich vývojáře taky nebude bavit věčně udržovat.
Mluvím ze zkušenosti takových možná patnácti let vývoje pro mobilní aplikace, prošel jsem na mobilech od mikro Javy přes Objc až po Swift. Pracuji pro firmu která vyvíjí nativní softwarovou knihovnu kterou bohužel musíme wrappovat i do ne-nativních toolů, a je to... příšerný.
PS: Flutter sice není React Native, nicméně v principu jde o stejný typ nástroje... k přečtení dporučuji (včetně tam odkazovaných původních zdrojů) https://www.ackee.cz/blog/airbnb-konci-s-react-native/
-
Já bych teda z diskuse o základech programování vyškrtnul Flutter, Dart, Haskell, OCaml a všechny další jazyky, které v ČR zná pět a půl programátora. To, jestli je nějaký jazyk něčím zajímavý, je zcela jiná úloha, než jestli je vhodný pro učení se základům programování. Programování je řemeslo, a jako v každém jiném řemesle se musíte naučit obecné postupy, jak se co dělá, a vedle toho si najít svůj vlastní styl, kdy něčemu budete dávat přednost a něco nebudete mít rád, někdy ta obecná pravidla porušíte ale budete vědět proč, někdy na nich zase budete trvat. Aby se tohle člověk naučil, musí dělat pořád dokola to samé, ale pokaždé znovu a trošinku jinak – s jiným mentorem, s jiným zákazníkem, s jiným termínem. Když se budete učit řídit auto, také nezačnete formulí 1, veteránem, Ferrari nebo obrněným transportérem, ale začnete škodovkou nebo něčím takovým, co mají všichni okolo. To není nic proti F1, veteránům nebo ótéčkům, nevypovídá to nic o jejich kvalitách – jenom to nejsou vozidla vhodná pro začátky.
-
Dart mi přijde jako Java, do které zkusili dobastlit některé modernější vlastnosti, ale výsledek je takový... polovičatý. Asi lepší, než drátem do oka, ale když to porovnám s Typescriptem, tak ten je prostě úplně jinde.
Dart má jistě svoje mouchy a není to nějaký zázračný jazyk. Prostě good enough.
-
Flutter je multiplatformní, to by mohlo být zajímavé.
Flutter je zajímavý, už jen tím, že kašle na Javu. Současná verze je rozumně použitelná na iOS i Androidu (a mají i betu pro macOS and alfy pro Windows a Linux). Dart je poměrně slušný jazyk (pro tyto účely), na rozdíl od třeba JS, se kterým jinak mnohé vlastnosti sdílí. Elegancí sice nemá na SwiftUI, ale to je taky ještě zabugované a nedotažené (a hlavně nejde použít mimo Apple). Kdybych potřeboval psát aplikaci pro Android, sáhnu po Flutteru. Pro začátečníka to je taky docela vhodná platforma, pokud jej zajímá mobilní vývoj.
Dovolím si oponovat.
Flutter není vhodná platforma na mobilní vývoj pro začátečníky, stejně jako jakýkoli jiný multiplatformní nástroj.
Realita je taková, že mobilní vývoj je roztříštěný a hlavní platformy mají každý svůj nativní toolkit pro vývoj aplikací, a tyto jsou navzájem na úrovni kódu a architektury aplikací nekompatibilní. A také vývoj aplikací pro mobily má vyšší nástupní práh než třeba pro vytváření webových stránek.
To jsou fakta která se nedají - principielně - obejít. Žádná zkratka kolem neexistuje. Její hledání je marnění času a úsilí. Pokud to někdo myslí s vývojem na mobily vážně, měl by toto přijmout, a vyjít z toho. Ušetří si hodně zklamání a zbydou mu síly na to dělat věci pořádně.
Nadšenci kteří do toho naskočí přes nějaký multiplatformní nástroj který se pokouší překlenou tuto roztříštěnost dalšími vrstvami neustále se rozpadávajícího toolchainu dalších nástrojů, nadšeně napíšou Hello World a pak možná kalkulačku, a pak zjistí že na cokoli dalšího potřebují rozumět nejen té multiplatformní věci navrchu, ale i těm platformám pod tím, k čemuž je jim zkušenost s Flutterem, React Native nebo Ionicem v podstatě nanic, a k tomu všemu musí rozumět i těm udělátorům které z jejich multiplatformní aplikace udělají nativní appku, a že jim spousta věcí z nativních frameworků chybí a tak buď začnou programovat i nativně a bastlit to zpětně do své multiplatformní aplikace, nebo jsou odkázáni na komponenty třetích stran do kterých nevidí a které ty jejich vývojáře taky nebude bavit věčně udržovat.
Mluvím ze zkušenosti takových možná patnácti let vývoje pro mobilní aplikace, prošel jsem na mobilech od mikro Javy přes Objc až po Swift. Pracuji pro firmu která vyvíjí nativní softwarovou knihovnu kterou bohužel musíme wrappovat i do ne-nativních toolů, a je to... příšerný.
PS: Flutter sice není React Native, nicméně v principu jde o stejný typ nástroje... k přečtení dporučuji (včetně tam odkazovaných původních zdrojů) https://www.ackee.cz/blog/airbnb-konci-s-react-native/
Flutter ale funguje trochu jinak než různé wrappery wrapperů v JS. Ma soběstačnou knihovnu a vše si kreslí sám, tedy uniformně. Kód běží nativně a využívá naplno GPU. Napadá mě hodně nevýhod Flutteru, ale jeho podpora více platforem to není. Mají dobře našlápnuto, protože Google si může dovolit psát unifikující rozhraní pro různá nativní API. Akorát se člověk musí učit další “standardní” knihovnu a různé podivnosti Dartu.
V obecné rovině je asi vždy lepší použít na iOS přímo jejich API ve Swiftu, případně SwiftUI, což třeba u nás děláme, protože nás Android nezajímá, ale kdyby zajímal, byl by Flutter horkým kandidátem.
-
k přečtení dporučuji (včetně tam odkazovaných původních zdrojů) https://www.ackee.cz/blog/airbnb-konci-s-react-native/
Zajímavé články, toho sekání na Androidu jsem se taky bál, tak jsem si koupil pomalý shitphone s Androidem na testování — problémy nebyly ani na starých androidech, ani na předpotopních iPhonech. Ale stejně by bylo lepší, kdyby Google radši použil Swift, který má lepší syntax, překladač, knihovnu, GC atd. Na Fuchsii už ho používají.
-
Flutter ale funguje trochu jinak než různé wrappery wrapperů v JS. Ma soběstačnou knihovnu a vše si kreslí sám, tedy uniformně. Kód běží nativně a využívá naplno GPU. Napadá mě hodně nevýhod Flutteru, ale jeho podpora více platforem to není. Mají dobře našlápnuto, protože Google si může dovolit psát unifikující rozhraní pro různá nativní API. Akorát se člověk musí učit další “standardní” knihovnu a různé podivnosti Dartu.
V obecné rovině je asi vždy lepší použít na iOS přímo jejich API ve Swiftu, případně SwiftUI, což třeba u nás děláme, protože nás Android nezajímá, ale kdyby zajímal, byl by Flutter horkým kandidátem.
Děkuji za doplnění. Já ty frameworky docela znám, píšu do nich ty wrappery pro naši nativní knihovnu 🥴.
Je pravda že Flutter si UI zásadně kreslí sám (na iOS snad už taky přechází z OpenGL na Metal), a to je problém v okamžiku kdy chcete zapojit systémové frameworky které Flutter (Google) sám o sobě nepodporuje a nebo knihovny třetích stran: všechno se musí přemostit a cokoli co souvisí s UI udělat pro Flutter od základu znovu. Navíc Flutter pro přidávání knihoven třetích stran (možná i vlastních?) na iOS používá Cocoapods, což přináší další nestabilní vrstvu která některé věci řeší reverse engineeringem Xcode, což není zrovna stabilní praktika která v důsledku vede k takovému tomu vytloukání flagu flagem aby to fungovalo.
Společným problémem těchto ne-nativních frameworků je podle mně že buď jim jdete totálně po srsti a děláte věci výhradně tak jak vyžadují, sledujete jejich vývoj a neustále upgradujete (zpětná kompatibilita nebývá jejich silnou stránkou, překotný vývoj spíš pravidlem), a smíříte se s tím že některé věci prostě "nejdou", a že jste pořád za možnostmi systémových frameworků - to u in-house vyvíjených jednoúčelových utilit asi i může být snesitelný trade-off - nebo jste neustále v problémech že se vám to rozkližuje...
Podle mně nepříjemný vendor lock.
Pokud vývojář začne s Fluterrem, tak se nenaučí "mobilní vývoj", ale Flutter a buď u něj zůstane, nebo musí začít zase skoro od nuly s něčím jiným.
PS: Obecně mi taky vadí taková abych řekl "devopsace" vývoje - místo soustředění se na vlastní funkčnost aplikace nebo knihovny, tráví vývojáři stále více času tím že spravují různé "pomocné" tooly, psané každý v jiném jazyce, s jiným názvoslovím a praktikami, které jsou psané bezohledně k okolí s tím že se snaží docílit hegemonie ve své sub-sub-doméně a vynutit si kompatibilitu okolí, což se jim často na pár měsíců slávy povede, než se ten krysí závod zase převalí zase jinam.
-
Flutter ale funguje trochu jinak než různé wrappery wrapperů v JS. Ma soběstačnou knihovnu a vše si kreslí sám, tedy uniformně. Kód běží nativně a využívá naplno GPU. Napadá mě hodně nevýhod Flutteru, ale jeho podpora více platforem to není. Mají dobře našlápnuto, protože Google si může dovolit psát unifikující rozhraní pro různá nativní API. Akorát se člověk musí učit další “standardní” knihovnu a různé podivnosti Dartu.
V obecné rovině je asi vždy lepší použít na iOS přímo jejich API ve Swiftu, případně SwiftUI, což třeba u nás děláme, protože nás Android nezajímá, ale kdyby zajímal, byl by Flutter horkým kandidátem.
Je pravda že Flutter si UI zásadně kreslí sám (na iOS snad už taky přechází z OpenGL na Metal), a to je problém v okamžiku kdy chcete zapojit systémové frameworky které Flutter (Google) sám o sobě nepodporuje a nebo knihovny třetích stran: všechno se musí přemostit a cokoli co souvisí s UI udělat pro Flutter od základu znovu.
Jo, poslední verze používá Metal.
U toho UI se dají nativní prvky vkládat (embedding) do stromu prvků napsaných ve Flutteru. Zatím jsem to využil jen pro web view, kde s tím problém nebyl. To přemostění nativních API právě dělá Google, prostředků na to má dost.
V zásadě máte pravdu, že to je pořád vopruz, a osobně preferuji na iOS SwiftUI, ale pro Android (nebo desktop) bych použil spíše Flutter (je tam ostatně lépe integrován, u toho Xcode je to nepěkný hack).
-
Ten mobilni vyvoj je stejne takova nevdecna vec. Trba takovy Telco operator bude mit vsehovsudy jedinou mobilni aplikaci, vs mnoho desitek backendovych service a webovych ui. Divim se, ze se nekomu vubec chce mobilni vyvoj ucit. A to ani nepocitam, ze co si chcete sami pro vlastni potrebu pro mobil vyvinout? Nic zajimaveho me nenapada.
-
Ad haskell: asi bych taky rád viděl kontrolovaný experiment... těžko říct.
Včera jsem dostal dotaz od začínající programátorky ohledně počítání fibonacciho posloupnosti. V Pythonu. No... a nějak jsem skončil s tím, že jsem to vysvětloval jak v Haskellu, tak v Pythonu. A ve výsledku to prostě v Haskellu pořád vypadalo jako "popis řešení problému", zatímco v pythonu to zůstávala "posloupnost instrukcí", byť značně učesanější než na začátku a zkušený Python programátor v tom ten popis řešení je asi "schopen uvidět". FP řešení v pythonu nevypadá dobře už vůbec. Ale připadá mi, že přechod od "popisu řešení" k "posloupnosti instrukcí" je výrazně jednodušší, než postup opačným směrem. Ona pak spousta lidí programuje systémem "pokus-omyl" - což v haskellu tak trochu nejde. Zase, nevím nakolik je to špatně, když je člověk začátečník, tak to možná potřebuje....
Jinak ad výhoda Haskellu: vzhledem k tomu, že vyvíjím mimo jiné jednu aplikaci pro Android a google přišel s Kotlinem, tak v tom můžu prakticky okamžitě programovat a akorát řeším, "jak se tahle věc v Haskellu syntakticky zapíše v kotlinu". A podobně to pravděpodobně bude vypadat i s Rustem. Takže pokud jde o praktické využití, tak je mnohem větší, než to na první pohled vypadá.
-
Ad haskell: asi bych taky rád viděl kontrolovaný experiment... těžko říct.
Včera jsem dostal dotaz od začínající programátorky ohledně počítání fibonacciho posloupnosti. V Pythonu. No... a nějak jsem skončil s tím, že jsem to vysvětloval jak v Haskellu, tak v Pythonu. A ve výsledku to prostě v Haskellu pořád vypadalo jako "popis řešení problému", zatímco v pythonu to zůstávala "posloupnost instrukcí", byť značně učesanější než na začátku a zkušený Python programátor v tom ten popis řešení je asi "schopen uvidět". FP řešení v pythonu nevypadá dobře už vůbec. Ale připadá mi, že přechod od "popisu řešení" k "posloupnosti instrukcí" je výrazně jednodušší, než postup opačným směrem. Ona pak spousta lidí programuje systémem "pokus-omyl" - což v haskellu tak trochu nejde. Zase, nevím nakolik je to špatně, když je člověk začátečník, tak to možná potřebuje....
Jinak ad výhoda Haskellu: vzhledem k tomu, že vyvíjím mimo jiné jednu aplikaci pro Android a google přišel s Kotlinem, tak v tom můžu prakticky okamžitě programovat a akorát řeším, "jak se tahle věc v Haskellu syntakticky zapíše v kotlinu". A podobně to pravděpodobně bude vypadat i s Rustem. Takže pokud jde o praktické využití, tak je mnohem větší, než to na první pohled vypadá.
Jednou jsem si zkousel delat tutorial Haskellu a docela me zarazila vysoka uroven abstrakce. Nejake monoidy a monady. Prislo mi to dost slozite. Podle me to moc pro zacatecniky neni.
-
ve výsledku to prostě v Haskellu pořád vypadalo jako "popis řešení problému"
To je základní rys deklarativních jazyků. Ono vůbec to odrazování od FP je dáno nepochopením didaktiky programování, ale to by bylo na delší diskusi (na akademické půdě, ne v rootím obludáriu).
-
Jednou jsem si zkousel delat tutorial Haskellu a docela me zarazila vysoka uroven abstrakce. Nejake monoidy a monady. Prislo mi to dost slozite. Podle me to moc pro zacatecniky neni.
Možná bych zkusil přirovnání: hrát na housle je fakt těžký, pro začátečníky to moc není. Je potřeba umět noty, rytmus, intonaci, neskutečnou koordinaci v pravé ruce a přesnost v levé. Měli by zkusit kytaru.
-
Ad haskell: asi bych taky rád viděl kontrolovaný experiment... těžko říct.
Včera jsem dostal dotaz od začínající programátorky ohledně počítání fibonacciho posloupnosti. V Pythonu. No... a nějak jsem skončil s tím, že jsem to vysvětloval jak v Haskellu, tak v Pythonu. A ve výsledku to prostě v Haskellu pořád vypadalo jako "popis řešení problému", zatímco v pythonu to zůstávala "posloupnost instrukcí", byť značně učesanější než na začátku a zkušený Python programátor v tom ten popis řešení je asi "schopen uvidět". FP řešení v pythonu nevypadá dobře už vůbec. Ale připadá mi, že přechod od "popisu řešení" k "posloupnosti instrukcí" je výrazně jednodušší, než postup opačným směrem. Ona pak spousta lidí programuje systémem "pokus-omyl" - což v haskellu tak trochu nejde. Zase, nevím nakolik je to špatně, když je člověk začátečník, tak to možná potřebuje....
Jinak ad výhoda Haskellu: vzhledem k tomu, že vyvíjím mimo jiné jednu aplikaci pro Android a google přišel s Kotlinem, tak v tom můžu prakticky okamžitě programovat a akorát řeším, "jak se tahle věc v Haskellu syntakticky zapíše v kotlinu". A podobně to pravděpodobně bude vypadat i s Rustem. Takže pokud jde o praktické využití, tak je mnohem větší, než to na první pohled vypadá.
Jednou jsem si zkousel delat tutorial Haskellu a docela me zarazila vysoka uroven abstrakce. Nejake monoidy a monady. Prislo mi to dost slozite. Podle me to moc pro zacatecniky neni.
Existují i kvalitní tutoriály pro začátečníky. Slova na mon- by měla být v textech pro normální lidi zakázána >:(
-
Slova na mon- by měla být v textech pro normální lidi zakázána >:(
To nejde, protože se tak jmenují ty classes. Jasně, dalo by se to učit stylem "tady to použijte takhle a nemusíte moc pátrat po tom, proč to tak je", ale pak je otázka, proč v takovém případě vůbec učit Haskell...
Pokud by byl problém v tom, že má Haskell moc abstrakcí, dal by se použít Elm. Ten by byl pro začátečníka nejspíš daleko stravitelnější a skoro všechny ty (domnělé) pozitivní efekty by u něj byly taky. Výhoda je, že je hodně orientovaný na web, což je imho pro nováčka velký pozitivum (něco píše a hned vidí v prohlížeči výsledek, ideálně i graficky zajímavý -> cenný quick win a wow efekt).
-
Slova na mon- by měla být v textech pro normální lidi zakázána >:(
To nejde, protože se tak jmenují ty classes. Jasně, dalo by se to učit stylem "tady to použijte takhle a nemusíte moc pátrat po tom, proč to tak je", ale pak je otázka, proč v takovém případě vůbec učit Haskell...
Tohles tady kdysi tvrdil (značně agresivně) ty, nějak moc si poslední dobou protiřečíš.
-
Pokud by byl problém v tom, že má Haskell moc abstrakcí, dal by se použít Elm. Ten by byl pro začátečníka nejspíš daleko stravitelnější a skoro všechny ty (domnělé) pozitivní efekty by u něj byly taky. Výhoda je, že je hodně orientovaný na web, což je imho pro nováčka velký pozitivum (něco píše a hned vidí v prohlížeči výsledek, ideálně i graficky zajímavý -> cenný quick win a wow efekt).
Elm je naprosto zbytečný a nezajímavý. Možná pro učení dětí (taková tříkolka před kolem), ale těžko pro někoho na SŠ nebo VŠ.
-
Tohles tady kdysi tvrdil (značně agresivně) ty, nějak moc si poslední dobou protiřečíš.
Neprotiřečím. Myslím si stejně jako ty, že ty M-words jsou na většinu lidí příliš abstraktní koncepty, ale právě proto, že to bez nich v Haskellu nejde, si myslím, že Haskell není pro většinu lidí vhodný jazyk :)
...a přesně proto si taky myslím, že Elm by byl vhodnější, protože tam se bez M-words obejít dá.
P.S. V čem jiným bych si měl protiřečit?
-
Elm je naprosto zbytečný a nezajímavý. Možná pro učení dětí (taková tříkolka před kolem), ale těžko pro někoho na SŠ nebo VŠ.
No dyť právě. Připomeňme si, čím celý tohle téma začalo: "Dobrý den jsem student střední průmyslové školy" :)
-
Tohles tady kdysi tvrdil (značně agresivně) ty, nějak moc si poslední dobou protiřečíš.
Neprotiřečím. Myslím si stejně jako ty, že ty M-words jsou na většinu lidí příliš abstraktní koncepty, ale právě proto, že to bez nich v Haskellu nejde, si myslím, že Haskell není pro většinu lidí vhodný jazyk :)
Ono to bez nich jde. Nicméně i přes špatnou premisu je tvůj závěr správný :) většina lidí by se měla Haskellu vyhnout obloukem, pokud si nechtějí zamotat hlavu a snížit sebevědomí.
-
Elm je naprosto zbytečný a nezajímavý. Možná pro učení dětí (taková tříkolka před kolem), ale těžko pro někoho na SŠ nebo VŠ.
No dyť právě. Připomeňme si, čím celý tohle téma začalo: "Dobrý den jsem student střední průmyslové školy" :)
SPŠ ale není školka ;)
-
příliš abstraktní koncepty
To mi připomnělo někdejší diskusi o výuce fyziky na úrovni BSc, kde na sebe pokřikovali zastánci a odpůrci výuky obecné TR. Odpůrci argumentovali — na první pohled celkem logicky — tím, že studenti nebudou mít pražádné znalosti dif. geometrie. Nakonec nějakým zázrakem zvítězili zastánci a povedlo se jim sepsat velmi dobrou učebnici TR bez složitých matematických předpokladů. Stejné to je i s FP, že to někomu (kdo se to s vypětím všech sil učil přes složitou algebru) přijde obtížné neznamená, že to nejde mnohem snáz a srozumitelněji. Ovšem tutoriály může psát jen někdo, pro koho je popisované téma brnkačka, ne někdo, kdo to právě pochopil (nebo si to myslí), to se pak jen kupí M-tutoriály s debilními obrázky kolejí a krabiček, které jsou k ničemu. Ale na tom se asi shodneme.
-
...
P.S. V čem jiným bych si měl protiřečit?
;D :D ;) :)
Měl jsi tu těch "debat" s Idrisem málo?
(a s tlupou jeho alter eg?)
(no offence)
-
... to se pak jen kupí M-tutoriály s debilními obrázky kolejí a krabiček, které jsou k ničemu.
Znám poměrně dost lidí, kterým ty "debilní obrázky" pomohly.
Existují i kvalitní tutoriály pro začátečníky. Slova na mon- by měla být v textech pro normální lidi zakázána >:(
Kdo jsou ti "normální lidé"? A také bych rozlišoval ta slova na mon-. Takový monoid jde vysvětlit i lidem bez znalostí algebry během chviličky. S monádou už by to bylo poněkud komplikovanější...
Navíc mi přijde, že se nějak pomíjí, že základy programování (v Haskellu) nutně nemusí ta slova na mon- obsahovat. Tam se spíš narazí na jiné abstrakce, např. Foldable. Asi si každý pod základy programování představujeme něco jiného. :)
-
právě proto, že to bez nich v Haskellu nejde
Ono to bez nich jde.
Nemám s Haskellem praktickou zkušenost, takže se nebudu vyloženě hádat, ale mám za to, že bez Monoid a Monad nenapíšeš v Haskellu nic (ledaže bys to obešel vlastní - míň abstraktní implementací, ale to by pak postrádalo smysl používat Haskell). Bez Applicative se asi obejít dá.
SPŠ ale není školka ;)
No, trochu sis zapřeháněl, že jo :) Imho by Elm byl srozumitelností tak akorát pro tu horší polovinu studentů v prvním ročníku... (EDIT: míněno VŠ) Když se koukneš na ten seznam (domnělých) výhod výuky Haskellu, většina z nich by se naplnila i s Elmem. Nejspíš ne pro všechny studenty, ale jsem docela pevně přesvědčenej, že alespoň pro polovinu z nich by rozdíl v konečném výsledku nebyl žádný (protože prostě k těm partiím, kde by se superiorita Haskellu projevila, by se vůbec neprokousali).
Nevím, jestli jsem úplně dobrý vzorek, protože jsem měl školu tak trochu jako bokovku, zvlášť v bakaláři, ale mně Haskell na škole nedal vůbec nic. Říkal jsem si jenom "hm, takový nějaký divný jazyk, kde se i ty nejjednodušší věci dělají strašlivě komplikovaně, jenom aby měli matematici radost". Naučil jsem se to dostatečně na to, abych zkoušku dal a vůbec nic jsem z toho neměl. Teprve později, když jsem objevil Erlang, jsem se k Haskellu obloukem vrátil a uměl ho trochu docenit. Kdybych se ale s Erlangem nepotkal, nedal by mi ten kurz vůbec nic, protože bych to prostě všechno zapomněl, páč bych to (jako většina lidí v praxi) nikdy nepoužil, byla by to pro mě jenom vzpomínka na jednu z mnoha bizarností z VŠ...
Měl jsi tu těch "debat" s Idrisem málo?
Psal "poslední dobou", proto jsem se na to ptal.
-
... to se pak jen kupí M-tutoriály s debilními obrázky kolejí a krabiček, které jsou k ničemu.
Znám poměrně dost lidí, kterým ty "debilní obrázky" pomohly.
Já se bez uzardění přiznám, že jsem jeden z nich. Byl to takový první přískok: pochopil jsem jednu instanci, řekl jsem si "aha, takže na tohle je to dobré" a teprve později pochopil, že to byla jenom instance a že ve skutečnosti je to daleko obecnější koncept, který kromě té jedné instance zahrnuje i spoustu dalších.
Bez toho úspěchu s prvním přískokem bych možná hodil flintu do žita a dál se tím už nikdy nezabýval :)
-
... to se pak jen kupí M-tutoriály s debilními obrázky kolejí a krabiček, které jsou k ničemu.
Znám poměrně dost lidí, kterým ty "debilní obrázky" pomohly.
Ale k čemu?
-
A také bych rozlišoval ta slova na mon-. Takový monoid jde vysvětlit i lidem bez znalostí algebry během chviličky. S monádou už by to bylo poněkud komplikovanější...
To jako tohle: https://cs.m.wikipedia.org/wiki/Monoid#Teorie_kategori%C3%AD ? To se mi nějak nezdá, že by to šlo během chviličky.
-
Navíc mi přijde, že se nějak pomíjí, že základy programování (v Haskellu) nutně nemusí ta slova na mon- obsahovat.
Ano, to jsem přesně psal.
-
právě proto, že to bez nich v Haskellu nejde
Ono to bez nich jde.
Nemám s Haskellem praktickou zkušenost, takže se nebudu vyloženě hádat, ale mám za to, že bez Monoid a Monad nenapíšeš v Haskellu nic
Nenapadá mě nic, co by bez nich nešlo. Některé jiné FP jazyky je přece vůbec nemají a taky se používají.
-
Navíc mi přijde, že se nějak pomíjí, že základy programování (v Haskellu) nutně nemusí ta slova na mon- obsahovat.
Ano, to jsem přesně psal.
A pak je lepší ten Elm :)
-
Nemám s Haskellem praktickou zkušenost, takže se nebudu vyloženě hádat, ale mám za to, že bez Monoid a Monad nenapíšeš v Haskellu nic (ledaže bys to obešel vlastní - míň abstraktní implementací, ale to by pak postrádalo smysl používat Haskell). Bez Applicative se asi obejít dá.
Prakticky: bez Monoidu se dá obejít úplně v pohodě. V tutorialech je Monoid asi z toho důvodu, že když se vykládají TypeClassy, tak zrovna Monoid je hezký reprezentativní příklad. Není to zas tak často používaná abstrakce.
Bez Monadu se dá taky psát docela v pohodě. Pro začátečníka bohatě stačí IO monad s "do" notací a nějaké vysvětlení, kdy se ten efekt spustí a kdy použít let a kdy <-. Sice jsem s tím na začátku taky chvíli bojoval, ale nepřipadá mi to nějak složitý.
-
mně Haskell na škole nedal vůbec nic
Mně taky ne, když jsem ho měl povinně ve druháku. Ale doktorandům nebo postdokům zaplatí jeden článek třeba “dovolenou” na Havaji nebo Bali, když tam je zrovna konference. Normální dovolená je vlastně horší, páč si sám platíš let, hotel a nedostaneš diety €50/den. Možná to je pro mnoho lidí, co na to má hlavu, ta hlavní motivace.
-
Navíc mi přijde, že se nějak pomíjí, že základy programování (v Haskellu) nutně nemusí ta slova na mon- obsahovat.
Ano, to jsem přesně psal.
A pak je lepší ten Elm :)
Ty si nedáš pokoj :P Však ti ho nikdo nebere, na výuku proč ne, Pascal je taky na začátku lepší než asembler (teď už se asi moc nepoužívá, ale za mých mladých let Python nebyl). Vlastně bych docela rád viděl nějaký opravdu kvalitní úvod do programování používající Elm (na úrovni prvního ročníku VŠ).
-
Prakticky: bez Monoidu se dá obejít úplně v pohodě. V tutorialech je Monoid asi z toho důvodu, že když se vykládají TypeClassy, tak zrovna Monoid je hezký reprezentativní příklad. Není to zas tak často používaná abstrakce.
Ok, díky za korekci.
Bez Monadu se dá taky psát docela v pohodě. Pro začátečníka bohatě stačí IO monad s "do" notací a nějaké vysvětlení, kdy se ten efekt spustí a kdy použít let a kdy <-. Sice jsem s tím na začátku taky chvíli bojoval, ale nepřipadá mi to nějak složitý.
Chceme učit nováčky Haskell, protože se naučí čistě a jasně myslet a pochopí, co jsou to typy, a pak jim ani nebudeme umět pořádne vysvětlit, co je přesně "<-" a řekneme jim "to je taková speciální věc, toho si nevšímejte, protože byste to nepochopili"? Nebo si budeme dokonce vymýšlet pohádky o tom, že do blok je takový "jakoby vlastně sekvenční imperatviní blok v neimperativním jazyce"? No nevím...
Ale doktorandům nebo postdokům zaplatí jeden článek třeba...
Já to dobře znám, dělal jsem na částečný úvazek ve výzkumu nějakých devět let nebo kolik :)
-
Nebo si budeme dokonce vymýšlet pohádky o tom, že do blok je takový "jakoby vlastně sekvenční imperatviní blok v neimperativním jazyce"? No nevím...
To není pohádka, to tak je ;)
-
To není pohádka, to tak je ;)
Jenže bez vysvětlení podstaty je to zavádějící. Student by se automaticky zeptal "Aha, takže tenhle blok překládá překladač jinak než zbytek programu?", "A proč teda není takový celý program? Bylo by to pak jak v Pascalu a tímpádem mnohem jednodušší", popřípadě ještě hůř: "aha, takže vy nám tady celou dobu vykládáte, jak jsou lazy pure funkce super a teď s nima nejde ani blbej printf?!"
Ale jo, s dávkou didaktického talentu by se to asi vysvětlit dalo - popsalo by se prostě IO + ty operace z Monad + to, že do je jenom syntaktický cukr, akorát by se zamlčelo, že ty operace tvoří tu Monad a že se dají použít i jinde.
...akorát mi to přijde takový... no typicky akademický - prvně se vymyslí skvělý ohýbák ("Pojďme učit Haskell!") a pak se musí složitě vymýšlet narovnávák, aby to vůbec v praktické výuce dávalo smysl ;)
-
To není pohádka, to tak je ;)
Jenže bez vysvětlení podstaty je to zavádějící. Student by se automaticky zeptal "Aha, takže tenhle blok překládá překladač jinak než zbytek programu?", "A proč teda není takový celý program? Bylo by to pak jak v Pascalu a tímpádem mnohem jednodušší", popřípadě ještě hůř: "aha, takže vy nám tady celou dobu vykládáte, jak jsou lazy pure funkce super a teď s nima nejde ani blbej printf?!"
Ale jo, s dávkou didaktického talentu by se to asi vysvětlit dalo - popsalo by se prostě IO + ty operace z Monad + to, že do je jenom syntaktický cukr, akorát by se zamlčelo, že ty operace tvoří tu Monad a že se dají použít i jinde.
...akorát mi to přijde takový... no typicky akademický - prvně se vymyslí skvělý ohýbák ("Pojďme učit Haskell!") a pak se musí složitě vymýšlet narovnávák, aby to vůbec v praktické výuce dávalo smysl ;)
Takové otázky jsou ale skvělé, zvídaví studenti jsou radost.
Stačí postupovat metodicky. Na astrofyzice taky na nikoho na začátku nevybalí limitní cykly v akrečních discích dvojhvězd, nejdříve musí student vstřebat nějaké ty derivace, vícerozměrné integrály, špetku teorie chaosu, relativitu atd.
Jak jsi sám psal, učit z fleku FP by byl zajímavý experiment, jen nevím, poskytuje nějaká pojišťovna produkt na odstraňování duševních poruch způsobených bifunktory?
-
A také bych rozlišoval ta slova na mon-. Takový monoid jde vysvětlit i lidem bez znalostí algebry během chviličky. S monádou už by to bylo poněkud komplikovanější...
To jako tohle: https://cs.m.wikipedia.org/wiki/Monoid#Teorie_kategori%C3%AD ? To se mi nějak nezdá, že by to šlo během chviličky.
Taky na to člověk nemusí jít přes TK, ale třeba přes grupy. Možná to není tak elegantní, ale ty nároky jsou imho o dost menší.
Bez Monadu se dá taky psát docela v pohodě. Pro začátečníka bohatě stačí IO monad s "do" notací a nějaké vysvětlení, kdy se ten efekt spustí a kdy použít let a kdy <-. Sice jsem s tím na začátku taky chvíli bojoval, ale nepřipadá mi to nějak složitý.
Chceme učit nováčky Haskell, protože se naučí čistě a jasně myslet a pochopí, co jsou to typy, a pak jim ani nebudeme umět pořádne vysvětlit, co je přesně "<-" a řekneme jim "to je taková speciální věc, toho si nevšímejte, protože byste to nepochopili"? Nebo si budeme dokonce vymýšlet pohádky o tom, že do blok je takový "jakoby vlastně sekvenční imperatviní blok v neimperativním jazyce"? No nevím...
Ne, ukáže se bind a then, a ukáže se, že do-blok je cukr. A pak ti, které to zaujme, mohou pokračovat dál třeba tím, že IO a Maybe mají něco společného... Zase mi přijde, že narážíme na neexistující problém. IO není něco, co patří na druhou přednášku...
Obecně by bylo fajn, kdyby někteří nestavěli teorii proti praxi.
-
Ne, ukáže se bind a then, a ukáže se, že do-blok je cukr. A pak ti, které to zaujme, mohou pokračovat dál třeba tím, že IO a Maybe mají něco společného... Zase mi přijde, že narážíme na neexistující problém. IO není něco, co patří na druhou přednášku...
Ok, fair enough.
-
A také bych rozlišoval ta slova na mon-. Takový monoid jde vysvětlit i lidem bez znalostí algebry během chviličky. S monádou už by to bylo poněkud komplikovanější...
To jako tohle: https://cs.m.wikipedia.org/wiki/Monoid#Teorie_kategori%C3%AD ? To se mi nějak nezdá, že by to šlo během chviličky.
Taky na to člověk nemusí jít přes TK, ale třeba přes grupy. Možná to není tak elegantní, ale ty nároky jsou imho o dost menší.
Jsou menší, ale je to něco jiného.
-
Obecně by bylo fajn, kdyby někteří nestavěli teorii proti praxi.
Howgh
-
Každopádně jsem rád, že moje děcka se ty příkazy, ify, smyčky a funkce naučily pěkně po staru v LightBotovi a Scratchi, takže ten experiment s FP jako prvním paradigmatem už na nich nikdo neudělá ani kdyby chtěl ;)
(https://theawesomedaily.com/wp-content/uploads/2020/04/puts-on-sunglasses-feat-1-1-620x350.jpg)
-
Každopádně jsem rád, že moje děcka se ty příkazy, ify, smyčky a funkce naučily pěkně po staru v LightBotovi a Scratchi, takže ten experiment s FP jako prvním paradigmatem už na nich nikdo neudělá ani kdyby chtěl ;)
Karel už je out?
-
...Delam ted na projektu s jednim skoro dedou, co zacinal jako databazista, a ted dela v Jave. A vstavaji mi vlasy hruzou pokazde, kdyz to prase v tom vidim neco naprogramovat. Neumi si blbec jeden dat dohromady 1+1 a vyrabi shity, ani Jackson si neda dohromady jak pouzit, misto toho rucne pracuje s jsnem v Mape misto aby si to namapoval na objekt a kdyz mu na to neco rikam, tak je protivny. Proste to nepobira a nema na to. A pritom hloupy neni. Jsem presvedcen, ze v Pythonu by dokazal programovat lip, protoze je jednodussi.
Nejmenuje se nahodou Petr a neni z Ruska? S jednim s naprosto stejnym problemem jsem pracoval, endpointy testoval tak ze si napsal string presne jak by jej Jackson vygeneroval misto toho aby jej pouzil a nedokazal nejen to pouzit i v beznym kodu kdy mel desitky dalsich endpointu jako vzor.
-
...Delam ted na projektu s jednim skoro dedou, co zacinal jako databazista, a ted dela v Jave. A vstavaji mi vlasy hruzou pokazde, kdyz to prase v tom vidim neco naprogramovat. Neumi si blbec jeden dat dohromady 1+1 a vyrabi shity, ani Jackson si neda dohromady jak pouzit, misto toho rucne pracuje s jsnem v Mape misto aby si to namapoval na objekt a kdyz mu na to neco rikam, tak je protivny. Proste to nepobira a nema na to. A pritom hloupy neni. Jsem presvedcen, ze v Pythonu by dokazal programovat lip, protoze je jednodussi.
Nejmenuje se nahodou Petr a neni z Ruska? S jednim s naprosto stejnym problemem jsem pracoval, endpointy testoval tak ze si napsal string presne jak by jej Jackson vygeneroval misto toho aby jej pouzil a nedokazal nejen to pouzit i v beznym kodu kdy mel desitky dalsich endpointu jako vzor.
Ne, a takovychle lidi bude hromady. Nekteri proste nedokazou ani pochopit, ze kdyz mam na vstupu nejaky json string, a staci mi pracovat s jedinym atributem toho jsonu, tak mi staci si vyrobit model ktery obsahuje ten jediny atrbut a nmapovat si to na ten model. Vsehno je lepsi nez pouzivat v Jave rucne Map.get("key"). Lidi jsou retardovani a neumi si dat 1+1 dohromady.
-
Karel už je out?
IIRC, oficiální nástupce Karla je za peníze a snad dokonce jenom pro Windows (?)
LightBot je takový Karel, akorát hezčí, modernější, jednodušší a zdarma :)
-
Karel už je out?
IIRC, oficiální nástupce Karla je za peníze a snad dokonce jenom pro Windows (?)
Pro Karla se vyplatí zprovoznit VM :)
-
Robot KAREL 4.2 lze stáhnout zdarma a snad jde spustit ve wine.
Existují i verze online na webu.
-
Dobrý den jsem student střední průmyslové školy , z matematiky mám 1. V poslední době jsem uvažoval o začátku s programováním, podíval jsem se na internet, jaký je dobrý začínací jazyk. Dohrabal jsem se k Javě nebo PHP. Je tu ještě nějaký jazyk, který byste doporučili pro začátečníka? (dělal jsem něco v html, ale to programování není)
Osobně zvažuji začít Javou
Děkuji
To nemáte na průmce předměty o programování?
Pokud zajdu do historie 2006 - 2010 - tak nás na průmce učili pascal, html, c, javascript a nakonec php
Můsím teda říct, že mě ani jeden z těch jazyků v té době nijak nechytil a nechápal jsem jejich využití v reálném životě.
Chci tím říct že je dobré se na programovací jazyk dívat stejným pohledem jako na lidské jazyky. Člověk se učí angličtinu aby mohl jezdit na dovolené a objednat si v restauraci pivo? Nebo se člověk učí angličtinu aby mohl pracovat v Americe ? Proč se člověk vlastně učí angličtinu u nás v české republice kde všichni mezi sebou mluví česky.
S tím souvisí ambice které máš pro to to někam dotáhnout. Pokud se učíš angličtinu jen kvůli testům a proplutí ve škole, daleko se s ní nedostaneš a postupem času zapomeš. Pokud se však učíš angličtinu, aby jsi mohl číst články v angličtině, koukat na filmy v angličtině, psát si s lidmi v angličtině, mluvit s lidmi anglicky, domluvit se na cestách, používat jazyk při práci a škole (erasmus) pak se ti stane nástrojem, který používáš bez přemýšlení.
Programování je na tom úplně stejně, pokud nemáš cíl a vůli někam to dotáhnout, je to ztráta času.
Souhlasím s názorama zde v diskusi, že na tuto otázku by se mělo jít opačným směrem a říct si spíš čeho chci dosáhnout ve svém programování.
Chci psát hry ?
Chci psát automatizaci ?
Chci dělat web ?
Chci dělat appku na android / apple ?
Je to na Windows / Linux ?
Chci mít grafický rozhraní, nebo příkazový řádek ?
Makra pro Excel ?
Chci dělat analýzy / grafy ?
Ovládat roboty ?
Ovládat Raspberry Pi ?
Ovládat arduino ?
Budu po používat já nebo celý svět?
Pokud jsi si jistý cílem čeho chceš skutečně dosáhnout můžeš začít hledat jaké nástroje jsou pro daný problém nejvhodnější. Na to je zde spousty názorů a můžeš začít zkoušet. Další jistotu máš, že pokud chceš začít něčím jednoduchým, většinou to napadlo někoho před tebou a při troše štěstí zanechal na internetu svojí cestu trápení a nalezená řešení.
V počátku bych ignoroval nějakou čistotu kódu, a best practices. Důležitý je, aby si věděl co si napsal a chápal přesně jak to funguje. Postupem času se budeš sám fackovat za špatný kód který si dřív vymyslel protože si zkrátka neviděl vetší obraz a důsledky co to způsobí. To je však v pořádku, je to vývoj.
Počítej s tím, že to budou roky než budeš moct říct že umíš programovat.
Pokud se budeš hlásit o zaměstnání a příjdeš na pohovor s tím co si sám z 0 vymyslel v nějakém jazyku, budeš mít rozhodně větší šanci na úspěch než ten, kdo přijde na pohovor a řekne, že se na škole učil v javě.
Platí zde pravidlo, že pokud umíš jeden jazyk na úrovni toho že si k tomu sedneš a za den nabušíš funkční program bez hledání ničeho. Tak jsi programátor a jazyky jsou jen různé lopaty co právě používáš.
Pro mě konkrétně byla motivace naučit se programovat automatizace mojí práce. Dělám konstruktéra a spoustu rutiních operací co nešli dělat nijak než odklikat, jsem se naučil automatizovat. Z nuly jsem se naučil jazyk (visual basic), který byl pro konkrétní případ nejvhodnější. Nyní už převážně píšu automatizaci pro další firmy které mají stejný problém s rutiními operacemi.
Zde byl efekt programu okamžitý ať byl napsaný čistě nebo bastlení - nad vývojem jsem ztrávil cca 14 dní a ten program dělal práci, která byla na týden za pár sekund. Tu práci děláš tak 10x za rok. Rok 2019 měl 251 pracovních dnů a automatizace ušetřila 50 dní. Ať si lidi říkají co chtějí o jazycích a jejich dobrých a špatných stránkách. Pokud něco vytvoříš z ničeho a funguje to je to pořád lepší než nedělat nic!
-
Každopádně jsem rád, že moje děcka se ty příkazy, ify, smyčky a funkce naučily pěkně po staru v LightBotovi a Scratchi, takže ten experiment s FP jako prvním paradigmatem už na nich nikdo neudělá ani kdyby chtěl ;)
Karel už je out?
Logo je taky fajn. V Linuxu např. jako KTurtle
-
...Pokud se učíš angličtinu jen kvůli testům a proplutí ve škole, daleko se s ní nedostaneš a postupem času zapomeneš. Pokud se však učíš angličtinu, aby jsi mohl číst články v angličtině, koukat na filmy v angličtině, psát si s lidmi v angličtině, mluvit s lidmi anglicky, domluvit se na cestách, používat jazyk při práci a škole (erasmus) pak se ti stane nástrojem, který používáš bez přemýšlení.
Programování je na tom úplně stejně, pokud nemáš cíl a vůli někam to dotáhnout, je to ztráta času.
...
Dělám konstruktéra a spoustu rutinních operací co nešli dělat nijak než odklikat, jsem se naučil automatizovat. Z nuly jsem se naučil jazyk (visual basic), který byl pro konkrétní případ nejvhodnější. Nyní už převážně píšu automatizaci pro další firmy které mají stejný problém s rutinními operacemi....
Naprosto souhlasím. Kdysi jsem si usmyslel, že se naučím stroják a assembler pro 8080. Tak jsem si vzal příčurku a když jsem byl na desáté stránce, zjistil jsem, že už jsem zapomněl co bylo na prvních pěti. Pak jsem potřeboval naprogramovat nějaký testovací program čím jsem nechtěl otravovat pány programátory a metodou pokusu a omylu jsem se to obstojně naučil. Šéf sice vrčel, že se tím zdržuji a on mi potřebuje zadávat jiné práce, ale mně se to pak pár let hodilo. Taky jsem se naučil BASIC (k Visual Basicu jsem už nedospěl), například jsem napsal prográmek co ve výkresu z AutoCADu pod MS DOS vyhledával písmena s diakritikou a překódoval je do kódu co mu rozuměl AutoCAD pod wokny.
Ale za programátora jsem se nepovažoval. BASIC, pokud jsem to zkoušel, si se současnými wokny moc nerozumí, což je škoda. IMHO to byl dobrý jazyk pro neprogramátory.
-
Dobrý den jsem student střední průmyslové školy , z matematiky mám 1. V poslední době jsem uvažoval o začátku s programováním, podíval jsem se na internet, jaký je dobrý začínací jazyk. Dohrabal jsem se k Javě nebo PHP. Je tu ještě nějaký jazyk, který byste doporučili pro začátečníka? (dělal jsem něco v html, ale to programování není)
Osobně zvažuji začít Javou
Děkuji
To nemáte na průmce předměty o programování?
Pokud zajdu do historie 2006 - 2010 - tak nás na průmce učili pascal, html, c, javascript a nakonec php
Můsím teda říct, že mě ani jeden z těch jazyků v té době nijak nechytil a nechápal jsem jejich využití v reálném životě.
Chci tím říct že je dobré se na programovací jazyk dívat stejným pohledem jako na lidské jazyky. Člověk se učí angličtinu aby mohl jezdit na dovolené a objednat si v restauraci pivo? Nebo se člověk učí angličtinu aby mohl pracovat v Americe ? Proč se člověk vlastně učí angličtinu u nás v české republice kde všichni mezi sebou mluví česky.
S tím souvisí ambice které máš pro to to někam dotáhnout. Pokud se učíš angličtinu jen kvůli testům a proplutí ve škole, daleko se s ní nedostaneš a postupem času zapomeš. Pokud se však učíš angličtinu, aby jsi mohl číst články v angličtině, koukat na filmy v angličtině, psát si s lidmi v angličtině, mluvit s lidmi anglicky, domluvit se na cestách, používat jazyk při práci a škole (erasmus) pak se ti stane nástrojem, který používáš bez přemýšlení.
Programování je na tom úplně stejně, pokud nemáš cíl a vůli někam to dotáhnout, je to ztráta času.
Souhlasím s názorama zde v diskusi, že na tuto otázku by se mělo jít opačným směrem a říct si spíš čeho chci dosáhnout ve svém programování.
Chci psát hry ?
Chci psát automatizaci ?
Chci dělat web ?
Chci dělat appku na android / apple ?
Je to na Windows / Linux ?
Chci mít grafický rozhraní, nebo příkazový řádek ?
Makra pro Excel ?
Chci dělat analýzy / grafy ?
Ovládat roboty ?
Ovládat Raspberry Pi ?
Ovládat arduino ?
Budu po používat já nebo celý svět?
Pokud jsi si jistý cílem čeho chceš skutečně dosáhnout můžeš začít hledat jaké nástroje jsou pro daný problém nejvhodnější. Na to je zde spousty názorů a můžeš začít zkoušet. Další jistotu máš, že pokud chceš začít něčím jednoduchým, většinou to napadlo někoho před tebou a při troše štěstí zanechal na internetu svojí cestu trápení a nalezená řešení.
V počátku bych ignoroval nějakou čistotu kódu, a best practices. Důležitý je, aby si věděl co si napsal a chápal přesně jak to funguje. Postupem času se budeš sám fackovat za špatný kód který si dřív vymyslel protože si zkrátka neviděl vetší obraz a důsledky co to způsobí. To je však v pořádku, je to vývoj.
Počítej s tím, že to budou roky než budeš moct říct že umíš programovat.
Pokud se budeš hlásit o zaměstnání a příjdeš na pohovor s tím co si sám z 0 vymyslel v nějakém jazyku, budeš mít rozhodně větší šanci na úspěch než ten, kdo přijde na pohovor a řekne, že se na škole učil v javě.
Platí zde pravidlo, že pokud umíš jeden jazyk na úrovni toho že si k tomu sedneš a za den nabušíš funkční program bez hledání ničeho. Tak jsi programátor a jazyky jsou jen různé lopaty co právě používáš.
Pro mě konkrétně byla motivace naučit se programovat automatizace mojí práce. Dělám konstruktéra a spoustu rutiních operací co nešli dělat nijak než odklikat, jsem se naučil automatizovat. Z nuly jsem se naučil jazyk (visual basic), který byl pro konkrétní případ nejvhodnější. Nyní už převážně píšu automatizaci pro další firmy které mají stejný problém s rutiními operacemi.
Zde byl efekt programu okamžitý ať byl napsaný čistě nebo bastlení - nad vývojem jsem ztrávil cca 14 dní a ten program dělal práci, která byla na týden za pár sekund. Tu práci děláš tak 10x za rok. Rok 2019 měl 251 pracovních dnů a automatizace ušetřila 50 dní. Ať si lidi říkají co chtějí o jazycích a jejich dobrých a špatných stránkách. Pokud něco vytvoříš z ničeho a funguje to je to pořád lepší než nedělat nic!
Mozna je dobre dodat, ze lidi, kteri by presne vedeli, co a kam to chteji dotahnout, moc neni.
A dale, ze to take chce trochu talent. Bez schopnosti reseni problemu (problem solving skill) se muzete ucit syntaxi jak chcete, ale moc toho nenaprogramujete. Nebo resp. nemuzete si pak vybirat, ze chcete programovat dejme tomu hry. Ale budete se muset spokojit s napr.informacnimy systemy.
-
... BASIC, pokud jsem to zkoušel, si se současnými wokny moc nerozumí, což je škoda. IMHO to byl dobrý jazyk pro neprogramátory.
Mám kamaráda, kterému je dnes už přes 60? Za mlada vyvýjel v BASICU a dnes mu na něm běží celá hospoda. Z windowsu je nešťastný, protože mu pořád hází klacky pod nohy. Má už za těch několik dekád vychytaný celý systém a povedlo se mu do toho napojit i eet :D. Dlouho běžel na XP pak přišlo eet a musel dat 7 protože zastaralý protokol (ssl? tsl?) teď to samé přijde brzo i na W7 :D a neví jak pojedou programy na W10. Jede tedy už jen přes dosbox ...
-
BASIC, pokud jsem to zkoušel, si se současnými wokny moc nerozumí, což je škoda. IMHO to byl dobrý jazyk pro neprogramátory.
(https://www.qb64.org/portal/wp-content/uploads/2020/01/dllwin10.png)
Tak samozrejme že QuickBasic určený pre MS-DOS releasnutý niekedy v roku 1989 už na dnešných OS fungovať nebude ale existujú open source alternatívy:
1. QB64 https://www.qb64.org/portal/ - prostredie nápadne pripomína starý dobrý QBasic z čias MS-DOSU.
2. Freebasic: https://www.freebasic.net/
-
Bez čísel řádků a nutnosti používat GOTO už to není ten správný Basic. ;D
-
Bez čísel řádků a nutnosti používat GOTO už to není ten správný Basic. ;D
Kludne si tie riadky môžte aj očíslovať - podporuje to aj čísla riadkov (ale v novších veriziách viete čísla nahradiť textovým identifikátorom návestia s dvojbodkou). Podporuje to aj goto prípadne gosub return (kôli spatnej kompatibilite) akurát už 30 rokov sa v basicu preferujú procedúry (SUB) a funkcie (FUNCTION), ale kto chce môže programovať aj po starom. Ak máte zdroják na nejakú hru pre Atari / Commodore tak s pár úpravami ju dokážete preniesť aj do QB64.
Nebojte sa aj QB64 je tiež plný prekvapení, ktoré by ste v inom jazyku hľadali len márne a pri ktorých si budete klásť otázky ako "WTF" alebo "OMG". Napríklad procedúru musíte volať bez zátvoriek ale funkciu so zátvorkami. Jazyk nerozlišuje medzi operátorom priradenia a operátorom porovnávania. Namiesto exceptions sa tam používajú skoky na návestia "On Error GoTo nejakeNavestie", indexovanie polí má rovnakú syntax ako volanie funkcií. Otváranie súboru sa nerobí knižničnou funkciou ale príkazom ktorý je súčasťou jazyka a ktorý má inú syntax ako volanie funkcií, Alebo do pamate viete zapisovať priamo príkazom POKE ktorému len predáte adresu v pamati a hodnotu ktorú na tú adresu chcete zapísať z Basicu viete volať priamo strojový kód (CALL ABSOLUTE). atd atď.