Bu barədə xurafat çox maraqlıdır. Üstəlik, bu xurafatın bəziləri elə proqramçılar tərəfindən yayılır. Üstəlik, dediklərinə heç özləri də inanmadan. Hətta ixtisaslaşma səviyyəsi də bu səhv inancın qarşısını ala bilmir — sadəcə belə bir şeyin baş verə biləcəyi ehtimalını azaldır. Odur ki, bir gün bir proqramçıdan burada bəhs edəcəyimiz xurafatdan birini eşitsəniz, heç təəccüblənməyin.
- Yaxşı proqramçı riyaziyyatı yaxşı bilməlidir
Əlbəttə, riyaziyyat anlayışı olduqca faydalı şeydir. Bu, əksər elmlərdə istifadə olunan şeydir. Yerdə qalan digər elmlərdə də riyaziyyatdan, az da olsa, istifadə olunur. Bundan başqa, riyaziyyat mücərrəd təfəkkürü inkişaf etdirmək, «sübut etməyin» nə olduğunu anlamaq və məsələləri həll etməyi öyrənmək üçün ən yaxşı yollardan biridir.
Lakin işin qəribə tərəfi odur ki, proqramlaşdırma elm olmaqdan ziyadə mühəndislik fəaliyyətidir. Bu fəaliyyətin nəticələri mürəkkəb dərsliklərə bənzəsə də, burada riyaziyyat, tutaq ki, fizikadan və ya astronomiyadan qat-qat az istifadə olunur. Əksər hallarda proqramçının riyaziyyatdan təkcə bir şey — ibtidai siniflərdə tədris edilən dörd hesab əməlini bilmək tələb olunur. Qiymətli elmi məlumatların əksər hissəsi isə proqramlaşdırma sahəsinə başqa elmdən — formal məntiqdən gəlib daxil olur. Amma burada da elə bir dərin biliklər tələb olunmur.
Proqramlaşdırma biliyin xüsusi sahəsidir. Bu sahə digər elmlərdən xeyli kənardadır. Baxmayaraq ki, məhz proqramlaşdırma bu elmlərdən bəzilərini, o cümlədən, riyaziyyatı, məntiqi bir çox maraqlı ümumiləşdirməni özünə daxil edərək onları tədqiq etməyə yönəldib. Proqramçılar kompüterin yerinə yetirməli olduğu və bir mənalı təsvir olunduğu əməliyyatların axtarışı ilə məşğuldurlar. Üstəlik, axtardıqları təkcə birmənalı təsvir edilən deyil, eləcə də tam olan əməliyyatlardır. Çünki insandan fərqli olaraq kompüter «unudularaq buraxılan» qismi özü tapıb əlavə edə bilmir. Əlbəttə, burada riyaziyyata aid olan şeylərə də rast gəlmək mümkündür, amma belə bir şey yenə də sadəcə riyaziyyat sahəsinə aid olan məsələdə, özü də, bütün hallarda olmayaraq meydana gələ bilər. Əksinə, təsvirləri mümkün qədər sadələşdirmək, mümkün qədər az yazmaq meylinə burada mütləq rast gəlmək olar. Odur ki, proqramlaşdırma işinin elmi tərəfinin 99%-i ona həsr olunur ki, yazılanlar mümkün olduğu qədər yığcam, anlaşılan və səhvsiz olsun. Hə, bir də ki, əlbəttə, mümkün qədər sürətli işləyə bilsin.
- Proqramçıların yalnız proqramlamadan başı çıxır
Bu xurafat bir mənada bir əvvəlkinin tam tərsidir və buna görə bundan elə bir təəssürat yarana bilər ki, ikisindən biri mütləq doğru olmalıdır. Amma həqiqət budur ki, ikisi də yanlışdır. Məsələ orasındadır ki, proqramların yalnız cüzi bir qismi elə proqramların özünə həsr olunub və bu səbəbdən başqa elmlərə sahib olmaq tələbini irəli sürmür. Qalan proqramların hamısı başqa sahələrdəki problemləri həll etmək üçün yaradılır. Bu isə öz növbəsində həmin problemin kontekstini anlamağı tələb edir.
Bir çox belə hallarda proqramı yazmadan əvvəl proqramçı həmin məsələ ilə bağlı təfərrüatı özü dərk etməli olur. Yəni, əvvəlcə proqramçı həm rənglər vasitəsilə ətraf mühitin təsvir üslubunu, həm də bu rənglərin kağıza yayılmasının fizikasını anlamalı, və yalnız bundan sonra proqramın fəaliyyətini proqramlaşdırmalı və onun kodunu yazmalıdır. Sözsüz ki, proqramçıdan rəssam qədər məharətli olmaq, fizik qədər fizikadan başı çıxması tələb olunmur, amma buna baxmayaraq o, işini yerinə yetirmək üçün bu sahələrin təməl qaydalarını, bəzi hallarda isə hətta daha mürəkkəb məqamları anlamaq məcburiyyətində qalacaq, çünki əks halda bütün bunları proqramlaşdırmaqdan aciz qalacaq. Nəticədə, nə qədər qəribə olsa da, işə başlamadan əvvəl proqramçı mütləq müvafiq sahənin təməl məqamları ilə tanış olmalıdır.
- «Əsl proqramçılar» var ki, onların hər şeydən başı çıxır
Bu xurafat daha çox təzəliklə proqramçı olanlar arasında yayılıb. Onlara elə gəlir ki, özləri hələ ki, bütün biliklərə sahib deyillər, amma elə proqramçılar var ki, proqramlaşdırma ilə bağlı hər şeydən başları çıxır, edə bilmədikləri şey yoxdur. Bu xurafatın əks-sədası bəzən iş elanlarında öz yerini tapır və o zaman həmin iş elanı hansısa əfsanəvi super qəhrəman axtarışına bənzəyir. Amma bundan əvvəl şərh etdiyimiz xurafatı xatırlamaq kifayətdir ki, bunun yanlış olduğu anlaşılsın. Proqramçının həqiqətən işlədiyi sahələrdən başı çıxmalıdır, lakin bunun müəyyən vaxt apardığına görə bütün sahələri birdən əhatə edə bilməz. Müxtəlif sahələrdən danışarkən onu da əlavə edək ki, belə sahələr proqramlaşdırma elminin həm xaricində var, həm də daxilində. Əgər kimsə nüvə reaktorlarının daxilində fiziki proseslərin modellərini, ya da kosmik gəminin Marsa enişini proqramlaşdırmaqla məşğuldursa, onda o, həmin vaxt böyük ehtimalla, internet mağazalarının saytları üçün proqramlaşdırma ilə məşğul deyil.
Bunu da başa düşmək lazımdır ki, proqramçı, sistem admninistratoru və kompüter quraşdıran üç ayrı ixtisasdır. Bunlarla yanaşı bir-iki yüz başqa ixtisas da var ki, kompüterlə sıx əlaqədardır. Odur ki, proqramçı Windows əməliyyat sisteminin tənzimlənməsi, kompüterlərin yığılması, ya da fotoların Photoshop proqramında emal edilməsindən xəbəri olsa da, ona hər fürsətdə bu məsələlərlə bağlı müraciət etmək və imtina cavabı aldıqda qəzəblənmək, dizaynerdən ayaqqabınızı təmir etmək xahişinə bənzəyir.
- Proqramlaşdırma dillərinin hamısı bir birindən fərqlidir
Eyni zamanda əlbəttə ki, «hamısı eynidir» demək də səhv olar. Amma bu da bir həqiqətdir ki, əksər hallarda bunların arasındakı fərq cüzi olur. Mövcud olan fərqləri isə ikiyə ayırmaq məqsədəuyğundur: quruluş məntiqindəki və sintaksisdəki fərqlər. İkincisinin mənası odur ki, dillərdə eyni konstruksiyalardan istifadə olunur, onlar sadəcə fərqli sözlərlə və fərqli ardıcıllıqla yazılır. Misal üçün, Azərbaycan dili kiril əlifbasından latın qrafikasına qayıdarkən hamı bir qədər çətinlik çəkdi, amma hamı anlayırdı ki, dilin özü dəyişməyib.
Qəribə gəlsə də, sintaksis fərqləri hazırda ən «qalıcı» fərqdir. Bu qəribəlik hissi, sadəcə yazılma forması ilə fərqlənən dillərin yenilərini yaratmaq nəyə lazım olduğunu düşünərkən yarana bilər. Amma əslində yaradılan yeni yazılma üslubu deyil, quruluş məntiqidir. Daha doğrusu, mövcud məntiqə yeni əlavələrdir.
Lakin uğurlu əlavələrin hamısı bir müddət keçdikdən sonra bütün dillərə yayılır. Ola bilsin ki, «obyekt yönümlü proqramlaşdırma» və ya «funksional proqramlaşdırma» kimi terminlər eşitmisiniz. Belə ki, Java, C#, C++, Python, Lua, JavaScript və bir çox başqa dillər həm obyekt yönümlü, həm də funksionaldır. Digərlərinin isə, məsələn Wolframın sintaksisində obyekt olmasa da, burada həqiqi obyekt yönümlü yanaşmaya bənzər imitasiya mümkündür. Bəzi dillərdə isə eyni şey funksional yanaşma ilə bağlı baş verir. Müəyyən uğurlu əlavələr dillərə birbaşa əlavə olunmadan, burada mövcud olan imkanlar əsasında tətbiq olunaraq geniş istifadə oluna bilər. Belə imkanlardan məhrum qalan dillər isə yalnız inkişafını dayandırmış və mövcudluğunu olduğu kimi davam etdirən dillərdir.
Deyilənə əsaslanaraq iddia etmək olar ki, С#, Java, Scala və ya Python kimi müasir və zəngin imkanlı dillərdən birinə sahiblənərək müəyyən mənada bütün proqramlama dillərini anlamaq mümkündür. Əlbəttə, burada elə nüanslar var ki, bu haqda növbəti xurafat haqqında bəhs edərkən danışacağıq.
- «Əsl proqramçı» hər məsələ üçün uyğun dil seçə bilir
Bəzən buna belə şey də əlavə olunur: «proqramlama dili bir alətdir. Necə ki, mismar çaxmağa ən çox çəkic, gərginlik ölçməyə voltmetr uyğundursa, eləcə də hər məqsədə uyğun proqramlama dili seçilməlidir». Amma iş orasındadır ki, bütün proqramlama dillərini bilmək insan fəaliyyətinin bütün sahələrini bilmək qədər imkansızdır. Doğrudur, bunların çoxu bir-birinə olduqca bənzəyir, lakin hər birinin nüansları və incəlikləri var. Bu incə fərqləri də qısa zamanda öyrənmək olar, lakin onlara yaxşıca alışmaq vaxt tələb edir. Odur ki, proqramçı işi yaxşı bildiyi dildə daha tez və qüsursuz görə bilər. Yeni proqramlaşdırma dili isə onun işinə mütləq müəyyən çətinliklər gətirəcək.
Bununla belə qeyd edək ki, ən çox yayılmış proqramlaşdırma dillərinin demək olar ki, hamısı universaldır və bu səbəbdən onlardan birindən istifadə edərək istənilən işi həll etmək olar. O ki qaldı dar ixtisaslı dillərə, bunların sayı getdikcə azalmaqdadır. Belə olduqda, belə dilləri öyrənmək və onlara sahiblənmək üçün vaxt və səy xərcləməyə dəyməz. Bir məsələni bir qədər daha tez həll edə bilən dili öyrənməyə sərf edəcəyiniz vaxtı nəzərə alsaq, bunu etməyə dəyməz. Bunun üstünə həm də həmin dilin xüsusiyyətlərini tam olaraq anlamağın da ilk başda mümkün olmadığını əlavə etsək, görərik ki, proqramı yazarkən səhv etmə ehtimalı yüksək olacaq, bu səhvləri aradan qaldırmaq isə yenə əlavə vaxt və səy tələb edəcək. Odur ki, bir proqramçının və ya proqramçılar komandasının dil dəyişdirməsi olduqca mürəkkəb məsələdir. Belə qərar bir qayda olaraq tək məsələnin həlli üçün deyil, ümumilikdə gələcək fəaliyyəti nəzərdə tutaraq qəbul olunur.
- Proqramçı yazdığı proqramın necə işlədiyini əla anlayır
Əfsus, indiki proqramçıların əksəriyyəti yaradılmasında iştirak etdikləri proqramların yalnız kiçik bir hissəsinin necə işlədiyini başa düşürlər — o da müəyyən dərəcədə. Proqramların çoxunun quruluşunu bütün incəliklərilə başa düşən adam tapmaq mümkün deyil. Səbəb isə sürətli və nəhəng inkişaf, bu sahədəki sel tək axıb artan bilik və məlumat həcmidir. Yeri gəlmişkən, insan fəaliyyətinin digər sahələrində də bənzər hal müşahidə olunur.
Proseslərin mürəkkəbləşməsi, bilik həcminin artması qacınılmaz olaraq əməyin bölünməsinə gətirib çıxardır ki, proqramlaşdırma bu məsələdə istisna deyil. Bütün proqram 100 sətirdən ibarət olduqda, onun həll etməli olduğu məsələlər müəyyən qədər dar çərçivə içində qaldıqda, həqiqətən də, buradakı bütün incəlikləri öyrənib anlamaq mümkündür. Lakin minlərlə bir-birinə aidiyyəti olmayan məsələlər həll edən, milyonlarla sətridən ibarət, bütün bunlara rəğmən sürətlə yazılması tələb olunan proqramlara gəlincə, belə şey, əlbəttə ki, mümkün ola bilməz. Belə olduqda, hər proqramçı kodun kiçik bir hissəsini yazır. Tək işləsə belə! Qalan işləri isə, o cümlədən, əməliyyat sistemlərini, drayverləri, kitabxanaları, nəhayət elə proqram dilinin özünü artıq başqaları hazırlayıblar. Təbii ki, onun bütün sadalananlardan başı müəyyən qədər çıxır, lakin əgər o, başqaları tərəfindən yaradılmış və özünün yazdığı proqram hissəsinin işləməsini təmin edən kodun hər sətrini öyrənmək istəsə, buna sərf ediləcək vaxt min illərlə hesablanmalı olacaq.
Nəticədə, hər proqramçının, onun yazdığı proqram hissəsinin işlədiyi, tələblərə uyğun olduğu barədə başqa tərtibatçıların dediklərinə və əgər bir səhv ortaya çıxarsa, özlərinin bunu həll edəcəkləri barədə verdikləri sözə inanmaqdan başqa çarəsi yoxdur. Proqramçı, başqasının kodunun daxili quruluşunu öyrənmədən, sadəcə onun istifadə qaydalarını oxuyub riayət etməyə məcbur qalır. Başqa sözlə, onun vəziyyəti proqramının necə yazıldığı barədə qətiyyən heç bir təsəvvürü olmayan istifadəçilərin vəziyyətindən fərqli deyil.
- «Mən ki proqramçı deyiləm, proqramlaşdırmanı öyrənmək nəyimə lazımdır?»
Bilirsiniz, aşpaz da savadsız qalıb oxuma-yazmanı bilməyə bilər. Axı o, yemək bişirir, vəssalam. Nəzəri cəhətdən, buna ehtiyacı yoxdur. Amma indi bir təsəvvür edin ki, savadsız aşpazın həyatı nə qədər çətin olar. Yeni yemək reseptini oxuya bilməyincə, gərək bunu ona başqası danışsın. Resepti yaza da bilməyəcək — gərək yadda saxlasın və unutmasın. Proqramçılıq işinin bundan nə fərqi var?
Proqramlaşdırmasız indilik hələ ki, keçinmək olar, amma kompüterlər artıq həyatın bütün sahələrinə nüfuz edib. Avtomatlaşdırma səviyyəsi dayanmadan artır. Misal üçün, siz redaktorsunuz. Proqramçı olsaydınız, bir neçə kiçik proqram yazaraq mətn hazırlamaqla bağlı işinizi xeyli asanlaşdıra bilərdiniz. Və ya, televiziyada xüsusi effektlərin tərtib olunması ilə məşğulsunuz? Bunların bir çoxu kadrların yerləşdirilməsinə nisbətən kiçik proqramlardan istifadə edilərək 100 qat tez həll olunur. Buna bənzər çoxsaylı misallar insan fəaliyyətinin istənilən sahəsindən gətirilə bilər.
Bir çox məsələnin proqramçılar tərəfindən artıq həll olunduğuna baxmayaraq, insanların tələbatları o qədər çoxdur ki, proqramçılar hər yeni ortaya çıxan məsələni avtomatlaşdırmağı çatdırmırlar. Bunu əvəzində onlar sizə universal bir alət verib onunla öz işinizi özünüz tərəfindən avtomatlaşdırmağınıza şərait yaradırlar. Axı hər bir insana ayrıca proqramçı ayırmaq qeyri-mümkündür. Başqa sözlə, təkcə proqramçıların sizin işinizdən deyil, eləcə də sizin proqramlaşdırma işindən başınız çıxsaydı, məsələni daha tez və asan həll etmək olardı. Beləcə siz proqramçıların suallarına daha tez cavab verə, öz tələblərinizi daha aydın şəkildə çatdıra bilərdiniz. Bəzi hallarda isə heç proqramçıya müraciət etmədən özünüz öz işinizi həll edə bilərdiniz.
Bəli, proqramlama digər ixtisaslar üçün vacib bilik olmasa da, olduqca faydalıdır. Bu faydalılıq getdikcə artacaq və proqramlaşdırmaqdan başı çıxanlar və çıxmayanlar arasındakı fərqi getdikcə dərinləşdirəcək. Praktiki olaraq proqramlaşdırma haradasa oxumaq, yazmaq, hesablamaqla yanaşı ümumi savad məfhumuna daxil olmağa çox yaxındır. İndi proqramlaşma müəyyən sahəyə bağlı deyil. Artıq o, bütün sahələrə aiddir.
Leks Kravetskinin məqaləsinin tərcüməsi (ixtisar edilib). (https://22century.ru/popular-science-publications/myths-about-programming)