1983-cü İldəki Kimi BASIC Öyrənmək
Bu məqalə Two-Bit History tərəfindən yayımlanmış Learning BASIC Like It’s 1983 adlı yazının tərcüməsidir. Bəzi cümlələr və ifadələr Azərbaycan dilinə uyğunlaşdırılmışdır. Orijinal məqalənin dərc olunma tarixi: Sentyabr 2, 2018.
1983-cü ildə mən hələ doğulmamışdım. Bu, bəzən təəssüfləndiyim bir şeydir. Xüsusilə də 8-bitlik kompüter erasının baş verdiyi o dövrdə yaşamadığım üçün çox təəssüflənirəm, çünki düşünürəm ki, kompüterlərlə ilk dəfə nisbətən sadə və az olduğu vaxtlarda tanış olanlar böyük üstünlüyə malikdirlər.
Bu gün, demək olar ki, hər kəs kompüterdən necə istifadə edəcəyini bilir, lakin çox az adam, hətta kompüter sənayesində belə, hər hansı bir maşının daxilində nələrin baş verdiyini tam anlayır. İndi o qədər fərqli işlər görən o qədər çox proqram təminatı təbəqəsi var ki, insan hansı hissələrin əsas olduğunu müəyyən etməkdə çətinlik çəkir. 1983-cü ildə isə ev kompüterləri o qədər də mürəkkəb deyildi və çalışqan bir insan müəyyən bir kompüterin başdan-ayağa necə işlədiyini öyrənə bilərdi. Həmin şəxs, yəqin ki, bu gün müasir əməliyyat sistemlərinin aparat təminatının üzərinə yığdığı bütün bu abstraksiyalardan mənim qədər çaşqınlıq yaşamır. Elə hesab edirəm ki, bu abstraksiya təbəqələri tətbiq edildikcə onları bir-bir anlamaq asan idi; bu gün isə yeni proqramçılar onları yuxarıdan aşağıya və zamanda geriyə doğru işləyərək anlamağa çalışmalıdırlar.
Bir çox məşhur proqramçılar, xüsusən də video oyun sənayesindəkilər, uşaqlıqlarında Apple II və Commodore 64 kimi 8-bitlik kompüterlərdə oyun proqramlaşdırmağa başlayıblar. Con Romero (John Romero), Riçard Qarriot (Richard Garriott) və Kris Roberts (Chris Roberts) buna misaldır. Bunun necə baş verdiyini görmək asandır. 8-bitlik kompüter erasında bir çox oyunlar yalnız kompüter jurnallarında və kitablarda çap olunmuş BASIC kod siyahıları kimi mövcud idi. Əgər o oyunlardan birini oynamaq istəyirdinsə, bütün proqramı əllə yazmalı idin. Qaçılmaz olaraq nədəsə səhv edəcək və proqramını sazlamalı olacaqdın. Onu işlək vəziyyətə gətirənə qədər, proqramın necə işlədiyi barədə onu özün dəyişdirməyə başlayacaq qədər məlumat sahibi olacaqdın. Əgər həvəsli bir oyunçu idinsə, demək olar ki, məcburiyyətdən yaxşı bir proqramçıya çevrilirdin.
Mən də uşaqlığım boyu kompüter oyunları oynamışam. Amma mənim oynadığım oyunlar CD-ROM-larda gəlirdi. Bəzən xətalarla qarşılaşan quraşdırıcını necə düzəldəcəyimi Google-da axtarmalı olurdum ki, bu da Windows Registry-ni və ya buna bənzər bir şeyi redaktə etməyi tələb edirdi. Bu cür kiçik problemlərin həlli məni kompüterlərlə kifayət qədər rahatlaşdırmışdı ki, universitetdə kompüter elmləri oxumağı düşünüm. Amma bu, mənə heç vaxt kompüterlərin necə işlədiyi və ya onları necə idarə etmək barədə həlledici bir şey öyrətmədi.
İndi isə, əlbəttə ki, mən pul qazanmaq üçün kompüterlərlə nə etməli olduqlarını deyirəm. Bununla belə, yalnız daha sadə kompüterlərlə proqramlaşdırma edərək böyüyənlərə nəsib olan bəzi fundamental anlayışlardan məhrum olduğumu hiss etməkdən özümü saxlaya bilmirəm. 1980-ci illərin əvvəllərində kompüterlərlə ilk dəfə qarşılaşmaq necə bir hiss olardı? Bu, bu gün kompüterdən istifadə təcrübəsindən nə ilə fərqlənərdi?
Bu yazı adi yazılarımızdan bir az fərqli olacaq, çünki bu suallara xəyalımda bir cavab tapmağa çalışacağam.
1983
Yalnız keçən həftə televizorda Commodore 64 reklamını görmüşdün. Bazar ertəsi gecələri etmək üçün yeni bir şey axtarışında idin. Bu Commodore 64 məsələsi dostunun zirzəmisində olan Apple II-dən daha yaxşı görünürdü. Üstəlik, reklam yeni kompüterin tezliklə dostlarının qapını “döyəcəyinə” söz verirdi. Məktəbdə elə bir neçə nəfər tanıyırdın ki, əgər orada Zork oynaya bilsəydilər, onsuz da Rudy-nin evinə getməkdənsə sənin evində vaxt keçirməyə üstünlük verərdilər.
Beləliklə, valideynlərini bu kompüteri almağa razı saldın. Anan dedi ki, evdə kompüterin olması sənin oyun zallarından uzaq durmağın deməkdirsə, bunu nəzərdən keçirə bilərlər. Sən istəksizcə razılaşdın. Atan eşitdiyi MultiPlan adlı elektron cədvəl proqramında ailənin maliyyəsini izləməyə başlayacağını düşünürdü, buna görə də kompüter qonaq otağına qoyuldu. Ancaq bir il sonra ondan istifadə edən yeganə şəxs sən olacaqdın. Nəhayət, onu yataq otağındakı masanın üstünə qoymağa icazə verdilər — elə Police plakatının düz altına.
(Bacın bu qərara etiraz etdi, amma 1983-cü il idi və kompüterlər qızlar üçün deyildi.)
Atan kompüteri işdən evə gələrkən ComputerLand-dən götürdü. Siz ikiniz qutunu televizorun yanına qoyub açdınız. “DOSTCANLI KOMPÜTERLƏR DÜNYASINA XOŞ GƏLMİSİNİZ,” deyə qablaşdırmanın üzərində yazılmışdı. İyirmi dəqiqə sonra sən hələ də əmin deyildin — siz hələ də Commodore-u televizora qoşmağa çalışır, televizorun antenna kabelinin 75-om, yoxsa 300-om koaksial tip olub-olmadığını düşünürdünüz. Amma, nəhayət, televizoru 3-cü kanala çevirib kobud, bənövşəyi bir görüntü görə bildin.

READY, kompüter bildirdi. Atan kompüteri sənə tərəf itələyərək onu ilk dəfə
sınamağa səni təşviq etdi. Sən də hər hərfi diqqətlə axtararaq HELLO yazdın.
Kompüterin cavabı çaşdırıcı idi.
![Commodore 64 [[sintaksis]] xətası](https://twobithistory.org/images/c64_error.png)
Bir neçə fərqli söz yazmağa çalışdın, lakin cavab həmişə eyni idi. Atan dedi ki, təlimatın qalan hissəsini oxusan yaxşı olar. Bu asan iş olmazdı — Commodore 64 ilə gələn rəhbər kiçik bir kitab idi. Amma bu səni narahat etmədi, çünki rəhbərin girişi möcüzələrdən xəbər verirdi.
Commodore 64 iddia edirdi ki, “mikrokompüter sənayesindəki ən qabaqcıl şəkil yaradıcısına” malikdir və bu sənə “eynilə arkada tipli video oyunlarında gördüyün kimi dörd fərqli rəngdə öz şəkillərini tərtib etməyə” imkan verəcək. Commodore 64 həmçinin “bir çox tanınmış musiqi sintezatorlarına rəqib olan daxili musiqi və səs effektlərinə” malik idi. Bütün bu alətlər sənin ixtiyarına veriləcəkdi, çünki rəhbər sənə hər şeyi addım-addım göstərəcəkdi:
Bütün mövcud aparat təminatı qədər vacib olan başqa bir şey də bu İSTİFADƏÇİ RƏHBƏRİnin sənin kompüterləri anlamağını inkişaf etdirməyə kömək edəcəyidir. O, kompüterlər haqqında bilinməli olan hər şeyi sənə deməyəcək, lakin təqdim olunan mövzular barədə daha ətraflı məlumat üçün səni geniş çeşiddə nəşrlərə yönləndirəcək. Commodore sənin yeni COMMODORE 64-dən həqiqətən həzz almağını istəyir. Və əylənmək üçün unutma: proqramlaşdırma bir gündə öyrənə biləcəyin bir şey deyil. İSTİFADƏÇİ RƏHBƏRİni oxuduqca özünə qarşı səbirli ol.
O gecə çarpayıda təlimat sinənin üstündə açıq qalmış halda yuxuya gedənə qədər ilk üç fəsli — “Quraşdırma”, “Başlayarkən” və “Başlanğıc BASIC Proqramlaşdırma” — başdan sona oxudun.
Commodore BASIC
İndi şənbə səhəridir və öyrəndiklərini sınamağa can atırsan. Təlimatın sənə
öyrətdiyi ilk şeylərdən biri ekrandakı rəngləri necə dəyişməkdir. Təlimatlara
əməl edərək tərs yazı rejiminə daxil olmaq üçün CTRL-9-a basırsan və sonra
uzun xətlər yaratmaq üçün boşluq düyməsini basıb saxlayırsan. Televizor ekranı
üzərindəki bu qəfil yeni gücündən həzz alaraq, CTRL-1-dən CTRL-8-ə qədər
olan düymələrlə rənglər arasında keçid edirsən.

Nə qədər möhtəşəm olsa da, anlayırsan ki, bu proqramlaşdırma sayılmır. Dünən gecə öyrənmisən ki, kompüteri proqramlaşdırmaq üçün onunla BASIC adlı dildə danışmalısan. Sənə BASIC sanki elmi-fantastik filmlərdən çıxmış bir şey kimi görünür, lakin 1983-cü ilə qədər BASIC-in demək olar ki, on iki illik yaşı var. O, hesablama texnikasını sosial elmlər və humanitar elmlər üzrə bakalavr tələbələri üçün əlçatan etmək istəyən iki Dartmouth professoru, Con Kemeni (John Kemeny) və Tom Kurts (Tom Kurtz) tərəfindən icad edilmişdir. O, minikompüterlərdə geniş yayılmışdı və universitet riyaziyyat dərslərində populyar idi. Daha sonra Bill Qeyts və Pol Allen Altair üçün MicroSoft BASIC interpretatorunu yazdıqdan sonra mikrokompüterlərdə standart halına gəldi. Amma təlimat bunların heç birini izah etmir və sən bunları yalnız illər sonra öyrənəcəksən
Təlimatın yoxlamağı təklif etdiyi ilk BASIC əmrlərindən biri PRINT əmridir.
PRINT "COMMODORE 64" yazırsan, 2 düyməsinin üstündəki dırnaq işarəsini
tapmaq bir az vaxt apardığı üçün yavaş-yavaş yazırsan. RETURN düyməsini
basırsan və bu dəfə kompüter şikayət etmək əvəzinə, sənə dediyini edir və
növbəti sətirdə “COMMODORE 64” göstərir.
İndi PRINT əmrini hər cür fərqli şeylərdə istifadə etməyə çalışırsan:
toplanmış iki rəqəm, vurulmuş iki rəqəm, hətta bir neçə onluq kəsr. PRINT
sözünü tam yazmağı dayandırıb əvəzində ? istifadə edirsən, çünki təlimat sənə
məsləhət görüb ki, ? tez-tez mütəxəssis proqramçılar tərəfindən istifadə
edilən PRINT əmrinin qısaltmasıdır. Özünü artıq bir mütəxəssis kimi hiss
edirsən, amma sonra xatırlayırsan ki, sən hələ üçüncü fəsil olan “Başlanğıc
BASIC Proqramlaşdırma”ya çatmamısan.
Çox keçmədən oraya çatırsan. Fəsil səni ilk əsl BASIC proqramını yazmağa təşviq
etməklə başlayır. NEW yazır və RETURN basırsan, bu da sənə təmiz bir səhifə
verir. Sonra proqramını yazırsan:
10 ?"COMMODORE 64"
20 GOTO 10
10 və 20, təlimatın izah etdiyi kimi, sətir nömrələridir. Onlar kompüter üçün
ifadələri sıralayır. Onlar həmçinin proqramçıya müəyyən əmrlərdə proqramın digər
sətirlərinə istinad etməyə imkan verir — necə ki, sən burada GOTO əmri ilə
etmisən — hansı ki, proqramı yenidən 10-cu sətrə yönəldir. “Sətirləri 10-luq
artımlarla nömrələmək yaxşı proqramlaşdırma təcrübəsidir,” təlimat bildirir,
“ola bilsin ki, sonradan bəzi ifadələr əlavə etmək lazım gəlsin.”
RUN yazır və ekranda dəfələrlə təkrarlanan “COMMODORE 64” yazısının dolmasına
baxırsan.

Bunun kompüterini partlatmayacağına əmin deyilsən. Dövrəni qırmaq üçün
RUN/STOP düyməsini basmalı olduğunu xatırlamaq bir neçə saniyəni alır.
Təlimatın növbəti bir neçə bölməsi sənə dəyişənlər haqqında öyrədir. Təlimat
bildirir ki, onlar “kompüterin içərisində rəqəm və ya mətn simvollarını saxlaya
bilən bir sıra qutular kimidir.” % simvolu ilə bitən dəyişənlər tam
ədədlərdir, $ simvolu ilə bitən dəyişənlər isə simvollar sətiridir (strings).
Bütün digər dəyişənlər isə “vergüllü ədəd” (həqiqi ədədlər) adlanan
dəyişənlərdir. Təlimat sənə dəyişən adlarında diqqətli olmağı xəbərdar edir,
çünki adın istədiyin qədər uzun olmasına heç nə mane olmasa da, kompüter yalnız
adın ilk iki hərfini tanıyır.
Sonra IF... THEN... və FOR... NEXT... strukturlarını öyrənirsən. Bütün bu
yeni alətlərlə təlimatın sənə təqdim etdiyi növbəti böyük çağırışın öhdəsindən
gəlməyə hazır olduğunu hiss edirsən. Əgər iddialısansa, o səni qızışdırır,
“aşağıdakı proqramı yaz və nə baş verdiyini gör”. Proqram indiyə qədər gördüyün
hər şeydən daha uzun və mürəkkəbdir, amma onun nə etdiyini bilmək üçün
səbirsizlənirsən:
10 REM SICRAYAN TOP
20 PRINT "{CLR/HOME}"
25 FOR X = 1 TO 10 : PRINT "{CRSR/DOWN}" : NEXT
30 FOR BL = 1 TO 40
40 PRINT " ●{CRSR LEFT}";
50 FOR TM = 1 TO 5
60 NEXT TM
70 NEXT BL
75 REM TOPU SAĞDAN SOLA HƏRƏKƏT ETDİR
80 FOR BL = 40 TO 1 STEP -1
90 PRINT " {CRSR LEFT}{CRSR LEFT}●{CRSR LEFT}";
100 FOR TM = 1 TO 5
110 NEXT TM
120 NEXT BL
130 GOTO 20
Yuxarıdakı proqram Commodore 64-ün ən maraqlı xüsusiyyətlərindən birindən
istifadə edir. Çap olunmayan əmr simvolları PRINT əmrinə sətir kimi
ötürüldükdə, ekrana çap olunmaq əvəzinə yalnız adətən yerinə yetirdikləri
hərəkəti edirlər. Bu, proqramının daxilindən sətirlər çap edərək istənilən əmr
zəncirini təkrar oxutmağa imkan verir.
Yuxarıdakı proqramı yazmaq çox vaxtını alır. Bir neçə səhv edir və bəzi
sətirləri yenidən daxil etməli olursan. Lakin nəhayət RUN yaza və bir şah
əsərə baxa bilirsən.

Bunun indiyə qədər gördüyün ən möhtəşəm şey olmaq üçün əsas namizəd olduğunu
düşünürsən. Amma bunu demək olar ki, dərhal unudursan, çünki BASIC-in RND
(təsadüfi bir rəqəm qaytarır) və CHR$ (verilmiş rəqəm koduna uyğun simvolu
qaytarır) kimi daxili funksiyaları haqqında öyrəndikdən sonra təlimat sənə elə
bir proqram göstərir ki, illər sonra belə bir
esse antologiyasının adı olacaq qədər məşhurlaşacaq:
10 PRINT "{CLR/HOME}"
20 PRINT CHR$(205.5 + RND(1));
40 GOTO 20
İşə salındıqda, yuxarıdakı proqram təsadüfi bir labirint yaradır.

Bu, mütləq indiyə qədər gördüyün ən möhtəşəm şeydir.
PEEK və POKE
İndi sən Commodore 64 təlimatının ilk dörd fəslini, o cümlədən “Qabaqcıl BASIC” adlı fəsli bitirmisən, buna görə də özünlə olduqca fəxr edirsən. Bu şənbə səhəri çox şey öyrəndin. Amma bu günorta, qısa bir nahar fasiləsindən sonra, qonaq otağındakı bu sehrli maşını daha az sirli edəcək bir şey öyrənəcəksən.
Təlimatdakı növbəti fəsil “Qabaqcıl Rəng və Qrafika Əmrləri” adlanır. O, bu gün səhər tezdən yaza bildiyin rəngli zolaqları yenidən nəzərdən keçirməklə başlayır və bir proqramdan eyni şeyi necə edə biləcəyini göstərir. Sonra sənə ekranın arxa plan rənglərini necə dəyişməyi öyrədir.
Bunu etmək üçün BASIC-in PEEK və POKE əmrlərindən istifadə etməlisən. Bu
əmrlər müvafiq olaraq yaddaş ünvanını yoxlamağa və ona yazmağa imkan verir.
Commodore 64-ün əsas arxa plan rəngi və kənar rəngi var. Hər biri xüsusi təyin
edilmiş bir yaddaş ünvanı tərəfindən idarə olunur. Arxa planı və ya kənarı həmin
rəngdə etmək üçün istədiyin rəng dəyərini həmin ünvanlara yaza bilərsən.
Təlimat izah edir:
Dəyişənlərin maşın daxilində məlumatlarını yerləşdirdiyin “qutular”ın nümayəndəsi kimi düşünülə bildiyi kimi, sən həmçinin kompüter daxilində xüsusi yaddaş yerlərini təmsil edən bəzi xüsusi təyin edilmiş “qutular” haqqında düşünə bilərsən. Commodore 64 ekranın arxa planı və kənar rənginin necə olacağını, ekranda hansı simvolların göstəriləcəyini və harada göstəriləcəyini — və bir çox başqa vəzifələri yoxlamaq üçün bu yaddaş yerlərinə baxır.
Mövcud bütün arxa fon və kənar rəng kombinasiyalarını dövr etmək üçün bir proqram yazırsan:
10 FOR BA = 0 TO 15
20 FOR BO = 0 TO 15
30 POKE 53280, BA
40 POKE 53281, BO
50 FOR X = 1 TO 500 : NEXT X
60 NEXT BO : NEXT BA
POKE əmrləri böyük operandları ilə əvvəlcə qorxuducu görünsə də, indi görürsən
ki, rəqəmin faktiki dəyərinin o qədər də əhəmiyyəti yoxdur. Sözsüz ki, rəqəmi
düzgün yazmalısan, amma rəqəmin təmsil etdiyi tək şey Commodore-un təsadüfən
53280 ünvanında saxladığı bir “qutu”dur. Bu qutunun xüsusi bir məqsədi var:
Commodore ekranın arxa plan rənginin necə olmasını müəyyən etmək üçün ondan
istifadə edir.

Bunun olduqca gözəl olduğunu düşünürsən. Yaddaşdakı xüsusi təyinatlı bir qutuya yazmaqla sən kompüterin fundamental xüsusiyyətini idarə edə bilərsən. Sən Commodore 64-ün sxemlərinin yaddaşda yazdığın dəyəri necə götürdüyünə və ekranın rəngini necə dəyişdiyinə əmin deyilsən, amma bunu bilməmək sənin üçün problem deyil. Ən azından o nöqtəyə qədər olan hər şeyi başa düşürsən.
Xüsusi Qutular
O şənbə günü təlimatın hamısını bitirə bilmirsən, çünki enerjin tükənməyə başlayır. Amma axır-əvvəl onun hamısını oxuyursan. Bu müddət ərzində Commodore 64-ün bir çox başqa xüsusi təyinatlı qutuları haqqında öyrənirsən. Ekranda nəyin olduğunu idarə etmək üçün yaza biləcəyin qutular var — əslində, bir simvolun görünə biləcəyi hər yer üçün bir qutu. Altıncı fəsildə, “Sprayt Qrafikası”nda sən ətrafda hərəkət etdirilə bilən, hətta böyüdülüb-kiçildilə bilən şəkillər yaratmağa imkan verən xüsusi təyinatlı qutular haqqında öyrənirsən. Yeddinci fəsildə, “Səs Yaratmaq”da, Commodore 64-ün musiqi ifa etməsi üçün yaza biləcəyin qutuları öyrənirsən. Məlum olur ki, Commodore 64-də sonradan API (tətbiqi proqramlaşdırma interfeysi) adlandırılacağını öyrənəcəyin şeylərdən çox az var. Commodore 64-ü idarə etmək əsasən sxem tərəfindən xüsusi məna verilmiş yaddaş ünvanlarına yazmağı əhatə edir.
Nəhayət, o xüsusi qutulara yazmaqla keçirdiyin o uzun illər səninlə qalır. Hətta, onilliklər sonra belə, geniş qrafik və ya səs API-si olan bir maşını proqramlaşdırarkən bilirsən ki, sistemdə API sonda o qutulara və ya onlara bənzər nələrəsə yazır. Bəzən yalnız API-lərdən istifadə edən daha gənc proqramçılar haqqında düşünəcək və onların API-nin onlar üçün nə etdiyini düşündükləri ilə maraqlanacaqsan. Bəlkə də onlar API-nin başqa bir gizli API-ni çağırdığını düşünürlər. Bəs o zaman onlar gizli API-nin nəyi çağırdığını düşünürlər? Sən o gənc proqramçılara acıyırsan, çünki onlar, yəqin ki, çox çaşqınlıq içindədirlər.
// terminlər
- abstraksiya abstraction
- Mürəkkəb detalları gizlədib daha sadə interfeys təqdim edən dizayn prinsipi.
- ↗ Ətraflı
- bakalavr bachelor's degree
- Ali təhsilin ilk pilləsini bitirənlərə verilən dərəcə.
- əməliyyat sistemi operating system
- Aparat və proqram təminatı arasında vasitəçi olan sistem proqramı.
- ↗ Ətraflı
- qraf graph
- Düyünlər və onları birləşdirən kənarlardan (xətlərdən) ibarət şəbəkə quruluşunu modelləşdirən məlumat strukturu.
- tətbiqi proqramlaşdırma interfeysi application programming interface
- Sistem və kitabxanaların başqa proqramlar üçün təqdim etdiyi funksional interfeys.
- ↗ Ətraflı
// şərhlər