O'zingiz tushunmaydigan narsani ishlab chiqishga rozi bo'lmang

O'zingiz tushunmaydigan narsani ishlab chiqishga rozi bo'lmang

2018 yil boshidan beri men jamoada etakchi/bos/etakchi ishlab chiquvchi lavozimini egallab kelaman - buni xohlaganingizcha chaqiring, lekin gap shundaki, men modullardan biri va ishlaydigan barcha ishlab chiquvchilar uchun to'liq javobgarman. tepasida. Bu lavozim menga rivojlanish jarayoniga yangicha qarash imkonini beradi, chunki men ko‘proq loyihalarda ishtirok etaman va qaror qabul qilishda faolroq ishtirok etaman. Yaqinda ushbu ikki narsa tufayli men birdan tushunish o'lchovi kod va dasturga qanchalik ta'sir qilishini tushunib etdim.

Men aytmoqchi bo'lgan narsa shundaki, kodning sifati (va yakuniy mahsulot) kodni ishlab chiqayotgan va yozayotgan odamlar nima qilayotganidan qanchalik xabardor ekanligi bilan chambarchas bog'liq.

Siz hozir shunday deb o'ylayotgandirsiz: “Rahmat, kap. Albatta, nima yozayotganingizni umuman tushunsangiz yaxshi bo'lardi. Aks holda, siz o'zboshimchalik bilan tugmachalarni bosish uchun bir guruh maymunlarni yollashingiz va uni o'zingizga qoldirishingiz mumkin. Va siz mutlaqo haqsiz. Shunga ko'ra, men siz nima qilayotganingiz haqida umumiy tasavvurga ega bo'lishingiz kerakligini tushunib etaman. Buni tushunishning nol darajasi deb atash mumkin va biz uni batafsil tahlil qilmaymiz. Biz aniq nimani tushunishingiz kerakligini va bu har kuni qabul qiladigan qarorlaringizga qanday ta'sir qilishini batafsil ko'rib chiqamiz. Agar men bu narsalarni oldindan bilganimda, bu menga juda ko'p behuda vaqt va shubhali kodni saqlab qolgan bo'lardi.

Quyida siz bitta kod qatorini ko'rmasangiz ham, men bu erda aytilganlarning barchasi yuqori sifatli, ifodali kod yozish uchun katta ahamiyatga ega ekanligiga ishonaman.

Tushunishning birinchi darajasi: Nega u ishlamayapti?

Ishlab chiquvchilar odatda bu darajaga o'z kareralarida juda erta, ba'zan hatto boshqalarning yordamisiz ham erishadilar - hech bo'lmaganda mening tajribamda. Xatolar haqida hisobot olganingizni tasavvur qiling: ilovadagi ba'zi funksiyalar ishlamayapti, uni tuzatish kerak. Qanday davom etasiz?

Standart sxema quyidagicha ko'rinadi:

  1. Muammoni keltirib chiqaradigan kod qismini toping (buni qanday qilish alohida mavzu, men uni eski kod haqidagi kitobimda yoritganman)
  2. Ushbu parchaga o'zgartirishlar kiriting
  3. Xato tuzatilganligiga va hech qanday regressiya xatosi yuz bermaganligiga ishonch hosil qiling

Endi ikkinchi nuqtaga to'xtalib o'tamiz - kodga o'zgartirishlar kiritish. Ushbu jarayonga ikkita yondashuv mavjud. Birinchisi, joriy kodda nima sodir bo'layotganini o'rganish, xatoni aniqlash va uni tuzatish. Ikkinchidan: his qilish orqali harakat qilish - shartli bayonot yoki tsiklga, aytaylik, +1 qo'shing, funktsiya kerakli stsenariyda ishlayotganligini tekshiring, keyin boshqa narsani sinab ko'ring va hokazo.

Birinchi yondashuv to'g'ri. Stiv MakKonnell o'zining Code Complete kitobida tushuntirganidek (buni men buni juda tavsiya qilaman), har safar koddagi biror narsani o'zgartirganimizda, bu dasturga qanday ta'sir qilishini ishonch bilan bashorat qilishimiz kerak. Men xotiradan iqtibos keltiraman, lekin agar xato tuzatish siz kutgandek ishlamasa, siz juda xavotirga tushishingiz va butun harakat rejangizni shubha ostiga olishingiz kerak.

Aytilganlarni umumlashtirish uchun kod sifatini pasaytirmaydigan yaxshi xato tuzatishni amalga oshirish uchun siz kodning butun tuzilishini ham, muayyan muammoning manbasini ham tushunishingiz kerak.

Tushunishning ikkinchi darajasi: Nima uchun u ishlaydi?

Bu daraja avvalgisiga qaraganda ancha kam intuitiv tarzda tushuniladi. Men hali yangi ishlab chiquvchi bo'lganimda, xo'jayinim tufayli buni o'rgandim va keyinchalik yangi kelganlarga masalaning mohiyatini qayta-qayta tushuntirdim.

Tasavvur qilaylik, siz birdaniga ikkita xato xabari oldingiz: birinchisi A stsenariysi, ikkinchisi B stsenariysi haqida. Ikkala stsenariyda ham biror narsa noto‘g‘ri sodir bo‘ladi. Shunga ko'ra, siz birinchi navbatda birinchi xatoni hal qilasiz. XNUMX-darajani tushunish uchun biz ishlab chiqqan tamoyillardan foydalanib, siz muammoga tegishli kodni chuqur o'rganasiz, nima uchun dastur A stsenariysidagidek harakat qilishini tushunasiz va kerakli natijani beradigan oqilona tuzatishlar kiritasiz. . Hammasi ajoyib ketmoqda.

Keyin siz B stsenariysiga o'tasiz. Xatoni qo'zg'atmoqchi bo'lgan holda stsenariyni takrorlaysiz, lekin hayratlanarli! - endi hamma narsa kerak bo'lganidek ishlaydi. Taxminingizni tasdiqlash uchun siz A xatosi ustida ishlaganda kiritilgan o'zgarishlarni bekor qilasiz va B xatosi yana qaytib keladi. Xatolarni tuzatish ikkala muammoni ham hal qildi. Baxtli!

Siz bunga umuman ishonmadingiz. Siz A stsenariysidagi xatoni tuzatish yo'lini o'ylab topdingiz va nima uchun u B stsenariysi uchun ishlaganini bilmaysiz. Ushbu bosqichda ikkala vazifa ham muvaffaqiyatli bajarildi deb o'ylash juda jozibali. Bu juda mantiqiy: maqsad xatolarni bartaraf etish edi, shunday emasmi? Ammo ish hali tugamadi: nima uchun sizning harakatlaringiz B stsenariysidagi xatoni tuzatganini aniqlashingiz kerak. Nima uchun? Chunki u noto'g'ri tamoyillar ustida ishlayotgan bo'lishi mumkin, keyin siz boshqa yo'l izlashingiz kerak bo'ladi. Mana shunday holatlarga bir nechta misollar:

  • Yechim barcha omillarni hisobga olgan holda B xatosiga moslashtirilmaganligi sababli, siz bilmagan holda C funktsiyasini buzgan bo'lishingiz mumkin.
  • Xuddi shu funktsiya bilan bog'liq uchinchi xato qaerdadir yashiringan bo'lishi mumkin va sizning xatolaringiz B stsenariysida tizimning to'g'ri ishlashiga bog'liq. Hozir hammasi yaxshi ko'rinadi, lekin bir kun kelib bu uchinchi xato payqab qoladi va tuzatiladi. Keyin B stsenariysida xato yana paydo bo'ladi va agar u mavjud bo'lsa yaxshi bo'ladi.

Bularning barchasi kodga betartiblik qo'shadi va bir kun kelib sizning boshingizga tushadi - ehtimol eng noaniq vaqtda. Nima uchun hamma narsa ishlayotganini tushunish uchun vaqt sarflashga majburlash uchun o'z irodangizni to'plashingiz kerak bo'ladi, lekin bunga arziydi.

Uchinchi tushunish darajasi: Nima uchun u ishlaydi?

Mening so'nggi tushunchalarim aynan shu darajaga bog'liq va agar men bu fikrga ilgari kelganimda, bu menga eng ko'p foyda keltirgan bo'lar edi.

Чтобы было понятнее, разберем на примере: ваш модуль нужно сделать совместимым с функцией X. Вы не особенно близко знакомы с функцией X, но вам сказали, что для совместимости с ней нужно использовать фреймворк F. Другие модули, которые интегрируются с X, работают именно u bilan.

Sizning kodingiz hayotining birinchi kunidan beri F ramkasi bilan umuman aloqada bo'lmagan, shuning uchun uni amalga oshirish unchalik oson bo'lmaydi. Bu modulning ayrim qismlari uchun jiddiy oqibatlarga olib keladi. Biroq, siz o'zingizni rivojlanishga tashlaysiz: siz bir necha hafta davomida kod yozish, sinovdan o'tkazish, tajriba versiyalarini chiqarish, fikr-mulohazalarni olish, regressiya xatolarini tuzatish, kutilmagan asoratlarni aniqlash, dastlab kelishilgan muddatlarga rioya qilmaslik, qo'shimcha kod yozish, test qilish, fikr-mulohazalarni olish, regressiya xatolarini tuzatish - bularning barchasi F ramkasini amalga oshirish uchun.

Va birdaniga siz to'satdan tushunasiz - yoki kimdirdan eshitasiz - ehtimol F ramkasi sizga X xususiyati bilan umuman mos kelmasligi mumkin. Balki buncha vaqt va kuch bunga mutlaqo noto'g'ri sarflangandir.

Bir marta men mas'ul bo'lgan loyiha ustida ishlayotganimda shunga o'xshash narsa yuz berdi. Nima uchun bu sodir bo'ldi? Chunki men X funksiyasi nima ekanligini va uning F ramkasi bilan qanday bog'liqligini juda kam tushunardim. Nima qilishim kerak edi? Rivojlanish vazifasini topshirgan shaxsdan boshqa modullar uchun bajarilgan ishni takrorlash yoki X funksiyasi aynan shunday qilish kerak, degan so'zni qabul qilish o'rniga, mo'ljallangan harakat yo'nalishi qanday natijaga olib kelishini aniq tushuntirishini so'rang.

Ushbu loyihaning tajribasi menga nima uchun bizdan ba'zi narsalarni qilish talab qilinayotganini aniq tushunmagunimizcha, rivojlanish jarayonini boshlashdan bosh tortishni o'rgatdi. To'g'ridan-to'g'ri rad eting. Vazifani olganingizda, birinchi turtki vaqtni behuda sarflamaslik uchun darhol uni qabul qilishdir. Ammo "biz barcha tafsilotlarni tushunmagunimizcha loyihani muzlatib qo'ying" siyosati behuda vaqtni katta hajmdagi buyurtmalar bilan kamaytirishi mumkin.

Agar ular sizga bosim o'tkazishga, ishga kirishishga majbur qilishsa ham, garchi buning mantiqiy asosini tushunmasangiz ham, qarshilik ko'rsating. Birinchidan, nima uchun sizga bunday vazifa qo'yilganligini aniqlang va bu maqsad sari to'g'ri yo'lmi yoki yo'qligini hal qiling. Men bularning barchasini qiyin yo'l bilan o'rganishim kerak edi - umid qilamanki, mening misolim buni o'qiganlarning hayotini osonlashtiradi.

Tushunishning to'rtinchi darajasi: ???

Dasturlashni o'rganish uchun har doim ko'p narsa bor va men tushunish mavzusining sirtini tirnalganimga ishonaman. Kod bilan ishlash yillari davomida yana qanday tushuncha darajalarini kashf qildingiz? Kod va dastur sifatiga ijobiy ta'sir ko'rsatgan qanday qarorlar qabul qildingiz? Qaysi qarorlar noto'g'ri bo'lib chiqdi va sizga qimmatli saboq berdi? Izohlarda tajribangizni baham ko'ring.

Manba: www.habr.com

a Izoh qo'shish