Ders 06 / 15
Sorun Giderme İçeriği
Belirtiyle gelen okur kavramdan başlayan metnin 17 arızanın yalnız 8'ine ulaşır ve 51 kararın 8'ini karşılar (0,1569); belirti–neden–çözüm düzeni 17'sine birden ulaşıp 51'ini karşılar, ama sessiz bayatlayan 39 iddia hiç belirti üretmediği için sorun gidermenin de dışında kalır.
İçindekiler
Önceki ders okurun iki karşılıksız sorusundan birini kapattı: sürüm notu, bayat bir iddianın ne zaman düştüğünü tarihlenebilir kıldı. İkincisi duruyor ve ötekinden çok daha sık sorulur: “bu neden çalışmıyor?”
Bu soruyla gelen okurun elinde bir konu adı yoktur. Bir sürüm numarası da yoktur. Elinde yalnız ürünün ona gösterdiği bir belirti vardır: bir hata satırı, boş bir çıktı, beklenenden başka bir sonuç. Bu ders o belirtiden başlayan bir metnin ne kadarını karşıladığını, kavramdan başlayan bir metnin ise ne kadarını karşıladığını ölçer.
Belirtiyle Gelen Okur
Dört türün ve sürüm notunun ortak bir varsayımı vardı: okur ne aradığını adlandırabilir. Öğreticiye gelen “başlamak istiyorum” der, referansa gelen “şu alanın tipi” der, sürüm notuna gelen “altıncı sürümde ne oldu” der. Beş metnin beşi de bir ad üzerinden indekslenir.
Arızayla gelen okur bunu yapamaz. Gördüğü şey bir ad değil, bir sonuçtur — ve o sonucun hangi kavrama ait olduğunu bilseydi zaten arızayı çözmüş olurdu. Uyuşmazlık buradadır: dokümanın indeksi kavramdır, okurun indeksi belirtidir. İki indeks arasındaki çeviriyi okurun yapması beklenir ve okur tam olarak o çeviriyi yapamadığı için oradadır.
Sorun giderme içeriği, indeksi çeviren metindir. Ayrı bir tür olmasının nedeni farklı bilgi taşıması değil — taşıdığı bilginin çoğu zaten açıklamada ve referansta vardır. Ayrı olmasının nedeni farklı indekslenmesidir: girişleri belirtiden başlar.
Belirti, Neden, Çözüm
Sorun giderme girişinin üç bölümü vardır ve üçü okurun üç ayrı gereksinimini karşılar.
# kurgu ürünün sorun giderme bölümünden bir giriş
# örnek metin, çalıştırılmamıştır
belirti `istasyon baslat` komutu şunu yazıp çıkıyor:
"bilinmeyen seçenek: --aralik"
neden Örnekleme aralığı artık çağrı seçeneğiyle değil, profil
alanıyla veriliyor; eski seçenek kaldırıldı.
çözüm Aralık, profil dosyasındaki `ornekleme` alanına yazılır
ve komut seçeneksiz çalıştırılır.
Belirti okurun tanıma gereksinimini karşılar: gördüğü şey bilinen bir arıza mı, yoksa kendi kurulumundaki bir tuhaflık mı? Bu, sanıldığından önemli bir yanıttır; okurun saatlerini yiyen şey çoğu zaman arızanın kendisi değil, arızanın tanınıp tanınmadığını bilmemesidir. Neden okurun neden gereksinimini karşılar. Çözüm okurun eylem gereksinimini karşılar.
Belirti bölümünün yazımı bu üçünün en zorudur, çünkü okurun gördüğü biçimde yazılmak zorundadır. “Aralık seçeneği kaldırıldı” bir belirti değil, bir nedendir; okur arama kutusuna onu yazmaz. Okurun yazacağı şey ekranda gördüğü satırdır. Sorun giderme içeriğinin en sık kaçırdığı nokta budur: giriş, doğru bilgiyi okurun aramayacağı bir adla başlıklandırır ve bulunmaz.
Kavramdan Başlamanın Bedeli
Aynı bilginin kavramdan başlayan bir sürümü de vardır ve genellikle zaten yazılmıştır: açıklama metni örnekleme aralığının ne olduğunu ve nereden verildiğini anlatır. Okur o metne ulaşabilseydi arızayı çözerdi.
Ulaşabilmesi bir koşula bağlıdır: arızanın kendisinin, değişen şeyi adlandırması.
“bilinmeyen seçenek: –aralik” satırı adlandırır — okur --aralik dizgisini alır, dokümanda
arar ve açıklamaya düşer. Ama her arıza böyle konuşmaz. Adımların sırası değiştiğinde
çıkan şey bir ad değil, bir yokluktur: komut çalışır, hata vermez, beklenen sonucu üretmez.
Okurun elinde arayacak bir dizgi yoktur ve kavram indeksine giremez.
Ölçüm bu ayrımı sayar. İmza ve ad yüzeylerine bağlı arızalar kendini adlandırır; akış yüzeyine bağlı olanlar adlandırmaz.
Ölçümün varsayımları:
- DT47 — Ölçülen küme kursun kurgu kümesidir: 56 iddia, dört tür, dört yüzey, 17 gömülü örnek. Karışım ve yüzey sıklıkları değiştirilmez.
- DT48 — Ölçüm on ikinci sürümde yapılır; orada iddiaların tamamı bayattır ve sorun giderme içeriğinin ulaşabileceği en geniş küme oluşur.
- DT49 — Bir belirti, ancak çalıştırılabilir örneğe gömülü bir iddia bayatlayınca doğar. Gömülü olmayan bir iddia yanlışlandığında ürün hiçbir şey göstermez.
- DT50 — Her belirti tek bir sorun giderme girişine karşılık gelir; iki iddianın aynı belirtiyi vermesi bu ölçümde yoktur.
- DT51 — Okurun bir arıza karşısında üç gereksinimi vardır: tanıma, neden, eylem. Bunlar kursun altı okur sorusundan ayrıdır ve tek bir arızanın içindedir.
- DT52 — Kavramdan başlayan metin kavram üzerinden indekslenir; okur ancak arıza değişen şeyi adlandırıyorsa girişe ulaşır.
- DT53 — İmza ve ad yüzeylerine bağlı arızalar kendini adlandırır (eksik alan, bilinmeyen seçenek, bulunamayan kod); akış yüzeyine bağlı olanlar adlandırmaz.
- DT54 — Belirtiden başlayan metin belirti üzerinden indekslenir; okur belirtiyi zaten elinde tuttuğu için girişlerin tamamına ulaşır.
- DT55 — Ulaşılan bir giriş, yalnız taşıdığı bölümlerin karşıladığı gereksinimleri kapatır; taşımadığı bölüm okuru başka bir metne gönderir ve bu ölçümde karşılanmamış sayılır.
- DT56 — Kavramdan başlayan metin yalnız neden bölümünü taşır; açıklamanın işi eylem vermek değildir ve bu bir kusur olarak değil, tür tanımı olarak alınır.
- DT57 — Karar ölçeği belirti sayısı × gereksinim sayısıdır; her belirtinin her gereksinimi ayrı bir karardır.
- DT58 — Kümenin çözünürlüğü iddia ölçeğinde 1/56, karar ölçeğinde 1/51’dir.
Ölçüm
"""Sorun giderme icerigi: belirtiden baslayan metin ile kavramdan baslayan. Bolum 1 - bayat iddialarin kaci belirti uretiyor, kaci hic uretmiyor. Bolum 2 - uc metin duzeninin ulastigi belirti ve karsiladigi okur gereksinimi. """ TURLER = { "öğretici": {"akis": 9, "imza": 3, "ad": 2, "kavram": 1}, "nasıl yapılır": {"akis": 6, "imza": 5, "ad": 2, "kavram": 1}, "açıklama": {"akis": 1, "imza": 1, "ad": 1, "kavram": 9}, "referans": {"akis": 0, "imza": 13, "ad": 2, "kavram": 0}, } SIKLIK = {"imza": 2, "akis": 3, "ad": 5, "kavram": 12} ORNEKLI = {"öğretici": 0.60, "nasıl yapılır": 0.70, "açıklama": 0.10, "referans": 0.00} SURUM = 12 # Arizanin kendisi degisen seyi adlandiriyor mu: okur kavrami buradan bulur. KENDINI_ADLANDIRAN = {"imza", "ad"} # Okurun bir ariza karsisindaki uc gereksinimi. GEREKSINIM = ("tanıma", "neden", "eylem") # Metin duzeni -> (indeks, tasidigi bolumlerin karsiladigi gereksinimler). DUZENLER = { "kavramdan başlayan": ("kavram", ("neden",)), "belirtiden başlayan (belirti–çözüm)": ("belirti", ("tanıma", "eylem")), "belirtiden başlayan (belirti–neden–çözüm)": ("belirti", ("tanıma", "neden", "eylem")), } def iddialar(): liste, no = [], 0 for tur, dagilim in TURLER.items(): gomulu_hedef = 0 for yuzey, adet in dagilim.items(): for _ in range(adet): no += 1 gomulu_hedef += ORNEKLI[tur] gomulu = gomulu_hedef >= 1 and yuzey != "kavram" if gomulu: gomulu_hedef -= 1 liste.append({"no": no, "tur": tur, "yuzey": yuzey, "gomulu": gomulu}) return liste L = iddialar() bayat = [i for i in L if SURUM // SIKLIK[i["yuzey"]] >= 1] # Belirti ancak calistirilabilir ornege gomulu bir iddia bayatlayinca dogar. belirtili = [i for i in bayat if i["gomulu"]] sessiz = [i for i in bayat if not i["gomulu"]] print(f"sürüm {SURUM} | iddia {len(L)} | bayat {len(bayat)} | " f"belirti üreten {len(belirtili)} | belirti üretmeyen {len(sessiz)}") print() print(f"{'yüzey':<8s} {'bayat':>5s} {'belirti':>7s} {'belirtisiz':>10s} " f"{'arıza kendini adlandırıyor':>26s}") for y in SIKLIK: g = [i for i in bayat if i["yuzey"] == y] b = [i for i in g if i["gomulu"]] print(f"{y:<8s} {len(g):5d} {len(b):7d} {len(g) - len(b):10d} " f"{('evet' if y in KENDINI_ADLANDIRAN else 'hayır'):>26s}") print() toplam = len(belirtili) * len(GEREKSINIM) print(f"belirti {len(belirtili)} | gereksinim {len(GEREKSINIM)} | " f"karar {toplam}") print() print(f"{'metin düzeni':<42s} {'ulaşılan':>8s} {'karşılanan':>10s} " f"{'oran':>6s}") for ad, (indeks, bolumler) in DUZENLER.items(): ulasilan = [i for i in belirtili if indeks == "belirti" or i["yuzey"] in KENDINI_ADLANDIRAN] karsilanan = len(ulasilan) * len(bolumler) print(f"{ad:<42s} {len(ulasilan):8d} {karsilanan:10d} " f"{karsilanan / toplam:6.4f}") print() # Alti okur sorusu: iki tur eklendikten sonra kac soru bir metne dusuyor. SORULAR = { "nereden başlarım": "öğretici", "şunu nasıl yaparım": "nasıl yapılır", "bu neden böyle": "açıklama", "bu alanın tipi ne": "referans", "hangi sürümde değişti": "sürüm notu", "bu neden çalışmıyor": "sorun giderme", } print("okur sorusu -> karşılayan metin") for s, t in SORULAR.items(): print(f" {s:<22s} {t}") print(f"soru {len(SORULAR)} | karşılanan " f"{sum(1 for t in SORULAR.values() if t)} | karşılanmayan " f"{sum(1 for t in SORULAR.values() if not t)}") print(f"sorun gidermenin kapsayabildiği iddia {len(belirtili)}/{len(L)} " f"({len(belirtili) / len(L):.4f}) | erişemediği bayat iddia " f"{len(sessiz)}")
sürüm 12 | iddia 56 | bayat 56 | belirti üreten 17 | belirti üretmeyen 39 yüzey bayat belirti belirtisiz arıza kendini adlandırıyor imza 22 5 17 evet akis 16 9 7 hayır ad 7 3 4 evet kavram 11 0 11 hayır belirti 17 | gereksinim 3 | karar 51 metin düzeni ulaşılan karşılanan oran kavramdan başlayan 8 8 0.1569 belirtiden başlayan (belirti–çözüm) 17 34 0.6667 belirtiden başlayan (belirti–neden–çözüm) 17 51 1.0000 okur sorusu -> karşılayan metin nereden başlarım öğretici şunu nasıl yaparım nasıl yapılır bu neden böyle açıklama bu alanın tipi ne referans hangi sürümde değişti sürüm notu bu neden çalışmıyor sorun giderme soru 6 | karşılanan 6 | karşılanmayan 0 sorun gidermenin kapsayabildiği iddia 17/56 (0.3036) | erişemediği bayat iddia 39
Kapsamın Okunması
Orta tablo dersin ana karşılaştırmasını veriyor. On yedi arıza ve üç gereksinim 51 karar eder.
Kavramdan başlayan metin on yedi arızanın yalnız 8’ine ulaşıyor ve 8 karar karşılıyor: oran 0,1569. İki ayrı kayıp üst üste biniyor. Birincisi ulaşılabilirlik: akış yüzeyine bağlı dokuz arıza kendini adlandırmıyor, okurun arayacağı bir dizgi yok ve o dokuz giriş hiç bulunamıyor. İkincisi kapsam: ulaşılan sekiz girişte bile yalnız neden bölümü var; okur nedeni öğreniyor, ne yapacağını öğrenmiyor.
Belirti–çözüm düzeni on yedisine birden ulaşıyor ve 34 karar karşılıyor: 0,6667. Sıçrama tek bir değişiklikten geliyor — indeksin değişmesinden. İçerik aynı; girişlerin başlığı değişti. Bu, kurs boyunca ölçülen en ucuz kazançtır: yeni bir cümle yazılmadan karşılanan karar sayısı dört katından fazlasına çıkıyor.
Belirti–neden–çözüm düzeni 51/51 ile kümeyi kapatıyor: 1,0000. Aradaki fark 17 karardır ve tamamı neden bölümünden gelir. Neden bölümü olmayan bir sorun giderme metni çalışır ama okuru öğretmez: aynı okur benzer bir arızada yine gelir, çünkü neyin değiştiğini hiç öğrenmemiştir.
Sıralamanın kendisi de bir sonuç veriyor. Kavramdan başlayan metin 0,1569, belirtiden başlayan en yalın hâliyle 0,6667. Aradaki dört katı aşan fark, daha iyi yazmaktan değil, metnin okurun elindeki şeyle indekslenmesinden geliyor. Aynı bilgi, iki ayrı başlıkla, iki ayrı sonuç.
Taksonominin Tamamlanması ve Sınırı
Son blok ilk bakışta kursun kapanışı gibi duruyor: altı okur sorusunun 6’sı bir metne düşüyor, karşılanmayan 0. İkinci ders taksonominin sınırını iki soruyla çizmişti; beşinci ders birini, bu ders ötekini kapattı. Okurun getirebileceği hiçbir soru artık ortada kalmıyor.
Ama üst tablo bu rahatlığı bozuyor. On ikinci sürümde 56 iddianın 56’sı bayat ve bunların yalnız 17’si belirti üretiyor. Sorun giderme içeriğinin kapsayabileceği en geniş küme 17/56 — 0,3036. Kalan 39 iddia hiçbir belirti üretmiyor, dolayısıyla hiçbir sorun giderme girişi yazılamıyor. Yazacak kişi neyi yazacağını bilmiyor; okur da neyi soracağını.
Yüzey kırılımı bunu daha da keskinleştiriyor. İmza yüzeyinde 22 bayat iddianın 17’si belirtisiz; kavram yüzeyinde 11 bayat iddianın 11’i belirtisiz. Sorun gidermenin en iyi kapsadığı yüzey akış: on altı bayat iddianın 9’u belirti veriyor. Ama akış aynı zamanda kendini adlandırmayan yüzeydir — yani sorun gidermenin en çok girişi olduğu yerde kavram indeksi tümüyle işe yaramaz. İki tablo birbirini tam olarak buradan tamamlıyor.
Kursun bu konusunun bıraktığı sonuç şudur: altı soru da bir metne düşer, ama metinlerin hepsi birlikte bile bayat iddiaların yalnız 17’sine ulaşır. Taksonomi tamamlandı; kapsam tamamlanmadı. Sessiz bayatlamayı görünür kılan tek şey, bu konu boyunca yalnız iki yerde belirdi — çalıştırılabilir örneğe gömülü olmak ve sürüm notunun anlam listesine yazılmak. Kalanı ancak biri arayarak bulur.
Girişin Kendisi de Bayatlar
Sorun giderme içeriği bu konudaki metinler arasında tuhaf bir yerde durur: var olma gerekçesi bir arızadır ve arıza giderilebilir. Öteki türler ürün yaşadığı sürece geçerli kalmayı hedefler; bir sorun giderme girişi ise, işaret ettiği arıza düzeltildiği anda gereksizleşir.
Gereksiz hâle gelmek zararsız görünür, değildir. Kalan bir giriş okura artık oluşmayan bir belirtiyi tanıtır ve olmayan bir nedene bağlar. Okur benzer ama başka bir arızayla gelir, belirtinin yakın bir satırını görür, girişe ulaşır ve yanlış nedene ikna olur. Bu, boş bir sonuç değil, yanlış bir sonuçtur — hiç yazılmamış olmasından kötüdür.
Bu tür girişler kursun ölçüsünde özel bir yerdedir. Bayat bir sorun giderme girişi sessizdir, çünkü hiçbir şey kırmaz: metin okunur, adımlar uygulanır, arıza geçmez ve okur kendi yaptığından şüphelenir. Belirtiyi ilk gördüğü metnin yanlış olabileceği aklına gelmez, çünkü o metin tam olarak onun gördüğü satırla başlamaktadır.
Buradan pratik bir kural çıkar ve bu konunun tek bakım kuralıdır: bir sorun giderme girişi yazılırken hangi sürümde geçerli olduğu yazılmalıdır. Üçüncü dersteki aşılmış kayıt ile aynı düzenek — bir iddianın kapsamını yazmak, onu yanlışlıktan çıkarıp tarihe taşır.
Özet
- Belirtiyle gelen okurun indeksi dokümanın indeksine uymaz: doküman kavramla, okur belirtiyle indeksler. Sorun giderme içeriği bu çeviriyi yapan metindir.
- Girişin üç bölümü okurun üç gereksinimini karşılar: belirti tanımayı, neden nedeni, çözüm eylemi. Belirti, okurun gördüğü biçimde yazılmak zorundadır.
- On yedi arıza ve üç gereksinim 51 karar eder; kavramdan başlayan metin 8’ini karşılar (0,1569), belirti–çözüm 34’ünü (0,6667), belirti–neden–çözüm 51’ini (1,0000).
- Kavramdan başlayan metin on yedi arızanın yalnız 8’ine ulaşır: akış yüzeyine bağlı dokuz arıza kendini adlandırmaz ve kavram indeksine hiç giremez.
- Sorun gidermenin kapsayabildiği en geniş küme 17/56’dır (0,3036); sessiz bayatlayan 39 iddia hiç belirti üretmediği için bu türün de dışında kalır.
- Altı okur sorusunun 6’sı artık bir metne düşer — taksonomi tamamlandı, kapsam tamamlanmadı.
Sonraki Adım
Bu konu boyunca metinler okurun sorusuna göre ayrıldı ve ölçüldü; altı sorunun altısı da artık bir türe düşüyor. Ama her ölçümde sessizce kabul edilen bir şey vardı: okurun kim olduğu. “Yeni okur”, “bakım yapan”, “koda dokunacak kişi” — bu roller derslerin içinde geçti, hiçbir dokümanın içinde geçmedi. Peki bir metin okurunun kim olduğunu yazmıyorsa ne olur? Sonraki konu buradan başlar ve ilk dersi tam bu soruyu ölçer: yazılmamış bir ön bilgi varsayımı, doğru kalan iddiaların kaçını okunamaz kılar? Bir cümlenin hâlâ doğru olması, onu okuyabilecek birinin var olduğu anlamına gelmiyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.