Ինչ է պետք սովորել և ինչ պետք չէ սովորել լավ ծրագրավորող դառնալու համար։
Ծրագրավորող դառնալու ճանապարհին ամենադժվարն այն է, թե ինչ է պետք սովորել և որտեղ։ Մարդ ծննդյան օրվանից սկսած անվերջ սովորում է՝ սկզբում քայլել, հետո խոսել, հետո գրել ու կարդալ, հետո մաթեմատիկա ու պատմություն։ Իսկ հետո գալիս է մասնագետ դառնալու հարցին, և այստեղ էլ պետք է սովորել։
Ցանկացած մասնագիտություն պահանջում է կրթություն։ Լինի դա վարսավիր, համակարգային ադմինիստրատոր, բժիշկ, թե ծրագրավորող։ Պարզապես մասնագիտություններից յուրաքանչյուրի ուսուցման գործընթացն ունի իր առանձնահատկությունները՝ տևողություն, ֆորմատ, ուսումնական հաստաություն, պրակտիկա և այլն։
Ծրագրավորումը շատ լղոզված տերմին է։ Ավելի լավ կլինի ավելի կոնկրետանալ, թե ինչ ասել է ծրագրավորում, որպեսզի հասկանանք, թե ինչ է պետք սովորել և ուսումնասիրել՝ այդ մասնգիտությանը տիրապետելու համար։ Ծրագրավորող ասելով կարելի է հասկանալ և՛ միայն ֆրոնտ-էնդ ծրագրավորողին, և՛ տվյալների բազաների մասնագետին, և՛ համակարգի խորքերում գործ անողին, և՛ համակարգային ճարտարապետին և էլի լիքը այլ մասնագետների։
Իմ պատկերացմամբ լավ ծրագրավորողը պետք է նշածս բոլոր տեսակի ծրագրավորողների հմտություններից էլ ունենա՝ ամեն մեկից այնքան, որպեսզի իր առջև եղած խնդիրըհնարավորինս արդյունավետ կարողանա լուծել։
Դե ինչ՝ սկսենք։ Ամեն ինչ սկսվում է դպրոցից։ Պետք է դպրոցում լավ սովորել մաթեմատիկան՝ իր բոլոր դրսևորումներով։ Կարևոր են և՛ թվաբանությունը, և՛ հանրահաշիվը, և՛ երկրաչափությունը, և՛ եռանկյունաչափությունը, և՛ մաթ․ անալիզը, և՛ կոմբինատորիկան և մնացած մաթեմատիկական առարկաները, որոնց մասին ես միգուցե նույնիսկ չգիտեմ։ Սա գործընթացի ամենաբարդ մասերից է, քանի որ դպրոցական մաթեմատիկան ամենաանհասկանալին է, մասամբ ոչ այնքան կոմպետենտ ուսուցիչների առկայությամբ պայմանավորված։ Լավ կլինի, որ մաթեմատիկական կրթություն ունեցող ծնողները օգնեն իրենց ապագա ծրագրավորող երեխաներին այս մասում առավելագույնս արդյունավետ լինելու համար։
Դպրոցից հետո գալիս է ԲՈՒՀը։ Ծրագրավորումը բարձրագույն որակավորում պահանջող մասնագիտություն է։ ԲՈՒՀեր շատ կան, ու կան տարբեր ֆակուլտետներ ու մասնաագիտություններ։ Այստեղ դիմորդն ինքը պետք է կողմնորոշվի՝ ելնելով իր ավագ քույր-եղբայրների, կամ հարևան-բարեկամների փորձից։ Ամեն մի ԲՈՒՀում էլ կան խնդիրներ, և ամեն մարդ ինքուրույն պետք է գտնի իր նախասիրություններին և պահանջներին բավարարող ԲՈՒՀը։
Երբեմն ճիշտ է նաև ինքնակրթվելը։ Այս նյութը նպատակ ունի օգնել նաև ինքնակրթությամբ զբաղվել ցանկացող ապագա ծրագրավորողներին, որպեսզի նրանք կարողանան ձեռք բերել համակարգված գիտելիք։
Բարձրագույն մաթեմատիկա։ Աշխարհի ամենացավոտ տերմիններից մեկը։ Շատ մարդկանց աչքերում արցունքի կաթիլներ են հայտնվում այս անվանումը լսելուց ․․․ Ինչ արած, բարդ է, անհասկանալի է, միգուցե վատ է մատուցվում, միգուցե չգիտեք, թե ինչու է պետք սովորել, բայց ՊԵՏՔ է սովորել։
Վերցնենք մաթեմատիակական անալիզը։ Կամայական էպսիլոնի համար, գոյություն ունի միակ դելտա, որի համար ճիշտ է հետևյալ պնդումը․․․ Այս ամենը ուսանողի համար ստեղծում է մի նոր, ալտերնատիվ աշխարհ։ Էսպիլոնների ու դելտաների, անվերջ մեծ ու անվերջ փոքրերի, սահմանների և անվերջ գումարների մի նոր աշխարհ։ Եվ, այդ աշխարհը մուտք գործելուն և այն հասկանալուն զուգահեռ, տեղի է ունենում գիտակցության ընդլայնում։ Ուղեղը սկսում է նոր կերպ մտածել։ Սկսում է մտածել մաթեմատիկայի լեզվով։ Չմոռանանք, որ էլեկտրոնային հաշվիչ մեքենան ևս այդ լեզվով է մտածում։
Այսպիսով՝ ապագա ծրագրավորողը պետք է զինվի համապատասխան մաթեմատիկական զենքերով՝ մաթ․ անալիզ, բարձրագույն հանրահաշիվ, անալիտիկ երկրաչափություն, կոմպլեքս փոփոխականի ֆունկցիաներ, ֆունկցիոնալ անալիզ, թվային մեթոդներ, դիֆերենցյալ և մաթ-ֆիզ հավասարումներ, մաթ․ վիճակագրություն, հավանականության տեսություն և մնացած բոլորը։
Հաջորդիվ գալիս է մաթ․ կիբերնետիկան։ Սա այն գիտությունն է, որի կիրառումն է հենց համակարգիչը։ Այս բլոկը պարունակում է այնպիսի առարկաներ և տեսություններ, ինչպիսիք են դիսկրետ մաթեմատիկան, գրաֆների և հիպերգրաֆների տեսությունները, բուլյան հանրահաշիվը, կոմբինատորիկան, ավտոմատների տեսությունը, կրիպտոգրաֆիան և կրիպտոանալիզը, ալգորիթմների տեսությունը, մաթ․ տրամաբանությունը։
Առարկաների այս խումբը ևս զարգացնում է ուղեղը և առավել ընդլայնում է սովորողի մտահորիզոնը։ Հենց այս առարկաների խումբն է օգնում ալգորիթմական մտածողության զարգացմանը, առանց որի չի կարելի կոչվել լավ ծրագրավորող։
Անցնենք բուն ծրագրավորմանը վերաբերող առարկաներին։ Առաջնային է ծանոթանալ համակարգչի ապարատուրայի իրականացման ճարտարապետությանը։ Պետք է հասկանալ, թե ինչ է կենտրոնական պրոցեսորը, ինչպես է այն աշխատում, ինչպես է հաղորդակցվում մյուս սարքերի հետ։ Այս ընթացքում բազմիցս կառնչվեք օպերացիոն համակարգի գաղափարի հետ, որին էլ հենց պետք է ծանոթանալ հաջորդիվ։ Այս փուլում արդեն անհրաժեշտություն կառաջանա ուսումնասիրել որևէ ծրագրավորման լեզու, որը հնարավորություն կտա արդեն իսկ ձեռք բերված հարուստ գիտելիքը կիրառել և տեսնել դրանց պրակտիկ օգուտը։
Այդ լեզվի օգնությամբ հաջորդիվ պետք է ուսումնասիրել տվյալների կառուցվածքներ և ալգորիթմներ դրանց վրա, հասկանալ ալգորիթմի և դրա բարդության գաղափարները։
Այնուհետև պետք է ուժեղացնել տեխնոլոգիական ֆունդամենտը։ Պետք է ծանոթանալ ցանցային, այնուհետև վեբ ծրագրավորման հիմունքներին, անհրաժեշտ է գոնե մակերեսորեն ծանոթանալ տվյալների պահպանման և հասանելիության կազմակերպման ժամանակակից եղանակներին։ Եվ ևս մի կարևոր գիտություն՝ զուգահեռ ծրագրավորում։ Այն այսօր հանդիսանում է պարտադիր, քանի որ մեր օրերում բոլոր պրոցեսորները ունեն մեկից ավել միջուկներ և լավ ծրագրավորողը պետք է կարողանա դրանք արդյունավետ օգտագործել։
Այսքանից հետո կարելի է նայել, թե ինչն է այս պահին թրենդային և ինչն է ձեզ հետաքրքրում և սկսել ուսումնասիրել հենց այդ ուղղությունների համար պարտադիր հանդիսացող նյութը։
Մասնավորապես՝ IoT — Internet of Things ոլորտ մուտք գործելու համար կարիք կլինի խորապես տիրապետել C++ լեզվին, GNU/Linux համակարգին և վերը նշված գրեթե բոլոր տեխնալագիաներին։ Blockchain ոլորտի դեպքում պետք կլինի առավել խորապես հասկանալ կրիպտոգրաֆիան և ալգորիթմները, մեքենայական ուսուցման դեպքում՝ հավանականության տեսություն, հանրահաշիվ և էլի լիքը մաթեմատիկա և այլն։
Իհարկե այսքանով ուսումը չի ավարտվում։ Ծրագրավորողը ամեն օր պետք է շարունակի իր զարգացումը, անկախ նրանից, թե որտեղ է աշխատում և ինչ հաջողություններ է գրանցել՝ որպես մասնագետ։ Չզարգացող ծրագրավորողը երկու տարուց կորցնում է իր արժեքը․․․
Սովորել, սովորել և էլի սովորել։ Ահա, թե ինչ է պետք լավ ծրագրավորող դառնալու համար։ Կհանդիպենք լսարանում, գրադարանում, լաբորատորիայում, ինտերնշիփերի ընթացքում և առօրյա զարգացմանն ուղղված այլ միջոցառումների ընթացքում։