Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Mit érdemes átnézned, hogyha programozó szeretnél lenni?
- CSIRMAZ DÁVID·WEDNESDAY, SEPTEMBER 28, 2016
- Mivel nagyon sokan kérdeznek a csoportban arról, hogy hogyan induljanak el, gondoltam összeírom a legfontosabb dolgokat, amelyeknek érdemes utána nézni.
- Ezek azok a dolgok, amelyekre programozói hobbim és munkám során a leginkább szükségem volt (eddig).
- Ez nem lesz egy egy éjszakás dolog. Hetekig vagy hónapokig eltarthat mire a végére jutsz. Főiskolán 3 évig tanítják mindezt. Szóval ne siess, nem hajt a tatár meg tanár sem, ha autodidakta módon haladsz. Fontos, hogy sokat gyakorolj, és mindennek utánaolvass, megértsd, amiről szó van mielőtt tovább lépnél. Az alábbiakban egyes szekciókat párhuzamosan is csinálhatod, egyes részek opcionálisak.
- Előny, hogyha az angol tudásodat is fejleszted. Ehhez nem kell más, mint az, hogy az angol internetet olvasd csak azért is. Ha kell szótárazz. Csak hogy olvasott legyél, láss mindenféle mondatszerkezetet és nyelvi trükköt, hogy ki tudd fejezni magad, illetve hogy el tudd olvasni a dokumentációkat. Pár éven belül sokat fejlődhet az angol tudásod, legalább is az írás és olvasás része.
- Na akkor most nézzük a témákat, amit át kell nézned, hogyha programozó szeretnél lenni.
- Számok
- A számok elől nincs menekvés. Mert minden program számokkal dolgozik.
- Szóval nézd át, hogy miféle számok ezek mielőtt tovább lépsz.
- - kettes (bináris) számrendszer
- - bit és bájt
- - egész számok ábrázolása
- - egész számok összeadása
- - kettes komplemens számábrázolás
- - 8, 16, 32 és 64 bites egész számok értelmezési tartománya
- - lebegőpontos számábrázolás
- - IEEE 32 és 64 bites lebegőpontos számok
- - NaN, végtelen és 0 ábrázolása lebegőpontosan
- - 16-os (hexadecimális) számrendszer
- - 16-os számrendszer összevetése a kettes számrendszerrel, átváltás a kettő között
- Szöveg és karakterek
- Még a betűket és más karaktereket és számként tároljuk, át kellene nézni, hogy hogyan.
- Bármilyen programozási nyelvet használsz, előbb vagy utóbb szöveggel kell dolgoznod, és tudnod kell, hogy ezeknek a karaktereit hogyan ábrázolják.
- - ASCII kódtábla
- - unicode
- - UTF-8 kódolás
- - UTF-16 kódolás
- - konvertálás karakterkódolások között
- - hibás karakterkódolás felismerése "ránézésre"
- Érdemes közben egy szöveges fájlt megnézni egy hexeditorban, hogy láthasd, hogy egyes karaktereket milyen byte-okkal ábrázoljuk.
- Műveletek számokkal
- A számokat nem csak ábrázolni kell, hanem számolni is kell majd velük. A számítógép nem ér sokat, hogyha nem számolsz vele. Bármilyen programozási nyelvet tanulsz, előbb vagy utóbb számolnod kell, és meg kell értened, hogy egyes számítási módoknak melyek az előnyei, hátrányai és határai.
- - a 4 aritmetikai művelet (+, -, *, /)
- - Milyen gyorsan hajtódnak ezek végre, melyiket a leggyorsabb és melyiket a leglassabb végrehajtani?
- - maradékképzés
- - túlcsordulás megértése
- - lebegőpontos számok pontossága és hibái
- - Hogyan hasonlítasz össze két lebegőpontos számot egyenlőségre?
- - logikai műveletek: nem, vagy, és, kizáró vagy (aka NOT, OR, AND, XOR)
- - bitszintű logikai műveletek
- - Hogyan állíthatunk 1-esre vagy 0-ra biteket egy tetszőleges számban?
- - eltolások: balra tolás, jobbra tolás, előjeles jobbra tolás
- - Hogyan szorozhatsz, oszthatsz leggyorsabban kettő hatványaival?
- Adatszerkezetek és algoritmusok
- Ezen a ponton már érdemes lenne kiválasztani egy programozási nyelvet és elkezdeni tanulni. És az alábbi dolgokat megnézni bennük. Lásd a következő szekciót.
- Alapvető algoritmusleíró elemek
- - értékadás
- - feltételes elágazások
- - ciklusok
- - alprogramok: eljárások és függvények megismerése
- Legfontosabb összetett adatszerkezetek
- - statikus tömb
- - dinamikusan növekvő tömb
- - rendezett tömb
- - asszociatív tömb
- - láncolt lista
- Mire használatosak ezek az adatszerkezetek?
- Melyek ezeknek adatszerkezeteknek az előnyei és hátrányai?
- Milyen gyorsan hajthatóak végre egyes műveletek ezeken az adatszerkezeteken, amikor nagyon sok elemet tartalmaznak?
- - Gráf
- - Fa
- Legfontosabb algoritmusok
- Nem is az a fontos, hogy hogyan írod meg ezeket, mert a legtöbb magas szintű nyelv gyárilag biztosítja ezeket. Inkább az a fontos, hogy megértsd, hogy mikor alkalmazhatók ezek, és mire jók. Valamint, hogy milyen gyorsak ezek.
- - összegzés
- - lineáris keresés
- - bináris keresés
- - gyorsrendezés
- Rekurzív algoritmusok
- Mi a rekurzió?
- (Ahhoz, hogy megértsd a rekurziót, először meg kell értened a rekurziót... :) )
- - fabejáró algoritmusok: preorder, posztorder bejárás; inorder bejárás (bináris fa esetén); szélességi és mélységi bejárás
- - gráfbejáró algoritmusok
- Magas szintű programozási nyelvek
- A nyelveknek két nagy csoportja van, amelyen elindulhatsz:
- - Natív programozási nyelvek, amelyek segítségével közvetlenül a számítógép által végrehajtható kódot kapsz.
- Ennek neves képviselője a C és C++.
- Ha natívan programozol, teljes kontrollod van szinte minden felett.
- Viszont ha natívan programozik az ember, akkor sok dologra oda kell figyelni, és ha elrontod, akkor máris hátsóajtót nyithatsz mindenféle kártevő programnak.
- - Menedzselt programozási nyelvek, amelynek során a programot egy másik program az ún. futtató környezet fogja végrehajtani.
- Ennek a csoportnak a képviselője a legtöbb nyelv manapság: C#, Java, PHP, JavaScript, Python, Perl, stb.
- Ezeknél valamivel kevesebb ráhatásod van arra, hogy mi történik a háttérben és biztonsági rések miatt is kevesebbet kell aggódnod.
- Viszont, biztonsági rés még mindig lehet a futtatókörnyezetben, és te nem igazán tehetsz ellene semmit, amíg a futtató környezet fejlesztői ki nem javítják azt.
- Erősen a választott programozási nyelvtől függ, hogy az hogyan működik, itt és most nem fogok tematikát adni külön-külön mindhez. Tankönyvet és tutorialt találsz a neten mindhez.
- Viszont néhány fontos témát a választott nyelvtől függetlenül érdemes megnézni:
- Fordítás folyamata
- - fordítás
- - linkelés
- - futtatható programok
- - statikus könyvtárak
- - dinamikus könyvtárak
- - dinamikus linkelés
- Input és output
- - olvasás standard bemenetről
- - írás standard kimenetre
- - olvasás fájlból
- - írás fájlba.
- - fájlok módosítása a közepén
- - MMIO (memóriába képzett fájlok)
- Grafikus kezelő felületek
- - eseményvezérelt programok
- - ablakos programok írása
- Hálózati programozás
- - socketek
- - TCP szerver és kliensprogram írása
- - UDP szerver és kliensprogram írása
- 2D Grafika
- - színek megadása: RGB és RGBA
- - rajzolás ablakba: vonalak, körök, téglalapok, stb
- - képek betöltése és kirajzolása
- 3D grafika
- - Lineáris algebra átismétlése, különös tekintette a vektorokra és a mátrixokra és annak műveleteire.
- - DirectX vagy OpenGL megismerése
- - Program írása, amely betölt és megjelenít egy textúrázott 3D modellt (legegyszerűbb betöltőt írni a Wavefront OBJ fájlokhoz).
- Objektum-orientált programozás
- - objektum-orientált programozás elvei
- - SOLID alapelvek
- - tervezési minták
- Mindezek összehasonlítása a hagyományos procedurális megfelelőjükkel. Annak eldöntését rád bízom, hogy melyik tetszik jobban.
- Webprogramozás
- A webprogramozás picit kilóg a sorból, mert teljesen más a futtatás és végrehajtás mondja, mint ahogy az asztali programoknál megszokhattuk. A programok részben a böngészőben, részben a szerveren futnak. Ezért külön érdemes ránézni ezekre a dolgokra.
- - HTTP protokol alapszintű ismerete
- - böngészőoldali ábrázolás: HTML, CSS
- - böngészőoldali programozás: JavaScript később JQuery
- - webszerveroldali programozás: PHP, ASP.NET vagy Node.JS, válaszd ki, amelyik tetszik.
- - webszerver konfigurálása
- - MVC tervezési minta és keretrendszerek
- - CMS rendszerek
- Adatbázis-kezelés
- Tipikusan webszerverek esetén tárolják az állapotot adatbázisokban, de nem feltétlenül csak ott.
- - SQL nyelv megismerése és használata: SELECT, UPDATE, INSERT, DELETE, stb
- - MySQL használata PHP-ból: mysqli vagy PDO használata
- - SQLite
- - noSQL adatbázisok
- Verziókövető rendszerek
- Szinte minden valamire való vállalatnál a forráskódot verziókövető rendszerekben tárolják. Érdemes lenne megismerni közülük egy párat, hogy ne érjen meglepetés.
- - Központosított verziókövetők: SVN, Perforce
- - Elosztott verziókövetők: Git, Mercurial
- Szoftverbiztonság
- Van pár dolog, amire nagyon oda kell figyelni, ha nem szeretnéd, hogy a kiber bűnözők áldozatává váljon a rendszered vagy a weboldalad.
- Adatbázis-védelem
- - SQL injekció megértése, kivédésének lehetőségei
- - webszerveren tetszőleges fájlok elérésének megakadályozása
- Behatolásvédelem (natív programok esetén)
- - puffertúlcsordulás veszélyei
- - egész számok túlcsordulásának a veszélyei
- - exploitok
- - shellcode
- - ROP lánc
- Kriptográfia
- Számos kriptográfiai könyvtár létezik, amely a megfelelő algorimusokat implementálja, így nem kell ezeket újra feltalálnod. (pl. OpenSSL). Itt is leginkább arra kell figyelni, hogy mire lehet ezeket használni.
- A következő dolgokat érdemes átnézni ebben a témában:
- - hash algoritmusok: SHA-1, SHA-2
- - szimmetrikus titkosítás (mind a két fél azonos kulccsal titkosít és fejt vissza): AES
- - aszimmetrikus titkosítás (privát-publikus kulcsos titkosítás): RSA, ECC
- És ezeknek a használati módjaik:
- - integritás ellenőrzés
- - digitális aláírás
- - Diffie-Hellmann kulcscsere (titkosított csatorna létrehozása)
- - publikus kulcs tanúsítványok
- - bizalmi lánc
- Érdekességképpen még: kriptovaluták, blokklánc, Bitcoin
- Rendszerprogramozás
- Ez már a mély víz csak úszóknak!
- - memóriacímzés az adott architektúrán: aligned vagy nem aligned a memóriahozzáférés
- - user mód, kernel mód.
- - virtuális memória.
- - memória allokálás tetszőleges címre, memórialapok védelme. (Windows: VirtualAlloc, VirtualProtect, Linux: mmap, mprotect)
- - rendszerhívások az adott rendszeren (Windows: user32.dll és kernel32.dll rutinjai. Linux: 0x80-as megszakítás)
- Best practices
- - KISS (keep it simple, stupid): "oldd meg minél egyszerűbben"
- - DRY (do not repeat yourserf): "Ne ismételd önmagad" (kód újrafelhasználása)
- Összefoglaló táblazat a szinted felméréséhez: http://sijinjoseph.com/programmer-c...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement