Ինչպես Սովորել C++

Իմ համոզմամբ, այն ծրագիրը, որը սովորողին կտա ամբողջական, գործնական գիտելիքներ C++ով լուծվող խնդիրների համար ու նաև կծածկի ցանկացած ինտերվյուի ժամանակ փնտրվող գիտելիքների 99%-ը, պիտի պարունակի հետևյալ երեք առանցքային կետերը (որոնք ընդհանուր են ու կարևոր նաև այլ լեզուների պարագայում).
  1. Գիրք. կարդացեք անձամբ ձեզ դուր եկած ցանկացած գիրք (շատ լավ, դասակարգված և թարմ պահվող ցուցակ կա այստեղ և այստեղ) և դրա մեջ եղած կոդի օրինակները փորձեք: Լավ կլինի օրինակները փոքր լինեն (2-3 էջ շարունակական կոդով չլինեն): 
  2. Ալգորիթմեր. փորձեք հերթով իրականացնել հիմնարար, ամենից հաճախ հանդիպող ու օգտագործվող ալգորիթմերը: Շատ լավ շարք են կազմում ժամանակակից STL-ի ալգորիթմերը:
  3. Պրոեկտ. մի քիչ մեծ պրոեկտ ընտրեք, որի լուծումը մի 2-3 հազար տող պահանջի, իսկ խնդրի դրվածքը մոտ լինի իրական կյանքում հանդիպող տեսքին:

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

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

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

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

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

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

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