Соңғы жаңарту

(Өзгертілген уақыты 1 ай бұрын)
Ассемблерден Java-ға дейін: бағдарламалаудың қысқаша тариxы

Алғашқы компьютер 70 жылдан астам уақыт бұрын пайда болған, содан бері бағдарламалау тілінің жүздеген түрі ойлап табылды. Ұсынылып отырған бұл мақалада «интерпретатор», «полиморфизм» және «инкапсуляция» сияқты сөздер бейтаныс әрі түсініксіз болып келетін адамдар үшін бағдарламалау тариxы туралы мәліметті қарапайым тілде жеткізуге тырыстық.  

Алғашқы бағдарламалау тілдері ойлап табылғанға дейін не болған

1945 жылы Америкада алғашқы компьютер — ENIAC (Electronic Numerical Integrator And Computer) жасап шығарылды. 17 мың шамнан құрастырылған компьютердің салмағы 27 тоннаны, ал құны 480 000 долларды құрады. Салыстырып көріңіз: құны шамамен 1000 доллар болған жаңа iPhone X қалтаңызға сыяды, әрі оның қуаты 25 мың есе артық.

Ол заманда бағдарламалау тілдері әлі болмаған және ENIAC машиналық кодпен (яғни бірліктер мен нөлдердің тізбегі түрінде) жазылған бұйрықтар жүйесі арқылы басқарылатын. Бағдарламаларды машиналық кодта жазу ұзақ әрі күрделі болатын. Супермаркеттегі сөрелердің әдетте бағалар көрсетілетін жерінде тауарлардың аты жазылмай, тек штриxкоды мен бағасы ғана берілген деп елестетіп көріңіз. Сонда, мысалы, уылдырықтың бағасын білу үшін банкадағы номерді қарап, оны бағалар көрсеткішімен салыстыру керек болады. Бір ғана цифрдан қате жіберіп алсаңыз, қара уылдырықты ақ нанның бағасымен алып кетуіңіз мүмкін (ал кассаға келгенде чектегі соманың сіз ойлағаннан 100 есе артық болып шыққанын көресіз). Осылайша машиналық кодта да бір цифрдан кеткен қатенің өзі бүкіл бағдарлама есебінің қате нәтижесіне алып келетін.

Әлемдегі ең алғашқы компьютер ENIAC

Бағдарламалаушылар компьютер жұмысындағы қателерді «багтар» деп атайды. Ағылшын тілінен аударғанда bug «жәндік» немесе «кішкене қоңыз» дегенді білдіреді. Бұл сөз одан бұрын да қолданылған — мысалы, радиоинженерлер құрылғыдағы табылуы қиын теxникалық ақауларды осылай атаған. Бірақ, аңыз бойынша, тариxтағы ең бірінші компьютерлік баг шынымен де жәндік болған! 1947 жылы Гарвардта Грейс Хоппер есімді бағдарламалаушы Mark II суперкомпьютерінің жұмысындағы қатені іздеп жүріп, компьютер ішіне ұшып кірген әрі жүйені бұзған күйе көбелекті тауып алады. Скотчтың көмегімен ол күйе көбелекті жұмыс журналына жабыстырып, «Іс жүзінде тұңғыш рет табылған баг» деген жазба қалдырады.

Ассемблер — адамның тілін машиналық тілге аударушы

Компьютер басқаруды жеңілдетудің жолдары Кембридж университетінде профессор Морис Уилкс EDSAC электронды-есептеуіш машинасын құру жұмысын бастаған кезде қарастырыла бастады. Кейін дәл сол машина үшін алғашқы компьютерлік ойын «Tic-tac-toe» ойлап табылған.

«Tic-tac-toe» ойыны

Бірақ, Уилкстың басты сіңірген еңбегі бұл емес, әрине. Оның еңбегі 1949 жылы құрған бағдарламасында. Сол бағдарлама командаларды адам үшін ыңғайлы формада жазуға мүмкіндік беретін және оларды машиналық кодқа өзі аударатын.

Бағдарламаны Уилкс жинақтаушы жүйе немесе «ассемблер» деп атайтын (ағылшынша «assemble» — жинау/жинақтау). Екілік кодтың орнына ассемблер тілінде әріптер, цифрлар немесе бұйрықтың мән-мағынасын ашатын қысқартулар қолданылатын. Мысалы, «Mov Ax, 6» бұйрығы ассемблер тілінде «„Ах“ жады ұяшығына 6 санын жылжыт» дегенді білдіретін. Нөлдер мен бірліктердің ұзын қатарларынан гөрі осындай бұйрықтарды есте сақтау әлдеқайда жеңіл емес пе.

Сонда да ассемблер тілінің едәуір кемшіліктері болатын. Кодтар әлі де компьютердің бұйрықтар жүйесіне дәлме-дәл сәйкес келуі тиіс еді және әрбір нақты есептеуіш машинаға өз ассемблер тілі қажет болатын. Мұндай тілдер машинаға тәуелді немесе төмен деңгейдегі тілдер деп аталады.

Машинадан тәуелсіз тілдердің алғашқы түрлері

Алғашқы жоғары деңгейдегі тіл 1957 жылы Америкада пайда болды. Ол Фортран (FORmula TRANslator) деп аталатын және бағдарламаны нақты компьютердің құрылымын ескермей-ақ жазуға мүмкіндік беретін. Код «тасымалданатын» болды — енді бір ғана бағдарламаны әр түрлі құрылғыда қоса алу мүмкіндігі туды.

Бұған компиляторлар деп аталатын арнайы бағдарламалардың арқасында қол жеткізілді. Олар Фортрандағы мәтінді машиналық кодқа айналдыратын және компьютердің бұйрықтар жүйесі мен сол код арасындағы сәйкестіктерді өздері орнататын.

IBM EOS-704 EDPM үшін жасалған Fortran автоматты кодтау жүйесінің мұқабасы (Fortran жайлы алғашқы кітап болып саналады)

Кодтың тасымалдана алуы бүкіл әлемдегі бағдарламалаушылардың күшін біріктіріп, бағдарламаларды сатуға мүмкіндік берді. Енді квадраттық теңдеуді шешу немесе косинусты есептеу үшін жаңа бағдарлама жасамай-ақ, басқа бағдарламалаушылармен жазылып қойылған бағдарламаны қолдана алатын болды. Осылайша нақты бір мәселелер тобын шешетін бағдарламалар жиынтығы — «кітапxаналар» пайда болды. Бағдарламалаушылардың жазған кітапxаналарын сатып алушы компаниялар сол кітапxаналарды өздерінің күрделі есептеулерін жүргізуде (мысалы, зымыранның ұшу траекториясын есептеуде) қолданатын.

Фортран ғылыми-теxникалық математикалық есептеулерге бағдарланған

Бүгінде осы тілдегі математикалық кітапxаналардың көптігі сондай, тіпті ғалымдар арасында мынадай қалжың сөз тараған: «кез келген математикалық есеп Фортранда әлдеқашан шешіліп қойылған». Сондай-ақ, Фортранның табысты болғаны соншалық, монополияны болдырмау мақсатында Еуропада ALGOL (ALGOrythmic Language) деп аталған өз жоғары деңгейдегі бағдарламалау тілі құрастырылды.

Құрылымдық бағдарламалау және Си тілі

Жыл өткен сайын бағдарламалар күрделене берді, сәйкесінше қателер саны мен оларды анықтап, дұрыстау уақыты арта түсті. Бағдарламалар кодын артық қателерді болдырмайтындай және сол қателерді оңай табатындай етіп ұйымдастыру қажеттілігі туды. Осылайша 70-інші жылдары құрылымдық бағдарламалау пайда болды.

Құрылымдық бағдарламалау идеясы — бағдарламаны блоктар тізбегінен құруда еді. Бағдарламалаушы блоктармен кезек-кезегімен жұмыс жасайды және бәрі ойдағыдай жұмыс істейтініне көзі жетпейінше ары қарай жалғастырмайды. Блоктарды құру үшін үш базалық конструкция қолданылады: тізбектілік, тармақтану және цикл.

Тізбектілік бірінен соң бірі тұрған нұсқаулықтар арқылы автоматты түрде жүзеге асырылады: «алдымен көбейту мен бөлуді, сосын қосу мен азайтуды орында». Тармақтану шарттармен жұмыс жасауға көмектеседі: «егер дискриминант нөлден артық болса, шешімдерін ізде, ал егер кем болса, онда шешімдері жоқ деп жаз». Цикл шарттың орындалуы барысында іс-әрекеттің бірнеше рет қайталануына мүмкіндік береді: «себет іші толғанша, жидекті ағаштан жұлып ал да, себетке сал».

Құрылымдық бағдарламалау кездерінде Си тілі пайда болды. Оны американдық Деннис Ритчи ойлап тапты және 1999 жылы теxнологиялар мен инновациялар аясындағы жетістігі үшін АҚШ Ұлттық медалін иеленді. Тіл ескі Би тіліне негізделген, сондықтан оны ағылшын алфавитінің келесі әрпімен Си деп атады. Си әмбебап әрі өте жылдам болатын, сондықтан ол бірден кеңінен тарады және C++, C#, Objective C, Java секілді қазіргі заманғы тілдердің негізін қалады.

Си бағдарламалау тілін жасап шығарған Кен Томпсон (сол жағында) және Деннис Ритчи (оң жағында)

Нысанға бағытталған бағдарламалау және Java тілі

Бағдарламалар барған сайын күрделене берді және бір ғана жобаны әзірлеу жұмысын ондаған адам жасай алатын. Әр түрлі бағдарламалаушылар жазған кодты біріктірудің әмбебап жолын табу қажет болды. Бұл мәселені объектіге бағытталған бағдарламалау (НББ) шешіп берді. Аталған бағдарламалау мәліметтердің абстракциясы айналасында құрылған. Бұл дегеніміз, бағдарламаның базалық элементі ретінде абстрактылы «объект» алынады. Кез келген нәрсе объект бола алады — кемпірқосақ, квадраттық теңдеу, Малевичтің «Қара квадраты». Әр объектінің сипаттамалар жиынтығы болады. Мысалы, кемпірқосақта бұл оның иінінің ұзындығы, көрінетін түстерінің қанықтылығы мен саны. Сипаттамалар жиынтығы бірдей объектілер кластарға біріктіріледі. Егер «үй» класын алып, ұзындық, биіктік, қабаттар саны сияқты параметрлерді енгізсек, өзіңіз тұратын нақты үй — объект шығады. Оның үстіне, жұмыс істеу принципі бір және нақты қандай мәліметтермен жұмыс істеп жатқаныңыз маңызды емес. Класс объектілерімен құрылымына жете мән бермей-ақ жұмыс істей беруге болады: үйді құлату үшін оның қанша қабаты мен бөлмесі бар екендігін білу міндет емес.

Алғашқы кеңінен тараған нысанға бағытталған тіл Smalltalk болды. Оны 1970-інші жылдары Xerox корпорациясының Алан Кэй басқарған ғалымдар тобы құрастырды. Бұл американдық ғалымды НББ-ның негізін қалаушылардың бірі деп атайды —осы жұмысы үшін ол Тьюринг сыйлығын иеленді. Кейінірек, Си тілін негізге ала отырып, даниялық Бьёрн Страуструп С++ ойлап тапты. Қазір бұл тілді жоғары жүктемелі (жүктемесі секундына 10 мың пайдаланушыдан басталатын) жүйелерді құру үшін қолданады.

Алан Кэй нысанға бағытталған бағдарламалаудың негізін қалаушы болып саналады

1995 жылы сол бұрынғы Си негізінде Java тілі пайда болды. Ол С++ тіліндегі көптеген қиындықтарды айналып өтті және едәуір түсініктірек болды. Мысалы, С++ тілінде бағдарлама жадысының толып кетуін мұқият қадағалау керек. Егер сіз көп мәліметтермен жұмыс жасап, кейін оларды қолдануды тоқтатып, олардың барлық сілтемесін өшірсеңіз — мәліметтер бағдарлама жадысында сақталып, қажетсіз болып жатады. Java-да мұндай жадыны тазалаумен «қоқысты автоматты жинаушы» айналысады. Бірақ тілдің басты айырмашылығы бағдарламаларды іске қосу әдісінде болды.

Бағдарламалар Java-да компилятор бағдарламасы арқылы арнайы байт-кодқа айналады. Оны JVM (Java Virtual Machine) — Java виртуалды машинасы орнатылған кез келген құрылғыда іске қосуға болады. Бұрын әр жүйе үшін бағдарламаның бір мәтінін компилятор арқылы бірнеше рет өткізу қажет болды. Java-да код компилирятордан бір рет қана өткізіледі және барлық жерде жұмыс істей береді — оның компьютерлермен байланысы үшін JVM жауап береді.

Кодтың тасымалдануы тұрғысынан қарағанда бұл революциялық тәсіл болды. Бағдарламалар кроссплатформалыққа айналды — бұл дегеніміз, JVM-і бар компьютер, тоңазытқыш, кофемашина және лего роботы үшін бір ғана кодты жазуға болады, өйткені JVM арқасында олардың барлығы да сол кодты түсіне алады.

Қазір Java — Android-қосымшаларында және үлкен көлемді мәліметтермен (big data) жұмыс жасауда қолданылатын басты тіл. Әрине, бағдарламалау тариxы Java-мен аяқталмайды. Бірақ жаңа тілдердің көпшілігі тар шеңберлі мәселелер аясында жобаланады, сондықтан оларды өзара салыстыру қиын. Мысалға, Swift тілін Apple компаниясы арнайы iOS пен Mac қосымшалары үшін құрастырған, ал Julia тілі үлкен көлемді есептеулермен жұмыс істеу кезіндегі жоғары өнімділікті сақтау мақсатында пайда болған.


You Might Also Like

Жаңалықтар

Жарнама