Niyə hamı C dilindən başlamağı məsləhət görür?

Mr Nasibovv
Pragmatech
Published in
4 min readAug 9, 2020

Əvvəla onu demək istəyirəm ki, oxuduğunuz bu məqaləni yazan şəxs “Senior C developer” falan deyil. Sadəcə proqramlaşdırma sahəsinə girən zaman bir çox insanın məsləhəti ilə C proqramlaşdırma dilindən başlayan və 20+ proyekti olan 2-ci kurs tələbəsidir. Bir neçə həftə sonra C -də ilk “Hello, world!” yazmağımın üstündən 2 il ötmüş olacaq. Dönüb arxaya baxanda həmin insanlara minnətdarlıq duyduğum və bəzən də nifrət duyduğum anlar yadıma düşür. Amma əsas məsələ o zamanlar niyə hamının eyni ağızdan “Mütləq birinci C öyrən” deməsini anlamırdım. Çünki universitetdə keçdiyim qədəriylə çətin bir dil olduğunu bilirdim. Amma bir məsələ də var ki, bir şeyin asan ya da çətin olması nisbi bir anlayışdır. Təbii olaraq belə bir sual yaranır:

“Çətin deyəndə tam olaraq nəyi nəzərdə tutursan?”

Əgər bu sahədə çox yeni deyilsinizsə, az-çox bir proqramlaşdırma dilini öyrənmək üçün hansı mərhələləri keçmək lazım olduğunu bilirsiniz. Bir dil haqqında “Mən bu dili bilirəm” demək üçün sadəcə onun “syntax” -ni və data sturuktlarını bilmək yetərli deyildir. Əsas məsələ üstündə işlənilən proyektin və ya verilən problemin ən optimal yoldan həll olunmasıdır. Bunun üçün də öyrənilən mövzuların necə bir-biri ilə əlaqələndirilməsini yaxşı mənimsəmək lazımdır.

C proqramlaşdırma dilinin “syntax” -nın daha əvvəlcədən ümumi olaraq kompüterlərin necə işlədiklərini və hər hansı bir dildə yazılan hər hansı bir kodun icrası zamanı arxada gedən prosesləri anlayanlar üçün çətin olacağını düşünmürəm. Hansiki saydığım hər 2 kriteriya əzbərçiliyin aradan qaldırılmasını təmin etmək üçündür. Bildiyiniz kimi C proqramlaşdırma dili imperativ paradiqma əsasında dizayn olunan bir dildir və ən xırda detallar belə diqqətlə yazılmalıdır. Sizin də anlayacağınız üzrə bunu nələrisə dərindən başa düşmədən etmək mümkün deyil. C dilinin çətinliyi də tam olaraq burada başlayır. “Pointer”, “Memory Allocation” kimi dərslərin mənimsənilməsi və düzgün yerdə istifadə olunması arxada gedən proseslərin necə həyata keçməsini anlamaqdan da o tərəfə — yəni artıq həmin prosesləri idarə etmək deməkdir. Bu isə bir başa olaraq RAM -dan necə düzgün istifadə etmək, yazılan funksiyaların problemi ən optimal həllini təmin etməsi kimi bacarıqları və paralel olaraq alqoritmik düşünmə qabiliyyəti tələb edir.

Son olaraq məsələnin “debugging” hissəsinə, başqa dildə desək bir proyektin planlanan vaxtdan 2–3 dəfə daha gec bitməsinin əsas səbəbkarına. Yuxarıda da qeyd etdiyim kimi C proqramlaşdırma dili imperativ paradigma nəzəriyyəsinə uyduğu üçün yaradılan “variable”- ın harda yaradılmasından tut, yazılan funksiyanın ümumi proqram üçün ayrılan yaddaşın hansı hissəsini əhatə edəcəyinə aid ən kiçik boşluq belə ümumi proqramın işləməməsinə ya da məntiqi səhvlər icra etməsinə gətirib çıxara bilər. Misal olaraq “For Loop” göstərilə bilər. Siz bir çox “compiler” -lərdə, məsələr Dev C++, “for” döngüsü daxilində hər hansı bir dəyişgən təyin edə bilməzsiz. Məsələnin əsas hissəsi isə bu sizə belə açıq olaraq yox, ümumi olaraq proqramın hər hansı bir sətrində problem olduğuna aid olan bir mesajla bildirilir. Bəzi şirkətlərin proqramçıları bu problemi öz ”compiler”- larında həll etməyə calışsalar da, dəyişgənin döngüdən əvvəl təyin olunması məsləhət görülür.

Bu şəkildə gördüyünüz isə bir neçə ay əvvəl bir proyekt üzərində işləyərkən mənim başıma gələn və sadəcə onu həll eləmək üçün 4 saatımı ayırdığım bir bug -dır. Məsələnin səbəbi ilə yanaşı həllini də müştəri üçün daha aydın olsun deyə qeyd etmişdim. Bu problem ilk dəfə idi başıma gəlirdi və nə olduğu haqqında heç bir fikrim yox idi çünki demək olar hər dəfə etdiyim bir şey idi. (Amma bu səfər təyin etdiyim dəyişgən sayı əvvəlkilərlə müqayisədə çox idi). Bu qədər şeydən sonra ağlınıza gələn ilk sual məncə:

“Bu qədər “problemli” bir dildən niyə başlıyım ki ?

İlk öncə onu deyim ki bəzən ən çətindən başlamaq gələcəkdə nisbətən asan problemlərin üstündən gəlməyinizə yardımçı ola bilər. Yuxarılarda da qeyd etdiyim kimi bu proqramlaşdırma dili sizi bir neçə müxtəlif sahələrdə inkişaf etməyinizi tələb edir. Araşdırma bacarığınızı, həvəsinizi artırmaq bir kənara necə düzgün sual vermək, başqa dildə desək tez cavab tapmaq üçün hansı sualları vermək, lazım olduğunu öyrədir. Bütün kontrol sizdə olduğu üçün bir başa bütün məhsuliyyət də sizin olur. Siz həm proqram həm də donanım cəhətdən beyninizdəki layihəni istədiyiniz kimi şəkilləndirə bilirsiniz. Bu da ümumi prosesi daha aydın başa düşməyinizə səbəb olur.

Bəs hansı dildən başlasam həm rahat, həm də gələcəyim üçün yaxşı olar ?

Bu suala cavab vermək məncə çox çətin, və kimin nə istədiyini heç özləri belə tam dəqiq bilmədən belə bir şeyi məsləhət bilmək qəliz və məhsuliyyətli məsələdir. Çünki hər bir proqramlaşdırma dilinin özünə məxsus avantajları və dezavantajları vardır ki bu da bir başa olaraq sizin layihənizdən asılıdır. Hansı dili başlanğıc olaraq seçməyinizdən asılı olmayaraq əsas məsələ araştırmağı və problemləri həll etməkdən həzz almağınızdır. Çox sevdiyim bir müəllimimin dediyi kimi: “Limitləri zorlamadan əsl gücünü görə bilməyəcəyini anladığın gün yaxşı bir proqramçı olmağa başlayacaqsan!”.

Mənbələr:

--

--