Mi a kódolás. Hogyan és hol lehet megtanulni kódolni? Hogyan válasszunk irányt és nyelvet

És elmagyarázom miért.

Tizenöt évvel ezelőtt azt tanácsolták, hogy legyek programozó, mert introvertált és félénk ember voltam, emellett analitikus elmém és a társasági élet teljes hiánya volt, de csak nevettem és ecseteltem az ilyen tanácsadókat. Tinédzser voltam akkor, és az én tinédzser képzeletemben a programozó örökké a szülői ház pincéjében élt, pattanásos volt és ronda szemüveget hordott, soha nem volt barátnője, de a Leia hercegnőről szóló fantáziák megtérültek (és elég gyakran) . Nem szerettem ezt az életmódot. Ráadásul akkor már volt barátnőm, és egész szép.

Előre hat év: a budapesti reptéren ülök, és egy HTML-ről szóló könyvet olvasok...

További hat év után felvettek egy észak-ír start-up céghez generalistanak. Igen, úgy tűnik, eltartott egy ideig. De pontosan mennyit? nem tudom pontosan megmondani. De sokat. Mitikus 10 ezer óra? Nem. Ha egy hozzávetőleges adatot kérnének tőlem, akkor azt mondanám, hogy arra a napra körülbelül 8 ezer órát "kódoltam". Technikailag a 10 000 órás szabály szerint 2 000 óra múlva szakértő lennék ezen a területen.

De fogok?

Ezt sikerült elérnem 8 ezer óra alatt. Helyezze magát kényelembe, mert az én történetem hosszú lesz. A következő nyelveken kódoltam: C, HTML, CSS, JavaScript, Java (Android), Swift, PHP, Ruby, Python, Chuck, SQL, a következő keretrendszerekkel dolgoztam: Node, Angular, Bootstrap, Foundation, React, Rails , CodeIgniter, Ionic és létrehozott nyitóoldalak, wordpress oldalak, e-kereskedelmi megoldások, eLearning tartalmak, Moodle és Totara webhelyek, Mahara webhelyek, Common Cartridge és SCORM csomagok, Android és iOS alkalmazások, mashupok, belső webes alkalmazások, e-könyvek, magazinok , játékok és további alkalmazások a társasjátékokhoz. Szóval hova vezetek?

A lényeg az, hogy szakterület, mint olyan, nem létezik, így a szakértővé válás feladat teljesíthetetlen. A kódolás nem mező. Számítástechnika, igen, de az teljesen más.

A kódolás az, amire az elnökök, a tanárok és a szülők kényszerítik a fiatalabb generációt, mint a birkákat a lehetőségek aranymezőjére vezetni.

Ez az ígéret egy álom, a propaganda olyan jól kidolgozott és kifejezett (nem is szavakkal kifejezve), hogy abszurd módon képekre redukálták, hogy az aranyos csúszómászó kicsik megértsék, hogy a logikus gondolkodás fontosabb, mint az önellátás vágya (kérem figyelj a szarkazmusra) .

15 évvel később a kódolás a kódolás popkulturális változata lett, most pedig a lakosság nagy reményeket fűz a kódolók leendő seregéhez, aminek köszönhetően mesterséges intelligenciával vezérelt otthonaink, forgalom, kiskereskedelem, szórakozás, valamint egy forradalom az orvostudományban, az iparban és a szexben – őrültség, nincs rá más szó. És mindezt azért a programozás kódolásnak számít, és elméletileg könnyen megtanulható. De ez nagyon távol áll az igazságtól...

Forrás: lifehacker

Találjuk ki. Az a mítosz, hogy bárki néhány óra alatt elsajátíthatja valamelyik programozási nyelvet, "ténynek" tekintve, csak egy bizonyos pontig igaz, és ez a pont a tanulás korai szakaszában jelentkezik. Valójában egy nyelvet egy nap alatt meg lehet tanulni. Általánosságban elmondható, hogy ha azt a célt tűzi ki maga elé, hogy egy hónapon belül poliglott lesz a programozásban, miközben dolgozik, akkor 8-10 nyelvet tanulhat meg, ha hétvégén tanul. De itt van a dörzsölés. Minden programozási nyelvnek megvannak a maga könyvtárai, valamint szintaktikai jellemzői, és mindezt nem lehet könnyen, gyorsan vagy egy hétvége alatt megtanulni. Valójában a való világban nem a programozási nyelv lesz a fő probléma.

Az, hogy beszélsz angolul, még nem jelenti azt, hogy tudsz regényeket vagy novellákat írni. Ugyanez mondható el a kódolásról is.

Csak azért, mert megtanult egy nyelvet, nem jelenti azt, hogy tudja, hogyan kell programot írni. Adjuk hozzá a keretrendszerek, bővítmények, könyvtárak, előfeldolgozók, utófeldolgozók, kódolási szabványok, iparági szabványok, tesztvezérelt fejlesztés (TDD), viselkedésvezérelt fejlesztés (BDD), tartalomkezelő rendszerek, fájlverziók, folyamatos integráció (CI) számtalan változatát. , kiadáskezelés.és telepítés, hibakeresés, jegykezelés, vízesés-modellek és scrum módszerek, valamint ezek kombinációi, és nem vagyok benne biztos, hogy mindet elneveztem. A lényeg az, hogy a "kódoló" fogalma szinte mindent lefed, amit fentebb említettünk. A programozás csak egy kis részét érinti. Fontos, de még mindig kicsi.

A programozás azonban továbbra is egyszerűsödik...

Az Apple elindította a Playgrounds-t, az MIT a Scratch-et, a Lego pedig a Boost-ot készíti elő, és mindenki a kódolást próbálja eladni a fiatalabb és felnövekvő generációnak, mintha új programozók állásait akarná betölteni a 2020-as években.

Én így látom: "Ne törődj a kóddal, vedd ezeket a virtuális puzzle-darabkákat, és kész, programozhatsz." Ha ez igaz lenne. Amit a programozásról tudni kell: szöveg alapú. Mindig is volt és lesz még sok éven át. A Lego Boost-ot, Playgrounds-t vagy Scratch-et játszó gyerekek 22 éves korukra nem lesznek sikeresebb programozók, mint azok, akik 16 évesen kezdték el a programozást, és valódi programozási nyelven dolgoztak. Tulajdonképpen honnan származnak ilyen elvárások? Nem hiszem, hogy a gyerekem 22 éves kora előtt megtanulja megkeresni a saját kenyerét. De ha 6 évig tanul kódolást, akkor garantálom, hogy gyorsan talál munkát.

Játszóterek az Apple-től.

A kód írása lehet a szoftverfejlesztési folyamat legnehezebb része. Ha nem az elejétől fogva mindent megszervez (főleg a nagy projekteknél), akkor az ezt követő kódolás és hibakeresés nem csak nagyon sokáig fog tartani, hanem sok fejfájást is hoz.

A jó kód jól karbantartott, újrafelhasználható és tesztelhető. A következő lépések megmutatják Önnek és/vagy fejlesztőcsapatának, hogyan kell kezelni a különböző szoftveres feladatokat, és mindent a lehető legjobban tartani. Bemutatom a „bevált gyakorlatokat”, amelyek segítenek jó kódot írni, és segítenek abban, hogy Ön és csapata boldog és hatékony legyen.

1. Használjon kódolási szabványokat

Könnyű rossz, rendezetlen kódot írni, de nehéz fenntartani egy ilyen kódot. A jó kód általában fenntart valamilyen szabványt a változók elnevezésére, formázására stb. Az ilyen szabványok hasznosak, mert függővé teszik a dolgokat attól, hogy ki olvassa utána a kódot, beleértve Önt is.

Létrehozhat saját kódolási szabványokat, de a legjobb, ha egy széles körben használtat használ. A Zend Framework kódolási szabvány vagy a PSR-1 kódolási stílus használatával mások számára könnyebb lesz alkalmazkodni.

2. Használjon megjegyzéseket

A megjegyzésekre nagyon szükség van. Addig nem tanulod meg értékelni őket, amíg nem írsz több ezer sornyi kódot, és hagyod néhány napig, majd visszajössz, és megpróbálod kitalálni. A hasznos megjegyzések megkönnyítik azok életét, akik utánad fognak dolgozni a kóddal.

Írjon egyértelmű, egysoros megjegyzéseket a kód érthetetlen részeihez; megírni a függvények és metódusok paramétereinek és funkcionalitásának teljes leírását; összetett logikai blokkok esetén szükség esetén írja le az előttük lévő logikát. Ne felejtse el frissíteni megjegyzéseit!

3. Refaktor

A kódrefaktorálás a produktív fejlesztők számára is hasznos szokás. Akár hiszed, akár nem, naponta újra kell alakítanod a kódodat, különben valami nincs rendben vele! Az újrafaktorálás jó állapotban tartja a kódot, de mit kell újrafaktorálni és hogyan?

Az architektúrától a metódusokig és függvényekig, a változónevekig, a metódusnak átadott argumentumok számáig és hasonlókig mindent újra kell alakítani.

A refaktorálás inkább művészet, mint tudomány, de van néhány jó szabály, amelyek rávilágítanak rá:

  • Ha a függvénye vagy metódusa 20-25 sornál hosszabb, valószínűleg túl sok logikát tartalmaz, és feloszthatja két vagy több kisebb függvényre/módszerre.
  • Ha a függvény vagy metódus neve 20 karakternél hosszabb, módosítsa a nevet, vagy módosítsa a teljes függvényt/módszert az első szabály segítségével.
  • Ha sok beágyazott hurokkal rendelkezik, akkor túl sok erőforrást használ anélkül, hogy észrevenné. Általában érdemes átgondolni a logikát, ha kettőnél több hurkot ágyaz be. Három egymásba ágyazott hurok – borzasztó!
  • Fontolja meg, hogy vannak-e használható tervezési minták. Ne használjon mintákat pusztán a minták használatának kedvéért, de a minták bevált megoldásokat kínálnak, amelyek megfelelőek lehetnek.

4. Kerülje a globális kódot

A globális változók és ciklusok problémákat okozhatnak, ha a kód több millió sorra nő. Olyan helyeken befolyásolják a kódot, ahol nehezen látható, vagy problémákat okoznak a változók, objektumok stb. nevével kapcsolatban. Gondolja meg kétszer, mielőtt beszennyezi a globális névteret változókkal, függvényekkel, ciklusokkal és hasonlókkal.

Ideális esetben nem szabad globálisan definiálni a blokkokat. A kapcsoló utasításokat, a try-catch utasításokat, a foreach ciklusokat, a while ciklusokat és hasonlókat deklarálni kell egy metóduson vagy függvényen belül. A metódusokat az osztályokon belül, az osztályokat és a függvényeket pedig a névtereken belül kell deklarálni.

5. Használjon jelentéssel rendelkező neveket

Soha ne használjon olyan neveket, mint a $k , $m és $test a változóihoz. Hogyan lehet ilyen kódot olvasni a jövőben? Jó kódban a változók, metódusok/függvények, osztályok nevei; jelentést kell hordoznia. Néhány jó változónév a $request , a $dbResult és a $tempFile (a kódolási stílustól függ).

6. Használjon jelentéssel rendelkező struktúrákat

Az alkalmazás strukturálása fontos; ne használjon bonyolult szerkezeteket, mindig legyen egyszerű. A könyvtárak és fájlok elnevezésekor olyan elnevezési konvenciót használjon, amelyről egyetért a csapattal, vagy amely megfelel a kódolási szabványoknak. Mindig válassza el egymástól a PHP-alkalmazás négy részét - CSS, HTML sablonok, JavaScript, PHP kód -, és mindegyiknél próbálja meg elkülöníteni a könyvtárakat az üzleti logikától. Az is jó ötlet, hogy a címtárhierarchiát a lehető legkisebbre állítsa, hogy könnyen megtalálhassa a kód egyes részeit és navigálhasson a szerkezetben.

7. Verzióvezérlő rendszer használata

A múltban jó fejlesztőcsapatok bíztak a CVS-ben. Most számos elérhető megoldást kínálunk. A változtatások és felülvizsgálatok kezelésének egyszerűnek, de hatékonynak kell lennie, ezért válassza ki azt a verziókezelő rendszert, amelyik a legjobban működik a fejlesztőcsapat folyamatával. Inkább olyan elosztott verziókezelő rendszert használok, mint a Git vagy a Mercurial; ingyenes/nyílt forráskódú és nagyon erős. Ha nem tudod, mi az a verziókezelés, akkor azt javaslom, hogy nézd meg Sean Gadgston Bevezetés a Gitbe című sorozatát.

8. Használja az Auto Build Tools eszközt

9. Használjon kóddokumentálókat

A több osztályt és névteret felölelő nagy alkalmazásokhoz érdemes automatikusan generált API-dokumentációt készíteni. Ez nagyon hasznos, és a csapat minden tagja tudni fogja, hogy "mi az, ami". És ha több projekten dolgozik egyszerre, akkor ezt a dokumentációt áldásosnak fogja találni, mert valószínűleg elfelejti a projektek közötti szerkezeti jellemzőket és egyéb különbségeket. Az egyik ilyen dokumentáló, amelyet érdemes megfontolni, a DocBlox.

10. Használja a Tesztelést

Sok eszközt nagyon nagyra értékelek, de az egyik, amit egyértelműen értékelek, a keretrendszerek, amelyek segítenek automatizálni a tesztelési folyamatot. A tesztelés (nevezetesen a szisztematikus tesztelés) fontos az Ön millió dolláros pályázatának minden részében. Jó tesztelési eszközök a PHPUnit és a SimpleTest a PHP osztályok egységteszteléséhez. GUI teszteléshez a SeleniumHQ eszközöket ajánlom.

Eredmény

Ebben a cikkben áttekintést kapott a jobb kódírás bevált gyakorlatairól, a kódolási szabványok használatától a csapatban történő formázásig, az újrafaktorálás fontosságáról és annak elsajátításáról, olyan professzionális eszközök használatával, mint a tesztelési keretrendszer, a kóddokumentáló, és verzióvezérlés a kódbázis kezeléséhez. Ha eddig nem tartotta be ezeket a lépéseket, érdemes hozzászoktatni magát és a csapatot.

A legtöbb ingyenes szoftverfejlesztő Linux vagy Mac rendszeren dolgozik, de a Windows támogatása általában megmarad. Működött - hát nem ment -, hadd vigye ki, akinek szüksége van rá. Ebben a cikkben megmutatom, hogyan hozhat létre natív Windows futtatható fájlokat anélkül, hogy kéznél lenne a rendszer.

A Python 2.7 utolsó kiadását idén jelentették be, ezt követően a Python Software Foundation már nem támogatja a 2.7-es ágat. Sok népszerű könyvtár és keretrendszer szintén megszünteti a Python 2 hivatalos támogatását, és számos Linux disztribúció már nem tartalmazza azt az alapértelmezett csomagokban.

Valószínűleg többször is használta a virustotal.com webhelyet annak ellenőrzésére, hogy a binárisok tartalmaznak-e rosszindulatú függvényeket, vagy saját fejlesztéseit tesztelte. Ez a szolgáltatás ingyenes API-val rendelkezik, amelyet ebben a cikkben Pythonban elemezünk.

Bármilyen képesség, hogy egy biztonságos hálózaton belüli gazdagépről csendben hozzáférjen a külvilághoz, kincsesbánya egy pentester számára. Az egyik utolsó elérhető útvonal az NTP, a Clock Time Synchronization Protocol. Forgalma szinte mindenhol engedélyezett, így kiváló adatátviteli eszköz lesz. Megmutatom, hogyan lehet megvalósítani egy alap klienst és szervert C# nyelven.

Biztosan hallottad már, hogy a neurális hálózatok mostanában eléggé jók lettek a képeken lévő objektumok felismerésében. Feladatunk ezen neurális hálózatok használatának elsajátítása, mert erejük sokféle esetben hasznos lehet. Ebben a cikkben bemutatom, hogyan kell használni a leggyakoribb eszközökkel: Python és a Tensorflow és Keras könyvtárak segítségével.

Lehet, hogy már találkozott hangos azonosítással. A bankokban telefonos azonosításra, ellenőrző pontokon történő személyazonosság-ellenőrzésre, valamint a tulajdonost felismerő háztartási hangasszisztensekre használják. Tudod, hogyan működik? Úgy döntöttem, hogy megvizsgálom a részleteket, és elkészítem a saját megvalósításomat.

Korábban a számokkal ellátott captcha nagyszerű módja volt a botok kiszűrésének, de ma már szinte soha nem találjuk ezt a fajtát. Szerintem te magad is sejted, mi a baj: a neurális hálózatok jobban megtanulták felismerni az ilyen captchákat, mint mi. Ebben a cikkben megtudjuk, hogyan működik a neurális hálózat, és hogyan használható a Keras és a Tensorflow a számfelismerés megvalósítására.

Két évvel ezelőtt a Twitch streaming platform fejlesztői bemutattak egy új módot a streamerek és a nézők interakciójára – a Twitch Extensions. Ez a rendszer lehetővé teszi a fejlesztők számára, hogy különböző interaktív elemek létrehozásával kiegészítsék és javítsák mind az oldal, mind a mobilalkalmazás felületét. Elmagyarázom, hogyan működnek ezek a bővítmények, és hogyan hozhat létre sajátot, ha szeretné.

A banki trójaiak évente több millió dolláros kárt okoznak. A Veermakerek igyekeznek a legmélyebb titokban tartani mindent, ami a bankárok belső konyhájával kapcsolatos. Ezért nem hagyhattunk ki egy egyedülálló eseményt - a Carbanak banktrója forráskódjai nyilvánosságra kerültek -, és elkezdtük feltárni a szerkezetét belülről.

A Julia egy fiatal programozási nyelv, amelyet elsősorban tudományos számítástechnikára terveztek. Alkotói azt akarták, hogy betöltse azt a rést, amelyet korábban a Matlab, a klónjai és az R elfoglalt. Az alkotók az úgynevezett kétnyelvűségi problémát próbálták megoldani: az R és a Python kényelmét a C teljesítményével kombinálni. kaptak.

A Forth-ot számos területen használják, beleértve a PCI lapkakészleteket és az űrhajókat, Pavel Durov pedig hasonló nyelvet fog használni a TON kriptovaluta intelligens szerződéseiben. Nagyobb változtatások nélkül az egyik legrégebbi programozási nyelv számos modern paradigma megvalósítását teszi lehetővé. Szóval mi ez a titokzatos Forth?

A gamma mód az egyszerű cseremóddal ellentétben lehetővé teszi tetszőleges hosszúságú üzenetek titkosítását a kitöltési művelet nélkül. Ma arról fogunk beszélni, hogyan valósul meg egy ilyen mód, és megírjuk a végrehajtásához szükséges összes funkciót.

Ha a programjaiban a kódsorok száma milliós nagyságrendű, a hibák keresése ezerszer nehezebbé válik. Szerencsére ma már lehetséges a tesztelés automatizálása fuzzerek segítségével. Hogyan működnek, miért kell őket használni, és mire képesek - erről a mai cikkből megtudhatja.

Az absztrakció a programozás alapja. Sok mindent úgy használunk, hogy nem gondolunk a belső felépítésükre, és remekül működnek. Mindenki tudja, hogy a felhasználói programok rendszerhívásokon keresztül kölcsönhatásba lépnek a kernellel, de elgondolkozott már azon, hogyan működik a gépén?

A hackerek csalásokat fejlesztenek ki, a játékosok megvásárolják, a cégek pedig mérnököket alkalmaznak, hogy új módszereket dolgozzanak ki önmaguk védelmére. A hackerek ismét kiskaput találnak, és a kör bezárul. Ebben a cikkben látni fogjuk, hogyan működnek a különböző védekezési módszerek (és működnek-e!), és megpróbáljuk létrehozni a saját védelmi rendszerünket a csalás ellen.

A Linuxban, mint tudod, sok minden fájlként van implementálva a fájlrendszerben. És ha nincs implementálva, akkor saját maga is megvalósíthatja őket a FUSE segítségével. Windowson ez kevésbé gyakori, de ha mégis nagyon szeretne valamit fájlrendszerként csatolni, akkor ez lehetséges. Megmutatom, hogyan érheti el ezt a C# és a Dokan könyvtár használatával.

A támadók számára a legvonzóbb célpont az online banki szolgáltatások, a botnetek pedig meghatározó szerepet játszanak az ellene irányuló vírustámadások sikerében. De ahhoz, hogy a segítségükkel elfogott adatokból értékes információkat nyerjen ki, a támadónak keményen kell dolgoznia. Ma elmondom, hogyan nehezítheti meg a bottermesztők életét, és hogyan védheti meg alkalmazását a támadásoktól.

A számítógépes játékok jók, mert a siker jutalma igazi élvezet, a kudarc ára pedig alacsony. De néha új képességek felszabadításához vagy a játékmenet felgyorsításához nem a legőszintébb módszereket kell használnia. És ha nem tudod megváltoztatni a világ szabályait, megpróbálhatod meghajlítani őket. Igen, ez így van, beszélni fogunk a csalásokról.

A rengeteg funkcióval és az észlelés elleni védelemmel rendelkező billentyűnaplózók harca több tíz, ha nem több száz dollárba kerül. De a keylogger nem olyan bonyolult dolog, és ha akarja, elkészítheti saját magát, és akár elkerülheti az antivírusok észlelését. Ebben a cikkben megmutatom, hogyan kell ezt megtenni, és közben gyakoroljuk a programok fejlesztését C# nyelven.

A C++-ban létezik olyan, hogy dinamikus adattípus azonosítás (RTTI). Ez egy olyan mechanizmus, amely lehetővé teszi egy változó vagy objektum típusának meghatározását a program végrehajtásának szakaszában. A végrehajtható fájl csökkentése érdekében sok projektben az RTTI ki van kapcsolva, a dynamic_cast és a typeid ettől leáll. De még mindig van mód annak ellenőrzésére, hogy egy objektumpéldány valamilyen alaposztályból származik-e.

A statikusan gépelt nyelvek általában valamilyen okból változó típusok írására kényszerítenek. De ez korántsem mindig így van: a programozási nyelvek elmélete és gyakorlata jelentősen fejlődött, csak az ipar nem fogadja el azonnal ezeket az eredményeket. Ma megnézzük az OCaml nyelvet, és látni fogjuk, hogy a statikus gépelés nem feltétlenül zavaró.

Számos szoftveres védelmi megoldás létezik, amelyek meghatározzák, hogyan dolgozzanak elszigetelt környezetekben, hogyan dolgozzanak hibakeresési technikákkal, szabályozzák a kódjuk integritását, és dinamikusan titkosítsák adataikat a memóriában a dump ellen. Egy másik hatékony biztonsági technika a kódvirtualizáció. Ebben a cikkben megmutatom, hogyan működik.

A legjobb, ha valódi projekten tanuljuk meg a nyelvet, ezért amikor úgy döntöttem, hogy kísérletezek Adával, egy igazi és érdekes feladatot tűztem ki magam elé: írjak egy segédprogramot a hipervizorban végzett munka észlelésére. Ez önmagában is szórakoztató, és az új programozási nyelv új szintre emeli a szórakoztatást.

Életed során nem egyszer találkoztál különböző protokollokkal – egyeseket használtál, másokat megfordíthattál. Néhányat könnyen lehetett olvasni, másokat hexaszerkesztő nélkül nem lehetett megérteni. Ebben a cikkben megmutatom, hogyan hozhat létre saját protokollt, amely TCP/IP-n fut. Kidolgozzuk saját adatstruktúránkat és megvalósítjuk a szervert C# nyelven.

Ha Ön Python-író, valószínűleg látott már dupla aláhúzásjelekbe burkolt metódusdefiníciókat a szabványos könyvtárakban. Ezek a "varázslatos" módszerek számos hasznos interfészt alkotnak, amelyeket mindig használ, például amikor értéket kap az elemszám alapján, vagy nyomtat valamit. Most megmutatom, hogyan használhatja ezeket a módszereket a programokban.

Más alkalmazásokkal kölcsönhatásba lépő szoftverek írásakor néha szükségessé válik a harmadik féltől származó folyamatok végrehajtásának leállítása. Több módszer is segíthet ebben a kérdésben: van, amelyik jól dokumentált, mások erőszakosabb módszerekkel próbálják megölni a szükséges folyamatokat, provokálva az operációs rendszert, hogy rákényszerítsék azokat. Számos módszert mutatok be a folyamatok leállítására és leállítására a Windows rendszerben.

Az amerikai védelmi minisztérium megbízásából kifejlesztett és a világ első programozójáról, Ada Lovelace-ről elnevezett nyelvet aktívan használják repülőgépek, vonatok, űrhajók és egyéb érdekességek irányítására. Nézzük meg a nyelvet a mítoszok prizmája nélkül, és találjuk ki, hogyan profitálhatunk belőle, még akkor is, ha még nem megyünk az űrbe.

Valószínűleg találkoztál már játékkonzol-emulátorokkal, és talán még több mint egy órán keresztül mögöttük ültél. De elgondolkozott már azon, hogyan működik? Az Oroszországban Dendy néven ismert NES példáján megmutatom, hogyan hozhat létre saját emulátort. És egyúttal foglalkozunk ennek a set-top boxnak a furfangos architektúrájával is, amely a maga korához és szerény árához képest elképesztően jó képet produkált.

Valószínűleg hallott már a rosszindulatú alkalmazások olyan osztályáról, mint a lopók. Feladatuk értékes adatok, elsősorban jelszavak kinyerése az áldozat rendszeréből. Ebben a cikkben pontosan elmagyarázom, hogyan teszik ezt, a jelszavak Chrome és Firefox böngészőkből való kinyerésének példájával, és kódpéldákat mutatok be C ++ nyelven.

Interjúkérdések, például „miért kerek az aknafedél?” - ez furcsa. Unalmasak azok a C kódú lapok, amiket fejben kell fordítanod. A legérdekesebb rejtvények az általános technikai és logikai gondolkodásra vonatkoznak. És ma az Abbyy társaság elvtársai pont ilyeneket dobtak nekünk!

A programozási képesség a modern világ egyik legértékesebb készsége. És teljesen mindegy, hogy pontosan mi készteti az embert a kód létrehozására: őszinte érdeklődés, pénzügyi vagy karrier megfontolások - aki tudja, hogyan kell programozni, az nem marad tétlen. A kódolás nagyon hasonlít az idegen nyelven való kommunikációhoz, ezért a programozás elsajátításának első szakaszai gyakran nehézkesek a kezdők számára. Ugyanakkor sokan súlyos kényelmetlenséget tapasztalnak, de idővel minden jobb lesz, és az ember könnyen kódolni kezd, erős mentális költségek nélkül. Manapság számos könyvet és online forrást találhat a kódolás elsajátításához, de minden önálló tanulás stresszhez és negatív érzelmekhez kapcsolódik – ezt mindig emlékezni kell, amikor elkezdi elsajátítani a programozási nyelvet. A kezdő kódoló számára az a legfontosabb, hogy ne hagyja félúton a nyelvtanulást, elveszítve minden érdeklődését e tevékenység iránt. Mit kell tehát tudnia egy leendő programozónak? Milyen nehézségek várnak rá a hasznos készségek elsajátítása felé vezető úton?

Programozási nyelvek

Először el kell döntenie, hogy a kezdő milyen programozási nyelvet szeretne megtanulni. Ez nem olyan egyszerű - sok nyelv van, és mindegyik jó a maga módján. Nagyon fontos, hogy tudatosan válasszunk nyelvet – elvégre sok időt és energiát fektetünk a fejlesztésébe. De akárhogy is legyen, egy kezdő kódolónak tudnia kell, hogy nincsenek jó és rossz programozási nyelvek, de vannak nyelvek, amelyek barátságosak az újoncokkal. Ezért minél könnyebb és érthetőbb a programozási nyelv, annál jobb - az út elején jobb a sikertől a siker felé haladni, az egyszerű feladatoktól a bonyolultabbak felé. Továbbá könnyebb lesz, miután egy kezdő megtanult kódolni az első programozási nyelvén, más nyelvek sokkal könnyebbek lesznek számára.

Nagyon fontos az is, hogy azonnal eldöntsük, milyen nyelvtudás szükséges. Mert a kódolás nagyon eltérő. Ha valaki szoftverfejlesztő szeretne lenni, akkor a Java felé tekinthet, iOS-re való alkalmazások készítésekor pedig a Swift nyelv a megfelelőbb.

Megfelelő oktatási módszertan

A tanulásnak számos módja van, ezért a programozási nyelvek esetében meg kell találni a megfelelő módszertant. Ugyanakkor bölcs dolog lesz kiválasztani a fő módszert, és kiegészíteni másodlagos tanítási módszerekkel. Itt minden nagyon egyéni: ha egy kezdő vizuálisan, vagy füllel jól érzékeli az információkat, akkor a YouTube-on videókat nézegetve tanulhat kódolást, és könyvekből szerezhet egyéb ismereteket. Íme néhány egyszerű, de hatékony képzési rendszer:

Online kódolási tanfolyamok. Vannak, akik hatékonyabban dolgoznak, ha megmondják nekik, mit kell tenniük, és rendszeresen felülvizsgálják teljesítményüket. És nagyon sok ilyen ember van. Ezért ha egy kezdő úgy érzi, hogy problémái vannak az önfegyelemmel, akkor olyan tanfolyamot válasszon, ahol folyamatosan tesztek motiválják. Ez egy jó ötlet – sok ember abbahagyja a programozás tanulását akaraterejükre és lelkesedésükre hagyatkozva. Az öntanuló kódolás nem mindenkinek való, ezt mindig emlékezni kell.

Videó a YouTube-on. Ma már mindent megtudhatsz a YouTube-videók megtekintésével. A tapasztaltabb kódolók pontosan megmutatják, mit kell tenni, ezért ezek az anyagok nagyon hasznosak. Ez egy egyszerű, hatékony és ami a legjobb, ingyenes módja a kódolás megtanulásának. Ha van internet hozzáférésed, akkor legalább egész nap ülhetsz, nézhetsz, ismételhetsz, amíg világossá nem válik.

Könyvek. Ez egy kicsit régimódi módja a programozási nyelvek tanulásának manapság, de tény, hogy a kódolás nem sokat változott az évek során, és a YouTube-on elmondottak nem sokban különböznek egy papírkönyvben leírtaktól. De a könyveknek kétségtelen előnyük van – megkönnyítik a nyelv logikájának megértését, és ez hihetetlenül fontos. Először is azért, mert ha gyakorlati gyakorlatokról van szó, senki sem akar olyan dolgot csinálni, ami érthetetlen vagy lehetetlen. Annak érdekében, hogy ne hagyjon mindent félúton, mindenképpen olvassa el a programozásról szóló könyveket.

Gyakorlat. A legjobb programozók közül sok autodidakta. Nagyon gyakran anélkül kezdték el a kódolást, hogy észrevették volna, mivel a tanulásuk rendszertelen volt. Szembesültek egy problémával, megoldották, szembesültek egy másikkal, és meg is oldották. Az ilyen autodidakta emberek fokozatosan áttérnek egyik problémáról a másikra, bonyolultabbra és egyben elsajátítják a kódolást. Nem különösebben érdemes utánozni az ilyen embereket, de a gyakorlatot nem lehet elhagyni - ez a tanulás sikerének kulcsa.

A siker rögzítése

Egy kezdőnek, aki most kezd el tanulni egy programozási nyelvet, tudnia kell, és fel kell készülnie rá, hogy ez hosszú idő. A kódolás megtanulása egy hosszú folyamat, ahol a kudarcok sokkal erősebbek, mint a sikerek. Annak érdekében, hogy ne hagyja abba tanulmányait, feltétlenül rögzítenie kell minden tevékenységét. Az emberek gyakran elveszítik motivációjukat csak azért, mert nem érzik a fejlődést. És biztosan az lesz, ha a kezdő szorgalmasan foglalkozik. Csak hát a képességek észrevétlenül nőnek, ezt egy kezdő kódoló talán észre sem veszi, hiszen ilyen kis lépésekkel halad a kitűzött cél felé.

Ezért kell időről időre emlékeztetned magad arra, hogy meddig jutottál el, és gyakrabban kell visszanézned. Ez sokat segít – elvégre az első kódsorokat nézve bárki megértheti, hogy halad. Úgy tűnhet, hogy mindezek a személyes rekordok csak szórakoztatóak. Nem, valójában az előrehaladás rögzítése nagyon fontos – rendkívül motiváló a teljes tanulási folyamat során. Ezért annak érdekében, hogy elinduljon, és ne hagyja abba, minden befejezett szakaszt meg kell jelölni.

Világos tanulási idők

Amikor a kódolásról van szó, sok kezdő gyakori hiba, hogy egy csomó feladatot próbál egyszerre elvégezni, és hajlamos abbahagyni, mielőtt az összeset befejezné. Érdekelni kezdik őket valami más, leggyakrabban más feladatok, így egyik projektről a másikra ugrálnak. Nem szabad ezt csinálni. A legjobb szisztematikusan mozogni - megoldani egy problémát vagy megérteni egy példát, amíg minden világossá nem válik. Ez egy nagyon egyszerű elv: egyszerre egy dolgot.

Ugyanakkor meg kell értenie, hogy előre kell haladni, ezért szigorú határidőket kell szabnia magának a nyelv egy vagy másik aspektusának megtanulására. Megpróbálhatja elképzelni, hogy hamarosan jön a vizsga, és mindent meg kell mutatnia, amit elérhet. Ez motivál. Igen, lehet, hogy ezek a személyes feladatok nem túl kényelmesek, de a kódolás önmagában nem szórakoztató. A szigorú fegyelem lehetővé teszi a szükséges készségek megszerzését, a határidők betartása pedig szinte a legfontosabb készség egy szabadúszó programozó számára.

Míg a hétköznapi felhasználók félnek a hibáktól, és nagyon utálják, ha valami elromlik, a programozó egészen más helyzetben van. A hibák a munkájához tartoznak, és nagyon nagy része. Ezért egy kezdő kódolónak meg kell tanulnia a hibaüzenetek olvasását, bármilyen kellemetlen is legyen az. Az ilyen üzenetek sok értékes információt tartalmaznak, mivel elmondják, hogy pontosan mi hiányzott a kód létrehozása során. Fel kell készülnie arra, hogy az ilyen üzenetek nagyon gyakran megjelennek, és még a programozási nyelv tanulmányozása után sem mennek sehova. Nem szabad időt szakítani a hibákra – ez a tanulás legfontosabb része. Ráadásul ez egy jó gyakorlat – ha megérted a problémát, később könnyebb lesz elkerülni a sok hibát. A hibaüzenetek nem büntetés, valójában a kódoló legjobb barátai, akik meg akarják tanítani, hogyan kell mindent jól csinálni.

Kommunikáció más programozókkal

Az ilyen kommunikáció azt is segít megérteni, hogy mások is ugyanolyan gyakran szembesülnek kódolási problémákkal, és ez nem szokatlan. És ha egy kezdő ezen kívül tud segíteni programozó barátjának, akkor kap egy második szelet, és lendülettel folytatja a tanulást. És ne félj a kommunikációtól - a programozók valójában barátságos emberek, gyakran a "saját hullámukon" vannak, és egy kezdőnek csak rezonanciába kell kerülnie.

Helyes és helytelen megközelítés

A kezdő kódolók gyakran megpróbálnak más projektekből kódrészleteket másolni, ezzel megoldva bizonyos problémáikat. Ésszerűnek tűnik számukra, mert a lényeg, hogy minden működjön. Ez téves, és ráadásul nagyon káros megközelítés. És nem azért, mert rossz a másolás, hanem mert másoláskor egy kezdő nem fogja megérteni, hogy ez a kód pontosan mit csinál. Természetesen másolni sokkal könnyebb, mint mindent saját kezűleg megírni.

De a tanulás folyamatában ez a megközelítés oda vezet, hogy a tudásban nagy hiányosságok alakulnak ki, és egy kezdő kódoló egy nap feladja, nem tudja megoldani az előtte álló problémát. És minden elhagyott lesz. A programozási nyelv elsajátítása során az embernek időt kell szánni minden, még első pillantásra jelentéktelen probléma elemzésére is. És ha nem tudsz azonnal megoldást találni, nem adhatod fel. Olvasnia kell, videókat kell néznie, kérdeznie kell másokat - a kezdőnek alaposan meg kell küzdenie a felmerülő nehézségekkel. Hiába tanul nyelvet, az nem teljesen azonos egy normális, emberi nyelv tanulásával. A kódoló a géppel foglalkozik, ezért fontos, hogy megértse, mit csinál. Az ilyen nyelvtudás egyszerűen felbecsülhetetlen, ha a tanulási folyamat gyakorlatba kerül.

A programozási nyelvek tanulása nem a legizgalmasabb dolog. De mindent meg lehet javítani, ha fikcióval közelíted meg a dolgot. Nincs jobb módszer a tanulásra, mint a játékok. Ez vonatkozik a kódolásra is, hiszen gyorsan megtanulhatsz egy nyelvet pusztán játékkal és készségeid fejlesztésével egyidejűleg. Íme néhány játék, amire egy kezdő kódolónak oda kell figyelnie.

  • A CheckiO egy olyan játék, amelyet a böngészőjében is játszhat, a játékban való előrehaladáshoz JavaScript vagy Python nyelvű problémamegoldás szükséges.
  • A CodeMonkey elsősorban gyerekeknek készült, de ha kezdő vagy, megtanulhatsz néhány kódot ezzel a játékkal.
  • A Codewars nem igazi játék, inkább együttműködési kihívás a programozóknak. Ez egy nagyszerű módja annak, hogy megtanuljon kódolni, mivel a játék számos nyelvet támogat.
  • A Code Combat egy online platform, ahol valódi játék közben tanulhatod meg a kódolást.

Sok más játék is használható, minden attól függ, hogy melyik a legmegfelelőbb az Ön számára és a tanult nyelvtől. A játék segít egy kezdőnek, hogy elkezdjen programozóként gondolkodni, és ez nagyon fontos a tanulás legelején.

Következtetés

Vannak, akik gyorsan, mások lassabban tanulják meg a kódolást, de bárki elsajátíthatja a programozási nyelvet. És ne ess bele a gyorsabbba, ha valami nem sikerül. Lassan haladva elérheti a célt, és valóban minden tanulmányozás lassú folyamat. Ha egy kezdő nem akarja feladni a kódolás tanulmányozását, miután csak az alapokat sajátította el, ki kell dolgoznia saját viselkedési stratégiáját. Meg kell értenie, hogy időt, erőfeszítést és néha pénzt fektetnek az edzésbe, ezért csak át kell lépnie az egyik szakaszból a másikba. És ne engedj a nehézségeknek. Igen, a programozás nem mindenkinek való. De bárki megtanulhat nyelvet, megtanulhat kódolni. Tehát csak döntened kell, és a saját utadat kell követned.

1. Önmagam

Ha van benned vasakarat és égető vágy, hogy programozóvá válj, akkor önképzéssel érheted el célodat. Ez nem a legegyszerűbb és legrövidebb út: Önnek magának kell megküzdenie az információs káosszal, és küzdenie kell a halogatás ellen. De viszonylag kevés pénzért vagy ingyen tanulhatsz megfelelő időpontban.

A legegyszerűbb interaktív online kurzusokkal kezdeni. A weben sok olyan található, amelynek anyagai hozzáférhető módon magyarázzák el a programozás alapjait, és irányt szabnak a további fejlődésnek. Különös figyelmet kell fordítani azokra a kurzusokra, amelyek valós projektek példáin oktatnak, vagyis lépésről lépésre elmondják, hogyan kell egy konkrét programot vagy weboldalt létrehozni.

Platform ingyenes webfejlesztő tanfolyamokkal, freeCodeCamp

Ne feledje, hogy gyakorlás nélkül nem lesz sikeres. Tanuljon projekt-orientált kurzusokon, és próbáljon meg olyan programokat és weboldalakat írni, amelyek elemzésre kerülnek. Keressen előadásokat a YouTube-on a kidolgozni kívánt projektek bontásával. Először másolja át mások munkáját, és elemezze azt. Ezután próbáljon eltérni az eredetitől, kísérletezzen, változtassa meg az egyes elemeket, amíg nem tud valami egyedit alkotni.

A nyelvi oldalakon a tanfolyamok és videó előadások mellett hivatalos dokumentáció is elérhető, ill. Ha megértette az alapokat, keresse meg a legújabb kiadványokat, amelyekben a választott programozási nyelv legjobb gyakorlatai alcíme szerepel. Ezek a könyvek a legjobb fejlesztési technikákat tartalmazzák.

Ügyeljen arra, hogy tűzzen ki célt a projekt létrehozására, és folyamatosan dolgozzon rajta.

Ez segít megszilárdítani a megszerzett tudást, és megérteni, milyen információk hiányoznak még. Készségei a projekttel együtt fejlődnek. Ha befejezte, dolgozzon egy újon – ez még nehezebb.

Ha nehézségei vannak a tanulási vagy fejlesztési folyamat során, bármilyen kérdéssel fordulhat a programozói közösségekhez, például a "Toaster"-hez és a Stack Overflow-hoz. Például segítenek megoldani egy problémát, kiválasztani a jó tanfolyamot, vagy rámutatnak a kód hibáira.


Kérdések és válaszok szolgáltatása technológiai témákban "Kenyérpirító"

Kényelmes speciális helyeken csiszolni tudását, ahol versenyezhet más programozókkal, különféle gyakorlati problémákat oldva meg kód segítségével. E szolgáltatások közé tartozik a Codewars, a TopCoder és a HackerRank.

Ha úgy érzi, hogy fejlődése zsákutcába jutott, vagy fel akarja gyorsítani a tanulást, próbálja ki az alábbi lehetőségeket.

2. Mentor segítségével

A mentor egy személyes mentor, aki rámutat a hibákra, figyelmeztet a buktatókra, és segít a tanulmányi irány megtervezésében. A megfelelő időben adott jó ajánlás sok bajtól és sok időt takaríthat meg. Ezért a mentor nem fog bántani senkit.

Nézze meg, vannak-e fejlesztők az ismerősei között. Talán valamelyikük szeretne segíteni. Ha nem ismer ilyen embereket, megkeresheti őket a programozói közösségekben. Például ugyanazon a "Kenyérpirítón". Csak a mentori szolgáltatások nem olcsók, de senki sem akar hiába költeni sok időt idegenekre.

3. "Élő" tanfolyamok tanárai

Az elmúlt években hihetetlenül népszerűvé váltak a táv- és személyes kurzusok olyan tanárokkal, akik a semmiből tanítják a programozókat. Ennek a formátumnak a részeként sokat kell önállóan is dolgoznia. De Ön egy professzionálisan előkészített programban vesz részt, és egy élő ember fogja ellenőrizni a problémák megoldását. A tanfolyamok hátrányai közé tartozik a magas oktatási költség.

Népszerű orosz nyelvű online platformok, amelyek rendszerképzést biztosítanak programozóknak: Netology, GeekBrains és Loftschool.

Ha inkább személyesen szeretne tanulni, kereshet olyan oktatási központokat, amelyek programozást tanítanak a településen. Sajnos az ilyen létesítmények leggyakrabban csak a nagyvárosokban vannak jelen. Példa erre a STEP számítógépes akadémia, amelynek több országban is van fiókja.

4. Az egyetemen

Ha sok időd van hátra, és biztos vagy benne, hogy szeretnéd összekötni az életed a programozással, tanulhatsz informatikát az egyetemen. De ne feledje, hogy a hagyományos oktatási intézmények le vannak maradva a haladás mögött, ezért önállóan kell elsajátítania a modern programozási nyelveket és más technológiákat.

Másrészt az egyetem alapvető ismereteket ad a matematikáról, algoritmusokról és más területekről, amelyek segítségével kiváló programozóvá válhat. A kemény tanulási évek alatt kialakítja a megfelelő gondolkodásmódot, amelynek köszönhetően a szakmai területen mindent menet közben fog meg.

Hogyan válasszunk irányt és nyelvet

Az IT-iparnak számos területe van, amelyek mindegyike saját nyelvet használ. Felsoroljuk a főbb területeket a komplexitás növekedésének sorrendjében:

  1. webfejlesztés. Népszerű nyelvek: JavaScript, PHP, Python, Ruby.
  2. Mobil fejlesztés. Népszerű nyelvek: Java, Swift.
  3. Játékok és programok fejlesztése asztali számítógépekhez. Népszerű nyelvek: C++, C#, C.
  4. Big Data, gépi tanulás. Népszerű nyelvek: Python, R, Scala.

Mire kell figyelni a választásnál

Az irány és különösen a nyelv helyes megválasztásához vegye figyelembe a következő tényezőket: az elsajátítás bonyolultsága és a weben található képzési anyagok száma, személyes preferenciái (pontosan mit szeretne fejleszteni) és a képzés iránti igény. a nyelv a munkaerőpiacon.


Grafikon a nyelvek iránti keresletről a nemzetközi munkaerőpiacon / research.hackerrank.com

A nyelv iránti kereslet az Ön térségében könnyen ellenőrizhető az álláskereső oldalakon. Csak nyissa meg a szoftverfejlesztőknek szóló részt, és tekintse meg a rendelkezésre álló szabad helyek számát.

Ha nem tud dönteni

Ha össze van zavarodva, vessen egy pillantást a JavaScriptre, arra a nyelvre, amelyen szinte az egész web meg van írva. Sok szervezet és programozó azt tanácsolja a kezdőknek, hogy ezt a nyelvet válasszák első nyelvként.

Például a freeCodeCamp oktatási forrás alapítója, Quincy Larson JavaScript minden kezdő számára. Larson egy nagyon egyszerű érvet fogalmaz meg:

  1. A JavaScriptet viszonylag könnyű megtanulni. És ahhoz, hogy valamit írjunk és ezen a nyelven futtassuk, elég egy kódszerkesztő és egy böngésző.
  2. A JavaScript a legkeresettebb nyelv a nemzetközi munkaerőpiacon, és nagy kilátásai vannak. Az olyan nagyvállalatok, mint a Google, a Microsoft és a Facebook, fektetnek be a JavaScript-ökoszisztémába.
  3. A JavaScript hatóköre nagyon széles: a webhelyektől és a böngészős játékoktól a mobil alkalmazásokig.

Ráadásul egy nagy fejlesztői közösség is kialakult e nyelv körül. A JavaScript iránti nagy érdeklődés rengeteg tanfolyamot, könyvet és egyéb oktatási tartalmat kínál.

Mit kell még tudnia egy programozónak: matematikát és angol nyelvet?

Minden programozónak szüksége van a . Az olyan területeken, mint a játékgrafika fejlesztés vagy a big data, elengedhetetlen a matematikai elme. De ha webfejlesztésről és egyszerű programok készítéséről van szó, akkor a legtöbb esetben a matematika mellőzhető. Bár ebben a kérdésben nincs egyetértés a szakemberek között.

De az angol nyelv megértése, legalább a dokumentáció folyékony olvasásának szintjén, minden programozó számára kötelező. A hivatalos dokumentumok és a legtöbb oktatási anyag elsősorban angol nyelven jelenik meg. gyakran elavultak a fordítás megjelenése előtt. Emellett az angol nyelvtudás távlatokat nyit az egész világgal való együttműködésre.

Hogyan szerezheti meg az első tapasztalatot és az első munkát

Ahhoz, hogy megtalálja első programozói munkáját, rendelkeznie kell egy portfólióval. Ez egy Ön által létrehozott projekt, vagy inkább több, amely bemutatja az összes fejlesztői képességét. A legtöbb kurzus programja a portfóliójába beépíthető projektek kidolgozását tartalmazza.

Nagyon értékes elem lesz az önéletrajzban a munkatapasztalat jelenléte, különösen a csapatfejlesztés. De hol szerezheti be, ha az első munkahelyét keresi?

  1. Több rendelés teljesítése a következőhöz: . Lehet szabadúszó vagy upwork. Ajánlja fel szolgáltatásait ingyenesen, akkor az első ügyfelek hozzád fordulnak.
  2. Keressen hasonló gondolkodású embereket, és hozzon létre velük egy közös projektet. Szinte minden oktatási platformon egyesülnek az emberek ilyen célból, ahol vannak programozási tanfolyamok.
  3. Válassz olyan tanfolyamokat, amelyek szervezője segíti a foglalkoztatást. Például a GeekBrains-nél a képzés után megnyílik a hozzáférés a különböző cégek gyakorlati helyeihez, beleértve a fizetetteket is. A GeekUniversity és a STEP munkalehetőséget garantál végzettjeik számára.

Mielőtt ne felejtsen el rákeresni a weben az álláskeresőknek gyakran feltett feladatok és kérdések listájára.