C++ programozásba kezdenék, miből tanuljak?

 ( Zagyvala | 2012. január 15., vasárnap - 2:05 )

Sziasztok!

Szeretnék megtanulni C++-ban programozni, abszolút kezdő vagyok a témában, még a linux distrókkal is meg kellett küzdenem, ismerekedem velük. Egyetlen programom C++-ban írtam, nem, nem a Hello world-öt :p, abból állt, hogy a megadott karaktereket megadott elemű, vagy sorú piramisba rendezte, majd megmutatta hány elemből, vagy sorból áll.

Sok helyen olvastam, hogy sokaknak az a bajuk, hogy nincs egy problémájuk, amit elkezdhetnének csinálni. Nekem szerencsére van, elég összetett, de szerencsére sok apró tényezője egyszerű. Például egy oldal forráskódjából (mármint amit visszaküld) bizonyos adatok kiszedése és egy táblázatba rendezése egy kész keresőalgoritmussal. Főként thumb-ök összehasonlításával menne, meg azt nézné meg, hogyha xy után áll akkor nem számít, szóval még if-fel lenne tele.

Azt szeretném kérdezni, hogy hogy kezdjek neki a tanulásnak, esetleg kezdjek valami könnyebbel és később hogy csinálhatok valami szép menürendszert? :) Remélem nem vagyok túlságosan ábrándozó, igyekszem minél többet beletenni, és rajta vagyok az angoltanuláson is.

Előre is köszi a segítséget!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Szeretnék megtanulni C++-ban programozni, abszolút kezdő vagyok a témában

Ha ezt úgy érted, hogy más nyelveket sem ismersz, ill. egyetlen programnyelvben sem mélyedtél el, akkor szopni fogsz. Nem a C++ az a programnyelv, amivel érdemes kezdeni. Sőt. C++-nak nem érdemes nekiállni, amíg nem ismered a C-t eléggé alaposan. Mondjuk annyira, hogy bármilyen C kódról tudjad, hogy az byte szinten mit művel a memóriában.

"Mondjuk annyira, hogy bármilyen C kódról tudjad, hogy az byte szinten mit művel a memóriában."

Minek? Ha nem kernelt vagy beágyazott rendszereket fejleszt, akkor nem nagyon lesz rá szüksége. Tanulja csak meg az alapokat, aztán majd ráér ilyen részletekkel foglalkozni, ha épp kell egy probléma megoldásához.

Én nem tartom hülyeségnek, ha nem exploitolható a kódja lépten-nyomon, mert pl nem tudja, hogy működik a stringkezelés vagy a stack. Vagy az sem feltétlenül hátrány, ha nem segfaultol el a programja 10 percenként, mert nem érti a memóriakezelést.

- Not even the slightest bit -

Mert a memóriakezelés megértése nélkül a büdös életben nem írsz nem crashelő, nem leakelő C++ programot. Az állásinterjúkra jelentkező, korábban már C++ programozást is végző (értsd: ez volt a korábbi munkahelyén a munkája) egyedek min. 50%-ának komoly gondot okoz megmondani egy kicsit is érdekesebb operator overloadingos, template-es metódushívásnál, hogy melyik objektumról mikor és hova készül másolat...

Az volt a tapasztalatunk pár éve, hogy a C++ programozók 95%-a hiába csinálja ezt már évek óta, a memóriamenedzsment, az exception-kezelés, a template-ek terén oly mértékben nem érti a lényeget, hogy kizárt, hogy velük értelmes produktumot lehessen fejleszteni. És ezek az emberek valahol ezt csinálják, termelik azokat a kódokat, amik tele vannak kritikus versenyhelyzetekkel, ha jó időben nyomom meg a felületen az egérgombot, pusztul az egész program.

Maximálisan egyetértek a lentebb írt azon véleménnyel, miszerint abszolút nem kezdőknek való a C++; sőt: rendes C++ programot írni nagyon mélyvíz. Ráadásul a feladatok jó részére vannak sokkal jobban használható programnyelvek.

Kétségtelen, hogy lehet egyfajta kiterjesztett C-ként használni: nem használok template-eket, exception-öket, tehát STL-t sem, lehetőleg virtuális metódusokat sem (a virtuális destruktor még belefér, azt nehéz elrontani), pointert tartalmazó objektumoknál megakadályozom a másolást, egyszer allokálok, és utána mindenki explicit pointereket kap. Ezzel a hozzáállással valóban el lehet kerülni a buktatók igen nagy részét, lehet így C++-ozni, csak éppen minek.

Szerintem ne tanuljon C++ programozást az, aki még nem tud programozni rendesen.
Az OOP-huszárokról (-fanokról) nem is beszélve... Vannak tök jó implicit memóriamenedzsmenttel ellátott OOP nyelvek, tessék azon tökéletesíteni az OOP elvek ismeretét, aztán ha ez már mind megvan, akkor lehet menni a dzsungelbe harcolni.

Na azért az elmondottakhoz nem kell tudni, hogy a memóriában mi történik byte szinten pl egy objektum létrehozásakor. Pl felesleges azt is tudni elsőre, hogy mi az a vtable, elég ha annyit tud, hogy egy virtuális és egy nem virtuális függvény között mi a különbség...

Amúgy meg ha valaki elkerüli a pointereket, meg a new kulcsszót, akkor már nagy baj nem lesz (ezt nem viccből mondom, a dinamikus memóriafoglalást kerülni kellene amennyire csak lehet). Template-ek nélkül meg nem is élet az élet :)

Pl felesleges azt is tudni elsőre, hogy mi az a vtable, elég ha annyit tud, hogy egy virtuális és egy nem virtuális függvény között mi a különbség...

Maximálisan eltér a véleményünk.

A virtuális metódusok működését sose fogja megérteni az, aki nem ismeri a vtable fogalmát. Ráadásul ez nem is egy bonyolult dolog.

Persze ha egyáltalán nem használ valaki virtuális metódust, akkor valóban nincs szüksége erre a tudásra...

Amúgy meg ha valaki elkerüli a pointereket, meg a new kulcsszót, akkor már nagy baj nem lesz (ezt nem viccből mondom, a dinamikus memóriafoglalást kerülni kellene amennyire csak lehet).

Azért a dinamikus memóriafoglalás nélkül leküzdhető feladatok elég sovány részhalmazt képeznek a való életben :)

Ha minden kicsit is bonyolultabb dolgot kihagysz a C++-ból, akkor valóban eléggé lecsökken a megugrandó küszöb, de cserébe szinte semmit nem tudsz megcsinálni. STL nélkül nem igazán nevezheti magát senki C++ programozónak, STL használata esetén meg alig van olyan nyelvi elem, amit ne kéne ismerni.

A virtuális metódusok működését sose fogja megérteni az, aki nem ismeri a vtable fogalmát. Ráadásul ez nem is egy bonyolult dolog.

Persze ha egyáltalán nem használ valaki virtuális metódust, akkor valóban nincs szüksége erre a tudásra...

A polimorfikus destruktorokra akkor is szukseg lesz, ha amugy egyetlen mas virtualis fuggvenyt sem hasznal.

Nekem az a velemenyem, hogy a c++ egy komplex dolog (ez az egyik legnagyobb hibaja is egyben). Szoval a "csinalgatom es majd egyszer osszeall a kep" dolog nem tul produktiv. Ra kell szanni az idot rendesen es rendszeresen, es akkor lesz valami.

Ha mar kerdezve volt, akkor en a kovetkezo forrasokat ajanlom:

- The C++ programming language (Stroustroup). Ez egy must-have sok szempontbol, de nem feltetlenul kell vegigolvasni elsore, eleg hosszu. Inkabb annyira kell ismerni, hogy az ember referenciakent fel tudja haszalni. Tehat az elso par fejezetet alaposan vegigolvasva, a tobbi reszt inkabb csak atfutva.
- Effective C++ (Meyers). Szerintem ez a konyv nagyon jo a nyelvi mechanizmusok elmagyarazasaban es a csapdak kikeruleseben. Nem tul hosszu, mondhatnam ugy, hogy az ar/teljesitmeny mutatoja eleg jo, csak nem arra torekszik, hogy megtanitson egy teljesen kezdot, hanem arra, hogy mar valamennyire jartas programozoban letisztazzon bizonyos kerdeseket.
- Design Patterns (Gamma, ...). Ez meg arra jo, hogy a nyelvi mechanizmusokat hogyan kell felhasznalni valos problemak megoldasara.

Ez jo sok igy magaban, vannak meg remek konyvek C++-rol es jo sok olyan is, amit kar volt elkezdeni megirni, de ez a harom talan eleg jo lefedettseget ad.

azert egy Qt vagy MFc kornyezetben eleg jol el lehet lenni STL nelkul :p

--
NetBSD - Simplicity is prerequisite for reliability

"Azért a dinamikus memóriafoglalás nélkül leküzdhető feladatok elég sovány részhalmazt képeznek a való életben :)"

Szerintem meg nem, a legtöbb esetben csak jól kell megválasztani egy változó scope-ját, és egy csomó problémát el lehet kerülni. Igen, tényleg van olyan, amikor dinamikusan kell foglalni, mert nem tudod előre, hogy mennyi adatod lesz, de ez közel sem olyan gyakori, mint gondolod.

Amúgy meg az STL-t pont hogy nem vettem ki, te írtad, hogy exceptiont, meg template-eket ne használjon, szerintem meg ezek azok a részei a C++-nak, ami nélkül nem érdemes élni, és ami nélkül az STL-nek sincs értelme.

És ez mennyire így van. Java mellett néha kell c++ kódolásban is besegíteni, és nagyon hamar
kijött két dolog:

- oo ismeretekkel, pattern alapú gondolkozással a kódereknek igen komoly hiányosságai vannak
- c++ programozni java/c#-hoz képest egy teljesen más világ, NAGYON kell ismerni a nyelvet
ahhoz, hogy ne csináljon az ember gányolást. És nem, az ismeret nem a for ciklusnál kezdődik :)

Szerintem simán nekiállhat a c++-nak a c ismerete nélkül. Én mondjuk C-vel kezdtem a mai napig azt szeretem jobban, de c ismerete nem feltétlenül előnyös.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Sőt! Mivel a C++ nagyjából tükröz egyfajta (ezt állítják!) objektumorientált gondolkodásmódot, ezért ha emberünk inkább OOP szuperhős akar lenni, akkor én nem rángatnám bele a C sötét, mérges gázoktól bűzlő mocsarába, noha a C++-ban is megvan minden eszköz ennek a mocsárnak a folyamatos rothadó dögökkel történő táplálására.

Ugyanakkor ha a leendő boszorkánymesterünk otthonosabban érzi magát a procedurális világban és nem akar foglalkozni annyira a nyámnyila, tehetségtelen OOP programozók bajaival küzdeni, hanem rögtön inkább egy saját mikrokernellel orvosolná a bolygónk párductestén éktelenkedő mételyt, akkor tanuljon C-t!

- Not even the slightest bit -

Én sem tudtam volna több idegen szóval, íj költőien kifejeni. :D Jót mosolyogtam. De végtére is igaz.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Az a gond, hogy ha komolyabb programot ír valaki C++-ban, előbb-utóbb elő fog jönni, hogy csak jó lenne ismerni azt a C nyelvet is...

----------------
Lvl86 Troll

Szerintem profil függő. Annak ellenére, hogy én is sokkal jobban kedvelem a C-t a Cpp-nél, a hardverkezelésen kívül nem látok hirtelen mást, ahol ne volna ekvivalensen kiváltható a kettő. Na igen, és a memóriakezelés jobban a kezedben van.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

egyreszt nem ez volt a kerdes, masreszt -1

semmivel nem nehezebb C++ programot irni, mint C-t. Marcsak azert sem, mert az esetek 99%-aban a C program is lefordul C++-ban.

Amit viszont joval nehezebb C++-ban mint C-ben, az a masik programozo kodajanak olvasasa, de azzal kezdokent nem nagyon fog tudni es nem is fog akarni egyebkent sem megbirkozni.

De szerintem nem kerdes, hogy a cin,cout,fstream,stringstream mennyivel kezdobaratabb a printf,scanf,fscanf,atoi stb.-nel, es akkor nem emlegettuk a new,delete vs *alloc-ot

Ettol fuggetlenul lehet, hogy nem kezdoknek valo nyelv a C++ (elsosorban a pointerek miatt), de a C megannyira sem

semmivel nem nehezebb C++ programot irni, mint C-t

Hadd tippeljek: ugye nem szoktad sem az ISO C, sem az ISO C++ szabványokat nézegetni? (Nem azt kérdezem, hogy dolgozol-e C++-ban!)

A C++-t a szabályain belül maradva rendesen kihasználni nagyságrendekkel nehezebb, mint ugyanezt megtenni C-vel. A C++-ban rengeteg plusz képesség van, ezeknek a kölcsönhatásai még többen; a nyelv robbanásszerűen bonyolultabb a C-nél. Továbbá nincs hivatalos műszaki szabvány, amely a C++-t ötvözné azzal, amit hétköznapian "UNIX rendszerprogramozás" néven szoktak emlegetni.

Kombináld össze a többszálúságot, a szignálkezelést, a többszörös öröklődést, a kivételkezelést, a template-eket, az operator overloading-ot, a longjmp()-t, és máris kész a katasztrófa. C++-ban már csak azon is sokkal többet kell gondolkoznod, hogy mit ne használj.

Tökéletesen tükrözi egy nyelv bonyolultságát a hozzá kidolgozott design pattern-ek sokasága. Ott kell sok séma, ahol az út tele van gödörrel.

Kiegészítés: a legnagyobb nehézség a C++-szal pont az, amivel a legtöbbet nyújta -- az automatikus kódfuttatás. Az operator overloading, a konstruktorok, destruktorok, a kivételek propagálása mind olyan eszközök, amikor a runtime ill. a fordító a programozó helyett mozgatja a vezérlést a programban. Ez bizonyos szintig kényelmes, utána viszont a kölcsönhatásaik egyre nehezebben átláthatók. Az egyik leggyakrabban felmerülő kérdés a neten a statikus objektumok konstruktorainak futási sorrendje.

Volt a Guru of the Week-en egy feladat, amelyben egy (kontextus nélküli) háromsoros metódusról kellett megmondani, hány helyen generálhat kivételt. Nos, 23 volt a helyes válasz, ha jól emlékszem.

Egyébként amit a C++11-ről olvastam eddig, az katasztrófa. Pl. a zárványok bevezetése egy C eredetű nyelvbe arcon köpi mindazt, ami nekem szent a C-ben.

Nagyrészt egyetértek, viszont egy dolog kiverte a szemem:

"Tökéletesen tükrözi egy nyelv bonyolultságát a hozzá kidolgozott design pattern-ek sokasága. Ott kell sok séma, ahol az út tele van gödörrel."

Miért is jöttek létre a tervezési minták, kollega? :)

Miért is jöttek létre a tervezési minták, kollega? :)

Azért, mert a gyakran előforduló problémákra, amelyeket (valamilyen értelemben) "érdemes" minta alapján megoldani, a nyelv nem nyújt közvetlen támogatást.

http://en.wikipedia.org/wiki/Software_design_pattern#Criticism

Nekem az az egyéni tapasztalatom (amiben kicsit elfogultságom is van), hogy "kicsi" feladathoz, (és egyéb más is dönt, de ebbe most nem akarok belemenni, pl az esetek 99%-ában gui-hoz is sokkal kényelmesebb a cpp.....) jobb a Cpp, több benne a kényelem. Ha "nagyobb" a munka akkor inkább C. Egyszerűen sokkal átláthatóbb a program alapelve. Pl matematikára csak C-ben kódolok.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Hát ha a byte-szintű memóriaműveleteket éppen nem is, de azért a pointer-aritmetikát illik tudni, különben mehet a levesbe az egész.
Persze ez is csak attól függ, mire akarja majd használni. Hobbiszinten nyugodtan csináljon amit akar, ha az egész program egy gigászi memleak, az se számít, viszont ha megélhetési célzattal vágnál bele, ahhoz nagyon kevés a gyorstalpaló, nem véletlenül sok-sok kredites tantárgyak ezek.
Esetleg használhat valami keretrendszert, ami a rázós részeket kezeli helyette, de akkor meg megintcsak adódhatnak más nyelvek, amivel talán egyszerűbb lenne.
Szerintem ha valaki még egyáltalán nem programozott életében, ne C/C++ nyelvekkel kezdjen, mert igen hamar elmegy a kedve az egésztől.
Ha meg komolyan veszi, akkor irány valami normális tanfolyam/kurzus, ahol adnak mellé annyi architektúra-ismereti hátteret, hogy nem jön majd zavarba a memóriakezeléstől.

----------------
...egyébként az SP nem is egy énekes bénabéla, hanem a stackpointer / de utálom ezeket a déli b*zikat...

"bármilyen C kódról tudjad, hogy az byte szinten mit művel a memóriában."
Meg jo, hogy ez szabvany szerint lehetetlen, rengeteg dolog forditofuggo, egyik fordito alatt ezt csinalja a kod, a masik alatt mast.

A C++ egy nagyon jo programnyelv, viszont elegge osszetett. Nem nehez, de - miutan a viszonylag alacsony szintu C-hez kozel all - vannak nagyon alacsony reszei is, meg elegge magasak is (mondjuk az STL, OO), es vannak kozte mindenfele kevert dolgok (funktorok pl). I/O-ra is tobb szint van (read/write, fread/fwrite, printf, iostreams meg meg ki tudja mi). Szerintem ha nagyon jol meg akarod ismerni, akkor ez a legnehezebb ma hasznalt programnyelv.
Amit irtal feladatot, arra nem ez a legjobb valasztas - legalabbis szerintem. Tetszoleges P betus scriptnyelvben hamarabb osszerakhato.

--
There are free things in life i'll never understand
Spelling and counting

Ha mindenképp C++-ot szeretnél, akkor szerintem olyan forrásból tanulj, ami kapásból C++-szal kezd, és nem megtanít C-ben programozni, aztán átvált C++-ra. Abból csak a kavarodás van.

Amiből én tanultam, az a C++ Primer c. könyv (szerzői Stanley B. Lippman és Josée Lajoie). Elég vaskos, de szerintem jól felépített, és érthetően magyaráz. Referenciának is jó.

A másik könyv, amit ismerek az az Accelerated C++ (szerzői Andrew Koenig és Barbara E. Moo). Ez szerintem olyanoknak is jó, akik még nem programoztak, mert az alapoktól kezdi. Ráadásul a fejezetek sorrendje is olyan, hogy könnyűtől halad a nehezebb fele, például mutatókról (pointerek) először csak a 10. fejezetben (169. oldal) esik szó.

++
Ráadásul én anno ingyenesen is letöltöttem e-book -ként. A könyv egyébként nem olcsó. Évekkel ezelőtt volt vagy 12 ezer forint.
--
unix -- több, mint kód. filozófia.
Life is feudal

+1

Én ezeket javasolnám:

Bruce Eckel - Thinking in C++: Introduction to Standard C++, Volume One (2nd Edition)
Stephen Prata - C Primer Plus (5th Edition)

Illetve a nyilvánvaló referencia, számomra ez volt a leghasznosabb, bár nem feltétlenül könnyű olvasmány:

Bjarne Stroustrup - C++ Programming Language, The (3rd Edition)

És ha kicsit rutinosabban mozogsz a témában, akkor:

Andrei Alexandrescu - Modern C++ Design: Generic Programming and Design Patterns Applied
GoF - Design Patterns: Elements of Reusable Object-Oriented Software
Marc Gregoire - Professional C++ (Wrox Professional Guides)

Szerintem csinálj először kisebb, sandbox jellegű munkákat, akár úgy, hogy a meglevő nagyobb projektből emelsz ki kisebb részeket és azon kísérletezz. A lényeg az, hogy gyakorolj minél többet. Ha jól mennek az alapok (vezérlési szerkezetek, osztályok, virtuálisok és össze tudod foglalni a const összes használati lehetőségét (sic!)), akkor kezdj el mintákat gyakorolni.

Ha pedig már ez utóbbi is rutinosan megy, akkor már nem mondhatod, hogy abszolút kezdő vagy :)

Update: Azt azért sajnos szem előtt kell tartani, hogy kb tetszőleges programnyelvre igaz az, hogy nem a nyelv megtanulása a legnehezebb (brainfuck, whitespace kizárva :), hiszen azt egyetemisták, hobbikóderek, nagypapák, nagymamák is meg tudják tenni gyakran (szerintük) egy hónap alatt. Ami viszont valóban kihívást jelenthet, az az általad kiválasztott nyelv helyes használata, lásd: biztonságos és karbantartható kód írása, vagy éppen a nyelvhez tartozó ökoszisztéma (fuj) kiismerése, 9999 framework megtanulása, stb.

Ez viszont azt a fonák helyzetet teremti, hogy érdemes már az elején ezekre időt szánni (hiszen a beidegződött rossz szokásoktól nehezebb megszabadulni, mint eleve jó irányba menni), de az elején még nem biztos, hogy megvan minden ismereted ahhoz, hogy megérts ennyi mindent.

Szóval azt javaslom, hogy közvetlenül az után, hogy azt érzed, hogy a nyelv jól megy már, de közvetlenül az előtt, hogy dolgozni kezdenél a nyelvvel, kezdj el ismerkedni azokkal a lehetőségekkel, amik segítenek jó programozóvá válni (egy pár forrást meg is jelöltem ehhez fentebb).

- Not even the slightest bit -

Előbb a C-t tanuld meg. Azután ha még mindig akarod tanuld meg a C++-t is.

C-ben mindent meg lehet oldani. Véleményem szerint jelenleg a világ legjobb nyelve. Én a "A C programozási nyelv" című könyvből tanultam meg 20 évvel ezelőtt. Ma is ezzel a könyvvel kezdeném.

--
GPLv3-as hozzászólás.

Ami C-ben nem oldható meg, megoldható assembly-ben. Ami assemblyben nem megoldható, az nem megoldható;)
Örök nagy +1 részemről a C-nek.

Aztán éveken át próbál megszabadulni a C-s hülyeségeitől... Rossz ötlet. Láttam már C++ kódot, amiről egyértelműen megállapítható volt, hogy csak C fejlesztő írhatta.

C-ben mindent meg lehet oldani, sőt, mint írták, assemblyben is, de a legjobb egyből gépi kódot írni, nem? Kezdőként fontos, hogy a programozási hibák minél hamarabb kiderüljenek, amire a gépi kódban programozás esetén lehetőség van, C++ estén nincs. Ja, várj, fordítva. Eh...

Inkább éveken át próbálja megszokni a c++ hülyeségeit.

C++ != OOP. A fordító segít a hibák megtalálásában, míg a C fordító kevéséb, és néhány C++ nyelvi elem kifejezetten jól jöhet még osztálymentes környezetben is. Még ha csak strukt-ok vannak, már akkor is a konstruktor és destruktor egy hatalmas előny a C-vel szemben, és sorolhatnám.

Amúgy ha valaki igazán meg akar tanulni programozni, akkor egyik oldalról egy szkriptnyelvet (pl. Python) mondanék, másik részről pedig egy fordítást igénylő, szigorú nyelvet, pl. Ada. Aki ez utóbbiban megtanul programozni, a többi nyelvben sem túl valószínű, hogy gányolna, nem úgy, mint enélkül.

Ada :-)
Emlékszem, amikor tanultam (DOS-DJGPP!), milyen büszke voltam, amikor kezdőként összehoztam egy randevút... 14-15 éves lehettem. Korán kezdtem? :-)

c++ szerintem sem == OOP, ez nem is volt kérdés. De akármilyen szempontokat nézek, a c++ -nak sokkal több hülyesége van, mint a c-nek.

tagabb dolgoknak mindig tobb hulyesege van

Microsoft Word 2011-nek is tobb hulyesege van, mint Microsoft Word '97-nek, ettol meg nem feltetlen lesz az utobbi jobb es konnyebben kezelheto (vagy ahogy errefele szokas: Ferrarinak tobb hulyesege van, mint a Ladanak)

meg a trollokra is igaz ez: aki sokat ir, az nagyobb esellyel ir marhasagot :D

Például szigorúbb a fordítási idejű ellenőrzés benne. Ez aztán a nagy hülyeség...

A nyelvről beszélünk, nem a fordító képességeiről. Ezen dologra c-nél is van példa, ez nem nyelvi hülyeség

Benedek Zoltán, Levendovszky Tihamér: Szoftverfejlesztés C++ nyelven

Ez se rossz.

Az adott feladatot egyébként nem biztos, hogy C++-ban csinálnám. Inkább gyorsgány-feladatnak tűnik, az meg python-perl-php-ruby valamelyike számomra.

PHP-hez html-t is meg kell tanulni, az se gyorsabb

LOL
Nyilvan kliensoldali PHP-rol volt szo, mivel a feladat egy letoltott weboldal kodjanak az elemzese. Az megy teljesen headless modon, megy parancssorbol, stb.. nem kell hozza egyaltalan webserver.
Az mas kerdes, hogy a PHP-t szeretik ugy hasznalni, hogy a vege valamilyen HTML kimenet legyen. Es sokszor hasznaljak cgi-kent/apache modulkent, de ez egyaltalan nem elvaras, es ebben az esetben az adott feladatra nem is lenne idealis.

--
There are free things in life i'll never understand
Spelling and counting

marmint ahhoz kell a html, hogy ertelme legyen, meg azert nem olyan jellemzo azon kivuli indokbol hasznalni a php-t, barmit keres a neten a php miatt, szinte csak webfejleszteses dolgokat fog talalni (meg C/C++-ra tobb jo IDE is van, jobban arra is van kitalalva, ami a cel)

Ha jol vettem ki, o le akar tolteni egy weboldalt (fopen URL/curl izles szerint), es utana a tartalmaban keresni valamit (preg_match/DOMXpath->query). Par sor az egesz.

Amugy irtam magamnak par eve ilyen webes robothoz frameworkot PHP-ban. Gyakorlatilag egy esemenyvezerelt program, ahol az esemenyek nem egerrol es bill-rol jonnek, hanem weboldalrol (plusz van hozza idozito is, ha valamit idonkent le kell futtatni).
Tozsden reszvenyarfolyamok gyujtesere hasznalom, ETR-hez vizsga/targyjelentkezeshez, meg effelekhez. Nem tul bonyolult, es eleg jol dokumentalt, de nagyon alatalanos, es (reszben emiatt) elegge rondara sikerult az APIja. Ha rajovok, hogy hogy lehetne szepen, atirom. De egyelore ronda, ezert sem terjesztem a kodjat.
(ja, es meg veletlenul sem HTML a kimenete :), a reszvenyes cucc DB-be dolgozik, az ETR-es meg mailt kuld)

--
There are free things in life i'll never understand
Spelling and counting

subscribe

Viszont az úriember nem is azzal kezdte a témát, hogy "milyen eszköz a legmegfelelőbb a feladatra?", hanem azzal, hogy "Szeretnék megtanulni C++-ban programozni".

- Not even the slightest bit -

+1 :) Egyszer saxus nyitott errol egy topikot, hogy ilyenkor mindenki nagyon okos, mert ismer egy masik nyelvet ami szerinte jobb lenne, mennyire igaza volt ebben

-1
Egy életre elmehet a kedve, ha csupa lelkesedésből nem olyan feladatra használja a nyelvet (tanuláskor), amelyre kitalálták. Értelmeznél HTML-t C++-ban, mint kezdő feladat?

Tanulhatja, mert érdemes, de más feladattal jobban járna.

Nem gondolom azt, hogy hülyének kellene nézni az embert. Ha C++-t akar tanulni, miért ne tegye? Ha a választott eszköz tulajdonságai miatt törik bele a bicskája a feladatba - és elég értelmes - akkor nem az lesz az első gondolata, hogy "jaj, ez a csuda programozás, milyen nehéz ezt buzgálkodni, abba is hagyom sebtibe'", hanem például megnézi, hogy milyen más nyelven lehet még megoldani.

De az ő írásából nekem az szűrődött le, hogy a prioritás a következő:
1) Megtanulni a C++-t
2) Megoldani egy problémát, amit elsőre alkalmasnak érzett arra, hogy az 1-es pontot motivációval ruházza fel.

Nekem pl a PHP-tól ment el egy életre a kedvem, pont azért, mert arra akartam használni, amire kitalálták (wöbprogramozás). Ne siessük el az ítéletet!

- Not even the slightest bit -

Akkor kicsit mas a felallas. Paran azt hittuk, hogy a feladat ez a webes adatkinyero akarmi, az ehhez kinezett eszkoz meg a C++. Szamomra ugy tunt, hogy a feladathoz nem megfelelo eszkozt valasztott.
Ezzel szemben a valosag - legalabbis most ugy latom - az, hogy a feladat az, hogy megtanulja a C++-t, az eszkoz meg a webes adatkinyero ize. Az eszkoz meg mindig nem jo a feladat megoldasara, de ezek szerint nem a C++-t kell kidobni, hanem a webes adatkinyero akarmit.
Bar nem feltetlenul kell kidobni azt sem, C++-bol is elerheto a cURL (egeszen veletlenul mar ilyet is csinaltam), es a PCRE library is elerheto (szinten hasznaltam). Csak a korites mas egy kicsit. Szoval megoldhato, csak akarni kell, meg kb. 10x annyi munka, kicsit tobb doksit kell hozza elolvasni meg ilyen aprosagok. A C++ nem egy kezdo nyelv (bar nagyon szeretem), a PHP mar inkabb az.

--
There are free things in life i'll never understand
Spelling and counting

-törölve

subscribe
----------------------------------------------------------
Sebeink emlékeztetnek arra, hogy a múlt valóban megtörtént

Bjarne Stroustrup: Programming -- Principles and Practice Using C++

http://www.stroustrup.com/Programming/

sub
--
cythoon

Ha esetleg érdekel valakit, akkor pont árulom Bjarne Stroustrup, A C++ programozási nyelv (I. és II. kötet) című könyvét.

http://hup.hu/node/110705

Milyen nyelvu? Angol vagy Kiskapu?

--
There are free things in life i'll never understand
Spelling and counting

:D:DD:

angol, normalis magyar, vagy kiksapu? :D:D

Se angol, se magyar :) (de már megvették)

Subscribe

sub

Elég csak a net. Kezdj el bármit kicsiben. Keress sokat a neten. Ne add fel, ha szar kezdd újra. Könyvet végigolvasni baromság.
Az a lényeg, hogy tényleg objektum orientált megoldásra van-e szükséged, ha igen, akkor ess neki class-ok készítésének. Cikkeket, példákat keress a neten az adott problémára.
Bjarne Stroustrup könyve nagyon jó, de főleg rendezésekben, stringműveletekben gondolkozik ami kezdetben unalmas, ráadásul állandó benne az az unszolás, hogy jó lenne már továbblépni a C-n.

Nem tapasztaltam, hogy rossz lenne c++-al kezdeni. Bár csak hobbiból programozgatok, nekem abszolut bejött. Jó, hogy erősen típusos nyelv, nem keverhetsz össze minden marhaságot.

Egyetlen hátránya, hogy nincs gyorsan látványos eredmény, viszont gyorsan fut. :D

Na, így fog az igazi spagetti kód készülni. A szoftverfejlesztésnek van egy-két elméleti dolga, amit azért nem árt rendesen megérteni, megtanulni.

----------------
Lvl86 Troll

+1
az hogy mindenfele neten talalt felhulladek kod alapjan kezdjen valaki programozast tanulni, nagyon gany
bizony kell a normalis alapozas...

Ha igénye van rá akkor jól fogja szervezni-rendezni, ha nincs akkor soha.

nem csak 'igeny' dolga
ha nincs ralatasa a 'nagy egeszre', akkor nem fog tudni rendesen alapozni, es valoszinuleg csak sokkal kesobb jon majd ra, hogy mar az elejen nagyon elszurta, es lehet kidobni
persze ez mindenkivel megesik, de erosen le lehet csokkenteni ennek az eselyet/gyakorisagat, ha mar az elejen tisztaban van azzal, mire kell figyelni, milyen elveket kell figyelembe venni hogy kesobb ne kelljen a fejet a falba verni es kidobni a kodot, vagy ami meg annal is sokkal rosszabb, ganyolassal takolni a hatalmas szemetkupacot

Erre a tagra hallgass, gimisként így kell elkezdeni foglalkozni a programozással.

Csak aztán egyszer tegye rendbe is az alapokat, főleg, ha C++-al akar kezdeni.

(Igen, én is hasonlóan kezdtem, annyi különbséggel, hogy könyvekből, mert internet, mint olyan nemigazán volt felénk normális sokáig, de egy idő után kellett az, hogy az alapokat rendbe tegyem magamban.)

----------------
Lvl86 Troll

:)

Nekem ez a könyv sok mindent helyretett, igaz előtte C-ztem:

http://www.libri.hu/konyv/szoftverfejlesztes-c-nyelven.html

Ld. fentebb :-)
Akkor igazán jó, ha hozzá jársz előadásra is.