Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.58 KB | None | 0 0
  1.  
  2. Mit érdemes átnézned, hogyha programozó szeretnél lenni?
  3. CSIRMAZ DÁVID·WEDNESDAY, SEPTEMBER 28, 2016
  4. 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.
  5. Ezek azok a dolgok, amelyekre programozói hobbim és munkám során a leginkább szükségem volt (eddig).
  6.  
  7. 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.
  8.  
  9. 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.
  10.  
  11. Na akkor most nézzük a témákat, amit át kell nézned, hogyha programozó szeretnél lenni.
  12. Számok
  13.  
  14. A számok elől nincs menekvés. Mert minden program számokkal dolgozik.
  15. Szóval nézd át, hogy miféle számok ezek mielőtt tovább lépsz.
  16.  
  17. - kettes (bináris) számrendszer
  18. - bit és bájt
  19. - egész számok ábrázolása
  20. - egész számok összeadása
  21. - kettes komplemens számábrázolás
  22. - 8, 16, 32 és 64 bites egész számok értelmezési tartománya
  23. - lebegőpontos számábrázolás
  24. - IEEE 32 és 64 bites lebegőpontos számok
  25. - NaN, végtelen és 0 ábrázolása lebegőpontosan
  26.  
  27. - 16-os (hexadecimális) számrendszer
  28. - 16-os számrendszer összevetése a kettes számrendszerrel, átváltás a kettő között
  29. Szöveg és karakterek
  30.  
  31. Még a betűket és más karaktereket és számként tároljuk, át kellene nézni, hogy hogyan.
  32. 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.
  33.  
  34. - ASCII kódtábla
  35. - unicode
  36. - UTF-8 kódolás
  37. - UTF-16 kódolás
  38.  
  39. - konvertálás karakterkódolások között
  40. - hibás karakterkódolás felismerése "ránézésre"
  41.  
  42. Érdemes közben egy szöveges fájlt megnézni egy hexeditorban, hogy láthasd, hogy egyes karaktereket milyen byte-okkal ábrázoljuk.
  43. Műveletek számokkal
  44.  
  45. 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.
  46.  
  47. - a 4 aritmetikai művelet (+, -, *, /)
  48. - Milyen gyorsan hajtódnak ezek végre, melyiket a leggyorsabb és melyiket a leglassabb végrehajtani?
  49. - maradékképzés
  50. - túlcsordulás megértése
  51.  
  52. - lebegőpontos számok pontossága és hibái
  53. - Hogyan hasonlítasz össze két lebegőpontos számot egyenlőségre?
  54.  
  55. - logikai műveletek: nem, vagy, és, kizáró vagy (aka NOT, OR, AND, XOR)
  56. - bitszintű logikai műveletek
  57. - Hogyan állíthatunk 1-esre vagy 0-ra biteket egy tetszőleges számban?
  58. - eltolások: balra tolás, jobbra tolás, előjeles jobbra tolás
  59. - Hogyan szorozhatsz, oszthatsz leggyorsabban kettő hatványaival?
  60. Adatszerkezetek és algoritmusok
  61.  
  62. 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.
  63. Alapvető algoritmusleíró elemek
  64.  
  65. - értékadás
  66. - feltételes elágazások
  67. - ciklusok
  68. - alprogramok: eljárások és függvények megismerése
  69. Legfontosabb összetett adatszerkezetek
  70.  
  71. - statikus tömb
  72. - dinamikusan növekvő tömb
  73. - rendezett tömb
  74. - asszociatív tömb
  75. - láncolt lista
  76.  
  77. Mire használatosak ezek az adatszerkezetek?
  78. Melyek ezeknek adatszerkezeteknek az előnyei és hátrányai?
  79. Milyen gyorsan hajthatóak végre egyes műveletek ezeken az adatszerkezeteken, amikor nagyon sok elemet tartalmaznak?
  80.  
  81. - Gráf
  82. - Fa
  83. Legfontosabb algoritmusok
  84.  
  85. 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.
  86.  
  87. - összegzés
  88. - lineáris keresés
  89. - bináris keresés
  90. - gyorsrendezés
  91. Rekurzív algoritmusok
  92.  
  93. Mi a rekurzió?
  94. (Ahhoz, hogy megértsd a rekurziót, először meg kell értened a rekurziót... :) )
  95.  
  96. - 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
  97. - gráfbejáró algoritmusok
  98. Magas szintű programozási nyelvek
  99.  
  100. A nyelveknek két nagy csoportja van, amelyen elindulhatsz:
  101.  
  102. - 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.
  103. Ennek neves képviselője a C és C++.
  104. Ha natívan programozol, teljes kontrollod van szinte minden felett.
  105. 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.
  106.  
  107. - Menedzselt programozási nyelvek, amelynek során a programot egy másik program az ún. futtató környezet fogja végrehajtani.
  108. Ennek a csoportnak a képviselője a legtöbb nyelv manapság: C#, Java, PHP, JavaScript, Python, Perl, stb.
  109. 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.
  110. 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.
  111.  
  112. 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.
  113. Viszont néhány fontos témát a választott nyelvtől függetlenül érdemes megnézni:
  114. Fordítás folyamata
  115.  
  116. - fordítás
  117. - linkelés
  118. - futtatható programok
  119. - statikus könyvtárak
  120. - dinamikus könyvtárak
  121. - dinamikus linkelés
  122. Input és output
  123.  
  124. - olvasás standard bemenetről
  125. - írás standard kimenetre
  126. - olvasás fájlból
  127. - írás fájlba.
  128. - fájlok módosítása a közepén
  129. - MMIO (memóriába képzett fájlok)
  130. Grafikus kezelő felületek
  131.  
  132. - eseményvezérelt programok
  133. - ablakos programok írása
  134. Hálózati programozás
  135.  
  136. - socketek
  137. - TCP szerver és kliensprogram írása
  138. - UDP szerver és kliensprogram írása
  139. 2D Grafika
  140.  
  141. - színek megadása: RGB és RGBA
  142. - rajzolás ablakba: vonalak, körök, téglalapok, stb
  143. - képek betöltése és kirajzolása
  144. 3D grafika
  145.  
  146. - Lineáris algebra átismétlése, különös tekintette a vektorokra és a mátrixokra és annak műveleteire.
  147. - DirectX vagy OpenGL megismerése
  148. - 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).
  149. Objektum-orientált programozás
  150.  
  151. - objektum-orientált programozás elvei
  152. - SOLID alapelvek
  153. - tervezési minták
  154. 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.
  155. Webprogramozás
  156.  
  157. 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.
  158.  
  159. - HTTP protokol alapszintű ismerete
  160. - böngészőoldali ábrázolás: HTML, CSS
  161. - böngészőoldali programozás: JavaScript később JQuery
  162. - webszerveroldali programozás: PHP, ASP.NET vagy Node.JS, válaszd ki, amelyik tetszik.
  163. - webszerver konfigurálása
  164. - MVC tervezési minta és keretrendszerek
  165. - CMS rendszerek
  166. Adatbázis-kezelés
  167.  
  168. Tipikusan webszerverek esetén tárolják az állapotot adatbázisokban, de nem feltétlenül csak ott.
  169.  
  170. - SQL nyelv megismerése és használata: SELECT, UPDATE, INSERT, DELETE, stb
  171. - MySQL használata PHP-ból: mysqli vagy PDO használata
  172. - SQLite
  173. - noSQL adatbázisok
  174. Verziókövető rendszerek
  175.  
  176. 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.
  177. - Központosított verziókövetők: SVN, Perforce
  178. - Elosztott verziókövetők: Git, Mercurial
  179. Szoftverbiztonság
  180.  
  181.  
  182. 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.
  183. Adatbázis-védelem
  184.  
  185. - SQL injekció megértése, kivédésének lehetőségei
  186. - webszerveren tetszőleges fájlok elérésének megakadályozása
  187. Behatolásvédelem (natív programok esetén)
  188.  
  189. - puffertúlcsordulás veszélyei
  190. - egész számok túlcsordulásának a veszélyei
  191. - exploitok
  192. - shellcode
  193. - ROP lánc
  194. Kriptográfia
  195.  
  196. 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.
  197. A következő dolgokat érdemes átnézni ebben a témában:
  198. - hash algoritmusok: SHA-1, SHA-2
  199. - szimmetrikus titkosítás (mind a két fél azonos kulccsal titkosít és fejt vissza): AES
  200. - aszimmetrikus titkosítás (privát-publikus kulcsos titkosítás): RSA, ECC
  201. És ezeknek a használati módjaik:
  202. - integritás ellenőrzés
  203. - digitális aláírás
  204. - Diffie-Hellmann kulcscsere (titkosított csatorna létrehozása)
  205. - publikus kulcs tanúsítványok
  206. - bizalmi lánc
  207. Érdekességképpen még: kriptovaluták, blokklánc, Bitcoin
  208. Rendszerprogramozás
  209.  
  210. Ez már a mély víz csak úszóknak!
  211.  
  212. - memóriacímzés az adott architektúrán: aligned vagy nem aligned a memóriahozzáférés
  213. - user mód, kernel mód.
  214. - virtuális memória.
  215. - memória allokálás tetszőleges címre, memórialapok védelme. (Windows: VirtualAlloc, VirtualProtect, Linux: mmap, mprotect)
  216. - rendszerhívások az adott rendszeren (Windows: user32.dll és kernel32.dll rutinjai. Linux: 0x80-as megszakítás)
  217. Best practices
  218.  
  219. - KISS (keep it simple, stupid): "oldd meg minél egyszerűbben"
  220. - DRY (do not repeat yourserf): "Ne ismételd önmagad" (kód újrafelhasználása)
  221.  
  222. Összefoglaló táblazat a szinted felméréséhez: http://sijinjoseph.com/programmer-c...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement