Սովորել Ծրագրավորում

Ծրագրի Կետերը


Ուսման և ուսուցման ցանկացած ծրագիր, որը կտա ծրագրավորման ամբողջականգործնական գիտելիքներ ու, մասնավորապես, կապահովի ցանկացած առողջ հարցազրույցի ժամանակ ակնկալվող գիտելիքների մեծ մասը, պիտի պարունակի հետևյալ չորս առանցքային կետերը, որոնք գրված են C++ լեզվի համար որպես օրինակ, բայց ընդհանուր են ցանկացած այլ լեզուների պարագայում.
  1. Տեսանյութեր. ժամանակակից ուսումն այլևս անհնար է պատկերացնել առանց օնլայն տեսանյութերի — ինչու՞ չօգտվել ցանկացած թեմայով աշխարհի լավագույն համալսարաններից, ընկերություններից և անկախ կոնֆերանսների կողմից պարբերաբար հրապարակվող բազմաթիվ դասախոսություններից ու ելույթներից: Դրանք այնքան շատ են, որ անգամ այդ լավագույնների միջից կարող եք ընտրել անձամբ ձեզ դուր եկած ցանկացածի Յութուբյան ալիքը և սկսեք նայել իրենց playlist-երը կամ առանձին տեսանյութերը: C++ի համար ես խորհուրդ եմ տալիս. CppCon, BoostCon, Meeting Cpp, cpponsea, Pacific++, Jason Turner. Ինչքանով հասկացվում է, նայեք արագացված՝ խնայելով ժամանակը: Նայելուց ցուցադրվող կոդի օրինակները փորձարկեք, շատ հաճախ ամենապարզ ու հասկանալի թվացող կտորը կարող է զարմացնել, եթե այն փորձարկեք:
  2. Գիրք. կարդացեք անձամբ ձեզ դուր եկած ցանկացած գիրք (շատ լավ, դասակարգված և թարմ պահվող ցուցակ կա այստեղ և այստեղ) և դրա մեջ եղած կոդի օրինակները փորձեք: Լավ կլինի օրինակները փոքր լինեն (2-3 էջ շարունակական կոդով չլինեն): 
  3. Ալգորիթմեր. փորձեք հերթով իրականացնել հիմնարար, ամենից հաճախ հանդիպող ու օգտագործվող ալգորիթմերը: Շատ լավ շարք են կազմում ժամանակակից STL-ի ալգորիթմերը:
  4. Պրոյեկտ. մի քիչ մեծ պրոյեկտ ընտրեք, որի լուծումը մի 2-3 հազար տող պահանջի, իսկ խնդրի դրվածքը մոտ լինի իրական կյանքում հանդիպող տեսքին:

Ծրագրի Իրականացումը


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

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

Տեսանյութեր Սկսել 1-ին կետից ու կենտրոնանալ դրա վրա, հատկապես եթե կարողանում եք նայել առնվազն 1.5x արագացված: Դա կլինի ամենաարագ ներածությունը, որովհետև իրեն հասկանալի լեզվով մարդը կարող է նայել շատ ավելի արագ, քան կարդալ: Երբ ինձ հետաքրքիր կամ անհրաժեշտ է եղել որևէ նոր ոլորտ ուսումնասիրել, ես միշտ առաջինը ընտրել ու դիտել եմ ինտերնետում այդ մասին որակյալ կազմված տասնյակ ու հարյուրավոր տեսանյութեր:

Գիրք Միայն տեսանյութերով, սակայն, գիտելիքներում կարևոր տեղ է բաց մնում. դուք երբեք չեք շփվում համակարգված, այսինքն՝ ամեն նախադասությունը երկար մտածված, հատուկ ու հստակ շարադրված մտքերի հետ, ինչպես որակյալ գրված գրքերում է: Հետևաբար, առաջին կետը որոշ ժամանակ (օրինակ, մի քանի ամիս) անելուց հետո կարող եք զուգահեռ ավելացնել նաև 2-րդ կետը:

Ալգորիթմեր Հենց որ զգաք, որ C++ի գիտելիքները բավարար ամրացել են և թույլ են տալիս, կամաց-կամաց սկսեք նաև 3-րդ կետն անել, որը կսովորեցնի հիմնարար, ամեն օր հանդիպող ալգորիթմերը ճանաչել ու ճիշտ արտահայտել C++ով: Միշտ կենտրոնացեք պարզ բաները՝ հիմնովի, շատ լավ հասկանալու վրա, քան՝ փորձել մեծ քանակի կամ բարդ բաներ անել ու դրանք արդյունքում մակերեսորեն հասկանալ: Դուք ավելի շատ հիմնարար սկզբունքներ կսովորեք՝ փայլուն հասկանալով ու իրականացնելով std::for_each() տիպի ֆունկցիաները, քան նույնքան ժամանակում մի կերպ ստանալով Դայքստրայի ալգորիթմի աշխատող տարբերակը: Սխալ չհասկանաք, երկուսն էլ կարևոր է իմանալ: Բայց, նախ՝ սկսել պետք է պարզ, հիմնարար բաները լավ հասկանալուց: Եվ երկրորդ՝ առորյա կենցաղում անհամեմատ ավելի շատ են հանդիպում ոչ թե Դայքստրայի ալգորիթմի նմուշներ, այլ անիմաստ for-ցիկլեր, որոնք գրող ծրագրավորողը կարծես տեղյակ չի եղել, որ std::for_each() գոյություն ունի: Աշխատեք պարզ մտածել:

Պրոյեկտ Առաջին երեք կետերն անելով, հենց որ զգաք, որ բավարար չափով ամրացել եք լեզվի (C++ի) և հիմնարար ալգորիթմերի մեջ, անցեք 4-րդ կետին. ընտրեք ձեզ դուր եկող՝ մի քիչ մեծ պրոյեկտ ու սկսեք իրականացնել: Դրանով կսովորեք, թե առաջին երեք կետերում սովորածը ոնց և որ պահերին է հայտնվում ու կիրառվում մեծ պրոյեկտներում:

Ես նույն ճանապարհն եմ անցել ուսանող ժամանակ՝ բացառությամբ առաջին կետի, քանի որ այդ ժամանակ տեսանյութերը, ցավոք, դեռ այդքան տարածված չէին, բայց 2008 թվից սկսած՝ հենց որ դրանք սկսեցին շատանալ, բաց չեմ թողել C++ի ոլորտում առաջատար մասնագետների ոչ մի նոր տեսանյութ: Որպես 2-րդ կետ սկսեցի Դեյտլի գրքից, որի առաջին հինգ գլխից հետո անցա Ստրաուստրուպի գրքերին: Որպես 3-րդ կետ՝ մի 10 հատ սորտավորման ալգորիթմ իրականացրեցի (բայց իմ տված խորհուրդը վերևում ավելի լավն է, օրինակ, բազմազանության տեսանկյունից): Որպես 4-րդ կետ էլ ընտրեցի ACM-ի մրցույթների խնդիրներից:

Ժամանակ առ ժամանակ կարող եք նաև փորձել Հայաստանյան կազմակերպությունների ինտերվյուներում տարածված հարցերի ցանկը, բայց խորհուրդ չէի տա ծայրից ծայր դրանցով «պարապել», այլ՝ դիտարկեք այդ հարցաշարը որպես չափիչ գործիք. եթե դրանց մի 80%-ին կարող եք ինքներդ ձեր կարծիքով բավարար վստահությամբ պատասխան տալ, ուրեմն կարող եք դիմել հայտարարություններով: Եթե ոչ՝ շարունակեք պարապել վերևում առաջարկած ծրագրով ու մի 2-3 ամիս անց վերադարձեք հարցերի ցանկին՝ կրկին «չափելու» համար:

Զուտ գիտելիքների առումով, նշված չորս կետերը կծածկեն ցանկացած հարցազրույցի ժամանակ անհրաժեշտ տպավորության առավելագույն մասը: Այսինքն՝ դրանից հետո մի 4-5 տեղ հարցազրույցի գնալով առնվազն մեկնումեկը բարձր հավանականությամբ կհաջողվի՝ կախված մնացած հոգեբանական, մարդկային ու մշակութային համապատասխանությունից, որոնք նույնպես շատ կարևոր են: Բայց, ինչը ավելի՛ ու ամենա՛կարևորն է — այդ կետերն իրականացնելով դուք կշփվեք «իրական կյանքին» մոտ ծրագրավորման հետ, ինչի արդյունքում դուք ձեզ ավելի վստահ կզգաք, այդ վստահությունը կերևա հարցազրույցի ժամանակ, ձեզ կընդունեն բոլորովին այլ՝ ավելի բարձր սպասելիքներով, հետևաբար՝ ձեզ հավանաբար ավելի հետաքրքիր խնդիրներ կտան, հետևաբար՝ դուք աճելու ավելի լավ հնարավորություն կունենաք, ձեր աշխատավարձը ավելի շուտ ու ավելի շատ կբարձրանա, և այլն:

Վերջին մտքի հետ կապված, ու նաև ամբողջության համար նշեմ. միշտ հիշեք, որ գիտելիքներից զատ, գործի ընդուն(վ)ելուց դուք ընտրում եք մարդկանց, ում հետ շփվելու եք ամեն աշխատանքային օր 8-9 ժամ — գումարային, երևի կյանքի մեծ մասը — այսինքն, պատկերացրեք՝ երկու կողմն էլ, ըստ էության, գործնական կարիքներից դրդված կարծես ստիպված են ընկերներ ընտրել: Հետևաբար, երբ գիտեք, որ «չընտրվելու» պատճառը հաստատ գիտելիքների պակասը չէր, կարող եք վստահ լինել (ու կլինեք), որ այդ դեպքում ոչ միայն իմաստ չունի ափսոսալ, այլ անմիջապես հենց ձեր շահերից է բխում օրվա ու կյանքի մեծ մասը անց չկացնել ձեզ ոչ համապատասխան կոլեկտիվում: Սա գիտակցեք ամենայն հարգանքով, մարդիկ ու կոլեկտիվները տարբեր են լինում՝ տարբեր մշակույթներով ու տարբեր արժեքներով, իսկ աշխարհը հիմա ավելի մեծ է ու ավելի բաց, քան երբևէ՝ նույնիսկ նորավարտ ուսանողների համար: