LINUS

Համալսարանում իմ առաջին տարին Sinclair QL-ը դրված էր սեղանի վրա՝ առաջին հարկի ննջասենյակի պատուհանի դիմաց։ Ես ծրագրավորմամբ շատ չէի զբաղվում, քանզի հիմնականում կենտրոնացած էի ուսուման վրա, բայց նաև, պարզապես նախագծեր չունեի իրականացնելու:

Բացակայում է նախագիծը, բացակայում է ոգևորությունը, հետևաբար դուք փորձում եք գտնել այնպիսի մի բան, որը կարող է ձեզ դրդել գործել:

Հենց այդ ժամանակ ինձ թվաց, որ բանակում ծառայելու կատարյալ ժամանակն է, ինչը ես ամեն դեպքում պետք է անեի:

Ես տասնինը տարեկան էի և չունեի որևէ հետաքրքիր նախագիծ իրականացնելու համար: Այդպիսով, ես գնացք նստեցի և գնացի Լապլանդիա:

Բանակը և ֆիզիկական աշխատանքը, ինձ, բառիս բուն իմաստով, գժվացրել էին։ Տասնմեկ ամիս անց, ես հասկացա, որ պատրաստ եմ կյանքիս մնացած տասնամյակները անցկացնել համակարգչի առջև, և միակ ֆիզիկական վարժությունը, որը կկատարեմ, լինելու է ստեղնաշարի կոճակները սեղմելը։

Բանակային ծառայությունս ավարտվեց 1990-ի մայիսի 7-ին: Ես, հավանաբար, երբեք չեմ մոռանա զորացրմանս ամսաթիվը: Հարսանեկան տարեդարձի օրը միշտ մոռանում եմ, բայց զորացրմանս օրը՝ ոչ։ Կինս՝ Թովը, այդ պատճառով շատ է բարկանում։

Լինուս Թորվալդսը և Թով Թորվալդսը

Առաջին բանը, որ ես ցանկացա անել զորացրումից հետո՝ կատու ձեռք բերելն էր: Ես ունեի մի ընկեր, ում կատուն նոր էր ծննդաբերել։ Եվ ես գնեցի նրանից մի գեղեցիկ սպիտակ կատվի, անվանեցի նրան Ռանդի՝ Միթռանդիրի կարճ տեսակը, ով սպիտակ մոգն էր «Lord of the Rings»- ում: Նա այժմ տասնմեկ տարեկան է և, ինչպես իր տերը, ամբողջովին հարմարեցվել է Կալիֆոռնիայի կենսակերպին:

Փաստացի, մինչև իմ երկրորդ կուրսի դասերի սկսվելը՝ աշնանը, ես ոչինչով չէի զբաղվում։ Միայն կատվիս հետ էի խաղում, և մտածում էի, թէ ինչպես պետք է նոր համակարգիչ գնեմ, քանզի գումար բացարձակ չունեի։ Բարեբախտաբար, 1990-ին, PC-ն սկսեց արտադրել 68020-ի էժան կլոններ, և ես որոշեցի այն ձեռք բերել։ Հենց այդ ժամանակ ես սկսեցի վաճառել իմ Sinclair QL-ի մասերը:


Երևի յուրաքանչյուրն ունի գիրք, որը փոխել է իր կյանքը:
Գիրք, որ դրդեց ինձ նոր բարձունքների, Էնդրյու Թանենբաումի “Օպերացիոն համակարգեր. Նախագծում և իրականացումն” էր։

Գրքում ՝ Ամստերդամի համալսարանի պրոֆեսոր Էնդրյու Թանենբաումը, նկարագրում և քննարկում է Minix-ը՝ ուսուցողական ձեռնարկ, որը նա գրել է Unix-ի համար: Minix-ը նաև Unix-ի փոքրիկ կլոնն է: Unix-ը Օպերացիոն համակարգ էր, որը ես պատրաստվում էի ուսումնասիրել համալսարանի երկրորդ կուրսի ընթացքում, C ծրագրավորման լեզվի հետ միասին։

Ես որոշեցի ձեռք բերել համակարգիչ, որը հնարավորություն կտա Unix-ը գործարկելու: Փաստացի Unix-ն ինձ թափ տվեց և ստիպեց գործել։

1991 թվականի հունվարի 2-ին, ես որոշեցի գնել համակարգիչ, որի արժեքն էր 3500 դոլար: Ես այդ գումարը չունեի, ուստի ինքնարժեքի մեկ երրորդը ներդրեցի և համակարգիչը վարկով գնեցի։ Ես գնացի մի խանութ, որտեղ գնորդը կարող էր ընտրել իր հարմար համակարգչային մասեր և հավաքեր իր սեփական յուրահատուկ համակարգիչը։ Ես ուզում էի ունենալ 4 մեգաբայթ RAM, 2 մեգաբայթի փոխարեն: Ես ուզում էի 33 մեգահերց: Իհարկե, ես կարող էի գնել
16 մեգահերց, բայց ո՛չ, ես ցանկանում էի ունենալ ամենալավը:

Ես վաճառողին թելադրեցի ցանկություններս, և նա ասաց, որ երեք օր անց կարող եմ գալ և վերցնել իմ համակարգիչը: Ազնիվ խոսք, այդ երեք օրը մեկ շաբաթվա պես երկար տևեց։ Հունվարի 5-ին հայրիկիս օգնությամբ, համակարգիչը տուն հասցրինք:

Այդ համակարգիչը մոխրագույն, անանուն բլոկ էր։ Ես այն գնել էի ոչ թե լավ տեսքի, այլ հնարավորությունների համար։ Ես ուզում էի մի հուսալի բան, որին հեշտությամբ կկարողանայի ավելացնել արդիականացումները (upgrades)։

Ես ուզում էի համակարգչիս տեղադրել Minix-ը և Unix-ի տարբերակը, որի մասին վերևում խոսեցինք։ Ես այն պատվիրեցի։ Մեկ ամսից ավելի ժամանակ պահանջվեց, որպեսզի Minix-ը հասնի Ֆինլանդիա: Մեկ ամիս, որը հինգ տարվա տևողություն ուներ։ Ես հիմնականում այդ ամիսը անցկացրի` իմ նոր համակարգչով Prince of Persia խաղալով: Իսկ երբ չէի խաղում, կարդում էի գրքեր, որոնք օգնում էին ինձ հասկանալ իմ նոր համակարգիչը: Երբ Minix-ը վերջապես հասավ, ես այն տեղադրեցի հենց այդ գիշեր:

Այն պահանջեց, որ տասնհինգ ֆլոպի սկավառակներ «կերակրեմ» համակարգչիս: Ընդհանուր առմամբ, ինձ մեկ ամիս կամ ավելի ժամանակ պահանջեց, որպեսզի Minix-ը դառնա իմ ուզած համակարգը:

Էնդրյու Թանենբաումը` Ամստերդամի պրոֆեսորը, որը գրել էր Minix-ը, ցանկանում էր պահպանել համակարգը որպես ուսումնական միջոց: Ինչը շատ ցավալի էր, հաշվի առնելով նրա պոտենցիալը։

Ավստրալիացի հակեր Բրյուս Էվանսը, ով Minix 386-ի աստվածն էր, փոփոխել էր համակարգը և «լավացրել» այն։ Համակարգիչը գնելուց առաջ ես հետևում էի Minix-ի առցանց լրատվական խմբին, այնպես որ, ես ի սկզբանե գիտեի, որ ուզում եմ գործարկել Էվանսի կատարելագործված տարբերակը: Բայց լիցենզավորման պատճառով ես ստիպված էի գնել Minix-ի իրական տարբերակը և այնուհետև մեծ աշխատանք կատարել՝ Էվանսի տարբերակը ստանալու համար: Դա բավականին ժամանակատար գործ էր։

Minix-ը ուներ մի շարք առանձնահատկություններ, որոնք ինձ հիասթափեցրել էին: Ամենամեծ հիասթափությունը տերմինալային էմուլյացիան էր (terminal emulation), ինչը կարևոր էր, քանի որ դա այն ծրագիրն էր, որը ես օգտագործում էի համալսարանական համակարգչին միանալու համար: Ինձ պետք էր տերմինալային էմուլյացիա, երբ ես ուզում էի դայլապ (dial up) անել համալսարանի համակարգչին, աշխատել հզոր Unix համակարգչի վրա կամ պարզապես ինտերնետին միանալ: Այսպիսով, ես սկսեցի նախագիծ`ստեղծելու իմ սեփական տերմինալի էմուլատորը: Այս նախագիծը նաև հիանալի հնարավորություն կտար ինձ հասկանալու, թե ինչպես է աշխատում 386 մեքենան:


Ես ստիպված էի սկսել BIOS-ից, որը կարդում էր ֆլոպին կամ կոշտ սկավառակը։ Իմ դեպքում ծրագիրը ֆլոպիի վրա էր: BIOS-ը կարդում էր ֆլոպիի առաջին հատվածը և սկսում էր այն ձևակերպել:

Հարկ է նշել, որ տերմինալային էմուլյացիայի ծրագիր ստեղծելը կօգնի ձեզ հասկանալ, թե ինչպես է աշխատում CPU-ն:

Ես ուզում էի ունենալ երկու անկախ հոսք՝ thread: Մեկը կկարդար մոդեմը, այնուհետև կցուցադրեր էկրանին: Մյուսը կկարդար ստեղնաշարից և կհաղորդեր մոդեմին: Այդպիսով, երկու խողովակ կլիներ, որոնք կանցնեին երկու ճանապարհով: Սա կոչվում է առաջադրանքների փոխանակում (task switching), և 386-ը ուներ այս գործընթացը իրականացնելու ապարատ։ Ես գիտակցում էի, որ դա հիանալի գաղափար էր:

Իմ ամենավաղ փորձարկման ծրագիրը մեկ հոսքով գրում էր A տառը էկրանին, մյուս հոսքով գրում էր B տառը: Ես դա արել էի այդպես, որ էկրանը լցվեր AAAAAA-ով: Հետո, հանկարծակի, անցում կկատարեր BBBBBBB-երի:

Երբ ես իմ մեկ ամսվա տանջանքների արդյունքը ցույց տվեցի իմ ավագ քրոջը՝ Սառային, նա մոտ հինգ վայրկյան նայեց ԱԱԱԱԱԱԱ- ի և ԲԲԲԲԲ-ի շարքին, այնուհետև ասաց «Լավ» և հեռացավ ՝ չտպավորված: Ես հասկացա, որ շատ քչերը կարող են տեսնել այն ամենը ինչ թաքնվում է վերջնական տեսքի ետևում։

Փաստացի, այդպես ծնվեց Linux- ը: Իմ թեստային ծրագրերով, որոնք վերածվում էին տերմինալային էմուլյացիայի փաթեթի:

Չգիտեմ, թե ինչպես բացատրել իմ հիացմունքը ծրագրավորման հանդեպ, բայց կփորձեմ: Այն մարդու համար, ով զբաղվում է ծրագրավորմամբ, դա աշխարհի ամենահետաքրքիրն բանն է:

Դա խաղ է, շատ ավելի ներգրավող քան շախմատը։ Խաղ, որտեղ կարող ես գրել քո սեփական կանոնները և որտեղ վերջնական արդյունքն այն է, ինչ կարող ես ստանալ դրանից։

Եվ, այնուամենայնիվ, այն մարդը, ով ուղղակի հետևում է խաղին, կարծում է, որ դա Երկրի վրա գոյություն ունեցող ամենաձանձրալի բանն է: Շատ իզուր։

Պարզապես այն պահը, երբ համակարգչին ասում ես ինչ-որ բան անի, եւ նա դա անում է, առանց բողոքի, միշտ… ամեն ինչ արժի։ Եվ դա ինքնին հետաքրքիր է:

Ծրագրավորումը գրավիչ է դարձնում այն փաստը, որ համակարգիչը կարող է անել այն, ինչ դուք նրան կհրամայեք, բայց նախքան այդ անելը պետք է պարզել, թե ինչպես հրամայել:

Ես անձամբ համոզված եմ, որ համակարգչային գիտությունը շատ ընդհանուր բաներ ունի ֆիզիկայի հետ: Երկու գիտությունն էլ մեզ սովորեցնում են այն, թե ինչ է ընկած աշխարհի հիմքում: Ինչն է այն շարժում։ Տարբերությունն, իհարկե, այն է, որ ֆիզիկայի մեջ դուք պետք է հասկանաք, թե ինչպես է կազմվում աշխարհը, համակարգչային գիտության մեջ դուք ինքնուրույն եք ստեղծում աշխարհը:

Դուք եք արարիչը։ Դուք եք կառավարում ձեր ստեղծած աշխարհը։ Եթե ​​բավականաչափ լավ եք տիրապետում գործին, կարող եք անգամ աստված լինել: Փոքր մասշտաբով:

Այս խոսքերը ասելով, ես հավանաբար վիրավորեցի Երկրի բնակչության մոտավորապես կեսին։ Բայց դա ճիշտ է: Դուք ստեղծում եք ձեր սեփական աշխարհը, և միակ բանը, որ կարող է սահմանափակել ձեզ, համակարգչի հնարավորություններն են և ձեր սեփական ունակությունները:

Ի՞նչ ինձ առաջին հերթին ստիպեց զբաղվել ծրագրավորմամբ։ Ես ցանկանում էի պարզել, թե ինչպես է աշխատում համակարգիչը:

Ամենամեծ ուրախությունը այն էր, երբ ես հայտնաբերեցի, որ համակարգիչները մաթեմատիկայի նման են։ Ֆիզիկայում դուք սահմանափակված եք առկա կանոններով, բայց մաթեմատիկայում ինչպես նաեւ ծրագրավորման մեջ, ամեն ինչ գործում է, քանի տրամաբանական է:

Իրականում, դուք կարող եք անել ցանկացած բան, բայց եթե բարդություն եք ավելացնում, պետք է զգույշ լինեք, որպեսզի չստեղծեք այնպիսի բան, որը հակասում է ձեր ստեղծած աշխարհին։ Որպեսզի այդ աշխարհը լինի գեղեցիկ, այն չի կարող որևէ թերություն պարունակել: Այդպես է աշխատում ծրագրավորումը:

Օպերացիոն համակարգը հիմքն է այն ամենի, ինչ տեղի է ունենում համակարգչում: Եվ այն ստեղծելը իսկական մարտահրավեր է: Երբ ստեղծում եք օպերացիոն համակարգ, ստեղծում եք աշխարհ, որում ապրում են համակարգիչը վարող բոլոր ծրագրերը։ Դուք կազմում եք այդ աշխարհի ընդունելի և անընդունելի կանոնները։ Դա նման է ձեր սեփական պետության սահմանադրության ստեղծմանը, և համակարգչում աշխատող բոլոր մյուս ծրագրերը պարզապես սովորական օրենքներ են։

Երբեմն օրենքները իմաստ չունեն: Բայց իմաստն այն է, ինչին ձգտում եք: Դուք ցանկանում եք նայել լուծմանը և գիտակցել, որ ճիշտ ձևով եք եկել ճիշտ պատասխանին:

Խնդիրը այնքան ժամանակ կմնա խնդիր, մինչեւ դուք նրան լուծում տալու համար ճիշտ անկյան տակից չնայեք։

Հավանաբար, ամենալավ օրինակը ասածս բացատրելու համար հետևյալն է։ Գերմանացի մաթեմատիկոս Կառլ Ֆրիդրիխ Գաուսը դպրոցում էր և նրա ուսուցիչը ձանձրացել էր, ուստի աշակերտներին զբաղեցնելու համար հանձնարարեց նրանց ավելացնել բոլոր թվերը 1-ից 100-ի միջև: Ուսուցիչը ակնկալում էր, որ աշակերտները ամբողջ օրը կզբաղվեն դրանով: Բայց Գաուսը վերադարձավ հինգ րոպե անց ճիշտ պատասխանը ձեռքին՝ 5, 050։ Լուծումը բոլոր թվերը ավելացնելը չէր, քանի որ դա կլիներ հիասթափեցնող հիմարություն:

Նա հասկացավ այն, որ 1-ը և 100-ը ավելացնելով` ստանում եք 101: Այնուհետև ավելացնելով 2-ը և 99-ը ստանում եք 101: Այնուհետև 3 և 98-ը՝ 101: Այսպիսով, 50-ը և 51-ը՝ 101 է: Վարկյանների ընթացքում նա հասկացավ, որ 101-ի 50 զույգ կա, ուստի պատասխանը 5,050 է:

Խելացի մաթեմատիկոսը երկար ու ձանձրալի ճանապարհով խնդիրը չի լուծում, այլ հարցի ետևում տեսնում է իրական օրինաչափությունը և կիրառում է այդ օրինաչափությունը՝ պատասխանը շատ ավելի արագ գտնելու համար։

Նույն կանոնը վերաբերում է ծրագրավորմանը։

Թարգմանությունը՝ Code Republic-ի

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here