Proqramlaşdırmaya nədən başlayım? Hansı dili öyrənim? İntervyulara necə hazırlaşım?
Proqramlaşdırmaya nədən başlayım?
Bu sual proqramlaşdırmaya yeni başlayanlar üçün ən çaşdırıcı suallardan biridir. IT sahəsi hədsiz geniş və sürətlə dəyişən olduğundan, çox vaxt adam bilmir nədən başlasın, nəyi öyrənsin. Amma siz tezliklə biləcəksiniz…
Kod yazmağı öyrənməkdən başlayın
Mersedes ilə də, 2107 ilə də maşın sürməyi öyrənsəniz — fərq etmir. Əsas odur, sürməyi öyrənəsiniz. Daha sonra tır sürməyə keçid etmək belə sizə nisbətən asan gələcək. Birinci gərək sürməyi bacarasan, sonra nə sürməyi.
Eynisi də kod ilə. Ən birinci kod yazmağı öyrənin. Dil seçimi önəmli deyil, lakin, Python daha asan olduğundan, onunla başlamağı daha çox tövsiyə edərdim. Gərək birinci kod yazmağı bacarasan, sonra dil, istiqamət seçəsən.
if-else, loop-lar, variable-lar və s. — demək olar bütün dillərdə var, birinci bir cığır açıb, onları öyrənmək lazımdır. Bunları biləndən sonra artıq təcrübənizi artırmaq üçün müxtəlif test tətbiqlər yaza bilərsiniz. Məsələn, mənim ilk yazdığım oyun, hamımızın bildiyi — "Milyonçu" olub.
Siz də irəliləməyə tələsməyin, kod yazmağın əsaslarını öyrənib, çoxlu tətbiqlər yazın ki, məşq edəsiniz — əliniz öyrəşsiz.
Daha sonra hansı istiqamətdə davam etmək, ona uyğun hansı dili seçmək barədə düşünə bilərsiniz, lakin ən birinci — kod yazmağı öyrənin.
Alqoritm və Data Strukturlar
Bir çoxları iddia edir ki, alqoritm və data strukturlar (bundan sonra: ADS) proqramlaşdırmanın əsasını təşkil etdiyindən onları öyrənməkdən başalamaq lazımdır. Mən bu fikirlə razı deyiləm.
Film maraqlı səhnə ilə başlamalıdır ki, izləyicilərə maraqlı gəlsin. Sonra uzun-uzadı sujeti inkişaf etdirmək olar, lakin filmin maraqlı yerləri ortasından sonra başlayırsa, izləyici ortaya çatmamış yarımçıq çıxa bilər.
Eynisi də burada: bəli, ADS proqramlaşdırmanın fundamentini təşkil edir, amma onunla başlasanız, bu sizə çətin, darıxdırıcı və maraqsız gələ bilər.
Birinci kod yazıb, kiçik proqramlar ərsəyə gətirin ki, çəkdiyiniz zəhmətin bəhrəsini vizual görəsiz. Bu sizdə çox güclü motivasiya yaradacaq, daha da çox irəliləmək istəyəcəksiz. Bundan sonra bu həvəsin dalğasında artıq ADS-i öyrənməyə başlaya bilərsiniz.
Hansı dili öyrənim? Nə öyrənim? Back yoxsa front?
C# yoxsa Java? React yoxsa Angular? Blockchain yoxsa Machine Learning?
Bu suallar kimi "n" qədər sual ilə rastlaşmaq olar. Lakin, heç birinin obyektiv bir cavabı yoxdur. Bu kimi suallar Ronaldo ya Messi sualına bənzəyir. Biri o birindən üstün deyil, hərəsinin öz mənfi və müsbət cəhətləri var.
Ümumiyyətlə, proqramlaşdırmada bir cavab nadirən olur. Çox vaxt, eyni sualın müxtəlif cavabları olur — harada və nə vaxt istifadə etdiyinizdən asılı olaraq doğruluğu müəyyən edilir.
Əsasən, proqramlaşdırma 8 sahəyə ayrılır:
1. Web
Ən məşhur və tələb olunan istiqamətlərdən biri — veb proqramlaşdırmadır. Burada siz müxtəlif veb applikasiyalar yazmaqla yanaşı, vebdən başqa yerlərdə də istfadə olunan Web API-lar yaza bilərsiniz.
2. Mobile
Əvvəllər, bir ideya olanda insanlar düşünürdü veb üzərindən yaxşı bir tətbiq yığsınlar. Bugün isə prioritet mobil tətbiqədir. Ardını özünüz gətirin:)
3. AI (Machine Learning, Deep Learning)
Bu sahə digərlərinə nisbətdə daha qəlizdir. Lakin, görünən odur ki, bütün dünya ona tərəf gedir…
4. Cloud
Dünyada hər gün nə qədər fiziki server cloud ilə əvəzlənir. Uzaqgörənsinizsə — öyrənməyə dəyər.
5. PL/SQL
Bu sahədə əsas işiniz verilənlər bazası ilə işləmək olacaq. Ona görə də daha çox database-lər haqda biliklərinizin olması tələb olunacaq.
6. Blockchain
Burada siz blockchain texnologiyası əsasında işləyirsiniz. Rəqabət nisbətən daha az olsa da, tələbat çoxdur.
6. Game Development
Artıq oyun oynamaq yox, oyun yaratmaq vaxtıdır. :) Bəşəriyyət yaşadıqca, oyunlar olacaq. Sınamağa dəyər.
7. Desktop
Yadınıza gəlir, internet inkişaf etməzdən əvvəl proqramları online yox, yükləyib, öz PC-imizdə işəldirdik? Bax, həmin proqramları yazmaq üçün bu sahəni seçməlisiniz.
Əslində, yuxarıda yazdıqlarım çox ümumiləşdirilmiş məlumatlardır. Məsələn, Backend Developer eyni API ilə həm veb, həm də mobile üçün tətbiq yaza bilər. Yəni, bu sahələrin arasında olan sərhəd konkret deyil.
Yaxşı, indi bəs nəyi öyrənək?
Hələ də qərarsızsınızsa və beyninizdə bu sual gəzirsə, cavabı — fərq etməz. Nə öyrənməyiniz sizdən aslı olan bir şeydir. Ürəyinizdən hansı sahə keçirsə — onu da öyrənin. Sizə uyğun olanı seçin. Tamam, Desktop üçün yazılan app-lar get-gedə azalır, amma digər sadaladığım 7 sahədən hansını seçsəz də yüksək maaş və çox sayda iş imkanı zəmanətlidir.
Təbii ki, bazarda hədsiz sürətlə dəyişən vəziyyəti proqnozlaşdırmaq çətindir. Bir anın içində hər şey dəyişə də bilər.
Lakin, üzülməyə dəyməz. İstəlinən vaxt sahəni dəyişmək də olar. Təbii ki, bu əlavə zaman və zəhmət tələb edəcək (hansı sahədən hansına keçməyinizdən aslı olaraq), amma ümumilikdə mümkünsüz deyil.
Məsələn, back-dən front-a ya da əksinə keçid etmək — zəhmətkeş developer üçün müəyyən qədər sadə bir təcrübədir.
Bəs, hansı dili öyrənim?
Dillərlə də eynisi. Seçdiyiniz sahəyə uyğun hansı dili öyrənsəz — hər zaman iş olacaq. Java ya C#, React ya Angular — fərq etməz.
Backend yoxsa Frontend?
Birinci, müəyyən edək ki, bunlar nə deməkdir. Bir tətbiqdə görə biləcəyiniz öndəki hissə — frontend-dir. Arxa plan — backend. Adlarından göründüyü kimi.
Lori dildə desək, Backend-çi arxa planda (server) baş verən məntiqi yazır. Məsələn, siz bir “login” düyməsinə basırsınız, istifadəçi adınız və parolunuz gedir serverə. Artıq orada nə baş verirsə (database-dən sizə uyğun məlumatları alıb, yoxlamaq və s.) bu backend tərəfdə baş verir və buna da backend developer cavabdehlik daşıyır.
Frontend-çi isə serverdən gələn məlumatı emal edir — onu müəyyən bir şəkilə salıb sizə göstərir, və ya üzərində başqa bir əməliyyat aparıb, yenidən backend-ə sorğu göndərir və s.
Fullstack Developer — bunların iksini də bacaran developer-ə deyilir.
"Back ya front?" sualın cavabını isə özünüz bilirsiniz— eynən — konkret cavabı yoxdur. Hansını seçsəz də işiniz yenə olacaq. Əsas odur ürəyinizdən keçəni seçəsiniz.
Öyrənərkən nələrə diqqət edim?
Buraxdığım 2 səhv:
Vaxtı ikən bu buraxdığım səhvlərə görə xeyli zamanımı boşuna itirmişəm. Mən buraxdım, siz buraxmayın :)
1. Əzbərləmək
Ən böyük səhvlərdən biri kodu əzbərləməyə çalışmaqdır. Məsələn, siz bir array yaratmağı öyrənmisiz. C#-da onu bir neçə müxtəlif yollarla yaratmaq olar və siz bu yolları əzbərləyirsiz. Və yaxud, DateTime klassının hansı metodları var — onları əzbərləyirsiz. Bu mənasız və faydasızdır. Onsuz da, lazım olduğu zaman yadınıza düşməyəcək.
Deyilənlərə görə, Eynşteyndən səsin sürətinin neçə olduğunu soruşduqda, verdiyi cavab belə olub:
"Kitabda olan bir şeyi niyə beynimdə saxlayım?!"
Kodu əzbərləmək yox, onunla tanış olmaq lazımdır. Sadəcə bilin ki, belə bir şey var və gələn dəfə onu istifadə etmək lazım olanda — çəkinmədən axtarış edib, kodu tapıb copy-paste edib işlədin.
Kod yazmaq 10-dur, 9-u düzgün axtarışdır.
Bəli, kod yazarkən, Google-a müraciət etməkdən çəkinməyin. Ən təcrübəli proqramçılar belə StackOverflow-suz işləmirlər.
Hələ bəxtiniz gətirib ChatGPT, Gemini kimi faydalı tool-lar da var. Bizim vaxtımızda belə şeylər yox idi :)
2. Qərarsızlıq
Deməli, mən proqramlaşdırmaya təzə başlayanda həftəni günlərə bölmüşdüm. Məsələn, 2 gün Javada Android üçün tətbiqlər yazmağı öyrənirdim, 2 gün PHP, 2 gün başqa nə isə. Nəticədə heçnə öyrənmirdim, sadəcə hər şey haqda ala-çiy məlumatım olurdu.
Bu səhvi buraxmamaq üçün, bir qərara gəlib, bir yol tutub — onunla gedin. Əlbəttə, özünüzü yoxlamaq üçün müxtəlif sahələri sınaya bilərsiz, amma bu qısa müddət ərzində, sırf qərarlaşmaq üçün edilməlidir. Daha sonra bir qərara gəlib, onunla da irəlləməlisiniz.
İngilis dili
Belə bir deyim var ki, ingilis dili proqramçının ikinci ana dili olmalıdır. Ana dili qədər olmasa da, ən azından texniki səviyyədə ingilis dilini bilmək proqramçı üçün vacibdir. Kitablar, imtahanlar, kurslar, dokumentasiyalar və s. demək olar hər zaman ingilis dilində olur.
Bu dili bilmək sizə gələcəkdə remote olaraq çalışmağa da imkan yarada bilər. Bu barədə çox deyəcəyim yoxdur, qısacası — ingilis dilini bilməyiniz sizə karyeranızda həddən artıq kömək olacaq.
Dil öyrənməyin ən effektiv yolları barədə “İngilis dilini necə öyrənməli?” və ya “8 dildə danışmağın sirri” məqaləmdə oxuya bilərsiniz.
İntervyudan necə keçim?
Bu barədə daha ətraflı“İntervyuya psixoloji hazırlıq” və ya “Cavabı bilirdim, amma kəsildim” adlı məqaləmdə danışmışam.
Lakin, burada da bir az bu mövzuya toxunmaq istədim.
Sizə bir sirr açım: yüksək texniki biliklər iş tapmaq şansınızı mütləq artırmır. Texniki biliklərdən əlavə "özünüzü satmaq" bacarığınız olmalıdır. Çox adam tanıyıram, kifayət qədər biliyi var, lakin "fərasətli" olmadığı üçün intervyudan kəsilir.
İntervyu — şahmat lövhəsi kimidir.
Burada "mind games" baş verir.
Ən kiçik detallar belə qarşı tərəfin sənin haqda olan fikrlərinə təsir edə bilər.
Bu mövzunun açmasını verə bilmirəm, çünki, bunu öyrətmək olmur ( ya da çox çətindir ). Qısaca desəm — özünüzə güvənin. Qarşı tərəf sizin necə öz biliklərinizdən arxayın olmağınıza əmin olmalıdır.
Həyəcanlanmayın. Utanmayın. Rahat və arxayın olun.
Bilmədiyiniz sual…
Sizin bilmədiyiniz bir sual sizdən soruşularsa — qorxmayın. Hər şeyi bilmək məcburiyyətində deyilsiniz. Sadəcə, zarafatla yuxarıda qeyd etdiyim Eynşteynin sözlərini misal gətirə bilərsiniz.
"Lazım gələrsə, qısa zaman ərzində öyrənə bilərəm" də əlavə edə bilərsiniz.
"Axı öyrənə bilmərəm" —deyə düşünməyin. Birincisi, buna ethiyac olacaq ya yox — böyük sual altındadır, lakin, sizin o cür cavab verməyiniz qarşı tərəfin sizin haqda olan fikirlərinə müsbət təsir edəcək. İkincisi, niyə də yox? Bura kimi gəlib, bu qədər şey öyrənmisinizsə, niyə bir addım daha atıb əlavə bir şey öyrənməyəsəniz ki? :)
İntervyudan kəsilməkdən qorxmayın
Bugünə kimi istədiyim iş təklifini alana qədər təqribi 20–30 dəfə intevyudan kəsilmişəm. Bu sizi ruhdan salmasın. İntervyudan kəsilməkdən qorxmayın.
Hər kəsildiyiniz intervyu problemin sizdə olmasına dəlalət eləmir. İnsan faktoru çox böyük rol oynayır (intervyu götürəndən çox şey aslıdır). Hətta intervyunun günün hansı vaxtında keçirildiyi belə nəticəyə təsir edə bilər. Odur ki, özünüzü günahlandırmayın. Ola bilər, siz hələ "öz şirkətinizi" tapmamısınız…
Kəsildiyiniz intervyuların boşa getdiyini də düşünməyin. Əksinə, dərs çıxarmağa çalışın. Mütləq feedback tələb edin (ətraflı izah etsinlər ki, nəyə görə kəsilmisiniz) və zəif nöqtələrinizi təkrarlayaraq möhkəmləndirin ki, növbəti intervyulara daha da hazırlıqlı olasınız. Səhv etmirəmsə, sınaq intervyusu kimi xidmət göstərən saytlar da var, orada özünüzü sınaya da bilərsiniz.
İmkan olarsa, intervyuları video şəklində yazıb, sonradan yenidən üstündən keçin. Bu sizə ilişdiyiniz yerləri təkrar analiz etməyə kömək olacaq.
Uğurun 3 əsas elementi: Həvəs, Zəhmət və Səbr.
Bu hissəni axıra saxladım ki, daha maraqlı məqamlara birinci toxunum. Əslində isə bu hissə ən vacib məqamlardan biridir.
Uğurun 3 əvəzsiz inqrediyenti həvəs, zəhmət və səbrdir.
Bu siyahıya istedadı da əlavə etmək olardı, lakin istedad əvəzsiz deyil. Daha az potensial ilə dünyaya gəlmiş bir adam daha çox işləyərək çox böyük uğurlara çata bilər.
Əgər həvəsiniz varsa — digər şeylərin önəmi yoxdur.
Əgər həvəsiniz yoxdursa — digər şeylərin önəmi yoxdur.
İstəyir, səni Harvarda oxumağa göndərsinlər — həvəsin yoxdursa — xeyri yoxdur. Digər tərəfdən, həvəsin varsa, şam işığında da oxuyub, nəticə əldə edəcəksən.
Bu misalı hər zaman çəkirəm:
Universitetə qəbul imtahanına hazırlaşmağa zərrə qədər də həvəsim olmayıb. 214 bal ilə qəbul olmuşam. Valideynlərim məni 2 il məcbur riyaziyyat fənni üzrə müəllim yanına yazmışdılar (1 il individual). Nəticədə, minimum nəticə göstərərək, 25 sualdan 3 doğru yazıb keçdim.
Niyə? — Çünki həvəsim yox idi.
İspan, fransız, alman dillərində danışıram. Pianoda sərbəst ifa edirəm. Bunları heç bir kursa getmədən özüm öyrənmişəm. Eynisi də proqramlaşdırma ilə - heç bir kursa getmədən, YouTube və kitablar ilə öyrənmişəm.
Niyə? — Çünki həvəsim var idi.
Ona görə də bir şeyə başlamazdan əvvəl birinci özünüzdə bunu müəyyən edin ki, doğurdan mı, siz bunu istəyirsiz, yoxsa kiminsə, nəyinsə xətrinə edirsiniz?
Mənə kod yazmaq hər zaman maraqlı gəlib, heç zaman pula, prestijə görə öyrənməmişəm, həvəsim olub deyə öyrənmişəm. Həvəsim olmasa idi — öyrənməzdim. (məntiqlidir, deyil mi?)
Lakin, təkcə həvəsin olması ilə nəticə əldə etmək olmur. Bu həvəs o qədər çox olmalıdır ki, səni hərəkətə gətirsin. Həvəsin arzudan fərqi də bundadır.
Arzu edən adam, sadəcə xəyallar qurur. Həvəsi olan adam isə qarşısına məqsəd qoyur. Məqsədə çatmaq üçün isə mütləq zəhmət çəkməlisən.
Necə deyərlər, işləməyən — dişləməz. Öz şəxsi təcrübəmdən 2 qızıl qaydanın saat kimi dəqiq işləməsinin şahidi olmuşam (bəzi istisnalar olmaqla):
1. Zəhmət çəksən — bəhrəsini görəcəksən.
2. Çəkməsən — yox.
Ola bilər sizin güclü həvəsiniz olsun və “qaza gəlib”, gecə-gündüz zəhmət çəkib, işləyəsiniz. Lakin, bir həftə, bir ay, bir ilə nəticə görməyib, təslim olsanız — uğura çata bilməzsiniz. Ona görə də, əsəri tamamlamaq üçün həvəs və zəhmətdən əlavə bizə lazım olan — səbrdir.
Doqquz qadın bir yerə toplaşıb bir uşağı bir aya dünyaya gətirə bilməz. Hər şeyin öz vaxtı var.
Həvəs + Zəhmət + Səbr = Uğur. Bəli, bu qədər sadə.
İnsanlar çox vaxt qısa yollar axtarırlar. Arıqlamaq haqda milyon kitab, təlim var. Hər dəfə birinə yazılırıq ki, bəlkə asan bir yol tapmış olarıq. Axırda bildiyimiz şeyləri təkrar eşidib, geri qayıdırıq.
Yəni, başqa nə gözləmək olardı? Arıqlamaq üçün, sadə dildə desək — az yeyib, çox hərəkət etmək lazımdır. Bunu anlamaq üçün təlimə getməyə və ya dahi olmağa ehtiyac yoxdur. Eynisi də uğur ilə. Uğur qazanmaq üçün həvəsli olub, çoxlu işləmək və səbr etmək lazımdır. Sonda uğur özü səni gəlib tapacaq…
Hər birinizə uğurlar! =)
Bonus: CV, LinkedIn profili və iş tapmaq üçün saytlar
Burada iş tapmaq üçün, burada isə CV/resume hazırlamaq üçün müxtəlif saytların toplusunu paylaşmışam.
LinkedIn profil nümunəsi üçün isə mənim profilimə baxa bilərsiz. Özümə rəva bilmədiyimi — sizə də bilmərəm :)
Bonus 2:
MultiThreading, asinxron proqramlaşdırma, parallelism, concurrency — bunların fərqi nədir? — adlı məqaləmi oxuyun və bu çaşdırıcı mövzuya birdəfəlik aydınlıq gətirin ;)
string msg = "Thank you for reading my blog;)."
+ " Share it to be useful to others =)";
Console.WriteLine(msg);