Portál AbcLinuxu, 13. listopadu 2025 21:51
).
Než C, tak bych doporučil Pascal a možná i Javu. Proč se máš jako začátečník zajímat o to, jak v C fungují řetězce, proč se porovnávají řetězce pomocí strcmp() a né normálně (aha, tak Javu taky nebrat
), jaký je rozdíl mezi const char* a const char[], proč se starat o malloc a free? To ti všechno vlastní výuku zatemňuje ...
Výuka programování (alespoň podle mě) není o znalosti toho kterého jazyka, ale o výuce správného způsobu myšlení. Vzhledem k tomu, že momentálně cvičím programátorské začátečníky v C a další ve Visual Basicu .NET, dovolil bych si ti doporučit cokoliv z trojice Python, Ruby, anebo můj černý kůň Logo (po tom, co jsem recenzoval Imagine Logo, tak mi ten jazyk přijde pro začátečníky jako úplně perfektní, přestože tam jsou želvičky a barvičky a není tak super hackerský, jako třeba C).
Ne, teď vážně...
S tím, že mi mohli radit i lidé, co o programování vědí ještě méně než moje babička, se musí počítat. Já nemůžu všem koukat přes rameno, jak moc jim to programování jde nebo nejde.
Je tu otázka, jestli začít u Pascalu a pak se přepytlíkovat na C (anebo jiným směrem: třeba Python atd.), nebo začít rovnou na tom těžším, tedy C.
"Výuka programování (alespoň podle mě) není o znalosti toho kterého jazyka, ale o výuce správného způsobu myšlení." -- s tím souhlasím a doufám, že mi toto céčko poskytne. Doufám, že mi C poskytne nadhled nad to všechno.
A za poslední: doufám, že se mi fakt, že jsem se kdysi učil céčko, nijak nepromítne do obličeje, takže v případě změny jazyka nebude problém...
"Výuka programování (alespoň podle mě) není o znalosti toho kterého jazyka, ale o výuce správného způsobu myšlení." -- s tím souhlasím a doufám, že mi toto céčko poskytne. Doufám, že mi C poskytne nadhled nad to všechno.Abych to ještě doplnil, hodně mě k C postrčil právě ten názor, že po C se naučím všechno. Řeklo mi to více lidí a mně nezbývá než doufat, že měli pravdu.
A za poslední: doufám, že se mi fakt, že jsem se kdysi učil céčko, nijak nepromítne do obličeje, takže v případě změny jazyka nebude problém...Ne, do obličeje se ti C nepromítne. Zato se promítne na tvém programátorském stylu. Až tě potká nějaký skutečný objektový jazyk (a teď zrovna nemyslím Smalltalk
) tak podle mého názoru spláčeš. Ale něčím se začínat musí. Moje volba by byl Python..
aha, tak Javu taky nebrat 
Já čekal, že s tím přijdeš
.
Výuka programování (alespoň podle mě) není o znalosti toho kterého jazyka, ale o výuce správného způsobu myšlení. Vzhledem k tomu, že momentálně cvičím programátorské začátečníky v C a další ve Visual Basicu .NET, dovolil bych si ti doporučit cokoliv z trojice Python, Ruby, anebo můj černý kůň Logo (po tom, co jsem recenzoval Imagine Logo, tak mi ten jazyk přijde pro začátečníky jako úplně perfektní, přestože tam jsou želvičky a barvičky a není tak super hackerský, jako třeba C).
Nemůžu soudit, co je vhodnější pro výuku, protože kromě Javy jsem jiný programovací jazyk neučil. Ale pro pochopení, jak to vlastně funguje "vevnitř" bych doporučil právě C (pokud ne rovnou assebler). Podle mě je prostě mimořádně důležité, aby člověk věděl, co se děje "pod pokličkou" a k tomu má C nejblíž. Pak může klidně programovat v něčem vyšším daleko efektivněji, když ví, co se vlastně nakonec musí všechno provést. Už to tu někdo kdysi psal, že i v C# jde poznat, jestli daný programátor někdy zakusil C. Je samozřejmně otázka, jestli je C vhodné na učení algoritmů apod. Na to je samozřejmně vhodnější jazyk, kde se člověk nemusí zabývat např takovými věcmi jako správa paměti a může se věnovat přímo algoritmu.
Na LOGO mám poněkud nostalgické vzpomínky, když jsem coby 8leté dítko chodil na kurs do domu dětí a mládeže na špičkovou technologii PMD80. Ach, krásná to revoluční doba
.
Nezlob se, ale pokaždé, když napíšuaha, tak Javu taky nebrat
Já čekal, že s tím přijdeš
.
str.equals(str2), mám pocit, že jsem v C. Navíc díky podobným featurkám není možné používat string (a ani cokoliv jiného) v konstrukci switch. Bohužel znám i jazyky, kde to jaksi není žádný problém, proto u Javy vždycky brblu, protože to beru jako nesmyslné omezení jazyka (je jich i víc, například pojmenované parametry, omezení jedna třída jeden soubor, ...). Proto jsem rád za verzi 1.5, která mi ovšem v podstatě dává za pravdu. Škoda, že není možné si vybrat mezi silnějším a slabším jazykem.
Ale pro pochopení, jak to vlastně funguje "vevnitř" bych doporučil právě C (pokud ne rovnou assebler). Podle mě je prostě mimořádně důležité, aby člověk věděl, co se děje "pod pokličkou" a k tomu má C nejblíž.Skutečně nevím, k čemu ti ve výuce programování bude znalost rozdílu mezi char* a char[], nebo se učit používat reentrantní funkce ze standardní knihovny. Navíc C nemá výjimky a správné ošetření chyb je v něm složité i pro profíky a co teprve pro začátečníky. Výuka v C (ale i v jiných jazycích) většinou znamená spoustu starostí s řetězci, formátovacími řetězci, překladem, ukazateli, malloc a free a samotná podstata - výuka programování se v tom ztratí. To stejné ve Visual Basic .NET (v Javě by to bylo vesměs podobné), přes všechny deklarace typů, inicializace, metody a rozvláčnou syntaxi se mi ztrácí ta hlavní myšlenka. V tomto souhlasím s Yettim, který zastával názor, že by první jazyk mohl být také ten, který potom člověk může reálně používat, pokud se další už učit nebude. C toto sice splňuje, ale pro tohoto člověka je takový jazyk defakto nepoužitelný.
Výuka programování je dost široký pojem. Zahrnuje to vše od pouhé syntax nějakého jazyka, přes algoritmy po složitou optimalizaci a přenositelnost. Zastávám názor, že C je jazyk vhodný pro výuku. Ano je možná složitý, resp. je nutné v něm vše ošetřit "ručně" (většinou znamená spoustu starostí s řetězci, formátovacími řetězci, překladem, ukazateli, malloc a free), ale přesně tohle jsem měl na mysli tím "ví, co je pod pokličkou". Myslím si, že pokud je člověk nucen se naučit sám pracovat s pamětí, pointerovou aritmetikou atd. tak nakonec bude schopen daleko lépe programovat ve kterémkoliv jiném jazyku, i když se o tito věci nakonec nebude muset starat.
.
Jaký je (z hlediska uvažování programátora) rozdíl mezi efektivní implementací iteračního algoritmu pro výpočet sin(x) v C, nebo v Pythonu? Jaký je rozdíl mezi efektivní a neefektivní implementací Fibonnaciho posloupnosti v C, nebo v Ruby? Kde je ta podstatná výhoda C jako výukového jazyka (tedy počet zabraných bytů v paměti ani počet instrukcí v tomto případě skutečně není argument), pro kterou ho všichni doporučujete?
Pro mě znamená výuka programování toto:
O parních mlátičkách si myslím své, dělá to z lidí idioty.Dr. Peringera náhodou neznáš, co
? Ale v tomto případě posouváš diskusi úplně jinam, než je. O RAD a IDE prostředích se tu nebavíme.
C je složitý jako sviňaa vzapati ho nazves makroassemblerom :) ty vtipkar, assembler je to najprimitivnejsie co moze byt...
Kde je ta podstatná výhoda C jako výukového jazykamat hlboke znalosti z C nie je programatorovi na skodu. je vela schopnych programatorov a stavil by som sa, ze vacsina (ak nie vsetci) maju bohate znalosti C a bol to jeden z ich prvych jazykov (samozrejme, ze tomu pomohla dostupnost a pod.). mas nejake informacie o velkom pocte ludi, ktori sa ucili programovat (dajme tomu) v pythone a potom sa ucili C (vo velkom rozsahu)?
začínající programátor se musí potýkat s (pro něj) nepodstatným balastem jako řetězce, správa paměti, kompilace, ... .sorry, ale ja podla mna to prehanas. praca s pamatou (vratane retazcov) ma velmi jednoduche pravidla, debugger je fajn vec a ja v tom vazne nevidim problem. aspon ho to nauci poriadku :) ale tiez mozno trosku inak vnimam slovo "zacinajici" - a to ako cloveka, ktory uz chape o com to je, len rozvija svoje znalosti implementaciou (a vtedy mu C da vela).
a vzapati ho nazves makroassemblerom :) ty vtipkar, assembler je to najprimitivnejsie co moze byt...Assembler je jednoduchý? Syntaxe možná, ale programovat v něm je teda pěkně složité!
mas nejake informacie o velkom pocte ludi, ktori sa ucili programovat (dajme tomu) v pythone a potom sa ucili C (vo velkom rozsahu)?Jenže tohle nemůžeš srovnávat. C je mainstreamový jazyk starý asi 30 let, kdežto Python je daleko mladší (a první verze příliš použitelné nebyly). Proto nemůžeš mít hromadu lidí, co se učili v Pythonu, protože ta prostě ani neměla kdy vzniknout
ale tiez mozno trosku inak vnimam slovo "zacinajici" - a to ako cloveka, ktory uz chape o com to je, len rozvija svoje znalosti implementaciou (a vtedy mu C da vela).Jenže člověka, co ví o co jde, už těžko nazývat začátečníkem. Já se naopak setkávám s lidmi, kteří většinou vůbec neví o co jde
Proto jsem taky sepsal 4 body, které považuji za výuku začátečníků.
A také jsi přešel moji otázku : Jaký je (z hlediska uvažování programátora) rozdíl mezi efektivní implementací dejme tomu iteračního algoritmu pro výpočet sin(x) v C, nebo v Pythonu?
V obou případech je základem to, že si člověk musí uvědomit, že implementace podle vzorce je neefektivní a daleko rozumnější je si hodnoty mocnin a faktoriálů z jednotlivých iterací pamatovat a snížit tak složitost algoritmu. Což je to podstatné a to, co funguje v úplně všech jazycích stejně. A navíc tě k tomu žádný jazyk nevede
Proto beru jako velké plus, když takový jazyk nezdržuje zbytečným balastem, ale umožňuje se soustředit právě na podstatu výuky.
Ad hluboké znalosti C: nevím, možná si to jenom neuvědomuji, ale podle mě jsou hluboké znalosti z C dobré jenom pro to C a to proto, že každý jazyk vyžaduje trochu jiný přístup. Navíc je C dost odlišné od zbývajících jazyků (v Javascriptu jsou closures, Python má silné builtin typy, v Javě prakticky nejdou dělat statické inicializace a vše je na haldě, ...), které používám a C přístup je v nich spíše na škodu.
Assembler je jednoduchý? Syntaxe možná, ale programovat v něm je teda pěkně složité!ano, je velmi primitivny. ako pises, je to len C rozlozene na instrukcie. len je tu vacsia sanca spravit chybu, tak ako je vacsia sanca spravit chybu v C oproti high-level jazykom...
Jenže člověka, co ví o co jde, už těžko nazývat začátečníkem.takemu staci aj robot karel
V obou případech je základem to, že si člověk musí uvědomit, že implementace podle vzorce je neefektivní a daleko rozumnější je si hodnoty mocnin a faktoriálů z jednotlivých iterací pamatovat a snížit tak složitost algoritmu.dolezite je to najprv napisat tak aby to fungovalo - co najjednoduchsie a nejprehladnejsie. az ked sa ukaze, ze je to velmi neefektivne, vtedy sa tym treba zaoberat.
C přístup je v nich spíše na škodu.nehovorim o pristupe, ale o tom co ta jazyk nauci. ja za seba mozem povedat, ze C ma na dalsie jazyky pripravilo dobre (ale mna to bavi, takze nejaky python by ma nezlakal ani dnes).
dolezite je to najprv napisat tak aby to fungovalo - co najjednoduchsie a nejprehladnejsie. az ked sa ukaze, ze je to velmi neefektivne, vtedy sa tym treba zaoberat.Bláznům se nemá odporovat
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.