JavaRush /Java Blogu /Random-AZ /Proqram Mühəndisi kimdir? Proqram mühəndisliyi VS "yalnız...

Proqram Mühəndisi kimdir? Proqram mühəndisliyi VS "yalnız" proqramlaşdırma

Qrupda dərc edilmişdir
Proqram mühəndisliyi və proqramlaşdırma arasındakı fərqlər və ya proqram konsepsiyasının hazırlanmasının “sadəcə kodlaşdırma”dan nə ilə fərqləndiyi haqqında Samer Buna-nın məqaləsinin uyğunlaşdırılmasını diqqətinizə çatdırırıq .
Proqram Mühəndisi kimdir?  Proqram Mühəndisliyi VS
Bütün proqram mühəndisləri kodlaşdıra bilir, lakin bütün proqramçılar proqram konsepsiyalarını inkişaf etdirə bilmirlər. Bəzi insanlar "Proqram Mühəndisi" (Proqram Mühəndisi) terminini bəyənmirlər, çünki biz daha çox fiziki bir şey - tikinti haqqında danışarkən "mühəndis" sözündən istifadə edirik. Məqaləmiz, təbii ki, terminin özü ilə bağlı deyil. Birdən rədd edilməyinizə səbəb olarsa, onu asanlıqla yaradıcılıqla əlaqəli bir şeylə əvəz etmək olar. “Proqram Təminatı Yaradıcısı”, “Proqram Təminatı Müəllifi”... və ya hətta “Proqram Təminatı Yaradıcısı”!
“Proqram mühəndisi” dedikdə, əsas vəzifəsi sadəcə kod yazmaq deyil, keyfiyyətli proqram yaratmaq olan insanı nəzərdə tuturuq. O, öz çağırışını, elmi yanaşmanı, statistik metodları işinə tətbiq etməsində bunda görür. Onun üçün proqramlaşdırma sadəcə yemək üçün pul qazanmaq yolu deyil.
Proqramlaşdırma qabiliyyəti insanı avtomatik olaraq proqram mühəndisi etmir. Hər kəs kodlamağı öyrənə bilər və bu, göründüyündən çox asandır. Hər kəs öz istifadəsi üçün sadə proqram yarada bilər, lakin bu, eyni proqramın başqaları üçün də işləyəcəyinə zəmanət vermir. Ən sevdiyim nümunə budur: çoxumuz duşda oxuyuruq, amma təəssüf ki, bu tamaşa heç də həmişə peşəkar səhnəyə layiq deyil. Əlbəttə ki, yüksək keyfiyyətli musiqi təcrübəsi üçün çox güman ki, peşəkarlara müraciət edəcəksiniz. Daha çox nümunə lazımdır?
  • Hamımız məktəbdə riyaziyyat və yazmağı öyrənirik, lakin bu, bizi riyaziyyatçı və yazıçı etmir.
  • Çoxumuz keçərli və bəzən çox dadlı yemək hazırlamağa qadirik, lakin səfirliyin şam yeməyi üçün 100 nəfərlik süfrə hazırlamağa hər kəs cəsarət edə bilməz. Bu vəziyyətdə aşpaz işə götürürük.
  • Siz indi yeni evinizin tikintisini tamamilə Lego-dan təsirli şah əsərlər yaradan qonşunun uşağına həvalə etməyə hazırsınızmı?
Bu yazıda çatdırmağa çalışdığım əsas fikrim odur ki, sadə proqramlar mühəndislər tərəfindən hazırlanmış proqramlardan çox fərqlidir. Proqramlaşdırma prosesinin ən sadə tərifi: verilmiş giriş parametrləri ilə çıxış kimi konkret bir şey əldə etmək üçün kompüter üçün ardıcıl hərəkətlər ardıcıllığının tərtib edilməsi. Proqram mühəndisliyi prosesi bir çox istifadəçi üçün problemləri həll etmək üçün kompüter proqramının dizaynı, yazılması, sınaqdan keçirilməsi və kurasiyasıdır. Bu, zamanın sınağına tab gətirəcək və aşkar olandan kənarda bəzi naməlum problemlər üçün işləyəcək etibarlı və təhlükəsiz həllərin yaradılması haqqındadır.
Proqram Mühəndisi kimdir?  Proqram Mühəndisliyi VS
Proqram mühəndisləri həll etdikləri problemlər, təklif etdikləri həllər, bu həllərin məhdudiyyətləri, məxfilik və təhlükəsizlik haqqında hər şeyi bilirlər. Məncə, insan problemin mahiyyətini dərk etmirsə, onun həllini proqramlaşdırmağa belə başlamamalıdır.

Mühəndislik təfəkkürü - tətbiqi həllər axtarın

Proqram mühəndisləri proqram yazmağı özlərinin əsas məqsədi hesab etmirlər. Ehtiyacları ödəmək və problemləri həll etmək baxımından düşünürlər . Bu vacibdir, çünki hər problem proqram həllini tələb etmir. Onlardan bəziləri mövcud proqramlardan istifadə etməklə həll edilə bilər. Bəzi problemlərin baş verməsi bəzən əvvəlcədən proqnozlaşdırıla bilər və səriştəli proqram tərtibatının köməyi ilə gələcəkdə onların qarşısını almaq olar.

"Ziyalılar problemləri həll edir, dahilər qarşısını alır"

- Albert Eynşteyn

Proqram Mühəndisi kimdir?  Proqram Mühəndisliyi VS
Mürəkkəb problemlər çox vaxt çoxlu proqramlar yazmağı tələb edir. Paralel işləyən proqramlar tələb edən tapşırıqlar var, digərləri isə bir neçə proqramın ardıcıl icrasını tələb edir. Bir sıra problemlər sadəcə olaraq istifadəçiləri öyrətməklə həll edilə bilər. Proqram yaratmağa başlamazdan əvvəl proqram mühəndisi özünə bir sıra suallar verir:
  • Hansı problemləri həll etməliyəm?
  • Onları həll etmək üçün kod yazmaqdan başqa nə edə bilərsiniz?
  • Tətbiqlə bu işləri asanlaşdırmaq üçün nə edə bilərəm?

Proqram keyfiyyəti və kod keyfiyyəti

Yaxşı proqramlar aydın və oxunaqlıdır. Onların uzadılması asandır, digər proqramlarla yaxşı oynayır və onlarla işləmək kabus olmayacaq. Kodun keyfiyyəti müzakirə olunmur. Yüksək olmalıdır, hamısı budur. Bunu nəzərdən keçirərkən, kodlaşdırıcının pis əhval-ruhiyyəsi və ya çox sıx son tarixlər (oh, bu son tarixlər!) kimi bəhanələr qəbuledilməzdir. Proqram təminatının inkişafının ən vacib aspektlərindən biri proqramı elə tərtib etməkdir ki, gələcəkdə onu saxlamaq və dəyişdirmək asan olsun (salam, OOP!). Bu gün demək olar ki, bütün proqram təminatı dəyişdirilə bilər, çox vaxt bu proses hətta istifadəçinin iştirakı olmadan baş verir və ya istifadəçidən “proqramınız yeniləndi, OK və ya Təxirə salın”dan başqa heç nə tələb etmir. Təbii ki, istifadəçilərin tətbiqlərdən yeni funksiyalar tələb etmək hüququ var (xüsusilə söhbət Java-da yazılmış uzunmüddətli korporativ proqram təminatından və ya illərlə oynana bilən onlayn oyunlardan gedirsə).
Java proqramlaşdırması haqqında daha çox bilmək istəyirsiniz? Java Developer qrupuna qoşulun !
Kod parçası özlüyündə çətin ki, faydalı adlandırıla bilər. Proqram təminatının faydalı funksionallığı müxtəlif proqram hissələrinin bir-biri ilə əlaqə saxladığı, məlumat mübadiləsi apardığı və verilənlərin və interfeyslərin istifadəçilərə təqdim edilməsi vəzifəsini yerinə yetirmək üçün birlikdə işlədiyi yerdə başlayır.
Proqram Mühəndisi kimdir?  Proqram Mühəndisliyi VS
Proqramlar bu məqamlar nəzərə alınmaqla tərtib edilməlidir! Onlar hansı mesajları alırlar? Hansı hadisələr izlənilir? Doğrulama və avtorizasiya necə baş verir? Yaxşı bir proqramın digər eyni dərəcədə vacib əlaməti, tətbiqin keçdiyi testlərin sayı və ya hətta yaxşı test əhatəsi deyil, kodun aydınlığıdır. Sadə görünən suallar: “Məndən başqa kimsə mənim kodumu başa düşə bilərmi?”, “Mən bu kodu bu gün yazıb bir neçə həftədən sonra başa düşə biləcəyəmmi?” Proqramlaşdırmada ən çətin iki şey haqqında məşhur bir sitat belə deyir:

"Yalnız iki çətin şey var: önbelleğin etibarsızlaşdırılması və obyektin adlandırılması"

- Fil Karlton.

Kod oxunaqlılığı ümumi hesab ediləndən daha vacibdir. Təəssüf ki, kodun aydınlığı üçün dəqiq ölçüləri və ya parametrləri müəyyən etmək mümkün deyil. Ümumi qəbul edilmiş dil normalarını, yaxşı proqram modellərini və inkişaf metodlarını yadda saxlamaq qismən kömək edəcəkdir. Ancaq adətən bu kifayət deyil. Zaman və təcrübə keçdikcə əsl peşəkarlar, belə demək mümkünsə, “aydınlıq hissi”, intuisiyaya bənzər bir şey inkişaf etdirirlər. Yazı metaforası burada yaxşı işləyir: çox söz bilmək qısa və mənası aydın olan bir şey yazmağa kömək etməyəcək.

“Daha qısa yazardım, amma vaxtım yox idi”.

- Mark Tven.

Səhvləri tez və asanlıqla düzəltmək bacarığı yaxşı proqram təminatının əsas xüsusiyyətidir. Proqramdakı səhvlər aydın mesajlar göndərməli və izləmək üçün mərkəzləşdirilmiş şəkildə qeyd edilməlidir. Yeni xəta haqqında məlumat verildikdə, onu düzəldəcək şəxs onu aradan qaldırmaq qabiliyyətinə malik olmalıdır. O, sistemə asanlıqla qoşulmalı, istənilən vaxt icra məlumatlarına daxil olmalı, həmçinin sistemin istənilən hissəsinin funksionallığını asanlıqla yoxlaya bilməlidir.

Ətraf mühit və sınaq

Proqram mühəndisləri proqramlar hazırlayarkən onların müxtəlif arxitekturalı kompüterlərdə və müxtəlif əməliyyat sistemlərində işləməsini təmin etmək üçün əllərindən gələni edirlər. Proqram təminatının müxtəlif qətnamələrdə və ekran istiqamətlərində işləməsi, həmçinin tələb olunandan daha çox yaddaş və emal gücünü “yeməməsi” vacibdir.
Proqram Mühəndisi kimdir?  Proqram Mühəndisliyi VS
Veb proqramlarına gəldikdə, onlar bütün əsas brauzerlərdə işləməlidirlər. Masaüstü proqramı yaradarkən onun Mac, Windows və Linux-da işə salınmasına və düzgün işləməsinə əmin olmalısınız. Yaxşı, proqram məlumatlardan asılıdır, onda proqram yavaş bir məlumat bağlantısı və ya olmaması halında da işləməlidir. Proqram təminatını yazmaq üçün mühəndislər hər cür ssenari variantlarını düşünür və onları sınaqdan keçirməyi planlaşdırırlar. Hər şey hər şeyin səhvsiz işlədiyi ideal variantı seçməklə başlayır. Daha sonra potensial problemləri sənədləşdirir və onları sınaq planına yazır. Bəzi mühəndislər bütün ehtimal olunan problemlər və səhvlər üçün ssenariləri simulyasiya edən test işi adlandırdıqları kod yazmaqla başlayırlar. Və sonra nəzərdən keçirilən variantlardan hər hansı biri ilə işləyə bilən proqram yazılır. İstedadlı proqram mühəndisinin unikal qabiliyyəti kodun necə yazılmasını bilməmək deyil, proqramın çıxış kimi tam olaraq nə etməli olduğunu və buna necə nail olmağı başa düşməkdir. Müştərinin proqram təminatına olan tələbləri natamam və bəlkə də qeyri-müəyyən olduqda, mühəndis onları düzgün qiymətləndirməli və “başa düşməlidir”.

Xərc və səmərəlilik

Bir proqram mühəndisi əksər hallarda problemi tez həll edə bilər. Əgər "bahalı" təcrübəli proqramçı işə götürməyin xərclərinizi artıracağını düşünürsünüzsə, bir daha düşünün. İşə götürülmüş proqramçı nə qədər təcrübəli olsa, o, sadə, səliqəli, etibarlı və istifadəsi asan həlli bir o qədər tez təqdim edə biləcək. Uzunmüddətli perspektivdə bu, proqram təminatının hazırlanması xərclərini mütləq azaldacaq.
Proqram Mühəndisi kimdir?  Proqram Mühəndisliyi VS
Proqramın icrası ilə bağlı xərcləri də nəzərə almaq lazımdır. İstənilən proqram hesablama resurslarından istifadə edir və onlar pulsuz deyil.
Proqram təminatı mühəndisinin işi hesablama resurslarından lazımsız yerə istifadə etməyən səmərəli kod yazmaqdır.
Məsələn, tez-tez əldə edilən məlumatların keşləşdirilməsi istənilən nəticəni əldə etmək üçün istifadə edilən mümkün strategiyalardan biridir. Ancaq bu, proqramı daha sürətli və daha səmərəli edə biləcək yüzlərlə vasitə və həllərdən yalnız biridir. Təcrübəsiz bir proqramçı sizə ucuz həll yolu təqdim edə bilər, lakin belə bir həlldən istifadə son nəticədə sizə və müştərilərinizə ilk növbədə effektiv həll yolu yaradan təcrübəli tərtibatçı ilə işlədiyinizdən qat-qat baha başa gələcək.

İstifadəçi təcrübəsinə diqqət yetirin

Yaxşı bir proqramçı İstifadəçi Təcrübəsini (UX) nəzərə alaraq inkişaf edir. İnsan-maşın qarşılıqlı əlaqəsi sonsuz araşdırma və həll yolları olan bir mövzudur. Nə qədər çox həll yolu tətbiq edilsə, proqram bir o qədər yaxşı nəticələnməlidir. Bu istiqamətin nə olduğunu başa düşmək üçün bir neçə nümunə var:
  • E-poçt kimi məlumat daxiletmə formalarını tərtib edərkən, yaxşı bir proqram e-poçt ünvanının vəziyyətinə məhəl qoymamalıdır. E-poçt ünvanı kiçik hərflərlə unikal olduğu üçün CAPSLOCK düyməsi sıxılırsa, o, xəta yaratmamalıdır. Proqram yeni e-poçt ünvanını giriş kimi qəbul edərsə, istifadəçini səhv ünvan formatından istifadə etdiyi barədə xəbərdar etmək üçün giriş prosesinin əvvəlində onu yoxlayın. Bu həllə həm çatışmayan “@” işarəsi kimi aşkar yoxlamalar, həm də “gmail.ocm” kimi simvolların səhv sırasını yoxlamaq kimi o qədər də açıq olmayan yoxlamalar daxildir.

  • İstifadəçi bəzi hərəkətləri yerinə yetirmək üçün yönləndirildikdə, yaxşı proqram onun hazırkı vəziyyətini xatırlamalı və işini bitirdikdən sonra onu geri qaytarmalıdır. Yaxşı bir proqram istifadəçi tərəfindən artıq ötürülən məlumatları da yadda saxlamalıdır ki, bu da onunla sonrakı qarşılıqlı əlaqə üçün vacibdir.

    Deyək ki, siz Expedia-da Qonaq olaraq hava səyahəti axtarırsınız. Daha sonra hesab yaratmağa qərar verirsiniz. Tətbiq bütün əvvəlki axtarışlarınızı yeni hesabda saxlamalı və siz onlara digər cihazlardan daxil ola bilməlisiniz.


  • Proqram Mühəndisi kimdir?  Proqram Mühəndisliyi VS
  • Yaxşı bir proqram istifadəçi davranışı ssenariləri nəzərə alınmaqla hazırlanmışdır. Siz sadəcə olaraq “belə” əsasda yeni funksiyalar əlavə etmək lazım deyil; özünüzü istifadəçinin yerinə qoyun. Bir gün təyyarə biletləri bron edirdim və tez-tez uçanların nömrəmi qeyd etməyi unutdum. Təsdiq aldıqdan sonra endirim əldə etmək üçün aviaşirkətin saytına daxil olmaq və onu əlavə etmək qərarına gəldim. Bunu necə edəcəyimi anlamaq üçün 10 dəqiqə saytla məşğul oldum. Tətbiq o qədər anlaşılmaz idi ki, mən sadəcə lazım olanı tapmaq üçün saytın müxtəlif səhifələrində məqsədsizcə dolaşdım. Sonradan bir neçə dəfə artıq düzgün səhifəyə düşdüyümü kəşf etdim, amma bunu başa düşmədim, çünki mənə lazım olan sahə nəhəng formanın digər oxşar sahələri arasında itirildi.

    Məlum oldu ki, səfər məlumatını redaktə etmək üçün formanın iyirmiyə yaxın sətrini sürüşdürməli, loyallıq kartı nömrəsini və telefon nömrəsini daxil etməliyəm, onsuz formanı yoxlamaya göndərmək mümkün deyil. Bu, istifadəçinin onunla nə qədər rahat olacağını düşünmədən hazırlanmış bir proqram nümunəsidir.

Etibarlılıq, təhlükəsizlik və təhlükəsizlik

Fikrimcə, peşəkar proqram tərtibatçısı ilə həvəskar arasındakı ən mühüm fərq proqramın yaradılması zamanı onun etibarlılığı, təhlükəsizliyi və təhlükəsizliyi kimi parametrlərin nəzərə alınmasıdır.
Əsl peşəkar bilir ki, öz həllinin təhlükəsizliyinə və təhlükəsizliyinə cavabdehdir.
Proqramın hissələri yanlış daxiletmə, yanlış vəziyyətlər və yanlış qarşılıqlı əlaqəyə dözümlü olmalıdır. Bunu tətbiq etmək həqiqətən çox çətindir və proqram səhvləri səbəbindən insanların ölməsi hekayələrini eşitməyimizin əsas səbəbidir. İstifadəçilər proqrama səhv məlumat daxil ediblər, daxil edirlər və daxil etməyə davam edəcəklər. Bu fakt kimi qəbul edilməlidir. Üstəlik, bəziləri tətbiqi pozmaq və mövcud resurslara çatmaq məqsədi ilə bunu qəsdən edəcəklər.
Proqram Mühəndisi kimdir?  Proqram Mühəndisliyi VS
Budur real həyatdan bir nümunə: Equifax məlumatlarının son pozulmasına görə məsuliyyət daşıdığı iddia edilən şəxs, ictimaiyyətə təqdim edilən bütün proqram məhsullarında pis və zərərli girişlərə müqavimət göstərmək üçün həllər hazırlamaqdan ibarət olan vəzifə öhdəliklərini yerinə yetirməməkdə günahlandırılır. İnformasiya təhlükəsizliyi ilə bağlı insidentlər təkcə yanlış və zərərli daxiletmə deyil, həm də yanlış daxil edilmiş məlumatlarla əlaqədardır. Əgər istifadəçi parolunu unutmuşdursa, onu neçə dəfə daxil etməyə cəhd edə bilər? Bundan sonra onu bloklayacaqsınız? Başqası onun hesabını bloklamağa çalışarsa nə olacaq? İstifadəçi öz etimadnamələrini şifrələnməmiş məlumat kanalı üzərindən ötürə bilərmi? Giriş sorğusu qeyri-adi yerdən gəlsə nə etməli? Giriş cəhdi avtomatik olaraq görünsə, nə edəcəksiniz? İstifadəçilərinizi saytlararası skriptdən, saytlararası sorğu saxtakarlığından və ümumi fişinqdən qorumaq üçün nə etmisiniz? Serverlərinizə DDoS hücumu zamanı ehtiyat strategiyanız varmı? Bu suallar yalnız nəzərə alınmalı olan bəzi məsələləri vurğulayır. Qorunan proqram vacib məlumatları mətn şəklində saxlamır. Onu mürəkkəb birtərəfli şifrə ilə qoruyur (şifrələmək asan, lakin açar olmadan şifrəni açmaq demək olar ki, qeyri-mümkündür). Proqramın sındırılması halında bunlar ehtiyat tədbirlərdir. Hakerlər onlar üçün faydasız olan şifrələnmiş məlumatları kəşf edəcəklər. Ən yaxşı proqramlarda belə gözlənilməz problemlər yaranır. Onların meydana gəlməsinə hazır olmayan bir proqramçı çətin ki, peşəkar adlandırıla bilər. Gözlənilməz davranış gözləməyənə qədər o, mühəndis deyil. O, “təhlükəsiz proqramların müəllifidir”. Proqramlardakı səhvlər həmişə aşkar olmur. Məlum səhvləri qabaqcadan görmək və qarşısını almaq üçün intellektual imkanlarımız məhduddur. Buna görə proqram mühəndisləri düzgün və təhlükəsiz proqram təminatı yazmaq üçün yaxşı alətlərin vacibliyini başa düşürlər.

Tələb olunan Alətlər

Şübhə yoxdur ki, bizim fərqli və yaxşı inkişaf vasitələrinə ehtiyacımız var. Onların rolu tez-tez qiymətləndirilmir, lakin əslində onlar çox vaxt və səyə qənaət edir, bəzi vəzifələri böyüklük sırasına görə sadələşdirirlər. Təsəvvür edin ki, yerləşdirmə üçün hələ də faylları FTP vasitəsilə yükləməlisinizmi, belə desək, köhnə üsulla. Chrome DevTools olmadan şəbəkə və performans problemlərinin aradan qaldırılmasını təsəvvür edin! Bu günlərdə ESlit və Prettier olmadan JavaScript kodunu yazmaq nə qədər səmərəsiz olardı!
Proqram Mühəndisi kimdir?  Proqram Mühəndisliyi VS
Kod yazarkən əks əlaqə vaxtını azaldan hər hansı bir vasitə alqışlanmalıdır. Əvvəllər mənə tanış olmayan, lakin həqiqətən faydalı və təsirli bir vasitə tapdığımda, yalnız o xoşbəxt andan əvvəl istifadə etmədiyimə görə təəssüflənirəm.
Daha yaxşı və daha müasir alətlər sizə daha yaxşı proqramçı olmağa kömək edəcək. Onları tapın, istifadə edin, qiymətləndirin və əgər bacarırsınızsa, təkmilləşdirin. Və eyni şeyə qapılmayın: kim bilir, bəlkə yeni alətlə bir dəfə quraşdırmaq və öyrənmək üçün vaxt sərf edəcəksiniz, sonra isə problemləri dəfələrlə daha sürətli həll edəcəksiniz?

Proqram mühəndisliyinin təkamülü

Heç kim proqram mühəndisliyini iki ay, altı ay, hətta bir ilə öyrənə bilməz. Kursda, universitetdə və ya təlim düşərgəsində sizə proqram mühəndisi olmaq öyrədilməyəcək. Mən son iyirmi ildən artıqdır ki, oxuyuram və indi də oxumağa davam edirəm. Mən yalnız on il ərzində minlərlə istifadəçinin istifadə etdiyi proqramları öyrənib inkişaf etdirdikdən, yaradaraq onlara qulluq etdikdən sonra rahatlıqla özümü təcrübəli proqramçı adlandıra bildim. Proqram mühəndisliyi hər kəs üçün deyil, lakin hər kəs öz problemlərini kompüterdən istifadə edərək həll etməyi öyrənməlidir. Sadə proqramlar yazmağı öyrənə bilirsinizsə, etməlisiniz. Əgər siz ictimaiyyətə açıq proqram təminatından istifadə etməyi öyrənə bilirsinizsə, bunu etməlisiniz. Əgər açıq mənbə proqram təminatından istifadə etməyi öyrənə və onu özünüz üçün fərdiləşdirə bilsəniz, super gücə sahibsiniz! Hər gün tərtibatçılara yeni problemlər, yeni problemlər gətirir, buna görə də proqram mühəndisliyi lazımdır. Bu peşənin əsas vəzifəsi proqram təminatı yaratmaqdır ki, adi bir insan uzun illər bununla məşğul olmasın. Beləliklə, proqramlarla qarşılıqlı əlaqə yaratmaq üçün uzun araşdırmalara ehtiyac yoxdur. Bununla belə, proqram mühəndisləri daim daha mürəkkəb məlum problemləri həll edə biləcək daha yaxşı alətlər yaratmaq haqqında düşünür və yeni problemlərin mümkün qədər nadir hallarda ortaya çıxmasını təmin etmək üçün mümkün olan hər şeyi edirlər.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION