Vlákno názorů k článku Programovací jazyky určené pro výuku programování (2) od asdfffasdfff - ted jsem si jen tak pohral se Scratch...

  • Článek je starý, nové názory již nelze přidávat.
  • 15. 7. 2010 6:00

    asdfffasdfff (neregistrovaný)

    ted jsem si jen tak pohral se Scratch (http://scratch.mit.edu/) a hle
    i Google jej vyuzil v Androidu (http://appinventor.googlelabs.com/about/).
    kdysi jsem zacinal na zx spectru v basicu, pak basic a assembler na c64,
    pak pascal na pc a dneska delam profesionalne v C++.
    zacatenikum bych dnes doporucil Java nebo C# nebo Python,
    naopak C++, C, assembler jen maniakum co chcou jit do hloubky.

  • 15. 7. 2010 7:19

    ondra.novacisko.cz (neregistrovaný)

    Docela mne mrzi, ze muj primarni programovaci jazyk je dnes doporucovan jen maniakum. :-(

  • 15. 7. 2010 8:49

    asdfadsfa (neregistrovaný)

    jako milovnik C, assembleru se povazuji za maniaka v tom dobrem smyslu.
    asi jako je spravny vyznam slova hacker, a ne jak dnes bulvar nazyva hacker
    kazdeho crackera, tak maniak je jako hacker.
    zacatecnikovi opravdu doporucim radeji se vyhnout C.

  • 16. 7. 2010 13:51

    Karel (neregistrovaný)

    Takže používáte termín „hacker“ nikoliv v tom moderním významu (průnik do zabezpečených systémů), ani v tom původním (lepení věcí žvýkačkami), ale v tom Linuxovém (stejný jako původní, ale chápán jako pozitivní, nikoliv správný negativní)?
    V každém případě s vámi souhlasím, že C je pro začátečníka absolutně nevhodné.

  • 15. 7. 2010 10:25

    František Ryšánek

    Prvních pár krůčků vypadá v Pascalu srozumitelně, protože je to podobnější přirozené angličtině než „závorkovaté“ jazyky. Jakmile ale začnete programovat něco trochu vážněji, zjistíte, že spoustu velice základních operací a konstrukcí (které v Cčku nebo ASM jdou lusknutím prstu a patří k základní výbavě) musíte v Pascalu nějak obcházet/apro­ximovat, přitesávat deklarace prototypů na Cčkové konvence speciálními zaklínadly apod. Vemte si už třeba jenom striktně strukturovaný přístup – realita rozhodně není přísně strukturovaná. Na VŠE v kursech strukturovaného programování a Pascalu (kolem roku 1996–1998) jsme mařili spoustu času akademickým úsilím propasírovat zadání strukturovaným modelem a Pascalem… uff. Vlastně to byl dobrý způsob, jak si ujasnit, že tudy opravdu cesta nevede. Těch pár „syntactic candy“ libůstek v Pascalu oproti C/C++ Vás reálně nijak nevytrhne.
    Potkal jsem několik lidí, kteří začli ve škole v Pascalu a už se nikdy nic jiného nenaučili – a dneska se živí programováním, píšou poměrně rozsáhlé aplikace, a přitom je vidět, že nikdy nepřekročili „školní“ úroveň způsobu psaní aplikací… Bavíte se s chlápkem, kterému je 40+, napsal a udržuje napohled zajímavou aplikaci pro řízení nějakého stroje, pomáháte mu řešit nějaký dílčí problém se vstupem/výstu­pem/časováním… a prvním pohledem na zdrojáky zjistíte, že to má všecko v jednom zdrojovém souboru! Netuší, že existuje rozdělení/opou­zdření kódu do více „translation units“, není schopen tento pojem pochopít! Nezná v Pascalu rozdíl mezi „předáváním hodnotou a odkazem“ – dost možná proto, že je skryt drobnou nuancí v deklaraci prototypu funkce, kdežto v C/C++ se jedná na první pohled principielně o předání hodnoty nebo pointeru (popř. reference)… tragédie…
    Fakt je, že přemejšlím, jestli to není spíš v konkrétním člověku a jeho schopnostech+zku­šenostech, než v tom, jaký jazyk se ve škole naučil jako první. Viděl jsem v jednom případě podobně zprasené zdrojáky i v Cčku.
    Osobně jsem viděl Pascal, Cčko a x86 ASM poprvé někdy kolem roku 1991/2 v krátkém sledu po sobě (v prváku na gymplu z vlastní iniciativy). Ve škole byl dalších cca 6 let základem Pascal od Borlandu – internet nebyl, příklady kódu jenom co vyšlo v pár knížkách a časopisech, Cčko v menšině. K C/C++ jsem se vrátil až na vejšce a vlastně spíš až po ní z vlastní iniciativy. Na mnoha školách, kde dřív začínali v Pascalu, dneska začínají v Javě – to mi přijde trochu z bláta do louže…
    Prostě potkat Cčko jako první jazyk na škole je stejná rarita jako před 10 lety. Jako kdyby Cčko bylo cosi zapovězeného, pro normálního smrtelníka nepochopitelného a nepoužitelného. Přitom pro mě osobně je pravdou pravý opak. Každopádně když Vás napřed pár let učí Pascal, a pak (vlastním přičiněním) přičichnete k Cčku, ať už v odrůdě Borland, VC nebo GCC, nutí Vás to pořád dokola „plácat se do čela“ s myšlenkou „tohle mi vrtalo hlavou, proč je to v Pascalu tak obskurní, a ono to původně přišlo odsud, a je to tak přirozené!“. Toto se opakuje, když postupně získáváte trochu přehled v API standardních knihoven Cčka, srovnáte si jak vypadá libc v DOSu a jak v UNIXu a nakonec i pod Windows = trochu studujete 20/30/40 let starou historii a dodatečně získáváte základy, které Vašim vědomostem dosud chyběly…
    Snažit se o něco v Borlandích produktech pod DOSem popř. Windows bez internetu, a pak přejít do Linuxového prostředí v kombinaci s Internetem, to bylo jako vyrůstat v akvárku a na prahu dospělosti být vypuštěn do moře.
    Pascalu a třeba klasickému DOSovému Basicu nemohu upřít právě podobnost s přirozeným jazykem. Čili pro naprosté začátečníky bych možná viděl jako vhodnou posloupnost „pár hodin Basic, pár hodin Pascal, pak dlouho jenom Cčko, případně přetéct do C++. Případně zmínit další jazyky a jejich charakteristické finty a přednosti, pro přehlednost.“ Pokud má škola poskytovat obecný základ, od kterého lze kamkoli odstartovat, přijde mi to jako vhodné uspořádání. Vlastně si nedělám iluze, že samotná škola naučila někoho pokročile programovat v konkrétním prostředí – na to v ní není jednak čas, druhak dostatečně komplexní zadání, v třetím sledu mi ve škole chyběla motivace řešit složitá zadání: tlak problémů, které vytváří reálná praxe… To je docela důležitá podmínka, aby normálně líný člověk namáhal mozek a snažil se pochopit třeba krásu objektového programování :-)

  • 15. 7. 2010 13:24

    Pavel Tišnovský
    Zlatý podporovatel

    Ten zážitek s jediným zdrojákem jsem měl taky, byl to program v Céčku, veškerá funkcionalita (2000 řádků) byla v main() a spousta globálních proměnných (žádná proměnná deklarovaná v rámci bloku, nic takového).
    Ale že někdo v Pascalu nezná rozdíl mezi voláním hodnotou a odkazem se mi ani nechce věřit, protože některé věci bez použití volání odkazem se ani nedají implementovat (přesněji tam například Turbp Pascal má obezličku a některé typy se hodnotou nepředávají, je to vždy odkazem).

  • 15. 7. 2010 13:38

    ondra.novacisko.cz (neregistrovaný)

    Neřekl bych, že je to obezlička, ale implementační detail. Ony většinou všechny parametry se předávají odkazem na místo v paměti, kde jsou uloženy kopie těch proměnných (já vím, je to často v zásobníku pomocí PUSH, ale tím odkazem často bývá hodnota registru BP či SP, což si málokdo uvědomí). Většinou včetně návratové hodnoty, která se předává jako odkaz na místo, kam se má návratová hodnota uložit.
    Tohle je Céčkaři ale zejména C++kaři velice dobře známo, protože zpravidla zpaměti umí určit přesně kdy se který konstruktor volá a proč.

  • 16. 7. 2010 0:09

    František Ryšánek

    Měl jsem na mysli předávání hodnotou/odkazem na úrovni prototypu funkce v daném programovacím jazyku. Jak to má kompilátor zadrátováno do registrů resp. na stack, to je podle mého o vrstvu níž = z hlediska syntaxe jazyka irelevantní debata… A zatím co jsem potkal, tak se to skutečně předává skrz zásobník (buď sama hodnota nebo pointer) a to dokonce podle jistých standardizovaných pravidel. Ono na x86 to možná ani moc jinak udělat nejde…

  • 16. 7. 2010 2:40

    Biktop (neregistrovaný)

    …a co teprve Knuthův TeX – taky nacpaný do jednoho zdrojáku, navíc napsaný ve vlastním jazyku, generujícím pascalský kód a současně dokumentaci. :-)
    Já vím – QVOD LICET IOVI, NON LICET BOVI. Ale je to důkazem toho, že to taky tak jde a kdo umí, ten prostě umí – bez ohledu na to, do kolika souborů co rozdělí a jaký programovací jazyk použije.
    Lidé, jako je Donald Knuth, Chuck Moore aj. mi pomohli odhodit některá dogmata, kterými se člověk vlivem mainstreamu a průměrné literatury nevědomky dobrovolně omezuje. Člověk by nikdy neměl zapomínat, co je jeho cílem, protože právě tomu musí podřizovat volbu cesty – a nikdy ne naopak.

  • 16. 7. 2010 10:43

    atarist (neregistrovaný)

    On ten TeX zase az takovy zazrak neni :-) Jako nástroj pro sazbu je dodnes nepřekonatelný, o tom žádná, ale pokud nad tím chce člověk vyvinout nadstavbu (třeba LaTeX), tak se začínají ukazovat slabiny v jeho „API“.
    Jinak máš pravdu, Knuth, Moore (můj oblíbenec, imho na jeho myšlenky pomalu dochází – viz například browser v BIOSu atd.), Dijkstra atd. by měli být inspirací pro všechny, kdo alespoň tuší, že mainstream není zdaleka vše co IT nabízí.

  • 15. 7. 2010 21:39

    hrp (neregistrovaný)

    Tenhle přístup mi připadá naprosto nesmyslný. To že někdo neví jaký je rozdíl v předávání hodnotou a odkazem není problém jazyka v kterém se učil programovat, ale spíš ve stylu výuky programování. Prostě VSE asi nebude ta pravá škola pro programátory.

  • 16. 7. 2010 0:04

    František Ryšánek

    Ten člověk nebyl z VŠE, byl to nějaký praktik, o deset let starší než já. Těžko říct, co vystudoval.

  • 16. 7. 2010 19:59

    lacik (neregistrovaný)

    … Bavíte se s chlápkem, kterému je 40+, napsal a udržuje napohled zajímavou aplikaci pro řízení nějakého stroje, pomáháte mu řešit nějaký dílčí problém se vstupem/výstu­pem/časováním… a prvním pohledem na zdrojáky zjistíte, že to má všecko v jednom zdrojovém souboru! …
    Můj soukromý názor je, že to není nic mimořádného. Pokud se jedná o nějaký počítačem řízený stroj, pak programátor pouze aplikuje životní zásadu č. 1: „co funguje, do toho se nehrabu“. Když jeho algoritmus je funkční, dělá to co má, stroj je stabilní a spolehlivý a řídící systém stíhá v reálném čase, pak žádný programátor systémů ten program nebude přepisovat podle poslední programátorské módy do nějakých objektů, Javy, frameworků, C++ a podobně; to by si do programu zavlekl stovky nových chyb. Ze stejného důvodu najdete ve strojích řadu zastaralých osmibiťáků, v bankách programy v Cobolu, ostatně i svého času humbuk kolem Y2K nebylo nic jiného než zděšení nad tím, že mraky programů ze sedmdesátých a osmdesátých let (ale funkčních a spolehlivých!) by se teoreticky mohlo chovat na Silvestra 1999–2000 nestabilně.

  • 15. 7. 2010 10:13

    Peter Fodrek (neregistrovaný)

    >Zacatenikum bych dnes doporucil Java nebo C# nebo Python,
    Python jednoznacne ano a JAVA a C# rozhodne nie
    17.01.2008
    Dvaja profesori z New York University sa v obšírnejšej rozprave zaoberali problémom, ktorý trápi mnohých zamestnávateľov v IT priemysle: programátorské schopnosti nových absolventov počítačových vied sa postupne znižujú. Podľa nich za to môžu úvodné kurzy Javy a skriptovacích jazykov.
    Za posledných niekoľko rokov si Dr. Robert B.K. Dewar a Dr. Edmond Schonberg z NYU všimli niekoľko negatívnych trendov pri vzdelávaní nových mozgov v odboroch zameraných na programovanie. V prvom rade sa v jednotlivých študijných programoch pre študentov znižujú požiadavky na matematické vzdelanie. Vývoj programovacích schopností vo viacerých jazykoch potom študentov učí automaticky používať veľké knižnice a špeciálne balíky s kódom, akoby programovali z predpripraveného receptu[kuchárskej knihy]. Výsledným negatívom pre softvérový priemysel je nedostatočná zručnosť, najmä pre bezpečnostné a ochranné účely, ktorá je navyše prakticky na úrovni toho, čo ponúka outsourcingový priemysel. Skrátene sa to dá povedať tak, že vysoké školy (zo zamerania dvoch profesorov vyplýva, že teda najmä školy v USA) trénujú ľahko nahraditeľných IT profesionálov. Problémy so stupňom programátorskej vyspelosti absolventov už navyše naznačujú aj zamestnávatelia.
    Java sa stala v poslednej dobe v USA najviac používaným jazykom, študenti sa mu venujú hlavne pri prvom oboznamovaní sa s princípmi programovania. Stalo sa tak azda následkom zníženia dopytu po vzdelaní počítačových programátorov medzi maturujúcimi stredoškolákmi; Java má spraviť programovanie väčšou zábavou a hlavne ho zjednodušiť. Profesori z NYU však varujú, že tento prístup má pre študentov výrazne negatívne následky. V prvom rade sa sa študentom ťažko píšu programy, ktoré nemajú žiadne grafické rozhranie; ďalej nemajú pochopenie pre vzťah medzi zdrojovým kódom a tým, čo hardvér dokáže skutočne spraviť. Nakoniec, vôbec nerozumejú sémantike ukazovateľov (resp. smerníkov), takže majú neskôr problémy s C pri systémovom programovaní.
    http://www.itnews.sk/spravy/software/2008-01-17/c87894-programatorske-schopnosti-absolventov-klesaju-problemom-je-java
    >naopak C++, C, assembler jen maniakum co chcou jit do hloubky.
    ako kde. Assembler na uvod rozhodne nie. C++ by som sa vyhol.. na C ale treba prejjst hned po Pythoe, ktory nauci slusnosti(struk­turovaniu) v kodovani. Inak je aj Python skor negativny ako polo-skriptovaci jazyk problematicky
    Na technickych skolach treba C. Ja osobne ucim systemove programovanie na urovni utilit na FEI STU a vidim ako vedia smernikovu aritmetiku, ale co je to smernik netusia…

  • 15. 7. 2010 10:42

    dfadfasdf (neregistrovaný)

    tot vecna diskuze jak zacit.
    ja mam tuseni, ze ti co maji aspon trochu kladny vztah k matice
    jsou ti co zacinaji od C, C++, algoritmu, vypoctu a pozdeji se dostanou
    k OOP, Java, C#, takto jsem sel na to ja.
    naopak ti co zacinaji od OOP uz se nekdy dolu k C ani nedostanou.

  • 15. 7. 2010 10:52

    xaint (neregistrovaný)

    ve vsech priruckach pro velitele a instruktory vojenskych jednotek je psano, ze se hned ze zacatku musi vojakum doprat nekolik snadnych vitezstvi (quick win). Stoupne moralka, sebevedomi a vojaci vidi, ze ten vycvik k necemu je. Vidi vysledky.
    Podle me kdyz se nekdo uci programovat, potrebuje hned ze zacatku nejakej quick win. Kdyz na nej hodite cecko, tak prezije cykly, ridici struktury a typy promennych, kdyz na nej vytahnete pole, ktere si nekontroluji meze, tak zacne panikarit a kdyz na nej vzapeti vypalite pointery, tak se otoci a zdrhne.
    Kdyz se nauci delat v Pythonu, kterej mu umozni quick win, a bude ochoten se ucit neco dukladnejsiho, Cecko je rozumna volba. Heroutova knizka je taky skvela, takze v tomhel ohledu nebude problem. Cecko jako prvni jazyk by zacatecnika jen zbytecne vydesilo. Ano, vy jste mozna hardcore a ucil byste Ccko jako prvni, ale ne vsichni to dokazou prezit.

  • 15. 7. 2010 11:34

    ondra.novacisko.cz (neregistrovaný)

    Já bych klidně i C++ začínal, ale musel by mít po ruce nějakou jednoduchou knihovnu, která by quick win umožňovala. Spousta věcí v C++ vychází z C, který považuji za hackerský jazyk, protože spoustu věcí prostě hackuje. Konečně, nejkrásnější příklad hackovského stylu v C je funkce printf, ať už vezmu variabilní počet parametrů … zejména implementace … a na to navazující obcházení tohoto problému volbou formátu, který porušuje základni pravidlo přehledného programu a to, že všechny informace mají být uvedeny jednou a na jednom místě (což u funkce printf není splněno u typu parametru).
    V tomto směru čekám na nějakou komplexnější verzi C++0×, která jde dál do abstrakce a nahrazuje nejrůznější implementační hacky právě obecnějšími postupy. Nad tímto systémem bych vyšel s knihovnou, která by za studenta vyřešila běžné problémy typu, odkud se čte vstup, kam jde výstup a jak se vypíše chyba a podobně, a je zde prostor pro výuku algoritmizace, programování a hlavně OOP.

  • 15. 7. 2010 14:29

    Peter fodrek (neregistrovaný)

    C-cko a hackersky jazyk? Bol sice navrhnuty na programovanie OS. Ale nemyslim si, ze okrem MS Visual C++. Dnes som poslal copmmit jedneho multiplatformoveho CAD-u pod new BSD na baze OpenCascade a WxWidgets. gcc aj Visual Studio 2008 ho prelozi dobre, ale pre Visual Studio treba pridat trojriadkovy workaround
    do jedneho headeru:
    #if _MSC_VER == 1600
    #include <iterator>
    #endif
    Ukazka ako MS presuva funkcie mediz headermi

  • 15. 7. 2010 11:34

    ondra.novacisko.cz (neregistrovaný)

    Já bych klidně i C++ začínal, ale musel by mít po ruce nějakou jednoduchou knihovnu, která by quick win umožňovala. Spousta věcí v C++ vychází z C, který považuji za hackerský jazyk, protože spoustu věcí prostě hackuje. Konečně, nejkrásnější příklad hackovského stylu v C je funkce printf, ať už vezmu variabilní počet parametrů … zejména implementace … a na to navazující obcházení tohoto problému volbou formátu, který porušuje základni pravidlo přehledného programu a to, že všechny informace mají být uvedeny jednou a na jednom místě (což u funkce printf není splněno u typu parametru).
    V tomto směru čekám na nějakou komplexnější verzi C++0×, která jde dál do abstrakce a nahrazuje nejrůznější implementační hacky právě obecnějšími postupy. Nad tímto systémem bych vyšel s knihovnou, která by za studenta vyřešila běžné problémy typu, odkud se čte vstup, kam jde výstup a jak se vypíše chyba a podobně, a je zde prostor pro výuku algoritmizace, programování a hlavně OOP.

  • 16. 7. 2010 10:51

    atarist (neregistrovaný)

    Třeba něco jako ClanLib (http://clanlib.org/wiki/Main_Page)? Já se trošku obávám, že posledních 10–15 let se C++ vydal úplně opačným směrem a základní věci (pořádné standardní knihovny ala Java) v něm stále chybí, takže si je každý projekt/framework řeší znovu a po svém.

  • 22. 8. 2010 17:00

    Tomix nepřihlášen (neregistrovaný)

    Nutit dneska někoho do sojitejch seznamů, pointerů a pod. je dle mého anachronismus jak vrata. Snad každý současný jazyk má nějaké dynamické struktury (seznamy, kolekce, a nevím co všechno). I ten dnešní Pascal má minimálně dynamická pole.

  • 23. 8. 2010 9:11

    atarist (neregistrovaný)

    Nejde o to co ktery programovaci jazyk umi, ale o to, aby mel student alespon ramcovou predstavu, jak se dana konstrukce prelozi a jake ma pametove a casove naroky.
    Bez vysvetleni funkce linearne vazanych seznamu, stromu, hesovacich tabulek proste studenti nepochopi (=maximalne se to nadrti na zkousku a potom zapomenou), ze treba vkladani do linearne vazaneho seznamu ma slozitost O(n), stejne jako vyhledani, u vyvazovanych stromu je to dejme tomu O(log n), ovsem na ukor nutnosti ukladat vice ukazatelu, jak je to s konstrukci hashe atd. atd.
    Stejne je to se zakladnimi datovymi typy, kdyby se poradne probral rozdil mezi integery a FP, tak by nevznikaly silene konstrukce, ktere dost casto vidam i v komercnich aplikacich (nekde ma spousta studentu pocit, ze FP je „presnejsi“ nez integery atd.)

  • 16. 7. 2010 14:20

    Karel (neregistrovaný)

    Zde je právě jeden z kamenů úrazu moderního programování – konflikt matematického přístupu s objektovým. Matematika pracuje s čísly a její základní doménou jsou čísla, množiny a matice. To je základ, se kterým by se mělo začínat. Až po jeho rutinním zvládnutí se pak zabývat OOP a tím, jak může ulehčit život. Při opačném postupu to pak působí problémy a dotčení jsou schopní vyprodukovat krásný OOP kód, který je však absolutně nečitelný pro matematika. Z kdejaké kraviny udělají objekt, zapouzdřují kde co a vrcholem jsou pak ti tvořící v C++, kteří přetěžují operátory jen pro to, že to umí. Z toho zmatku tříd a metod co z nich vypadne pak nejsou schopni ani spočítat operační a paměťovou složitost.

  • 16. 7. 2010 14:43

    ondra.novacisko.cz (neregistrovaný)

    Ano, souhlasím s tím, že OOP není o tom umět zapouzdřit kde co a umět přetížit kdejaký operátor. OOP je o změnu stylu myšlení. Stejně jako nahoře, programátorem není ten, kdo umí napsat program, ale neumí ho strukturovat, takže výsledkem je kód nacpany do mainu.
    Pokud někdo ví, k čemu je klíčové slovo „class“ ještě neznamená, že umí OOP programovat. Naopak bych našel několik OOP programátorů, kteří jsou OOP techniky schopni používat i v nativním C (s dotatečnou knihovní základnou)