Miras Kodunu necə idarə etmək barədə məsləhət

Iconic APPLE MACINTOSH 128K

Müddəti "miras kodu" ortaya çıxdıqda, adətən deyilir və ya hörmətsizlik hiss olunur. Google-da "miras code memes" üçün ilkin axtarış, saçlarını yırtan, qıvrılmış və ya çox məyus olan yüzlərlə və yüzlərlə görüntü makrosunu ortaya çıxarır.

5 ay əvvəl bir məhsula əsaslanan bir şirkətdə bir proqram tərtibatçısı kimi işə başlamışam, köhnə kodun nə olduğunu və ya onunla işləməyin nədən qaynaqlandığını bilmirdim.

Dördüncü ayımda, iki və ya üç il əvvəl iş yoldaşlarımdan biri tərəfindən tikilmiş bir tətbiqə modal bir keçid filtri əlavə etməyimi istədi. Kifayət qədər asan görünürdü; Son üç ilin əksər hissəsini standart yığını cəlb edən inanılmaz dərəcədə mürəkkəb bir tətbiq üzərində işləmiş olardım: TypeScript / React / Angular / Dotnet. Artıq bir çox unikal problemləri həll etmişdim və kodlama qabiliyyətimə arxayın olaraq sorğu parametrlərini ötürmək üçün sadə bir modal etmək üçün kifayət qədər əmin idim.

Güman etdiyiniz kimi, bu, elə də sadə deyildi. Bəs niyə?

Köhnə kod nədir və nə ilə məşğul olmaq çətin ola bilər

Köhnə kod, artıq dəstəklənməyən və ya daha yeni bir versiya ilə əvəzlənmiş köhnə texnologiyalardan istifadə edən başqa bir geliştiricidən və ya komandadan miras alınmış koddur. Bir çox proqramçı "kod yazıldıqdan sonra köhnə kod halına gəlir" deyirlər. "Müntəzəm" kod və köhnə kod arasındakı funksional fərq sadəcə işlədiyinizə nisbətən fərqli konvensiyalara malik olması ola bilər.

Mənim vəziyyətimdə, tətbiq əsas C # kodundan çox XAML və T4 Mətn Şablonundan istifadə etdi və adət etdiyim qədər güclü yazılmadı. Bu, məlumatların quruluşunu başa düşməyimi bir qədər çətinləşdirdi. Heç bir növ, iş vaxtı TypeErrors-a daha tez-tez daxil olduğumu nəzərdə tutmurdu ki, bu da böyük bir xüsusiyyət yazarkən diskussiya etmək çətin ola bilər. Bunun üzərinə, tətbiq komponent kitabxanasının uyğun bir versiyası ilə barışmaq üçün lazım olan dotnet-in daha köhnə bir versiyasını istifadə etdi.

Miras kodunu irəliləmə və rasionallıq hissi ilə necə idarə edəcəyinizi öyrənmədən əvvəl, miras kodunun pis olmadığını və miras bir layihə üzərində işləməyin dəhşətli olmaması lazım olduğunu bir mübahisəyə əlavə etmək istəyirəm. Əksinə, miras kodu üzərində işləmək mənə çevik, səbirli olmağı və hər şeydən əvvəl təcrübəni mənə yeni bir perspektivlə problemləri yeni bir kontekstdə həll etmək şansı verdi.

Əslində, bu, yuxarıda göstərilən kod bazası ilə işə başlamamışdan əvvəl olduğumdan daha yaxşı bir inkişaf etdirici etdi və inşallah, miras layihəniz sizə bir şey də öyrədə bilər.

Bir texniki səviyyədə miras kodu ilə necə davranmaq olar

Mümkün olduqda sənədləri və kod şərhlərini oxuyun

Mükəmməl bir dünyada hər kod bazasında layihənin necə işlədiyini qısa izahatlar, orijinal müəllifin dəqiq məntiqini izah edən kod şərhləri və bütün tətbiq mükəmməl məna kəsb edən möhkəm bir README var. Ancaq bu nadir hallarda olur. Bir çox README layihələr inkişaf etdikcə yenilənmir, insanlar şərh yazmağı unuturlar, məntiqlərinin yeni bir geliştirici üçün açıq olduğunu zənn edirlər və ya sadəcə bu işlərə qayğı göstərmək üçün vaxt itirirlər.

Kod bazasına bütövlükdə baxın

Əgər itirdiyiniz və haradan başlamaq lazım olduğunu bilmirsinizsə, özünüzə bu sualları verin:

  • Tətbiq məqsədi nədir?
  • Tətbiq vasitəsilə məlumat necə axır?
  • Xüsusiyyətiniz tətbiqə necə uyğun gəlir?

Böyük bir şəkil hissi əldə edə bilsəniz, problemi necə həll edəcəyinizi anlamaq daha asandır. Bəlkə yeni bir fayl yaratmaq və yeni bir nəzarətçi yaratmaq lazımdır. Bəlkə bir kommunal funksiya yazmaq və sınamaq lazımdır. Nə olursa olsun, probleminizin daha geniş kontekstini başa düşmək həll yolu tapmaq üçün yaxşı bir addımdır.

Mümkün olduqda tətbiqini əl ilə və vahid testləri ilə sınayın

Yeni bir xüsusiyyət əlavə edərkən tətbiqetməni müvəqqəti olaraq pozmaq, hansı səviyyəli geliştiriciniz olmağınızdan asılı olmayaraq qaçılmazdır. Bu normal və gözləniləndir, xüsusən iş üçün yeni olsanız, köhnə kod bazasında tanımadığı bir yığın və ya ikisinin birləşməsiylə işləyəcəksiniz.

Bu fasilələrin uzun müddətli problemlərə çevrilməsinin qarşısını almağın ən yaxşı yolu, həm vahid testləri, həm də əl testləri ilə tətbiqinizi hərtərəfli sınamaqdır. Bu testlərin yerində olması və onlardan hansı növ əhatə dairəsi aldığını bilmək sizə və gələcək inkişaf etdiricilərə çox vaxt qazandıracaqdır. Ayrıca, ciddi testlər tətbiqetməni daha da genişləndirir və eyni zamanda testləriniz təmiz olduqda bir az dopamin tələsik verir. Təəssüf ki, mənim ssenarimdə məhdud vahid test halları var

Əl testləri üçün bir test matrisini hazırlamaq və sənədin gələcək inkişaf etdiricilər üçün əlçatan olduğundan əmin olmaq lazımdır. Matris üçün bir sıra tədbirlər, gözlənilən davranış, sınadığınız zaman gerçək davranış və digər vacib detalları, məsələn, müəyyənləşdirmək istəyəcəksiniz:

Kömək istəmək

Layihənizi iş yerinizdə cari və ya keçmiş bir işçi tərəfindən yazıldığını güman etsəniz, başqası, ehtimal ki, tətbiqdə nə baş verdiyini bilir və ya heç olmasa sizi incitməyiniz üçün kifayət qədər bilir. Qürurunuzu udmağı və başqasından soruşmağı öyrənmək bəziləri üçün narahat addımdır, ancaq inkişaf etdirici kimi böyüməyiniz üçün zəruri bir addımdır və bəlkə də iş yoldaşınız sizə bir neçə yeni fənd verə bilər.

Vaxtınızdan (və onlardan) səmərəli istifadə etməyin yaxşı bir yolu məlumatlı sualların formalaşdırılmasıdır. Şifrə bazasına bütövlükdə baxmağa və anlayışınızdakı boşluqları anlamağa çalışın. Probleminizin nə olduğunu daha yaxşı başa düşmələri üçün onlara nəinki kömək edəcək, əksinə problemi əvvəlcə həll etmək üçün təşəbbüs göstərdiyinizi göstərir.

Zərərlərinizi nə vaxt azaltacağınızı bilin

Ayağını qapıya basdırmaq üçün çox vaxt sərf edirsinizsə və yuxarıdakı addımları sınadıqdan sonra funksiyanı həyata keçirmək üçün ciddi bir addım atmamış olsanız, xüsusiyyətinizin ətrafındakı kodu yenidən düzəltməyə dəyər ola bilər. Çox asanlıqla imtina etməyin, eyni zamanda son tarixlərinizin və layihə menecerinizin sizdən nə gözlədiyini unutmayın.

Dedi ki, bu şəkildə davam etmək üçün çatışmazlıqlar var:

  • Yenidən yazma kodu səhvləri tanıda bilər, baxmayaraq ki, bu, yaxşı vahid sınağı ilə bir qədər pozula bilər.
  • Yenidən yazma kodu gizli işləməyi aradan qaldıra bilər, baxmayaraq ki, bu da yaxşı vahid testləri ilə pozula bilər.
  • Vaxt üçün sıxılmış olsanız, xüsusiyyətinizə əlavə olaraq xüsusiyyətinizdən kənarda kod yazmaq yalnız ətrafı qurmaqdan daha çox vaxt apara bilər.

Ümumiyyətlə, ən yaxşı qərarınızı istifadə edin. Hər iki seçim üçün müsbət və mənfi cəhətlər var və hamısı sizin vəziyyətinizdən və layihə büdcənizdən asılıdır.

Bir psixoloji səviyyədə miras kodu ilə necə davranmaq olar

Artıq miras kodu ilə işləməyin texniki tərəflərini izah etdik, yumşaq bacarıqlarımızdan istifadə edərək bu məsələdə necə davranacağımız barədə danışaq. Axı, inkişaf etdiricilər yalnız robotları kodlaşdırmaqla deyil, yaradıcılıq və müəlliflik tələb edən layihələrdə çətin problemlərlə məşğul olmaq təkcə sizin üçün deyil, həmkarlarınız üçün də emosional olaraq vergi verə bilər.

Təvazökar və xeyirxah olun

Bu, mən daha çox təcrübə etməli olduğumu etiraf edəcəyim bir şeydir. Filtr modal layihəsinə ilk təyin olunduqda kodun əsl müəllifi məndən 15 fut uzaqlıqda oturarkən kodun ləzzətli və bəyənilməməsi ilə necə davranacağım barədə kifayət qədər səsli oldum. Şərhlərimi zarafat etmək üçün nəzərdə tutmuşdum, amma həssaslıqla, təkəbbürlü və incik olduğumu və daha çox rəğbət göstərməli olduğumu başa düşürəm.

Müəllifi tənqid etməyə başlamazdan əvvəl və ya onlar haqqında ən pisini düşünməməzdən əvvəl nəzərə almalı olduğunuz miras kodun "off" baxmasına səbəb ola biləcək bir çox amil var (Bu təməl atribut səhvidir.)

Orijinal müəllifin kodu necə yazdıqları üçün səbəbləri ola bilər.

Vaxt məhdudiyyəti və texnoloji məhdudiyyətlər bir insanın işləyən, lakin ən yaxşı konvensiyaya sahib olmayan kodu yazmasına səbəb ola bilər. Özünüzü kifayət qədər vaxt, köhnəlmiş alətlər və bir mil uzunluğunda bir siyahı ilə bir vəziyyətə gətirdiyinizi təsəvvür etsəniz, bəlkə də ən yaxşı kodu yazmazsınız!

Konvensiyalar dəyişir.

Köhnə layihələrdə, kod üçün konvensiya, simli elan etmək üçün tək tirnoqlardan istifadə edir və iki boşluq bir nişana bərabər idi. Tək bir faylın içərisində çox sayda kiçik sinif var. Mövcud konvensiyamızda ikitərəfli sitatlardan və dörd boşluqdan istifadə edirik və hər Sinif, nə qədər kiçik olursa olsun, Models qovluğunda öz .csfile-də yaşayır. Bir neçə ildən sonra əminəm ki, bu da dəyişəcək.

Bütün kodlar sonda köhnə hala gəlir

Bu yenidən əvvəlki nöqtəyə bağlanır: kodunuz sonda köhnə olacaqdır. Yetkinlik pilləkənlərini yuxarı qaldırarkən yeni inkişaf etdiricilər işə götürüləcək və köhnə kodunuzu qorumalı olacaqsınız. Təmiz, qüsursuz, DRY kodunu yaza bilərsiniz, ancaq bir şərt dəyişdikdən və ya tendensiyalar dəyişdikdən sonra, yeni inkişaf etdiricilər kodunuzu başqalarının miras kodu ilə eyni şəkildə görə bilərlər.

Kiçik uğurlarla fəxr edin

Adi konvensiyalarınızdan kənarda işləmək asan deyil; miras kodu ilə məşğul olmaq haqqında böyük xatirələrin və zarafatların səbəbi var. Əgər ana dilinizdən kənarda bir dil öyrənmisinizsə, ikinci bir dildə bir söz və ya termin unutmağın necə olduğunu hiss edirsiniz, ancaq ana dilinizdə xatırlayın və boşluğu dəyişə bilməyəcəksiniz. Müasir və miras qalmış konvensiyalar arasında dəyişiklik eyni. Bəzən rulmanları bərpa etmək üçün bir dəqiqə çəkir.

Uğurlu bir miras kodunu idarə edə bilmək üçün uyğun işləmə qabiliyyətinizi göstərirsiniz ki, bu da hazırkı işinizdə və gələcək işlərinizdə fayda gətirən vacib bir bacarıqdır. Legacy kodu bu bacarığı tətbiq etmək üçün mükəmməl oyun meydançasıdır.

Sonda

Bu vaxtı öz kod yazılarınızı inkişaf etdirmək üçün istifadə edin

Artıq köhnə kod bazasında işləmək təcrübəniz var olduğundan, alətlər və konvensiyalar baxımından nəyi sevdiyinizi və nəyi sevmədiyinizi daha yaxşı hiss etməlisiniz. Bunlar gələcək layihələrdə davam etdirə biləcəyiniz və başqalarının kodunu nəzərdən keçirmək, konstruktiv tənqid və mentorluq verməklə daha yaxşı edə biləcəyiniz şeylərdir.

İstifadəçi və gələcək geliştirici üçün tətbiqetmələr hazırlayın

Böyük sənədləşmə və kod şərhləri ilə təcrübəniz və ya sənədlər və ya kod şərhləri ilə qarşılaşmağınızdan asılı olmayaraq, həm sənədlərin, həm də şərhlərin gələcək tərtibatçılara layihəni idarə etməyə kömək edəcək güclü vasitələr olduğunu görə bilərsiniz. Hamar, işlək və quru bir tətbiq etmək istəyən ümumi bir məqsədi paylaşırsınız; sənədləri saxlamaq və məlumat kodu şərhlərini geridə qoymaq bu boşluğu aradan qaldırmaq üçün yaxşı bir yoldur.

Kodunuzun da bir gün miras qalacağını unutmayın

Bunu bir neçə dəfə qeyd etmişəm, amma kodunuzun və məntiqinizin nə qədər qurudulub təmizlənməsindən asılı olmayaraq kodunuzun da miras qalacağını bir daha vurğulamaq lazımdır.

Ən vacib götürmə çevik, təvazökar olmaq və köhnə koddan mütləq yeni tövsiyələr öyrənə bilməkdir.