C nyelv kezdés - kérdés (nyelv, IDE, könyv)

Sziasztok!

Szeretnék megtanulni C-ben programozni, ehhez kellene segítség. Elsőnek felvázolnám a céljaim, mert lehet, hogy más nyelv jobban feküdne a terveimhez.

Közepes/hosszú távú célom, hogy olyan alkalmazást tudjak írni, ami kapcsolódni tud webes rendszerekhez. PHP-val elboldogulok, de bizonyos körülmények esetén kellene lokálisan futó program, ezért szeretném, ha képes lennék összefaragni egy-két dolgot.

Kérdéseim illetve várakozásaim:
- több platformra fordítható kód (elsődlegesen windows és linux) ezért gondoltam C-re. No de melyik? C++ vagy C# vagy egyéb/más nyelv?
- compiler ami free?
- lehetőleg ingyenes IDE (Netbeans-t már hallottam, de hátha van más is, amit kipróbálhatok) A legjobb az lenne, ha segítene a parancsok, szintaxisok megírásában (mint pl. PHP-nál a Zend)
- felhasználói felülettel rendelkező és háttérben futó alkalmazásra
- könnyű adatbáziskapcsolati réteg (mysql, mssql, postgre)
- ajánlott tananyag kezdőknek?
- használható online segítség for dummies? :)

Szóval egy olyan segítségcsomag lenne jó, amivel az első lépéseket is csalódás nélkül átvészelem, ugyanakkor ha kicsit belelendülök, akkor is elegendő a funkcionalítása.

Előre is köszönöm a válaszaitokat!

Üdv:
Throo

Hozzászólások

Ilyen elvárásokkal nekem eszembe nem jutna valami C* nyelvet választani. Scriptnyelvek, Python elsősorban.
----
India delenda est.
Hülye pelikán

"Közepes/hosszú távú célom, hogy olyan alkalmazást tudjak írni, ami kapcsolódni tud webes rendszerekhez. PHP-val elboldogulok, de bizonyos körülmények esetén kellene lokálisan futó program, ezért szeretném, ha képes lennék összefaragni egy-két dolgot."
Ilyen alkalmazásra inkább c++ a javaslatom.

"több platformra fordítható kód (elsődlegesen windows és linux) ezért gondoltam C-re. No de melyik? C++ vagy C# vagy egyéb/más nyelv?"
c != c++, a c# meg főleg nem c.

"compiler ami free?"
ha c++, akkor g++ (esetleg intel c++ compiler)
"lehetőleg ingyenes IDE (Netbeans-t már hallottam, de hátha van más is, amit kipróbálhatok) A legjobb az lenne, ha segítene a parancsok, szintaxisok megírásában (mint pl. PHP-nál a Zend)"
A zend eclipse alapu, így hát ha már ismered, akkor az eclipse-t ajánlanám.
"felhasználói felülettel rendelkező és háttérben futó alkalmazásra"
Nem teljesen értem a dolgot, ez csak azon múlik hogy milyen kódot írsz.
"könnyű adatbáziskapcsolati réteg (mysql, mssql, postgre)"
Keresel rá egy neked megfelelő lib-et, de ez már szintén csak rajtad múlik hogy melyiket választod. Van pár:)
"ajánlott tananyag kezdőknek?"
Hát, erre nehéz válaszolni. Előbb válaszd ki azt a nyelvet, amit használni szeretnél.

> - több platformra fordítható kód (elsődlegesen windows és linux) ezért gondoltam C-re. No de melyik? C++ vagy C# vagy egyéb/más nyelv?

Felejtsd el a C-t, valamely dinamikus nyelv jobban megfelel erre a celra: python, ruby, perl, ami tetszik. C*-vel portabilitast elerni elegge remalom.

> - compiler ami free?

gcc & clang, ha C/C++. C# eseten mono vagy mifene.

> - könnyű adatbáziskapcsolati réteg (mysql, mssql, postgre)

Na, itt a C/C++-t aztan tenyleg felejtsd el. Lehet, hogy C# eseten mar jobb a helyzet, de C/C++ kornyeken borzalom van csak es szenvedes.

--
|8]

Qt -s programok Macen kimondottan ocsmányak, és nem viselkednek intuitívan.
Java/SWT -sek is. Java/Swing viszonylag elfogadható, de nem tökéletes.
Qt úgy tudom nem lesz windows metrora.
Akkor most mobil platformokról nem is beszéltem.

A portabilitásnak hatalmas ára van, sokan nem látják. Nem biztos, hogy érdemes megfizetni, és megfizettetni a felhasználókkal. Sokszor jobb inkább megírni a kérdéses alkalmazást tisztességesen az egyes támogatni kivánt platformokra, és más platformokat meg egyszerűen nem támogatni (vagy akár erőforrás híján csak egyetlenegy választott platformot támogatni).

Köszönöm mindenkinek! :)

Többek multiplatform ellenzésére alapulva lehet pihentetem a C-t és varjációit... Lehet először körbenézek Algernon által javasolt nyelvek között...

Köszönöm mindenkinek az eddigi hozzászólásokat :)

Én bizony fordítva ülnék a lóra: az igényekből adnék le, igenis belenyalva a C-be, aztán amikor kialakult ezáltal egy kép arról, hogy mi folyik a memóriában, lépnék oldalra más nyelvekre, nagyobb célokkal.

Persze valószínűleg azért mondom, hogy így tennék, mert pont így tettem hajdan.

Egyelore lasson a PHP-hoz kepest ertelmes kornyezetet, aztan lehet tovabblepni a C fele. Pont eleg lesz neki kinoni a PHP-s beidegzodeseket most elso korben.

En egyebkent nem ajanlom a C-t masodik nyelvnek, mert nem egyszeru tanulni, eleg sok a rejtelyes hibalehetoseg benne, ami csak futaskor derul ki, es hat a hibakezeles nem a legjobb benne.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Egyrészt 100%-ig igazat adok abban, hogy a php-ből nehéz lesz kilépni (nem is biztos, hogy kell). Másrészt ha az ember tudni szeretné, hogy mi folyik a háttérben, a C mellett sok egyéb alternatíva nem is marad: egyik full memóriamenedzselt (szkrip)nyelvből a másikba átlépni _ebben a tekintetben_ sok eredményt nem hoz. Hajdan a C-beli lyukra futásaimból messze többet tanultam, mint amikor a Pascal úgy-ahogy megvédett magamtól. Meglehet, hogy ha e kettő (no meg az asm) kimaradt volna, ma volna egy olyan tévképzetem, hogy a változó csak úgy beleszületik a memóriába gond és keserv nélkül.

Nem tudom, hogy ez most mennyire rossz vagy már jónak tekintendő, de ott tart a világ, hogy Websphere AS programozó tanfolyam (azaz valószínűleg ott már nem nullkilométeres hallgatók jelennek meg) oktatóját készek a résztvevők teljes akarategységben megkövezni, ha kiejti a száján, hogy "pointer", mert "hiszen ebben a nyelvben nincs is ilyen".

"ha az ember tudni szeretné, hogy mi folyik a háttérben"
De vajon szeretne? Foleg ezen a szinten?

Nekem is csak sokadik nyelv volt a C. Mert nem erdekelt, hogy mi hajtja, ha megnyomtam a kis piros gombot, akkor mukodott, ha a nagy zoldet, akkor is.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Ja, tényleg az az igazi kérdés, hogy "csak" csinálni akarja-e, vagy tudatosan csinálni.

Most belegondolva azért volt egy hatalmas előnye a C-vel szórakozásnak annak ellenére, hogy aktívan vagy 10 éve nem használom: ha valaminek ELMÉLETILEG biztosan mennie kellene, egy strace/ltrace/truss futtatásával általában be sikerül lőni, hogy GYAKORLATILAG miért nem megy.

... és az egy előnyből a második persze a tökéletlenül/elővigyázatlanul portolt, de szimpatikus jutilitik fordításakor érhető tetten.

"Egy virtuális gépen futó programhoz aztán nagyon nem nyújt segítséget a C tudás."

... amíg azt nem kezded el látni a logban - a vm utolsó életjeleként -, hogy "malloc failed to allocate...", amikor is ha tényleg semmi, de semmi gőzöd nincs arról, hogy mi és miért folyik a háttérben, Neumanntól a M$-on/Linuson át a Sunig bezárólag mindenki hülye lesz, hogy valamiért odatette azt a micsoda mallocot, ami neked nem is kell, és bénázik, és szívat.

Persze nem azt mondom, hogy a tájékozott vm-alapú programozóval fordulhat elő ilyesmi, viszont a jelek szerint már a gyarkolat se jelent feltétlenül tájékozottságot.

Tudod, ha ilyen elofordul, akkor altalaban ugyis a VM program gyartoja volt hulye, es en, mint a VM felhasznaloja nem tehetek semmit - akkor se, ha kb. ertem, hogy mi a rak baja van. De egyebkent meg Google eleg sokmindennek az ertelmezeseben segit. 99% hogy nem en szaladok bele ilyen hubaba eloszor.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Felreertetted.

Az esetek mondjuk 90-97%-aban ha a VM elszall, az nem kozvetlenul azert van, mert a kod szar. Mondjuk ez elsosorban Javara es Rubyra igaz (mert ezeket ismerem), es implicite kizarom a C nyelvu betetek targyalasat a temabol, mert ez nem a VM resze, viszont ha az szar, akkor az tenyleg magaval rantja a VM-et. De itt nem errol van szo.
Szoval, ha a VM dob valami malloc/free problemat, az az esetek donto tobbsegeben nem a VM-ben futo kod josaga/rosszasaga miatt van, hanem azert, mert a VM bugos. Mivel nagyjabol nincs olyan VM, ahol ne lenne implicite automata GC, vagy valami mas automatta memoriamenedzsment, igy kodbol nincs is ertelme - sokszor lehetoseg sincs - valami olyasmit kozvetlenul lefuttatni, aminek a vege malloc/free lesz. Tehat, mittomen, letrehozok egy objektumot, oke, de baromira nem biztos, hogy az a VM-ben egy malloc-ot fog implikalni, mert akar elore is lefoglalhatott memoriat, amibe meg epp beleferek. Ugyanigy egy objektum megsemmisulese meg nem implikal kozvetlen free-t, hanem a memoriaterulet visszakerul a szabadok koze a VM-en belul, es ennyi.

Tehat az esetek tobbsegeben ha a VM dob egy hibat, akkor abban a VM-en belul futo kod vagy csak borzaszto kozvetetten, vagy egyaltalan nem felelos. A hibas VM-mel meg ugyse nagyon tudsz mit csinalni.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Az esetek 97%-ban az van, hogy a terheléshez képest tényleg kicsire van véve a VM által használható memória (és akkor az egyidejű szükségesen meglevő objektumok miatt betelik) vagy szar a kód. Némi tapasztalat birtokában az elsőre elég hamar rá lehet jönni, a második megtalálásában pedig sokat segít a heap dump (delta).
Leak-elő vm-el az elmúlt 12 évben talán ha kétszer futottam össze.
Egyszer volt még 1.5.x egyszer meg 1.6.0.18 után.

--
Gábriel Ákos
http://i-logic.hu

A C sok teruleten nagyon hasznos, erdemes belekezdeni legalabb minimalis szinten, erre a K&R konyvet ajanlom.

Viszont amit irtal, arra a PHP miert is nem jo? Azt irtad, azzal elboldogulsz, es erre a feladatra - scriptnyelvkent - tokeletesen alkalmas. A legtobb ilyen feladatot PHP-ban szoktam megoldani.

Annyi, hogy a gepre felteszed a PHP-cli-t (van Winre, Linuxra, meg ami epp kell, nyilvan ingyenes), es futtatod vele a PHP scriptedet. A libcurl-on keresztul le tudsz kerni weboldalt (van ra tamogatas, csak fel kell tenni telepiteskor), tud (x)html-t parse-olni (szoval DOM objektumonkent is elerheted meg stringkent is/regexppel), ill. van beepitett webservice tamogatas is.

Adatbazis kezelest csinalhatod ugy, ahogy eddig, PDO/mysqli/pg/ami tetszik.

Ja, es ha akarod, felteheted a vegen a webserverre is. Egyebkent van hozza GTK, meg ki tudja meg mi.

Online segitseg: php.net

--
My gold plated butt-plug business is being sued by Apple.
Apparently they have a patent for overpriced crap for arseholes.

A php-val köszönöm jól vagyok, de pont egy olyan rendszer kellene, amihez nem kell php-t futtatni, ugyanakkor nem csak cli-ből érem el. Illetve ha egy későbbi programot ki szeretnék adni a kezemből, akkor ne adjam oda a fél kódkészletet vele együtt... Tudom, hogy vannak titkosítóprogramok, mint az IonCube, vagy Zend Guard, de ezek néha összekuszálják a kódot és nem futnak emiatt le úgy, ahogyan annak kellene. Ezért lenne jó valami olyan alkalmazás, ami elvégzi amit kell. Ugyanakkor jó ha webről bárhonnan eléri az ember az adatokat, ezért kell majd a DB kezelés...

Phyton-t és a Ruby-t is nézegettem, bár csak felszínesen egyenlőre. Pythonnál láttam valami verzió miatti lehetséges nehézségeket a futtatással... (2.7.x vs 3.x... ) A ruby nyelvezetével még nem találkoztam, de remélhetőleg nincs köze a ruby on rails-hez, csak a nevében... :)

Hat ha fontos, hogy amit kiadsz a kezedbol, azt nehezen lehessen atalakitani/visszafejteni, akkor a scriptnyelvek egy resze kiesik (ahogy egy csomo mas is, pl. Javahoz es C#-hoz is vannak egeszen jo eszkozok).

"A ruby nyelvezetével még nem találkoztam, de remélhetőleg nincs köze a ruby on rails-hez, csak a nevében... :)"

doki: Asszonyom, van egy nagyon jo hirem!
no: Kisasszony.
doki: Ez esetben van egy rossz hirem..

--
My gold plated butt-plug business is being sued by Apple.
Apparently they have a patent for overpriced crap for arseholes.

Először inkább azt a kérdést tenném fel, hogy úgy egyáltalán _programozni_ szeretnél megtanulni (és akkor fölösleges a platformfüggetlenség meg az adatbáziskapcsolat)?
Ez esetben: linux, gcc, make, vim.

"Ellophatatlan" program nincs, manapság a VM-ek korában pláne nincs.

Amúgy meg Java + Eclipse

--
Gábriel Ákos
http://i-logic.hu