Mis on kodeerimine. Kuidas ja kus õppida kodeerimist? Kuidas valida suunda ja keelt

Ja ma selgitan, miks.

Viisteist aastat tagasi soovitati mul programmeerijaks hakata, kuna olin introvert ja häbelik, samuti analüütilise meelega ja sotsiaalse elu täielik puudumine, aga ma lihtsalt naersin ja karjusin selliseid nõuandjaid maha. Olin siis teismeline ja minu teismelise ettekujutuses elas programmeerija igavesti oma vanematemaja keldris, oli vistrikuline ja kandis inetuid prille, tal polnud kunagi tüdruksõpra, aga fantaasiad printsess Leiast tasusid end ära (ja päris sageli) . Mulle see elustiil ei meeldinud. Lisaks oli mul siis juba tüdruksõber ja päris ilus.

Kuus aastat edasi: istun Budapesti lennujaamas ja loen raamatut HTML-ist...

Veel kuue aasta pärast palkas mind üks Põhja-Iiri idufirma generalistiks. Jah, tundub, et see võttis veidi aega. Aga kui palju täpsemalt? Ma ei oska täpselt öelda. Aga palju. Müütiline 10 tuhat tundi? Ei. Kui mul palutaks anda ligikaudne arv, siis ma ütleksin, et selleks päevaks olin "kodeerinud" umbes 8 tuhat tundi. Tehniliselt võttes oleksin 10 000 tunni reegli järgi 2000 tunni pärast sellel alal asjatundja.

Aga kas ma saan?

See mul õnnestus 8 tuhande tunniga saavutada. Võtke end mugavalt, sest minu lugu saab olema pikk. Olen kodeerinud järgmistes keeltes: C, HTML, CSS, JavaScript, Java (Android), Swift, PHP, Ruby, Python, Chuck, SQL, töötanud järgmiste raamistikega: Node, Angular, Bootstrap, Foundation, React, Rails , CodeIgniter, Ionic ja loodud sihtlehed, Wordpressi saidid, e-kaubanduse lahendused, e-õppe sisu, Moodle'i ja Totara saidid, Mahara saidid, Common Cartridge ja SCORM paketid, Androidi ja iOS-i rakendused, mashupid, sisemised veebirakendused, e-raamatud, ajakirjad , mängud ja lauamängude lisarakendused. Kuhu ma siis juhin?

Minu mõte on selles, et valdkonda kui sellist pole olemas, seega on selles eksperdiks saamise ülesanne kättesaamatu. Kodeerimine ei ole valdkond. Arvutiteadus jah, aga see on täiesti erinev.

Kodeerimine on see, mille poole presidendid, õpetajad ja vanemad sunnivad nooremat põlvkonda, nagu lammaste juhatamine võimaluste kuldsele väljale.

See lubadus on unistus, propaganda nii hästi välja töötatud ja väljendatud (pole praegu isegi sõnades väljendatud), et see on absurdselt taandatud piltidele, et armsad roomavad pisikesed mõistaksid, et loogiline mõtlemine on tähtsam kui soov ennast toita (palun pöörake tähelepanu sarkasmile).

15 aastat hiljem on kodeerimisest saanud kodeerimise popkultuuriversioon ning nüüd on elanikel suured lootused tulevasele kodeerijate armeele, tänu millele on meil tehisintellekti poolt juhitavad kodud, liiklus, jaekaubandus, meelelahutus, aga ka revolutsioon meditsiinis, tööstuses ja seksis – lihtsalt hull, selle jaoks pole muud sõna. Ja kõik sellepärast programmeerimist peetakse kodeerimiseks ja teoreetiliselt on seda lihtne õppida. Aga see on tõest nii kaugel...

Allikas: lifehacker

Selgitame välja. "Faktina" võetav müüt, et igaüks suudab mõne programmeerimiskeele selgeks saada vaid mõne tunniga, peab paika ainult teatud hetkeni ja see punkt saabub õppimise varases staadiumis. Tõepoolest, keele saab selgeks ühe päevaga. Üldiselt on nii, et kui seate endale eesmärgiks saada kuu aja pärast programmeerimises polüglotiks, siis saate töötamise ajal õppida 8-10 keelt, kui õpite nädalavahetustel. Aga siin on see hõõrumine. Igal programmeerimiskeelel on oma raamatukogud ja ka süntaktilised funktsioonid ning seda kõike ei saa lihtsalt ega kiiresti ega nädalavahetusega selgeks õppida. Tegelikult ei ole reaalses maailmas programmeerimiskeel peamine probleem.

See, et sa räägid inglise keelt, ei tähenda, et võiksid kirjutada romaane või isegi novelle. Sama võib öelda ka kodeerimise kohta.

See, et olete keele õppinud, ei tähenda, et teate, kuidas programmi kirjutada. Lisage sellele hulgaliselt raamistikke, pistikprogramme, teeke, eelprotsessoreid, järelprotsessoreid, kodeerimisstandardeid, tööstusstandardeid, testipõhist arendust (TDD), käitumispõhist arendust (BDD), sisuhaldussüsteeme, failide versiooni muutmist, pidevat integreerimist (CI) , väljalaskehaldus.ja juurutamine, silumine, piletimüük, juga mudelid ja scrum meetodid ning nende kombinatsioonid ning ma pole kindel, kas olen neile kõigile veel nimesid pannud. Põhimõte on see, et "kodeerija" mõiste hõlmab peaaegu kõike, mida eespool mainitud. Programmeerimine mõjutab ainult väikest osa. Tähtis, aga siiski väike.

Programmeerimise lihtsustamine jätkub aga...

Apple tõi turule Playgroundsi, MIT tõi turule Scratchi ja Lego valmistab ette Boosti ning kõik üritavad nooremale ja kasvavale põlvkonnale kodeerimist müüa, justkui sooviksid nad 2020. aastatel täita uute programmeerijate töökohti.

Mina näen seda nii: "Ära muretse koodi pärast, võta need virtuaalsed pusletükid ja ongi kõik, saad programmeerida." Kui see oleks tõsi. Programmeerimise kohta peate teadma järgmist: see on tekstipõhine. See on alati olnud ja on veel palju aastaid. Lapsed, kes mängivad Lego Boosti, Mänguväljakuid või Scratchit, ei ole 22-aastaselt edukamad programmeerijad kui lapsed, kes alustasid programmeerimist 16-aastaselt ja töötasid tõelise programmeerimiskeelega. Tegelikult, kust sellised ootused tulevad? Ma ei usu, et mu laps õpib enne 22. eluaastat ise leiba teenima. Aga kui ta õpib kodeerimist 6 aastat, siis garanteerin, et leiab kiiresti töö.

Mänguväljakud Apple'i poolt.

Koodi kirjutamine võib olla tarkvaraarendusprotsessi kõige raskem osa. Kui te ei korralda kõike algusest peale (eriti suurte projektide puhul), ei võta pärast seda kodeerimine ja silumine mitte ainult väga kaua aega, vaid toob ka palju peavalu.

Hea kood on hästi hooldatud, korduvkasutatav ja testitav. Järgmised sammud näitavad teile ja/või teie arendusmeeskonnale, kuidas tulla toime erinevate tarkvaraülesannetega ja hoida kõike võimalikult heas korras. Tutvustan teile "parimaid tavasid", mis aitavad teil head koodi kirjutada ning aitavad teil ja teie meeskonnal olla õnnelikud ja tõhusad.

1. Kasutage kodeerimisstandardeid

Halba ja korrastamata koodi on lihtne kirjutada, kuid sellist koodi on raske säilitada. Hea kood säilitab tavaliselt mingisuguse muutujate nimetamise, vormindamise ja muu sellise standardi. Sellised standardid on kasulikud, kuna need seavad asjad sõltuvaks sellest, kes koodi pärast loeb, sealhulgas teie.

Saate luua oma kodeerimisstandardid, kuid kõige parem on kasutada laialdaselt kasutatavat. Kasutades Zend Frameworki kodeerimisstandardit või PSR-1 kodeerimisstiili, on teistel lihtsam kohaneda.

2. Kasutage kommentaare

Kommentaarid on kriitiliselt vajalikud. Te ei õpi neid hindama enne, kui kirjutate tuhandeid koodiridu ja jätate selle paariks päevaks seisma ja siis tulete tagasi ja proovite sellest aru saada. Kasulikud kommentaarid muudavad nende elu lihtsamaks, kes pärast teid koodiga töötavad.

Kirjutage selged üherealised kommentaarid arusaamatutele koodilõikudele; kirjutada funktsioonide ja meetodite parameetrite ja funktsionaalsuse täielik kirjeldus; keeruliste loogikaplokkide puhul kirjelda vajadusel nende ees olevat loogikat. Ärge unustage oma kommentaare värskendada!

3. Refaktor

Koodi ümbertöötamine on kasulik harjumus ka tootlikele arendajatele. Uskuge või mitte, aga peate oma koodi iga päev ümber tegema, muidu on sellega midagi valesti! Refaktoreerimine hoiab teie koodi heas seisukorras, kuid mida ja kuidas on vaja ümber teha?

Peaksite ümber arvestama kõike alates arhitektuurist kuni meetodite ja funktsioonideni, muutujate nimede, meetodile edastatud argumentide arvu ja muu taoliseni.

Refactoring on rohkem kunst kui teadus, kuid on mõned head reeglid, mis võivad seda veidi valgustada:

  • Kui teie funktsioon või meetod on pikem kui 20-25 rida, on seal ilmselt liiga palju loogikat ja saate selle jagada kaheks või enamaks väiksemaks funktsiooniks/meetodiks.
  • Kui teie funktsiooni või meetodi nimi on pikem kui 20 tähemärki, peaksite nime muutma või esimese reegli abil kogu funktsiooni/meetodi üle vaatama.
  • Kui teil on palju pesastatud silmuseid, kasutate liiga palju ressursse, ilma et peaksite sellest arugi saama. Üldiselt peaksite loogika üle vaatama, kui olete pesastanud rohkem kui kaks silmust. Kolm pesastatud silmust – lihtsalt kohutav!
  • Mõelge, kas on sobivaid kujundusmustreid, mida saate kasutada. Te ei tohiks kasutada mustreid ainult mustrite kasutamise pärast, vaid mustrid pakuvad tõestatud lahendusi, mis võivad olla sobivad.

4. Vältige globaalset koodi

Globaalsed muutujad ja tsüklid võivad lisada probleeme, kui teie kood kasvab miljonite ridadeni. Need mõjutavad koodi kohtades, kus seda on raske näha, või põhjustavad probleeme muutujate, objektide jne nimedega. Mõelge kaks korda, enne kui saastate globaalset nimeruumi muutujate, funktsioonide, tsüklite ja muu sellisega.

Ideaalis ei tohiks te ühtegi plokki globaalselt määratleda. Switch-laused, try-catch-laused, foreach-tsüklid, while-tsüklid ja muu taoline tuleb deklareerida meetodi või funktsiooni sees. Meetodid tuleb deklareerida klassides ning klassid ja funktsioonid nimeruumides.

5. Kasuta tähendusega nimesid

Ärge kunagi kasutage muutujate jaoks selliseid nimesid nagu $k , $m ja $test. Kuidas saab sellist koodi edaspidi lugeda? Heas koodis muutujate, meetodite/funktsioonide, klasside nimed; peab kandma tähendust. Mõned head muutujate nimed on $request , $dbResult ja $tempFile (sõltub teie kodeerimisstiilist).

6. Kasutage tähendusega struktuure

Rakenduse struktureerimine on oluline; ärge kasutage keerulisi struktuure, hoidke seda alati lihtsana. Kataloogidele ja failidele nime andmisel kasutage nimetamistavasid, millega nõustute meeskonnaga või mis vastab kodeerimisstandarditele. Eraldage alati PHP-rakenduse neli osa üksteisest - CSS, HTML-mallid, JavaScript, PHP-kood - ja proovige igaühe jaoks eraldada teegid äriloogikast. Samuti on hea mõte hoida kataloogihierarhia võimalikult väike, et saaksite hõlpsasti koodi osi üles leida ja struktuuris navigeerida.

7. Kasutage versioonikontrollisüsteeme

Varem on head arendusmeeskonnad CVS-i usaldanud. Nüüd on meil saadaval erinevaid lahendusi. Muudatuste ja versioonide haldamine peaks olema lihtne, kuid tõhus, seega valige see, milline versioonihaldussüsteem teie arendusmeeskonna töövooga kõige paremini sobib. Eelistan kasutada hajutatud versioonihaldussüsteemi nagu Git või Mercurial; nii vaba/avatud lähtekoodiga kui ka väga võimsad. Kui te ei tea, mis on versioonikontroll, soovitan teil vaadata Sean Gadgstoni Giti seeriat.

8. Kasutage automaatse koostamise tööriistu

9. Kasuta koodi dokumenteerijaid

Suurte, mitut klassi ja nimeruumi hõlmavate rakenduste puhul on hea mõte kasutada automaatselt loodud API dokumentatsiooni. See on väga kasulik ja kõik meeskonnaliikmed teavad, "mis on mis". Ja kui töötate korraga mitme projekti kallal, on see dokumentatsioon õnnistuseks, sest tõenäoliselt unustate projektide struktuurilised omadused ja muud erinevused. Üks selline dokumenteerija, mida võiksite kaaluda, on DocBlox.

10. Kasutage testimist

On palju tööriistu, mida ma väga hindan, kuid üks, mida hindan selgelt, on raamistikud, mis aitavad testimisprotsessi automatiseerida. Testimine (nimelt süstemaatiline testimine) on teie miljoni dollari suuruse taotluse iga osa jaoks oluline. Head testimisvahendid on PHPUnit ja SimpleTest teie PHP klasside testimiseks. GUI testimiseks soovitan SeleniumHQ tööriistu.

Tulemus

Selles artiklis nägite ülevaadet parema koodi kirjutamise parimatest tavadest, alates kodeerimisstandardite kasutamisest kuni meeskonnatöö vormindamiseni, refaktoreerimise tähtsusest ja selle valdamisest, kasutades professionaalseid tööriistu, nagu testimisraamistik, koodidokumentaator, ja versioonikontroll koodibaasi haldamiseks. Kui seni pole neist sammudest kinni pidanud, tasub ennast ja meeskonda nendega harjuda.

Enamik tasuta tarkvara arendajaid töötab Linuxis või Macis, kuid Windowsi tugi jääb tavaliselt üle. Töötas – no ei töötanud – las see portib, kel vaja. Selles artiklis näitan teile, kuidas luua Windowsi algfaile ilma seda süsteemi käepärast olemata.

Python 2.7 viimane väljalase avalikustati sel aastal, pärast mida Python Software Foundation enam 2.7 haru ei toeta. Paljud populaarsed raamatukogud ja raamistikud loobuvad ka Python 2 ametlikust toest ning paljud Linuxi distributsioonid ei sisalda seda enam oma vaikepakettides.

Tõenäoliselt olete saiti virustotal.com kasutanud rohkem kui korra, et kontrollida, kas binaarfailid sisaldavad pahatahtlikke funktsioone, või oma arenduste testimiseks. Sellel teenusel on tasuta API, mida selles artiklis Pythonis analüüsime.

Igasugune võimalus turvalises võrgus olevast hostist vaikselt välismaailmale juurde pääseda on pentesteri jaoks aare. Üks viimaseid saadaolevaid teid on NTP, kellaaja sünkroonimisprotokoll. Selle liiklus on lubatud peaaegu kõikjal, seega on see suurepärane andmete transport. Näitan teile, kuidas juurutada põhiklienti ja -serverit C#-s.

Olete kindlasti kuulnud, et närvivõrgud on viimasel ajal muutunud piltidelt objektide äratundmisel päris pagana heaks. Meie ülesanne on õppida neid närvivõrke kasutama, sest nende võimsus võib olla kasulik mitmel juhul. Selles artiklis näitan teile, kuidas seda kasutada kõige tavalisemate tööriistade abil: Python ning Tensorflow ja Keras teegid.

Võib-olla olete juba tuvastanud häälega. Seda kasutatakse pankades telefoni teel tuvastamiseks, identiteedi kontrollimiseks kontrollpunktides ja majapidamises kasutatavates häälassistentides, mis suudavad omaniku ära tunda. Kas sa tead, kuidas see töötab? Otsustasin uurida üksikasju ja teha oma teostuse.

Kui varem oli numbritega captcha suurepärane viis robotite väljarookimiseks, siis nüüd pole seda tüüpi peaaegu kunagi leitud. Ma arvan, et saate ise aimata, milles asi: närvivõrgud on õppinud selliseid captchasid paremini ära tundma kui me. Selles artiklis näeme, kuidas närvivõrk töötab ja kuidas kasutada Kerast ja Tensorflow't numbrituvastuse rakendamiseks.

Kaks aastat tagasi tutvustasid Twitchi voogedastusplatvormi arendajad striimijate ja vaatajate jaoks uut suhtlemisviisi – Twitchi laiendusi. See süsteem võimaldab arendajatel täiendada ja täiustada nii saidi kui ka mobiilirakenduse liidest, luues erinevaid interaktiivseid elemente. Selgitan, kuidas need laiendused töötavad ja kuidas soovi korral ise luua.

Pangandustroojalased tekitavad igal aastal miljoneid dollareid kahju. Veermakers püüavad hoida kõike, mis on seotud pankurite siseköögiga, sügavaimas saladuses. Seetõttu ei saanud me mööda vaadata ainulaadsest sündmusest – Carbanaki pangandustroja allikate avalikkuse ette toomisest – ja asusime uurima selle struktuuri seestpoolt.

Julia on noor programmeerimiskeel, mis on loodud peamiselt teaduslikuks andmetöötluseks. Selle loojad soovisid, et see täidaks nišši, mille varem hõivasid Matlab, selle kloonid ja R. Loojad püüdsid lahendada nn kahe keele probleemi: ühendada R ja Pythoni mugavus ning C jõudlus. Vaatame, mida nad said.

Forthi kasutatakse erinevates valdkondades, sealhulgas PCI-kiibikomplektides ja kosmoselaevades, ning Pavel Durov kasutab sarnast keelt krüptovaluuta TON nutikates lepingutes. Ilma suuremate muudatusteta võimaldab üks vanimaid programmeerimiskeeli rakendada paljusid kaasaegseid paradigmasid. Mis see salapärane Forth siis on?

Gammarežiim, erinevalt lihtsast asendusrežiimist, võimaldab teil krüpteerida suvalise pikkusega sõnumeid ilma polsterdamistoimingut kasutamata. Täna räägime sellest, kuidas sellist režiimi rakendatakse, ja kirjutame kõik selle rakendamiseks vajalikud funktsioonid.

Kui teie programmide koodiridade arv ulatub miljonitesse, muutub vigade leidmine tuhat korda keerulisemaks. Õnneks on tänapäeval võimalik fuzzerite abil testimist automatiseerida. Kuidas need töötavad, miks neid kasutada ja milleks nad võimelised on - sellest saate teada tänasest artiklist.

Abstraktsioon on programmeerimise alus. Me kasutame paljusid asju nende sisemisele struktuurile mõtlemata ja need töötavad suurepäraselt. Kõik teavad, et kasutajaprogrammid suhtlevad tuumaga süsteemikõnede kaudu, kuid kas olete kunagi mõelnud, kuidas see teie masinas töötab?

Häkkerid arendavad pettusi, mängijad ostavad neid, ettevõtted palkavad insenere, et töötada välja uusi viise enda kaitsmiseks. Häkkerid leiavad taas lünga ja ring sulgub. Selles artiklis näeme, kuidas erinevad kaitsemeetodid töötavad (ja kas need toimivad!) ja proovime luua oma kaitsesüsteemi petmise vastu.

Nagu teate, rakendatakse Linuxis paljusid asju failisüsteemis failidena. Ja kui neid pole rakendatud, saate neid FUSE abil ise rakendada. Windowsis on see vähem levinud, kuid kui soovite siiski midagi failisüsteemina ühendada, on see võimalik. Näitan teile, kuidas seda C# ja Dokani raamatukogu abil saavutada.

Ründaja jaoks on kõige atraktiivsem sihtmärk internetipangandus, mille vastu suunatud viirusrünnakute õnnestumises mängivad määravat rolli botnetid. Kuid selleks, et nende abiga pealtkuulatud andmetest väärtuslikku teavet ammutada, peab ründaja kõvasti tööd tegema. Täna räägin teile, kuidas teha robotikasvatajate elu keeruliseks ja kaitsta oma rakendust rünnakute eest.

Arvutimängud on head, sest edu tasu on tõeline nauding ja ebaõnnestumise hind on madal. Kuid mõnikord kasutate uute võimete avamiseks või lihtsalt mängu kiirendamiseks mitte kõige ausamaid viise. Ja kui te ei saa maailma reegleid muuta, võite proovida neid painutada. Jah, see on õige, me räägime pettustest.

Paljude funktsioonide ja tuvastamiskaitsega klahvilogijate vastu võitlemine võib maksta kümneid kui mitte sadu dollareid. Kuid klahvilogija pole nii keeruline asi ja soovi korral saate seda ise teha ja isegi vältida viirusetõrje tuvastamist. Selles artiklis näitan teile, kuidas seda teha, ja samal ajal harjutame programmide arendamist C# keeles.

C++ keeles on olemas selline asi nagu dünaamiline andmetüübi tuvastamine (RTTI). See on mehhanism, mis võimaldab teil programmi täitmise etapis määrata muutuja või objekti tüübi. Täitmisfaili vähendamiseks on paljudes projektides RTTI välja lülitatud, dynamic_cast ja typeid lakkavad sellest töötamast. Kuid ikkagi on võimalus kontrollida, kas objekti eksemplar on tuletatud mõnest põhiklassist.

Staatiliselt trükitud keeled sunnivad teid tavaliselt mingil põhjusel kirjutama muutujatüüpe. Kuid see pole kaugeltki alati nii: programmeerimiskeelte teooria ja praktika on märkimisväärselt edasi arenenud, lihtsalt tööstus ei aktsepteeri neid saavutusi kohe. Täna vaatame OCamli keelt ja näeme, et staatiline tippimine ei pruugi olla häiriv.

Seal on palju tarkvarakaitselahendusi, mis määravad, kuidas töötada isoleeritud keskkondades, töötada silumisvastaste meetoditega, kontrollida nende koodi terviklikkust ja krüptida dünaamiliselt mälus olevaid andmeid tõrjumise vastu. Teine võimas turvatehnika on koodi virtualiseerimine. Selles artiklis näitan teile, kuidas see töötab.

Kõige parem on keelt õppida pärisprojekti raames, nii et kui otsustasin Adaga katsetada, seadsin endale tõelise ja huvitava ülesande: kirjutada utiliit hüperviisori töö tuvastamiseks. See on iseenesest meelelahutuslik ja uus programmeerimiskeel viib meelelahutuse uuele tasemele.

Oled elus rohkem kui korra kokku puutunud erinevate protokollidega – mõnda kasutasid, teisi oled võib-olla ümber pööranud. Mõnda oli lihtne lugeda, teistest ei saanud ilma hex-redaktorita aru. Selles artiklis näitan teile, kuidas luua oma protokoll, mis töötab TCP/IP peal. Arendame välja oma andmestruktuuri ja juurutame serveri C# keeles.

Kui olete Pythoni kirjutaja, olete ilmselt näinud tavalistes teekides kahekordsete allkriipsudega mähitud meetodite määratlusi. Need "maagilised" meetodid moodustavad palju kasulikke liideseid, mida te pidevalt kasutate, näiteks elemendi numbri järgi väärtuse hankimisel või millegi välja printimisel. Nüüd näitan teile, kuidas neid meetodeid oma programmides kasutada.

Teiste rakendustega suhtleva tarkvara kirjutamisel osutub mõnikord vajalikuks kolmandate osapoolte protsesside täitmine lõpetada. Selles küsimuses võivad abiks olla mitmed meetodid: mõned on hästi dokumenteeritud, teised üritavad vajalikke protsesse vägivaldsemalt tappa, provotseerides operatsioonisüsteemi sundima neid lööma. Näitan teile mitmeid viise protsesside lõpetamiseks ja hävitamiseks Windowsis.

USA kaitseministeeriumi tellimusel välja töötatud ja maailma esimese programmeerija Ada Lovelace’i järgi nime saanud keelt kasutatakse aktiivselt lennukite, rongide, kosmoselaevade ja muu huvitava juhtimiseks. Vaatame keelt ilma müütide prismata ja mõtleme välja, kuidas saame sellest kasu, isegi kui me veel kosmosesse ei lähe.

Tõenäoliselt olete kohanud mängukonsooli emulaatoreid ja võib-olla isegi istunud nende taga rohkem kui tund. Kuid kas olete kunagi mõelnud, kuidas see töötab? Venemaal Dendy nime all tuntud NES-i näitel näitan teile, kuidas luua oma emulaatorit. Ja samal ajal tegeleme selle digiboksi kavala arhitektuuriga, mis andis oma aja ja tagasihoidliku hinna kohta hämmastavalt hea pildi.

Olete ilmselt kuulnud sellisest pahatahtlike rakenduste klassist nagu vargused. Nende ülesanne on ammutada ohvri süsteemist väärtuslikke andmeid, eelkõige paroole. Selles artiklis selgitan täpselt, kuidas nad seda teevad, kasutades Chrome'i ja Firefoxi brauserite paroolide ekstraheerimise näidet, ja näitan koodinäiteid keeles C ++.

Intervjuu küsimused nagu "miks on kaevu kaas ümmargune?" - see on imelik. C-koodiga lehed, mida pead oma peas koostama, on igavad. Kõige huvitavamad mõistatused on mõeldud üldiseks tehniliseks ja loogiliseks mõtlemiseks. Ja täna viskasid seltsimehed Abbyy seltskonnast meile just sellise!

Programmeerimisoskus on tänapäeva maailmas üks kõige väärtuslikumaid oskusi. Ja tegelikult pole vahet, mis täpselt paneb inimese koodi looma: siiras huvi, rahalised või karjäärikaalutlused – need, kes oskavad programmeerida, ei jää jõude. Kodeerimine on väga sarnane võõrkeeles suhtlemisega, seega on programmeerimise õppimise esimesed etapid algajatele sageli keerulised. Samal ajal kogevad paljud inimesed tõsist ebamugavust, kuid aja jooksul läheb kõik paremaks ja inimene hakkab kergesti kodeerima, ilma tugevate vaimsete kuludeta. Tänapäeval leiate palju raamatuid ja veebiressursse, mis aitavad teil koodi õppida, kuid igasugune iseõppimine on seotud stressi ja negatiivsete emotsioonidega – seda tuleks iga programmeerimiskeele valdamist alustades alati meeles pidada. Algaja kodeerija jaoks on kõige olulisem mitte pooleli jätta keeleõpinguid, kaotades selle tegevuse vastu igasuguse huvi. Mida peab siis tulevasel programmeerijal teadma? Millised raskused ootavad teda kasulike oskuste omandamise teel?

Programmeerimiskeeled

Kõigepealt peate otsustama programmeerimiskeele üle, mida algaja soovib õppida. See pole nii lihtne - keeli on palju ja igaüks neist on omal moel hea. Väga oluline on valida teadlikult keel – selle arendamiseks kulub ju palju aega ja vaeva. Kuid kuidas on, algaja kodeerija peab teadma, et pole olemas häid ja halbu programmeerimiskeeli, kuid on keeli, mis on algajatele sõbralikud. Seega, mida lihtsam ja arusaadavam on programmeerimiskeel, seda parem - tee alguses on parem minna edust eduni, lihtsate ülesannete juurest keerukamate juurde. Edasi on see lihtsam, kui algaja õpib oma esimeses programmeerimiskeeles kodeerima, on teised keeled tema jaoks palju lihtsamad.

Samuti on väga oluline kohe otsustada, milleks keeleoskust vaja on. Sest kodeerimine on väga erinev. Kui keegi soovib saada tarkvaraarendajaks, siis võib vaadata Java poole ning iOS-ile rakenduste loomise puhul sobib paremini Swifti keel.

Sobiv õppemetoodika

Õppida on palju, seega tuleb programmeerimiskeelte puhul leida sobiv metoodika. Samal ajal on mõistlik valida põhimeetod ja täiendada seda sekundaarsete õppemeetoditega. Siin on kõik väga individuaalne: kui algaja on visuaalne või tajub hästi kõrva järgi infot, siis saab ta kodeerimist õppida YouTube’is videoid vaadates ja muid teadmisi raamatutest ammutada. Siin on mõned lihtsad, kuid tõhusad koolitusskeemid:

Online kodeerimise kursused. Mõned inimesed töötavad tõhusamalt, kui neile öeldakse, mida teha, ja nad vaatavad regulaarselt oma tegevust üle. Ja selliseid inimesi on palju. Seega, kui algaja tunneb, et tal on probleeme enesedistsipliiniga, siis tuleks valida kursus, kus teda motiveerivad pidevalt testid. See on hea mõte – paljud inimesed loobuvad programmeerimise õppimisest, tuginedes oma tahtejõule ja entusiasmile. Iseõppiv kodeerimine ei sobi kõigile, seda tuleks alati meeles pidada.

Video YouTube'is. Täna saate YouTube'i videoid vaadates kõike õppida. Kogenumad kodeerijad näitavad täpselt, mida tuleb teha, seega on need materjalid väga kasulikud. See on lihtne, tõhus ja mis kõige parem – tasuta viis kodeerimise õppimiseks. Kui teil on juurdepääs Internetile, saate istuda, vaadata, korrata vähemalt terve päeva, kuni see selgub.

Raamatud. See on tänapäeval veidi vanamoodne viis programmeerimiskeelte õppimiseks, kuid tõsiasi on see, et kodeerimine pole aastate jooksul palju muutunud ja YouTube'is räägitu ei erine palju paberraamatus öeldust. Kuid raamatutel on vaieldamatu eelis – need muudavad keele loogika mõistmise lihtsamaks ja see on uskumatult oluline. Esiteks sellepärast, et praktiliste harjutuste puhul ei taha keegi teha midagi arusaamatut või võimatut. Et mitte kõike pooleli jätta, tuleks kindlasti lugeda programmeerimise teemalisi raamatuid.

Harjuta. Paljud parimad programmeerijad on iseõppinud. Väga sageli alustasid nad kodeerimist, ilma et nad seda mõistsid, kuna nende õppimine oli ebasüstemaatiline. Nad seisid silmitsi probleemiga, lahendasid selle, seisid silmitsi teisega ja lahendasid ka selle. Tasapisi liiguvad sellised iseõppijad ühelt probleemilt teisele, keerulisemale ja samas valdavad kodeerimist. Selliseid inimesi ei tasu eriti jäljendada, kuid praktikat ei saa loobuda – see on õppimise edu võti.

Edu parandamine

Algaja, kes alles alustab programmeerimiskeele õppimist, peab teadma ja olema selleks valmis, et see on pikk aeg. Kodeerimise õppimine on pikk protsess, kus ebaõnnestumised tunduvad palju tugevamad kui õnnestumised. Et õpinguid mitte pooleli jätta, tuleb kindlasti kõik oma tegevused kirja panna. Inimesed kaotavad väga sageli motivatsiooni lihtsalt seetõttu, et nad ei tunne edusamme. Ja seda ta kindlasti saab, kui algaja usinasti tegeleb. Lihtsalt oskused kasvavad märkamatult, algaja kodeerija ei pruugi seda märgatagi, kui liigub nii väikeste sammudega seatud eesmärgi poole.

Sellepärast peadki endale aeg-ajalt meelde tuletama, kui kaugele oled jõudnud, ja sagedamini tagasi vaatama. See aitab palju – lõppude lõpuks saab igaüks oma esimesi koodiridu vaadates aru, et ta edeneb. Võib tunduda, et kõik need isiklikud rekordid on lihtsalt lõbu. Ei, tegelikult on edusammude salvestamine väga oluline – see on kogu õppeprotsessi vältel väga motiveeriv. Seetõttu on selleks, et alustada ja mitte lõpetada, iga läbitud etapp ära märkida.

Selged õppeajad

Kodeerimisel on levinud viga, mida paljud algajad teevad, et nad proovivad korraga teha hunniku ülesandeid ja kipuvad enne kõigi lõpetamist lõpetama. Neid hakkab huvitama midagi muud, enamasti muud ülesanded, nii et nad hüppavad ühest projektist teise. Sa ei tohiks seda teha. Kõige parem on liikuda süstemaatiliselt – lahendada üks probleem või mõista näidet, kuni kõik saab selgeks. See on väga lihtne põhimõte: üks asi korraga.

Kuid samal ajal peate mõistma, et edasiliikumine on vajalik, seega peate määrama endale ranged tähtajad selle või teise keele aspekti õppimiseks. Võite proovida ette kujutada, et eksam on varsti tulemas ja peate näitama kõike, mida saate saavutada. See motiveerib. Jah, kõik need isiklikud ülesanded ei pruugi olla väga mugavad, kuid kodeerimine iseenesest pole lõbus. Range distsipliin võimaldab omandada vajalikud oskused ning tähtaegadest kinnipidamine on vabakutselise programmeerija jaoks peaaegu kõige olulisem oskus.

Kui tavakasutajad kardavad eksida ja tõesti vihkavad seda, kui midagi valesti läheb, siis programmeerija on hoopis teises olukorras. Vead on osa tema tööst ja väga suur osa. Seetõttu peaks algaja kodeerija ise õppima veateateid lugema, ükskõik kui ebameeldiv see ka poleks. Sellised sõnumid sisaldavad palju väärtuslikku teavet, kuna need ütlevad, mis täpselt koodi loomisel kahe silma vahele jäi. Peate olema valmis, et sellised teated ilmuvad väga sageli ja ei kao kuhugi isegi pärast programmeerimiskeele õppimise lõpetamist. Te ei saa vigade kallal töötamiseks aega säästa – see on õppimise kõige olulisem osa. Lisaks on see hea tava – kui probleemist aru saad, on hiljem palju vigu lihtsam vältida. Veateated ei ole karistus, tegelikult on need kodeerija parimad sõbrad, kes tahavad õpetada, kuidas kõike õigesti teha.

Suhtlemine teiste programmeerijatega

Selline suhtlus aitab mõista ka seda, et teised inimesed seisavad sama sageli silmitsi kodeerimisprobleemidega ja see pole ebatavaline. Ja kui algaja saab lisaks oma sõpra-programmeerijat aidata, siis saab ta teise tuule ja ta õpib hoogsalt edasi. Ja ärge kartke suhtlemist – programmeerijad on tegelikult sõbralikud inimesed, nad on sageli "oma lainel" ja algaja vajab lihtsalt resonantsi.

Õige ja vale lähenemine

Algajad kodeerijad püüavad sageli kopeerida kooditükke teistest projektidest, lahendades mõne nende probleemide. See tundub neile mõistlik, sest peaasi, et kõik toimiks. See on vale ja pealegi väga kahjulik lähenemine. Ja mitte sellepärast, et kopeerimine oleks halb, vaid sellepärast, et kopeerimisel ei saa algaja aru, mida see kood täpselt teeb. Kopeerimine on muidugi palju lihtsam kui kõike ise kirjutamine.

Kuid õppimise käigus viib selline lähenemine selleni, et teadmistes tekivad suured lüngad ja algaja kodeerija annab ühel päeval alla, suutmata probleemi enne teda lahendada. Ja kõik jäetakse maha. Programmeerimiskeelt õppides tuleb kahetsemata aega kulutada ühegi, isegi esmapilgul tähtsusetu probleemi analüüsimisele. Ja kui te ei suuda kohe lahendust leida, ei saa te alla anda. Tuleb lugeda, videoid vaadata, teiste käest küsida – algaja peab tekkinud raskustega põhjalikult tegelema. Kuigi ta õpib keelt, ei ole see täpselt sama, mis tavalise inimkeele õppimine. Kodeerija tegeleb masinaga, seega on oluline, et ta mõistaks, mida ta teeb. Sellised keeleoskused on lihtsalt hindamatud, kui õppeprotsess tuleb praktikasse.

Programmeerimiskeelte õppimine pole kõige põnevam asi. Aga kõike saab parandada, kui läheneda asjale ilukirjandusega. Pole paremat viisi millegi õppimiseks kui mänge mängides. See kehtib ka kodeerimise kohta, sest lihtsalt mängides ja samal ajal oma oskusi täiendades saab kiiresti keele selgeks. Siin on mõned mängud, millele algaja kodeerija peaks tähelepanu pöörama.

  • CheckiO on mäng, mida saate mängida oma brauseris. Mängus edasiliikumiseks on vaja JavaScripti või Pythoni probleemide lahendamist.
  • CodeMonkey on mõeldud peamiselt lastele, kuid kui olete algaja, saate seda mängu mängides koodi õppida.
  • Codewars ei ole päris mäng, vaid pigem koostöö väljakutse programmeerijatele. See on suurepärane viis kodeerimise õppimiseks, kuna mäng toetab paljusid keeli.
  • Code Combat on veebiplatvorm, kus saate õppida kodeerima pärismängu mängides.

Saate kasutada palju muid mänge, kõik sõltub sellest, millised neist on teie jaoks parimad, ja õpitavast keelest. Mäng aitab algajal hakata mõtlema nagu programmeerija ja see on väga oluline juba õppimise alguses.

Järeldus

Mõned inimesed õpivad kodeerimist kiiresti, teised aeglasemalt, kuid programmeerimiskeele valdab igaüks. Ja ärge langege kiiremasse, kui midagi ei õnnestu. Eesmärgini võite jõuda aeglaselt liikudes ja tõepoolest on igasugune õppimine aeglane protsess. Kui algaja ei soovi kodeerimise õppimisest loobuda, olles omandanud vaid põhitõed, peab ta välja töötama oma käitumisstrateegia. Peate mõistma, et koolitusse investeeritakse aega, vaeva ja mõnikord ka raha, seega peate lihtsalt liikuma ühest etapist teise. Ja ärge alistuge raskustele. Jah, programmeerimine ei sobi kõigile. Kuid igaüks võib õppida keelt, õppida kodeerima. Nii et peate lihtsalt otsustama ja minema oma rada.

1. Ise

Kui sul on raudne tahe ja põletav soov saada programmeerijaks, siis võid oma eesmärgi saavutada läbi eneseharimise. See pole kõige lihtsam ja lühim tee: peate ise tegelema teabekaosega ja võitlema edasilükkamisega. Aga õppida saab endale sobival ajal suhteliselt väikese raha eest või tasuta.

Lihtsaim viis alustada on interaktiivsete veebikursustega. Veebis on palju, mille materjalid selgitavad programmeerimise põhitõdesid ligipääsetaval viisil ja seavad suuna edasiseks arenguks. Pöörake erilist tähelepanu nendele kursustele, mis õpetavad reaalsete projektide näidetel, st nad räägivad teile samm-sammult, kuidas luua konkreetset programmi või veebisaiti.

Platvorm tasuta veebiarenduskursustega freeCodeCamp

Pidage meeles, et ilma harjutamiseta ei saavuta te edu. Õppige projektikesksetelt kursustelt ja proovige kirjutada programme ja veebisaite, mida nendes analüüsitakse. Otsige YouTube'ist loenguid projektide jaotusega, mida soovite arendada. Esiteks kopeerige teiste inimeste tööd ja analüüsige seda. Seejärel proovige originaalist kõrvale kalduda, katsetage, muutke üksikuid elemente, kuni saate luua midagi ainulaadset.

Lisaks kursustele ja videoloengutele on keelelehekülgedel saadaval ametlik dokumentatsioon ja. Kui mõistate põhitõdesid, otsige hiljutisi väljaandeid alapealkirjaga Parimad praktikad valitud programmeerimiskeele kohta. Need raamatud sisaldavad parimaid arendustehnikaid.

Seadke kindlasti eesmärk oma projekti loomiseks ja töötage selle kallal pidevalt.

See aitab omandatud teadmisi kinnistada ja mõista, milline info sul veel puudu on. Teie oskused arenevad koos projektiga. Kui olete selle lõpetanud, töötage uue kallal - keerulisem.

Kui teil on õppimis- või arendusprotsessis raskusi, võite alati kõigi küsimustega pöörduda programmeerimiskogukondade poole, nagu "Röster" ja Stack Overflow. Näiteks aitavad need lahendada probleemi, valida hea kursuse või juhtida tähelepanu vigadele koodis.


Küsimuste ja vastuste teenus tehnoloogilistel teemadel "Röster"

Oma oskusi on mugav lihvida spetsiaalsetel saitidel, kus saate võistelda teiste programmeerijatega, lahendades koodi abil erinevaid praktilisi probleeme. Nende teenuste hulka kuuluvad Codewars, TopCoder ja HackerRank.

Kui tunnete, et teie areng on jõudnud ummikusse või soovite õppimist kiirendada, proovige järgmisi võimalusi.

2. Mentori abiga

Mentor on isiklik mentor, kes juhib tähelepanu vigadele, hoiatab lõkse eest ja aitab kavandada õppesuunda. Hea soovitus õigel ajal võib säästa palju probleeme ja säästa palju aega. Seetõttu ei tee mentor kellelegi haiget.

Uurige, kas teie tuttavate hulgas on arendajaid. Võib-olla soovib üks neist teid aidata. Kui te selliseid inimesi ei tunne, võite neid otsida programmeerimiskogukondadest. Näiteks sellesama "Röstri" peal. Ainult mentorteenused ei ole odavad, kuid keegi ei taha kulutada palju aega võõraste inimeste peale.

3. "Elav" kursuste õpetajad

Kaug- ja silmast-silma kursused õpetajatega, kes õpetavad programmeerijaid nullist, on viimastel aastatel muutunud uskumatult populaarseks. Selle formaadi raames tuleb ka palju omaette tööd teha. Kuid te tegelete professionaalselt ettevalmistatud programmiga ja elav inimene kontrollib probleemide lahendusi. Kursuste miinusteks on kõrge hariduse hind.

Populaarsed venekeelsed veebiplatvormid, mis pakuvad programmeerijatele süsteemikoolitust: Netology, GeekBrains ja Loftschool.

Kui eelistate õppida isiklikult, võite otsida hariduskeskusi, mis õpetavad programmeerimist teie piirkonnas. Kahjuks on sellised asutused enamasti ainult suurtes linnades. Näiteks võib tuua STEPi arvutiakadeemia, millel on filiaalid mitmes riigis.

4. Ülikoolis

Kui sul on jäänud palju aega ja oled kindel, et tahad oma elu programmeerimisega siduda, võid ülikoolis arvutiteadust õppida. Kuid pidage meeles, et traditsioonilised haridusasutused jäävad edusammudest maha, nii et peate iseseisvalt valdama kaasaegseid programmeerimiskeeli ja muid tehnoloogiaid.

Teisest küljest annab ülikool põhjapanevaid teadmisi matemaatikast, algoritmidest ja muudest valdkondadest, mis aitavad teil saada kõrgetasemeliseks programmeerijaks. Raske õppimise aastate jooksul kujundate välja õige mõtteviisi, tänu millele haarate professionaalses valdkonnas kõike lennult.

Kuidas valida suunda ja keelt

IT-tööstuses on mitu valdkonda, millest igaüks kasutab oma keelt. Loetleme peamised valdkonnad keerukuse suurenemise järjekorras:

  1. Veebiarendus. Populaarsed keeled: JavaScript, PHP, Python, Ruby.
  2. Mobiilne arendus. Populaarsed keeled: Java, Swift.
  3. Mängude ja programmide arendamine lauaarvutitele. Populaarsed keeled: C++, C#, C.
  4. Big Data, masinõpe. Populaarsed keeled: Python, R, Scala.

Mida otsida valides

Suuna ja eelkõige keele õige valiku tegemiseks arvestage järgmiste teguritega: omandamise keerukus ja koolitusmaterjalide arv veebis, teie isiklikud eelistused (mida täpselt soovite arendada) ja nõudlus keel tööturul.


Graafik keelenõudlusest rahvusvahelisel tööturul / research.hackerrank.com

Nõudlust keele järele teie piirkonnas on tööotsingu saitidel lihtne kontrollida. Lihtsalt avage tarkvaraarendajate jaotis ja vaadake vabade töökohtade arvu.

Kui sa ei suuda otsustada

Kui olete segaduses, vaadake JavaScripti, keelt, milles peaaegu kogu veeb on kirjutatud. Paljud organisatsioonid ja programmeerijad soovitavad algajatel valida oma esimeseks keeleks just see keel.

Näiteks õpperessursi freeCodeCamp asutaja Quincy Larson JavaScript kõigile algajatele. Larson esitab väga lihtsa argumendi:

  1. JavaScripti on suhteliselt lihtne õppida. Ja selles keeles millegi kirjutamiseks ja käivitamiseks piisab koodiredaktorist ja brauserist.
  2. JavaScript on rahvusvahelisel tööturul enim nõutud keel ja sellel on suured väljavaated. Suured ettevõtted nagu Google, Microsoft ja Facebook investeerivad JavaScripti ökosüsteemi.
  3. JavaScriptil on väga lai ulatus: veebisaitidest ja brauserimängudest mobiilirakendusteni.

Lisaks on selle keele ümber tekkinud suur arendajate kogukond. Suur huvi JavaScripti vastu pakub tohutul hulgal kursusi, raamatuid ja muud harivat sisu.

Mida peaks programmeerija veel teadma: matemaatikat ja inglise keelt?

Iga programmeerija vajab sügavat mõistmist. Selliste valdkondade jaoks nagu mängugraafika arendamine või suurandmed on matemaatiline mõistus kohustuslik. Kui aga rääkida veebiarendusest ja lihtsate programmide loomisest, siis enamasti saab matemaatikast loobuda. Kuigi professionaalide seas pole selles küsimuses üksmeelt.

Kuid inglise keele mõistmine, vähemalt dokumentatsiooni ladusa lugemise tasemel, on kõigile programmeerijatele kohustuslik. Ametlikud dokumendid ja enamik õppematerjale ilmuvad peamiselt inglise keeles. on sageli enne tõlke avaldamist aegunud. Lisaks avab inglise keele oskus väljavaateid töötamiseks kogu maailmaga.

Kuidas saada oma esimene kogemus ja esimene töökoht

Programmeerijana oma esimese töö leidmiseks peab teil olema portfoolio. See on teie loodud projekt või pigem mitu, mis näitavad kõiki teie arendajaoskusi. Enamiku kursuste programm sisaldab projektide väljatöötamist, mida saab teie portfooliosse lisada.

Väga väärtuslik punkt CV-s on töökogemuse olemasolu, eriti meeskonna arendamine. Aga kust seda saada, kui otsid oma esimest tööd?

  1. Täitke mitu tellimust ettevõtte jaoks. See võib olla vabakutseline või Upwork. Pakkuge oma teenuseid tasuta, siis tulevad esimesed kliendid teie juurde.
  2. Leia mõttekaaslasi ja loo nendega ühine projekt. Inimesed ühinevad sellistel eesmärkidel peaaegu igal haridusplatvormil, kus on programmeerimiskursused.
  3. Valige kursused, mille korraldaja aitab tööle asumisel. Näiteks GeekBrainsis avaneb pärast koolitust ligipääs erinevate ettevõtete praktikakohtadele, ka tasulistele. GeekUniversity ja STEP tagavad oma lõpetajatele töökoha.

Enne seda ärge unustage veebist otsida ülesannete ja küsimuste loendeid, mida tööotsijatele sageli esitatakse.