Hlavní navigace

Jaký jazyk jako první?

19. 2. 2014 16:50 (aktualizováno) | zboj

Každá škola řeší problém, jaký jazyk učit začátečníky jako první. Běžný vývojář k této otázce nemá co říct, protože lidé ze své podstaty preferují a doporučují to, co sami znají, a odmítají (a ti hloupější kritizují) to, co neznají. Nicméně i profesoři se hádají mezi sebou, když o tomto mají rozhodnout. Situaci komplikuje i dynamičnost IT oboru, ve kterém se vše příliš rychle mění (někdy k lepšímu, někdy k horšímu).

Problém lze částečně vyřešit vylučovací metodou. Co ne? Určitě ne Javu, to je Cobol dnešních IT oddělení. I C# je už za zenitem. V USA je prvním jazykem často Lisp, ale ten tu nemá kdo učit. A C je sice elegantní a jednoduché, ale příliš blízko železu.

Pokud bychom měli trvat na nějakém OO jazyku, nabízí se teď C++ a ObjC. První jmenované mnozí kritizují za přílišnou složitost (spíše neoprávněně, jazyk ani jeho tvůrce pranic nemůže za čísi neschopnost pochopit specifikaci). Nicméně samozřejmě má svá problematická místa, vesměs dědictví po C. Pokud zamítneme ObjC (což bychom ale neměli), jeví se jako nejlepší volba jakési osekané C++, něco bez „new“ a pointerů, ale s důrazem na STL a prvky vyšší úrovně (například lambda výrazy, šablony atd.).

Nyní zpět k ObjC. Tento jazyk je svým způsobem geniální ve své jednoduchosti a síle. Je témeř tak geniální jako Smalltalk (z nějž vyšel) a má tu výhodu, že jej zvládá GCC. Navíc se s ním student naučí základy C a bezprostředně lze přejít na C++ v rámci stejného zdrojového kódu (ne že by to bylo vždy vhodné řešení, ale aspoň lze přímo využívat knihovny napsané v C/C++). Navíc se člověk tak nějak za běhu naučí dokumentovat kód.

Metodicky by se mělo postupovat od jednoduchého ke složitému. Peter Norvig v jedné ze svých knih rezignoval zcela na volbu vhodného jazyka pro výklad a užívá pouze pseudokód, někdy dokonce choose-fail styl (ironicky zvolejme: sláva Prologu a Iconu…). Na tom něco je, psaní kódu stojí a padá s algoritmem, ne konkrétním jazykem. Řídit se taky můžu učit v Trabantu i Ferrari. Když pak sednu do bagru, musí mi sice někdo vysvětlit ovládání, ale po pár dnech bude řízení rutina.

Facit: Chce to něco OO, co si student může spustit (zde je nevýhoda pseudokódu). Nejméně budoucího vývojáře zkazí (ve smyslu zažitých negativních návyků) C++ (ořezané), možná ještě C#, a pak některé (v našich končinách) méně konvenční jazyky, jako Lisp nebo F#. Před jakoukoliv algoritmizací se ale nesmí zapomenout na nezbytné matematické minimum (teorie funkcí, formální logika, stavové automaty apod.).

Update 1: Tentokrát jsou komentáře velmi zajímavé a podnětné. Zaujalo mě zmínění Basicu, na ten jsem tak trochu zapomněl, protože v nějaké rozumné formě (a že jich je požehnaně) se jedná o jazyk pro začátečníky původně přímo navržený. Diskuzi si ovšem zaslouží hlavně správa paměti v C++, kolem které evidentně stále existuje řada mýtů. Tak tedy, v C++ je správa paměti takřka neviditelná a začátečníkům by se o ní nemělo zpočátku říkat nic (i když na VŠ asi ano, ale není to nutné). Několikrát to rozebíral sám Stroustrup, takže nejlepší je odkázat přímo na něj, resp. jeho stránky. Z širšího pohledu není vůbec pochyb, že C++ je (ve verzi C++11 a ještě více budoucí C++14) vhodné pro výuku jednoduchých algoritmů a logického myšlení. Běží všude, je přenositelné, má rozsáhlou knihovnu, kontrolu typů a není ukecané (díky „auto“). Visual Studio, Xcode, případně něco na Linuxu jsou zadarmo a první program je možné napsat a spustit hned po instalaci. Jediná nevýhoda, která mě napadá, je absence GUI ve standardní knihovně.