Zachraňme prváky! (a najděme pro ně ideální programovací jazyk)

V posledních týdnech udeřila do poklidných vod matfyzáckých převeliká novina, pro někoho snad radostná, pro mnoho dalších ale poněkud děsuplná: Přednášející céčka rozšířili fámu, že základní kurz programování na matfyzu se od příštího roku nepovede v Pascalu, ale nahradí jej C#. Naštěstí se brzy ukázalo, že je to informace dosud ještě nepravdivá, o jazyce zatím nebylo rozhodnuto a výběr může stále dopadnout všelijak. O vhodném jazyce pro výuku se diskutuje a zdá se, že všichni matfyzáci mají možnost přispět svojí troškou do mlýna a svými názory do diskuse.

Co si budeme povídat - C# je skvělý jazyk na tvorbu krásných okýnek, ale vybrat jej jako první jazyk pro vyjukaného prváka je poněkud zlovolné, když jen pro úplné pochopení helloworldu je potřeba minimálně celý semestr (a nebo silná vůle a spousta dokumentace - mým neocenitelným pomocníkem je Mono: The Developer's notebook). Posuďte sami...

class AhojBabi
{
    static void Main()
    {
        System.Console.WriteLine("Ahoj, babi!");
    }
}

Vím, že další možnosti nejsou růžové a instantní řešení problému neznám (i když jsem blízká názoru, že ideálním jazykem pro výuku by byl Python), takže místo hlubokomyslných úvah nabídnu odkaz na článek, který se problémem zabývá do větší hloubky. Konec je zatím otevřený, autor článku zvědavý na další názory...

MJ Satai (8. 3. 2007 - 22:52) Sbalit(5)
K MJovu clanku neni temer co dodat. Snad jenom bych videl jako dustojnou alternativu k Pythonu Ruby...
S Ruby souhlasím, ale hanicka (9. 3. 2007 - 8:48) Sbalit(3)
S Ruby souhlasím, ale nejsem z matfyzu :)
Re: S Ruby souhlasím, ale David Majda (10. 3. 2007 - 0:50) Sbalit(2)
Já bych si dovolil nesouhlasit :) Byť je Ruby skvělý jazyk na praktické programování, není dobrý na výuku - na to obsahuje až příliš "kouzel" a nemá až tak čistou syntaxi. Pokud už jazyk z kategorie "dynamické skriptovací", tak spíš Python.
Simula Jirka (18. 9. 2007 - 22:30) Sbalit(1)
A neopomenuli jste Simulu ?
Ano, taktéž si myslím, Botanicus (9. 3. 2007 - 13:47) Sbalit(1)
Ano, taktéž si myslím, že Ruby je dobrý nápad. Osobně si ale myslím, že Ruby je ještě o pár stupňů lepšejší než Python ... ale z MatFyzu nejsem, tak vám do toho nebudu kecat ;)
To mi tak trošku Pepca (8. 3. 2007 - 23:30) Sbalit(1)
To mi tak trošku připomělo tohle: http://www.gnu.org/fun/jokes/helloworld.html :)
Od zakladu vys qk (9. 3. 2007 - 11:56) Sbalit(7)
Zajimavy, to jsem jeste nezaslechl. No s C# urcite nesouhlasim, kdyz uz takovej jazyk tak radsi javu. Ale myslim z principu to je spatna volba. V prvaku by se meli ucit zaklady, coz jsou algoritmy a pak nizkourovnove jazyky (aby dostali predstavu jak program pracuje s pameti, procesorem atd). Tady si myslim ze nejlepsi jsou C jako nizkourovnovy (assembler je uz trochu moc) a pak Pascal, kterej byl navrzen prave pro vyukove ucely. Pascal ma nejlepsi chybove hlasky a navic ostatni jazyky muze uz nejaky prvak vic znat a pak se vic nez na algoritmus soustredi na "hrani s jazykem". Python, ruby nebo i prolog, scheme, haskell podle mne nejsou dobry na zacatek, protoze preci jen maji pro nekoho kdo na matfyz prijde s tim ze umi nejakej jinej jazyk trochu problem prejit na jejich zpusob mysleni (kdy napriklad hodnoty maji typ a ne promenne a podobne) a tim se nesoustredi zase na ten algoritmus. Navic Pascal je delany tak, ze ten kod se da cist opravdu dobre i nekym kdo umi jen anglicky a primo pascal nezna.
No na druhou stranu v prvaku mi to tak neprislo a rikal sem si proc nedelame v C, ktery je taky kdyz se chce dobre citelny, ale ted s postupem casu vidim ze ten pascal je dobrej.
C# me sice posledni rok Martin Hassman (9. 3. 2007 - 23:24) Sbalit(2)
C# me sice posledni rok zivi, ale zaroven mam rad Joelovu filipiku proti vyuce Javy (pro C# to je stejne) ve skolach http://joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Díky za odkaz MJ (10. 3. 2007 - 11:02) Sbalit(1)
Díky, přidal jsem ho spolu s dalšími články mezi odkazy na mé stránce.
Re: Od zakladu vys David Majda (10. 3. 2007 - 0:44) Sbalit(3)
"No s C# urcite nesouhlasim, kdyz uz takovej jazyk tak radsi javu"

Proč? Protože Microsoft-bias, nebo vidíš i jiné důvody?

Jinak osobně bych asi jako jazyk pro prváky zachoval Pascal - mám pocit, že na mě samotném zanechal jen hluboce pozitivní stopy v podobě dobrých programovacích návyků. Pythoní alternativa mi přijde přibližně ekvivalentní srozumetelností kódu, mírně lepší absencí low-level memory managementu, ale výrazně horší dynamickým typováním, které nenutí člověka tak strukturovaně přemýšlet.

Alternativa nějakého hezkého funkconálního jazyka mi taky přijde svůdná, ale mám pocit, že tohle člověk v prváku neocení. (Já to neocenil ani v druháku a během následujících let jsem si k funkcinálnímu programování musel "dojít svou cestou".)
C# qk (10. 3. 2007 - 12:55) Sbalit(2)
no s C# nesouhlasim, protoze pro vetsinu lidi je spjatej s visualim studiem a v nem se pracuje stylem, naklikej a ono to vygeneruje kod, videl sem par ukazek prace s novymi VS (posledni studio sem pouzival 6.0, takze je to jen dojem z ukazek), kde se klikne na par voleb a ono to vygeneruje hromadu kodu, coz si myslim ze vubec neni dobry pro zacinajici programatory.
Re: C# David Majda (10. 3. 2007 - 22:34) Sbalit(1)
Zajímavé, já mám zas Javu neodmyslitelně spjatou s Eclipse, NetBeans či JBuilderem, které oplývají podobnými kód generujícími funkcemi jako VS. Konkrétně Eclipse za mě v životě vygenerovalo kódu docela dost.

Tím chci říct, že tenhle argument mi nepřijde jako validní - situace je na obou stranách barikády podobná (což vyplývá i z podobnosti obou jazyků). Navíc, podobné funkce tě nikdo nenutí používat. Když jsem bráchu učil C/C++, tak jsem ho taky donutil zpočátku používat command-line compiler a makefiles, aby pochopil, jak vše funguje, a teprve časem jsem ho přivedl k používání nástrojů, které tyhle věcí řeší automaticky.

Mezi C# a Javou jsou podstatnější rozdíly než IDE - a to na úrovni jazyka a knihoven. V obou oblastech má IMO lehce navrch C# - v tomto jazyce je nutno méně věcí dělat "přes ruku" a knihovny jsou o něco konzistetnější a lépe strukturované.
Ne svrchu dolů m1c4a1 (10. 3. 2007 - 5:52) Sbalit(1)
Chce to začít rozhodně s nějakým jednoduchým jazykem, který v zaměstnání použit nebude, ale prvák pochopí, co je to programování a na tom může stavět dál. Zakládat výuku programování na C# či snad nějakých vyšších jazycích a postupovat odshora dolů, postupným vysvětlováním důvodů "proč to tak je", to může být otravné, protože programátor bude vědět, že to nikdy potřebovat nebude (ale nikdy by tak plně neporozuměl programování a o to na vejšce jde; jen se tupě naučit psát něco v programovacím jazyku může i bez matfyzu).
Když už, tak bych vybral Python Martin Petr (11. 3. 2007 - 1:39) Sbalit(3)
Ten MJův článek je napsaný opravdu velice hezky, díky za odkaz. Snad mu nebude vadit, když na něj budu odkazovat, až narazím na nějaký z mnoha zbytečných flejmů "V čem začít programovat?"? :o)

Já jsem třeba zrovna případ matfyzáka, který teď září nastoupil na matfyz s tím, že jediný, co kdy naprogramoval bylo pár bastlů v PHP, pár prográmků v Pascalu, a který se ještě šťoural v Céčku s pomocí knihy Pavla Herouta (tu jsem si poctivě prošel dvakrát i se všemi cvičeními... no dobře, bitová pole jsem ani jednou nečetl :o)). Jinak řečeno, šel jsem sem s tím, že jsem ledva věděl, že quicksort je asi třídící algoritmus, který je quick :o))) Neměl jsem rád Pascal, poněvadž každý "odborník" všude psal, že je na nic. Teď po tom, co jsem absolvoval Programování I, jsem za ten Pascal rád. On v podstatě nic neumí - a to je moc dobře. Nejde zas až tak do hloubky, by začátečníka zmátnul, to si nemyslím... podle mě je jenom dobře pochopit, jak doopravdy "funguje" takový lineární seznam nebo fronta bez nějakých natahovacích polí a podobně. Když už by se ale hlasovalo o to, který jazyk vybrat místo Pascalu, asi bych vybral Python. Je čistý, stručný, hezký, nemá žádná zákoutí, kde by se mohla malá, nebohá a nezkušená matfyzácká dušička ztratit a zároveň je poměrně dobře využitelný i v pozdější praxi.

C# se mi jako jazyk pro úvodní kurz programování taky nepozdává. A nejenom mně: jak se mi doneslo z důvěryhodného a vlivného zdroje :o), tak bude vyslána delegace do vyšších míst, aby projevila svůj nesouhlas nad tímto potenciálním kandidátem ;o)
dodatek Martin Petr (11. 3. 2007 - 1:41) Sbalit(2)
A když už ne Python, tak bych zůstal u toho Pascalu. Kamarádi Javisti z FAV, VUT a VŠB budou dál skákat tři metry dvacet do vzduchu, co že se to tu neučím za archaismy, ale což... "Snad ti nedělají starosti cizí názory?", by řekla paní Feynmanová :o)
VUT + Java? vd (20. 4. 2007 - 14:56) Sbalit(1)
Na VUT jedině C. :-]
Ja bych prece jen jednu David (24. 3. 2007 - 17:48) Sbalit(2)
Ja bych prece jen jednu "nevyhodu" Pascalu videl. Je az moc citelny a to svadi psat dlouhe procedury a program nijak nestrukturovat. Toto bohuzel nekterym studentum zustava a uz jsem se setkal s programem na 500 radku, ktery byl cely prakticky cely v mainu (bylo to v cecku - od cloveka odkojeneho Pascalem na mff)

Obecne si myslim, ze na matfyzu dobre uci algoritmy (coz je zaklad a pro zacatek to je urcite dobre) - na to je Pascal dobry a technicke veci. Ale opomiji se veci okolo analyzy a modularniho / objektove orientovaneho programovani. Zarny priklad je predmet Objektove orientovane programovani, kde se cely semestr studuji technicke veci okolo C++ (a ze jich neni malo), ale jak by mel clovek navrhnout strukturu programu, aby to bylo prehledne, robustni, dobre rozsiritelne apod., na to ma asi prijit sam...
Vysledkem je, ze nekteri lide si z tohoto predmetu odnesou prakticky jen STL a programuje dal jak predtim - vsechno do mainu :)
Já psal během celého Martin Petr (24. 3. 2007 - 23:45) Sbalit(1)
Já psal během celého semestru úkoly a další věci v DOSovém borlandím IDE, takže jakmile jsem přestal vidět na celou proceduru/funkci najednou, bylo to dobrým znamením se zastavit a popřemýšlet o tom, co dělám špatně ;o)

Zápočťák už teď sice buším "ve svém" Vimu, ale jelikož si myslím, že nejsem programátor-čuně, tak to zatím vypadá celkem hezky :o)

Navíc pro mě osobně ta až přílišná ukecanost znamená to, že raději problém rozkrájím na minimální kousíčky, které implementuju do jednotlivých funkcí, protože je pak samotný "hlavní kód" mnohem čitelnější -- můžu zapomenout na to, jak přesně funkce moje_mala_funkce, kterou v něm používám, uvnitř vypadá, stačí mi vědět, že funguje -- nepřekáží mi v něm spousta nepřehledného balastu...
Céčko Mikuláš Patočka (4. 8. 2007 - 8:58) Sbalit(2)
Lidi kritizujou céčko a navrhují příjemnější jazyky. Mně přijde, že céčko má celkem podstatné výhody:
* student se v C naučí důležitý fakt: pokud program funguje na pár příkladech, neznamená to, že je správně.
* z čehož plyne: v C nejde programovat metodou pokus-omyl, programátor musí vědět, co chce dělat a co dělají funkce, které volá.
* pokud student programuje metodou pokus-omyl v C, tak bude nejspíš vyhozen hned, co se program pustí pod electric fence nebo checkerem --- pokud programuje "experimentálně" ve vyšších jazycích, tak mu to projde.
* C nutí člověka, aby hledal bugy čtením a porozuměním vlastnímu kódu (např. kontrola, zda nepřestřelil alokované pole).
* z C jde přejít na vyšší jazyky, zpátky už ne. Viděl jsem třeba konstrukci char *p=new char []; gets(p); a student mi tvrdil, že to ten gets() to pole sám roztahuje (zadání bylo takové, že délka řádku je neomezená). Pokud budou všichni začínat na vyšších jazycích, tak se naučí takhle myslet běžně a my se pak můžeme těši na novou velkou várku bezpečnostních chyb a pádů :-(
Proč jen se mi při čtení HR (8. 6. 2008 - 19:32) Sbalit(1)
Proč jen se mi při čtení tohohle příspěvku vybavili Opravdoví programátoři? ;-) http://www.logix.cz/michal/humornik/Pojidaci.Kolacu.xp