Skip to content

Instantly share code, notes, and snippets.

@janmarek
Last active November 5, 2015 18:53
Show Gist options
  • Save janmarek/528786dcf4c480881d9a to your computer and use it in GitHub Desktop.
Save janmarek/528786dcf4c480881d9a to your computer and use it in GitHub Desktop.
c/c++ a algoritmizace

C/C++ není jediný "opravdový" jazyk. Já bych pro výuku algoritmizace vybral třeba Javu, C#.

Při programování C/C++ musím v praxi řešit spoustu problémů, které s algoritmizací (tak se ten předmět jmenuje) vůbec nesouvisí. Jak mi pomůže, že místo výjimky buď program bude dělat nesmysly, protože někde přepisuje kus paměti co nemá nebo spadne na segfaultu? Nebo že musím řešit rozdíl mezi referencí a ukazatelem? Ruční správa paměti? To jsou prostě věci specifické pro céčko, ne pro programování obecně - algoritimizace.

Subjektivně by se mi taky líbilo, aby první jazyk pro prváky lépe vedl k objektovému nebo funkcionálnímu programování, ne k procedurálnímu. Ale vstřícnost k začátečníkům, jednoduchost a dobré chybové hlášky jsou v tomhle nejdůležitější.

Co se týče využití, měl by ten jazyk být praktický. Kernely OS, ovladače, kompilátory či V8 jsou hodně pokročilý věci, který nejenže nenapíše prvák, ale ani hotovej bakalář.

P.S.: Koukám, že se to jmenuje Programování a algoritmizace, ale podle mě to na věci nic nemění.

@tajo
Copy link

tajo commented Nov 5, 2015

Jak jsem již psal, algoritmizace je "jen" jedna z věcí, která se v PA1 učí. Pro čistou výuku algoritmitaze jsou ideální diagramy, něco ve stylu code.org (rozhodně ne praktické programovací jazyky, které mají vždy plno vrtochů). Nicméně FIT je vysoká škola (ideálně elitní) a bohužel není v 3 letém programu čas se s tím tak piplat. Člověk, co se rozhodne jít na FIT by už měl mít alespoň základní přehled o tom, co algoritmizace je - máme přeci i základní a střední školy.

C je dobré v tom, že před programátorem (ano, v PA1 se učíme i programovat) nic neschovává. Správa paměti je zásadní programátorská dovednost. Dobrý programátor by měl mít přehled o tom, jakým způsobem se hodnoty reprezentují a organizují v paměti. Jinak poměrně rychle narazí třeba i v "praktické" Javě či Pythonu na to, že například takové porovnávání desetinných čísel je jaksi rozbité/podivné.

V PA1 se navíc nakousnou i datové struktury - spojové seznamy. Na to je C opět ideální, protože člověk pochopí rozdíl mezi polem a spojákem. Pochopí základy výpočetní složitosti a optimalizace. V Javě by to daleko více svádělo k tomu použít nějakou implementovou datovou strukturu a nikdy se nezajímat o to, jak to vlastně funguje uvnitř.

Kernely OS, ovladače, kompilátory či V8 jsou hodně pokročilý věci, který nejenže nenapíše prvák, ale ani hotovej bakalář

V předmětu Programovací jazyky a překladače si kompilátor bakaláři napíšou (opět, byl to pro mě jeden z top3 předmětů). Není potřeba, aby hotovej bakalář přepsal celý Linux kernel, ale aby měl o souvisejících fundamentech přehled a mohl případně na ně i navázat v magisterském a dalším studiu. Primárním cílem FITu je Computer Science nikoliv produkce rychloprogramátorů (nemyslím to pejorativně, programování je a bude přístupné i lidem bez terciálního vzdělání, což je určitě dobře).

TLDR; Je to o tom, zda umět věci jen používat (běžné programování) nebo i rozumět tomu, jak fungují uvnitř (systémové programování...). Úloha ČVUT FITu by měla být imo to druhé. To první ať učí jiné školy či kurzy, máme jich dost.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment