---
title: 'Sürekli Öğrenme Disiplini'
source: 'https://academia.sh/tr/kurslar/mimarin-rolu/surekli-ogrenme-disiplini'
course: 'Mimarın Rolü'
language: tr
updated: '2026-08-17T18:10:32+00:00'
license: 'CC BY-SA 4.0'
---

# Sürekli Öğrenme Disiplini

Bilgi tazeliğinin bir bütçe dağıtımı olarak ölçülmesi: kararın dayandığı bilginin geçerlilik süresine bağlanması, yenilenmeyen dayanağa yaslanan kararın yanlış çıkma oranının 72 aylık bir koşumda sayılması ve aynı yıllık 72 saatin eşit, eskimeye göre ve en bayat önce dağıtıldığında oranı 0,3958, 0,3715 ve 0,2222 vermesi.

Önceki ders bir aday tablosu kurdu ve bir kazanan çıkardı. Tablonun her hücresi ölçüldüğü gün
doğruydu: adayın yaşı, kırıcı sürüm sıklığı, uyarlayıcı sayısı, belgelenmiş işlev oranı. Karar
verildi, tablo yerinde duruyor. Tablonun dayandığı sayılar durmuyor.

Bu, bütün kursun ölçtüğü kararlar için geçerlidir. Bir denge kararının ağırlıkları, bir
sadeleştirmenin arızi karmaşıklık payı, bir geri alma maliyeti — hepsi bir ölçümden gelir ve
her ölçüm bir tarihe aittir. Bu son ders bunu bir modele çevirir: bir kararın **dayanağının**
geçerlilik süresi vardır, süresi geçmiş dayanağa yaslanan kararın yanlış çıkma olasılığı
yükselir ve öğrenmeye ayrılan saatler bu olasılığı düşürür. Öğrenme bir erdem değil, bir
**bütçe dağıtımıdır**; ve dağıtımın kendisi, bütçenin büyüklüğünden daha çok fark yaratır.

## Dayanağın Geçerlilik Süresi

Modelde her karar üç **dayanağa** yaslanır. Bir dayanak bir bilgi parçasıdır ve kategorisine
göre yaşlanır.

**MP16: bir dayanağın geçerlilik süresi kategorisine bağlıdır.** Bir ölçümden gelen sayı altı
ay, bir aracın olgunluk ve ekosistem profili on sekiz ay, yapısal bir ilke yüz yirmi ay geçerli
kalır. Tazeleme maliyetleri de ayrışır: bir ölçümü yeniden koşturmak bir saat, bir aracın
profilini yeniden çıkarmak dört saat, yapısal bir ilkeyi yeniden gözden geçirmek on iki saat.

**MP17: yanlış çıkma olasılığı dayanak tazeyken tabandadır ve yaş geçerlilik süresini aştıkça
artar**; yaş ömrün üç katına ulaştığında olasılık bire çıkar. Taban 0,05'tir, yani taze bir
dayanak bile yanılabilir. Bir karar üç dayanağının hepsi doğru çıktığında doğrudur.

```js
// ogrenme/model.mjs — bilgi tazeliginin surec ici modeli. Gercek kurum, arac ve kisi yoktur.
// Sure olculmez; ay, karar, bayat dayanak ve yanlis cikan karar sayilir. Rastgelelik kendi
// yazilan bir uretecten gelir ve tohum gorunurdur.

// MP16: bir dayanagin gecerlilik suresi kategorisine baglidir (ay).
export const KATEGORI = {
  olcum: { adet: 30, omur: 6, tazelemeSaat: 1 },
  arac: { adet: 20, omur: 18, tazelemeSaat: 4 },
  yapi: { adet: 10, omur: 120, tazelemeSaat: 12 },
};

export const AY = 72, AYLIK_KARAR = 4, DAYANAK_BASINA_KARAR = 3, TABAN = 0.05;

export function uretec(tohum) {
  let t = tohum;
  return () => ((t = (t * 1103515245 + 12345) % 2147483648) / 2147483648);
}

export function dayanaklar(rast) {
  const d = [];
  for (const [ad, k] of Object.entries(KATEGORI))
    for (let i = 0; i < k.adet; i++) d.push({ kategori: ad, yas: rast() * k.omur });
  return d;
}

// MP17: yanlis cikma olasiligi dayanak tazeyken TABAN'dir ve yas gecerlilik suresini astikca
// artar; yas omrun uc katina ulastiginda 1'e cikar.
export const hataOlasiligi = (d) => {
  const omur = KATEGORI[d.kategori].omur;
  return TABAN + (1 - TABAN) * Math.min(1, Math.max(0, (d.yas - omur) / (2 * omur)));
};

// Dagitim stratejileri: aylik butceyi kategorilere boler. Pay toplami 1'dir.
export const DAGITIM = {
  "esit": () => ({ olcum: 1 / 3, arac: 1 / 3, yapi: 1 / 3 }),
  "eskimeye gore": () => {
    const h = Object.fromEntries(Object.entries(KATEGORI).map(([a, k]) => [a, k.adet / k.omur]));
    const t = Object.values(h).reduce((x, y) => x + y, 0);
    return Object.fromEntries(Object.entries(h).map(([a, v]) => [a, v / t]));
  },
  "yalniz olcum": () => ({ olcum: 1, arac: 0, yapi: 0 }),
  "yalniz yapi": () => ({ olcum: 0, arac: 0, yapi: 1 }),
};

// Kategori payi olmadan, en bayat dayanaktan baslayarak harcayan strateji.
const enBayatOnce = (d, butce) => {
  let kalan = butce;
  for (const x of [...d].sort((a, b) =>
      b.yas / KATEGORI[b.kategori].omur - a.yas / KATEGORI[a.kategori].omur)) {
    const m = KATEGORI[x.kategori].tazelemeSaat;
    if (m > kalan) continue;
    kalan -= m; x.yas = 0;
  }
  return kalan;
};

// Kategori payiyla harcayan strateji: her kategoride en eski dayanak once tazelenir.
const payaGore = (d, butce, pay, kasa) => {
  for (const ad of Object.keys(KATEGORI)) {
    kasa[ad] = (kasa[ad] ?? 0) + butce * pay[ad];
    const m = KATEGORI[ad].tazelemeSaat;
    const sirali = d.filter((x) => x.kategori === ad).sort((a, b) => b.yas - a.yas);
    for (const x of sirali) {
      if (m > kasa[ad]) break;
      kasa[ad] -= m; x.yas = 0;
    }
  }
};

export function kosum({ strateji, butce, tohum = 20260801 }) {
  const rast = uretec(tohum);
  const d = dayanaklar(rast);
  const kasa = {};
  let karar = 0, yanlis = 0, bayatDayanak = 0, kullanilanDayanak = 0;
  for (let ay = 0; ay < AY; ay++) {
    for (const x of d) x.yas += 1;
    if (butce > 0 && strateji === "en bayat once") enBayatOnce(d, butce);
    else if (butce > 0) payaGore(d, butce, DAGITIM[strateji](), kasa);
    for (let i = 0; i < AYLIK_KARAR; i++) {
      let dogru = 1;
      for (let j = 0; j < DAYANAK_BASINA_KARAR; j++) {
        const x = d[Math.floor(rast() * d.length)];
        kullanilanDayanak += 1;
        if (x.yas > KATEGORI[x.kategori].omur) bayatDayanak += 1;
        dogru *= 1 - hataOlasiligi(x);
      }
      karar += 1;
      if (rast() > dogru) yanlis += 1;
    }
  }
  return { karar, yanlis, oran: yanlis / karar, bayatOran: bayatDayanak / kullanilanDayanak,
    yillikSaat: butce * 12 };
}
```

## Aynı Bütçe, Farklı Dağıtım

Altı saat aylık bütçe, yılda yetmiş iki saattir. Aşağıdaki koşum bu saatleri beş ayrı biçimde
dağıtır ve altmış dayanak ile 288 karar üzerinde yanlış çıkan kararı sayar.

```js
// ogrenme/butce.mjs — ayni saat butcesi farkli dagitilinca yanlis cikan karar orani degisir
import { KATEGORI, AY, AYLIK_KARAR, TABAN, DAYANAK_BASINA_KARAR, DAGITIM, kosum } from "./model.mjs";

const BUTCE = 6;
console.log(`ay ${AY}, aylik karar ${AYLIK_KARAR}, toplam karar ${AY * AYLIK_KARAR}, tohum 20260801`);
console.log(`dayanak: ${Object.entries(KATEGORI).map(([a, k]) => `${a} ${k.adet} (omur ${k.omur} ay, tazeleme ${k.tazelemeSaat} saat)`).join("; ")}\n`);

const sifir = kosum({ strateji: "esit", butce: 0 });
console.log(`butce ${BUTCE} saat/ay = ${BUTCE * 12} saat/yil`);
console.log("strateji           olcum   arac   yapi   bayat dayanak  yanlis karar  oran   dususu");
console.log("----------------- ------ ------ ------ --------------- ------------- ------ -------");
console.log(`${"butce yok".padEnd(17)} ${"-".padStart(6)} ${"-".padStart(6)} ${"-".padStart(6)} ` +
  `${sifir.bayatOran.toFixed(4).padStart(15)} ${String(sifir.yanlis).padStart(13)} ` +
  `${sifir.oran.toFixed(4).padStart(6)} ${"-".padStart(7)}`);
for (const ad of [...Object.keys(DAGITIM), "en bayat once"]) {
  const r = kosum({ strateji: ad, butce: BUTCE });
  const p = DAGITIM[ad] ? DAGITIM[ad]() : null;
  const s = (k) => (p ? p[k].toFixed(2) : "-").padStart(6);
  console.log(`${ad.padEnd(17)} ${s("olcum")} ${s("arac")} ${s("yapi")} ` +
    `${r.bayatOran.toFixed(4).padStart(15)} ${String(r.yanlis).padStart(13)} ` +
    `${r.oran.toFixed(4).padStart(6)} ${`${((1 - r.oran / sifir.oran) * 100).toFixed(1)}%`.padStart(7)}`);
}

console.log(`\nbutce buyudukce (strateji: eskimeye gore):`);
console.log("saat/ay  saat/yil  bayat dayanak  yanlis karar  oran   saat basina dusen hata");
console.log("------- --------- --------------- ------------- ------ ----------------------");
let oncekiOran = sifir.oran, oncekiSaat = 0;
for (const b of [0, 2, 4, 6, 12, 24, 48]) {
  const r = kosum({ strateji: "eskimeye gore", butce: b });
  const marj = b === 0 ? null : (oncekiOran - r.oran) / ((b - oncekiSaat) * 12);
  console.log(`${String(b).padStart(7)} ${String(b * 12).padStart(9)} ${r.bayatOran.toFixed(4).padStart(15)} ` +
    `${String(r.yanlis).padStart(13)} ${r.oran.toFixed(4).padStart(6)} ` +
    `${(marj === null ? "-" : marj.toExponential(2)).padStart(22)}`);
  oncekiOran = r.oran; oncekiSaat = b;
}

console.log(`\ntohum duyarliligi (butce ${BUTCE}, strateji: eskimeye gore):`);
console.log("tohum       oran");
for (const t of [20260801, 991, 4242]) {
  const r = kosum({ strateji: "eskimeye gore", butce: BUTCE, tohum: t });
  console.log(`${String(t).padStart(9)} ${r.oran.toFixed(4).padStart(9)}`);
}

console.log(`\ntaban: butun dayanaklar taze olsa bile karar basina yanlislik = ${(1 - (1 - TABAN) ** DAYANAK_BASINA_KARAR).toFixed(4)}`);
```

```
ay 72, aylik karar 4, toplam karar 288, tohum 20260801
dayanak: olcum 30 (omur 6 ay, tazeleme 1 saat); arac 20 (omur 18 ay, tazeleme 4 saat); yapi 10 (omur 120 ay, tazeleme 12 saat)

butce 6 saat/ay = 72 saat/yil
strateji           olcum   arac   yapi   bayat dayanak  yanlis karar  oran   dususu
----------------- ------ ------ ------ --------------- ------------- ------ -------
butce yok              -      -      -          0.8461           261 0.9063       -
esit                0.33   0.33   0.33          0.4039           114 0.3958   56.3%
eskimeye gore       0.81   0.18   0.01          0.2662           107 0.3715   59.0%
yalniz olcum        1.00   0.00   0.00          0.3403           150 0.5208   42.5%
yalniz yapi         0.00   0.00   1.00          0.7778           260 0.9028    0.4%
en bayat once          -      -      -          0.2940            64 0.2222   75.5%

butce buyudukce (strateji: eskimeye gore):
saat/ay  saat/yil  bayat dayanak  yanlis karar  oran   saat basina dusen hata
------- --------- --------------- ------------- ------ ----------------------
      0         0          0.8461           261 0.9063                      -
      2        24          0.6227           206 0.7153                7.96e-3
      4        48          0.4144           138 0.4792                9.84e-3
      6        72          0.2662           107 0.3715                4.48e-3
     12       144          0.2130            67 0.2326                1.93e-3
     24       288          0.0648            49 0.1701                4.34e-4
     48       576          0.0475            47 0.1632                2.41e-5

tohum duyarliligi (butce 6, strateji: eskimeye gore):
tohum       oran
 20260801    0.3715
      991    0.3854
     4242    0.3715

taban: butun dayanaklar taze olsa bile karar basina yanlislik = 0.1426
```

Bütün sayılar bu koşuma aittir; üreteç kendi yazılmıştır ve tohum görünür. Tohum
duyarlılığı satırları oranın 0,3715 ile 0,3854 arasında oynadığını gösteriyor, yani
karşılaştırmalar tohuma bağlı değil.

## Dağıtımın Sonucu

İlk tablo, aynı yetmiş iki saatin nereye konduğuna göre yanlış karar oranını 0,9028 ile 0,2222
arasında herhangi bir yere koyabildiğini gösteriyor. Aradaki fark dört kattan fazla ve bütçe
hiç değişmedi.

En keskin satır `yalniz yapi`. Bütün bütçe yapısal ilkelere harcandığında oran 0,9028; hiç
bütçe olmadığındaki 0,9063'ten yalnız yüzde 0,4 daha iyi. Yapısal ilkeler yüz yirmi ay geçerli
kaldığı için yetmiş iki aylık koşumda zaten bayatlamıyorlar; onları tazelemek hiçbir kararı
kurtarmıyor. Öğrenmenin en saygın görünen biçimi, bu modelde ölçülebilir hiçbir şey
değiştirmiyor.

Karşı uç da tek başına doğru değil. `yalniz olcum` bütçenin tamamını en hızlı eskiyen kategoriye
koyuyor ve oranı 0,5208'e indiriyor — eşit dağıtımın 0,3958'inden kötü. Bir kategoriyi tamamen
ihmal etmek, oradaki dayanakların hepsini bayatlatıyor.

`eskimeye gore` dağıtımı payları kategorinin eskime hızından çıkarıyor: ölçüm 0,81, araç 0,18,
yapı 0,01. Sonuç 0,3715 ile eşit dağıtımdan iyi ama en iyisi değil. **`en bayat once`** hiç pay
hesaplamıyor; her ay elindeki bütçeyi, geçerlilik süresini en çok aşmış dayanaktan başlayarak
harcıyor ve oranı **0,2222**'ye indiriyor — yanlış karar sayısı 107 yerine 64.

Sabit pay, bir kategoride harcanacak bayat dayanak kalmadığında bile o saati oraya harcamak
zorunda; `en bayat once` bütün dayanakları tek sırada tutuyor. Bir yan ölçüsü de var: bayat
dayanak oranı `eskimeye gore` ile 0,2662, `en bayat once` ile 0,2940 — daha **çok** bayat
dayanak kalmasına rağmen daha **az** yanlış karar çıkıyor. Bayat dayanak saymak yeterli
değildir; ne kadar bayat olduğu sayılmalıdır.

## Bütçenin Sınırı

İkinci tablo bütçeyi büyütüyor. Yıllık 24 saatten 48 saate çıkıldığında saat başına düşen hata
kazancı 7,96e-3'ten 9,84e-3'e yükseliyor; ondan sonra sürekli düşüyor ve 288 saatten 576 saate
geçişte 2,41e-5'e iniyor. O son adımda yılda 288 saat daha harcanıyor ve oran yalnız 0,0069
azalıyor.

Sebebi son satırda yazılı: taban 0,1426. Bütün dayanaklar taze olsa bile üç dayanağa yaslanan
bir kararın yanlış çıkma olasılığı bu kadardır, çünkü taze bir ölçüm de yanılabilir. Öğrenme
bütçesi bu tabanı azaltamaz; yalnız bayatlıktan gelen fazlalığı kesebilir.

Öğrenme kararı böylece iki sayıya iner: bütçe hangi noktada tabana yaklaşıyor ve eldeki bütçe
hangi kurala göre dağıtılıyor. İkincisi daha çok fark yaratıyor — yetmiş iki saatte dağıtım
kuralını değiştirmek oranı 0,3958'den 0,2222'ye indiriyor, bütçeyi yetmiş iki saatten yüz kırk
dört saate çıkarmak ise 0,3715'ten 0,2326'ya.

## Özet

- Bir kararın dayanağı geçerlilik süresi olan bir nesnedir; süre kategoriye bağlıdır (ölçüm 6,
  araç 18, yapı 120 ay) ve süresi aşıldıkça kararın yanlış çıkma olasılığı tabandan bire doğru
  yükselir (MP16, MP17).
- Yetmiş iki aylık koşumda hiç öğrenme bütçesi olmayan düzen 288 kararın 261'ini yanlış çıkardı
  (oran 0,9063); aynı bütçeyle yalnız yapısal ilkeleri tazelemek oranı 0,9028'e, yani yüzde 0,4
  düşürdü.
- Aynı yıllık 72 saat, dağıtıma göre 0,3958 (eşit), 0,3715 (eskimeye göre) ve 0,2222 (en bayat
  önce) verdi. Öğrenme bir bütçe dağıtımıdır ve dağıtım kuralı bütçenin kendisinden daha çok
  fark yaratır.
- Bayat dayanak sayısı tek başına yanıltıcıdır: en iyi sonucu veren strateji daha çok bayat
  dayanak bıraktı (0,2940'a karşı 0,2662) ama yanlış kararı 107'den 64'e indirdi.
- Bütçe büyütmenin getirisi azalır ve bir tabanda durur: 0,1426, bütün dayanaklar taze olsa bile
  kalan yanlışlık payıdır. Yıllık 288 saatten sonra harcanan her saatin karşılığı 2,41e-5'tir.

## Kurs Kapanışı

| Ders | Modellenen nesne | Ölçülen nicelik | Karşılaştırmanın sonucu |
|---|---|---|---|
| Yazılım Mimarisi Tanımı | Karar–modül eşlemesi ve bağımlı kapanış | Geri alma maliyeti (erişilen dosya) | Gövde büyüklüğü sıralaması ile geri alma sıralaması 55 çiftin 31'inde ters düştü |
| Mimarlık Düzeyleri | Karar kapsamı ve dağıtım birimi eşlemesi | Kapsanan birim, habersiz birim, yinelenen karar | Yerel düzen 47 habersiz birim ve 31 çelişen gerçekleştirim; merkezî düzen 0 çelişki ama 99 danışma |
| Mimarın Sorumlulukları | Sorumluluk matrisi ve makinece denetlenebilir kısıt | Kodda karşılığını yitiren karar oranı | Gözetimsiz düzende uygulanma yüzde 25, gözetimli düzende yüzde 88 |
| Mimar ve Geliştirici İlişkisi | Karar verenin bildiği ithal grafiği ile gerçek grafik | Ölü doğan karar oranı ve bilgi farkı (kenar) | Koda dokunmayan mimarda 18 kararın 8'i ölü doğdu, dokunanda hiç; bilgi farkı 13,8 kenara karşı 3,1 |
| Danışmanlık ve Koçluk | Karar aktarım biçimi ve kalıp/kenar durum ayrımı | Doğru uygulanma oranı ve aktarım saati başına artış | 168 durumda buyruk yüzde 68, yazılı gerekçe yüzde 85, birlikte çalışma yüzde 87; saat başına artış 3,71'e karşı 0,55 |
| Denge Kurmak | Alternatif–nitelik tablosu ve ağırlık vektörü | Kazananı değiştirebilen ama kaynağı yazılmamış ağırlık sayısı | 1771 vektörde kazanan bölgeler yüzde 17,7 ve yüzde 68,4; yazılmamış ağırlık 1'den 0'a indi |
| Basitleştirmek | Modül grafiği ile gereksinim grafiği | Özsel ve arızi karmaşıklık payı | Sadeleştirme toplamı 37'den 26'ya indirdi, değişikliğin yayıldığı modül 13'ten 16'ya çıktı |
| Karar Verme | Karar kümesi ve bağımlılık kümesi | Geri alma maliyeti ve bekleme süresi | `hepsine-uzun` politikası 58,70 adam-gün ve 120 gün; eşiği kırılma noktasından türeten politika 38,70 adam-gün ve 55 gün |
| Paydaş Yönetimi | Paydaş sözlüğü, ilgi kümesi ve ifade dizisi | Yanıtlanan soru, onay turu, atlanan kısıt | Teknik anlatım 27 soru ve 8 tur; sonuç odaklı anlatım 0 soru ama 4 sürprizle toplam 7 tur; kısıt taşıyan anlatım 3 tur |
| Teknoloji Değerlendirme | Aday özellik kümesi ve on iki modüllük kaynak ağacı | Çıkış maliyeti (saat), ağırlığa göre kazanan | Beş ağırlık kümesi üç ayrı kazanan verdi; sarmalayıcı kod payını 33,5 saatten 4,0 saate indirdi, veri payı 24,0 saat değişmedi |
| Sürekli Öğrenme Disiplini | Dayanak yaşı ve geçerlilik süresi | Yanlış çıkan karar oranı | Aynı yıllık 72 saat dağıtıma göre 0,3958, 0,3715 ve 0,2222 verdi; bütçesiz düzen 0,9063 |

On bir satırın ortak biçimi kursun kuralıdır: **bir pratiğin değeri ancak ölçülen farkla
savunulur.** Hiçbir derste "mimar dengeli olmalıdır", "mimar sade tasarlamalıdır", "mimar
iletişim kurmalıdır" cümlesi bir sonuç sayılmadı. Her seferinde pratiğin ürünü bir veri yapısına
çevrildi, iki uygulama biçimi aynı girdide koşturuldu ve aradaki fark bir sayı olarak yazıldı.
Fark ölçülemiyorsa ortada savunulacak bir pratik de yoktur.

Bu kurs boyunca kararlar verildi: dengeler kuruldu, alternatifler elendi, eşikler türetildi,
kısıtlar paydaşlara taşındı, adaylar ağırlıklandırıldı ve dayanaklar tazelendi. Hepsinin ortak
bir kusuru var. Hepsi **kararı verenin belleğinde** duruyor. Ağırlık vektörünün kaynağı, elenen
alternatifin neden elendiği, eşiğin hangi kırılma noktasından geldiği, sarmalayıcının hangi
başabaş olasılığıyla yazıldığı — bunların hiçbiri koda yazılmadı. Altı ay sonra "bu neden böyle"
diye soran birine verilecek bir şey yok. Sıradaki kurs, **Mimari Karar ve Dokümantasyon**,
buradan başlar.
