- Ի՞նչ կապ ունի ծրագրավորողը մարտիկի հետ։ - Սպասիր հիմա կբացատրեմ, միայն թե ստացվի այստեղից ժամանակին դուրս գալ։ - Պարտադիր չէ, որ այստեղից դուրս գանք նոր խոսես.. Ոչինչ չի խանգարում որ ընթացքում հարցերիս պատասխանես։ - Ասում եմ պետք է արագ այստեղից հեռանանք, քանի դեռ մեզ չի հասել։ - Ո՞վ։ - Աղբահավաքը։ - Դա ո՞վ է։ - Նա մեզ կոչնչացնի, եթե նրան հանդիպենք։ - Ինչու՞։ - Այս պահին մենք ոչ ոքի պետք չենք։ - Ինչպե՞ս թե պետք չենք, հենց նոր մենք շատ կարևոր գործ էինք անում, ծրագրի ողջ տվյալները մեզ մոտ են։ - Ճիշտ ես, սակայն ծրագրում bug կա և մեզ սխալ տեղում են հայտարարել և հիմա այն ամենը ինչ հայտարարված է այդ scope ում կվերանա։ - Գրողի տարած bug… ո՞վ է մեղավոր։ - Ոչ ոք։ - Ինչպե՞ս թե ոչ ոք, ինչ որ մեկը պատճառ է հանդիսացել չէ՞, որ այդ bug-ը ստեղծվել է։ - Ծրագրավորողներն են ստեղծում և մեզ և bug-երին։ Մեզ ստեղծում են մտադրաբար, նրանց պատահաբար։ - Դե ստացվում է ծրագրավորողներն են մեղավոր։ - Ոչ։ Բոլոր ծրագրավորողներն էլ պատահաբար bug-եր են ստեղծում։ Պետք չէ մեղադրել նրանց դրա համար։ - Լավ, իսկ ինչպե՞ս ենք այստեղից դուրս գալու։ - Միակ հույսս մեր ծրագրավորողի վրա է։ - Ինչպե՞ս կարող է նա օգնել։ - Ես նրան վաղուց եմ ճանաչում, դեռ առաջին release-ից նա ինձ ստեղծեց, իսկ քեզ միայն վերջերս։ Նա լավ ծրագրավորող է, բավականին մտածված է ամեն ինչ անում։ Ինչպես ասացի bug-երը անպակաս են ցանկացած ծրագրավորողի ստեղծած ծրագրերում, սակայն մեր ծրագրավորողը գրեթե միշտ հաշվի է առնում վատագույն դեպքերը և ճիշտ լուծումներ նախապատրաստում այդ դեպքերի համար։ - Մի քիչ հույս տվեցիր… - Նայիր այնտեղ, տեսնու՞մ ես այն լույսերը։ Գնանք այդ ուղությամբ, հավանաբար այնտեղ նորերին են ստեղծում։ Միգուցե կարողանանք այնտեղ որևէ մեկին օգտակար լինել։ Դա կարող է մեզ փրկել ոչնչացումից։
- Մինչ հասնենք այն լույսերի մոտ, կպատմե՞ս մեր ծրագրավորողի մասին։
- Ի՞նչ ես ուզում իմանալ նրա մասին։
- Դու հաճախակի ես ասում, որ նա մարտիկ է։ Ի՞նչով է նա նման մարտիկի։
- Ասում եմ մարտիկ է, որովհետև նա ամեն օր կռվում և հաղթում է բազմաթիվ թշնամիների։ Նա կազմակերպված է, կարգապահ, գործուն, օրինապահ և սիրալիր։ ԵՎ ամենակարևորը նա շատ լավ է տիրապետում իր մասնագիտությանը։ Մարտիկներին բնորոշ է ունենալ իրենց սեփական կանոնները, որոնք նրանք երբեք չեն խաղտում։ Մեր ծրագրավորողը ևս ունի այդպիսի կանոններ։
- Իսկ ի՞նչ կանոններ են դրանք, կարող ես ասել։
- Բոլորը չեմ հիշում, բայց մի քանիսի մասին կասեմ։ Մեր ծրագրավորողի կանոններից մեկը այն է, որ նա պարտադիր վճարում է այն բոլոր գործիքների համար, որոնք նա օգտագործում է։ Իհարկե դա չի վերաբերվում այն գործիքներին, որոնք ինքնին անվճար են։ Նա երբեք չի փորձում օգտագործել գողացած կամ կոտրած ծրագրեր։
- Չեմ հասկանում ինչու՞ վճարել մի բանի համար, եթե կարելի ունենալ դա անվճար։
- Այն աշխարհը՝ որում ապրում է մեր ծրագրավորողը, անվճար ոչինչ գոյություն չունի։ Իսկ այն ամենը՝ ինչը ասում են անվճար է, իրականում պարունակում է քողարկված վճար, որը առաջին հայացքից չի երևում։
- Արդյո՞ք դա նշանակում է, որ նույնիսկ եթե գողացած կամ կոտրած ծրագիր օգտագործի մեր ծրագրավորողը, միևնույն է ինչ-որ կերպ վճարելու է դրա համար։
- Այո, իրավացի ես։
- Պարզ է։ Կարծում եմ ճշմարիտ կանոն է, և այո, մարտիկին վայել է այդպիսի մտածելակերպը։
- Ահա և հասանք։ Այն ամենը ինչ տեսնում ես այստեղ տարատեսակ փոփոխականներ են։ Սա ծրագրի հիշողությունն է։ Այստեղ անընդհատ նոր փոփոխականներ են հայտնվում և հեռանում։
- Իսկ այստեղ կկարողանա՞նք օգտակար լինել որևէ մեկին։
- Կարծում եմ ոչ, ինչպես երևում է այստեղ բոլորը իրենց տերերն ունեն, մեր կարիքը նրանք չունեն։ Գնացինք։ Փորձենք փրկություն գտնել stack-ում։
- Ի՞նչ կասես ժամանակի ճիշտ կառավարման մասին։ Ունի՞ արդյոք որևէ կանոն մեր ծրագրավորողը դրա վերաբերյալ։ - Ի հարկե ունի, և դա կարևորագույններից մեկն է։ - Ասա ինձ, ի՞նչ կանոն է դա։ - Սպասիր որևէ ապահով վայր հասնենք, այնուհետև կպատմեմ։ - Լավ, միգուցե stack մուտք գործենք։ - Վատ միտք չէ, հապա նայիր հետև, տեսնու՞մ ես այն բոլորին որ գալիս են մեր ուղղությամբ։ - Այո։ - Նրանք շուտով մուտք են գործելու stack։ - Դա լա՞վ է, թե՞ վատ։ - Եթե մեզ հաջողվի ընկերանալ նրանցից գոնե մեկի հետ, հնարավոր կլինի փրկվել աղբահավաքից։ - Միգուցե մուտք գործե՞նք արդեն։ - Այո, մտնենք և սպասենք նրանց։ - Կարծում եմ ապահով վայրում ենք։ - Այո։ Ժամանակի կառավարման հետ կապված նա ունի որոշակի կանոններ։ Այս պահին կարողանում եմ մտաբերել միայն մեկը։ - Եվ ո՞րն է դա։ - Մեր ծրագրավորողը աշխատանքային օրը բաժանում է բարձր և միջին արտադրողականության ժամանակահատվածների։ - Կարո՞ղ ես օրինակով բացատրել։ - Նա մարդ է, իսկ մարդիկ հոգնելու և ձանձրանալու հատկություններ ունեն։ Եվ այդ դեպքերում նրանք սովորաբար իրենց սիրած երաժշտությունն են միացնում գործին զուգահեռ, որը որոշ չափով անցկացնում է հոգնածությունը և ձանձրույթը։ Սակայն այդ ամենը շատ դեպքերում չարաշահվում է, և նրանք սկսում են գործին զուգահեռ երաժշտություն կամ որևէ այլ բան միացնել, անկախ նրանից գործը նոր են սկսել, թե՞ արդեն ավարտում են, հոգնա՞ծ են, թե՞ առույգ, կատարվող աշխատանքը հետաքրքիր է թե ձանձրալի։ Այսպիսով ամբողջ օրվա ընթացքում անընդհատ ինչ-որ բան լսելով նրանք չեն կարողանում կենտրոնանալ գործի վրա, և նրանց արտադրողականությունը կտրուկ ընկնում է։ - Իսկ այդ դեպքերում, ինչպե՞ս է վարվում մեր ծրագրավորողը։ - Նա ունի կանոն, ըստ որի առավոտյան ժամերին արգելվում է երաժշտություն լսել, կամ շեղվել գործից բացի այլ բաներով։ Այդ ժամանակահատվածը նա կոչում է «բարձր արտադրողականության ժամանակահատված» և դա տևում է մոտավորապես երեք ժամ։ Սովորաբար այդ մի քանի ժամվա ընթացքում նա կատարում է օրվա 60% աշխատանքը իսկ մնացած 40%-ը կատարում է «միջին արտադրողականության ժամանակահատվածում», որի ընթացքում, գործին զուգահեռ նա կարող է լսել երաժշտություն, կամ իրեն հետաքրքրող որևէ այլ բան։ - Հետաքրքիր է, մի՞շտ է նա այդ կանոնը պահպանում։ - Մարդիկ մեզ նման չեն, նրանք չեն շարժվում կոնկրետ հրահանգներով։ Նույնիսկ եթե նա իր համար որոշակի օրենքներ է սահմանլ, մեկ է ժամանակ առ ժմանակ ստիպված է լինում խախտել դրանք։ Սակայն հիմնականում դրանք պահպանելով նա բավականին աշխատունակ է մնում։ - Ահա և եկան, մեր ապագա ընկերները։ - Օ՜ ոչ, միայն թե ոչ դա։ - Ի՞նչ եղավ։ - Նրանք callback-ներ են։ - Դա մեզ խանգարու՞մ է ընկերանալ նրանց հետ։ - Ոչ, բայց նրանց հետ ընկերանալով չենք փրկվի, քանի որ նրանց կյանքը շատ կարճ է։ - Իսկ ի՞նչ անենք։ - Ստիպված ենք սպասել մինչև նրանք դուրս գան այստեղից, որ մենք էլ կարողանանք դուրս գալ։
- Կյանքումս այսքան երկար հերթ չէի կանգնել, հազիվ դուրս եկանք։ - Ինչ-որ առումով լավ էր, որ ուշ դուրս եկանք stack-ից, աղբահավաքին կարողացանք շրջանցել։ - Հիմա ու՞ր ենք գնում։ - Կարծում եմ կարող ենք մի փոքր էլ ժամանակ ձգել event loop-ում։ - Դա այն տե՞ղն է, որտեղ բոլորը սպասում են իրենց աստղային ժամին։ - Այո, հենց այդպես։ Բոլորը գնում են այնտեղ և սպասում այնքան ժամանակ մինչև իրենց կատարվելու ժամանակը գա։ - Հետաքրքիր է աղբահավաքը այնտեղ կարո՞ղ է մեզ գտնել։ - Կարծում եմ ոչ, այնտեղ պետք է որ ապահով լինի։ Գնա՜նք։ - Էլ ինչ հետաքրքիր առանձնահատկություններ ունի մեր ծրագրավորողը։ - Դե օրինակ՝ նա ստեղծում է իրեն օգնականներ։ - Այդ ինչպե՞ս։ - Աշխատանքի ժամանակ կան որոշակի գործեր, որոնք ծրագրավորողը ամեն օր տասնյակ անգամներ կրկնում է։ Օրինակ ինչ-որ տվյալների լրացում, ֆալերի ստեղծում, որոշակի հաշվարկ և այլն։ Բոլոր այդ գործերը, գրեթե միշտ, հնարավոր է ավտոմատացնել։ Այսպիսով մեր ծրագրավորողը ստեղծելով փոքրիկ օգնական ծրագրեր դյուրինացնում է իր գործը և խնայում է բավականին շատ ժամանակ։ - Ինչ հետաքրքիր է.. Սակայն կարծում եմ այդ օգնականներին ստեղծելու համար էլ է բավականին ժամանկ պետք հատկացնել։ - Նա անում է դա գործի ընթացքում, հենց որ ազատ ժամանակ է լինում։ Օգնականների ավելանալու հետ մեկտեղ ավելանում է նաև ազատ ժամանակը և նա կարողանում է հատկացնել դա այլ օգնականներ ստեղծելուն։ - Այս ի՞նչ է։ - Սխալ է տեղի ունեցել, ուժեղ բռնվի՜ր, դա հիմա մեզ դուրս կշպրտի։
- Ո՞րտեղ ենք։ - Կարծես թե ես ճիշտ էի։ - Ի՞նչ ի նկատի ունես։ - Մեր ծրագրավորողի վարպետությունը ի նկատի ունեմ։ Մենք հիմա error handler-ում ենք։ Հենց նոր մեզ դուրս շպրտեցին event-loop-ից, բարեբախտաբար մեր ծրագրավորողը նախատեսել էր այս դեպքը։ Հիշու՞մ ես, որ ասում էի հույսս նա է, ահա և ևս մեկ անգամ համոզվեցի, որ նրա վրա արժե հույս դնել։ - Կարծես թե իրոք լավ է մտածել այս ամենը։ Միայն թե հանկարծ չձանձրանա ու չսկսի վատ կազմակերպել ամեն ինչ.. - Չի ձանձրանա, նա ունի կանոն դրա համար ևս։ - ԵՎ ի՞նչ կանոն է դա։ - Ձանձրույթը ծրագրավորողների մոտ, հիմնականում առաջանում է պարապությունից և սպասողական վիճակից։ Նա աշխատում է երբեք պարապ չմնալ և այդպիսով խուսափում է ձանձրույթից։ - Իսկ ինչո՞վ է զբաղվում երբ որևէ գործ չկա անելու։ - Օգնական ծրագրեր է գրում, գրքեր է կարդում, մասնագիտացված հոդվածներ է գրում և այլն։ Նա միշտ ունի անելիք, անկախ նրանից գործ կա անելու թե՞ ոչ։