Mundarija (43)
- Bu darsda
- 1. Nega bu kerak?
- 2. Commit xabari inglizcha
- 2.1 Buyruq mayli
- 2.2 Sarlavhaning qolgan qoidalari
- 2.3 Kanon commitlari inglizchada
- 2.4 Tekshiruvchini yozamiz
- 3. PR tavsifi inglizcha
- 3.1 Uch savol
- 3.2 Haqiqiy PR — inglizcha
- 3.3 Foydali iboralar
- 4. Code review inglizcha
- 4.1 Yorliqli izohlar
- 4.2 Kanon izohlari — inglizcha
- 4.3 Yumshoq ohang
- 4.4 Izohga javob
- 4.5 GitHub'ning inglizcha javoblari
- 5. Issue va xato haqida xabar inglizcha
- 6. Uchrashuv va standup
- 6.1 Standup qolipi
- 6.2 Tushunmaganda
- 6.3 Yomon xabar
- 7. Intervyuda
- 7.1 O'zingiz haqingizda
- 7.2 Loyiha hikoyasi: STAR
- 7.3 Bilmaganda
- 8. O'rganish yo'li
- 9. Loyiha qadami: "Inglizcha" bo'limi va commit
- 9.1 CONTRIBUTING.md ga bo'lim
- 9.2 Tekshiruv va commit
- 10. Ko'p uchraydigan xatolar
- 10.1 O'tgan zamon, bosh harf va nuqta
- 10.2 Tarjimonning so'zma-so'z gapi
- 10.3 Ko'p uzr
- 10.4 Tanada nega yo'q
- 10.5 Ikki tilni aralashtirish
- 11. Mashqlar
- 1-mashq (oson): bo'shliqlarni to'ldiring
- 2-mashq (o'rta): review izohini o'qish
- 3-mashq (qiyin): commit-msg hook
- 12. Real ishda
- Xulosa
- Manbalar
Ingliz tilida yozish va gapirish: commit, PR, uchrashuv, intervyu
Qisqacha: Dasturchining inglizchasi — adabiy til emas, bir nechta qolip. Commit sarlavhasi buyruq maylida:
fix: use a separate breaker,fixedyokifixingemas. PR tavsifi uch savolga javob beradi: What, Why, How tested. Review izohi yorliq bilan boshlanadi (question:,suggestion:) va kodga qaratiladi, odamga emas. Uchrashuvda — "Yesterday I…, Today I'll…, I'm blocked by…" qolipi, intervyuda — aniq raqamli bitta hikoya. Bu darsdavazifalar-apining haqiqiy commit va review'larini inglizchaga o'giramiz vaCONTRIBUTING.mdga "Inglizcha" bo'limini qo'shamiz.
Bu darsda
- Commit sarlavhasini inglizcha, buyruq maylida yozasiz va uni JavaScript bilan tekshirasiz.
- PR tavsifi va review izohlarini inglizcha qoliplar bilan yozasiz, GitHub'ning inglizcha rad javoblarini o'qiysiz.
- Standup va uchrashuvda kerak bo'ladigan 15–20 iborani ishlata olasiz.
- Intervyuda o'z loyihangiz haqida inglizcha qisqa hikoya tuzasiz.
CONTRIBUTING.mdga inglizcha namunalar qo'shib, loyihaning shu bosqichini commit qilasiz.
Oldin bilishingiz kerak: Dasturchi ingliz tili, Jamoada muloqot: sinxron va asinxron, Yaxshi PR tayyorlash, Code review berish va olish, Conventional Commits va commitlint.
1. Nega bu kerak?
Aziz vazifalar-api da ishlashni o'rgandi: kichik PR, Conventional Commits, review. Endi u birinchi marta begona open source loyihaga hissa qo'shmoqchi. Loyiha README'si inglizcha, issue'lar inglizcha, maintainer Germaniyada yashaydi. Aziz kodni yozdi, lekin PR sarlavhasiga nima yozishni bilmay qoldi. Tarjimon Fixed the bug which was in the function degan gapni berdi. Ikki kundan keyin javob keldi: nit: please use imperative mood in the title.
Kod to'g'ri edi. Muammo — boshqa qolipda yozilgan xabar: dasturchilarning ingliz tili ham o'z kelishuvlariga ega.
Dasturchi ingliz tili darsida so'zlar va xato xabarlarini o'qishni o'rgandik. Bu dars — keyingi qadam: yozish va gapirish. Yaxshi xabar: bu qoliplar soni cheklangan. Ularni bir marta o'rganib, har kuni takrorlaysiz.
Hayotiy o'xshatish: aeroportdagi dispetcher va uchuvchi. Ikkalasi ham ona tili ingliz bo'lmasligi mumkin. Lekin ular qat'iy iboralar bilan gaplashadi va bir-birini xatosiz tushunadi. Dasturchilarning commit va review tili ham shunday — grammatika emas, qolip muhim.
flowchart LR
subgraph Y["Yozma"]
C["commit"] --> P["PR tavsifi"]
P --> R["review izohi"]
I["issue"]
end
subgraph O["Og'zaki"]
S["standup"]
U["uchrashuv"]
V["intervyu"]
endDiagrammaga qarang: ish kunining ko'p qismi yozma. Shuning uchun dars ham asosan yozish haqida.
2. Commit xabari inglizcha
2.1 Buyruq mayli
Buyruq mayli (imperative mood) — fe'lning "qil!", "qo'sh!" shakli: add, fix, remove. Git loyihasining o'z qoidasi shunday deydi (Git hujjati, SubmittingPatches, 2026-11-04 da ochib o'qildi):
"Describe your changes in imperative mood, e.g. "make xyzzy do frotz" … as if you are giving orders to the codebase to change its behavior."
"O'zgarishlaringizni buyruq maylida yozing… go'yo kod bazasiga xulqini o'zgartirishni buyurayotgandek." Ya'ni commit — kodga buyruq: "breaker'ni har modelga alohida qil".
| Noto'g'ri | To'g'ri | Nega |
|---|---|---|
fixed breaker |
fix breaker |
o'tgan zamon — "tuzatdim" |
fixing breaker |
fix breaker |
davom — "tuzatyapman" |
fixes breaker |
fix breaker |
uchinchi shaxs — "tuzatadi" |
Breaker fix. |
fix breaker |
ot + bosh harf + nuqta |
Oddiy tekshiruv: sarlavha oldiga "If applied, this commit will…" ("Qo'llansa, bu commit…") qo'shib o'qing. …will fix breaker — to'g'ri gap. …will fixed breaker — buzuq. Bu usulni ko'p qo'llanmalar tavsiya qiladi, masalan Chris Beams'ning mashhur maqolasi (cbea.ms, 2026-11-04 da ochib o'qildi).
2.2 Sarlavhaning qolgan qoidalari
Git hujjati yana uchta narsani aytadi:
- birinchi qator qisqa — 50 belgi "yumshoq chegara" (soft limit);
area:prefiksidan keyingi birinchi so'z kichik harf bilan;- oxirida nuqta yo'q.
vazifalar-api ning CONTRIBUTING.md da qattiqroq chegara yozilgan: ≤ 72 belgi, chunki Conventional Commits prefiksi (fix(ai): ) joy oladi. 50 — maqsad, 72 — chegara.
Diqqat: Chris Beams maqolasida aksincha qoida bor: "Capitalize the subject line" — sarlavha bosh harf bilan. Ikkalasi ham to'g'ri, faqat har biri o'z holati uchun. Beams prefikssiz sarlavhani nazarda tutadi (
Fix breaker). Git loyihasi va Conventional Commits'da prefiks bor, undan keyin kichik harf yoziladi (fix: use …). Qaysi biri — loyihaningCONTRIBUTING.mdsida vagit logida ko'rinadi.
Eng ko'p ishlatiladigan fe'llar ro'yxati qisqa:
| Fe'l | Qachon | Misol |
|---|---|---|
| add | yangi narsa | feat: add recurring tasks |
| fix | xato tuzatish | fix(auth): fix token refresh race |
| remove | olib tashlash | chore: remove unused env var |
| update | yangilash | chore(deps): update prisma to 7.10.1 |
| rename / move | nom yoki joy | refactor: move breaker to its own file |
| use | boshqa usulga o'tish | fix(ai): use a separate breaker per model |
| handle | holatni hisobga olish | fix: handle empty task list |
| document | hujjat | docs: document AI_DEADLINE_MS |
2.3 Kanon commitlari inglizchada
Loyiha tili — o'zbekcha, shuning uchun kanon commitlari o'zbekcha. Lekin loyiha xalqaro jamoaga o'tsa, ular qanday bo'lardi? CONTRIBUTING.md dagi namunadan (loyihaning shu bosqichi; tana jadvalda bitta qatorda, bu yerda git odatidagidek ~70 belgida bo'lindi):
fix(ai): use a separate circuit breaker per model
The shared breaker never opened under sequential load and blocked
the healthy fallback under parallel load. Found with git bisect.Tuzilishiga qarang. Sarlavha — nima (buyruq maylida). Bo'sh qator. Tana — nega: o'tgan zamonda, oddiy gaplar bilan, muammo va uni qanday topganimiz. Tanada o'tgan zamon to'g'ri — u voqeani hikoya qiladi. Buyruq mayli faqat sarlavhaga tegishli.
Asl o'zbekcha sarlavha — fix(ai): har modelga alohida circuit breaker va umumiy deadline; 31-qism nuqsonlari (Bisect darsi). Inglizchada ikki ish birga yozilmadi: biri sarlavhada, ikkinchisi tanada. Bu yaxshi odat — sarlavha bitta asosiy o'zgarishni aytsin.
2.4 Tekshiruvchini yozamiz
Qoidalarni kod bilan tekshirib ko'ramiz. Muntazam ifoda — RegExp asoslari darsidan:
const SARLAVHA =
/^(feat|fix|docs|test|refactor|chore)(\([a-z0-9-]+\))?!?: (.+)$/;
const BUYRUQ_EMAS = /^\w+(ed|ing)$|^(adds|fixes|updates|removes)$/;
function sarlavhaniTekshir(qator) {
const m = SARLAVHA.exec(qator);
if (!m) return "tur yo'q (feat, fix, docs ...)";
const matn = m[3];
const soz = matn.split(" ")[0];
const xatolar = [];
if (BUYRUQ_EMAS.test(soz)) xatolar.push(`"${soz}" buyruq emas`);
if (/^[A-Z]/.test(matn)) xatolar.push("bosh harf");
if (matn.endsWith(".")) xatolar.push("oxirida nuqta");
if (qator.length > 72) xatolar.push(`${qator.length} > 72 belgi`);
return xatolar.length ? xatolar.join("; ") : "ok";
}
const xabarlar = [
"fix(ai): use a separate circuit breaker per model",
"fix(ai): fixed breaker",
"feat: Adding recurring tasks.",
"docs: add architecture overview and first-task guide",
"update readme",
];
for (const x of xabarlar) {
console.log(sarlavhaniTekshir(x), "<-", x);
}Konsolda:
ok <- fix(ai): use a separate circuit breaker per model
"fixed" buyruq emas <- fix(ai): fixed breaker
"Adding" buyruq emas; bosh harf; oxirida nuqta <- feat: Adding recurring tasks.
ok <- docs: add architecture overview and first-task guide
tur yo'q (feat, fix, docs ...) <- update readmeUchinchi xabarda uchta xato birdan: -ing, bosh harf va nuqta. Oxirgisida tur yo'q — Conventional Commits buzilgan. Tekshiruvchi sodda: -ed bilan tugaydigan har so'zni xato deb oladi. embed yoki seed ham ro'yxatga tushadi. Real loyihada bunday qoidani commitlint bilan yozasiz, 3-mashqda esa Git hook bilan.
Tekshirib ko'ring:
docs: updated README with setup stepssarlavhasini to'g'rilang va "If applied, this commit will…" testidan o'tkazing.
Javob
docs: update README with setup steps — "If applied, this commit will update README with setup steps". updated o'tgan zamon edi: "yangiladim". Buyruq mayli — update. README — fayl nomi, shuning uchun bosh harflar qoladi: qoida faqat birinchi so'zga tegishli.
3. PR tavsifi inglizcha
3.1 Uch savol
Yaxshi PR tayyorlash darsida vazifalar-api PR shabloni yozildi: "Nima o'zgardi", "Nega", "Qanday tekshirildi", "Review uchun", "Xavf va qaytarish". Inglizcha loyihalarda xuddi shu bo'limlar boshqa nom bilan uchraydi:
| O'zbekcha bo'lim | Inglizcha | Birinchi gap qolipi |
|---|---|---|
| Nima o'zgardi | What / Summary | This PR adds … |
| Nega | Why / Motivation | Without this, … / Closes #12. |
| Qanday tekshirildi | How tested / Testing | Ran npm run check; added … |
| Review uchun | Notes for reviewers | Please focus on … |
| Xavf | Risks / Rollback | No migration. Revert is safe. |
E'tibor bering: tavsifda present simple ("This PR adds") ishlatiladi, sarlavhada esa buyruq mayli. PR sarlavhasi squash'dan keyin main dagi commit sarlavhasiga aylanadi (Jamoa workflow'lari). Shuning uchun sarlavha qoidalari commit bilan bir xil.
3.2 Haqiqiy PR — inglizcha
Kanon sinov reposidagi PR #17 tavsifi o'zbekcha edi (kursning sinov reposi, github.com/Sarvarbek0704/ilmhamroh-git-sinov/pull/17). Asl matndan parcha (qatorlar telefon uchun bo'lindi):
## Nega
Yozma, qidiriladigan muloqot: issue'ga kerakli ma'lumot birinchi
urinishda kelsin, qarorlar "nega"si bilan saqlansin.Xuddi shu PR inglizcha loyihada shunday yozilardi (tarjima biz qildik, so'zma-so'z emas):
## What
- Add YAML issue forms: bug report and feature request,
with required fields. Blank issues are disabled.
- Add ADR template and the first decision record
(per-model circuit breaker, from #9).
- CONTRIBUTING: add "Communication" and "English" sections.
## Why
Written, searchable communication: issues should contain
everything needed on the first try, and decisions should
keep their reasoning.
## How tested
- [x] npm run check passes
- [x] templates are listed by the contents API after mergeUch narsaga qarang. Ro'yxat bandlari ham buyruq maylida boshlanadi (Add) — ular "nima qilindi" ni commit uslubida aytadi. Band ichidagi qo'shimcha gap esa oddiy holat: Blank issues are disabled ("bo'sh issue'lar o'chirilgan"). "Why" bo'limi — to'liq gaplar. "How tested" — tekshiriladigan faktlar, "I think it works" emas.
3.3 Foydali iboralar
This is a follow-up to #9.— "Bu #9 ning davomi."Part 1 of 2: …— katta ish bo'lingan bo'lsa (kanondagi(1/2)).I'm not sure about X — happy to change it.— "X ga ishonchim komil emas, o'zgartirishga tayyorman."Out of scope: …— "Bu PR doirasidan tashqarida: …".Draft: please don't merge yet.— qoralama PR.
Tekshirib ko'ring: PR tavsifida
I fixed the bug and I think now it works gooddeb yozildi. Qaysi uchta joyni yaxshilash kerak?
Javob
- "Qaysi xato?" — havola yo'q:
Fixes #42. 2) "I think it works" — tekshiruv emas, taxmin:Added a regression test; npm run check passes. 3)works good— grammatik xato,works wellbo'lishi kerak. Yaxshi tavsifda ishonch emas, dalil bo'ladi.
4. Code review inglizcha
4.1 Yorliqli izohlar
Code review darsida izohlar yorliq bilan yozildi: savol:, taklif:, maqtov:. Bu yorliqlar Conventional Comments kelishuvidan (conventionalcomments.org, 2026-11-04 da ochib o'qildi). Asl inglizcha yorliqlar:
| Yorliq | Ma'nosi | O'zbekcha (kanonda) |
|---|---|---|
praise: |
samimiy maqtov | maqtov: |
nitpick: (yoki nit:) |
mayda, didga bog'liq | nit: |
suggestion: |
yaxshilash taklifi va nega | taklif: |
issue: |
aniq muammo | muammo: |
question: |
aniqlashtirish savoli | savol: |
Yana todo:, thought:, chore:, note: bor. Ixtiyoriy yorliqlar ham bor: typo:, polish:, quibble:. Format: <label> [decorations]: <subject>. Bezak (decoration) — qavs ichida: (blocking) — "merge'dan oldin hal bo'lishi shart", (non-blocking) — "to'sqinlik qilmaydi", (if-minor) — "o'zgarish kichik bo'lsa tuzating".
4.2 Kanon izohlari — inglizcha
PR #9 dagi to'rtta haqiqiy izohdan ikkitasini olaylik. Asl o'zbekcha matn:
savol: `#breakerlar` Map'i chegarasiz o'sadimi? Agar model nomi
so'rovdan (foydalanuvchidan) kelsa, har yangi nom — yangi yozuv,
xotira sizishi.Inglizcha (CONTRIBUTING.md dagi namuna):
question: Could this map grow without bound if the model name
comes from the request?Ikkinchisi — taklif. Asl izoh: "4 belgi = 1 token… BELGI_TOKEN = 4 deb nomlab… Merge'ga to'sqinlik qilmaydi." Inglizchada:
suggestion (non-blocking): consider extracting 4 into a named
constant (CHARS_PER_TOKEN), with a comment about the ~1.7x token
ratio we measured for Uzbek text."Merge'ga to'sqinlik qilmaydi" iborasi inglizchada bitta bezakka aylandi: (non-blocking). Yorliq tizimining kuchi shunda — ohang va muhimlik ikki so'zda.
4.3 Yumshoq ohang
Ingliz tilidagi review'da buyruq emas, savol va taklif ishlatiladi. O'zbekchada ham shunday, lekin inglizchada farqi kuchliroq seziladi:
| Keskin | Yumshoq |
|---|---|
This is wrong. |
I think this might break when the list is empty. |
Change it. |
What do you think about using a Map here? |
Why did you do this? |
Could you explain the reason for this approach? |
Bad name. |
nit: maybe "retryCount" is clearer than "n"? |
Could, might, maybe, what do you think — bular "men adashgan bo'lishim mumkin" degan ma'noni beradi. Ayniqsa ona tili ingliz bo'lmagan jamoada qisqa buyruq qo'pol eshitiladi.
4.4 Izohga javob
Kanondagi muallif javoblari va ularning inglizcha qolipi:
- Tuzatildi:
Good catch — fixed in <commit>.("Yaxshi topdingiz —da tuzatildi.") - Rozi, lekin keyinroq:
I'd prefer to keep this PR small; opened #10 to track it.— kanon aynan shunday qildi: taklifni issue #10 ga chiqardi. - Tushuntirish:
The keys come only from config, so the map has at most 3 entries. - Rozi emas:
I see your point, but … . Happy to discuss.
CONTRIBUTING.md dagi fixed in 3f2a1c4 — namunaviy hash: o'rniga o'z commitingiz raqamini yozasiz.
4.5 GitHub'ning inglizcha javoblari
Review jarayonida GitHub ham inglizcha "gapiradi". Kanon tajribasidagi uchta haqiqiy rad javobini Jamoa workflow'lari darsida to'liq ko'rgansiz. Endi ularning kalit iboralarini til nuqtai nazaridan o'qiymiz:
| Chiqishdagi ibora | Tarjima | Ma'nosi |
|---|---|---|
| Can not approve your own pull request | o'z PR'ingizni tasdiqlay olmaysiz | muallif o'zini tasdiqlamaydi |
| is not mergeable: the base branch policy prohibits the merge | merge qilib bo'lmaydi: asosiy branch siyosati taqiqlaydi | ruleset sharti bajarilmagan |
| Changes must be made through a pull request | o'zgarish PR orqali qilinishi shart | GH013: main ga to'g'ridan push yo'q |
Qolip: avval fe'lni toping (approve, prohibits, must be made), keyin inkorni (not, Can not). Bu Xato xabarini o'qish darsidagi usulning o'zi.
Tekshirib ko'ring: Review izohi:
issue (blocking): this query runs inside a loop. Muallif nima qilishi kerak — merge qilib, keyin tuzatishi mumkinmi?
Javob
Yo'q. issue — aniq muammo, (blocking) — merge'dan oldin hal bo'lishi shart. Muallif so'rovni sikldan chiqaradi (yoki nega bunday ekanini tushuntiradi) va javob yozadi. vazifalar-api ruleset'ida muhokamalar yopilmaguncha merge baribir rad etiladi.
5. Issue va xato haqida xabar inglizcha
Begona loyihaga birinchi hissa ko'pincha PR emas, issue bo'ladi. vazifalar-api ning "Xato haqida xabar" shabloni (.github/ISSUE_TEMPLATE/xato.yml) to'rtta majburiy maydonga ega. Inglizcha loyihalarda ular deyarli bir xil nomlanadi:
| Kanon maydoni | Inglizcha | Qolip |
|---|---|---|
| Takrorlash qadamlari | Steps to reproduce | 1. Run … 2. Send … |
| Kutilgan natija | Expected behavior | The API should return 200. |
| Haqiqiy natija | Actual behavior | It returns 500 with … |
| Versiya yoki commit | Version | 4.0.1 (commit a1b2c3d) |
Namuna — o'quv uchun yozilgan (bunday xato kanonda topilmagan), lekin tuzilishi to'liq:
Title: PATCH /v1/vazifalar/:id returns 500 for empty title
Steps to reproduce:
1. POST /v1/vazifalar {"matn": "test"}
2. PATCH /v1/vazifalar/1 {"matn": ""}
Expected behavior: 422 with a validation error.
Actual behavior: 500 Internal Server Error.
Version: 4.0.1Sarlavha — holat ("returns 500"), commit kabi buyruq emas. Issue muammoni tasvirlaydi, commit uni tuzatadi.
Xalqaro loyihada yana ikki ibora ko'p kerak bo'ladi: Is anyone working on this? I'd like to take it. ("Kimdir shu ustida ishlayaptimi? Men olmoqchiman.") va I can reproduce this on Windows 11. ("Windows 11 da men ham takrorladim").
6. Uchrashuv va standup
6.1 Standup qolipi
Jamoada muloqot darsida standup va status update'ni o'rgandik. Xalqaro jamoada ular inglizcha bo'ladi. Eng keng tarqalgan qolip — uch qator:
Yesterday I finished the migration for recurring tasks.— "Kecha … ni tugatdim."Today I'll write tests for the edge cases.— "Bugun … qilaman."I'm blocked by the review on #12.— "#12 dagi review meni to'xtatib turibdi."
Uch qatorda uchta zamon: o'tgan (finished), kelasi (I'll write), hozirgi (I'm blocked). Bu — grammatikaning dasturchiga eng kerakli qismi.
Yozma (asinxron) standup ham shu qolipda. Telegram yoki Slack'dagi namuna (PR raqami o'ylab topilgan):
Done: #2 migration (PR #21 open)
Next: #3 keyingiMuddat() tests
Blockers: none
Note: I'm off on Friday afternoon.6.2 Tushunmaganda
Uchrashuvda eng qo'rqinchli vaziyat — gapni tushunmaslik. Buning ham qoliplari bor va ular odobli hisoblanadi:
Sorry, could you repeat that?— "Kechirasiz, takrorlay olasizmi?"Could you speak a bit slower, please?— "Sekinroq gapira olasizmi?"Just to confirm: you mean …?— "Aniqlashtirib olay: … demoqchimisiz?"Could you share your screen?— "Ekraningizni ko'rsata olasizmi?"Let me check and get back to you.— "Tekshirib, javob beraman."Can we take this offline?— "Buni uchrashuvdan keyin alohida gaplashsak?"
Just to confirm iborasi eng foydalisi. Siz tushunganingizni o'z so'zlaringiz bilan qaytarasiz. Xato tushungan bo'lsangiz — darhol tuzatishadi.
Maslahat: Muhim uchrashuvdan keyin qisqa yozma xulosa yuboring:
Summary: we agreed to … . Next steps: … (Aziz), … (Nodira).Og'zaki suhbatda tushunmagan narsangiz bo'lsa, javob xatida chiqadi.
6.3 Yomon xabar
CONTRIBUTING.md dagi "Yomon xabar erta" qoidasining inglizcha qolipi:
Heads-up: #5 will take longer than estimated. The idempotency
test found a race condition. New estimate: Thursday.Heads-up — "oldindan ogohlantiraman". Keyin nima, nega va yangi taxmin. Uzr so'rash uzun bo'lishi shart emas — aniq reja muhimroq.
7. Intervyuda
7.1 O'zingiz haqingizda
"Tell me about yourself" — deyarli har intervyuning birinchi savoli. Uni bir daqiqalik uch qismli javob bilan tayyorlab qo'ying: hozir kimsiz, nima qilgansiz, nima qidiryapsiz.
I'm a full-stack JavaScript developer. I built a task API
with NestJS, PostgreSQL and an AI feature, and I maintain it
with tests, CI and a changelog. I'm looking for a team where
I can work on backend services.Intervyu jarayonining o'zini Intervyu jarayoni darsida batafsil ko'rasiz — bu yerda faqat til qismi.
7.2 Loyiha hikoyasi: STAR
"Tell me about a difficult bug" savoliga javobni STAR tartibida tuzish keng tarqalgan: Situation (vaziyat), Task (vazifa), Action (harakat), Result (natija). vazifalar-api dagi Bisect voqeasi — tayyor hikoya:
Situation: our AI endpoint had a fallback model, but under
parallel load the fallback was never used.
Task: find which commit broke it.
Action: I wrote a black-box regression test and ran git bisect
with a script. It found the commit in 3 steps.
Result: the circuit breaker was shared between models. I made
it per-model, and the test now runs in CI.Raqamlarga qarang: "3 steps", aniq sabab, aniq tuzatish. Intervyuer "men yaxshi debug qilaman" degan gapga emas, shunday faktlarga ishonadi. Hamma raqam kanon tajribasidan — o'ylab topilmagan.
7.3 Bilmaganda
Bilmagan savolga jim turish yoki uydirish — ikkalasi ham yomon. Halol qolip:
I haven't used it in production, but I know that …— "Prodakshnda ishlatmaganman, lekin bilaman: …"I'm not sure, but I would start by …— "Aniq bilmayman, lekin … dan boshlardim."Could you give me a moment to think?— "O'ylab olishga bir lahza bera olasizmi?"
8. O'rganish yo'li
IELTS kerakmi? IELTS — universitet va viza uchun xalqaro imtihon. Dasturchi ishiga kirishda sertifikat odatda so'ralmaydi — vakansiyadagi talab ("English: B2", "upper-intermediate") suhbatning o'zida tekshiriladi. Bu — kuzatuv, qoida emas (manba topilmadi): aniq vakansiya matnini o'qing. Darajalar tizimi — CEFR (Yevropa Kengashining umumiy til darajalari): A1 dan C2 gacha olti daraja, uch guruhda — A (boshlang'ich), B (mustaqil), C (erkin). Rasmiy sahifa coe.int da; u 2026-11-04 da avtomatik so'rovni rad etdi (403), shuning uchun daraja nomlarini ikkilamchi manbalar bilan solishtirdik.
Amaliy reja — har kungi ishning ichida:
- O'qish: har kuni bitta rasmiy hujjat sahifasi yoki changelog (Dasturchi ingliz tili darsidagi lug'at bilan).
- Yozish: shaxsiy loyihalarda commit va PR'larni inglizcha yozing. Bu darsdagi qoliplar yetadi.
- Tinglash: konferensiya chiqishlari, subtitr bilan, 1× tezlikda.
- Gapirish: o'z loyihangiz hikoyasini (STAR) ovoz chiqarib yozib oling va qayta tinglang.
Tarjimon va AI — tekshirish uchun yaxshi, lekin birinchi variantni o'zingiz yozing, keyin so'rang: Is this sentence natural?
9. Loyiha qadami: "Inglizcha" bo'limi va commit
9.1 CONTRIBUTING.md ga bo'lim
Jamoada muloqot darsida vazifalar-api ga issue shablonlari, ADR va CONTRIBUTING.md dagi "Muloqot" bo'limi qo'shildi — hali commit qilinmagan. Endi o'sha faylga, "Muloqot" bo'limidan keyin, yangi bo'lim qo'shamiz. Kanon faylidan aynan:
## Inglizcha (xalqaro jamoa yoki open source uchun)
Loyiha tili — o'zbekcha. Begona loyihaga hissa qo'shsangiz — o'sha
loyiha tilida (ko'pincha ingliz). Namunalar:Kirish gapi telefon uchun ikki qatorga bo'lindi. Undan keyingi jadval qatorlari juda uzun, shuning uchun uni saytdagi ko'rinishida beramiz — mazmuni aynan:
| Qayerda | Namuna |
|---|---|
| commit | fix(ai): use a separate circuit breaker per model — buyruq mayli (use, add, fix), "fixed/adding" emas |
| commit tanasi | The shared breaker never opened under sequential load and blocked the healthy fallback under parallel load. Found with git bisect. |
| PR sarlavhasi | docs: add architecture overview and first-task guide |
| review savoli | Could this map grow without bound if the model name comes from the request? |
| review taklifi | nit: consider extracting 4 into a named constant (CHARS_PER_TOKEN). |
| javob | Good catch — fixed in 3f2a1c4. / I'd prefer to keep this PR small; opened #10 to track it. |
Faylga yozishda har qatorni | … | … | shaklida, bitta qatorda yozing.
Bo'lim qoidani aniq aytadi: loyiha tili o'zbekcha, inglizcha — boshqa loyihalar uchun.
9.2 Tekshiruv va commit
Loyihaning shu bosqichida o'zgargan fayllar: .github/ISSUE_TEMPLATE/ (3 fayl), docs/adr/ (2 fayl) va CONTRIBUTING.md. Kanon bosqich tekshiruvida npm run check yashil o'tdi — faqat hujjatlar o'zgargan, kod emas.
Branch'ni Jamoada muloqot darsida ochgansiz — endi unga faqat o'tasiz (-c siz: -c bilan Git "branch allaqachon bor" deb rad etadi):
git switch docs/shablonlar-adr
git add .github/ISSUE_TEMPLATE docs/adr CONTRIBUTING.md
git commit -m "docs: issue shablonlari, ADR va muloqot qoidalari"
git push -u origin docs/shablonlar-adrCommit xabari o'zbekcha — loyiha tilida. Lekin qolip bir xil: tur, buyruq ruhidagi qisqa mazmun, nuqtasiz.
Kanon bu commitni sinov reposiga yubordi. Push chiqishidan faqat -> bor qatorlar qoldirildi. Birinchi va ikkinchi urinish bir xil tugadi:
! [remote rejected] docs/shablonlar-adr -> docs/shablonlar-adr (Internal Server Error)Uchinchi urinish:
* [new branch] docs/shablonlar-adr -> docs/shablonlar-adrHech narsa o'zgartirilmagan holda uchinchisi o'tdi. Internal Server Error — "serverning ichki xatosi": aybdor siz emas, GitHub. Qoida o'sha: holatni tekshirib, qayta urining.
PR ochildi va squash bilan qo'shildi (repo nomi login/vazifalar-api ga almashtirildi). Kanon tavsifni --body-file pr.md dan oldi — Yaxshi PR tayyorlash darsida aytilganidek, bu PR shablonini chetlab o'tadi. Siz pr.md ni shablon bo'limlari bo'yicha yozing yoki PR'ni brauzerda oching:
gh pr create --base main --head docs/shablonlar-adr \
--title "docs: issue shablonlari, ADR va muloqot qoidalari" \
--body-file pr.md
gh pr merge docs/shablonlar-adr --squash --delete-branchhttps://github.com/login/vazifalar-api/pull/17
#17 MERGED f12ef28Merge'dan keyin shablonlar haqiqatan main da ekanini API orqali tekshirdik:
gh api repos/login/vazifalar-api/contents/.github/ISSUE_TEMPLATE \
--jq '.[].name'config.yml
taklif.yml
xato.ymlNima bo'ldi? Uchala fayl main da — GitHub endi "New issue" bosilganda formalarni ko'rsatadi. Formalar orqali brauzerda issue yaratish kanonda sinalmadi. Hash va PR raqami sizda boshqacha bo'ladi.
10. Ko'p uchraydigan xatolar
10.1 O'tgan zamon, bosh harf va nuqta
Feat: Fixed Tasks. — uchta xato birdan. Davosi — "If applied, this commit will…" testi va qolip: tur va birinchi so'z kichik harf bilan, nuqtasiz (feat: fix tasks). Avtomatik tekshiruv — 3-mashqdagi hook.
10.2 Tarjimonning so'zma-so'z gapi
Fixed the bug which was in the function of calculating — tarjimon o'zbekcha gap tuzilishini ko'chirgan. Qisqa yozing: fix: correct total calculation. Ingliz texnik tilida qisqalik — odob.
10.3 Ko'p uzr
Sorry for my bad English, sorry if this is a stupid question… — o'quvchining vaqtini oladi va ishonchsiz ko'rinadi. Uzr kerak emas. Savolni aniq yozing.
10.4 Tanada nega yo'q
Sarlavha "nima" ni aytdi, tana bo'sh yoki sarlavhani takrorlaydi. Tana — nega: muammo, sabab, muqobil. Kanon namunasidagi "Found with git bisect" — o'quvchiga qayerdan boshlash kerakligini aytadi.
10.5 Ikki tilni aralashtirish
fix(ai): har modelga separate breaker — na o'zbekcha, na inglizcha. Loyiha bir tilni tanlaydi va unga amal qiladi.
11. Mashqlar
Mashqlar kurs/mashqlar/32/14-inglizcha/ da. 2-mashq yechimi Node 24.21.0 da, 3-mashq yechimi Git 2.54.0 da tekshirilgan (biz ishga tushirdik).
1-mashq (oson): bo'shliqlarni to'ldiring
fixedning buyruq maylidagi shakli —- Git hujjatidagi commit sarlavhasining yumshoq chegarasi (belgi) —
- Review izohida "merge'dan oldin hal bo'lishi shart" degan bezak —
- Standup: "#12 dagi review meni to'xtatib turibdi" —
I'mby the review on #12. - Issue shablonida "Takrorlash qadamlari" —
Yechim
- fix — "If applied, this commit will fix …".
- 50 — maqsad;
vazifalar-apida qattiq chegara 72. - blocking —
issue (blocking): …; teskarisi(non-blocking). - blocked — I'm blocked by — "… meni to'xtatib turibdi".
- Steps to reproduce — keyin Expected va Actual behavior.
2-mashq (o'rta): review izohini o'qish
izohniOqi(izoh) funksiyasini yozing. U Conventional Comments yorlig'ini va izoh merge'ni to'xtatadimi — shuni qaytarsin: { yorliq, toxtatadi }. Jamoa kelishuvi: issue, todo, chore — sukut bo'yicha to'xtatadi, qolganlari yo'q; bezak (blocking) yoki (non-blocking) sukutni almashtiradi. Yorliq bo'lmasa yoki noma'lum bo'lsa — { yorliq: null, toxtatadi: false }. Ishora: /^(\w+)(?: \(([\w-]+)\))?:/ — birinchi guruh yorliq, ikkinchisi bezak (RegExp asoslari); ro'yxatda borligini includes bilan tekshiring.
Yechim
const YORLIQLAR = ["praise", "nitpick", "suggestion", "issue",
"todo", "question", "thought", "chore", "note"];
const TOXTATADI = ["issue", "todo", "chore"];
function izohniOqi(izoh) {
const m = /^(\w+)(?: \(([\w-]+)\))?:/.exec(izoh);
if (!m || !YORLIQLAR.includes(m[1])) {
return { yorliq: null, toxtatadi: false };
}
const [, yorliq, bezak] = m;
let toxtatadi = TOXTATADI.includes(yorliq);
if (bezak === "blocking") toxtatadi = true;
if (bezak === "non-blocking") toxtatadi = false;
return { yorliq, toxtatadi };
}
const izohlar = [
"question: Could this map grow without bound?",
"suggestion (non-blocking): extract 4 into a constant.",
"issue: package.json says MIT, but LICENSE is missing.",
"nitpick (blocking): rename this variable.",
"praise: the default value is well explained.",
"Why did you do this?",
];
for (const i of izohlar) console.log(izohniOqi(i));Konsolda:
{ yorliq: 'question', toxtatadi: false }
{ yorliq: 'suggestion', toxtatadi: false }
{ yorliq: 'issue', toxtatadi: true }
{ yorliq: 'nitpick', toxtatadi: true }
{ yorliq: 'praise', toxtatadi: false }
{ yorliq: null, toxtatadi: false }Uchinchi izoh — kanondagi haqiqiy topilma (PR #15: "package.json da MIT, LICENSE fayli yo'q"), inglizchaga o'girilgan. U to'xtatadi — issue. To'rtinchisi qiziq: nitpick odatda mayda, lekin muallif (blocking) qo'ygan — bezak yutadi. Oxirgisida yorliq yo'q — bunday izohdan muallif muhimlikni taxmin qilishga majbur. Yorliqlarning foydasi aynan shu.
3-mashq (qiyin): commit-msg hook
Inglizcha sarlavhani commitdan oldin tekshiradigan Git hook yozing (Git hooklar darsi: commit-msg hook commit xabari fayl yo'lini birinchi argument sifatida oladi, 0 dan boshqa kod commitni to'xtatadi).
- Yangi repo oching:
git init -q -b main ingliz. .git/hooks/commit-msgyozing: sarlavhaning birinchi qatorini oling,:dan keyingi birinchi so'z-edyoki-ingbilan tugasa yokiadds,fixes,updates,removesbo'lsa — xabar chiqarib,exit 1.- To'rtta commitga urining:
docs: added readme,docs: add readme,docs: updating contributing section,docs: describe how to contribute. Har biridan keyinecho "exit: $?". git log --format='%h %s'bilan natijani ko'rsating.
Ishora: shell'da ${sarlavha#*: } — birinchi : gacha bo'lgan qismni kesadi, ${matn%% *} — birinchi bo'sh joydan keyingisini. Andozani case "$soz" in *ed|*ing) … bilan tekshiring. SHA'lar darsdagidek chiqishi uchun sanani qotiring: export GIT_AUTHOR_DATE="2026-11-04T10:00:00+05:00" va GIT_COMMITTER_DATE ham shunday.
Yechim
git init -q -b main ingliz && cd ingliz
git config user.name "Aziz Karimov"
git config user.email "aziz@example.com"
export GIT_AUTHOR_DATE="2026-11-04T10:00:00+05:00"
export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
cat > .git/hooks/commit-msg <<'HOOK'
#!/bin/sh
# Sarlavhadagi birinchi so'z buyruq maylida bo'lsin
sarlavha=$(head -n 1 "$1")
matn=${sarlavha#*: }
soz=${matn%% *}
case "$soz" in
*ed|*ing|adds|fixes|updates|removes)
echo "commit-msg: \"$soz\" — buyruq mayli emas (add, fix)" >&2
exit 1 ;;
esac
HOOK
chmod +x .git/hooks/commit-msg
echo "# vazifalar-api" > README.md
git add README.md
git commit -q -m "docs: added readme"
echo "exit: $?"
git commit -q -m "docs: add readme"
echo "exit: $?"
echo "## Contributing" >> README.md
git commit -q -am "docs: updating contributing section"
echo "exit: $?"
git commit -q -am "docs: describe how to contribute"
echo "exit: $?"
git log --format='%h %s'Biz ishga tushirdik:
commit-msg: "added" — buyruq mayli emas (add, fix)
exit: 1
exit: 0
commit-msg: "updating" — buyruq mayli emas (add, fix)
exit: 1
exit: 0
a3df0ad docs: describe how to contribute
d31114b docs: add readmeIkki urinish rad etildi, ikkitasi o'tdi — tarixda faqat buyruq maylidagi sarlavhalar. Rad etilgan commit umuman yaratilmadi: hook exit 1 qaytarganda Git commitni bekor qiladi, fayl esa staging'da qoladi. Shuning uchun ikkinchi git commit xuddi o'sha faylni qayta oldi.
Cheklovi: .git/hooks/ git'ga kirmaydi — har dasturchi hookni o'zi o'rnatadi. Jamoada buni Husky yoki CI'dagi commitlint hal qiladi.
12. Real ishda
- Qayerda uchraydi: xalqaro kompaniyalar va open source loyihalarda yozma ingliz tili har kuni kerak: commit, PR, review, issue, Slack. O'zbekistondagi ko'p jamoalarda ham kod va commitlar inglizcha yoziladi — xorijiy mijoz yoki kelajakdagi xodim uchun.
- Masofaviy ish: Remote va xalqaro ish darsida vakansiya va shartnomalarni ko'rasiz — u yerda bu darsdagi qoliplar birinchi suhbatdan kerak bo'ladi.
- Open source: Open source: hissa qo'shish va litsenziyalar darsida haqiqiy loyihaga PR yuborasiz — inglizcha sarlavha va tavsif bilan.
- Intervyu savollari: "Tell me about yourself", "Tell me about a difficult bug", "How do you handle disagreement in code review?"
Xulosa
- Commit va PR sarlavhasi — buyruq maylida, kichik harf, nuqtasiz, ≈ 50 belgi:
fix: use …. - Commit tanasi — nega, oddiy gaplar bilan; o'tgan zamon to'g'ri.
- PR tavsifi: What, Why, How tested — dalil bilan, taxmin bilan emas.
- Review: Conventional Comments yorliqlari (
question:,suggestion (non-blocking):) va yumshoq ohang (could, might). - Standup: "Yesterday I…, Today I'll…, I'm blocked by…"; tushunmasangiz — "Just to confirm: …".
- Intervyu: STAR tartibidagi bitta raqamli hikoya; bilmasangiz — halol "I'm not sure, but I would start by…".
Keyingi dars: Agile va Scrum — jamoa ishni qanday rejalashtiradi: sprint, backlog, rollar va marosimlar; vazifalar-api uchun birinchi backlog qoralamasini yozamiz (GitHub'da issue'larni keyingi darslarda yaratamiz).
Manbalar
- Git hujjati — SubmittingPatches ("imperative mood", 50 belgi): https://github.com/git/git/blob/master/Documentation/SubmittingPatches (2026-11-04 da ochib o'qildi)
- Conventional Comments: https://conventionalcomments.org/ (2026-11-04 da ochib o'qildi)
- Conventional Commits 1.0.0: https://www.conventionalcommits.org/en/v1.0.0/ (2026-11-04 da ochildi)
- Chris Beams — How to Write a Git Commit Message: https://cbea.ms/git-commit/ (2026-11-04 da ochib o'qildi)
- Council of Europe — CEFR darajalari: https://www.coe.int/en/web/common-european-framework-reference-languages/level-descriptions (2026-11-04: avtomatik so'rovga 403; daraja nomlari ikkilamchi manbalar bilan solishtirildi)
- Kanon tajribasi (IlmHamroh, 2026-11-04): Git 2.54.0, gh 2.92.0; PR #9 review izohlari, PR #17 va shablonlar ro'yxati, push'dagi
Internal Server Error. 2- va 3-mashq yechimlari — biz ishga tushirdik (2026-11-04).
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!