Գրեթե յուրաքանչյուր ծրագրավորող հարցեր է տալիս այն մասին, թե ինչպես պետք է զարգացնի իր հմտությունները և աճի ինչ ուղղություն ընտրի. Մեկ ապրանքի վրա երկար տարիների աշխատանքը, հակառակ առասպելներին, դառնում է ոչ թե սահմանափակում, այլ օգտակար հնարավորություն։ Այս հոդվածում մենք կիսում ենք մեր backend-ի մշակող Ալեքսեյի փորձը, ով 6 տարի նվիրել է հավաստագրերին և այս ընթացքում աշխատել է ճարտարապետ դառնալու ճանապարհը:
Ով ճարտարապետ է
ՏՏ ճարտարապետը (տեխնոլոգիական առաջատարը) բարձր մակարդակի ծրագրավորող է, ով զբաղվում է ՏՏ նախագծերի գլոբալ խնդիրներով: Նա ընկղմվում է հաճախորդի բիզնես գործընթացների մեջ և օգնում է լուծել իր խնդիրները տեխնոլոգիայի միջոցով, ինչպես նաև որոշում է, թե ինչպես է կառուցված այս կամ այն տեղեկատվական համակարգը:
Նման մասնագետին անհրաժեշտ է ոչ միայն հասկանալ առանձին առարկայական ոլորտները, այլև տեսնել ամբողջ գործընթացը.
- Բիզնեսի խնդիր դնելը.
- Մշակում, ներառյալ տվյալների ծրագրավորում, պատրաստում, պահպանում և մշակում:
- Ենթակառուցվածքների տեղակայում և աջակցություն:
- Թեստավորում
- Տեղակայել.
- Վերլուծություն և գործառնական ծառայություններ:
Սա նշանակում է զարգացման կյանքի ցիկլի ցանկացած մասնագետի կամ թիմի տեղը դնելու, համակարգերի ներկա վիճակը ներսից հասկանալու, թույլ տրված սխալները բացահայտելու և նպատակներ ձևակերպելու կարողություն: Երբեմն անհրաժեշտ է ինքնուրույն վիրահատություն կատարել։
Մասնագիտական զարգացման ուղին կառուցապատողից ճարտարապետ երկար է տևում՝ սովորաբար մի քանի տարի: Դա անելու համար մշակողին անհրաժեշտ են ինչպես գործնական հմտություններ, այնպես էլ տեսական գիտելիքներ, որոնք կարող են հաստատվել միջազգային սերտիֆիկացմամբ:
Ավելի քան 5 տարի մեկ նախագծի վրա՝ առօրյա՞, թե՞ աճի հնարավորություն:
Մի քանի տարի առաջ մենք սկսեցինք աշխատել մի մեծ բժշկական ՏՏ համակարգի վրա օտարերկրյա հաճախորդի համար: Այս լայնածավալ նախագծում կային որոշակի խնդիրներ.
- սահմանափակ մուտք;
- անկայուն արդյունահանում;
- աներևակայելի երկար սպրինտներ և երկարատև հաստատումներ:
«Ժամանակն է բարելավել ձեր հմտությունները»«,- այս որոշմանը հանգեց առաջատար ծրագրավորողներից մեկը՝ Ալեքսեյը, որպեսզի հաղթահարի թվարկված դժվարությունները և ավելի լավ հասկանա համակարգը:
Ալեքսեյը կիսվեց իր փորձով, որտեղ ավելի լավ է սկսել մարզումները, ինչ վկայականներ են կարևոր ձեռք բերել, ինչպես և ինչու դա անել:
Քայլ առաջին. բարելավել ձեր անգլերենը
Ծրագրավորման լեզուները զարգացման հիմնարար մասն են, բայց հաղորդակցության լեզուները նույնքան կարևոր են: Հատկապես անգլիախոս հաճախորդի հետ շփումներում:
Պրակտիկայից
Մի գեղեցիկ օր Ալեքսեյը հաճախորդի կողմից զանգ ստացավ աշխատակցից։ Այն ժամանակ մեր ծրագրավորողը դեռ չէր կարող պարծենալ մի փունջ վկայագրերով՝ ոչ տեխնոլոգիայի, ոչ կառավարման, ոչ էլ հաղորդակցության մեջ: Միգուցե դրանք օգտակար չլինեին. ի վերջո, դուք կարող եք լինել իրավասու մասնագետ առանց լրացուցիչ ռեգալիայի: Բայց խնդիրը դեռ առաջացավ։
Մենք պետք է հասկանանք, որ բանավոր լեզուն արմատապես տարբերվում է գրավորից: Եթե դուք լավ տիրապետում եք անգլերենի բնութագրերին, բայց չեք զբաղվում լսելով և խոսելով, ապա մենք ձեզ համար վատ լուր ունենք: Այս դեպքում գործընկերների հետ հեռախոսազրույցները կարող են փակուղի հանգեցնել։
Ալեքսեյը զանգի ժամանակ մի քանի ծանոթ բառեր որսաց, բայց նրա գործընկերոջ ելույթն այնքան արագ էր և ի տարբերություն աուդիո դասերի դասական արտասանության, որ նրա հարցերի հիմնական էությունը ինչ-որ տեղ անցավ: Քաղաքավարությունից և իրավիճակը բարդացնելու դժկամությունից ելնելով Ալեքսեյը արագ համաձայնեց բոլոր առաջարկներին։
Պե՞տք է ասեմ, որ աշխատանքի ընթացքում տհաճ բացահայտումներ են արվել։ Մեր ծրագրավորողը գրանցվեց մի բանի համար, որը նա բացարձակապես միտումնավոր կհրաժարվեր, եթե առաջարկը լիներ հասկանալի լեզվով:
Այդ պահին պարզ դարձավ, որ պարզապես անհրաժեշտ է բարելավել լսելու և խոսելու հմտությունները։ Դա անելու լավագույն միջոցը հավաստագրերի միջոցով էր:
Անգլերեն լեզվի վկայական
Մեր բժշկական նախագծի շրջանակներում հաղորդակցությունը բարելավելու համար Ալեքսեյը սովորել է միանգամից մի քանի ծրագրերում։ Արդյունքում նա անցել է FCE - First Certificate in English certification: Սա օգնեց ինձ սկսել լսել հաճախորդին և իմ մտքերը փոխանցել նրան:
Life hacking:
Խուսափեք անգլերենի հիմնական ծրագրերից: Հմտությունը պետք է ուղղված լինի: Եթե Ձեզ անհրաժեշտ է անգլերեն բիզնես հաղորդակցության համար, ապա պետք է ընդունեք այն: Պարզապես ծայրահեղությունների մեջ մի ընկեք և վերցրեք CAE-ն (Վկայական առաջադեմ անգլերենում): Նրա յուրահատկությունը բարդ բառերն են, կոնկրետ արտահայտությունները, որոնք գրեթե երբեք չեն օգտագործվում միջազգային հաղորդակցության մեջ։
Քայլ երկու. սերտիֆիկացում ամբողջ տեխնոլոգիական փաթեթում
Սկզբում նախագիծը հիմնված էր ORM օբյեկտ-հարաբերական քարտեզագրման տեխնոլոգիայի վրա: Հաճախորդի կողմից մշակող թիմը հպարտանում էր իր մտահղացմամբ, քանի որ ամեն ինչ արվում էր առաջադեմ կոնցեպտների միջոցով՝ բարդ և զով:
Այնուամենայնիվ, արտադրության մեջ խնդիրները, մասնավորապես, անընդհատ սառեցվող SQL սերվերը հազվադեպ չէին: Բանը հասավ նրան, որ խնդրի բնորոշ լուծումը ծառայության վերագործարկումն էր։ Հաճախորդը զանգահարեց թիմի ղեկավարին և ասաց, որ ժամանակն է վերագործարկել: Վերջապես որոշեցինք վերջ տալ դրան։
Հաճախորդը ցանկանում էր մշակել համակարգի կատարումը. դրա համար անհրաժեշտ էր ներդնել պրոֆիլավորում և պարբերաբար իրականացնել օպտիմալացում: Այդ ժամանակ՝ մոտ 2015 թվականին, Ants Profiler-ն ընտրվեց որպես պրոֆիլավորման գործիք, սակայն այն վատ կատարեց։ Ցածր մանրամասնությամբ դժվար էր տեղեկատվություն ստանալ կոդերի կարևոր բլոկի մասին: Առավելագույն մանրամասնությամբ, Ants Profiler-ը սկսեց փոխել կոդը այնպես, որ համակարգերի ֆունկցիոնալությունը վտանգի տակ էր. որտեղ պրոֆիլավորումը կազմաձևված էր, ամեն ինչ պարզապես խափանվեց: Այսպիսով, մենք փոխեցինք մեր մոտեցումը:
Սկսեցինք վիճակագրության վերլուծությունից
Վաճառքի վիճակագրությունը վերլուծելիս պարզ դարձավ, որ սերվերի վրա աշխատանքի 95%-ն ունի 4 տող պարզունակ բիզնես տրամաբանություն։ Նրանց համար բավարար էր մեկ SQL հարցում, և ոչ թե ORM-ով բիզնես տրամաբանական բլոկի կողմից ստեղծված հարցումների ամբողջական փաթեթ։
Ալեքսեյն առաջարկեց և իրականացրեց պահեստավորված ընթացակարգ՝ առանց ORM-ի աշխատանքը տեղափոխելու համար: Գաղափարը հակասում էր ծրագրի սովորական պարադիգմին, թիմի ղեկավարը զգուշությամբ ողջունեց այն, բայց հաճախորդն ընդունեց ամեն ինչ և խնդրեց իրականացնել: Սա զարմանալի չէր, քանի որ նոր մեթոդը հնարավորություն տվեց կրճատել արտադրության վրա մշակման հետաձգումները չորս ժամից մինչև մի քանի րոպե՝ միջինը 98 անգամ:
Այնուամենայնիվ, մենք կասկածներ ունեինք՝ սա ճի՞շտ որոշում է, թե՞ անձնական նախապատվության հարց։ Ամենակարող C#-ի և ORM-ի հանդեպ հավատը ցնցվեց մի պատահարից, որը ցույց տվեց պարզ լուծումների ողջ ուժը:
Գործ երկու
Թիմը հարցում է գրել ORM պարադիգմի շրջանակներում տվյալների հետ աշխատելու համար՝ կազմված բոլոր կանոններով, առանց սխալների: Դրա մշակումը տևեց 2-3 րոպե, և այս պարամետրերը ընդունելի էին թվում: Այնուամենայնիվ, այլընտրանքային իրականացումը, օգտագործելով պարզ ընտրիչներ և դիտումներ, ավելի արագ արդյունքներ տվեց՝ 2 վայրկյանում:
Ակնհայտ դարձավ, որ ժամանակն է ընտրել մասնագետի, ով սերտիֆիկացում կանցնի նախագծի ողջ փաթեթում, որպեսզի հասկանա բոլոր նրբությունները և ընտրի օպտիմալ մեթոդը: Ալեքսեյը ստանձնեց այս գործը։
Առաջին վկայականները
Էությունը հասկանալու համար Ալեքսեյն անցավ
- TS. Windows հավելվածների մշակում Microsoft .NET Framework 4-ի հետ
- TS. Տվյալների մուտք գործել Microsoft .NET Framework 4 ծրագրավորում C#-ով
- TS՝ Microsoft .NET Framework 3.5 Windows Forms հավելվածի մշակում
- PRO. Windows հավելվածների նախագծում և մշակում Microsoft .NET Framework 3.5-ի միջոցով
- PRO. Windows-ի վրա հիմնված հավելվածների նախագծում և մշակում՝ օգտագործելով Microsoft .NET Framework-ը
- TS: Microsoft .NET Framework 2.0 - Windows-ի վրա հիմնված Հաճախորդների մշակում
Փորձելով օպտիմալացնել աշխատանքը նոր նախագծի վրա՝ թիմը հանգեց հետևյալ եզրակացությունների.
- Համակարգերի աշխատանքի համար անհրաժեշտ է պահպանել կոդ գրելու կանոնները՝ ոչ թե ներքևումներ և մեկնաբանություններ, այլ տեխնիկական բնութագրեր՝ տվյալների բազաների զանգերի քանակը, սերվերի ծանրաբեռնվածությունը և շատ ավելին։
- Հակասական հասկացությունների կիրառումը կարող է հանգեցնել անախորժությունների: Տվյալների բազաների հայեցակարգը բազմությունների տեսությունն է, մինչդեռ ORM-ը գործառնությունների հայեցակարգ է:
- Գաղափարները, որոնք խախտում են իրերի սովորական կարգը, կարող են հանդիպել թիմի ներսում դիմադրության: Զարգացումը կապված է նաև հարաբերությունների և ձեր տեսակետը վիճարկելու ունակության հետ:
- Հավաստագրումն ընդլայնում է ձեր մտահորիզոնը և թույլ է տալիս հասկանալ, թե ինչ կարելի է օգտագործել, իսկ ինչը՝ ոչ:
Քայլ երրորդ. Իմացեք ավելին, քան կոդը
Լայնածավալ ՏՏ լուծումների վրա աշխատելիս շատ գործոններ կարևոր են: Օրինակ, ոչ ամեն մշակող է ուշադրություն դարձնում ցանցի պարամետրերին, բայց նույնիսկ դրա թողունակությունը կարող է ազդել բիզնես խնդրի լուծման վրա։
Սա հասկանալը տրված է 98 սերիայի սերտիֆիկացում:
Դրանք թույլ են տալիս ավելի լայն հայացք նետել իրերին և դուրս գալ սահմանափակ «միայն կոդ» հասկացությունից: Սրանք հիմունքներ են, հիմունքներ, բայց դրանք կարևոր են ամեն ինչ ավելի խորը մակարդակով հասկանալու համար:
98-րդ սերիայի հավաստագրերը կարճ թեստեր են՝ 30 հարց 45 րոպեի համար:
Քայլ չորրորդ. Գործընթացների կառավարում
Կլինիկաների հետ աշխատելն ավելի կարևոր գործ է, քան, ասենք, բջջային խաղ ստեղծելը։ Այստեղ դուք չեք կարող ավելացնել գործառույթ և այն թողարկել արտադրության համար. կարևոր է հետևել հաճախորդի կողմից հաստատման և բազմաթիվ խմբագրումների գործընթացին, քանի որ վտանգված են մարդկանց առողջությունն ու կյանքը:
Typical Agile-ը ցանկալի արդյունքներ չտվեց այս նախագծում, և յուրաքանչյուր սպրինտ տևեց բավականին երկար: Տեղակայումների միջև այն տևել է 6 ամսից մինչև մեկ տարի:
Բացի այդ, տեխնիկապես անհնար էր սպասարկվող տասը կլինիկաների գործընթացները բերել ինչ-որ ընդհանուր հայտարարի։
Այս պայմաններում ավելի արագ արդյունքներ ստանալու համար մշակողներին անհրաժեշտ էր անձնական պատասխանատվություն և գործընթացների լայնածավալ տեսլական, ինչը նշանակում է մշտական կենտրոնացում և բարձր որակավորում:
Երբ մասնագետը խորասուզվում է գործընթացի մեջ, նա հստակ տեսնում է արդյունքները, պատճառներն ու հետևանքները, ամբողջ պատկերը։ Սա միևնույն ժամանակ լրացուցիչ մոտիվացիայի և իրազեկման գործոն է, բարելավելով խնդիրներն ու խնդիրները լուծելու կարողությունը։
Լավ գործող ենթակառուցվածքի, լավ կառուցված ճարտարապետության և օպտիմալ կոդով մեկ մարդ կարող է իր վրա վերցնել բազմաթիվ գործընթացներ: Սակայն դա չի նշանակում, որ պետք է դաստիարակել ունիվերսալ զինվորներ, որոնք ունակ են միայնակ ղեկավարել նախագիծը։ Հաղորդակցությունը և թիմային աշխատանքը կարևոր են:
Թիմում յուրաքանչյուր մշակող հասկանում է, որ իր գործընկերները կախված են իր գործողություններից: Զարգացման փուլում 5 րոպե խնայելը նշանակում է թերևս 5 լրացուցիչ ժամ թեստավորում: Սա հասկանալու համար կարևոր է կապ հաստատել։
Մեր նախագծում Ալեքսեյն օգնություն է ստացել գործընթացները յուրացնելու հարցում
- M_o_R հիմնադրամի վկայագիր ռիսկերի կառավարման ոլորտում
- Agile Scrum հիմնադրամ
- ՏՏ ծառայությունների կառավարման հիմնադրամ
- EXIN բիզնես տեղեկատվության կառավարման հիմնադրամ
- PRINCE2 հիմնադրամի վկայական նախագծերի կառավարման ոլորտում
- Փորձարկման ինժեների վկայական
- Microsoft Operations Framework Foundation
- Արագաշարժ սպասարկման նախագծեր
Դասընթացներ անցկացվեցին edX-ի վրա, որոնք օգնեցին համակարգը դիտարկել վիճակագրության և նիհար ծրագրավորման տեսանկյունից, և ավելի ուշ մղվեց ստանալ ճարտարապետի վկայական:
- Նիհար արտադրություն
- Վեց Սիգմա. Վերլուծել, կատարելագործել, վերահսկել
- Վեց Սիգմա. Սահմանել և չափել
Վեց Սիգմա սկզբունքի համաձայն՝ վիճակագրական հսկողությունը ապահովում է բարձրորակ արդյունք՝ չափազանց մեծ հավանականությամբ։
Բարձրացնելով իր մակարդակը, մշակողը, որպես կանոն, գալիս է հետևյալ եզրակացությունների.
- Մի աշխատեք շատ, բայց աշխատեք արդյունավետ:
- Մի բարդացրեք ձեր կյանքը՝ հետապնդելով արտաքինը. շքեղ տեխնոլոգիան անպայմանորեն չի լուծում խնդիրները ավելի լավ:
- Ընկերացեք մասնագետների հետ ցիկլի բոլոր փուլերում և պարզեք նրանց ցավի կետերը։ Ճարտարապետը պետք է տիրապետի գործընթացներին՝ խնդրի բացահայտում, խնդրի առաջադրում, ցանցի տոպոլոգիայի նախագծում, մշակում, փորձարկում, աջակցություն, շահագործում:
- Ստուգեք յուրաքանչյուր հատկանիշ ներսից և դրսից:
- Պատահում է, որ ՏՏ գործընթացները չեն համապատասխանում բիզնես գործընթացներին, և դրանով պետք է զբաղվել:
Քայլ հինգ. հասկանալ ճարտարապետությունը Big Data-ի ոսպնյակի միջոցով
Նախագծի ընթացքում մենք գործ ունեցանք բավականին մեծ տվյալների բազաների հետ։ Գոնե այդպես էր թվում մինչև որոշակի պահ։ Երբ Ալեքսեյը սկսեց մեծ տվյալներ ուսումնասիրել edX-ի վրա, պարզվեց, որ նախագծի 1,5 Tb-ը փոքր տվյալների բազա է։ Լուրջ կշեռքներ՝ 10 տբ-ից, և այնտեղ պահանջվում են այլ մեթոդներ։
Հավաստագրման ուղղությամբ հաջորդ քայլը մեծ տվյալների դասընթացն էր: Նա օգնեց հասկանալ տվյալների հոսքի կազմակերպումը և արագացնել արտադրական գործառնությունները: Եվ նաև ուշադրություն դարձրեք փոքր գործիքներին, օրինակ՝ սկսեք օգտագործել Excel-ը՝ առանձին միկրո առաջադրանքներ լուծելու համար։
Ատեստատ:
Microsoft-ի մասնագիտական ծրագիր. Մեծ տվյալների վկայագիր
Քայլ վեցերորդ՝ մշակողից ճարտարապետ
Բոլոր թվարկված վկայագրերը ստանալուց հետո, դեռ ծրագրավորող լինելով, Ալեքսեյը սկսեց հասկանալ, որ ստացված տեղեկատվությունը վերացականության բարձր մակարդակ ունի, և դա հեռու էր վատ լինելուց:
Գործընթացների լայնածավալ տեսլականը տանում է դեպի ճարտարապետի մակարդակ՝ հավաստագրման ամենաբարձր մակարդակներից մեկը:
Ճարտարապետի վկայական ստանալու համար Ալեքսեյը եկավ
Ծրագրի շրջանակներում սովորելու դասընթացներ կային։ Հավաստագրումը համակարգեց գիտելիքները և թույլ տվեց մեզ մտնել զարգացման նոր փուլ՝ ծրագրավորողից մինչև ճարտարապետ:
Ամփոփելով
Ինչպես նշում է Ալեքսեյը, լայնածավալ ՏՏ համակարգի հետ աշխատելիս պետք է հիշել, որ ծրագրավորումը թանկ ժամանց չէ, այլ բիզնես խնդիրների լուծման գործիք։ Այս կամ այն մարտահրավերի առաջ կանգնելիս պետք է անպայման գրի առնել բիզնեսի արժեքը, որպեսզի նախագիծը փակուղի չհայտնվի։
Ճարտարապետը հատուկ հայացք ունի ծրագրավորման և դրա տարրական բաղադրիչների նկատմամբ.
- Տվյալների հոսքի ստեղծում և/կամ պահպանում
- Տվյալների հոսքից տեղեկատվության հոսքի արդյունահանում
- Արժեքի հոսքի արդյունահանում տեղեկատվական հոսքից
- Արժեքային հոսքի դրամայնացում
Եթե նախագծին նայեք ճարտարապետի աչքերով, ապա պետք է սկսեք վերջից՝ ձևակերպեք արժեքը և անցեք դրան տվյալների հոսքի միջոցով:
Ճարտարապետը հետևում է զարգացման կանոններին՝ ունենալով նախագծի գլոբալ տեսլական։ Գրեթե անհնար է դրան հասնել պրակտիկայի և սեփական սխալների միջոցով, ավելի ճիշտ՝ հնարավոր է, բայց դա շատ երկար ժամանակ կպահանջի: Հավաստագրումը թույլ է տալիս ընդլայնել ձեր մտահորիզոնը և դիտարկել յուրաքանչյուր հարցի ամբողջական համատեքստը, ծանոթանալ հազարավոր մասնագետների փորձին և զարգացնել խնդիրների արդյունավետ լուծման հմտությունը:
Մինչ օրս մենք աշխատում ենք վերը նկարագրված բժշկական համակարգի հետ ավելի քան հինգ տարի և հասել ենք զգալի բարելավումների։ Այս ընթացքում Ալեքսեյը հանձնեց ավելի քան 20 սերտիֆիկացման քննություն.
- TS. Windows հավելվածների մշակում Microsoft .NET Framework 4-ի հետ
- TS. Տվյալների մուտք գործել Microsoft .NET Framework 4 ծրագրավորում C#-ով
- TS՝ Microsoft .NET Framework 3.5 Windows Forms հավելվածի մշակում
- PRO. Windows հավելվածների նախագծում և մշակում Microsoft .NET Framework 3.5-ի միջոցով
- PRO. Windows-ի վրա հիմնված հավելվածների նախագծում և մշակում՝ օգտագործելով Microsoft .NET Framework-ը
- TS: Microsoft .NET Framework 2.0 - Windows-ի վրա հիմնված Հաճախորդների մշակում
- 98-361. Ծրագրային ապահովման զարգացման հիմունքներ
- 98-364. Տվյալների բազայի հիմունքներ
- M_o_R հիմնադրամի վկայագիր ռիսկերի կառավարման ոլորտում
- Agile Scrum հիմնադրամ
- ՏՏ ծառայությունների կառավարման հիմնադրամ
- EXIN բիզնես տեղեկատվության կառավարման հիմնադրամ
- PRINCE2 հիմնադրամի վկայական նախագծերի կառավարման ոլորտում
- Փորձարկման ինժեների վկայական
- Microsoft Operations Framework Foundation
- Արագաշարժ սպասարկման նախագծեր
- Նիհար արտադրություն
- Վեց Սիգմա. Վերլուծել, կատարելագործել, վերահսկել
- Վեց Սիգմա. Սահմանել և չափել
- Microsoft-ի մասնագիտական ծրագիր. Մեծ տվյալների վկայագիր
- Certified Software Architect - Microsoft Platform
Անցնելով բոլոր քննությունները՝ Ալեքսեյը առաջատար մշակողից դարձավ նախագծի ճարտարապետ: Միևնույն ժամանակ սերտիֆիկացումը հաճախորդի աչքում դարձել է ինչպես մասնագիտական զարգացման, այնպես էլ հեղինակության բարձրացման հզոր գործիք:
«Սերտիֆիկացման խցիկը» օգնեց մուտք գործել դեպի առանձին կարևորագույն գործընթացներ, որոնք վերահսկողության և մշակման կարիք ունեին: ՏՏ լուծումների եվրոպացի հաճախորդները, որպես կանոն, բարձր են գնահատում հավաստագրված մասնագետներին և պատրաստ են նրանց գործողությունների ավելի մեծ ազատություն տալ:
Շնորհակալություն ուշադրության համար! Հուսով ենք, որ հոդվածը օգտակար էր ձեզ համար:
Source: www.habr.com