Je jazyk C skutočne ťažký?

Je jazyk C skutočne ťažký?
« kdy: 01. 06. 2025, 14:06:54 »
Ahoj, moja otázka je veľmi jednoduchá. Je jazyk C skutočne ťažký alebo to je iba môj osobný dojem?


Re:Je jazyk C skutočne ťažký?
« Odpověď #1 kdy: 01. 06. 2025, 14:40:06 »
Já myslím, že ty dva díly dohromady nevážej ani dvě kila.

vcunat

  • ***
  • 152
    • Zobrazit profil
    • E-mail
Re:Je jazyk C skutočne ťažký?
« Odpověď #2 kdy: 01. 06. 2025, 15:18:43 »
Jazyk C jako takový je relativně jednoduchý, i pokud zohledníme standardní knihovny.  Je relativně blízko k železu a k operačnímu systému (tady na root.cz předpokládám hlavně POSIX systémy).  To má plusy i mínusy.

Otázka byla asi ale, jestli je v C těžké psát?  Tam bych to viděl hlavně tak, že není každý jazyk vhodný na vše a některé věci opravdu není snadné v C napsat a pokud neoceníme plusy C v daném případě, tak nejspíš bude lepší zvolit na to jiný jazyk.  Klasický příklad je pitomá práce s textovými řetězci, ta se v mnoha jiných jazycích píše mnohem jednodušeji (korektně, bez různých overflow apod. v okrajových situacích).

Re:Je jazyk C skutočne ťažký?
« Odpověď #3 kdy: 01. 06. 2025, 16:20:17 »
Špecifikujem, myslel som konkrétne či je ťažký na naučenie... mne príde náročnejší než taký python.

Zopper

  • *****
  • 904
    • Zobrazit profil
Re:Je jazyk C skutočne ťažký?
« Odpověď #4 kdy: 01. 06. 2025, 17:27:52 »
C je v základu jednoduchý. Nemá žádné věci jako výjimky, generátory (yield), objekty a třídy, má jen minimum datových typů, atd. Ale všechno složitější si tam musíš poskládat od základů, nebo se zamotat do hromady toolkitů a knihoven, a nechá tě střelit se do vlastní nohy, takže pokud je pro tebe jednodušší slepovat dohromady nějaké černé krabičky bez chápání, co asi dělají a proč, no, pak je Cčko složitější. Tak, jako je složitější Ford model T, ve kterém bude asi tak 5 metrů drátů, s žádnou elektronikou, a pár táhly a šoupátky, než dnešní auta s kilometry drátů, hromadou elektroniky, variabilním časováním...

Edit: Pokud ale chceš dělat něco víc, než si slepit pár malých pokusů, tak stejně je vhodné vyzkoušet i to Cčko pro pochopení, jak spousta automagických věcí vlastně funguje. Nebo si pro Pythonní program napsat výkonově kritickou část v Cčku.
« Poslední změna: 01. 06. 2025, 17:31:31 od Zopper »


mmcc

Re:Je jazyk C skutočne ťažký?
« Odpověď #5 kdy: 01. 06. 2025, 18:09:38 »
C je zlozitejsi do hlbky, treba pri nom viac rozmyslat, do hlbky rozumiet problemu, niekedy rozumiet aj hardwaru. Python je zlozitejsi do sirky, ma zlozitejsi syntax, treba si pri nom pamatat viac veci. Kazdy z nich je vdhodnejsi na nieco ine. Cecko je vhodnejsie na low level veci, optimalizovane na rychlost, el. spotrebu, usporu RAM. Python je vhodnejsi na tu vyssiu vrstvu, webovy backend, REST API. Aj vdaka jeho frameworkom (Django, FastApi, Flask...), ale doslova nevhodny na iterovanie celkeho mnozstva da. Vela python modulov su napisane v cecku, hlavne veci okolo spracovania dat. Idealne vediet obidva, aj ako "integrovat" cecko do pythonu (npr cpython).

Re:Je jazyk C skutočne ťažký?
« Odpověď #6 kdy: 01. 06. 2025, 20:42:56 »
Rozdělil bych to na dvě otázky:

Je C těžký jazyk? NE
Je těžké v C programovat? ANO

C je jednoduchý jazyk, který se naučíš za chvíli. Důsledkem této jednoduchosti je to, že tvoje programy budou složitější – nedá se to obejít, existuje nějaká inherentní složitost programu, který se snažíš napsat, a čím méně toho za tebe řeší programovací jazyk (nebo knihovny), tím více toho musíš ve svém kódu řešit ty.

Tím nechci na C házet špínu. Ten jazyk má velký přínos – je potřeba to vidět v kontextu, ve kterém vznikal. Jednak umožňuje přenositelnost mezi platformami a jednak strukturované a mnohem přehlednější programování oproti assembleru. A dodnes má svůj smysl pro psaní nízkoúrovňových věcí. Taky slouží jako de facto standardní rozhraní mezi nativními knihovnami a programy psanými ve vyšších programovacích jazycích.

Určitě je dobré C umět. Ale pro psaní programů/aplikací bych ho nedoporučoval. Pokud budeš psát jádro systému nebo základní systémové nástroje, tak ano, tam to má smysl i z důvodu „bootstrappingu“ protože kompilátor C je jednoduchý a máš tak minimum závislostí k tomu, abys postavil základ systému. Ale pro další aplikace bych použil aspoň C++ nebo D, Rust, Go, Javu…


Re:Je jazyk C skutočne ťažký?
« Odpověď #7 kdy: 01. 06. 2025, 21:37:59 »
Asi uz chapu otazku. Zvladnul jsi python a ted se ohlizis po C/C++.
Presel jsem Pascal, C, C++, C sharp, Python. Jestli umis C pak prejit na python je lehke. Mnohe veci zjednodusuje. Zbavuje te prace s pameti malloc/free, chrani ti pole (overflow), automaticky inicializuje promenne a pole. Na mnoho veci uz jsou napsane funkce primo v zakladu (string, pole, list).
A to je vlastne i odpoved na tvou otazku. Pri prechodu z python na C se tohle vsechno musis naucit, vedet a programovat.
Jestli je tvuj prvni jazyk python pak to pro tebe bude tezke ale rozhodne to nevzdavej.

Wasper

  • ***
  • 184
    • Zobrazit profil
    • E-mail
Re:Je jazyk C skutočne ťažký?
« Odpověď #8 kdy: 01. 06. 2025, 22:16:24 »
Ahoj, moja otázka je veľmi jednoduchá. Je jazyk C skutočne ťažký alebo to je iba môj osobný dojem?
Dnes, tedy v dome, kdy mame -Werror -Wall -Wextra, kdy kompiler dokaze prijit na drtivou vetsinu beznych chyb sam, a soucasne v dobe, kdy jedina chyba ve vysledku nasi praci neznamena katastrofu (coz, v pripade nekterych platforem znamenalo pad celeho serveru a nasledny reboot - kdo z mistnich si jeste pamatuje "ABEND - blabla.NLM did not freed 58 bytes of Allocated Short Term Memory, type EXIT to reboot" kdyz clovek zapomel na par bajtu?), tak ano, naucit se delat v Cecku beru jako hodne jednoduche.

Naucit se delat v cecku dobre je o dost tezsi a znamena to alespon trochu nahlednout i do assembleru, ale tam cloveka casto donuti sam zivot (jako IGBT nejsou uplne levne, a kdyz se odporouci za silvestrovskych efektu pate v rade do kremikoveho nebe spolu s usmernovacem na vstupu, protoze programator udelal trivialni chybu v programu, kterym to ovlada, tak uz si da pozor kazdy)

Re:Je jazyk C skutočne ťažký?
« Odpověď #9 kdy: 02. 06. 2025, 05:59:25 »
Důsledkem této jednoduchosti je to, že tvoje programy budou složitější

Moje zkušenost je jiná. Přepisoval jsem pár programů z F# do C a byly jednodušší. Jeden z důvodů byl, že jsem nahradil složitější algoritmus jednodušším - mohl jsem si to dovolit, protože C je rychlejší.

A přešel jsem právě z důvodů jednoduchosti, protože optimalizovat kód v F# pod určitou hranici bylo těžší než v C (v F# jsem hodně řešil, jak se vyhnout alokacím a tím i spouštění GC, což tenhle problém v C není).

Re:Je jazyk C skutočne ťažký?
« Odpověď #10 kdy: 02. 06. 2025, 08:40:46 »
Jazyk ako taky nie je tazky, len vsetko si tam musis osefovat sam. Na jednej strane je to fajn, lebo mas nad vsetkym kontrolu, ale na druhej strane je to zas nevyhoda, lebo to stoji cas (a cas su peniaze). Preto aj vznikli vyssie jazyky, ktore ta vlastne odbremenia od vela takychto veci a ty sa viac mozes sustredit na samotny program.

Re:Je jazyk C skutočne ťažký?
« Odpověď #11 kdy: 02. 06. 2025, 10:01:22 »
Je jazyk C skutočne ťažký

C je jednoduchý jazyk, který se naučíš za jedno odpoledne.

Re:Je jazyk C skutočne ťažký?
« Odpověď #12 kdy: 02. 06. 2025, 11:52:58 »
... má jen minimum datových typů ...

Pokud se týče základních datových typů, tak bych naopak řekl, že jako snad jediný jazyk (kromě assembleru) poskytuje kompletní množinu různě dlouhých integerů se znaménkem nebo bez (a floaty a pointery). Sice se integer typy divně jmenují (char, short, long, long long) takže si je lidi někdy pro lepší přehlednost přejmenovávají na něco jako u16, nebo s32...  ale těch pár jiných jazyků, které, jsem potkal, mě většinou tlačilo nějak do kouta stylem "tumáš nějaký integer a neotravuj s detailismem". Na to navazují bit-banging operace AND, OR, XOR, NOT.

Žádné rozmazlování garbage collectorem - máte lokální proměnné na stacku a globální tuším na heapu, a na případnou dynamickou alokaci z heapu máte v případě zájmu explicitní malloc() a free().

Jazyk je to závorkovatý, takže se nemusíte bát, že se Vám program rozbije změnou odsazení řádku.
Zároveň není tak ukecaný jako někteří jeho vrstevnící, kteří uzavírají blok mezi slůvka BEGIN a END :-)

Ten jazyk má přímý přístup k systémovým standardním knihovnám a syscallům. Vyšší jazyky toto C-level API musí nějak "balit" pro své potřeby, mohou být pozadu / nabízet jenom podmnožinu, nabalit další vrstvu abstrakce která může věci zjednodušovat a ve složitějších případech překáží apod.

Jsou situace / zadání, kde je zcela legitimní a vhodné, použít něco jiného než právě C :-)

Je to osobní volba. Mě v hadích letech vždycky zajímalo, jak věci fungují "pod kapotou", a když jsem po setkání s Basicem a Pascalem potkal vlastním přičiněním nakonec i Céčko, byla to pro mě veliká úleva. Že nemusím prosté věci řešit divnými oklikami, zároveň ale nemusím zabředat do detailů instrukční sady procesoru.
« Poslední změna: 02. 06. 2025, 11:57:05 od František Ryšánek »

Re:Je jazyk C skutočne ťažký?
« Odpověď #13 kdy: 02. 06. 2025, 12:13:28 »
Na C je tezka k pochopeni a pouziti jedina vec. Uvedomit si co je pointer, jaky vztah to ma k poli a jake dusledky ve vztahu k pameti.
Kdyz clovek pochopi ten princip, je to pruzracne jasne (coz neznamena, ze jednoduche na uhlidani). Ale zkusenost me rika, ze to pro lidi odchovane v Pythonu je tezky krok na pochopeni. A prijde me to zvlastni, protoze clovek nemuze byt dobry programator, dokud nema predstavu jak pocitac pracuje s pameti a jake ma dusledky co naprogramuje.
PS: druha prekvapive nepochochopena vec jsou ciselne soustavy. Pritom je oboje v principu uplne snadne.

oss

  • ****
  • 256
    • Zobrazit profil
    • E-mail
Re:Je jazyk C skutočne ťažký?
« Odpověď #14 kdy: 02. 06. 2025, 12:26:54 »
Nie nie je. Noapak, je to jeden s tych jazykov, pri ktorom clovek vie co robi, lebo je to tam vzdy explicitne napisane.