Egy programozó bármilyen programot megtud csinálni fejből a számítógépre ha megtanulja a C++ nyelvet?
A programozás tanárom azt szokta mondani:
"Meg lehet-e csinálni... NEM! Szóval, hogy lehet megcsinálni a következő programot Delphi nyelven? Mert ugye BÁRMIT le lehet programozni! :)"
Szóval nyelvtől függetlenül pont olyan programot tudok megcsinálni, amilyen tudással rendelkezem az adott nyelv területén. Ha szinte mindent tudok, akkor bizony nagyon sok féle programot tudok kreálni.
Még csak tanulom a programozást, de egy konzolos "sima, 100FT-os" számológép menne, például. De írtam már feladathoz "traffipax bírság kiszabó" programot is. Fejből. Ezek egyszerűek, viszont egy bonyolult dologhoz kellene már a segítség mert ki a franc tartja észben az összes apró/cseprő parancsot?
G.
"Megtanulja a C++ nyelvet".
A nyelvet megtanulni annyi, mint a szintaktikai szabályokat, meg mondjuk a standard lib-et nagyjából elsajátítani. Ezzel még - önmagában - szinte semmire sem mész.
Párhuzam: angol nyelv. Tegyük fel, hogy ismered az összes nyelvtani szabályt, meg kb. egy alapvető szókincset.(ez c++-ban annyit tesz, hogy ismered a nyelv szabályait, és kb. a standard library-t.)
Ezzel a tudással még önmagában nem tudsz mélyreható beszélgetéseket folytatni pl. a tőzsdéről, mert nem ismered azoknak a speciális szavaknak a halmazát, ami tulajdonképpen a tőzsdei szakzsargon, valamint nem ismered a tőzsde működését.
Ezt újfent visszavetítve a programozásra: nem fogsz tudni például 3D-s játékot írni, mert nem ismered a kapcsolódó library-ket(OpenGL, DirectX), illetve az elméleti tudásod is hiányzik.
Szóval egy programozó az általában megtanulja kívül-belül egy - vagy több - nyelv szintaktikáját, meg minden apró trükkjét, + ezt a munkával töltött évek során kiegészíti valamilyen szakterületre jellemző specifikus tudással.
Pl. én BI területen dolgozok, ehhez van meg a speciális tudásom. Tehát hiába ismerek jól több programozási nyelvet is, nem sok gőzöm nem lenne arról, hogyan kell megcsinálni egy 3D engine-t, vagy pl. nem tudnék megírni egy zeneszerkesztő programot, mert nincs birtokomban a domain-specifikus tudás.
Vegyünk egy kis hasonlatot. Ha ismered a fánglit, a lapátot, a betonkeverőt, tudod ezeket használni, valamit ismered pl. a malter és a beton összetételét, akkor ez bizonyára elég egy kerítés elkészítéséhez. De ha csak ennyit tudsz, akkor nem fogod tudni felépíteni a Notre-Dame-ot. Sőt lehet egy kisebb híd felépítése is problémás lehet, de ennek elkészítése során tapasztalatokat szerezhetsz a statika terén, amelyet a következő, nagyobb munkádnál fel tudsz használni.
Az, hogy ismered a programozási nyelv elemeit, függvényeit, az egy dolog. Egy program elkészítéséhez az is kell, hogy a nagyobb feladatot hogyan tudod úgy részfeladatokra bontani, hogy e bontás végeredménye egy-egy utasítás, kifejezés vezérlési szerkezet legyen. Ehhez bizony tapasztalat kell. Meg persze egy programozó nem fog tudni egy olyan programot elkészíteni, amely problémának racionális megközelítését nem ismeri. Pl. aki nem tud sakkozni, az nem fog tudni sakkozóprogramot írni.
Pl. mesterséges intelligenciát sem azért nem írtak még, mert a gépek nem elég gyorsak. Sokkal nagyobb probléma, hogy nem ismerjük a gondolkodás tényleges folyamatát. Hiába veri meg egy szoftver a legjobb sakkozót, attól még nem ugyanúgy gondolkodik. Jóval butább, csak „több ideje” van gondolkodni, végigpróbálni minden lehetőséget.
* * *
Gyakorlatilag aki ismeri a C++ nyelvet, az akár elegendő programnyelv ismeret lehet ahhoz, hogy egészen nagy, összetett programokat készítsen, ha kellő gyakorlottságot, tapasztalatot ér el. Viszont nagyon sokszor vannak már más programnyelvi megoldások, amelyeket érdemes megtanulni és felhasználni. Pl. C++ -ban is lehet nagy adatmennyiséggel dolgozni, le is lehet programozni minden szükséges adat előállítást, sőt akár ez lehet, hogy a leghatékonyabb, ami létezik, mégis könnyebb és gyorsabb mondjuk egy adatbázis-kezelőt használni. Ehhez meg meg kell tanulni az SQL-t. Megint csak lehet saját megjelenítő motort is írni, de egyszerűbb egy HTML komponenst használni, amihez viszont majd kell a HTML ismerete.
#2 Ez nem egészen így van. Nem lehet minden nyelven mindent leprogramozni. Még Turing-teljes nyelveken is vannak akadályok, például Javában lehetetlen realtime programokat írni a nemdeterminisztikus gc miatt.
Mégegyszer: C/C++ világban kevés parancs van. Függvények vannak.
Kérdező: bármilyen programot nem. De szinte bármilyet igen, ha elég okos.
És egy sokkal triviálisabb példa, amit lehetetlen bármilyen nyelven is leprogramozni: véletlenszám-generálás :D
(Tudom, léteznek rá célhardverek, de szoftveresen gondoltam)
A nyelvet nemcsak meg kell tanulni, hanem be is kell gyakorolni. Már egy viszonylag egyszerű grafikus felületű alkalmazás is nagy ugrás a tankönyvhöz képest.
A C++ tud hozzá nem tartozóü memóriaterületet olvasni, és ami baj, írni is. Az így kapott véletlen nem lesz egyenletes eloszlású, különösen logikai változók esetén: 255/256 valószínűséggel TRUE, vagy FALSE, nem is tudom, hogy melyik. Ha szám kell, akkor az viszonylag egyenletes eloszlású lesz.
Ennyi erővel a rand()-ot is nevezheznétek véletlenszámnak.
A számítógép, és MINDEN azon futó program determinisztikusan működik, szóval teljesen mindegy, hogy mit varázsoltok, az nem lesz igazi véletlenszám.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!