Milyen programnyelvvel kezdjem?

9 (és fél) programozási nyelv, amit érdemes megtanulni

2016. október 28. - Indie Crawford
Bill és Ted KIVÁLÓ kalandja

Az ezoterikus programnyelveken már túl vagyunk, ezúttal pedig egy valamivel praktikusabb válogatással állok elétek. Magyar és nemzetközi programozó fórumokon egyaránt visszatérő kérdés, hogy melyik programozási nyelvvel érdemes a szoftverfejlesztés rögös útjára lépni. Szeretnék bemutatni néhányat a legnépszerűbb, legelterjedtebb programnyelvek közül, kiemelt figyelmet fordítva olyan szempontoknak, melyek különösen vonzóvá tehetnek egy adott nyelvet a kezdők számára. Próbálom meglelni a gyakorlati alkalmazhatóság és az eredményes tanulás optimumát a programkód előállításának tudományterületén művészeti ágán.

Python

általános scriptelés tudomány webfejlesztés
Python programozási nyelv

A Python a magas szintű programnyelvek svájci bicskája. Letisztultsága, eleganciája és széles eszközkészlete különösen alkalmassá teszik nem csak a tanulásra, de különböző professzionális programozási feladatok megoldására is. A Python-filozófia fontos eleme, hogy adott problémára egyetlen lehetséges megoldást kínáljon. A használandó nyelvi eszközök hosszas és kifinomult vizsgálódás eredményeit tükrözik a Python fejlesztőinek részéről, így a nyelv használatával hatékony és elegáns koncepciók elsajátítására vagyunk kényszerítve, és ezt a tudást természetesen a Python világán túl is kamatoztathatjuk. A nyelv webes keretrendszeréről is ismert, de nagy népszerűségnek örvend a tudományos alkalmazási területeken is, mint amilyen az adatelemzés, a robotika vagy a mesterséges intelligencia kutatás. Interpretált nyelvről lévén szó, a maximális teljesítményt igénylő feladatokhoz, amilyen az operációs rendszerek magjának, eszköz-meghajtóknak a programozása, vagy a valós idejű 3D grafika nem ez az elsődleges választás.

Népszerűség: 4/5
Tanulópénz: 5/5
Monthy Python
Ja! És a Monthy Pythonról kapta a nevét...

Ruby

általános scriptelés webfejlesztés
Ruby programozási nyelv

A Ruby a Python mostohatestvére. Sokszor egy lapon szokták említeni őket, holott két különálló nyelvről beszélünk, de mégis sok tekintetben hasonlítanak. Hasonlóan új generációs nyelvekről van szó, melyek alkotói elég markáns elképzelésekkel rendelkeztek róla, milyen az ideális programnyelv. Markáns, de eltérő vélemények ezek. Míg a Python egy, és csakis egy ideális utat javasol egy adott probléma megoldására, a Ruby épp ellenkezőleg, maximális szabadságot igyekszik nyújtani a programozónak. A Ruby tehát a szoftvert alkotó embert állítja központba, az azt futtató gépel szemben. Ez a fajta szabadság a tanulást elég izgalmassá teszi. Mivel a különböző programozási technikák széles skáláját felvonultató nyelvről beszélünk, sokféle koncepció elsajátítására lehetőséget ad. A metaprogramozás, azaz a saját kód futás idejű módosítása például egy az érdekes lehetőségek közül. A Ruby egy script nyelv, mely rendszer-üzemeltetésre is alkalmas, de leglényegesebb felhasználási területe mégis csak a web. A Ruby on Rails nevű webes keretrendszer híresen gyors fejlesztést tesz lehetővé, így startupok és kezdők számára egyaránt vonzó lehet.

Népszerűség: 3/5
Tanulópénz: 4/5

HTML+CSS

webfejlesztés kliens-oldal felépítés megjelenítés
HTML5

Ez a bejegyzés több szempontból is kakukktojást jelent. Egyrészt rögtön két nyelvről is szó van, másrészt úgynevezett domain-specifikus nyelvekről beszélünk, melyek az általános problémákkal szemben, egy adott feladat ellátására hivatottak. A klasszikus nézet szerint nem is alkalmasak bármilyen számítási feladat megoldására, de egyre inkább úgy tűnik, hogy manapság újra kell gondolni ezt a dogmát, mivel még ha nem is lenne sok gyakorlati haszna pusztán HTML és CSS segítségével kivitelezni egy játékot, vagy egy rendező algoritmus, mára még ezekre is alkalmasak lehetnek, másképpen szólva Turing-teljesek. Persze pofás online tartalmak és applikációkhoz készítéséhez nélkülözhetetlen az ismeretük, de a működési logikát ilyen esetben jellemzően a JavaScript adja.

A HTML egy leíró nyelv (a betűszóban szereplő ML pontosan ezt jelenti angolul), tehát nem utasításokat adunk ki benne, amik aztán végrehajtódnak, hanem csupán felcímkézünk általa adott tartalmakat, úgy, hogy ezeket a címkéket egy másik szoftver által értelmezve, valamiféle struktúrában tudja majd kiértékelni az így leírt információt. Ez a gyakorlatban úgy néz ki, hogy különböző html tagekkel írjuk körbe és struktúrájuk a weboldalunk szövegeit, kép fájljait és minden egyéb tartalmi elemét. Címeket, bekezdéseket, listákat, a böngésző által megjeleníthető képeket és videókat hozunk létre és ágyazunk egymásba. Ez a felépítmény képezi minden weboldal alapját.

A CSS segítségével pedig olyan szabályokat definiálhatunk és rendelhetünk hozzá ezekhez a fentebb említett HTML tagek által leírt tartalmakhoz, melyekkel széles skálán változtathatjuk azok megjelenését, sőt bizonyos keretek között azok viselkedését is. A JavaScriptet is hozzáadva a képlethez a lehetőségek végtelenné válnak, de pusztán a HTML és a CSS elsajátításával is sokoldalú, esztétikus, egyedi, a kereső motorok által hozzáférhető, vagy egyenesen azokra optimalizált weboldalakat hozhatunk létre, illetve biztos,  ezek nélkül erre nem sok esélyünk van.

Mivel komolyabb programozási koncepciókkal, algoritmusokkal való bajlódás helyett inkább konkrét szabályszerűségekkel, jól vizualizálható struktúrával kell törődnünk, miközben gyönyörű weboldalakat készíthetünk el, a tanulás igen szórakoztató. Bár a technológiák gyors fejlődése miatt, folyamatos utánajárást és gyakorlást igényel a dolog, legalább közepes szinten mindenképp ismerni kell a HTML és a CSS működését hogyha az ember webprogramozásra adja a fejét. Magas szintű elsajátításával pedig nem lesz nehéz munkát találni magunknak a grafikusok és a fejlesztők mellett.

Népszerűség: 4/5
Tanulópénz: 5/5

JavaScript

webfejlesztés kliens-oldal szerver-oldal játékfejlesztés
JavaScript programozási nyelv

Bevallom, kissé elfogult vagyok JavaScript ügyben, hiszen néhány éve már ez az a választott nyelv amivel a legintimebb viszonyt ápolom, de úgy gondolom nem tévedek nagyot ha azt mondom nem nagyon lehet melléfogni vele. Az általa kínált lehetőségek sokszínűsége, valamint mára szerencsére kopóban lévő rossz híre elsőre talán ijesztő lehet, de valójában egy több mint kapabilis és mára már elég stabil szabvánnyal bíró nyelvről beszélünk. Elsődleges potenciálja természetesen a web-programozásban rejlik, de mivel a web mára önálló platformmá fejlődött, illetve a Node.js által a JavaScript már a szerver oldalon is jelen van, ezért a weboldalaktól, az óriási elosztott szolgáltatásokon át egészen az online játékokig ez a kitétel nem jelent éppen korlátozást, sőt a böngészők kínálta platform-függetlenség nagyban meg is könnyítheti a szoftverfejlesztést. Tanulás szempontjából is előnyös, hogy a JavaScriptet futtató környezet, a böngésző, minden személyi számítógépen jelen van, valamint csábító lehet a webfejlesztés kínálta gyors sikerek elérése is, legyen szó egy ismerősünk weboldalának elkészítéséről, vagy arról, hogy az általunk fejlesztett böngészős játékot egyből elérhetővé tehetjük a barátaink számára. Az interneten fellelhető töménytelen forrás sem utolsó szempont, a statisztikák szerint a StackOverflow fejlesztői fórumon a legtöbb kérdés és válasz JavaScript kategóriában érkezik. Turing-komplett nyelvről lévén szó, bármilyen általános problémára is alkalmazhatjuk, de ha a webre való fejlesztés valamilyen okból nem esik a projektunk fókuszába akkor jellemzően más eszközhöz nyúlunk.

Népszerűség: 5/5
Tanulópénz: 4/5
Megtanulta...
Tudok JavaScriptül

PHP

webfejlesztés szerver-oldal scriptelés
PHP programozási nyelv

A PHP tulajdonképpen a modern web gerincét jelenti, ami a szerver oldali programozást illeti. Igaz, már akadnak riválisok is, de még bőven megkerülhetetlen tényező a PHP azoknak, akik a webfejlesztés felé kacsintgatnak. Elsajátítása véleményem szerint tanulságos és a szórakoztató. Tanulságos, mert általa megismerkedhetünk a web működésével, a szerver-kliens infrastruktúra részleteivel, és szórakoztató mert valódi online szolgáltatásokat hozhatunk vele létre. Általa megismerkedhetünk több népszerű web-framework, vagy tartalom-kezelő rendszer belső működésével, a végsőkig testre szabhatjuk Drupal, vagy WordPress oldalainkat, és ezáltal a robusztusabb szoftverekre jellemző fontos programozási koncepciókat is magunkévá tehetjük egyben.

Népszerűség: 4/5
Tanulópénz: 4/5

Java

általános alkalmazásfejlesztés üzlet mobil webfejlesztés
Java programozási nyelv

A Java évek, sőt talán már évtizedek óta vezeti a legtöbbet használt programnyelvek listáját. Ennek elsődleges oka egy virtuális gépnek nevezett technológia ami lehetővé teszi, hogy a Java kód módosítás nélkül elfusson bármilyen platformon, függetlenül az architektúrától és az operációs rendszertől, amennyiben ez a virtuális gép nevű szoftver rendelkezésre áll az adott computeren. Sőt, Java appletek futtatására még a böngészők is képesek! Továbbá egy erősen objektum-orientált nyelvről beszélünk, ami jól illeszkedik a robusztus, nagy rendszerek fejlesztésének koncepciójába. Ezen túl pedig könyvtárak és keretrendszerek armadája áll rendelkezésre minden feladathoz. Ezekből kifolyólag a céges szférában, belső rendszerek fejlesztése vagy platform-független megoldások terén masszív kereslet mutatkozik Java programozók felé, de az Androidos mobilok elsődleges nyelve is ez. Mivel a Java ökoszisztéma rendkívül kiterjedt, ezért elsajátítása némi időt igényel. Interpretált nyelvről lévén szó, ami nem fordul le közvetlenül gépi kódra a program futása előtt, a maximális teljesítményt igénylő feladatokra akadnak nála alkalmasabbak is.

Népszerűség: 5/5
Tanulópénz: 3/5

C

alkalmazásfejlesztés rendszer alacsony

A C nyelv kétségtelenül a programozói alapműveltség része. Még ha nem is tervezi aktívan használni az ember, akkor is érdemes megismerkedni vele. Minden idők legelterjedtebb nyelvéről beszélünk ugyanis, ami hatással volt szinte az összes itt felsoroltra és számtalan továbbira is. A C arany középútként fekszik az alacsony szintű gépi kódú, vagy assembly programázás, illetve a magasabb szintű nyelvek között. Persze ez az arany inkább terhet jelent, mint hasznot ha nem a megfelelő feladathoz hívjuk segítségül a C nyújtotta lehetőségeket, de kompaktsága, hardver-közelisége, minden másnál alkalmasabbá teszi olyan feladatok ellátására, mint az operációs rendszerek kernelének és eszköz-meghajtóknak a programozása, vagy a különböző kütyük, média-lejátszók, okos-eszközök és egyéb integrált rendszerek fejlesztése. Minden egyéb programozási feladat is megközelíthető vele, és bár magas szintű elsajátítása igényel némi ráfordítást, a számítógépek működésének, így a programozás bizonyos alapvetéseink megismerésére nehéz jobb jelöltet talán nála.

Népszerűség: 3/5
Tanulópénz: 4/5
Borland C
Azok a boldog C napok

C++

alkalmazásfejlesztés rendszer játékfejlesztés

A C++ a C egy továbbfejlesztett változata. A különbözőségük legmarkánsabban talán a C++ azon tulajdonságában ölt testet, hogy támogatja az objektum-orientált programozási paradigmát. A modern szoftverfejlesztésben megkerülhetetlen ennek elsajátítása, mivel komplex rendszerek nehezen képzelhetőek el nélküle. A C++ a C-ből örökölt viszonylagos hardver-közeliség és az objektum orientáltság nyújtotta absztrakció egyesítésével egy rendkívül hasznos programnyelv képét mutatja. Az igazán hardver és rendszer közeli feladatokhoz talán már túlzottan is robusztus ugyan, azonban nélkülözhetetlen mindenhez ami közvetlenül ezek fölött helyezkedik el a számítógépes rendszerek rétegzett hierarchiájában. A különböző operációs rendszerekre írt, illetve teljesítmény-centrikus alkalmazások fejlesztésére használják, mint amilyen egy webböngésző, egy kép- vagy szövegszerkesztő, vagy egy torrent-kliens, és természetesen a nagy teljesítmény-igényű, közvetlenül az asztalról indítható számítógépes játékok motorja is jellemzően C++-ban készül.

Népszerűség: 3/5
Tanulópénz: 3/5
C++ programozni tanulni?
C++-al kezdtél? Veszélyesen élsz!

C#

általános alkalmazásfejlesztés üzlet webfejlesztés mobil játékfejlesztés

A C-evolúció egy újabb állomásáról lévén szó, a C, de főleg a C++ szekcióban említett adottságok közül sok minden a C#-ra is áll. Kezdjük talán a legfontosabb dologgal e nyelv kapcsán: Szí-sárpnak kell ejteni helyesen. Ha ez megvan akkor a nehezén már túl is vagyunk, no persze ez azért így túlzás, a C# sok olyan hasznos dologgal egészíti ki (vagy redukálja helyenként) a C++-t, melyek a modern szoftverfejlesztés számára vonzóak lehetnek. A technikai részleteken túl, az alkalmazási terület fontos tényező lehet a C# elsajátításában. A Windows ökoszisztéma jelenleg legfontosabb nyelvéről beszélünk, tehát Windowsos platformokra, kliensre, szerverre és mobilra egyaránt természetes választás. Megjegyzendő, hogy az elterjedt és profi játékfejlesztői környezet az Unity is a a C#-ot preferálja, mint az általa készített játékok elsődleges script nyelvét.

Népszerűség: 4/5
Tanulópénz: 3/5

A lista természetesen szubjektív, és az értékeléseket is rugalmasan kéretik kezelni. A népszerűséggel a nyelv elterjedtségét, a tanulópénzzel pedig a megtanuláshoz szükséges befektetés és azzal járó megtérülés arányát próbáltam érzékeltetni. Az biztos, hogy bármelyik nyelvvel is kezdje az ember a tanulást, az azt követő nyelvek elsajátítása már sokkal egyszerűbb lesz, mivel első sorban a programozói gondolkodást sajátítjuk el és mélyítjük a különböző nyelvek megismerésével, és ehhez képest egy bizonyos nyelv sajátságai és az abban való jártasság másodlagosnak tekinthető. Bármilyen nyelvet is válasszunk tehát, az első nagy ugráson hamar túl leszünk, és amint rákaptunk a dolog ízére, a látókörünk és a lehetőségeink tágításának igénye hamar új nyelvek felé sodor majd minket.

Bill és Ted ámulnak

A sorozat következő részében kevésbé elterjedt, ám ígéretes nyelveket tervezek górcső alá venni, de addig is boldog kódolást mindenkinek!

A bejegyzés trackback címe:

http://indiecrawford.blog.hu/api/trackback/id/tr8411836171

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben.

Voznyák Pista2 2016.10.29. 11:50:17

Hmm, én még Assembly-ben írtam anno, ami kiválóan alkalmas arra, hogy az ember úgymond együtt éljen a hardver-rel.
Bár gyakorlati jelentősége már csekély, arra még mindig alkalmas szerintem, hogy segítsen megérteni a rendszer működését.

na__most__akkor 2016.10.29. 11:58:34

Egy maradi vén százéves programozó vagyok. Lehet ekézni...

"PASCAL".
Az ALGOL-ból fejlődött, ami majdnem angol. Igen, manapság nem használják, pedig a legkönnyebb megérteni.

Másodiknak a "C"... és akkor látod, az milyen primitív. Úgy csinálták, hogy a fordító (a GÉP) dolga egyszerű legyen.
Mi van? Kinek legyen egyszerű? A gépnek, vagy az embernek? Ki a fontosabb?

Harmadiknak a "C++".
Duplapluszjó - ha ismered Orwell művét. Ha nem, kapsz egy programnyelvet, ami mögött sose tudod, hogy fog működni. Akármit leírhatsz, aztán az eredmény akármi. Szemét be, szemét ki.

Negyedszer: az összes többi. Python, Java, akármi. Fos.
Valójában mind BASIC, a primitív emberek nyelve - ráadásul mind interpreter. Egy segédprogram olvassa a szöveges kódot, plédául egy ciklus működéséhez újra meg újra, akár ötezerszer.

Programozói pályafutásom során egy tucat nyelvet használtam. Mert OTT, AKKOR, az volt a szabvány.
Most, boldog nyugdíjasként, a PASCALt használom, mindenféle hobby célra.
Például, hozzászinkronizálni egy magyar filmfeliratot az angol eredetihez.

Van egy PYTHON verziótok ehhez a feladathoz?
...

Haibane 2016.10.29. 12:22:55

Swift is elég jó nyelv, könnyű megtanulni, de érdemben jelenleg csak macen lehet vele dolgozni.

midnight coder 2016.10.29. 12:41:53

@na__most__akkor: Na most elárulom, hogy az első Pascal implementációk eredetileg interpreterek voltak. Az efféle köztes kódot akkoriban még p-kódnak hívták, és bizony a p itt Pascal-t jelentett. Anno én is ilyesmin tanultam Pascal-ban programozni, még a jó öreg Sinclair ZX-Spectrumon, a HiSoft Pascal fordítóján, ami egy elég jól sikerült kis darab volt. Aztán a Borland a Turbo sorozattal csinált már gépi kódra fordító Pascal fordítót, bár őszintén szólva nekem a Borland C által generált gépi kód anno jobban tetszett.
Aztán jött a Delphi, ami úgy a 7-esig egész jó volt. Viszont a 8-as már egy nagy tákolmány lett: megkapta a JBuilder IDE-jét, átrakva az egészet a .NET tetejére, a VCL-t rágányolva a tetejére .NET-esre, de telikúrva win32 hívásokkal. Na ott hagytam abba a Borland vonalat és vele a Pascalt is. Amúgy is mindig is jobban szerettem a C-s szintaktikát.

Ami a Javát és a .NET-et illeti, ők általában just-in-time compilerekkel vannak megvalósítva. Azaz a fordító lefordítja neked bytekódra, majd végrehajtáskor a JIT lefordítja gépi kódra. A végeredmény nem lesz sokkal lassabb mint a natív gépi kód - hogy mennyire, az tisztán csak attól függ, mennyire jól van a JIT megírva.
Amúgy java és .NET esetén is van már opció a natív gépi kódra fordításra is, ez esetben a dolog pont annyira lesz natív mint a Delphi.

A python, javascript, PHP egy másik világ. Igen, ők interpreterek, ráadásul dinamikus típuskezeléssel megverve - bár a PHP azért már ebből kezd kinőni, legalábbis a 7-es óta.

Ezek eredetileg scriptnyelvek, eleve nem az a céljuk mint egy normál programnyelvnek. Inkább úgy kell rájuk gondolni, mint egy felturbózott batch fájlra. Ezeknek is megvan a helye a világban, bár nem feltétlenül az, amire manapság használják őket. Van amikor elvárás, hogy az end-user oldalán is piszkálhasd a kódot újrafordítás nélkül, és akkor bizony nagy áldás, ha nem kell powershellel vagy pláne batch fájllal szívni, hanem van python.

lobaszopiatej 2016.10.29. 14:13:52

Azért nem árt valami shell script-tel is kezdeni, hogy meglegyen az első siker: bash, powershell ami éppen kéznél van, ezek eleve produktívvá tesznek. Meg azért egy kicsit git-elni sem árt, hogy pl elég legyen már meglévő kódokat egybegyúrni, azokat csak kicsit megmódosítgatni, nem 0-ról újra megírni mert az túl nagy falat.
A C/C++ pedig úgy jó, ha csak a lényeget írod meg bennük, a többit meg valami magasabb nyelven folytatni ami nem időkritikus.

elemes 2016.10.29. 14:39:48

A C++ programozók soxor átesnek a ló túloldalára és tobzódnak a nyelv lehetőségeiben, a funkció már háttérbe szorul. C programozóval ilyesmi nem fordul elő :-)

elemes 2016.10.29. 14:41:26

@lobaszopiatej:

Ezt mindig boldogsággal tölt el, amikor a processzorok tervezői vért izzadnak, hogy nyerjenek egy-két nanoszekundumot, aztán jön a szoftveres és megírja a programot Java-ban, hiszen gyors ez a gép, meg nyolcmagos.

Ylim 2016.10.29. 14:53:43

@europass8: Az SQL mióta programnyelv?

Ezzel a cikkel is az a baj, hogy keeri a programozást a kódolással.
A kezdő ne nyelvvel kezdjen! Tanulja meg a programtervezést, az algoritmizálást. És ha ezzel megvan, akkor megtanulhatja pár, neki szimpatikusnak tűnő nyelv szintaxisát és jól meg is fog lepődni, hogy ugyanazt a programot nem is bonyolult különböző nyelveken lekódolni, ha tényleg tud programozni.
Sajnos manapság már ott tartnuk, hogy a "programozók" 99%-a csak kódolni tud, és persze így is össze lehet tákolni egy működő programot, scriptet, webalkalmazást, de az egy behemót, erőforrásigényes, bugos szar lesz.

Bambano 2016.10.29. 15:13:50

a php a legjobb nyelv :) úgy igazán tisztességesen orbitálisat gányolni kizárólag php-ben lehet :)

a pythonnal nekem az a bajom, hogy egy csomó olyan feladatra erőltetik (init szkriptek, stb), amire felesleges. a másik bajom, hogy a friss generációs programozók el sem tudják képzelni, hogy oop nélkül is lehet programozni. egyszerű telepítő meg futtató szkripteket írni oop-ben pythonban? miféle fertőzés ez?

Haibane 2016.10.29. 15:22:56

@Bambano: "egyszerű telepítő meg futtató szkripteket írni oop-ben pythonban? "

ööö egyszerű telepítő meg futtató szkripteket írni _pythonban_?

Indie Crawford · http://indiecrawford.blog.hu 2016.10.29. 15:24:05

@europass8: Átfutott a fejemen, de végül elvetettem, lévén domén-specifikus nyelvről van szó, és kevésbé ítéltem hasznosnak a tanuláshoz, mint a szintén kakukktojás HTML+CSS-t. Később talán írok róla és másokról is.

@Voznyák Pista2: Igen, a C félig az Assemlby helyett is került be, kifejthettem volna még a kettő viszonyát és együttélését. A számítógép architektúra megértésére kétségtelenül remek választás, és hardver közeli programozásnál koránt sem elhanyagolható. A C-be pedig remekül lehet Assembly kódot ágyazni ugye.

@na__most__akkor: Ez szerintem maradiságnál szélsőségesebb hozzáállás, ne haragudj, de szerintem elég szűk látókörű hozzáállást takar ez a komment, erre pedig a kor nem lehet mentség!

Először is a BASIC van olyan egyszerű, ha nem egyszerűbb, mint a Pascal, de pl. a Processing nevű Java alapú tanuló környezet még annál is egyszerűbb, de én itt most a tanulási és a gyakorlati szempontok metszetét próbáltam meglelni.

A C kapcsán pedig, azt mondod, az a gond, hogy a gépet állítja központba a programozó helyett, ami jogos felvetés, de talán éppen ezért is alkalmas a hardver közeli, teljesítmény centrikus, problémák megoldására, hiszen a programozó pontosan arra és úgy veheti rá a komputert amire és ahogyan szeretné, magyarán optimalizálhat a végsőkig. Ennek a gyakorlati hasznát pedig nem lehet nem észrevenni, elég csak a Linux operációs rendszert venni példának, mennyire stabilan, optimálisan, testre szabhatóan működő rendszert lehet létrehozni C-ben.

A C++-t illető kritikádat nem is igazán értem, mert nem fejted ki, mindenesetre az általa készített applikációk és játékok tömegei, a dominanciája ebben a szektorban rád cáfol.

A "Python, Java, akármi"-t is elég egy egyszerűen elintézed, épp azt vetve a szemükre, hogy egyszerűek, amely egyszerűséget egyébként éppen előnyként fogalmaztál meg néhány sorral feljebb, arról nem is beszélve, hogy a Java-t éppen a nagyfokú összetettsége és kiterjedtsége miatt szokták kritizálni, a Python pedig valóban letisztultnak mondható, de számtalan olyan koncepciót támogat (Iterátorok, Lamdba-függvények, stb...), melyek megértése és elsajátítása igényel némi időt, ellenben olyan hasznos és elegáns megoldások felé nyitják meg az utat, melyekről Pascalban csak álmodni lehet.

Ahogy előttem is írták, az interpretált nyelvek jellemzően bytecode-ra fordulnak le, amit egy virtuális gép futtat azután. A teljesítmények a virtualizációs technológia szab határt, manapság ezek a nyelvek ha el nem is érik, de erősen megközelítik a közvetlenül bináris kódra forduló nyelvekét. Én arra tippelnék, hogy mivel az általam felsorolt interpretált nyelvek rendkívül elterjedtek (a Java pl. a legtöbbet használt nyelv a világon), a Pascal pedig, éppen az újabb nyelvekre jellemző funkcionális és objektum orientált paradigmákat hiányoló volta miatt gyakorlatilag múzeumba került, ezek fejlesztésére sokkkal több erőforrás áll rendelkezésre, és elképzelhetetlen tartom, hogy gyakorlati teljesítményben megelőzik a Pascalt, hiába fordul le gépi kódra amaz. Mindenesetre ott ahol nem kell minden ezredmásodpercnyi teljesítményt kicsikarnunk a gépből (és ezek a ritkább szenáriók), a fenti nyelvek kínálta lehetőségekkel többet nyerünk, mint a közvetlen futtatással. Magyarán az alapszabály az, hogy a feladathoz érdemes a megfelelő eszközt választani. (Természetesen szöveges kód segédprogram általi ismételt beolvasásról szó sincs...)

Szóval nekem úgy tűnik, hogy a tucat nyelv között amelyekkel pályafutásod során dolgoztál nem szerepelnek azok, amikről kritikát fogalmazol meg, illetve félreérted az összehasonlítás célját is. Ez nem egy verseny, a dolog arról szól, hogy más-más eszközök más-más adottságokkal bírnak és egyes feladatokra némelyek alkalmasabbak másoknál.

Pythonban pedig természetesen tudsz fájlokat manipulálni, vélhetően optimálisabban is, mint Pascalban, az pedig szinte biztos, hogy a Python ökoszisztéma által rendelkezésedre álló könyvtárak kiterjedtebbek és főleg optimalizáltabbak, mint Pascalra. Persze a megfelelő eszköz kiválasztásában fontos szempont lehet, a már rendelkezésre álló erőforrások megléte. Ha te Pascalban otthonosan mozogsz és kiválóan megoldja a feladatot amire használod, sőt már meg is oldottad benne, akkor a váltást csak a látóköröd szélesítésének igénye indokolhatja. Megkönnyíti viszont a tanulást, az interneten rendelkezésre álló információk tömkelege, az élő közösség ami Pascal esetében inkább hiányosságot jelent.

Indie Crawford · http://indiecrawford.blog.hu 2016.10.29. 15:26:04

Ja! És nekem is Pascal volt az egyik első nyelvem, de épp a fenteik miatt, illetve mert végső soron úgyis a gondolkodás mód elsajátítása a leglényegesebb momentum a programozás megtanulásában, ma már senkinek nem ezt javasolnám.

midnight coder 2016.10.29. 15:58:46

@elemes: Akkor te csak dolgozz assemblyben. Aztán próbáld meg a fejlesztési költségeidet kifizettetni a felhasználóval. Sok sikert!

midnight coder 2016.10.29. 15:59:40

@lobaszopiatej: Ja. Egy kis jó Powershell és az illetőnek az élettől is elmegy a kedve, nem a programozástól.

elemes 2016.10.29. 16:08:12

@midnight coder:

...ööö... javasaoltam én bárhol is az assembly-t...?

Lucifer Morningstar 2016.10.29. 16:11:57

Mindenkinek az a legjobb programnyelv amit szeret, és amiben a feladatot meg tudja oldani.
Egy PIC 5 lábát és egy LCD kijelzőt rángató kazánvezérlőt nem PHP-ben kell megírni. A programnyelvet a feladat határozza meg.

Csáááá, veszekedjetek az egyéni tutin.

Androsz · http://migransozo.blog.hu 2016.10.29. 17:20:48

A C itt fölösleges, mert bár régen nagy szerepe volt, ugyanezzel az erővel az alapműveltség része lehetne az ALGOL is, meghatározó volt a nyelvek történetében.

A maradék a C++ kivételével mind interpretert vagy motort használ, ami nagyon szuper lenne, ha ez egy univerzáis hordozhatóságot jelentene, de az a hajó sajnos már elment, már verziók szerint kell írni a HTML-t is. Így viszont egyszerűen egy kolonc. @elemes: megjegyzése találó, görcsölünk a gépek gyorsaságán, de gyakorlatilag csak azért, mert a gépnek aztán hurcolnia kell egy ostoba operációs rendszert és egy kódmotort is, elhasználva erre a hülyeségre az értékes erőforrásokat. Ma szerintem kétszer ilyen gyors programokat lehetne írni néhány gyökeres, de megoldható koncepciómódosítás után. A natív kódba fordító C++ az egyetlen kivétel ebben a mezőnyben.

@Indiecrawford: Igen, a Basic alapvetően egyszerűbb, mint a Pascal, de a felsoroltak nagyobb részénél is. Sajnos a sok okostóni, persze anélkül, hogy ismerné, fennsőbbségesen megveti a Basiceket, mindenféle hülyeséget állítva róluk. És mennek a saját kövület Javájukhoz, amit azért szeretnek, mert azt tanulták meg. Én, ha egy windowsos alkalmazást akarok csinálni, még mindig Visual Basicet használok, még a 6-ost, a .Net előttit. Aligha van ennél gyorsabb eszköz. Néhány dologhoz sajnos elő kell kapnom egy-két API függvényt, hiszen változtak az idők, a környezet, a perifériák, de maga a nyelv időtálló és NAGYON fejlett.

Annak, aki a programozást a programozásért akarja megtanulni, első lépésként, a Microsoft FreeBasicet javaslom. Majdnem tökéletes eszköz a kezdőknek, és a továbblépésnek nem veszi el az esélyét.

A fő baj az, hogy ha valaki ma fejlesztőként próbálna elhelyezkedni, akkor ezeket MINDET tudnia kellene. Persze több éves alapos gyakorlattal. Mert ezek ma a menők, és az egyik helyen ezt várják, a másik helyen azt. Persze, égetően szükség van húszezer IT-s re, állítólag, de a követelményekről ilyenkor nem esik szó.

Kiss Árpád 2 2016.10.29. 17:41:55

@midnight coder: jaja:-) a munkahelyemen a hyper-v meg ms ad kornyezet miatt ra vagyok kenyszerulve a powershell hasznalatara de minden reggel fel orat sirok a wcbe h miert kell engem buntetni.

DocBulywood 2016.10.29. 17:47:24

@midnight coder:

Hacsak nem C-64-re demot kódol, ugye akkor nem nagyon kell. Raster-trükkök, multiplexelt sprite-ok, képernyő-split-ek, AFLI, MuFLI nem megy assembly nélkül.

De pl adatfeldolgozásban is jól jön, mert hiába fordít jó kódot a PL/1 fordító, azért assembly-ben - bocs, assembler-ben - megírva néhány kritikus kódrészt, ami több ezerszer meghívódik, csak gyorsabb, mint a lefordított kód.

Kurt úrfi teutonordikus vezértroll 2016.10.29. 17:53:54

@DocBulywood: Jaja. Bár a PLI-nél már meg tudod adni hogy milyen szintű assemblert készítsen és akkor olyan utasításokat használ amiről nem is tudod hogy van. Pl vannak már karakterkód készlet konvertáló utasítások. De én maradok a jó öreg assemblernél. :-))

Androsz · http://migransozo.blog.hu 2016.10.29. 18:17:14

@DocBulywood: A PL/1-et távoli ifjúkoromban tanultam. Tényleg használod, vagy csak kábítasz?

Bambano 2016.10.29. 18:20:20

@Haibane: ez kezd terjedni, hogy rendszerszkripteket írnak perlben meg pythonban. szerintem az ilyeneket szívlapáttal fejbe kell vágni, de ez az én magánvéleményem.

Kurt úrfi teutonordikus vezértroll 2016.10.29. 18:25:28

@Androsz: A PLI nagyon elterjedt még nagy rendszerekben. Itthon már ilyen kevés van. Légy erős, még FORTRAN-ban is sokat programoznak külföldön.

Jóléti Dán Kekszesdoboz 2016.10.29. 18:25:48

Nekem a c# nagyon bejön, unity alatt meg méginkább.

Indie Crawford · http://indiecrawford.blog.hu 2016.10.29. 19:45:26

@Ylim: Természetesen egyetértek veled abban, hogy egy adott nyelv ismerete, nem helyettesíti a szoftvertervezésben való jártasságot, ami alapvető skill egy programozónál. Mégis sokszor úgy vetül fel a kérdés, hogy milyen nyelvvel érdemes kezdeni, plusz a programtervezést is a sikerélmények és a gyakorlati alaklamzás miatt általában nem pszeudo-kódban tanítják-tanuljuk, szerintem helyesen. Így ennek a cikknek, most ez volt a fókusza, mármint a nyelvek.

isapur 2016.10.29. 20:45:48

Ja feladathoz nyelvet: Pár évtizede a nagymamámnak csináltam egy szakácskönyvet FORTH-ban, hátha teccik neki. De továbbra is fejből főzött, továbbra is kurvajól.

John Doe3 2016.10.29. 20:46:24

Emlékeztetném az urakat, hogy a világ szoftverkincsének több, mint fele még mindig COBOL-ban van megírva. És itt már a fóka sok és az eszkimó kevés. Úgyhogy Kurt úrfinak van alapvetően igaza, de talán még ő sem hiszi, hogy mennyire. Háttérinfó: www.wired.com/2015/01/z13-mainframe/

hallatlan 2016.10.29. 20:47:14

Azért a javascript elég kemény, ha egy kicsit magasabb színvonalon akarja művelni valaki. A php kellemes lányregény hozzá képest. De azért egyetértek, hogy érdemes megtanulni. :)

Zsíros Bödön 2016.10.29. 21:27:44

@europass8: programozni nem célnyelvvel kéne megtanulni, okoska

Tuschinger elvtárs vagyok 2016.10.29. 21:37:07

@John Doe3: Teljes mértékben igazad van! Olyannyira, hogy én is keresek profi COBOL programozót. Lehet önéletrajzokat küldeni!
Az itt felsorolt játékszereket pedig meghagyjuk a gyerekekenek.

Lucifer Morningstar 2016.10.29. 21:48:07

@Androsz:

"Én, ha egy windowsos alkalmazást akarok csinálni, még mindig Visual Basicet használok, még a 6-ost, a .Net előttit. "

Stim. A 8-as látszólag ugyanaz. Gyakorlatilag agyfaszt lehet kapni attól, hogy kihagyták az elemek indexelhetőségét és a teljes grafikát.

Androsz · http://migransozo.blog.hu 2016.10.29. 21:51:36

@Zsíros Bödön: Hanem mivel, zsíroska?

@John Doe3: Az adott hivatkozás szót sem ejt a COBOL-ról, vagyis a kissé merész állításod forrása valószínűleg többünket érdekelne.

Androsz · http://migransozo.blog.hu 2016.10.29. 21:55:42

@Lucifer Morningstar: "kihagyták az elemek indexelhetőségét"

Ezt nem értem. A 6-ban a vezérlések és a tömbelemek is indexelve vannak. A grafikai elemek viszont kétségtelenül kaphattak volna jóval nagyobb támogatást is. Még az olyan kistestvérek is lepipálják, mint a Liberty Basic, például.

droid_ 2016.10.29. 22:00:33

@Androsz: dehogy kell mindet tudni. akkor kene mindet tudni, ha minden helyre fel akarnad vetetni magad. a c nyelv pedig szerintem az egyetlen a felsoroltak kozul, ahol kenytelen vagy megismerkedni a memoriaval, es rajonni, hogy az nem fan terem, ugyhogy eleg erdekes, hogy pont azt hagynad ki, foleg hogy c++-t nem hagyod ki. de en sem ezekkel kezdenem, es alairon, hogy ezek nelkul is siman meg lehet lenni manapsag.

Lucifer Morningstar 2016.10.29. 22:01:46

@Androsz:

VB6:

Command1(0) - Command1(1) - Command1(2) --- Command1(n)

VB8:

Command1 - Command2 - Command3 - Command4

droid_ 2016.10.29. 22:50:00

@Indiecrawford: en mar leirtam a multkori cikketekhez is, hogy ma pythonnal. gyorsan lehet sikerelmenyhez jutni tanulas kozben, akar onmagaban is elegendo lehet a munkaszerzeshez, es aki profin hasznalja, az tenyleg nagyon produktiv lehet vele. de aki jobban raer es hajlando a nehez utat valasztani, annak sorrendben c, c++, java es esetleg utana a tobbi, ha meg mindig erdekli.

Indie Crawford · http://indiecrawford.blog.hu 2016.10.29. 22:53:39

@droid_: Értem. De ez a lista is Pythonnal indul, nem is véletlenül! ;)

tszelnok 2016.10.29. 23:07:45

@na__most__akkor: Huh ... remélem azért megélsz a nyugdíjadból. Ha szeretnél látni egy jó programozási nyelvet: www.scala-lang.org . Ha van időd/kedved megtanulni: www.coursera.org/learn/progfun1 (ingyenesen elvégezhető online kurzus)

Kurt úrfi teutonordikus vezértroll 2016.10.30. 04:00:09

@Androsz: Nem ejt szót, de az IBM mainframeről szól. Amelyre alapozva iszonyatosan sok nagyvállalati rendszer van. Ezek többsége COBOL-ban van írva. Sőt a PLI-ről is állnak át már COBOL-ra, mert a PLI-ben túl sok egyedi trükköt lehet előadni, túl sokféle stílusban lehet programozni.

midnightcoder2 2016.10.30. 08:00:12

@Kurt úrfi teutonordikus vezértroll: Nem elsősorban azért, hanem mert a PL/1 nagyon-nagyon erőforrásigényes dolog volt a maga korában. Ehelyett a COBOL, illetve az RPG terjedt el, ez utóbbi kb. egy magas szintű assembly, a C ahhoz képest javascript.

midnightcoder2 2016.10.30. 08:03:37

@Tuschinger elvtárs vagyok: Én anno a pályám elején még dolgoztam úgy 2 évet COBOL-ban, még TPA-1140-en, Honeywell DPS-8-on, és ESZR gépeken. De valahogy nem cserélném le a mostani .NET-es melómat erre.

Célkereszt 2016.10.30. 08:37:35

Tök fölösleges ezen vitakozni. Mindig a feladathoz kell megfelelő nyelvet választani. Meg hogy eléggé elterjedt ahhoz, hogy bármikor találjunk programozót, aki karbantartja.

Kurt úrfi teutonordikus vezértroll 2016.10.30. 08:40:23

@midnightcoder2: Most állnak át, mert a PLI túl sok lehetősége nyújt. A PLI régen tényleg relatív erőforrás igényes volt, mert mindent dinamikusan foglalt le és a memória foglalások sok gépidőt emésztettek.
Ja és a mai mainframek, már nem éppen ESZR gépek.. Van Websphere, PLI XML parser , stb.

dr. mesterséges színezék 2016.10.30. 09:33:34

@elemes: Ez a virtualizáció óta úgy igaz, hogy a programozó szól, hogy "adj még két processzort, mert írtam egy programot!"

dr. mesterséges színezék 2016.10.30. 09:47:50

@Androsz: "A C itt fölösleges, mert bár régen nagy szerepe volt, "

Aktívan már vagy 15 éve nem használom. Viszont passzívan napi rutin az strace/ltrace/truss logok olvasásából kitalálnom, hogy az újgenerációs programozók mit nem kezeltek le az (egyébként jellemzően tiszteletreméltóan korrekt) programjaik installerében, hanem csak elkaptak egy kivételt, amit némán lenyeltek. A C ismerete nélkül pingvinezhetnék.
Ha valaki ezt rímelni érzi Bambano fenti hozzászólására, az nem a véletlen műve.

dr. mesterséges színezék 2016.10.30. 09:56:14

@Bambano: " ez kezd terjedni, hogy rendszerszkripteket írnak perlben meg pythonban."

Azért bőven volt ennek előjele. Pl. amikor elkezdtek az init szkriptekben hemzsegni olyan blokkok, amelyekben egymást követő sorokban _ugyanannak_ a parancsornak a filterezése történt így:
x=`... | awk '{print $1}'`
y=`... | awk '{print $2}'`
...

Mindezt csak későbbi feltételek kedvéért.

dr. mesterséges színezék 2016.10.30. 10:03:19

@John Doe3: Vicces tud lenni, amikor sokévtizedes, leválthatatlan (értsd: nincs pénz és mersz (IIABDFI) a reimplementáláshoz) legacy rendszert kell hangyányit az biznisz változásához igazítani, és elő kell vennia REXX referenciát.

dr. mesterséges színezék 2016.10.30. 10:07:15

@droid_: " a c nyelv pedig szerintem az egyetlen a felsoroltak kozul, ahol kenytelen vagy megismerkedni a memoriaval"

A hajdan oktatónyelvre kitalált Pascal sem hagy létezni rálátás nélkül. Ezért is nem értem a lefitymálását és elavultozását.
Na mindegy.

Peter100 2016.10.30. 10:07:37

Ennek a listának a fele nem programnyelv.. de mindegy. Helyettük legalább a Delphit be lehetett volna tenni, bár zsigerből kihagyja minden ilyen web(re)fejlesztő blogger.

Sajtkukac 2016.10.30. 10:33:19

Szerintem a C nyelv az egyetlen, amiben kis méretű és hatékony kódot lehet irni, és nativan futhat a CPU-n. Az más dolog, hogy bonyolultabb feladatokhoz mindig kell valami library, de ez a többi programnyelvre ugyanúgy igaz.
C++ : "szemét be, szemét ki" ez nagyon találó, tényleg igy van. Én csak GUI fejlesztéshez használom, minden másra "verébre ágyúval"... C# detto.
Java a C++-nak a butitása, pont azokat a dolgokat hagyták ki a nyelvből, ami a C-ben jó volt.

C/C++-on kivül - ahogy Androsz is irta - mindenhez interpreter kell, amitől rögtön legalább tizedére esik a hatékonyság, és hiába elméletben multiplattformos nyelvek, többnyire csak az adott környezetben futnak, ebből a szempontból nem jobbak, mint egy C program. Utóbbinál legalább makrókkal (#ifdef) szét lehet választani a kódot plattformok szerint.

Meg azért szólnék népszerűség kapcsán, hogy a mobil telók 90%-ában használt Android az C++ -ban van irva, alatta a Linux meg C-ben. Effelett futnak a Java-s alkalmazások.
A nyilt forráskódú fejlesztések több mint 80%-a sima C-ben van...

Kurt úrfi teutonordikus vezértroll 2016.10.30. 12:10:08

@Sajtkukac: Azér asseblerben is lehet pici é 6ékony kódit írni. :-))

droid_ 2016.10.30. 19:47:14

@dr. mesterséges színezék: en pascalban tanultam, de ma nem javasolnam senkinek, mivel a megtanulasa utan szerintem hasznavehetetlen.

Androsz · http://migransozo.blog.hu 2016.10.30. 20:16:38

@Lucifer Morningstar: Értelek már. Ez így tényleg ökörség. De azért maradtam meg a nagyon régi 6-osnál, mert amellett, hogy nem kell hozzá egy horribilis méretű motort telepíteni, még egy értelmes és még viszonylag következetesen felépített nyelv. A metódusok ugyan idegenek a Basic koncepciójától, és kicsit elegy-belegy módon vezették be, de végül is összeállt valahogy. A 7-esben viszont egyszerűen seggbe rúgták az egész Basicet, és összelapátoltak mindenféle eszközt egy halomba, ráírták, hogy Visual Basic 7, aztán örvendezzünk. Annak is, hogy gyakorlatilag a 6-oson írt programok egyike sem fordítható le vele többé. Annyira buta nyelv lett, hogy végül inkább legyintettem rá. El is tököltek vele egy ideig, míg végül többedik nekifutásra a C#-pal sikerült végre egy elfogadhatóan következetes és használható nyelvet össztákolniuk, csak éppen nem tudtak vele igazán hasznosat teremteni. Az egésznek annyi az értelme, hogy ad egy eszközt a .Net felhasználására. Csak az a baj, hogy ahhoz nem kellett volna másik nyelvet kiagyalni.

Eleve nagyon ostoba dolognak tartom, hogy hetente születnek új nyelvek. Ezt képtelenség követni, és egyre több kompatibilitási probléma születik így az egyre több gép között. Ha értelmes lenne az emberiség, és a programnyelv nem kereskedelmi termék lenne, akkor kialakulna egy vagy két magas szintű nyelv, végleges formában, és onnantól csak a rutinkönyvtárakat kellene bővítgetni, de szigorúan ragaszkodva a visszafelé kompatibilitáshoz.

De a nyelvek kereskedelmi termékek, amelyekből évente kötelező kiadni egy új, "még fejlettebb"-et, persze beletenyerelve a korábbi szisztémába, aztán boldoguljon vele a világ, ha akar.

@droid_: "dehogy kell mindet tudni. akkor kene mindet tudni, ha minden helyre fel akarnad vetetni magad."

Ez persze igaz, de ha állást keresek, előre nem nagyon lehet tudni, hogy éppen melyiket várják el. De ettől függetlenül a HTML-CSS-Javascript-PHP kombó majdhogynem kötelező így egyben, amibe, bár ez nem mind programnyelv, ölég strapás dolog belerázódni, főleg ha az ember ezzel kezdi az életét.

@Kurt úrfi teutonordikus vezértroll: "Amelyre alapozva iszonyatosan sok nagyvállalati rendszer van."

De mindegyikre külön írják meg a rendszert?

@Sajtkukac: "Java a C++-nak a butitása, pont azokat a dolgokat hagyták ki a nyelvből, ami a C-ben jó volt."

Amikor a Javát tanulni kezdtem, elkerekedett szemmel néztem, hogy miféle ősi nyelvet tanulhatott a faszi, aki ezt a romot kitalálta.

Mondjuk, ha egy nyelvben valaki még képes előírni a betűkészlet-érzékenységet, azt szerintem kőbányába kellene küldeni, mielőtt valami még mocskosabb gonoszságot művel.

droid_ 2016.10.30. 20:56:10

@Androsz: dehogy kotelezo. soha egyetlen allasinterjumon nem kerultek szoba ezek. mivel nyilvan en jelentkeztem olyan helyekre, ahol ezek nem kerulnek szoba. tehat valahogyan megis "lehetettt tudni". mivel oda volt irva a hirdetesbe, hogy c/c++ programozot keresnek. es ha valaki hozzank azzal jonne, hogy a fenti nyelvekhez mind remekul ert, akkor az nekem minimum gyanus lenne.

Kurt úrfi teutonordikus vezértroll 2016.10.31. 19:46:45

@Androsz: A 70-es, 80-as években iszonyatosan sok saját rendszert írtak. Egy 92-es felmérés szerint a 80-as évek végén a világ 500 vezető cége közül 450-nek fontosabb alkalmazásai IBM mainframen voltak. Ezeket nagyon nehezen írják át. Légy erős pl a Bank Austria rendszerének jelentős része még assemblerben van. Saját szememmel láttam kódot.

Kurt úrfi teutonordikus vezértroll 2016.10.31. 19:47:45

@Androsz: "Mondjuk, ha egy nyelvben valaki még képes előírni a betűkészlet-érzékenységet, azt szerintem kőbányába kellene küldeni, mielőtt valami még mocskosabb gonoszságot művel."

Hehehe... gurultam a röhögéstől. :-)) Igazad van.

DocBulywood 2016.10.31. 20:42:18

@Kurt úrfi teutonordikus vezértroll:

Translate-nél maradok, némi deklarációval binárisan megadva, miből mit csináljon.

Androsz · http://migransozo.blog.hu 2016.10.31. 21:58:41

@Kurt úrfi teutonordikus vezértroll: "Légy erős pl a Bank Austria rendszerének jelentős része még assemblerben van."

Légy erős, én ezt el is várnám tőlük. :D Kapkodtam a levegő után, amikor azt halottam, hogy a BKV jegymasináinak nagy kasztnijában egy PC van, amelyiken az XP fut. Aztán azt is hallottam, hogy valamelyik nagy repülőgépmárka gépein is valami PC-s kereskedelmi oprendszer megy. Én azt gondolnám, hogy ha én valami biztonságos cuccot szeretnék csinálni, akkor összerakok hozzá valami halál egyszerű, sokat tesztelt, atombiztos hardvert, majd összehívok pár programozót, hogy hölgyeim és uraim, itt a gép, itt vannak leírva a feladatok, szíveskedjenek megoldani őket anélkül, hogy a végeredmény bármilyen ismert rendszer részeit tartalmazná. A gyártáshoz szükséges 1 db CD-t három példányban kérem a titkárságra, ahol a fizetés felvehető. Ha valami nem jó, akkor a család havonta küldhet levelet. Saját fejlesztés, saját kód, saját teszteléssel. Nem internetes frissítés, meg korszerű távvezérlés mobiltelefonról, meg négyjegyű PIN-kód, meg beépített hátsó kapuk, hanem masszív, manuális technika, egy bejárat, egy kijárat, távelérés kizárva. Aztán azt hekkelje meg valaki.

Kurt úrfi teutonordikus vezértroll 2016.11.01. 02:42:39

@DocBulywood: És mondjuk EBCDIC 870-ből,, hogyan csinálod UTF-16-ba? :-))

@Androsz: Egyetértek. Elmondaná hogy egy kollégám mesélte, aki nagyon benne van a mainframek-ben, hogy IBM oprencerben a 70-es évek vége óta nem volt szoftverhibából történő betörés. Persze kis rendszerekhez ezeket nem lehet alkalmazni.

.Petya. 2016.11.01. 13:21:41

Én köszönöm Indie-nek a nyitó postot, szerintem egészen remek összefoglaló egy kezdőnek a leggyakoribb/hasznosabb nyelvekről.
europass írta itt, hogy egy kezdő programtervezést, algoritmizálást tanuljon először, és csak utána nyelvek szintaxisait. Ezzel elvben egyetértek, ehhez melyik könyvet ajánlotok (angolul is, persze)? Utánaolvastam kicsit és van is 1-2 tippem (pl. a Clean code vagy a Head first design patterns), de a ti véleményeteket kérem. Szóval mik a legjobb oop (akár nyelvsemleges, akár vmelyik nyelvet használó, a legjobb Python lenne) könyvek?

Másik kérdésem, hogy ha a front-end fejl. a cél, akkor nyilván a html, css, JS kötelező, de az első 2 leíró nyelv, gondolom azt nyugodtan lehet az oop előtt is elsajátítani. Viszont melyik fázisban érdemes az oop-be belemerülni? Mert ahogy tudom nem a JS a legjobb erre. Konkrétabban, a html/css után ti mit ajánlanátok következő lépésnek? JavaSriptet, vagy Python-t vagy általános oop-t (kérdés h azt miből)?

Androsz · http://migransozo.blog.hu 2016.11.01. 15:19:02

@.Petya.: " Viszont melyik fázisban érdemes az oop-be belemerülni?"

Az objektumorientált programozást nem helyes önálló területként kezelni, mert önmagában nem jó semmire. Az csak egy megközelítési módja a feladat megoldásának, amelyre azért van szükség, mert az adott nyelvi implementáció, az adott fejlesztőkörnyezet ezt igényli. A megtanulására akkor van szükség, ha az ember ilyen rendszerrel akaro programokat írni.

A lényege elméletileg nem komplikált. A klasszikus programozási technikában az ember adatokat tárol változókban, tömbökben, és ő tudja, hogy melyik adatnak mi a jelentése. Byte-okkal és karaktersorozatokkal ügyködik. Ha valamilyen perifériához fordul, vagy valamilyen komplexebb képernyőelemet akarja módosítani, akkor a nyelv megadja az eszközöket ennek többé-kevésbé elemekre bontott elintézéséhez. Lehet, hogy egy négyszöget úgy kell a képre tenni, hogy egy-egy utasítással előírjuk a négy oldalának a kirajzolását, de lehet, hogy a nyelv megadott pontokat érintő négyszög rajzolására is tartalmaz utasítást, mindenesetre elég egyszerű elemekkel kell a feladatot elintéztetni. Ha a négyszög pillanatnyi színét és helyét akarjuk megjegyeztetni, akkor az értékeket valahogy elnevezett változókban tároljuk, és mi tudjuk, hogy a változók minek a mijét tárolják, logikai kapcsolatban a kép elemeivel. Technikailag a változókban tárolt adatok egyformák. Mindehhez természetesen módunkban áll eljárásokat, függvényeket gyártani, kedvünk szerint paraméterezhetően, amelyekkel a dolog saját szabvány szerint gyorsabban elintézhető.

Az OOP egy másik megközelítés. A programozó kolléga által fáradságosan megismerhető, párhuzamos adatfüzérekből álló adattárolási szisztéma helyett a nyelv megengedheti a négyszög objektumként való megfogalmazását, adunk neki egy nevet, és kiválasztjuk a típusát, osztályát, miszerint ez egy négyszög. A színét, helyét nem általunk választott nevű és szerkezetű változókban tároljuk, hanem az objektumhoz a nyelvben szabványosan előírt nevű tulajdonságokként rendeljük. A negyszog(1).posx egy ilyen adat, és ha értéket adunk neki, akkor a négyszöget erre a vízszintes pozícióra helyezi el. Ha tudni akarjuk a színét, akkor változóként lekérdezhetjük a negyszog(1).forecolor nevű tulajdonságot; ha meg akarjuk változtatni, akkor új értéket adunk neki. Vagyis az adattároló változókat nem csak logikailag, hanem technikailag is a manipulált képelemhez kötjük, amelyet általánosságban objektumnak nevezünk. Minden adat az objektum valamilyen tulajdonságaként férhető hozzá.

Persze ha egy objektumhoz logikailag valami olyan adatot akarunk rendelni, amelyhez a nyelv nem ajánl fel saját tulajdonságot, akkor azt külön változókban kell tárolnunk, amiknek a jelentését mi tartjuk fejben. Egy négyszög túl egyszerű példa, de például jelezhetjük magunknak, hogy a négyszöget a program céljai szerint szabad-e áthelyeznünk, vagy hogy a négyszöget még hányszor akarjuk megvillogtatni.

Ahogy a klasszikus paradigmában a négyszög elemeit utasítások vagy eljárások paramétereként felhasználva végzünk vele műveleteket, az OOP-ben az objektumon végzett metódus felel meg az utasításnak. Ez végül is csak nyelvi megfogalmazás kérdése. Lehetne egy MOVE negyszog(1), x, y utasítást használni, de lehet, hogy az adott nyelvi implementáció ezt így fogalmaztatja meg: negyszog(1).move x, y. Ennek persze lehetnek variációi. Ez most nem tulajdonság, adat tárolására, hanem metódus, művelet végeztetésére.

Az OOP egyetlen egyértelmű előnye az, hogy ha csinálni akarunk egy újabb négyszöget, akkor vagy lemásoljuk ezt, vagy lemásoljuk az ennek létrehozásakor használt alapsémát. Ezzel létrehoztunk egy újabb példányt, amelynek önálló tulajdonságai lesznek, amelyek vagy tartalmazzák a másolt objektum adatait, vagy még üresek, ez eldönthető dolog. Ha az objektumnak van tíz tulajdonsága, akkor mind a tíz átmásolható a példányosítással, egyszerre. Vannak még rafináltságok, például akár az osztály, akár a példány módosításával hatással lehetünk az összes "testvérre" is, ilyen dolgoktól kezd az OOP bonyolulttá válni. De ha valaki megszokja, akkor akár tekintheti ezt az egyetlen üdvözítő útnak is, sokan vannak ilyenek, ők az OOP nélkül dolgozó embert és nyelvet primitívnek nevezik. Pedig egy nyelv akkor jó, ha a programozót kiszolgálja, és nem kényszeríti.

Mindennek semmi köze sincs a strukturáltsághoz.

Aki "gépközeli" nyelven dolgozik, és ezek csúcsa az assembly, annak nincs objektumozás, az a klasszikus technikát nyomja, ami szerinte nem primitív, hanem erőforrás-hatékony.

Az OOP alapelvű nyelvek végül szintén assemblyben (gépi kódban) érik el a végső állapotot, szóval igazából szokás és képzettség dolga, hogy a programozó melyik állapotban érzi kényelmesnek a program előállítását.

Indie Crawford · http://indiecrawford.blog.hu 2016.11.01. 17:22:01

@.Petya.: Örülök, hogy hasznosnak találtad a posztot, köszi, hogy benéztél!

Az OOP paradigma elsajátítása szerintem sem megkerülendő, de pl. front-end fejlesztés esetén is, abszolút érdemes lehet először az imperatív paradigmával kezdeni, elég jól el lehet boldogulni a procedurális megközelítéssel a kisebb feladatokhoz. No persze az objektumok működését meg kell érteni, de a objektum-orientált szoftverszervezés teljes mélységében a komplexebb dolgok fejlesztéséhez szükséges, egy-egy front-end feature kivitelezéséhez csak kisebb mértékben.

A JavaScript objektum-orientált nyelv, az örkölődést azonban prototípusokkal valósítja meg az osztályok helyett, aminek igényel némi utanájárást a megértése, talán nem olyan egyszerű, mint az osztály alapú megoldás, amit C-ben, C++-ban, C#-ben, Java-ban látunk például, de ha a web-fejlesztés áll a fókuszban, akkor nem elhanyagolható.

Szóva én azt javaslom neked, hogy nyugodtan folytas JavaScriptben a tanulmányokat OOP téren is, de anélkül, hogy túlmisztifikálnád a dolgot, hiszen a gyakorlati feladatok jó része nem igényel olyan intenzív OOP-t mint ami egy összetettebb, komplett szoftvernél szükséges lehet, sőt a túlzott és dogmatiksu OOP néha szuboptimális megoldást is szülhet.

Az említett könyvek jók egyébként, továbbá ajánlom az Eloquent Javascript nevűt is, mely online is elérhető, ez elég jól tisztába teszi a JavaScriptet és azon belül az objektumok működését is. Az OOP bibliája pedig a GOG könyv, ami Gang of Four-t jelent és a szerzőkre utal, a címe: Design Patterns: Elements of Reusable Object-Oriented Software

Sok sikert neked!

Gyűrött Papír 2016.11.01. 21:36:50

Az volt már, hogy az igazi programozó bármelyik nyelven tud FORTRAN programit írni? :)

Indie Crawford · http://indiecrawford.blog.hu 2016.11.01. 21:59:24

@.Petya.: Bocs, kicsit helyesbítenék, az új JavaScript szabvány, az ES6 már a class-okat is támogatja, így még több szabadságot ad (a prototype alapú megvalósítás is jól jöhet), és maximálisan kapabilis OOP nyelv.

.Petya. 2016.11.02. 14:12:26

Köszönöm Indie-nek és Androsznak a részletes válaszokat az OOP-ről, hasznos volt.

Ami sztem kapcsolódik ide és érdekes lehet, és nemigen találtam róla jó áttekintést, hogy - nagyon primitíven megfogalmazva - milyen típusú programozások (beleértve a leíró nyelveket is) vannak?
Tehát nem a nyelvek, hanem a típus felől közelítve a programozást. Egy kívülállónak v egy kezdőnek (így nekem is) ez kicsit homályos. Tehát a programming családfája kb. hogy néz ki? Milyen al-műfajai, al-al-műfajai vannak (nyilván csomó átfedéssel)? Webfejlesztés (azon belül front-end, back-end), alkalmazásfejlesztés (azon belül? pl. játékok, desktop alkalmazások stb.? azok is különböző platformokra), rendszer fejlesztés? A webfejl. és az alkalmazásfejl. mennyire különül el? Vagy pl. az android és a iOS platformra való alkalmazásfejlesztés mennyire válik el a programozók szempontjából?

És kb. milyen lehet a programozók megoszlása ezek között az al-műfajok között? pl. a legtöbb webfejlesztő vagy alkalmazásfejlesztő? Op. rendszerfejlesztő meg gondolom nagyon kevés.

Ehhez még kapcsolódik, h ezekben a különböző típusú programozásokban mik a legelterjedtebb, leggyakoribb nyelvek (incl. scripting nyelvek).
Bocs kicsit sokat kérdeztem, csak gondolkodom ezekről.

DocBulywood 2016.11.02. 14:50:39

@Kurt úrfi teutonordikus vezértroll:

Van rá FTP-ző, az majd elintézi:

echo user ftp1 >> transfer.tmp
echo ftp1 ascii >> transfer.tmp
rem echo binary >> transfer.tmp
echo quote site unix off >> transfer.tmp
echo cd %katalogus% >> transfer.tmp
echo quote site reclf off >> transfer.tmp
rem echo quote site fixed 496 >> transfer.tmp
rem echo quote site type b >> transfer.tmp
echo quote site crlf on >> transfer.tmp
echo quote site recfm f >> transfer.tmp

Indie Crawford · http://indiecrawford.blog.hu 2016.11.02. 19:58:27

@.Petya.: Valamilyen szinten próbáltam a célterületekre utalni én is a programnyelvek besorolásánál.

en.wikipedia.org/wiki/Comparison_of_programming_languages

Én ezt az oldalt vettem alapul, itt az 'Intended Use' oszlop érdekes lehet.

A legtöbb célterület bizonyos nyelveket preferál, éppen ezért pl a nyelvek elterjedtségének a különböző statisztikái hasznos indikátorok lehetnek annak eldöntésében mely területek a legnépszerűbbek.

www.tiobe.com/tiobe-index/

Ez az oldal különösen beszédes lehet.

Végül még megjegyezném, hogy az alkalmazási területek nem keverendőek össze a programozási paradigmákkal (amilyen az OOP), azaz azokkal a különböző metodikákkal melyeket az nyelvek és a fejlesztők alkalmaznak a komputer programozás különböző szintű absztrahálására. (Bizonyos nyelvek kifejezetten egy-egy ilyenben jeleskednek, mások többet is támogatnak egyszerre.)

Ezekről itt olvashatsz bővebben:
en.wikipedia.org/wiki/Programming_paradigm

Fodor Balázs 2017.01.09. 20:17:31

@tszelnok: +1 a Scala-nak. Most, 2017-re, programnyelvek terén az emberiség a Scala-t tudta egyelőre kiizzadni, a többi csak silány pótlék.