Ինչ է կոդավորումը: Ինչպե՞ս և որտեղ սովորել կոդավորումը: Ինչպես ընտրել ուղղություն և լեզու

Եվ ես կբացատրեմ, թե ինչու:

Տասնհինգ տարի առաջ ինձ խորհուրդ տվեցին դառնալ ծրագրավորող, քանի որ ես ինտրովերտ և ամաչկոտ մարդ էի, ինչպես նաև ունեի վերլուծական միտք և իսպառ բացակայում էի սոցիալական կյանքը, բայց ես պարզապես ծիծաղեցի և հեռացրի նման խորհրդատուներից: Այն ժամանակ ես դեռահաս էի, և իմ պատանեկան երևակայության մեջ ծրագրավորողը հավերժ ապրում էր իր ծնողների տան նկուղում, կճեպ էր և տգեղ ակնոց էր կրում, նա երբեք ընկերուհի չուներ, բայց արքայադուստր Լեյայի մասին երևակայությունները տվեցին իրենց արդյունքը (և բավականին հաճախ): . Ինձ դուր չեկավ այս ապրելակերպը: Բացի այդ, այն ժամանակ ես արդեն ընկերուհի ունեի, այն էլ՝ բավականին գեղեցիկ։

Արագ առաջ վեց տարի. ես նստած եմ Բուդապեշտի օդանավակայանում և կարդում եմ գիրք HTML-ի մասին...

Եվս վեց տարի հետո ես աշխատանքի ընդունվեցի հյուսիսիռլանդական նորաստեղծ ընկերությունում որպես գեներալ: Այո, կարծես որոշ ժամանակ պահանջվեց: Բայց կոնկրետ ինչքա՞ն: Չեմ կարող հստակ ասել։ Բայց շատ. Առասպելական 10 հազար ժամ. Ոչ Եթե ​​ինձ խնդրեին մոտավոր թիվ տալ, ապա ես կասեի, որ այդ օրը ես մոտ 8 հազար ժամ էի «կոդավորել»։ Տեխնիկապես, 10,000 ժամ կանոնի համաձայն, 2000 ժամից ես կլինեի մասնագետ այս ոլորտում:

Բայց արդյոք ես

Դա այն է, ինչին ես կարողացա հասնել 8 հազար ժամում։ Հարմար եղեք, քանի որ իմ պատմությունը երկար կլինի։ Ես կոդավորել եմ հետևյալ լեզուներով՝ C, HTML, CSS, JavaScript, Java (Android), Swift, PHP, Ruby, Python, Chuck, SQL, աշխատել եմ հետևյալ շրջանակներով՝ Node, Angular, Bootstrap, Foundation, React, Rails: , CodeIgniter, Ionic և ստեղծված վայրէջք էջեր, wordpress կայքեր, էլեկտրոնային առևտրի լուծումներ, eLearning բովանդակություն, Moodle և Totara կայքեր, Mahara կայքեր, Common Cartridge և SCORM փաթեթներ, Android և iOS հավելվածներ, mashups, ներքին վեբ հավելվածներ, էլեկտրոնային գրքեր, ամսագրեր , խաղեր և լրացուցիչ հավելվածներ սեղանի խաղերի համար։ Այսպիսով, ուր եմ ես տանում:

Ասածս այն է, որ ոլորտ, որպես այդպիսին, չկա, ուստի դրա փորձագետ դառնալու խնդիրն անհասանելի է։ Կոդավորումը դաշտ չէ։ Համակարգչային գիտություն, այո, բայց դա բոլորովին այլ է:

Կոդավորումն այն է, որին նախագահները, ուսուցիչներն ու ծնողները մղում են երիտասարդ սերնդին, ինչպես ոչխարներին տանում դեպի հնարավորությունների ոսկե դաշտերը:

Այս խոստումը երազանք է, այնքան լավ մշակված և արտահայտված քարոզչություն (հիմա նույնիսկ բառերով չի արտահայտվում), որ անհեթեթորեն վերածվել է նկարների, որպեսզի սողացող փոքրիկները հասկանան, որ տրամաբանական մտածողությունն ավելի կարևոր է, քան ինքն իրեն կերակրելու ցանկությունը (խնդրում եմ. ուշադրություն դարձրեք սարկազմին):

15 տարի անց կոդավորումը դարձել է կոդավորման փոփ մշակույթի տարբերակը, և այժմ բնակչությունը մեծ հույսեր է կապում կոդավորողների ապագա բանակի հետ, որի շնորհիվ մենք կունենանք արհեստական ​​ինտելեկտով կառավարվող տներ, երթևեկություն, մանրածախ առևտուր, զվարճանքներ, ինչպես նաև հեղափոխություն բժշկության, արդյունաբերության և սեքսի մեջ՝ ուղղակի խելագարություն, դրա համար այլ բառ չկա։ Եվ բոլորը, քանի որ ծրագրավորումը համարվում է կոդավորում, իսկ տեսականորեն հեշտ է սովորել. Բայց սա այնքան հեռու է իրականությունից...

Աղբյուրը՝ lifehacker

Եկեք պարզենք այն: Առասպելն այն մասին, որ յուրաքանչյուրը կարող է տիրապետել ծրագրավորման լեզուներից մեկին ընդամենը մի քանի ժամում, որպես «փաստ», ճիշտ է միայն մինչև որոշակի կետ, և այս կետը գալիս է ուսուցման վաղ փուլում: Իսկապես, լեզու կարելի է սովորել մեկ օրում։ Ընդհանրապես, եթե ձեր առջեւ նպատակ եք դրել մեկ ամսում դառնալ ծրագրավորման պոլիգլոտ, աշխատանք ունենալով հանդերձ, կարող եք սովորել 8-10 լեզու, եթե սովորում եք հանգստյան օրերին։ Բայց ահա շփումը: Յուրաքանչյուր ծրագրավորման լեզու ունի իր գրադարանները, ինչպես նաև շարահյուսական առանձնահատկությունները, և այս ամենը հնարավոր չէ սովորել հեշտությամբ կամ արագ կամ շաբաթավերջին: Փաստորեն, իրական աշխարհում ծրագրավորման լեզուն հիմնական խնդիրը չի լինի։

Միայն այն պատճառով, որ դուք խոսում եք անգլերեն, չի նշանակում, որ կարող եք գրել վեպեր կամ նույնիսկ պատմվածքներ: Նույնը կարելի է ասել կոդավորման մասին։

Միայն այն, որ դուք լեզու եք սովորել, չի նշանակում, որ դուք գիտեք, թե ինչպես գրել ծրագիր: Դրան ավելացրեք շրջանակների, պլագինների, գրադարանների, նախապրոցեսորների, հետպրոցեսորների, կոդավորման ստանդարտների, արդյունաբերության ստանդարտների, փորձարկման վրա հիմնված զարգացում (TDD), վարքագծի վրա հիմնված զարգացում (BDD), բովանդակության կառավարման համակարգեր, ֆայլերի վերափոխում, շարունակական ինտեգրում (CI) , թողարկման կառավարում և տեղակայում, վրիպազերծում, տոմսերի տեղադրում, ջրվեժի մոդելներ և սկրիմ մեթոդներ և դրանց համակցություններ, և ես վստահ չեմ, որ դեռ բոլորին անվանել եմ: Ներքևի տողն այն է, որ «կոդավորիչ» հասկացությունն ընդգրկում է վերը նշված գրեթե ամեն ինչ: Ծրագրավորումն ազդում է միայն մի փոքր մասի վրա: Կարևոր, բայց դեռ փոքր:

Այնուամենայնիվ, ծրագրավորումը շարունակում է պարզեցված լինել...

Apple-ը գործարկեց Playgrounds-ը, MIT-ը՝ Scratch-ը, իսկ Lego-ն պատրաստում է Boost-ը, և բոլորը փորձում են կոդավորում վաճառել երիտասարդ և աճող սերնդին, կարծես 2020-ականներին ցանկանում են լրացնել նոր ծրագրավորողների աշխատատեղերը:

Ես դա տեսնում եմ այսպես. «Մի անհանգստացիր կոդի համար, վերցրու այս փազլի վիրտուալ կտորները և վերջ, կարող ես ծրագրավորել»: Եթե ​​սա ճիշտ լիներ: Ահա թե ինչ պետք է իմանաք ծրագրավորման մասին. այն տեքստային է: Միշտ եղել է և կլինի դեռ երկար տարիներ: Lego Boost, Playgrounds կամ Scratch խաղացող երեխաները մինչև 22 տարեկան չեն լինի ավելի կայացած ծրագրավորողներ, քան այն երեխաները, ովքեր սկսել են ծրագրավորում սովորել 16 տարեկանում և աշխատել իրական ծրագրավորման լեզվով: Փաստորեն, որտեղի՞ց են նման սպասումները։ Չեմ կարծում, որ իմ երեխան կսովորի սեփական հացը վաստակել մինչև 22 տարեկանը։ Բայց եթե կոդավորում սովորի 6 տարի, ուրեմն երաշխավորում եմ, որ արագ աշխատանք կգտնի։

Apple-ի խաղահրապարակներ.

Կոդ գրելը կարող է լինել ծրագրային ապահովման մշակման գործընթացի ամենադժվար մասը: Եթե ​​ամեն ինչ ի սկզբանե չես կազմակերպում (հատկապես խոշոր նախագծերի դեպքում), կոդավորումն ու վրիպազերծումը դրանից հետո ոչ միայն շատ երկար ժամանակ կպահանջի, այլ նաև շատ գլխացավեր կբերի։

Լավ կոդը լավ պահպանված է, վերօգտագործելի և փորձարկվող: Հետևյալ քայլերը ձեզ և/կամ ձեր մշակողների թիմին ցույց կտան, թե ինչպես պետք է կարգավորել ծրագրային ապահովման տարբեր առաջադրանքներ և ամեն ինչ հնարավորինս լավ պահել: Ես ձեզ կներկայացնեմ «լավագույն փորձը», որը կօգնի ձեզ լավ կոդ գրել և կօգնի ձեզ և ձեր թիմին երջանիկ և արդյունավետ պահել:

1. Օգտագործեք կոդավորման ստանդարտներ

Վատ, անկազմակերպ կոդ գրելը հեշտ է, բայց այդպիսի կոդ պահելը դժվար է: Լավ կոդը սովորաբար պահպանում է որոշակի ստանդարտ փոփոխականների անվանման, ձևաչափման և այլնի համար: Նման ստանդարտները օգտակար են, քանի որ դրանք պայմանավորում են նրանով, ով կարդում է կոդը հետո, այդ թվում՝ ձեզ:

Դուք կարող եք ստեղծել ձեր սեփական կոդավորման ստանդարտները, բայց ավելի լավ է օգտագործել այն, որը լայնորեն կիրառվում է: Օգտագործելով Zend Framework կոդավորման ստանդարտը կամ PSR-1 կոդավորման ոճը, ուրիշների համար ավելի հեշտ կլինի հարմարվել:

2. Օգտվե՛ք մեկնաբանություններից

Մեկնաբանությունները խիստ անհրաժեշտ են: Դուք չեք սովորում գնահատել դրանք, մինչև չգրեք հազարավոր տող կոդ և չթողնեք այն մի քանի օր, իսկ հետո վերադառնաք և չփորձեք պարզել այն: Օգտակար մեկնաբանությունները հեշտացնում են նրանց կյանքը, ովքեր ձեզնից հետո կաշխատեն ծածկագրի հետ։

Գրեք հստակ, մեկ տողով մեկնաբանություններ կոդի անհասկանալի հատվածների համար; գրել գործառույթների և մեթոդների պարամետրերի և ֆունկցիոնալության ամբողջական նկարագրություն. բարդ տրամաբանական բլոկների համար անհրաժեշտության դեպքում նկարագրեք նրանց առջև գտնվող տրամաբանությունը: Մի մոռացեք թարմացնել ձեր մեկնաբանությունները:

3. Ռեֆակտոր

Կոդի վերամշակումը նույնպես օգտակար սովորություն է արդյունավետ մշակողների համար: Հավատում եք, թե ոչ, դուք պետք է ամեն օր վերամշակեք ձեր կոդը, հակառակ դեպքում ինչ-որ բան այն չէ: Refactoring-ը ձեր կոդը լավ վիճակում է պահում, բայց ի՞նչը պետք է վերամշակվի և ինչպե՞ս:

Դուք պետք է վերամշակեք ամեն ինչ՝ ճարտարապետությունից մինչև մեթոդներ և գործառույթներ, փոփոխականների անուններ, մեթոդին փոխանցված արգումենտների քանակ և այլն:

Refactoring-ը ավելի շատ արվեստ է, քան գիտություն, բայց կան մի քանի լավ կանոններ, որոնք կարող են որոշակի լույս սփռել դրա վրա.

  • Եթե ​​ձեր ֆունկցիան կամ մեթոդը 20-25 տողից երկար է, հավանաբար այնտեղ չափազանց շատ տրամաբանություն կա, և դուք կարող եք այն բաժանել երկու կամ ավելի փոքր ֆունկցիաների/մեթոդների:
  • Եթե ​​ձեր ֆունկցիայի կամ մեթոդի անունը 20 նիշից ավելի է, դուք պետք է վերանայեք անունը կամ վերանայեք ամբողջ ֆունկցիան/մեթոդը՝ օգտագործելով առաջին կանոնը:
  • Եթե ​​դուք ունեք բազմաթիվ nested loops, դուք օգտագործում եք չափազանց շատ ռեսուրսներ, առանց գիտակցելու դա: Ընդհանուր առմամբ, դուք պետք է վերանայեք տրամաբանությունը, եթե դուք տեղադրել եք ավելի քան երկու օղակ: Երեք ներդիր օղակներ՝ ուղղակի սարսափելի:
  • Մտածեք, թե արդյոք կան համապատասխան դիզայնի նախշեր, որոնք կարող եք օգտագործել: Դուք չպետք է օգտագործեք նախշերը միայն նախշերի օգտագործման համար, այլ նախշերը առաջարկում են ապացուցված լուծումներ, որոնք կարող են տեղին լինել:

4. Խուսափեք գլոբալ կոդից

Համաշխարհային փոփոխականները և օղակները կարող են խնդիրներ առաջացնել, երբ ձեր կոդը մեծանում է միլիոնավոր տողերի: Դրանք ազդում են կոդի վրա այն վայրերում, որտեղ այն դժվար է տեսնել, կամ խնդիրներ են առաջացնում փոփոխականների, օբյեկտների և այլնի անունների հետ: Մտածեք երկու անգամ՝ նախքան գլոբալ անվանատարածքը փոփոխականներով, ֆունկցիաներով, հանգույցներով և այլնով աղտոտելը:

Իդեալում, դուք չպետք է գլոբալ բլոկներ սահմանեք: Switch հայտարարությունները, try-catch հայտարարությունները, foreach հանգույցները, while հանգույցները և նմանատիպերը պետք է հայտարարվեն մեթոդի կամ ֆունկցիայի ներսում: Մեթոդները պետք է հայտարարվեն դասերի ներսում, իսկ դասերն ու գործառույթները՝ անվանատարածքներում:

5. Օգտագործեք անունները իմաստով

Երբեք մի օգտագործեք անուններ, ինչպիսիք են $k-ը, $m-ը և $test-ը ձեր փոփոխականների համար: Ինչպե՞ս կարելի է նման ծածկագիրը կարդալ ապագայում: Լավ կոդում՝ փոփոխականների, մեթոդների/ֆունկցիաների, դասերի անվանումները. պետք է իմաստ ունենա. Փոփոխականների մի քանի լավ անուններ են $request, $dbResult և $tempFile (կախված է ձեր կոդավորման ոճից):

6. Օգտագործեք իմաստով կառույցներ

Ձեր դիմումի կառուցվածքը կարևոր է. մի օգտագործեք բարդ կառուցվածքներ, միշտ պարզ պահեք: Գրացուցակներ և ֆայլեր անվանելիս օգտագործեք անվանման կոնվենցիա, որը դուք համաձայն եք թիմի հետ, կամ որը համապատասխանում է կոդավորման չափանիշներին: Միշտ առանձնացրեք PHP հավելվածի չորս մասերը միմյանցից՝ CSS, HTML կաղապարներ, JavaScript, PHP կոդը, և յուրաքանչյուրի համար փորձեք առանձնացնել գրադարանները բիզնես տրամաբանությունից: Նաև լավ գաղափար է, որ գրացուցակի հիերարխիան հնարավորինս փոքր լինի, որպեսզի կարողանաք հեշտությամբ գտնել կոդի մասերը և նավարկեք կառուցվածքում:

7. Օգտագործեք Տարբերակների վերահսկման համակարգեր

Նախկինում զարգացման լավ թիմերը վստահել են CVS-ին: Այժմ մենք ունենք հասանելի լուծումների մի շարք: Փոփոխությունների և վերանայման կառավարումը պետք է լինի պարզ, բայց արդյունավետ, այնպես որ ընտրեք այն տարբերակը, որը վերահսկման համակարգը լավագույնս կաշխատի ձեր մշակողների թիմի հոսքի հետ: Ես նախընտրում եմ օգտագործել բաշխված տարբերակների կառավարման համակարգ, ինչպիսին է Git-ը կամ Mercurial-ը; ինչպես անվճար/բաց կոդով, այնպես էլ շատ հզոր: Եթե ​​չգիտեք, թե ինչ է տարբերակի վերահսկումը, խորհուրդ եմ տալիս ծանոթանալ Շոն Գադգսթոնի «Գիտ» շարքի ներածությանը:

8. Օգտագործեք Auto Build Tools

9. Օգտագործեք ծածկագրի փաստաթղթերը

Բազմաթիվ դասեր և անունների տարածքներ ընդգրկող մեծ հավելվածների համար լավ գաղափար է ունենալ ավտոմատ ստեղծվող API փաստաթղթեր: Սա շատ օգտակար է, և թիմում բոլորը կիմանան «ինչն ինչ է»: Եվ եթե դուք միաժամանակ աշխատում եք մի քանի նախագծերի վրա, ապա այս փաստաթուղթը օրհնություն կգտնեք, քանի որ հավանաբար կմոռանաք նախագծերի կառուցվածքային առանձնահատկությունները և այլ տարբերությունները: Նման փաստաթղթավորողներից մեկը, որը դուք կարող եք հաշվի առնել, DocBlox-ն է:

10. Օգտագործեք թեստավորում

Կան բազմաթիվ գործիքներ, որոնք ես իսկապես գնահատում եմ, բայց մեկը, որը ես հստակ գնահատում եմ, շրջանակներն են, որոնք օգնում են ավտոմատացնել թեստավորման գործընթացը: Թեստավորումը (մասնավորապես համակարգված թեստավորումը) կարևոր է ձեր միլիոն դոլարի դիմումի յուրաքանչյուր մասի համար: Լավ փորձարկման գործիքներն են PHPUnit-ը և SimpleTest-ը՝ ձեր PHP դասերը փորձարկելու համար: GUI փորձարկման համար խորհուրդ եմ տալիս SeleniumHQ գործիքները:

Արդյունք

Այս հոդվածում դուք տեսաք ավելի լավ կոդ գրելու լավագույն փորձի ակնարկ՝ կոդավորման ստանդարտների օգտագործումից մինչև թիմային ձևավորում, վերամշակման կարևորությունը և այն տիրապետելու եղանակը, օգտագործելով պրոֆեսիոնալ գործիքներ, ինչպիսիք են թեստավորման շրջանակը, կոդերի վավերագրիչը, և տարբերակի հսկողություն՝ կոդերի բազայի կառավարման համար: Եթե ​​մինչ այժմ հավատարիմ չեք եղել այս քայլերին, արժե ձեզ և թիմին ընտելացնել դրանց։

Ազատ ծրագրեր մշակողների մեծ մասն աշխատում է Linux-ով կամ Mac-ով, սակայն Windows-ի աջակցությունը սովորաբար մնում է: Աշխատեց, լավ, չստացվեց, թող նա, ում պետք է, տեղափոխի: Այս հոդվածում ես ձեզ ցույց կտամ, թե ինչպես ստեղծել Windows-ի բնիկ գործադիրներ՝ առանց այս համակարգը ձեռքի տակ ունենալու:

Python 2.7-ի վերջին թողարկման մասին հայտարարվեց այս տարի, որից հետո Python Software Foundation-ն այլևս չի աջակցի 2.7 մասնաճյուղին։ Շատ հայտնի գրադարաններ և շրջանակներ նույնպես հրաժարվում են Python 2-ի պաշտոնական աջակցությունից, և Linux-ի մի շարք բաշխումներ այլևս չեն ներառում այն ​​իրենց լռելյայն փաթեթներում:

Դուք, հավանաբար, մեկ անգամ չէ, որ օգտագործել եք virustotal.com կայքը՝ ստուգելու, թե արդյոք երկուականները պարունակում են վնասակար գործառույթներ կամ ստուգելու ձեր սեփական զարգացումները: Այս ծառայությունն ունի անվճար API, որը մենք կվերլուծենք Python-ում այս հոդվածում։

Անվտանգ ցանցի ներսում գտնվող հյուրընկալողից արտաքին աշխարհ լուռ մուտք գործելու ցանկացած կարողություն գանձ է գրպանի համար: Վերջին հասանելի ուղիներից մեկը NTP-ն է՝ Ժամացույցի ժամանակի համաժամացման արձանագրությունը: Դրա երթևեկությունը թույլատրված է գրեթե ամենուր, ուստի այն հիանալի տրանսպորտ կլինի տվյալների համար: Ես ձեզ ցույց կտամ, թե ինչպես իրականացնել հիմնական հաճախորդը և սերվերը C#-ում:

Դուք հավանաբար լսել եք, որ նեյրոնային ցանցերը վերջերս բավականին լավ են դարձել նկարներում առարկաները ճանաչելու հարցում: Մեր խնդիրն է սովորել, թե ինչպես օգտագործել այս նեյրոնային ցանցերը, քանի որ դրանց հզորությունը կարող է օգտակար լինել տարբեր դեպքերում: Այս հոդվածում ես ձեզ ցույց կտամ, թե ինչպես օգտագործել այն՝ օգտագործելով ամենատարածված գործիքները՝ Python և Tensorflow և Keras գրադարանները:

Հնարավոր է, որ դուք արդեն հանդիպել եք ձայնով նույնականացմանը: Այն օգտագործվում է բանկերում հեռախոսով նույնականացման, անցակետերում ինքնությունը հաստատելու և կենցաղային ձայնային օգնականներում, որոնք կարող են ճանաչել սեփականատիրոջը: Գիտե՞ք ինչպես է այն աշխատում։ Ես որոշեցի ուսումնասիրել մանրամասները և կատարել իմ ներդրումը:

Նախկինում թվերով captcha-ն հիանալի միջոց էր բոտերին հեռացնելու համար, սակայն այժմ այս տեսակը գրեթե երբեք չի գտնվել: Կարծում եմ, դուք ինքներդ կարող եք կռահել, թե ինչն է խնդիրը. նեյրոնային ցանցերը սովորել են մեզնից լավ ճանաչել նման captcha-ները: Այս հոդվածում մենք կտեսնենք, թե ինչպես է աշխատում նեյրոնային ցանցը և ինչպես օգտագործել Keras-ը և Tensorflow-ը՝ թվերի ճանաչումը իրականացնելու համար:

Երկու տարի առաջ Twitch հոսքային հարթակի մշակողները ներկայացրեցին հեռարձակողների և հեռուստադիտողների փոխազդեցության նոր միջոց՝ Twitch Extensions: Այս համակարգը թույլ է տալիս ծրագրավորողներին լրացնել և բարելավել ինչպես կայքի, այնպես էլ բջջային հավելվածի ինտերֆեյսը՝ ստեղծելով տարբեր ինտերակտիվ տարրեր: Ես կբացատրեմ, թե ինչպես են աշխատում այս ընդարձակումները և ինչպես ստեղծել ձեր սեփականը, եթե ցանկանում եք:

Բանկային տրոյանները ամեն տարի միլիոնավոր դոլարների վնաս են պատճառում: Veermakers-ը փորձում է ամենախոր գաղտնիության մեջ պահել այն ամենը, ինչ կապված է բանկիրների ներքին խոհանոցի հետ։ Հետևաբար, մենք չկարողացանք բաց թողնել մի եզակի իրադարձություն՝ Carbanak բանկային տրոյայի աղբյուրները հանրությանը հասցնելը, և սկսեցինք ուսումնասիրել դրա կառուցվածքը ներսից:

Julia-ն երիտասարդ ծրագրավորման լեզու է, որը նախատեսված է հիմնականում գիտական ​​հաշվարկների համար: Դրա ստեղծողները ցանկանում էին, որ այն լրացնի Matlab-ի, նրա կլոնների և R-ի կողմից նախկինում զբաղեցրած տեղը: Ստեղծողները փորձում էին լուծել այսպես կոչված երկլեզու խնդիրը. համատեղել R-ի և Python-ի հարմարավետությունն ու C-ի կատարումը: Տեսնենք, թե ինչ: նրանք ստացան.

Forth-ն օգտագործվում է տարբեր ոլորտներում, ներառյալ PCI չիպսեթները և տիեզերանավերը, և Պավել Դուրովը նմանատիպ լեզու կօգտագործի TON կրիպտոարժույթի խելացի պայմանագրերում: Առանց լուրջ փոփոխությունների ենթարկվելու՝ ծրագրավորման ամենահին լեզուներից մեկը թույլ է տալիս իրականացնել բազմաթիվ ժամանակակից պարադիգմներ: Այսպիսով, ի՞նչ է այս առեղծվածային Ֆորթը:

Գամմա ռեժիմը, ի տարբերություն հասարակ փոխարինման ռեժիմի, թույլ է տալիս գաղտնագրել կամայական երկարության հաղորդագրությունները՝ առանց լիցքավորման գործողության օգտագործման: Այսօր մենք կխոսենք այն մասին, թե ինչպես է իրականացվում նման ռեժիմը և կգրենք դրա իրականացման համար անհրաժեշտ բոլոր գործառույթները:

Երբ ձեր ծրագրերում կոդի տողերի թիվը միլիոնավոր է, սխալներ գտնելը հազար անգամ ավելի դժվար է դառնում: Բարեբախտաբար, այսօր հնարավոր է ավտոմատացնել թեստավորումը՝ օգտագործելով fuzzers: Ինչպես են նրանք աշխատում, ինչու պետք է օգտագործվեն և ինչի են ընդունակ, այս մասին կիմանաք այսօրվա հոդվածում:

Աբստրակցիան ծրագրավորման հիմքն է։ Մենք շատ բաներ ենք օգտագործում՝ չմտածելով դրանց ներքին կառուցվածքի մասին, և դրանք հիանալի են աշխատում։ Բոլորը գիտեն, որ օգտատերերի ծրագրերը համակարգային զանգերի միջոցով փոխազդում են միջուկի հետ, բայց երբևէ մտածե՞լ եք, թե ինչպես է այն աշխատում ձեր մեքենայի վրա:

Հաքերները մշակում են խաբեբաներ, խաղացողները գնում են դրանք, ընկերությունները վարձում են ինժեներների՝ իրենց պաշտպանելու նոր ուղիներ մշակելու համար: Հաքերները նորից բաց են գտնում, և շրջանակը փակվում է: Այս հոդվածում մենք կտեսնենք, թե ինչպես են աշխատում տարբեր պաշտպանական մեթոդներ (և արդյո՞ք դրանք աշխատում են) և կփորձենք ստեղծել խաբեությունից պաշտպանվելու մեր սեփական համակարգը:

Linux-ում, ինչպես գիտեք, շատ բաներ ֆայլային համակարգում ներդրվում են որպես ֆայլեր։ Իսկ եթե չի իրականացվում, ապա դուք կարող եք դրանք իրականացնել ինքներդ՝ օգտագործելով FUSE-ը: Windows-ում սա ավելի քիչ տարածված է, բայց եթե դուք դեռ իսկապես ցանկանում եք ինչ-որ բան տեղադրել որպես ֆայլային համակարգ, ապա դա հնարավոր է: Ես ձեզ ցույց կտամ, թե ինչպես հասնել դրան՝ օգտագործելով C# և Dokan գրադարանը:

Հարձակվողի համար ամենագրավիչ թիրախը առցանց բանկինգն է, և բոտնետները որոշիչ դեր են խաղում դրա վրա վիրուսային հարձակումների հաջողության գործում: Բայց նրանց օգնությամբ գաղտնալսված տվյալներից արժեքավոր տեղեկատվություն կորզելու համար հարձակվողը պետք է քրտնաջան աշխատի: Այսօր ես ձեզ կասեմ, թե ինչպես դժվարացնել բոտ արտադրողների կյանքը և պաշտպանել ձեր հավելվածը հարձակումներից:

Համակարգչային խաղերը լավն են, քանի որ հաջողության համար վարձատրությունն իրական հաճույքն է, իսկ անհաջողության գինը՝ ցածր: Բայց երբեմն, նոր ունակությունները բացելու կամ պարզապես խաղը արագացնելու համար, դուք դիմում եք ոչ ամենաազնիվ ուղիների: Եվ եթե դուք չեք կարող փոխել աշխարհի կանոնները, կարող եք փորձել դրանք թեքել: Այո, դա այդպես է, մենք կխոսենք խաբեբաների մասին:

Հազարավոր գործառույթներով և հայտնաբերումից պաշտպանված ստեղնաշարի մարտական ​​սարքերը կարող են արժենալ տասնյակ, եթե ոչ հարյուրավոր դոլարներ: Բայց keylogger-ն այդքան էլ բարդ բան չէ, և եթե ցանկանաք, կարող եք ինքներդ պատրաստել և նույնիսկ խուսափել հակավիրուսային հայտնաբերումից: Այս հոդվածում ես ձեզ ցույց կտամ, թե ինչպես դա անել, և միևնույն ժամանակ մենք կպարզենք C#-ով ծրագրեր մշակել:

C++-ում կա տվյալների դինամիկ տիպի նույնականացում (RTTI): Սա մեխանիզմ է, որը թույլ է տալիս որոշել փոփոխականի կամ օբյեկտի տեսակը ծրագրի կատարման փուլում։ Գործարկվող ֆայլը կրճատելու համար շատ նախագծերում RTTI-ն անջատված է, dynamic_cast-ը և typeid-ը դադարում են աշխատել դրանից: Բայց դեռ կա մի միջոց՝ ստուգելու, թե արդյոք օբյեկտի օրինակը ստացված է ինչ-որ բազային դասից:

Ստատիկ տպագրված լեզուները սովորաբար ստիպում են ձեզ գրել փոփոխական տեսակներ ինչ-ինչ պատճառով: Բայց դա հեռու է միշտ դեպքից. ծրագրավորման լեզուների տեսությունն ու պրակտիկան զգալիորեն առաջ են գնացել, պարզապես այդ ձեռքբերումներն անմիջապես չեն ընդունվում արդյունաբերության կողմից: Այսօր մենք կնայենք OCaml լեզվին և կտեսնենք, որ ստատիկ մուտքագրումը պարտադիր չէ, որ անհանգստություն լինի:

Կան բազմաթիվ ծրագրային պաշտպանության լուծումներ, որոնք սահմանում են, թե ինչպես աշխատել մեկուսացված միջավայրերում, աշխատել հակավրիպազերծման տեխնիկայի հետ, վերահսկել դրանց կոդի ամբողջականությունը և դինամիկ կերպով գաղտնագրել իրենց տվյալները հիշողության մեջ՝ ընդդեմ աղբավայրի: Անվտանգության մեկ այլ հզոր տեխնիկա կոդի վիրտուալացումն է: Այս հոդվածում ես ձեզ ցույց կտամ, թե ինչպես է այն աշխատում:

Լավագույնն այն է, որ լեզուն սովորել իրական նախագծի վրա, այնպես որ, երբ ես որոշեցի փորձարկել Ադայի հետ, ես ինքս իրական և հետաքրքիր խնդիր դրեցի. գրել օգտակար ծրագիր հիպերվիզորում աշխատանքը հայտնաբերելու համար: Սա ինքնին զվարճալի է, և ծրագրավորման նոր լեզուն զվարճանքը նոր մակարդակի կհասցնի:

Դուք կյանքում մեկ անգամ չէ, որ հանդիպել եք տարբեր արձանագրությունների. մի քանիսն օգտագործել եք, միգուցե հակադարձել եք մյուսներին: Ոմանք հեշտ ընթերցվում էին, մյուսները հնարավոր չէր հասկանալ առանց վեցանկյուն խմբագրի: Այս հոդվածում ես ձեզ ցույց կտամ, թե ինչպես ստեղծել ձեր սեփական արձանագրությունը, որը կաշխատի TCP/IP-ի վերևում: Մենք կմշակենք մեր սեփական տվյալների կառուցվածքը և սերվերը կներդնենք C#-ով:

Եթե ​​դուք Python գրող եք, դուք հավանաբար տեսել եք մեթոդների սահմանումներ, որոնք փաթաթված են կրկնակի ընդգծումներով ստանդարտ գրադարաններում: Այս «կախարդական» մեթոդները ձևավորում են շատ օգտակար ինտերֆեյսներ, որոնք դուք մշտապես օգտագործում եք, օրինակ՝ ըստ տարրի համարով արժեք ստանալիս կամ ինչ-որ բան տպելիս: Այժմ ես ձեզ ցույց կտամ, թե ինչպես օգտագործել այս մեթոդները ձեր ծրագրերում:

Այլ հավելվածների հետ փոխազդող ծրագրակազմ գրելիս երբեմն անհրաժեշտ է դառնում դադարեցնել երրորդ կողմի գործընթացների կատարումը: Կան մի քանի մեթոդներ, որոնք կարող են օգնել այս հարցում. ոմանք լավ փաստագրված են, մյուսները փորձում են սպանել անհրաժեշտ գործընթացները ավելի կատաղի ձևերով՝ սադրելով օպերացիոն համակարգը ստիպել նրանց հարվածել: Ես ձեզ ցույց կտամ Windows-ում գործընթացները ավարտելու և սպանելու մի քանի եղանակ:

Լեզուն, որը մշակվել է ԱՄՆ պաշտպանության նախարարության պատվերով և անվանվել է աշխարհում առաջին ծրագրավորող Ադա Լավլեյսի անունով, ակտիվորեն օգտագործվում է ինքնաթիռների, գնացքների, տիեզերանավերի և այլ հետաքրքիր բաների կառավարման համար։ Եկեք նայենք լեզվին առանց առասպելների պրիզմայի և պարզենք, թե ինչպես կարող ենք դրանից օգուտ քաղել, նույնիսկ եթե դեռ տիեզերք չենք գնում:

Դուք հավանաբար հանդիպել եք խաղային կոնսոլների էմուլյատորների և, հավանաբար, նույնիսկ մեկ ժամից ավելի նստել եք դրանց հետևում: Բայց երբևէ մտածե՞լ եք, թե ինչպես է այն աշխատում: Օգտագործելով NES-ի օրինակը, որը Ռուսաստանում հայտնի է որպես Dendy, ես ձեզ ցույց կտամ, թե ինչպես ստեղծել ձեր սեփական էմուլյատորը: Եվ միևնույն ժամանակ մենք կզբաղվենք այս set-top box-ի խորամանկ ճարտարապետությամբ, որն իր ժամանակի և իր համեստ գնի համար զարմանալիորեն լավ պատկեր է ստեղծել:

Դուք հավանաբար լսել եք այնպիսի տեսակի վնասակար հավելվածների մասին, ինչպիսիք են գողերը: Նրանց խնդիրն է զոհի համակարգից արժեքավոր տվյալներ կորզել, առաջին հերթին՝ գաղտնաբառեր: Այս հոդվածում ես հստակ կբացատրեմ, թե ինչպես են նրանք դա անում՝ օգտագործելով Chrome և Firefox բրաուզերներից գաղտնաբառեր հանելու օրինակը և ցույց կտամ կոդերի օրինակներ C ++-ում:

Հարցազրույցի հարցեր, ինչպիսիք են «ինչու է դիտահորի ծածկը կլոր»: - Սա տարօրինակ է: C կոդով թերթերը, որոնք դուք պետք է կազմեք ձեր գլխում, ձանձրալի են: Ամենահետաքրքիր հանելուկները ընդհանուր տեխնիկական և տրամաբանական մտածողության համար են: Եվ այսօր Abbyy ընկերության ընկերները մեզ նետեցին հենց այդպիսին:

Ծրագրավորելու ունակությունը ժամանակակից աշխարհում պահանջված ամենաարժեքավոր հմտություններից է: Եվ իրականում կարևոր չէ, թե կոնկրետ ինչն է ստիպում մարդուն ստեղծել ծածկագիր. անկեղծ հետաքրքրություն, ֆինանսական կամ կարիերայի նկատառումներ. նրանք, ովքեր գիտեն, թե ինչպես ծրագրավորել, պարապ չեն մնա: Կոդավորումը շատ նման է օտար լեզվով հաղորդակցվելուն, ուստի ծրագրավորել սովորելու առաջին փուլերը հաճախ դժվար են սկսնակների համար: Միևնույն ժամանակ, շատերը զգում են ծանր անհանգստություն, բայց ժամանակի ընթացքում ամեն ինչ լավանում է, և մարդը սկսում է հեշտությամբ կոդավորել՝ առանց հոգեկան մեծ ծախսերի։ Այսօր դուք կարող եք գտնել բազմաթիվ գրքեր և առցանց ռեսուրսներ, որոնք կարող են օգնել ձեզ սովորել կոդավորում, բայց ցանկացած ինքնուսուցում կապված է սթրեսի և բացասական հույզերի հետ. սա միշտ պետք է հիշել ծրագրավորման ցանկացած լեզվի տիրապետելիս: Սկսնակ կոդավորողի համար ամենակարևորը լեզվի ուսումնասիրությունը կիսատ չտալն է՝ կորցնելով ամբողջ հետաքրքրությունը այս գործունեության նկատմամբ: Այսպիսով, ի՞նչ պետք է իմանա ապագա ծրագրավորողը: Ի՞նչ դժվարություններ են սպասում նրան օգտակար հմտությունների յուրացման ճանապարհին։

Ծրագրավորման լեզուներ

Նախ պետք է որոշեք ծրագրավորման լեզուն, որը ցանկանում է սովորել սկսնակը: Դա այնքան էլ հեշտ չէ. կան շատ լեզուներ, և նրանցից յուրաքանչյուրը լավն է իր ձևով: Լեզուն գիտակցաբար ընտրելը շատ կարևոր է. չէ՞ որ դրա զարգացման համար շատ ժամանակ և ջանք կներդրվի: Բայց ինչպես դա կարող է լինել, սկսնակ կոդավորողը պետք է իմանա, որ չկան լավ և վատ ծրագրավորման լեզուներ, բայց կան լեզուներ, որոնք բարեկամական են նեոֆիտների համար: Հետևաբար, որքան հեշտ և հասկանալի լինի ծրագրավորման լեզուն, այնքան լավ՝ ճանապարհի սկզբում ավելի լավ է հաջողությունից հասնել հաջողության, պարզ առաջադրանքներից մինչև ավելի բարդ: Հետագայում ավելի հեշտ կլինի, այն բանից հետո, երբ սկսնակը սովորի կոդավորումն իր առաջին ծրագրավորման լեզվով, մյուս լեզուները նրա համար շատ ավելի հեշտ կլինեն:

Շատ կարևոր է նաև անմիջապես որոշել, թե լեզվի ինչ իմացություն է անհրաժեշտ։ Քանի որ կոդավորումը շատ տարբեր է: Եթե ​​ինչ-որ մեկը ցանկանում է ծրագրավորող դառնալ, ապա կարող եք նայել Java-ին, իսկ iOS-ի համար հավելվածներ ստեղծելու դեպքում Swift լեզուն ավելի հարմար է։

Ուսուցման համապատասխան մեթոդաբանություն

Սովորելու շատ եղանակներ կան, ուստի ծրագրավորման լեզուների դեպքում պետք է համապատասխան մեթոդաբանություն գտնել։ Միաժամանակ խելամիտ կլինի ընտրել հիմնական մեթոդը և այն լրացնել դասավանդման երկրորդական մեթոդներով։ Այստեղ ամեն ինչ շատ անհատական ​​է՝ եթե սկսնակը տեսողական է կամ տեղեկատվությունը լավ է ընկալում ականջով, ապա նա կարող է սովորել կոդավորում՝ դիտելով տեսանյութեր YouTube-ում, իսկ այլ գիտելիքներ ստանալ գրքերից։ Ահա մի քանի պարզ, բայց արդյունավետ վերապատրաստման սխեմաներ.

Առցանց կոդավորման դասընթացներ.Որոշ մարդիկ ավելի արդյունավետ են աշխատում, երբ նրանց ասում են, թե ինչ անել և պարբերաբար վերանայում են իրենց կատարողականը: Իսկ այդպիսի մարդիկ շատ են։ Ուստի, եթե սկսնակը զգում է, որ ինքնակարգապահության հետ կապված խնդիրներ ունի, ապա նա պետք է ընտրի մի դասընթաց, որտեղ նրան մշտապես մոտիվացված կլինեն թեստերը։ Սա լավ գաղափար է. շատերը թողնում են ծրագրավորում սովորելը` հենվելով իրենց կամքի ուժի և ոգևորության վրա: Ինքնուսուցման կոդավորումը բոլորի համար չէ, սա միշտ պետք է հիշել:

Տեսանյութը YouTube-ում.Այսօր ամեն ինչի մասին ամեն ինչ կարող եք իմանալ՝ պարզապես դիտելով YouTube-ի տեսանյութերը: Ավելի փորձառու կոդավորողները հստակ ցույց են տալիս, թե ինչ է պետք անել, ուստի այս նյութերը շատ օգտակար են: Դա պարզ, արդյունավետ և ամենալավն է՝ անվճար միջոց է՝ սովորելու, թե ինչպես կոդավորել: Եթե ​​դուք մուտք ունեք ինտերնետ, ապա կարող եք նստել, դիտել, կրկնել գոնե ամբողջ օրը, մինչև պարզ դառնա։

Գրքեր. Այս օրերին ծրագրավորման լեզուներ սովորելու մի փոքր հնաոճ ձև է, բայց փաստը մնում է փաստ, որ տարիների ընթացքում կոդավորումը շատ չի փոխվել, և այն, ինչ ասվում է YouTube-ում, շատ չի տարբերվում թղթե գրքում ասվածից: Բայց գրքերն ունեն մի անկասկած առավելություն՝ դրանք հեշտացնում են լեզվի տրամաբանությունը, և դա աներևակայելի կարևոր է: Առաջին հերթին այն պատճառով, որ երբ խոսքը վերաբերում է գործնական պարապմունքներին, ոչ ոք չի ցանկանում անել ինչ-որ անհասկանալի կամ անհնարին բան։ Ամեն ինչ կիսատ չթողնելու համար պետք է անպայման ծրագրավորման մասին գրքեր կարդալ։

Պրակտիկա.Լավագույն ծրագրավորողներից շատերը ինքնուս են։ Շատ հաճախ նրանք սկսում էին կոդավորել առանց գիտակցելու, քանի որ նրանց ուսուցումը ոչ համակարգված էր: Խնդիրի առաջ կանգնեցին, լուծեցին, մեկ ուրիշին հանդիպեցին, և դա էլ լուծեցին։ Աստիճանաբար նման ինքնուսուցիչները մի խնդրից անցնում են մյուսին, ավելի բարդ և միաժամանակ տիրապետում են կոդավորմանը։ Առանձնապես չարժե նմանակել նման մարդկանց, բայց պրակտիկան չի կարելի թողնել, դա ուսման մեջ հաջողության գրավականն է:

Հաջողության շտկում

Սկսնակը, ով նոր է սկսում սովորել ծրագրավորման լեզու, պետք է իմանա և պատրաստ լինի այն փաստին, որ դա երկար ժամանակ է: Կոդավորում սովորելը երկար գործընթաց է, որտեղ ձախողումները շատ ավելի ուժեղ են, քան հաջողությունները: Ուսումդ չթողնելու համար պետք է անպայման արձանագրել քո բոլոր գործողությունները։ Մարդիկ շատ հաճախ կորցնում են մոտիվացիան միայն այն պատճառով, որ չեն կարողանում առաջընթաց զգալ։ Եվ նա անպայման կլինի, եթե սկսնակը ջանասիրաբար զբաղվի։ Պարզապես հմտություններն աննկատելիորեն աճում են, սկսնակ կոդավորողը կարող է դա չնկատել էլ, քանի որ նման փոքր քայլերով շարժվում է դեպի նպատակը։

Այդ իսկ պատճառով դուք պետք է ժամանակ առ ժամանակ հիշեցնեք ինքներդ ձեզ, թե որքան հեռու եք գնացել և ավելի հաճախ հետ նայել: Սա շատ է օգնում. ի վերջո, նայելով նրանց կոդերի առաջին տողերին, յուրաքանչյուրը կարող է հասկանալ, որ նա առաջադիմում է: Կարող է թվալ, որ այս բոլոր անձնական գրառումները պարզապես զվարճալի են: Ոչ, իրականում առաջընթաց գրանցելը շատ կարևոր է. այն շատ մոտիվացնող է ողջ ուսումնական գործընթացի ընթացքում: Ուստի սկսելու և չհեռանալու համար անհրաժեշտ է նշել յուրաքանչյուր ավարտված փուլ։

Հստակ ուսուցման ժամանակներ

Երբ խոսքը վերաբերում է կոդավորմանը, շատ սկսնակների թույլ տված սովորական սխալն այն է, որ նրանք փորձում են միանգամից մի շարք առաջադրանքներ կատարել և հակված են թողնել դրանք բոլորն ավարտելուց առաջ: Նրանք սկսում են հետաքրքրվել մեկ այլ բանով, ամենից հաճախ՝ այլ առաջադրանքներով, ուստի նրանք ցատկում են մի նախագծից մյուսը։ Դուք չպետք է դա անեք: Ավելի լավ է համակարգված շարժվել՝ լուծել մեկ խնդիր կամ հասկանալ օրինակ, մինչև ամեն ինչ պարզ դառնա: Դա շատ պարզ սկզբունք է՝ մի բան միաժամանակ:

Բայց միևնույն ժամանակ դուք պետք է հասկանաք, որ առաջ գնալն անհրաժեշտ է, ուստի պետք է ձեզ խիստ ժամկետներ սահմանել լեզվի այս կամ այն ​​կողմը սովորելու համար: Կարող եք փորձել պատկերացնել, որ քննությունը շուտով կլինի, և դուք պետք է ցույց տաք այն ամենը, ինչին կարող էիք հասնել։ Դա մոտիվացնում է։ Այո, այս բոլոր անձնական առաջադրանքները կարող են այնքան էլ հարմարավետ չլինել, բայց կոդավորումն ինքնին զվարճալի չէ: Խիստ կարգապահությունը թույլ կտա ձեռք բերել անհրաժեշտ հմտություններ, իսկ վերջնաժամկետների պահպանումը գրեթե ամենակարևոր հմտությունն է անկախ ծրագրավորողի համար:

Մինչ սովորական օգտատերերը վախենում են սխալվելուց և իսկապես ատում են այն, երբ ինչ-որ բան սխալ է լինում, ծրագրավորողը շատ այլ դիրքում է: Սխալները նրա աշխատանքի մի մասն են, և շատ մեծ: Հետեւաբար, սկսնակ կոդավորողը պետք է իրեն սովորեցնի կարդալ սխալի հաղորդագրությունները, որքան էլ դա տհաճ լինի: Նման հաղորդագրությունները պարունակում են շատ արժեքավոր տեղեկություններ, քանի որ պատմում են, թե կոնկրետ ինչ է բաց թողնվել ծածկագրի ստեղծման գործընթացում։ Պետք է պատրաստ լինեք, որ նման հաղորդագրությունները շատ հաճախ կհայտնվեն և ոչ մի տեղ չեն գնա նույնիսկ ծրագրավորման լեզվի ուսումնասիրության ավարտից հետո։ Դուք չեք կարող ժամանակ խնայել սխալների վրա աշխատելու համար. սա սովորելու ամենակարևոր մասն է: Բացի այդ, սա լավ պրակտիկա է. երբ հասկանաք խնդիրը, հետագայում ավելի հեշտ կլինի խուսափել բազմաթիվ սխալներից: Սխալների հաղորդագրությունները պատիժ չեն, իրականում դրանք ծածկագրողի լավագույն ընկերներն են, ովքեր ցանկանում են նրան սովորեցնել, թե ինչպես անել ամեն ինչ ճիշտ:

Հաղորդակցություն այլ ծրագրավորողների հետ

Նման շփումը կօգնի նաև հասկանալ, որ այլ մարդիկ նույնքան հաճախ են բախվում կոդավորման խնդիրների հետ, և դա արտասովոր չէ: Իսկ եթե սկսնակն, ի լրումն, կարող է օգնել իր ընկեր-ծրագրավորողին, ապա երկրորդ քամի կունենա և նա կշարունակի սովորել վրեժխնդրությամբ։ Եվ մի վախեցեք հաղորդակցությունից. ծրագրավորողները իրականում ընկերասեր մարդիկ են, նրանք հաճախ «իրենց ալիքի վրա» են, և սկսնակը պարզապես պետք է ռեզոնանսի մեջ ընկնի:

Ճիշտ և սխալ մոտեցում

Սկսնակ կոդավորողները հաճախ փորձում են պատճենել կոդի կտորները այլ նախագծերից՝ լուծելով նրանց որոշ խնդիրներ: Դա նրանց խելամիտ է թվում, քանի որ գլխավորը ամեն ինչ աշխատեցնելն է։ Սա սխալ եւ առավել եւս շատ վնասակար մոտեցում է։ Եվ ոչ թե այն պատճառով, որ պատճենելը վատ է, այլ այն պատճառով, որ պատճենելիս սկսնակը չի հասկանա, թե կոնկրետ ինչ է անում այս կոդը: Իհարկե, պատճենելը շատ ավելի հեշտ է, քան ամեն ինչ ինքներդ գրելը։

Բայց սովորելու գործընթացում նման մոտեցումը կհանգեցնի նրան, որ գիտելիքի ձևի մեծ բացերը և սկսնակ կոդավորողը մի օր կհանձնվեն՝ չկարողանալով լուծել իր առջև եղած խնդիրը: Եվ ամեն ինչ լքված կլինի։ Ծրագրավորման լեզու սովորելիս պետք է առանց ափսոսանքի ժամանակ հատկացնել ցանկացած, նույնիսկ առաջին հայացքից աննշան խնդիր վերլուծելու վրա։ Եվ եթե դուք չեք կարող անմիջապես լուծում գտնել, դուք չեք կարող հանձնվել: Դուք պետք է կարդաք, դիտեք տեսանյութեր, հարցնեք ուրիշներին. սկսնակը պետք է մանրակրկիտ զբաղվի առաջացած դժվարությունների հետ: Թեև նա լեզու է սովորում, դա նույնը չէ, ինչ սովորական, մարդկային լեզու սովորելը։ Կոդավորողը գործ ունի մեքենայի հետ, ուստի նրա համար կարևոր է հասկանալ, թե ինչ է անում: Լեզվի նման իմացությունը պարզապես անգին է, երբ ուսուցման գործընթացը գալիս է գործնականում:

Ծրագրավորման լեզուներ սովորելը ամենահուզիչ բանը չէ: Բայց ամեն ինչ կարելի է շտկել, եթե գործին մոտենաս գեղարվեստական ​​գրականությամբ։ Չկա որևէ բան սովորելու ավելի լավ միջոց, քան խաղեր խաղալը: Սա վերաբերում է նաև կոդավորմանը, քանի որ դուք կարող եք արագ լեզու սովորել՝ պարզապես խաղալով և միաժամանակ բարելավելով ձեր հմտությունները: Ահա մի քանի խաղեր, որոնց պետք է ուշադրություն դարձնի սկսնակ կոդավորողը:

  • CheckiO-ն խաղ է, որը դուք կարող եք խաղալ ձեր բրաուզերում, այն պահանջում է JavaScript-ով կամ Python-ով խնդիրների լուծում՝ խաղի ընթացքում առաջընթացի համար:
  • CodeMonkey-ը հիմնականում նախատեսված է երեխաների համար, բայց եթե սկսնակ եք, կարող եք որոշ կոդ սովորել՝ խաղալով այս խաղը։
  • Codewars-ը իրական խաղ չէ, այլ ավելի շատ համատեղ մարտահրավեր է ծրագրավորողների համար: Սա հիանալի միջոց է սովորելու, թե ինչպես կոդավորել, քանի որ խաղն աջակցում է բազմաթիվ լեզուների:
  • Code Combat-ը առցանց հարթակ է, որտեղ դուք կարող եք սովորել, թե ինչպես կոդավորել՝ իրական խաղ խաղալով:

Կան բազմաթիվ այլ խաղեր, որոնք դուք կարող եք օգտագործել, ամեն ինչ կախված է նրանից, թե որոնք են լավագույնը ձեզ համար և ձեր սովորած լեզուն: Խաղը կօգնի սկսնակին սկսել մտածել ծրագրավորողի պես, և դա շատ կարևոր է սովորելու հենց սկզբում։

Արդյունք

Ոմանք արագ են սովորում կոդավորումը, մյուսներն ավելի դանդաղ, բայց յուրաքանչյուրը կարող է տիրապետել ծրագրավորման լեզվին: Եվ մի ընկեք ծոմապահության մեջ, եթե ինչ-որ բան չի ստացվում: Դանդաղ շարժվելով կարող եք հասնել նպատակին, և իսկապես ցանկացած ուսումնասիրություն դանդաղ գործընթաց է: Եթե ​​սկսնակը չի ցանկանում հրաժարվել կոդավորման ուսումնասիրությունից՝ տիրապետելով միայն հիմունքներին, նա պետք է մշակի իր վարքագծի ռազմավարությունը։ Դուք պետք է հասկանաք, որ ժամանակ, ջանք, երբեմն էլ գումար է ներդրվում մարզումների վրա, ուստի պետք է պարզապես մի փուլից մյուսը անցնել: Եվ մի ենթարկվեք դժվարություններին: Այո, ծրագրավորումը բոլորի համար չէ: Բայց ցանկացած մարդ կարող է լեզու սովորել, սովորել կոդավորում: Այսպիսով, դուք պարզապես պետք է որոշեք և գնաք ձեր սեփական ճանապարհով:

1. Ինքնուրույն

Եթե ​​ունես երկաթյա կամք և ծրագրավորող դառնալու բուռն ցանկություն, ապա կարող ես հասնել քո նպատակին ինքնակրթության միջոցով։ Սա ամենահեշտ և ամենակարճ ճանապարհը չէ. դուք ինքներդ ստիպված կլինեք գործ ունենալ տեղեկատվական քաոսի հետ և պայքարել հետաձգման դեմ: Բայց դուք կարող եք սովորել հարմար ժամանակ համեմատաբար քիչ գումարով կամ անվճար:

Սկսելու ամենահեշտ ձևը ինտերակտիվ առցանց դասընթացներն են: Համացանցում կան շատերը, որոնց նյութերը մատչելի կերպով բացատրում են ծրագրավորման հիմունքները և սահմանում հետագա զարգացման ուղղությունը: Հատուկ ուշադրություն դարձրեք այն դասընթացներին, որոնք դասավանդում են իրական նախագծերի օրինակներով, այսինքն՝ քայլ առ քայլ պատմում են, թե ինչպես ստեղծել կոնկրետ ծրագիր կամ կայք։

Պլատֆորմ անվճար վեբ զարգացման դասընթացներով freeCodeCamp

Հիշեք, որ առանց պրակտիկայի հաջողության չեք հասնի։ Սովորեք նախագծերի վրա հիմնված դասընթացներից և փորձեք գրել ծրագրեր և կայքեր, որոնք վերլուծվում են դրանցում: Փնտրեք դասախոսություններ YouTube-ում՝ այն նախագծերի ամփոփմամբ, որոնք դուք կցանկանայիք մշակել: Նախ պատճենեք այլ մարդկանց աշխատանքը և վերլուծեք այն: Այնուհետեւ փորձեք շեղվել բնօրինակից, փորձարկեք, փոխեք առանձին տարրեր, քանի դեռ չեք կարողանում ստեղծել յուրահատուկ բան։

Բացի դասընթացներից և տեսադասախոսություններից, կան պաշտոնական փաստաթղթեր, որոնք հասանելի են լեզվական կայքերում և. Երբ հասկանաք հիմունքները, փնտրեք վերջին հրապարակումները՝ ձեր ընտրած ծրագրավորման լեզվի լավագույն պրակտիկա ենթագրերով: Այս գրքերը պարունակում են զարգացման լավագույն մեթոդները:

Համոզվեք, որ ձեր նախագիծը ստեղծելու նպատակ դրեք և անընդհատ աշխատեք դրա վրա:

Սա կօգնի համախմբել ձեռք բերված գիտելիքները և հասկանալ, թե ինչ տեղեկատվություն է ձեզ դեռ պակասում։ Ձեր հմտությունները կզարգանան նախագծին զուգահեռ: Երբ ավարտեք այն, աշխատեք նորի վրա՝ ավելի դժվար:

Եթե ​​որևէ դժվարություն ունեք ուսուցման կամ զարգացման գործընթացում, ցանկացած հարցի համար միշտ կարող եք դիմել ծրագրավորման համայնքներին, ինչպիսիք են «Toaster»-ը և Stack Overflow: Օրինակ, նրանք կօգնեն ձեզ լուծել խնդիրը, ընտրել լավ դասընթաց կամ մատնանշել կոդի սխալները:


«Տոստեր» տեխնոլոգիական թեմաներով հարց ու պատասխանի ծառայություն.

Հարմար է հղկել ձեր հմտությունները հատուկ կայքերում, որտեղ կարող եք մրցակցել այլ ծրագրավորողների հետ՝ լուծելով տարբեր գործնական խնդիրներ՝ օգտագործելով կոդ: Այս ծառայությունները ներառում են Codewars, TopCoder և HackerRank:

Եթե ​​կարծում եք, որ ձեր զարգացումը մտել է փակուղի, կամ ցանկանում եք արագացնել ձեր ուսումը, փորձեք հետևյալ տարբերակները.

2. Մենթորի օգնությամբ

Ուսուցիչը անձնական դաստիարակ է, ով մատնանշում է սխալները, նախազգուշացնում է որոգայթների մասին և օգնում է պլանավորել ուսումնասիրության ընթացքը: Ճիշտ ժամանակին լավ առաջարկը կարող է փրկել ձեզ շատ դժվարություններից և խնայել ձեզ շատ ժամանակ: Հետեւաբար, դաստիարակը ոչ մեկին չի վիրավորի:

Պարզեք՝ ձեր ծանոթների մեջ կա՞ն ծրագրավորողներ։ Միգուցե նրանցից մեկը կցանկանա օգնել ձեզ։ Եթե ​​նման մարդկանց չեք ճանաչում, կարող եք նրանց փնտրել ծրագրավորման համայնքներում։ Օրինակ՝ նույն «Տոստերի» վրա։ Միայն մենթորական ծառայություններն էժան չեն, բայց ոչ ոք չի ցանկանում անծանոթ մարդկանց վրա շատ ժամանակ ծախսել:

3. «Կենդանի» դասընթացների ուսուցիչներ

Հեռավար և դեմ առ դեմ դասընթացները ուսուցիչների հետ, ովքեր զրոյից դասավանդում են ծրագրավորողներին, վերջին տարիներին աներևակայելի տարածված են դարձել: Որպես այս ձևաչափի մաս, դուք նույնպես պետք է շատ աշխատեք ինքնուրույն: Բայց դուք կզբաղվեք մասնագիտորեն պատրաստված ծրագրով, իսկ կենդանի մարդը կստուգի խնդիրների լուծումները։ Դասընթացների թերությունները ներառում են կրթության բարձր արժեքը:

Հանրաճանաչ ռուսալեզու առցանց հարթակներ, որոնք ապահովում են համակարգային ուսուցում ծրագրավորողների համար՝ Netology, GeekBrains և Loftschool:

Եթե ​​նախընտրում եք անձամբ սովորել, կարող եք փնտրել կրթական կենտրոններ, որոնք ծրագրավորում են սովորեցնում ձեր տարածքում: Ցավոք, նման հաստատություններն առավել հաճախ առկա են միայն խոշոր քաղաքներում: Օրինակ է STEP համակարգչային ակադեմիան, որը մասնաճյուղեր ունի մի քանի երկրներում։

4. Համալսարանում

Եթե ​​ձեզ շատ ժամանակ է մնացել, և վստահ եք, որ ցանկանում եք ձեր կյանքը կապել ծրագրավորման հետ, կարող եք համալսարանում սովորել համակարգչային գիտություն։ Բայց նկատի ունեցեք, որ ավանդական ուսումնական հաստատությունները հետ են մնում առաջընթացից, այնպես որ դուք ստիպված կլինեք ինքնուրույն տիրապետել ժամանակակից ծրագրավորման լեզուներին և այլ տեխնոլոգիաներին:

Մյուս կողմից, համալսարանը կտրամադրի մաթեմատիկայի, ալգորիթմների և այլ ոլորտների հիմնարար գիտելիքներ, որոնք կօգնեն ձեզ դառնալ բարձրակարգ ծրագրավորող: Քրտնաջան ուսումնառության տարիների ընթացքում դուք կձևավորեք ճիշտ մտածողության տեսակ, որի շնորհիվ ամեն ինչ կհասկանաք մասնագիտական ​​ոլորտում։

Ինչպես ընտրել ուղղություն և լեզու

ՏՏ ոլորտում կան մի քանի ոլորտներ, որոնցից յուրաքանչյուրն օգտագործում է իր սեփական լեզուները: Բարդության աճի կարգով մենք թվարկում ենք հիմնական ոլորտները.

  1. Վեբ մշակում. Հանրաճանաչ լեզուներ՝ JavaScript, PHP, Python, Ruby:
  2. Բջջային կապի զարգացում. Հանրաճանաչ լեզուներ՝ Java, Swift:
  3. Սեղանի համակարգիչների համար խաղերի և ծրագրերի մշակում. Հանրաճանաչ լեզուներ՝ C++, C#, C:
  4. Մեծ տվյալներ, մեքենայական ուսուցում. Հանրաճանաչ լեզուներ՝ Python, R, Scala:

Ինչ փնտրել ընտրելիս

Ուղղության և, մասնավորապես, լեզվի ճիշտ ընտրություն կատարելու համար հաշվի առեք հետևյալ գործոնները. լեզուն աշխատաշուկայում.


Լեզուների պահանջարկի գրաֆիկը միջազգային աշխատաշուկայում / research.hackerrank.com

Ձեր տարածքում լեզվի պահանջարկը հեշտ է ստուգել աշխատանք փնտրող կայքերում: Պարզապես բացեք ծրագրակազմ մշակողների բաժինը և տեսեք առկա թափուր աշխատատեղերի քանակը:

Եթե ​​դուք չեք կարող որոշել

Եթե ​​շփոթված եք, նայեք JavaScript-ին, այն լեզվին, որով գրված է գրեթե ամբողջ վեբը: Շատ կազմակերպություններ և ծրագրավորողներ խորհուրդ են տալիս սկսնակներին ընտրել հենց այս լեզուն որպես իրենց առաջին լեզու:

Օրինակ, հիմնադիր կրթական ռեսուրսի freeCodeCamp Quincy Larson JavaScript բոլոր սկսնակների համար: Լարսոնը շատ պարզ փաստարկ է բերում.

  1. JavaScript-ը համեմատաբար հեշտ է սովորել: Իսկ այս լեզվով ինչ-որ բան գրելու և գործարկելու համար բավական է ունենալ կոդի խմբագրիչ և բրաուզեր։
  2. JavaScript-ը միջազգային աշխատաշուկայում ամենապահանջված լեզուն է և ունի մեծ հեռանկարներ։ Խոշոր ընկերությունները, ինչպիսիք են Google-ը, Microsoft-ը և Facebook-ը, ներդրումներ են կատարում JavaScript-ի էկոհամակարգում:
  3. JavaScript-ն ունի շատ լայն շրջանակ՝ կայքերից և բրաուզերի խաղերից մինչև բջջային հավելվածներ:

Բացի այդ, այս լեզվի շուրջ ձևավորվել է ծրագրավորողների մեծ համայնք: JavaScript-ի նկատմամբ մեծ հետաքրքրությունը ապահովում է հսկայական թվով դասընթացներ, գրքեր և այլ կրթական բովանդակություն:

Էլ ի՞նչ պետք է իմանա ծրագրավորողը` մաթեմատիկա և անգլերեն:

Ցանկացած ծրագրավորող կարիք ունի խորը ընկալման: Այն ոլորտների համար, ինչպիսիք են խաղերի գրաֆիկայի զարգացումը կամ մեծ տվյալները, մաթեմատիկական միտքը պարտադիր է: Բայց երբ խոսքը վերաբերում է վեբ մշակմանը և պարզ ծրագրերի ստեղծմանը, շատ դեպքերում կարելի է հրաժարվել մաթեմատիկայից: Թեև մասնագետների միջև այս հարցում կոնսենսուս չկա:

Բայց անգլերեն հասկանալը, գոնե փաստաթղթերի սահուն ընթերցման մակարդակով, պարտադիր է բոլոր ծրագրավորողների համար: Պաշտոնական փաստաթղթերը և ուսումնական նյութերի մեծ մասը հայտնվում են հիմնականում անգլերենով: հաճախ հնացած են մինչև թարգմանության թողարկումը: Բացի այդ, անգլերենի իմացությունը հեռանկարներ է բացում ամբողջ աշխարհի հետ աշխատելու համար։

Ինչպես ստանալ ձեր առաջին փորձը և առաջին աշխատանքը

Որպես ծրագրավորող ձեր առաջին աշխատանքը գտնելու համար դուք պետք է ունենաք պորտֆոլիո: Սա ձեր ստեղծած նախագիծն է, ավելի ճիշտ՝ մի քանիսը, որոնք ցույց են տալիս ձեր մշակողի բոլոր հմտությունները: Դասընթացների մեծ մասի ծրագիրը ներառում է նախագծերի մշակում, որոնք կարող են ներառվել ձեր պորտֆոլիոյում:

Ռեզյումեի շատ արժեքավոր կետը կլինի աշխատանքային փորձի առկայությունը, հատկապես թիմային զարգացումը։ Բայց որտեղի՞ց այն ստանալ, եթե փնտրում եք ձեր առաջին աշխատանք:

  1. Լրացրեք բազմաթիվ պատվերներ . Դա կարող է լինել Freelance կամ Upwork: Առաջարկեք ձեր ծառայությունները անվճար, այնուհետև առաջին հաճախորդները կգան ձեզ մոտ:
  2. Գտեք համախոհներ և ստեղծեք նրանց հետ ընդհանուր նախագիծ: Նման նպատակների համար մարդիկ միավորվում են գրեթե բոլոր կրթական հարթակներում, որտեղ կան ծրագրավորման դասընթացներ։
  3. Ընտրեք դասընթացներ, որոնց կազմակերպիչն օգնում է աշխատանքի տեղավորման հարցում: Օրինակ՝ GeekBrains-ում վերապատրաստումից հետո բացվում է տարբեր ընկերությունների, այդ թվում՝ վճարովի պրակտիկաների հասանելիությունը։ GeekUniversity-ը և STEP-ը երաշխավորում են իրենց շրջանավարտների զբաղվածությունը:

Նախքան չմոռանաք համացանցում փնտրել առաջադրանքների և հարցերի ցուցակները, որոնք հաճախ տրվում են աշխատանք փնտրողներին: