24 β Hujjatlashtirish ko'nikmasi¶
β¬ οΈ Oldingi: 23 β Texnik qaror va trade-off'lar Β· π README Β· Keyingi: 25 β CV, portfolio va GitHub profil β‘οΈ
Bu bobda: yaxshi hujjat β yaxshi muhandislikning belgisi. Kod nima qilishini, hujjat esa nega qilishini aytadi. Shu bobda nega umuman hujjat yozamizni (kelajakdagi o'zingiz, jamoa, bus factor), hujjatni to'rt turga ajratuvchi DiΓ‘taxis ramkasini (Daniele Procida), dasturchining kunlik hujjatlarini (README, runbook, ADR, API hujjati), kod izohlarining "nima emas, nega" qoidasini va yaxshi hujjat amaliyotini o'rganamiz.
Halollik / Eslatma: mukammal hujjat β afsona; hech kim birdaniga ideal hujjat yozmaydi, va siz ham yozmaysiz. Hujjat β kod kabi, doimiy parvarish talab qiladi: eskirgan hujjat ba'zan umuman hujjatsizlikdan ham zararliroq. Bu bob sizga ramka va odat beradi, lekin yaxshi yozuvchi bo'lish faqat ko'p yozish va o'quvchidan fikr olib borish bilan keladi.
Nega umuman hujjat yozamiz¶
Ko'p dasturchi hujjatni "majburiy, zerikarli ortiqcha ish" deb biladi β kod tayyor, ishlayapti, yana nima kerak? Bu qarash bitta muhim haqiqatni o'tkazib yuboradi: kod bir marta yoziladi, lekin ko'p marta o'qiladi. Va uni o'qiyotgan odam β ko'pincha siz yozgan paytdagi kontekstga ega emas. U sizning miyangizdagi "nega"ni ko'rmaydi; u faqat kodni va β agar yozgan bo'lsangiz β hujjatni ko'radi.
Hujjat aslida kimga kerakligini sanab chiqaylik β bu ro'yxat "nega yozaman?" savoliga eng yaxshi javob:
- Kelajakdagi o'zingiz. Bu eng kam kutilgan, lekin eng tez seziladigan foyda. Olti oydan keyin o'sha skriptga qaytasiz va "men buni nega shunday yozgan ekanman?" deysiz. O'sha paytdagi o'zingiz β hozirgi o'zingizga begona odam. Hujjat β kelajakdagi o'zingizga yozilgan xat.
- Jamoangiz. Siz bilgan narsa faqat sizning boshingizda qolsa, har bir hamkasb o'sha narsani bilish uchun sizni to'xtatishi kerak. Bu sizni "tirik hujjat"ga aylantiradi β chiroyli tuyuladi, lekin amalda bu sizni doimiy uzilishlar manbaiga aylantiradi va jamoani sekinlashtiradi.
- Yangi qo'shilgan a'zo (onboarding). Yangi odam loyihaga kirishda eng ko'p og'riq chekadi. Yaxshi README va onboarding qo'llanma uning birinchi haftasini bir necha kunga qisqartiradi. Hujjatning sifatini sinashning eng yaxshi usuli β yangi odamni kuzating: u qayerda qoqildi?
- Bus factor. Achchiq nomli, lekin jiddiy tushuncha: "agar bu odamni avtobus urib ketsa, loyiha to'xtaydimi?" Agar biror tizimni faqat bitta odam tushunsa, bus factor = 1 β bu jamoa uchun jiddiy xavf. Hujjat bilimni bitta boshdan jamoaga tarqatadi va bu xavfni kamaytiradi. (Bilimni jamoaga tarqatish g'oyasini 4-bobda ko'rgan edik β hujjat shuning amaliy quroli.)
Asosiy iqtisod: hujjat yozish bir martalik xarajat, o'qish esa ko'p martalik daromad. Bir marta 20 daqiqa sarflab yozasiz; o'sha hujjatni 50 kishi har biri 20 daqiqalik savol-javobsiz tushunadi. Vaqt jihatdan deyarli har doim foydali β agar hujjat haqiqatan o'qilsa.
Hujjatlashtirish β bu mohiyatan 9-bob va 10-bobda ko'rgan yozma muloqot ko'nikmasining maxsus, uzoq muddatli shakli. O'sha boblardagi "auditoriyani bil, soddalashtir, nima-nega-qanday" tamoyillari bu yerda ham asos bo'lib qoladi β faqat o'quvchi endi sizdan vaqt va makon bilan uzoqroqda turadi.
DiΓ‘taxis: hujjatni to'rt turga ajratish¶
Hujjat haqida eng keng tarqalgan xato β turli xil hujjatlarni bir-biriga aralashtirish. Misol: kimdir loyiha README'sini ochadi, "qanday boshlayman?" deb umid qiladi, lekin u yerda barcha sozlama variantlarining quruq ro'yxatini topadi. Yoki aksincha β chuqur sozlamani izlaydi, lekin "salom dunyo"ni qo'lidan ushlab o'rgatadigan darslikka duch keladi. Ikkala holatda ham hujjat bor, lekin u noto'g'ri o'quvchiga noto'g'ri shaklda yetkazilgan.
Bu muammoni tartibga soladigan eng mashhur ramka β DiΓ‘taxis (yunoncha "tartib, joylashuv"), uni texnik yozuvchi Daniele Procida ishlab chiqqan (Django jamoasidagi ishidan kelib chiqqan, keyin alohida ramka sifatida rivojlangan). DiΓ‘taxis hujjatni to'rt turga ajratadi, va har birining maqsadi va o'quvchisi boshqacha.
Ikki o'lcham bo'yicha:
- Gorizontal: o'quvchi hozir o'rganyaptimi (study) yoki ish bajaryaptimi (work)?
- Vertikal: mazmun amaliy (qadamlar, harakat) mi yoki nazariy (tushuncha, bilim)mi?
Shu ikki o'lchov to'rt kvadrat beradi:
| Tur | O'quvchi | Maqsad | Misol |
|---|---|---|---|
| O'quv qo'llanma (tutorial) | O'rganyapti | O'rgatish, ishonch berish | "Birinchi botingizni yarataylik" β qo'lidan ushlab oxirigacha |
| Amaliy qo'llanma (how-to) | Ish bajaryapti | Aniq muammoni yechish | "Loginni OAuth bilan qanday sozlash" β bilganga, retsept |
| Ma'lumotnoma (reference) | Ish bajaryapti | Aniqlik, to'liqlik | "API endpointlar ro'yxati", "config kalitlari" β quruq, tekshiriladigan |
| Tushuntirish (explanation) | O'rganyapti | Anglatish, kontekst | "Nega biz event-driven arxitekturani tanladik" |
Eng muhim saboq β bu to'rttasini bir hujjatda aralashtirmang. Darslik (tutorial) o'rtasida to'satdan barcha sozlama variantlarini sanay boshlasangiz, o'rganayotgan odamni cho'ktirib qo'yasiz. Ma'lumotnoma o'rtasida "nega bu shunday loyihalashtirilgan" deb falsafaga kirsangiz, aniq qiymat izlaganni adashtirasiz.
Diqqat: darslik (tutorial) va amaliy qo'llanma (how-to) ko'pincha aralashtiriladi, lekin ular tubdan boshqacha. Tutorial β o'rganayotgan, hech narsa bilmaydigan odam uchun; uning vazifasi β ishonch berish, "men buni qila olaman" hissi. How-to β allaqachon biladigan, aniq vazifasi bor odam uchun; u "salom" demaydi, to'g'ridan-to'g'ri retseptga o'tadi. Birini ikkinchisining o'rniga ishlatsangiz β ikkala o'quvchi ham norozi.
DiΓ‘taxisni ko'r-ko'rona qonun deb qabul qilmang β bu fikrlash vositasi. Uning eng katta foydasi shunchaki shu savolni berishga majbur qilishida: "Men hozir kim uchun, qaysi turdagi hujjat yozyapman?" Shu bitta savol ko'p chalkash hujjatni oldini oladi.
Dasturchining kunlik hujjatlari¶
DiΓ‘taxis β umumiy ramka. Endi dasturchi amalda eng ko'p yozadigan aniq hujjat turlariga o'tamiz. Ularning har biri yuqoridagi to'rtlikning bir yoki bir nechtasiga tushadi.
README β loyihaga birinchi eshik¶
README β loyihaning yuzi. Uni eng birinchi va eng ko'p odam o'qiydi: yangi a'zo, kelajakdagi siz, loyihangizni baholayotgan begona. Yaxshi README uchta savolga tez javob beradi:
- Bu nima? Loyiha bir-ikki jumlada nimani qiladi. (Eng ko'p unutiladigan qism β muallif "hammaga ma'lum" deb o'ylaydi, lekin begona uchun emas.)
- Qanday o'rnataman? Noldan ishga tushirish qadamlari β nusxalab-joylashtirsa ishlaydigan darajada aniq.
- Qanday ishlataman? Bitta minimal, ishlaydigan misol. "Salom dunyo" darajasidagi eng kichik foydalanish.
Yaxshi README qo'shimcha ravishda: talablar (versiyalar), konfiguratsiya, hissa qo'shish qoidalari va litsenziyani qamrashi mumkin. Lekin yuqoridagi uchtasi β minimal majburiy yadro.
β Yomon README: faqat loyiha nomi va "TODO: docs". Yangi odam birinchi qadamdayoq qotib qoladi.
β Yaxshi README: bir abzas "bu nima", aniq o'rnatish bloki, ishlaydigan bitta misol. O'qigan odam 5 daqiqada loyihani ishga tushira oladi.
Runbook β operatsion qo'llanma¶
Runbook β incident (favqulodda holat) paytida o'qiladigan amaliy qo'llanma. Uning o'quvchisi β yarim tunda uyqudan turgan, asabiy navbatchi muhandis. Bunday o'quvchi nazariya o'qishni xohlamaydi β unga aniq, ketma-ket qadamlar kerak: "Agar servis javob bermasa: 1) dashboardni och, 2) bu metrikani tekshir, 3) agar X bo'lsa β shu buyruqni ishga tushir, 4) yordam bermasa β bu odamni chaqir."
Yaxshi runbook belgilari: aniq triggerni nomlaydi ("qachon bu qo'llanmani ochaman"), qadamlar nusxalab ishlatiladigan, har qadam kutilgan natijani aytadi, va "agar bu ishlamasa β keyingisi" tarmoqlari bor. Runbook β toza how-to turidagi hujjat: o'quvchi o'rganmoqchi emas, muammoni hozir yechmoqchi.
ADR β qaror yozuvi¶
ADR (Architecture Decision Record β arxitektura qaror yozuvi) β muhim texnik qaror nega qabul qilinganini yozib qoladigan qisqa hujjat. Bu DiΓ‘taxisning tushuntirish (explanation) turi: u "nima qilish kerak"ni emas, "nega shunday qaror qilingan"ni saqlaydi. Tipik ADR: kontekst (muammo nima edi), qaror (nima tanlandi), ko'rib chiqilgan muqobillar, oqibatlar (trade-off'lar). Texnik qaror va trade-off mantig'ini, ADR tuzilishini 23-bobda batafsil ko'rgan edingiz β bu bob esa uni hujjat sifatida qanday yozishga qaraydi.
ADRning butun qadri shunda: olti oydan keyin kimdir "nega biz Kafka emas, oddiy navbat ishlatdik?" deb so'raganda, javob odamning xotirasida emas, yozilgan ADRda turadi. Qaror yozilmasa β u har gal qaytadan muhokama qilinadi.
API hujjati va onboarding qo'llanma¶
- API hujjati β sizning kodingizni ishlatadigan boshqa dasturchi uchun. Bu asosan ma'lumotnoma (reference): har funksiya/endpoint nimani qabul qiladi, nimani qaytaradi, qanday xato beradi β aniq va to'liq. Bunga ko'pincha qisqa how-to misollar qo'shiladi ("autentifikatsiyani qanday qo'shish"). Eng yaxshisi β koddan ajralmaydigan hujjat (masalan, izoh yoki sxemadan generatsiya qilinadigan), shunda u eskirmaydi.
- Onboarding qo'llanma β yangi a'zoning birinchi haftasi uchun "qayerdan boshlayman" xaritasi: muhitni qanday sozlash, qaysi hujjatlarni o'qish, kim bilan tanishish, birinchi kichik vazifa. Bu README va boshqa hujjatlarni bog'lab turadigan kirish nuqtasi.
Kod izohlari: "nima" emas, "nega"¶
Hujjatning eng zich shakli β kod izohi. Va aynan shu yerda eng ko'p xato qilinadi. Asosiy qoida bitta:
Kod "nima qilishini" o'zi aytadi. Izoh "nega qilishini" aytsin.
Kodni o'qigan har bir dasturchi i = i + 1 ning ini oshirishini ko'radi β buni izohlash hech narsa qo'shmaydi, faqat shovqin. Lekin nima uchun aynan shu yerda 100 millisekund kutilayotgani β koddan ko'rinmaydi. Aynan shu β izoh kerak bo'lgan joy.
Quyidagi taqqos buni aniq ko'rsatadi:
β Yomon ("nima"ni takrorlaydi):
Izoh kod allaqachon aytayotganini takrorlaydi. Hech qanday yangi ma'lumot yo'q.β Yaxshi ("nega"ni aytadi):
Endi o'quvchi koddan topa olmaydigan sababni biladi β va bu raqamni o'zgartirishdan oldin nima xavf borligini tushunadi.
Yana bir muhim haqiqat: eng yaxshi izoh β yozilmagan izoh, agar kodning o'zi tushunarli bo'lsa. O'zini tushuntiradigan kod β yaxshi nomlar, kichik funksiyalar β ko'p izohga ehtiyojni yo'qotadi. urinishlarSoni o'zgaruvchisi x dan ko'ra ming marta tushunarli, va u hech qanday izohni talab qilmaydi. Izoh β kod o'zini tushuntira olmaydigan joyda kerak: tashqi sabab, nostandart qaror, "bu yerda ehtiyot bo'l" ogohlantirishi, vaqtinchalik yamoq sababi.
Eng katta xavf β eskirgan izoh. Kod o'zgaradi, izoh esa joyida qoladi β endi u yolg'on gapiradi. Eskirgan izoh izohsizlikdan ham yomonroq: u o'quvchini ataylab adashtiradi. Shuning uchun izoh yozsangiz β kodni o'zgartirganda izohni ham yangilashni odat qiling. Kamroq, lekin to'g'ri izoh β ko'p, lekin chirigan izohdan afzal.
Demak, izoh qoidasini xulosalasak: "nima"ni izohlama (kod aytadi), "nega"ni izohla (kod ayta olmaydi), yaxshi nom orqali izohga ehtiyojni kamaytir, va izohni kod bilan birga yangilab tur.
Yaxshi hujjat amaliyoti¶
DiΓ‘taxis va aniq hujjat turlarini bildik. Endi β turidan qat'i nazar, har qanday hujjatni yaxshi qiladigan amaliy odatlar.
O'quvchini bil¶
Bu eng muhim qoida β va u 9-bobning "auditoriyani bil" tamoyilining aynan o'zi. Hujjat yozishdan oldin so'rang: kim buni o'qiydi va u nimani allaqachon biladi? Mutlaqo yangi odam uchun yozilgan README jargonga to'la bo'lmasligi kerak; tajribali dasturchi uchun how-to esa har bir asosiy tushunchani qaytadan tushuntirib o'tirmasligi kerak. O'quvchini noto'g'ri tasavvur qilish β eng ko'p hujjatni foydasiz qiladigan sabab.
Sodda til va aniq misol¶
- Sodda yozing. Qisqa jumla, oddiy so'z, kam jargon. Hujjat β chiroyli adabiyot tanlovi emas; uning yagona maqsadi β o'quvchi tushunishi. Murakkab yozuv ko'pincha murakkab fikrning emas, dangasalikning belgisi.
- Har doim misol bering. Bitta ishlaydigan, nusxalab sinab ko'rsa bo'ladigan misol β uzun nazariy tushuntirishdan kuchliroq. Odamlar misoldan o'rganadi. Ayniqsa how-to va README'da: misolsiz hujjat β yarim hujjat.
Hujjatni yangilab tur¶
Eskirgan hujjat β kod o'zgargan, hujjat eski qolgan β zararli. U o'quvchini noto'g'ri yo'lga boshlaydi, va u hujjatga umuman ishonchni yo'qotadi (bir marta aldangan odam butun hujjatga shubha bilan qaraydi). Shuning uchun:
- "Docs as code" β hujjatni kod bilan bir joyda (repozitoriyada, versiya nazoratida) saqlang. Shunda hujjat kod bilan birga ko'rib chiqiladi (review), birga o'zgaradi, "uzoq, unutilgan wiki sahifasi"ga aylanmaydi.
- O'zgarish kiritganda o'zingizdan so'rang: "bu o'zgarish biror hujjatni yolg'onga aylantirdimi?" Agar ha β hujjatni ham o'sha PR'da yangilang.
Mukammallikni kutma¶
Ko'p odam "ideal hujjat yoza olmasam, umuman yozmayman" tuzog'iga tushadi. Bu xato. Biror hujjat β hech qanday hujjatdan yaxshi. Qisqa, nomukammal, lekin to'g'ri README β bo'sh README'dan ming marta foydali. Hujjat β kod kabi iterativ: avval ishlaydigan minimalni yozing, keyin o'quvchilarning savollaridan bilib, yaxshilab boring. Eng yaxshi hujjat manbasi β o'quvchilar bergan takroriy savollar: agar uch kishi bir narsani so'rasa, javobni hujjatga yozib qo'ying.
Trade-off: hujjatga ham vaqt ketadi, va hamma narsani hujjatlash mumkin emas. Hammasini emas, eng ko'p o'qiladigan va eng tez eskiradigan narsalarni hujjatlang: loyihaga kirish (README), incident qadamlari (runbook), muhim qarorlar (ADR), tashqi interfeys (API). Bir martalik, oson kod uchun batafsil hujjat β ko'pincha ortiqcha sarmoya.
Asosiy g'oyalar (bobni qisqacha)¶
- Kod "nima qilishini", hujjat "nega qilishini" aytadi. Hujjat yozishning sababi β kelajakdagi o'zingiz, jamoa, yangi a'zo (onboarding) va bus factorni kamaytirish. Kod bir marta yoziladi, ko'p marta o'qiladi.
- DiΓ‘taxis (Daniele Procida) hujjatni to'rt turga ajratadi: tutorial (o'rgatish), how-to (muammo yechish), reference (aniqlik), explanation (anglatish). Har birining o'quvchisi va maqsadi boshqa β eng katta xato ularni aralashtirish.
- Dasturchi hujjatlari: README (loyihaga kirish β nima/o'rnatish/ishlatish), runbook (incident qadamlari), ADR (qaror "nega"si), API hujjati (reference + misol), onboarding qo'llanma.
- Kod izohi qoidasi: "nima"ni izohlama (kod aytadi), "nega"ni izohla (kod ayta olmaydi). O'zini tushuntiradigan yaxshi nom > ko'p izoh. Eskirgan izoh β yolg'on, izohsizlikdan yomonroq.
- O'quvchini bil β kim o'qiydi, u nimani biladi? Sodda yoz, misol ber, o'quvchini noto'g'ri tasavvur qilma.
- Hujjatni yangilab tur: "docs as code" β kod bilan bir joyda, versiya nazoratida, birga review qilinadi. O'zgarish hujjatni yolg'onga aylantirdimi β o'sha PR'da yangila.
- Mukammallikni kutma: biror hujjat hech qandayidan yaxshi. Iterativ yoz; o'quvchilarning takroriy savollari β eng yaxshi hujjat ro'yxati.
Mashqlar¶
Oson¶
1-mashq. O'zingiz yaqinda yozgan (yoki ishlatgan) bir loyiha uchun README'ning uchta yadro bo'limini yozing: "Bu nima?" (1β2 jumla), "Qanday o'rnataman?" (aniq qadamlar), "Qanday ishlataman?" (bitta minimal misol). Begona odam shu uch bo'limni o'qib loyihani ishga tushira oladimi β shu mezon bilan tekshiring.
2-mashq. Quyidagi "nima" izohlarni "nega" izohlarga aylantiring (kontekstni o'zingiz faraz qiling):
- summa = summa * 1.2 // summani 1.2 ga ko'paytiramiz
- if (urinish > 3) toxtat() // urinish 3 dan katta bo'lsa to'xtaymiz
Har biriga koddan ko'rinmaydigan "nega"ni qo'shing.
O'rta¶
3-mashq. Quyidagi hujjatlarni DiΓ‘taxis to'rt turi (tutorial / how-to / reference / explanation) bo'yicha toifalang va har biri uchun bir jumlada nega shu turga tegishliligini yozing: 1. "Birinchi marta loyihani o'rnatib, salom-dunyo botini ishga tushiramiz" 2. "Barcha konfiguratsiya kalitlari va ularning standart qiymatlari" 3. "Nega biz monolitdan mikroservisga o'tdik" 4. "Production'da ma'lumotlar bazasini qanday qayta tiklash (restore)"
4-mashq. Bitta kichik tizim (masalan: "kechasi ishlaydigan backup skripti") uchun qisqa runbook yozing. Quyidagilar bo'lsin: trigger ("qachon bu qo'llanmani ochaman"), 3β5 ta aniq qadam (har biri kutilgan natija bilan), va "agar ishlamasa β keyingi qadam / kimni chaqirish". O'quvchi β yarim tunda turgan navbatchi deb tasavvur qiling.
Qiyin¶
5-mashq. O'zingiz tushunadigan, lekin hech qaerda yozilmagan bir texnik qaror oling (masalan: "nega bu loyihada falon kutubxonani tanladik" yoki "nega bu jadval shunday tuzilgan"). Uni ADR sifatida yozing: Kontekst (muammo nima edi), Qaror (nima tanlandi), Ko'rib chiqilgan muqobillar (kamida 1), Oqibatlar (trade-off'lar). Har bo'lim 1β3 jumla. Olti oydan keyingi begona o'quvchi "nega?" savoliga shu hujjatdan javob topadimi β shu mezon bilan tekshiring.
6-mashq. Bitta funksiyaning hujjatini DiΓ‘taxisning ikki turida yozing va farqni sezing: (a) reference β funksiya nimani qabul qiladi, nimani qaytaradi, qanday xato beradi (quruq, to'liq); (b) how-to β "bu funksiya bilan falon vazifani qanday bajarish" (aniq, misolli retsept). Keyin bir abzasda: nega bu ikkalasi bir hujjatga sig'maydi, va qaysi o'quvchi qaysini izlaydi?
Yechimlar / Namunaviy yondashuvlar
1-mashq yechimi¶
Namuna (faraziy "savdo-bot" loyihasi uchun):
- Bu nima? "Telegram orqali kichik do'kon buyurtmalarini qabul qiladigan bot. Mahsulot ko'rsatadi, savatcha to'playdi, buyurtmani adminga yuboradi."
- Qanday o'rnataman? "1) Repozitoriyani nusxalang, 2) bog'liqliklarni o'rnating, 3) .env faylida BOT_TOKEN ni qo'ying, 4) start buyrug'i bilan ishga tushiring." (Har qadam aniq buyruq bilan bo'lishi kerak.)
- Qanday ishlataman? "Botga /start yozing β u mahsulotlar ro'yxatini ko'rsatadi." Bitta minimal, ishlaydigan misol.
Mezon: begona odam shu uch bo'limni o'qib, savol bermay loyihani ishga tushira olsa β README yaxshi. Eng ko'p unutiladigan β "Bu nima?" bo'limi.
2-mashq yechimi¶
summa = summa * 1.2->// QQS 20% qo'shamiz (mahalliy soliq talabi)β endi o'quvchi 1.2 raqamining sababini va uni o'zgartirish xavfini biladi.if (urinish > 3) toxtat()->// 3 urinishdan keyin tashqi API IP'ni vaqtincha bloklaydi, shuning uchun to'xtaymizβ koddan ko'rinmaydigan tashqi sabab.
Kalit β har ikkala "yaxshi" izoh koddan o'qib bo'lmaydigan narsani aytadi: nega aynan 1.2, nega aynan 3. Eski izohlar esa kodning o'zini takrorlagandi.
3-mashq yechimi¶
- Tutorial β o'rganayotgan, "birinchi marta" odam uchun, qo'lidan ushlab oxiriga olib boradi (o'rgatish maqsadi).
- Reference β to'liq, quruq ro'yxat; o'quvchi aniq qiymat izlaydi, o'qib o'rganmaydi (aniqlik maqsadi).
- Explanation β "nega" savoliga javob, qaror konteksti; harakat qadamlari emas, anglatish (kontekst maqsadi).
- How-to β aniq vazifasi bor (restore) odam uchun retsept; u o'rganmoqchi emas, muammoni yechmoqchi (muammo yechish maqsadi).
Kalit β turni o'quvchining holati belgilaydi: u o'rganyaptimi yoki ish bajaryaptimi, amaliy qadam kerakmi yoki tushuncha kerakmi.
4-mashq yechimi¶
Namuna ("Kechalik backup skripti ishlamadi" runbook):
- Trigger: "Ertalab 'backup muvaffaqiyatsiz' ogohlantirishi kelganda yoki backup fayli bugungi sanada yo'q bo'lsa."
- Qadamlar:
1. Backup loglarini och (logs/backup-YYYY-MM-DD.log). Kutilgan: oxirgi qatorda xato sababi ko'rinadi.
2. Disk joyini tekshir. Kutilgan: 10% dan ko'p bo'sh joy; agar to'lgan bo'lsa β sabab shu.
3. Backup buyrug'ini qo'lda ishga tushir. Kutilgan: "OK" va yangi fayl paydo bo'ladi.
4. Agar qo'lda ham xato bersa β ma'lumotlar bazasiga ulanishni tekshir.
- Agar ishlamasa: "Ma'lumotlar bazasi javob bermasa β DBA jamoasini (#db-oncall) chaqir va incidentni ochib qo'y."
Kalit β har qadam nusxalab ishlatiladigan va kutilgan natijani aytadi; navbatchi o'ylab o'tirmasdan ergasha oladi.
5-mashq yechimi¶
Namuna (ADR: "API uchun REST emas, GraphQL tanlandi"): - Kontekst: Mobil ilova bir ekranda 5 xil resursdan ma'lumot oladi; REST'da bu 5 ta alohida so'rov, sekin va ko'p trafik. - Qaror: API qatlamida GraphQL ishlatamiz β mijoz bitta so'rovda kerakli maydonlarni so'raydi. - Muqobillar: (1) REST + maxsus "aggregat" endpointlar β har yangi ekranga yangi endpoint kerak, ko'paya boradi; (2) REST'ni saqlab, mijozda birlashtirish β sekin va batareyani yeydi. - Oqibatlar: Mobil tezlashadi va trafik kamayadi (+), lekin server tomonida keshlash murakkablashadi va jamoa GraphQL'ni o'rganishi kerak (-).
Mezon: olti oydan keyingi begona "nega REST emas?" deb so'rasa β javob shu hujjatda, odamning xotirasida emas. Eng muhim bo'lim β muqobillar va oqibatlar, chunki ular qarorni "men shunday xohladim" dan "men shu sabablarga ko'ra shunday qildim" ga aylantiradi.
6-mashq yechimi¶
Namuna (narxHisobla(mahsulot, chegirma) funksiyasi uchun):
- (a) Reference: "Kiritma: mahsulot (obyekt, narx maydoni bilan), chegirma (0β1 oraliq son). Qaytaradi: yakuniy narx (son). Xato: chegirma 0β1 dan tashqarida bo'lsa, XatoQiymat qaytaradi." β quruq, to'liq, har holat qamralgan.
- (b) How-to: "Mavsumiy 20% chegirma qo'llash uchun: narxHisobla(mahsulot, 0.2) deb chaqiring. Bir nechta mahsulotga qo'llash uchun ro'yxat ustida aylanib chaqiring. Misol: ..." β aniq vazifa uchun retsept.
- Nega bir hujjatga sig'maydi: reference'ni aniq qiymat izlayotgan dasturchi qidiradi ("xato qachon chiqadi?") β unga retsept halaqit beradi; how-to'ni esa aniq vazifasi bor odam izlaydi ("chegirmani qanday qo'llayman?") β unga to'liq parametr ro'yxati ortiqcha. Ikki xil o'quvchi, ikki xil holat β shuning uchun DiΓ‘taxis ularni ajratadi.
Kalit saboq β bir xil funksiya haqida ikki xil hujjat yozish mumkin va kerak, chunki o'quvchining maqsadi har xil. "Hammasini bitta sahifaga" β eng keng tarqalgan hujjat xatosi.
β¬ οΈ Oldingi: 23 β Texnik qaror va trade-off'lar Β· π README Β· Keyingi: 25 β CV, portfolio va GitHub profil β‘οΈ