Full Stack

Yaxshi va yomon kodlar: misollar bilan

Dasturchi boʻlmaganlar ham tushunadigan darajada izohladik. Yaxshi va yomon kodlarni rasm, izohlar bilan tushuntirdik. Maqolani oʻqib chiqing.

Men qachondir, qayerdadir quyidagicha mazmunda sitata oʻqigandim:

Zamonaviy dunyoda koʻpchilik odamlarning hayoti dasturiy taʼminot bilan bogʻliq. Yirik tijoriy samolyotlarda parvoz tizimlarini boshqaradigan dasturiy taʼminot ishlab chiqish sohasi deyarli tartibga solinmagan. Istalgan odam mustaqil ravishda dasturlashni oʻrganib, dasturiy taʼminot ishlab chiquvchisi boʻlishi mumkin. Shuningdek, ushbu sohada boshqa yuqori tavakkalli kasblar: osmonoʻpar binolar arxitekturasi va neyroxirurgiya kabilarda boʻlganidek sertifikatlar yoki talablar mavjud emas. Bu xavfli darajada tartibga keltirilmagan soha. Chunki bir necha satrgina yomon ishlangan kod vaziyatga bogʻliq boʻlgan holda bir hayotning yoʻqotilishiga olib kelishi mumkin.

Eslashimcha, bu qandaydir ommaviy nashrda chiqqan edi. Maqolaning sarlavhasi “Yomon koddan ehtiyot boʻling, u sizni oʻldirishi mumkin, shoshilmang, kuting, u koʻzga koʻrinmaydi, shuning uchun undan bezovta boʻlmang!” edi. Bu obunachilar uchun tasalli beruvchi xabar, shunday emasmi? Ortga nazar tashlaydigan boʻlsak, ushbu maqoladan koʻzlangan maqsad kundan kunga atrofimizda koʻpayib borayotgan samolyotlar, poyezdlar va oʻzini-oʻzi boshqaradigan mashinalarda yashirin tarzda mavjud boʻlgan “yomon kod”ni shov-shuvli tasvirlab berish va shu tariqa obunachilarni koʻpaytirishga urinish boʻlganga oʻxshaydi.

Xoʻsh, oddiy til bilan aytganda “yomon kod” qanday boʻladi?

Men kuniga taxminan besh soat davomida kod yozadigan, uni koʻrib chiqadigan va qayta ishlaydigan (yaʼni qisqaroq va foydalanishga yaroqli koʻrinishda) inson sifatida kod nima ekanini bilaman (va yomon kod qanaqa ekanini ham bilaman, ishonavering). Baʼzida koʻpchilik odamlar kod oʻzi nima ekanini bilmasligini unutib qoʻyaman.

Bunday odamlarning “Siz kodlovchisiz, oʻzi nima ish qilasiz?” qabilidagi savoliga quyidagicha javob beraman:

Men turli xil usullarda va konfiguratsiyalarda ochilib yopiladigan kichik eshiklardan iborat mayda toʻplamlar yarataman. Eshiklar ochiq boʻlganda elektronlar kirishi mumkin boʻladi. Yopiq boʻlganda esa elektronlar bloklanadi. Eshiklar qoʻlda qurishga juda kichiklik qilgani uchun ularni kompyuterimda yaratishimga toʻgʻri keladi. Kompyuterimga yozib kiritgan soʻzlarimga bogʻliq boʻlgan holda u mening nomimdan shunday kichik eshiklarning har xil turlarini ishlab chiqadi.

Shuni unutmangki, yuqoridagi javobda aytilganidek, dasturiy ta’minot ishlab chiquvchilar, kodlovchilar va dasturchilar aslida fizik mavjud bo‘lgan, ammo ko‘z ilg‘amas darajadagi kichik narsalarni yaratadi (buni kichik eshiklar yig‘indisi yoki to‘plami sifatida tasavvur qilish mumkin). Bu o‘z-o‘zidan g‘ayrioddiy holat. Lekin agar siz buni tasavvur qila olsangiz, “kodlash” nima ekanini tushunishga erishdingiz. Tabriklayman! Endi esa ushbu bo‘lim sarlavhasidagi savolga qaytaylik – “Yomon kod” nima o‘zi?

Kichik eshiklarning mayda toʻplamlari analogiyasiga amal qilgan holda aytishim mumkin. Yomon kod sizda haddan tashqari ko‘p eshiklar borligini va ular keraksiz darajada takrorlanuvchi yoki murakkab tarzda joylashtirilganini anglatadi.

Kirish eshiklariga oʻxshatib tasvirlash yoki tushuntirib berish qiyin boʻlgani uchun shu oʻrinda men quyida yozilgan va tasvirlanganidek yangi bir oʻxshashlikni taqdim etmoqchiman.

Mijoz: menga burama tutqich yasab bering!

Aytaylik, burama tutqich yasamoqchisiz. Yaʼni boshqa bir dastakni uzoqroq aylantiradigan buraluvchi bir tutqich. Mahsulotga qoʻyilgan talablar quyida keltirilgan. Bitta tugmani aylantirganingizda undan uzoqdagi boshqasi ham aylanadi:

Bu bizga kerak boʻlgan, boshqa tugmani aylantiradigan buragich tizimi.

Yomon kod faqat qo‘l ostidagi muammoni o‘ylab, eng oson yechimni taklif etadi: yarim egiluvchan sterjen bilan bog‘langan tutqich va uni aylantiruvchi moslama. Dastlabki bosqichda yomon kod Okkam ustara mukofotini qo‘lga kiritadi. Yaxshi kod esa avvaliga ortiqcha harakat bo‘lib tuyuladi: rezina tasma hamda ikkita g‘ildirakdan foydalaniladi.

Yomon kodning asosiy muddaosi — bir nechtagina harakatlantiruvchi qismlar bilan oddiylikka erishish.


Talab oʻzgardi! Tugmani qayta oʻrnatish kerak!

Rivojlanish jarayonida doim bo‘lgani kabi ma’lum bir nuqtada mijozning talabi o‘zgaradi. Bizning bu misolimizda mijoz endi quyida ko‘rsatilganidek dastlabki tutqichdan oldinda va yon tomonida joylashgan boshqa bir tutqichni ham aylantira oladigan tutqich buragichini xohlayapti:

Voy! Mahsulot talabi oʻzgardi!


Endi kod yomon boʻlsa, bir nechta noto‘g‘ri biriktirilgan qismlarni qo‘shishga majbur bo‘linadi. Bu esa butun tizimni yanada mo‘rt va ishdan chiqishga moyil qiladi. Yaxshi kod esa yangi talablar paydo bo‘lganda faqat ozgina tuzatish talab qiladi. Muammoni hal qilish uchun shunchaki uzunroq rezina tasma ishlatish bilan cheklanadi.

Natijada yomon kod bazoʻr turgan tarkibiy qismlar jamlanmasiga aylandi...

Talab oʻzgardi! Tutqich sekinroq buralishi kerak!

Mijoz fikri yana oʻzgardi, endi u tugmachalar turli tezlikda aylanishi kerak degan qarorga keldi. Kirish tugmachasining ozgina buralishi unga ulangan tugmachaning katta miqdorda aylanishiga olib kelishi kerak.

Ushbu yangi talabni hisobga oladigan boʻlsak, yomon kod tizimga yanayam koʻproq komponentlar qoʻshishi kerak. Bular esa uni yanada murakkablashtiradi xolos. Boshqa tomondan esa yaxshi kod yengil tuzatish — ulangan tugmacha tomonda sal kattaroq gʻildirak ishlatishni talab qildi xolos:

Ikkita kiritma va g‘alati shakldagi tayoqcha? Ey yomon kod, seni kim saqlab turibdi?

Oʻxshashlik borasida soʻnggi soʻz: “Xoʻsh, nima?”

Yuqorida koʻrsatilganidek yaxshi kod koʻpincha talablar oddiy boʻlib turgan payti ortiqcha ishday tuyuladi. Lekin keyinroq mijoz talablari kuchayganidan (ular har doim shunday qiladi) keyin u, albatta, ish beradi. Boshqacha qilib aytganda, u standartga moslashadi va yaxshi tomonga oʻzgaradi. Lekin yomon kod boshida oddiy muammolar uchun sodda va zoʻr yechimdek tuyuladi. Keyinroq tizim oʻzgarganda yoki murakkablik darajasi oshganda u haqiqiy dahshatli tushga aylanadi.

Lekin siz, ehtimol, shunday o‘ylayotgandirsiz: “Yaxshi, yuqorida tasvirlangan ikki tizim ham bir xil natijaga olib keladi-ku, tutqichni aylantiruvchi har ikki holatda ham muvaffaqiyatli ishlamoqda”.

Ha, bu toʻgʻri, u yakka va havaskor loyihalar uchun yaxshi. Men oʻn ming qatorlab yomon kodlar (Javascriptʼda yozilgan edi) yozganimni Xudo biladi. Lekin hammasi joyida edi, chunki men ularni hech qachon saqlab qoʻyishim yoki ularga biror narsa qoʻshishim kerak boʻlmagan (2020-yildagi hobbi sifatida yurgizadigan saytlarimdan biri boʻlgan www.python-gui-builder.com uchun yozgan ushbu 2 422 qator sors kodni koʻrib chiqishingiz mumkin). Bu kodni ishga tushirdim va deploy qildim, keyin hech qachon unga qaramadim.

Biroq professional darajadagi kodlashning mohiyati birgalikda olib boriladigan saʼy-harakatlardir. Siz yozgan har qanday kod, shubhasiz, hozir yoki kelajakda boshqa kodlovchilar tomonidan doimiy ravishda oʻqiladi va qayta tahrirlanadi. Agar ana shunday kodlar iloji boricha tushunishga oson qilib yozilgan boʻlsa, kodlovchilarning ish kuni ancha oson va samarali boʻladi.

  1. “Mana bu yerda bizning buragich tutqichimiz, u 2 ta gʻildirak va 1 ta remendan iborat” yoki

  2. “Mana bu bogʻlovchi tayoqchani tutib turuvchi qoʻshimcha kiritma. Bu esa bogʻlovchi tayoqcha va siz uning uchini mana bu kiritmadagi kichkina teshikka kirgizishingiz kerak...”

Senior dasturchingizdan kodlar bazasini oʻz zimmasiga qabul qilib olayotgan junior dasturchi sifatida qaysi birini eshitishni istardingiz? :)


Manba: 
What is good/bad code? An illustrated example for non-programmers

Mohirdev Telegram

Telegram kanalimizga obuna bo’lishni unutmang

Obuna bo'lish
https://mohirdevbucket.s3.eu-central-1.amazonaws.com/practicum/images/8a370386-5cad-4b37-bc06-253636076498.original.png

medium.com