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...
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.
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".)
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é.
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)
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 :)
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...
* 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ů :-(