</> Dijital El Kitabı

Web'i ezberleme.
Nasıl çalıştığını gör.

Kasanın içindeki parçalardan HTML'e, internetin yolundan yapay zekâya, internette duyduğun kavramları düz Türkçeyle öğren. Her konuyu oku, canlı örneğine dokun ve sonucu anında gör.

58 bölümTemelden ileri kavramlara
Canlı örneklerOku, dokun, sonucu gör
Tek sayfaAradığın her şey elinin altında
15 başlık · 58 kısa bölüm
Kendi hızında ilerle

Baştan sona oku veya aşağıdan yalnızca merak ettiğin konuya geç.

Her şeyi kurcala

“Bu ne?” modunu aç; canlı örnekte dokunduğun parçanın görevini öğren.

Yeni · Adan zeye Bilgisayarın 23 parçası tek çizimde, dokunduğun yerde açıklama. Web uygulaması ve mobil, masaüstü uygulama baştan sona; örnek sitenin görünümü ve kodu yan yana; frontend ve backend araçları. Bölüm 40 ve 55-58. Bilgisayarı aç →
Bu adla bir konu bulamadım. Başka bir kelime dene.
Bölüm 1 · İskelet

HTML nedir? Element · tag · attribute

Bir web sayfasını binaya benzetirsek HTML (HyperText Markup Language, hiper metin işaretleme dili), binanın iskeletidir. Sayfada ne olduğunu söyler: "Burada bir başlık var, altında bir yazı, yanında bir resim, en altta bir buton." Hepsi bu. Rengi, güzelliği söylemez (o CSS'in işi), tıklanınca ne olacağını da söylemez (o JavaScript'in işi). Sadece ne var, ne yok, onu söyler.

HTML'in yapı taşına element denir. Bir elementi yazmak için adını köşeli parantezlerin içine yazarsın; buna tag (etiket) denir. Çoğu element bir açılış ve bir kapanış tag'inden oluşur, ikisinin arasına da içerik girer. Elemente ekstra bilgi vermek istersen açılış tag'inin içine attribute (özellik) yazarsın. Kulağa karışık geliyor ama tek satırda hepsi görünüyor:

<button id="kaydet">Kaydet</button>

<button>      → açılış tag'i: "burada bir buton başlıyor"
id="kaydet"   → attribute: butona ekstra bilgi (adı "kaydet" olsun)
Kaydet        → içerik: butonun üzerinde yazacak yazı
</button>     → kapanış tag'i: "buton burada bitti" (baştaki / işaretine dikkat)

Şimdi en iyi kısım: yukarıdakini okumak yetmez, bir de kendi elinle dene. Aşağıdaki sol kutu senin defterin, oraya HTML yazıyorsun; sağ kutu da tarayıcının o yazıyı nasıl gördüğü. Yazdığın anda sağ taraf değişiyor. Bir tag'i boz, kapanışını sil, yeni bir satır ekle; ne olduğunu gör.

Sen yaz (HTML)
Tarayıcı böyle gösteriyor

Düğmelere bas, soldaki koda ne eklendiğine ve sağdaki sonucun nasıl değiştiğine birlikte bak.

Fark ettin mi: sağdaki kutuda hiçbir renk, hiçbir süs yok. Çünkü HTML süs yapmaz, sadece ne olduğunu söyler. Başlık büyük çıktı, çünkü tarayıcı "başlık" dendiğinde ne yapacağını kendiliğinden biliyor. Rengini sen seçeceksen, o iş 9. bölümde: CSS.

Bu dört parçanın toplamına, açılışı, özellikleri, içeriği ve kapanışıyla, element denir. Bir HTML sayfası, iç içe geçmiş yüzlerce elementten oluşur; tıpkı iç içe kutular gibi. Bu kitabın bundan sonraki her "İskelet" bölümü, işine en çok yarayacak element türlerini tek tek tanıtıyor.

HTML = sayfada NE olduğu. Element = yapı taşı. Tag = taşın adının yazıldığı parantezler. Attribute = taşa iliştirilen ekstra bilgi. Prompt yazarken "sayfaya bir bölüm ekle" gibi istekler hep HTML isteğidir.
Bölüm 2 · İskelet

Div ve span Görünmez kutular

İşte web'in en çok kullanılan ama en az anlaşılan elementi: div. Sırrı şu: div, görünmez bir kutudur. Kendisi hiçbir şey göstermez; tek görevi başka elementleri bir arada tutmaktır. Neden gerekli? Çünkü "şu üç şeyi yan yana koy", "bu kartı sağa yasla", "şurayı komple gizle" diyebilmek için o şeylerin tek bir pakette olması gerekir. O paket div'dir.

span ise div'in minicik kardeşi: koca bir kutu değil, cümlenin içindeki birkaç kelimeyi paketlemek için kullanılır, mesela tek bir kelimeyi kırmızı yapmak istediğinde. Ezberi kolay: div = koli, span = etiket bandı.

Aşağıdaki örnekte gerçekten iç içe kutular var ama görünmüyorlar, çünkü div böyle bir şey. Butona bas, kenarlarını boyayayım, o zaman gör:

Ben dış div'in içindeki birinci div'im. İçimde bir de span saklı.
Ben ikinci div'im. Dıştaki büyük div, ikimizi tek paket yapıyor.
Bu örneğin kodunu gör
<div>                                  ← dış koli (mavi)
  <div>İçimde bir <span>span</span> saklı</div>   ← iç kutu (pembe) + span (sarı)
  <div>Ben ikinci div'im</div>
</div>
Bir sayfada neredeyse her şey div'lerin içindedir. Prompt'ta şöyle kullan: "ürün kartı div'ine bir fiyat etiketi ekle", "o iki butonu aynı div'e koy, yan yana dursunlar".
Bölüm 3 · İskelet

Başlıklar, paragraflar, linkler H1–h6 · p · a · strong

Bir sayfadaki yazıların da türleri vardır ve her türün kendi elementi var. h1'den h6'ya kadar olanlar başlıktır: h1 en büyüğü ve en önemlisidir, sayfanın ana başlığı. Rakam büyüdükçe başlık küçülür. Önemli bir kural: her sayfada tek bir h1 olmalı, çünkü Google sayfanın ne anlattığını önce h1'den anlar (SEO dediğimiz şeyin ilk taşı).

Normal yazılar p (paragraf) elementine girer. Bir yazının içinde bir kısmı kalınlaştırmak istersen strong kullanılır. Başka bir sayfaya götüren tıklanabilir yazılar ise a elementidir (İngilizce "anchor", çapa), nereye gideceğini href attribute'u söyler. Hepsi bir arada, canlı:

Bu bir h1, sayfanın ana başlığı

Bu bir h3 · ara başlık

Bu bir h6, en küçük başlık

Bu bir p paragrafı. İçinde strong ile kalınlaştırılmış bir kısım ve a elementiyle yapılmış bir link var. Linke tıklarsan Bölüm 1'e gider, çünkü href öyle diyor.

Bu örneğin kodunu gör
<h1>Ana başlık</h1>
<p>Yazı, <strong>kalın kısım</strong> ve
   <a href="https://garamsi.com">bir link</a>.</p>
"Üstteki büyük yazıyı değiştir" yerine "h1'i değiştir" de. "Tıklanınca mağazaya gitsin" yerine "href'i garamsi.com olan bir link ekle" de. Fark: LLM tahmin etmez, bilir.
Bölüm 4 · İskelet

Listeler Ul · ol · li

Alt alta maddeler göstereceksen liste elementleri kullanılır ve mantığı çok basittir: listenin kendisi için bir kap, her madde için bir satır. Kap iki çeşit: ul maddelerin önüne nokta koyar (sırasız liste), ol ise 1, 2, 3 diye numaralar (sıralı liste). Her iki kabın içindeki her bir madde de li'dir (list item = liste elemanı).

ul, noktalı:
  • süt
  • domates
  • deri cilası
ol, numaralı:
  1. ürünü kazı
  2. fiyatı eşleştir
  3. yayınla
Bu örneğin kodunu gör
<ul>                     <ol>
  <li>süt</li>             <li>ürünü kazı</li>
  <li>domates</li>         <li>fiyatı eşleştir</li>
</ul>                     </ol>
Sıra önemliyse (tarif, adımlar) ol; önemli değilse (alışveriş listesi, özellikler) ul. Prompt'ta: "bu maddeleri ul/li listesine çevir."
Bölüm 5 · İskelet

Tablolar Table · tr · td · th

Elindeki bilgi satır ve sütunlardan oluşuyorsa, fiyat listesi, puan cetveli, stok dökümü, tablo kullanılır. Adları İngilizce kısaltmalardan gelir ve bir kez çözünce bir daha unutmazsın: table tablonun kendisi. tr = table row, yani bir satır. td = table data, yani satırın içindeki bir hücre. th = table header, yani kalın görünen başlık hücresi.

Yani kurulum hep aynıdır: table'ın içine satır satır tr, her tr'nin içine hücre hücre td dizersin. "Tabloya satır ekle" demek = "yeni bir tr ekle" demek. Butonla dene, JavaScript gerçekten yeni bir tr ekleyecek:

ÜrünFiyat
Deri Cüzdan$45
Masa Matı$89
Bu örneğin kodunu gör
<table>
  <tr> <th>Ürün</th>   <th>Fiyat</th> </tr>   ← başlık satırı
  <tr> <td>Cüzdan</td> <td>$45</td>   </tr>   ← veri satırı
</table>
table = tablo, tr = satır, td = hücre, th = başlık hücresi. Prompt'ta: "tabloya bir sütun daha ekle: stok adedi", LLM her tr'ye bir td ekleyeceğini anlar.
Bölüm 6 · İskelet

Formlar Form · input · label · textarea · select · button

Kullanıcıdan bilgi almak istediğin her yer bir formdur: giriş ekranı, arama kutusu, sipariş sayfası. Parçaları şunlar ve her birinin görevi nettir:

form, parçaların hepsini saran kaptır, "bunlar birlikte gönderilecek" demektir. input tek satırlık giriş kutusudur ve type attribute'uyla kılıktan kılığa girer: type="text" yazı kutusu, type="number" sayı kutusu, type="checkbox" işaret kutusu, type="password" yıldızlı şifre kutusu, type="date" tarih seçici. textarea çok satırlı büyük yazı alanıdır (yorum, not). select açılır menüdür, seçenekleri option'dur. label kutunun yanındaki açıklama yazısıdır ve güzel bir huyu vardır: label'a tıklamak, bağlı olduğu kutuyu seçer, telefonda küçücük kutuyu tutturmaya çalışmaktan kurtarır. button da düğmedir; formun içindeyse formu gönderir.

Aşağıdaki form gerçekten çalışıyor, doldur, gönder. Ama dikkat: bilgiler hiçbir sunucuya gitmiyor, JavaScript yakalayıp sana geri gösteriyor:

Bu örneğin kodunu gör
<form>
  <label for="ad">Adın:</label>
  <input type="text" id="ad">
  <select><option>Cüzdan</option></select>
  <textarea></textarea>
  <button type="submit">Gönder</button>
</form>
Prompt'ta kutu tiplerini adıyla iste: "e-posta için input, mesaj için textarea, konu seçimi için select olan bir iletişim formu yap; her kutunun label'ı olsun."
Bölüm 7 · İskelet

Resim, video, ses Img · src · alt · video · audio

Sayfaya görsel ve ses koymanın elementleri bunlar. En önemlisi img (image = resim). İki attribute'u ezbere bil: src (source = kaynak) resim dosyasının nerede olduğunu söyler, bir dosya adı ya da internet adresi olabilir. alt (alternative = yedek) ise resim yüklenemezse yerine gösterilecek yedek yazıdır; ayrıca görme engellilerin ekran okuyucusu bu yazıyı sesli okur ve Google resmin ne olduğunu buradan anlar. Yani alt hem nezaket hem SEO'dur.

Aşağıda ikisini de canlı görüyorsun: soldaki resmin src'si doğru, sağdakinin src'sini bilerek bozdum, bak, yerine alt yazısı çıktı:

Web El Kitabı'nın logosu

src doğru → resim geldi

(Bu resim yüklenemedi, ben alt yazısıyım!)

src bozuk → alt devrede

video ve audio da aynı mantık: src ile dosyayı gösterirsin. Tek fark, controls attribute'unu eklersen oynat/durdur düğmeleri gelir. Aşağıdakiler gerçek dosyalar, oynat:

video elementi (controls açık)

audio elementi, 1,5 saniyelik "bip"

Bu örneğin kodunu gör
<img src="logo.png" alt="Mağazanın logosu" width="96">
<video src="tanitim.mp4" controls></video>
<audio src="zil.mp3" controls></audio>
src = dosya nerede, alt = yüklenemezse ne yazsın (ve Google ne anlasın). Bir de format tüyosu: web'de görselleri WebP formatında kullan, aynı görüntü, PNG'nin onda biri boyut, site uçar gibi açılır.
Bölüm 8 · Görünüş

Id ve class Elemente isim takmak

CSS'e geçmeden önce şunu çözmemiz lazım: sayfada yüzlerce element varken, "şunu kırmızı yap" derken hangisini kastettiğimizi nasıl anlatacağız? Cevap: elementlere isim takarak. Bunun iki yolu var ve aralarındaki fark çok önemli:

id, bir elementin kimlik numarasıdır, TC kimlik gibi. Sayfada aynı id'den yalnızca bir tane olabilir. "id'si kaptan olan kutu" dediğinde tek bir kutudan bahsediyorsundur. class ise bir takım formasıdır, aynı formayı istediğin kadar elemente giydirebilirsin. "class'ı takim olan herkes" dediğinde, o formayı giyen kaç element varsa hepsinden bahsediyorsundur.

Aşağıda dört kutu var. Dördü de "takim" formasını giyiyor; ama üçüncüsünün ayrıca bir kimliği var: id="kaptan". Butonlarla farkı canlı gör:

.takim
.takim
#kaptan
.takim
Bu örneğin kodunu gör
HTML:  <div class="takim" id="kaptan">...</div>

CSS'te seçerken:   .takim  { ... }   ← baştaki NOKTA class demek
                   #kaptan { ... }   ← baştaki KARE (#) id demek

JS'te seçerken:    document.querySelectorAll('.takim')   ← hepsi
                   document.getElementById('kaptan')     ← tek
id = kimlik (sayfada tek), class = forma (kaç tane istersen). Toplu görünüş işleri class ile, tek bir elementi hedefleme işleri id ile yapılır.
Bölüm 9 · Görünüş

CSS Sayfanın makyajı

HTML iskeletse, CSS (Cascading Style Sheets, basamaklı stil sayfaları) her şeyin nasıl görüneceğidir: renkler, yazı tipleri, boşluklar, kenarlar, gölgeler, hizalamalar. CSS'in cümle yapısı hep aynıdır: önce kimi boyayacağını söylersin (az önce öğrendiğin class/id ile), sonra süslü parantez içinde özellik: değer çiftleri sıralarsın. Örneğin .kart { background: white; } demek, "kart formasını giyen herkesin arka planı beyaz olsun" demektir.

CSS'in gücünü görmenin en iyi yolu, aynı HTML'i farklı makyajlarla görmek. Aşağıdaki kart hep aynı kart, içeriği hiç değişmiyor. Sadece CSS değişiyor:

Deri Cüzdan, $45
El yapımı, full-grain deri.
/* makyajsız, tarayıcının çıplak hali */

"Şık CSS"e basınca altta beliren üç özelliğin adını bil, yeter: border-radius köşeleri yuvarlatır, box-shadow gölge verir, gradient iki rengi birbirine akıtır. Modern görünümün dörtte üçü bu üçlüdür.

CSS'in bir süper gücü daha var: animation. JavaScript'e hiç bulaşmadan, sadece CSS ile elementleri hareket ettirebilirsin. Şu ikisi saf CSS animasyonu, kalp scale (büyüt-küçült) ile atıyor, top translateY (yukarı-aşağı taşı) ile zıplıyor:

💗 🏀
@keyframes zipla { 50% { transform: translateY(-16px); } }  /* yolun yarısında havada */
.top { animation: zipla 0.9s infinite; }                    /* 0,9 saniyede bir, sonsuza dek */

Bu sayfada gördüğün bütün hareketler de böyle: bölümlerin süzülerek belirmesi, diyagramlarda gezinen ışıklar… hepsi @keyframes + animation.

CSS = KİM (class/id) + NE (özellik: değer). Görünüş isteklerini CSS diliyle ver: "kartlara border-radius ve hafif box-shadow ekle." Hareket istersen adıyla iste: "butona hover'da büyüme animasyonu koy."
Bölüm 10 · Görünüş

Responsive Her ekrana uyum

Aynı sayfa kocaman bilgisayar ekranında da, daracık telefon ekranında da düzgün görünmek zorunda. Buna responsive tasarım denir: ekran daralınca yan yana duran kutuların alt alta geçmesi, yazıların küçülmesi, menünün hamburger simgesine dönüşmesi… Sayfa, ekrana "cevap verir" (respond).

Bunu kendi gözünle görmenin en kolay yolu aşağıda. Kaydırıcı, sanki telefon ekranıymış gibi alanı daraltıyor, üç kartın kendini nasıl yeniden dizdiğine bak:

Kart 1
Kart 2
Kart 3

Perde arkasında iki CSS aracı çalışır: flexbox ("bu kutuları esnek diz, sığmazsa alta at") ve media query ("ekran 680 pikselden darsa şu kuralları uygula"). Adlarını bilmen yeter, gerisini kod yazan halleder. Bu okuduğun site de responsive: telefonda açarsan aynı içerik bambaşka dizilir.

Prompt'un sonuna alışkanlık olarak şunu ekle: "mobil uyumlu (responsive) olsun." Müşterilerinin çoğu telefondan bakıyor, garamsi'de bunu ilk elden biliyorsun.
Bölüm 11 · Davranış

JavaScript Sayfanın kasları

İskelet (HTML) ve makyaj (CSS) tamam; ama sayfa hâlâ hareketsiz. Butona basınca bir şeyin OLMASI için JavaScript (kısaca JS) gerekir. JS, tarayıcının içinde çalışan gerçek bir programlama dilidir: tıklamayı duyar, hesap yapar, sayfayı anında değiştirir. Bu kitaptaki bütün canlı örnekler JS ile çalışıyor.

İki küçük ama gerçek örnek: sayaç, her basışında bir sayı artırıyor; saat ise her saniye kendini yeniliyor. İkisi de şu an senin telefonunda/bilgisayarında çalışıyor, sunucuda değil:

Canlı saat: --:--:--

Sayacın gerçek kodunu gör
let sayi = 0;                           // bir hafıza kutusu aç, 0 koy
function sayacArtir() {                 // "sayacArtir" adında bir komut tanımla
  sayi = sayi + 1;                      // kutudaki sayıyı 1 artır
  document.getElementById('sayac')      // sayfada id'si "sayac" olan yeri bul
          .textContent = sayi;          // içine yeni sayıyı yaz
}
// butonun HTML'i: <button onclick="sayacArtir()">
// yani: "tıklanınca sayacArtir komutunu çalıştır"
"Tıklayınca / yazarken / seçince ŞU OLSUN" cümlelerinin tamamı JS isteğidir. Prompt'ta aynen böyle söyle: "Hesapla butonuna tıklayınca sonuç, sayfa yenilenmeden altta görünsün."
Bölüm 12 · Davranış

DOM Sayfanın canlı hali

Şimdi işin mutfağından bir sır: senin yazdığın HTML aslında ölü bir metin dosyasıdır. Tarayıcı onu okuyunca kafasında canlı bir ağaç kurar, her element bir dal, iç içe elementler dalın dalları. İşte bu ağacın adı DOM (Document Object Model). JavaScript sayfayı değiştirirken aslında HTML dosyasına dokunmaz; bu canlı ağaca dal ekler, dal koparır, dalları boyar.

Aşağıda solda ağacın şeması, sağda o ağacın sayfadaki görünümü var. Butona bas: JS, DOM'a gerçekten yeni bir dal (li elementi) ekleyecek ve iki taraf birden değişecek:

Ağacın şeması:
<ul>
├─ <li> süt
└─ <li> domates
Sayfadaki görünümü:
  • süt
  • domates

Sepete ürün eklenince sayfanın yenilenmeden güncellenmesi, yazarken arama sonuçlarının belirmesi, hepsi JS'in DOM'u değiştirmesidir. Sağ üstteki 🔍 İncele modu da DOM ağacını okuyarak çalışıyor: tıkladığın dalın adına bakıp sana söylüyor.

HTML = yazdığın metin; DOM = tarayıcının ondan kurduğu canlı ağaç. "Sayfa yenilenmeden değişsin" istediğin her şey DOM işidir.
Bölüm 13 · Veri

JSON Programların ortak dili

Buradan itibaren konu görünüşten çıkıp veriye giriyor. İki programın birbirine bilgi yollaması gerektiğinde, senin Migros kazıyıcın fiyatları çekerken, n8n Telegram'a mesaj atarken, bilgiyi ortak bir zarfa koyarlar. O zarfın adı JSON (JavaScript Object Notation, JavaScript nesne gösterimi). Kuralı tek cümle: her bilgi bir "anahtar": değer çiftidir. "ad" anahtarının değeri "Mustafa", "yas" anahtarının değeri 30… hepsi süslü parantez içinde.

En iyi öğrenme yolu: kendin yazıp zarfın oluşmasını izlemek. Aşağıya yaz, JSON sağda canlı kurulsun:


  

Renklere dikkat et, çünkü kurallar orada saklı: anahtarlar hep tırnaklı, "yazı değerleri" tırnaklı, sayılar tırnaksız, doğru/yanlış değerleri de çıplak true / false olarak yazılır. Bu dört kuralı bilirsen dünyadaki her JSON'u okuyabilirsin.

JSON = programlar arası zarf: "anahtar": değer. API'lerin cevabı, n8n'in içi, config dosyaları, hepsi JSON. Bir sonraki bölümde bu zarfın postalanışını göreceksin.
Bölüm 14 · Veri

API ve REST GET · POST · istek · yanıt

İki programın konuşabilmesi için bir kapı gerekir; o kapının adı API (Application Programming Interface, uygulama programlama arayüzü). Sen (daha doğrusu senin programın) kapıya bir istek (request) bırakırsın, karşı taraf bir yanıt (response) döndürür, yanıt da genellikle az önce öğrendiğin JSON zarfıdır. REST (Representational State Transfer, temsili durum aktarımı) ise bu konuşmanın görgü kurallarıdır. En çok iki fiili duyacaksın: GET = "bana şunu ver" (okuma), POST = "al bunu kaydet" (yazma).

Lafta kolay; canlısı daha iyi. Aşağıdaki buton, bu sunucudaki gerçek bir dosyaya (api-demo.json) gerçek bir GET isteği atar. Yanıtın gelişini, durum kodunu ve süresini izle:

İsteğin gerçek kodunu gör
const cevap = await fetch('api-demo.json');  // GET isteği at, cevabı bekle
const veri  = await cevap.json();            // JSON zarfını aç
// Artık veri.urunler bir liste, sayfaya işleyebilirsin.
// Migros kazıyıcın da aynen bunu yapıyor, adres farklı sadece:
// fetch('migros.com.tr/rest/search/...')
API = programların kapısı. GET = oku, POST = yaz. Yanıt = JSON. Prompt'ta: "şu API'den veriyi GET ile çek, tabloya doldur."
Bölüm 15 · Veri

Webhook Ters yönde API

API'de soran hep sensin. Peki karşı tarafta bir şey OLDUĞUNDA senin haberin nasıl olacak, her saniye sorup duracak mısın? Hayır. Bunun için webhook var: karşı tarafa kendi adresini bırakırsın, "bir şey olursa buraya haber at" dersin. Olay olduğunda O SANA istek atar. Kapıcıya her sabah "kargom geldi mi?" diye sormak API'dir; kapıcının kargo gelince seni araması webhook'tur.

API, soran sensin: Sen Sunucu "sipariş var mı?" (GET) yanıt: JSON Webhook, haber veren o: Senin n8n'in Telegram "yeni mesaj geldi!" (POST) sen hiç sormadın, olay olunca haber kapına geldi
API = sen sorarsın. Webhook = olay olunca o haber verir. Telegram botların ve POA Kontrol workflow'un tam olarak webhook'la yaşıyor.
Bölüm 16 · Veri

SQL ve SQLite Veritabanı

Kalıcı veri, siparişler, fiyat geçmişi, üye listesi, bir veritabanında durur. Veritabanı dediğin şey aslında disiplinli tablolardan ibarettir: satırlar kayıtlar, sütunlar alanlar. SQLite, bu işin cep boyu hali: kurulum istemez, koca veritabanı tek bir dosyada yaşar (tracker'larındaki data.db dosyaları birer SQLite'tır). Büyük projelerde ise PostgreSQL, MySQL gibi ağabeyler kullanılır, mantık aynıdır.

Veritabanıyla konuşmanın dili de SQL (Structured Query Language, yapılandırılmış sorgu dili)'dir ve neredeyse İngilizce cümle gibidir. Dört kelimeyi bilirsen günlük işin görülür: SELECT = seç/getir, FROM = şu tablodan, WHERE = şu şarta uyanları, ORDER BY = şuna göre sırala. Butonlarla üç gerçek sorgu dene, tabloya etkisini gör:

SELECT * FROM meyveler;

SQLite = tek dosyalık veritabanı, küçük projelerin standart tercihi. SQL okunuşu: SELECT (getir) FROM (şuradan) WHERE (şartla) ORDER BY (sırala). Bu demo JS taklidiydi; gerçeğinde sorguyu Flask, data.db'ye sorar.
Bölüm 17 · Veri

LocalStorage Tarayıcının cebi

Peki veri saklamak için illa sunucu ve veritabanı mı gerekir? Küçük şeyler için hayır. Her tarayıcının, her site için ayrılmış küçük bir cebi vardır: localStorage. Oraya koyduğun şey, sayfa kapansa da, bilgisayar yeniden başlasa da durur. Ama iki sınırı aklında tut: sadece o cihazda ve o tarayıcıda durur (telefonundan göremezsin) ve küçük veriler içindir.

Dene: bir not yaz, kaydet, sonra sayfayı yenile. Not yerinde olacak, sunucuya tek bayt gitmeden:

Gerçek kodunu gör, üç komut, hepsi bu
localStorage.setItem('notum', 'deri sipariş et');  // cebe koy
localStorage.getItem('notum');                     // cepten oku
localStorage.removeItem('notum');                  // cepten at
Tema tercihi, son arama, yarım kalmış form gibi tek cihazlık küçük şeyler → localStorage. Her cihazdan erişilecek gerçek veri → sunucu + SQLite. İkisini karıştırma.
Bölüm 18 · Büyük Resim

Frontend ve Backend Vitrin ve mutfak

Artık parçaları birleştirebiliriz. Bir web uygulamasının iki yakası vardır. Frontend = vitrin: kullanıcının tarayıcısında çalışan her şey, yani HTML + CSS + JavaScript üçlüsü. Backend = mutfak: sunucuda çalışan, veriyi saklayan, hesabı yapan, kimseye görünmeyen program, senin projelerinde bu rolü Flask oynuyor. İki yaka birbiriyle API üzerinden, JSON zarflarıyla konuşur:

FRONTEND HTML + CSS + JS 📱 tarayıcında BACKEND Flask / FastAPI 🖥 sunucuda SQLite 💾 veri API SQL Sebzemeyve Tracker'ın birebir bu üçlü: sayfa + Flask + SQLite

Şimdi büyük sırrı söyleyeyim: bu okuduğun sitenin backend'i yok. Veri saklamıyor, hesap yapmıyor; bütün marifeti frontend'de. Sunucu sadece dosyaları postalıyor. "Sunucu gerektirmeyen site" diye sana anlattığım şeyin canlı kanıtındasın.

Frontend = tarayıcıda görünen; backend = sunucuda dönen. Prompt'ta ayır: "frontend'de canlı doğrulama olsun, backend Flask'ta da ayrıca kontrol etsin."
Bölüm 19 · Büyük Resim

URL, HTTP ve HTTPS İnternetin adres sistemi

Her gün onlarca kez baktığın adres çubuğunun, yani URL'nin (Uniform Resource Locator, tekdüze kaynak bulucu) da bir anatomisi var ve parçalarının adını bilmek, hata ararken çok işine yarar. Gerçek bir adresi parçalayalım:

https://sebzemeyve.herthing.duckdns.org/urun?ad=domates#fiyat

  • https://, protokol: konuşmanın kuralı. HTTP (HyperText Transfer Protocol, hiper metin aktarım protokolü) düz konuşma, HTTPS'in sonundaki S şifreli demek: Secure, güvenli (kilit simgesi).
  • sebzemeyve.herthing…, alan adı (domain): hangi sunucuya gidileceği. Baştaki "sebzemeyve" kısmı subdomain.
  • /urun, yol (path): o sunucudaki hangi sayfa.
  • ?ad=domates, parametre (query): sayfaya iliştirilen not; ? ile başlar, anahtar=değer gider.
  • #fiyat, çapa (anchor): sayfanın İÇİNDE bir yer. Bu kitabın fihrist çipleri böyle çalışıyor.

Bir de sunucunun cevap notları vardır, durum kodları. Dört tanesini bil, yeter: 200 = tamam, geldi. 301 = adres değişmiş, seni yönlendirdim. 404 = öyle bir sayfa yok. 500 = sunucu içinde bir şey patladı. ("404 Not Found" esprilerinin kaynağı bu.)

Hata ayıklarken önce koda bak: 404 ise adres/yol yanlış, 500 ise backend'de hata var, 301 ise adres taşınmış. Bu tek cümle sana saatler kazandıracak.
Bölüm 20 · Büyük Resim

Deploy, port, DNS Siteyi canlıya almak

Kodu yazdın; peki insanlar ona nasıl ulaşıyor? Yayına alma işine deploy denir. Şu an bu sayfayı okurken, isteğin şu yolculuğu yaptı, bu şema süs değil, senin sunucunun GERÇEK düzeni:

📱 Tarayıcın adresi yazdın 🌍 DNS (DuckDNS) "o isim = 129.213.155.31" dedi 🚪 Reverse proxy (:443 🔒) HTTPS kilidini açıp içeri yönlendirdi 📁 Port 8506 → bu dosyalar hcc 8502'de, sebzemeyve 8505'te, bu kitap 8506'da oturuyor

Üç terimi açalım: DNS (Domain Name System, alan adı sistemi), isimleri numaraya çeviren rehberdir, insanlar isim ezberler, bilgisayarlar IP numarası ister. Port, aynı sunucudaki programları ayıran kapı numarasıdır; bir binada çok daire olması gibi, senin sunucunda da her uygulama kendi portunda oturur. Reverse proxy ise binanın kapıcısıdır: dışarıdan gelen herkesi tek kapıdan karşılar, doğru daireye yönlendirir ve HTTPS kilidini o yönetir.

Deploy = canlıya alma. DNS = isim→numara rehberi. Port = daire kapısı. Reverse proxy = kapıcı. Yeni app'lerinde hep aynı tarif: "8507'de çalıştır, proxy'ye bağla, subdomain ver."
Bölüm 21 · Büyük Resim ⭐

PWA · siteyi app'e çevirmek Manifest · service worker · çevrimdışı

PWA (Progressive Web App), normal bir web sitesinin telefona uygulama gibi kurulabilen halidir. App Store yok, Google Play yok, onay bekleme yok, "uygulamayı indirin" diye yalvarma yok. Sitene üç parça eklersin; ziyaretçi isterse siteni ana ekranına kurar. Kurulunca kendi ikonuyla açılır, tarayıcı çubuğu görünmez, tam ekran çalışır, kullanıcı için normal bir uygulamadan farksızdır.

Bir PWA'yı PWA yapan üç parça:

1 · HTTPS

Site şifreli bağlantıda olmalı (adres çubuğundaki kilit). Tarayıcı, güvensiz siteye kurulum izni vermez. Bu site HTTPS'te, şart tamam.

2 · manifest.json

Uygulamanın kimlik kartı: adı ne, ikonu hangi dosya, açılış rengi ne, tam ekran mı açılsın. Tek küçük JSON dosyası.

3 · Service worker

Sayfa ile internet arasına yerleşen görevli: dosyaları cihaza önbellekler. İnternet gidince siteyi önbellekten açar, çevrimdışı çalışmanın sırrı budur.

Canlı durum, bu sayfanın PWA organları şu an ne halde:

Nasıl açık?kontrol ediliyor…
HTTPSkontrol ediliyor…
Service workerkontrol ediliyor…
Önbellekkontrol ediliyor…

Nasıl kurulur?

Android, Chrome/Brave:
  1. Bu siteyi aç (açtın bile).
  2. Sağ üstteki ⋮ menüye dokun.
  3. "Ana ekrana ekle" ya da "Uygulamayı yükle"ye dokun. Bitti, ikon ana ekranında.
iPhone, Safari:
  1. Bu siteyi Safari'de aç (Chrome değil, illa Safari).
  2. Alttaki paylaş düğmesine dokun (kare + yukarı ok).
  3. "Ana Ekrana Ekle"yi seç, sağ üstten Ekle'ye dokun.

Kurduktan sonra asıl numarayı dene: telefonu uçak moduna al ve uygulamayı aç. Site yine açılacak, çünkü service worker her şeyi cihazına önbelleklemişti. İnternetsiz çalışan web sitesi; işte PWA'nın sihri bu.

Peki hangisini seçmeli? Üç yolun dürüst karşılaştırması:

Mobil uyumlu sitePWAGerçek app (React Native)
Kurulumyok, tarayıcıdanana ekrana, mağazasızApp Store / Google Play
Çevrimdışı çalışma✗✓✓
Bildirim gönderme✗✓ (iPhone'da kısıtlı)✓ tam
Mağaza onayı/komisyonuyokyokvar (onay + %15-30)
Yapım maliyeti/emeğien düşükdüşük (site + 3 parça)yüksek (ayrı proje)
Ne zaman mantıklı?çoğu iş için yeter"app hissi" istenincekamera/bluetooth gibi derin donanım gerekince
PWA = site + HTTPS + manifest.json + service worker. Prompt'ta tek cümle yeter: "bu siteye PWA desteği ekle: manifest ve service worker olsun, telefona kurulabilsin, çevrimdışı açılsın."
Bölüm 22 · Büyük Resim

Araç çantası Framework'ler ve kütüphaneler

Bu kitapta öğrendiğin her şey el emeğiyle yazılabilir; ama dünya, sık yapılan işler için hazır alet setleri üretmiş. Bunlara framework (çatı) ve kütüphane denir. Hepsi aynı üç temelin, HTML, CSS, JS, üstüne kuruludur. Prompt'ta adını doğru anarsan, LLM tam olarak ne istediğini anlar:

Flask

Python ile küçük web uygulaması yazmanın en pratik yolu. Tek dosyada site + API + veritabanı bağlantısı.

Sende: HCC Calculator ve tüm tracker'lar Flask.

FastAPI

Flask'in API'ye odaklanmış modern kardeşi. Daha hızlı, dokümanı kendiliğinden oluşur.

Ne zaman: sayfa yok, sadece API yazılacaksa.

React

Büyük ve karmaşık arayüzlerin en popüler JS kütüphanesi. Arayüzü yeniden kullanılabilir bileşenlere böler.

Dikkat: basit iş için ağırdır, önce basiti dene.

Next.js

React'in "her şey dahil" paketi: sayfa yönlendirme, SEO, sunucu tarafı, kutudan çıkar.

Yayınlanacak ciddi React sitesi = Next.js.

Tailwind CSS

Hazır mini CSS sınıflarıyla hızlı ve modern tasarım. LLM'lerle arası çok iyidir.

Prompt'a "Tailwind kullan" yaz, şık çıkar.

Bootstrap

Hazır bileşen seti (buton, menü, kart). Hızlıdır ama her Bootstrap sitesi birbirine benzer.

Eski usta; yeni işlerde Tailwind öne geçti.

Node.js & npm

JS'i tarayıcı dışında (sunucuda) çalıştıran ortam + JS dünyasının paket mağazası.

Sende: n8n ve Telegram botun Node üstünde koşuyor.

Vue & Svelte

React'in iki rakibi: Vue öğrenmesi daha kolay, Svelte daha hafif ve hızlı.

LLM'ler React'te daha isabetli, varsayılan o olsun.

Peki senin işin için hangisi? Alet seçmek, "en iyisi hangisi" sorusuyla değil, "ne yapacağım" sorusuyla başlar. Dört tipik işten birine bas, o iş için ne kurulur, niye öyle kurulur, gör:

Basit araç → framework'süz (saf HTML/CSS/JS). Veri saklayan küçük app → Flask + SQLite. Büyük çok ekranlı arayüz → React/Next.js. Şık görünüm → Tailwind.
Bölüm 23 · Büyük Resim

DevTools ve CDP Tarayıcının kaputu

Son bölüm, işin dedektiflik tarafı. Her tarayıcıda gizli bir mühendis paneli vardır: DevTools. Bilgisayarda F12'ye bas (ya da sayfaya sağ tıkla → "İncele"), açılır. İçinde üç sekme senin için altın değerinde: Elements DOM ağacını canlı gösterir, Network sayfanın attığı bütün API isteklerini listeler (kazıma işlerinde gizli API'leri burada buluyoruz), Console ise JS hatalarını gösterir. Bu kitaptaki 🔍 İncele modu, DevTools'un "element seç" okunun sana özel, Türkçe konuşan minik halidir.

CDP (Chrome DevTools Protocol) ise aynı panelin uzaktan kumandasıdır: bir program, tarayıcıya dışarıdan bağlanıp onu insan gibi kullanabilir, sayfa açar, tıklar, okur, ekran görüntüsü alır. Senin TripAdvisor kazıyıcın tam olarak böyle çalışıyor: Brave'e CDP kapısından (port 9223) bağlanıyor, otel puanlarını gerçek tarayıcının gözünden okuyor. DataDome gibi bot korumaları gerçek tarayıcı gördüğü için alarm çalmıyor.

İnsan   → klavye + fare      → Brave → tripadvisor.com
Program → CDP (port 9223)    → Brave → tripadvisor.com   ← aynı tarayıcı, uzaktan kumandayla

Anlatmakla olmaz, açıp göstermek gerek. Aşağıdaki kutu, DevTools'un üç sekmesinin küçük bir taklidi. Sekmelere bas: bir yazılımcı sorun ararken hangi sekmede neye baktığını gör.

Bir sitede "bu veri nereden geliyor?" diye merak edersen: F12 → Network → sayfayı yenile → listede JSON dönen isteği ara. Kazımacılığın birinci kuralı budur.
Bölüm 24 · Bilgisayar & Ağ

Donanım: CPU, RAM, disk, GPU Makinenin organları

Yazılım dünyasından bir katman aşağı inelim: bütün bu kodlar fiziksel bir makinede çalışıyor. Dört organını tanı, gerisi teferruat. CPU (işlemci) makinenin beynidir: her komutu sırayla o işler. İçindeki her çekirdek (core) ayrı bir işçidir, 4 çekirdek, aynı anda 4 iş demektir. RAM çalışma masasıdır: o an açık olan her şey (tarayıcı sekmeleri, çalışan programlar) masada durur; makine kapanınca masa boşalır. Disk (SSD, Solid State Drive, katı hal sürücüsü) arşiv dolabıdır: dosyaların kalıcı evi, kapansa da silinmez. GPU (ekran kartı) ise bin işçilik atölyedir: tek tek zeki değil ama aynı anda binlerce küçük hesabı birden yapar. Oyunların ve yapay zekânın GPU istemesinin sebebi bu, Bölüm 29'da bağlantıyı göreceksin.

Kuru laf olmasın, JavaScript, üzerinde çalıştığı cihaza bazı şeyleri sorabiliyor. İşte ŞU AN bu sayfayı okuduğun cihazın kimliği:

,
CPU çekirdeği
,
RAM (yaklaşık)
,
ekran çözünürlüğü
,
piksel yoğunluğu

Bu sayıları JS, navigator ve screen nesnelerinden okudu. (Tarayıcı, gizlilik için RAM'i yuvarlar ya da hiç söylemez, "gizli" görürsen sebebi bu.)

CPU = beyin (çekirdek = işçi), RAM = çalışma masası (geçici), disk = arşiv dolabı (kalıcı), GPU = bin işçilik atölye. "Sunucu yavaş" dediğinde ilk soru: masa mı doldu (RAM), beyin mi yoruldu (CPU), dolap mı taştı (disk)?
Bölüm 25 · Bilgisayar & Ağ

IP adresi İnternetin numara sistemi

Bölüm 19'da alan adlarını görmüştün; şimdi perdenin arkası. İnternete bağlı her cihazın bir numarası vardır: telefonun, bilgisayarın, sunucun, hatta akıllı televizyonun. Bu numaraya IP (Internet Protocol, internet iletişim kuralı) adresi denir ve klasik hali nokta ile ayrılmış dört sayıdır: 129.213.155.31, bu, senin sunucunun gerçek IP'si. İnternette veri, ev adresine gelen kargo gibi IP'den IP'ye taşınır; alan adları ise sadece bu numaraların akılda kalır takma adlarıdır (çeviriyi DNS yapar, hatırla: Bölüm 20).

Bir de herkesin bildiği özel bir numara var: 127.0.0.1, takma adıyla localhost. Anlamı "bu cihazın kendisi"dir, kendi kendinin adresi. Bir uygulamayı yayına almadan önce localhost:8506 gibi adreslerde denememizin sebebi bu: dış dünyaya çıkmadan, cihazın içinde test.

Peki senin şu anki IP'n ne? Butona bas, sayfa, ipify adında ücretsiz bir API'ye soracak (bak, Bölüm 14'teki GET isteği gerçek hayatta yine karşımızda):

IP (bina adresi) + port (daire kapısı) ikilisini birleştirince tam adres çıkar: 129.213.155.31:8506 = "şu binadaki şu daire" = bu kitabın oturduğu yer.

IP = cihazın internetteki numarası. Alan adı = numaranın takma adı. 127.0.0.1 (localhost) = cihazın kendisi. IP:port = bina + daire.
Bölüm 26 · Bilgisayar & Ağ

Proxy ve reverse proxy Araya giren aracılar

Proxy, Türkçesiyle vekil: iki taraf arasına bilerek konan aracı. Hangi tarafın vekili olduğuna göre adı değişir ve ikisini ayırt etmek, sunucu işlerinin yarısını anlamak demektir.

Forward proxy = senin vekilin. Sen siteye doğrudan gitmezsin; isteğin önce vekile gider, siteye vekil ulaşır. Site seni değil vekili görür. VPN'in yaptığı iş özünde budur, "IP'mi gizle, beni Almanya'dan çıkıyormuş gibi göster."

Reverse proxy = sunucunun vekili, yani apartman kapıcısı. Dışarıdan gelen herkes tek kapıya (443 numaralı HTTPS kapısına) gelir; kapıcı hangi daireye (porta) gideceklerini söyler. Senin sunucundaki kapıcının adı NPM (Nginx Proxy Manager): hcc'ye gelen 8502'ye, sebzemeyveye gelen 8505'e, bu kitaba gelen 8506'ya, hepsini o dağıtır ve HTTPS kilidini de o yönetir. Işıkların akışını izle:

Forward proxy, senin vekilin (VPN mantığı): Sen Vekil Site site yalnızca vekili görür, sen görünmezsin Reverse proxy, kapıcı (senin NPM'in): Ziyaretçi NPM:443 🔒 hcc :8502 kitap :8506 sebze :8505 tek kapıdan girilir, kapıcı doğru daireye yönlendirir
Forward proxy = senin vekilin (VPN). Reverse proxy = sunucunun kapıcısı (NPM). Yeni bir app'i yayına alırken hep aynı cümle: "portunda çalıştır, NPM'e bağla, subdomain ver."
Bölüm 27 · Bilgisayar & Ağ

Sunucu dünyası Linux · terminal · SSH · Docker · systemd · cron

Sunucu dediğimiz şey aslında sıradan bir bilgisayardır; farkı, hiç kapanmaması ve başında kimsenin oturmamasıdır. Ekranı yoktur, faresi yoktur, her şey yazıyla, uzaktan yönetilir. Bu dünyanın altı demirbaş aletini tanırsan, sunucu muhabbetlerinin tamamını takip edebilirsin. Altısı da senin sunucunda şu an fiilen çalışıyor:

Linux

Sunucuların işletim sistemidir (Windows'un sunuculardaki rakibi). Ücretsiz, sağlam, dünyadaki sunucuların ezici çoğunluğu bununla döner.

Senin sunucun: Ubuntu (bir Linux türü).

Terminal

Fare yerine yazıyla komut verilen siyah ekran. "ls" yaz dosyaları listeler, "mv" yaz taşır. Korkutucu görünür, alfabesi 20 komuttur.

Claude Code da benimle bu terminalde çalışıyor.

SSH (Secure Shell, güvenli kabuk)

Uzaktaki makinenin terminaline şifreli bağlanma yolu. Evdeki bilgisayarından sunucunun içine ışınlanmak gibi.

Sunucuna telefonundan bile SSH ile girebilirsin.

Docker

Uygulamayı bütün eşyasıyla taşınabilir bir konteynere koyar. "Bende çalışıyordu, sende niye çalışmıyor?" derdini bitirir: konteyner her yerde aynı çalışır.

n8n'in, NPM'in ve webtop Brave'in Docker konteynerlerinde.

systemd

Uygulamaları ayakta tutan bekçi. Sunucu açılınca uygulamayı başlatır, çökerse yeniden diriltir. "7/24 çalışsın" işinin sırrı budur.

Tracker'ların ve bu kitabın hepsi birer systemd servisi.

cron

Zamanlanmış görev saati: "her sabah 10:00'da şu komutu çalıştır." Kurarsın, unutursun, o hiç unutmaz.

Sebzemeyve fiyatları her sabah 10:00'da cron'la çekiliyor.

Terminali gözünde canlandırmanın tek yolu onu kullanmaktır. Aşağıdaki siyah ekran gerçek bir terminalin taklidi: komutu sen seçiyorsun, karşılığında o komutun gerçek bir sunucuda nasıl bir cevap verdiğini görüyorsun. Sırayla bas, bir sunucuya bakmanın nasıl bir şey olduğunu gör.

Bir komuta bas; hem komut hem cevabı burada görünecek.

Yukarıdaki altı düğme, sunucu yöneten birinin günde onlarca kez yazdığı komutlar. Tamamı okuma komutu; hiçbiri bir şeyi değiştirmez.

Sunucu = başında kimse olmayan, hiç kapanmayan bilgisayar. Linux üstünde, terminalden (SSH ile) yönetilir; uygulamaları systemd ayakta tutar, tekrarlı işleri cron zamanlar, taşınabilirliği Docker sağlar.
Bölüm 28 · Bilgisayar & Ağ

Git ve GitHub Kodun zaman makinesi

Git, kod için bir zaman makinesidir. Çalışmanın her anlamlı noktasında bir kayıt alırsın, buna commit denir. Her commit, projenin o anki fotoğrafıdır; bir şey bozulursa herhangi bir eski fotoğrafa geri dönebilirsin. "Belge-son-SON-yeni2.docx" karmaşasının mühendisçe çözülmüş hali.

GitHub ise bu kayıtların buluttaki evidir: commit'lerini oraya push edersin (itersin), başka makineden pull edersin (çekersin). Bulut yedeği + başkalarıyla ortak çalışma + dünyaya vitrin, üçü bir arada. Projenin GitHub'daki klasörüne de repo (repository = depo) denir:

Senin makinen, commit zinciri (her nokta bir fotoğraf): "ilk hali" "menü eklendi" "hata düzeldi" bugün GitHub buluttaki repo push ↗
Git = zaman makinesi (commit = kayıt noktası). GitHub = kayıtların buluttaki deposu (push = gönder, pull = çek, repo = proje klasörü). Senin sunucu yedeklerin de canszz/serverBackup reposunda duruyor.
Bölüm 29 · Yapay Zeka

LLM ve model Büyük dil modeli

Ve geldik benim mahalleme. ChatGPT, Claude, DeepSeek… bunların hepsinin motoru bir LLM'dir: Large Language Model, yani büyük dil modeli. Peki bu şey ne yapıyor? Özü, tek cümle: "buraya kadarki metne bakıp, sıradaki parçayı tahmin et." Hepsi bu. Ama bu tahmin, internetin neredeyse tamamı okunarak öğrenildiği için, tahminleri şaşırtıcı derecede isabetli, plan kurar, kod yazar, seninle dertleşir.

Model, bu tahmin makinesinin kendisidir: milyarlarca sayısal ayar düğmesinden oluşan dev bir matematik yumağı. O düğmelere parametre denir. Modelin hayatında iki dönem vardır: eğitim (okuma dönemi, aylar sürer, binlerce GPU çalışır, işte Bölüm 24'teki bağlantı) ve inference (kullanım dönemi, senin soru sorduğun her an).

Şu meşhur "harf harf yazma" olayı da buradan geliyor: model cevabı parça parça tahmin ettiği için, cevap sana da parça parça akıtılır. Adı streaming. Butona bas, aynısını canlı yaşa:

LLM = "sıradaki parçayı tahmin et" makinesi. Model = makinenin kendisi, parametre = ayar düğmeleri. Eğitim = okuma dönemi, inference = kullanım. Harf harf yazması = streaming.
Bölüm 30 · Yapay Zeka

Token Yapay zekânın lokması

Az önce hep "parça" dedim, kelime demedim. Çünkü model, metni ne harf harf ne kelime kelime okur; kendi lokma boyutunda parçalara böler. O lokmanın adı token'dır. Kabaca: kısa ve sık kullanılan kelimeler tek token olur, uzun kelimeler birkaç token'a bölünür. İngilizcede 1 token ≈ 4 harf; Türkçe ekli bir dil olduğu için biraz daha çok token yakar.

Token'ı bilmek neden para eder? Çünkü yapay zekâ dünyasında her şey token'la ölçülür: API'lerin fiyatı "1 milyon token = şu kadar dolar"dır, modellerin hafıza sınırı token cinsindendir (bir sonraki bölüm), hız "saniyede token" ile ölçülür. Aşağıya bir şey yaz, modelin senin cümleni nasıl lokmalara böldüğünü izle:

≈ 0 token. (Bu gösterim eğitim amaçlı bir taklit, gerçek bölme modelden modele değişir ama mantık birebir bu.)

İsim karışıklığı uyarısı: birazdan Bölüm 32'de bambaşka anlamda bir "token" göreceksin (güvenlik bileti). İkisinin birbiriyle HİÇ ilgisi yok, bilişimciler isim bulmakta tembeldir.

Token = modelin lokması (≈ 4 harf). AI'da fiyat, hafıza ve hız hep token'la ölçülür. "Prompt'um kaç token?" sorusu = "bu iş bana kaça mal olur?" sorusudur.
Bölüm 31 · Yapay Zeka

Prompt ve context window Talimat ve çalışma masası

Prompt, modele verdiğin talimatın tamamıdır, bu kitabın da varlık sebebi: iyi prompt, iyi sonuç. Ama senin yazdığın mesaj, modelin gördüğünün sadece bir parçasıdır. Perde arkasında modele ayrıca bir system prompt verilir ("sen yardımsever bir asistansın, şu kurallara uy…"), sohbetin tüm geçmişi eklenir, varsa yüklediğin dosyalar eklenir. Hepsinin toplamı, modelin çalışma masasına serilir.

O masanın bir boyu vardır: context window (bağlam penceresi), token cinsinden ölçülür. Her şey masaya sığmak zorundadır, sığmazsa en eskiler masadan düşer. Uzun sohbetlerde modelin başta konuşulanları "unutması" bundandır: hafızası silinmedi, masadan düştü:

Modelin çalışma masası (context window) şu an böyle dolu olabilir:

system
sohbet geçmişi
dosyalar
mesajın
boş yer

Masa dolmaya yaklaştıkça model özetlemeye, atlamaya başlar. "Uzun sohbette saçmalamaya başladı" şikâyetinin teknik adı budur.

İyi prompt'un formülünü artık bu kitabın diliyle söyleyebilirsin: ne + teknoloji + görünüm + veri + nerede çalışacak. "Bana site yap" değil; "Flask + SQLite ile, mobil uyumlu, 8507 portunda çalışacak bir stok takip sayfası yap", aradaki fark, bu kitaptaki 58 bölümün ta kendisi.

Prompt = talimatın tamamı (system + geçmiş + dosyalar + mesajın). Context window = token cinsinden masa boyu; dolunca eskiler düşer. Uzun işlerde önemli bilgiyi ara ara tekrar hatırlat.
Bölüm 32 · Yapay Zeka

API key, OAuth, MCP Programlar birbirine nasıl güvenir?

Bölüm 14'te API kapısını görmüştün. Ama o kapılar herkese açık değildir, kapıdan içeri girerken kimliğini göstermen gerekir. Üç kimlik yöntemi, bir de yepyeni bir kapı standardı öğreneceksin; bu dörtlü, "bağlanma" muhabbetlerinin tamamını kapsar.

API key

Programlar için üretilmiş çok uzun bir şifre: sk-a7f3… gibi. Her istekle birlikte gönderilir; sunucu ona bakıp "tamam, bu Mustafa'nın programı" der ve faturayı ona yazar.

DeepSeek key'in her gece AI özetinin faturasını senin bakiyene yazdırıyor.

Token (oturum bileti)

Şifreyle giriş yapınca sunucunun eline tutuşturduğu geçici bilet. Süresi dolunca çöp olur, çalınsa bile hasar sınırlı kalır. Bölüm 30'daki LLM token'ıyla SADECE adı ortak.

Bankanın "oturumunuz sona erdi" demesi = biletin süresi doldu.

OAuth (Open Authorization, açık yetkilendirme)

"Google ile giriş yap" düğmesinin arkasındaki sistem. Şifreni siteye VERMEDEN, Google'a "şu siteye şu kadar yetki ver" dersin. Şifre tek yerde kalır, yetki sınırlı verilir.

Shopify ve Gmail bağlantıların OAuth ile kuruldu.

MCP

Model Context Protocol: yapay zekânın alet çantası standardı. LLM'in bir araca (mağazana, takvimine, veritabanına) bağlanması için ortak fiş, "yapay zekânın USB-C'si" deniyor.

Ben Shopify mağazana ve n8n'ine MCP fişiyle bağlanıyorum.

MCP'yi bir de şemayla gör, solda model (ben), ortada fişler, sağda senin gerçek aletlerin:

Claude LLM MCP Shopify mağazan n8n workflow'ların Gmail · Takvim tarayıcı (Chrome)

Altın güvenlik kuralı: API key'ler backend'de saklanır, ASLA frontend'e yazılmaz, Bölüm 18'i hatırla: frontend'e koyduğun her şeyi herkes görebilir ("sayfa kaynağını görüntüle" yeter).

API key = programın şifresi (faturayı kime yazacağını belirler). Token = geçici oturum bileti. OAuth = şifresiz, sınırlı yetki verme. MCP = LLM'in aletlere bağlanma standardı.
Bölüm 33 · Yapay Zeka

AI sözlüğü Muhabbette geçen diğer terimler

Kapanışı, yapay zekâ haberlerinde ve sohbetlerinde en sık geçen sekiz terimle yapalım. Her biri tek nefeste:

Agent (ajan)

Sadece cevap yazan değil, ARAÇ KULLANAN yapay zekâ: dosya açar, komut çalıştırır, siteye bakar, sonuca kadar kendi kendine adım atar.

Şu an seninle konuşan şey bir agent, bu siteyi öyle kurdum.

Halüsinasyon

Modelin, bilmediği şeyi bilir gibi UYDURMASI. Kötü niyet değil, tahmin makinesinin doğası: en olası görüneni söyler, doğruluğunu bilmez.

Panzehiri: "emin değilsen emin değilim de" + kaynak istemek.

RAG

Cevaptan önce modelin senin belgelerinde arama yapıp bulduklarını masaya koyması. Ezberden değil, senin verinden konuşur, halüsinasyonu azaltır.

"PDF'lerime göre cevapla" diyen her sistem RAG'dir.

Embedding

Metni anlamını koruyarak sayı dizisine çevirme. Sayıya çevrilince "anlamca yakın mı?" hesaplanabilir olur, RAG'in arama motoru budur.

"Benzer ürünleri bul" özelliklerinin arkasında da bu var.

Fine-tuning

Hazır bir modeli kendi örneklerinle bir tur daha eğitip uzmanlaştırmak. Genel doktoru alıp kendi hastanende staj yaptırmak gibi.

Çoğu iş için gereksiz, önce iyi prompt + RAG dene.

Inference

Eğitimi bitmiş modelin ÇALIŞTIRILMASI, yani senin her soru sorduğun an. API faturası ve GPU kirası hep inference'a ödenir.

"Inference ucuzladı" haberi = "AI kullanmak ucuzladı" demek.

Temperature

Modelin cesaret ayarı: düşükse hep en güvenli tahmini seçer (tutarlı ama sıkıcı), yüksekse riskli tahminlere de şans verir (yaratıcı ama savruk).

Kod için düşük, beyin fırtınası için yüksek iyidir.

Open source model

Ağırlıkları (parametreleri) herkese açık model: indirir, kendi makinende çalıştırırsın. Kapalı modelin (Claude, GPT) tersine, veri dışarı çıkmaz.

DeepSeek açık ağırlıklı, ucuzluğunun bir sebebi bu.
Agent = araç kullanan AI. Halüsinasyon = bilmediğini uydurma. RAG = önce senin verinde ara. Embedding = anlamı sayıya çevir. Fine-tuning = modele staj. Inference = kullanım anı. Temperature = cesaret ayarı.
Bölüm 34 · Karşılaştırma

Programlama dilleri Aynı iş, yedi ayrı dil

Programlama dili, bilgisayara iş buyurmanın bir yoludur. Hepsi sonunda aynı şeyi yapar: makineye adım adım ne yapacağını söyler. Aralarındaki fark, o adımları ne kadar kısa ve ne kadar rahat yazdığın, bir de hangi işte güçlü olduklarıdır. Aradaki farkı anlatmanın en iyi yolu, hepsine aynı işi yaptırmaktır. Aşağıdaki yedi kutunun hepsi tek bir şeyi yapıyor: üç sayıyı topluyor ve sonucu ekrana yazıyor.

PythonEn kolay başlangıç
sayilar = [10, 20, 30]
print(sum(sayilar))

İki satır, noktalı virgül yok, süslü parantez yok. Yapay zekâ, veri işleme ve otomasyonun ana dili. Senin hisse paneli de Python'la yazıldı.

JavaScriptTarayıcının tek dili
const sayilar = [10, 20, 30];
console.log(sayilar.reduce((a, b) => a + b));

Web sayfasında çalışabilen tek dil budur. Sayfa tıklanınca bir şey olacaksa, o iş JavaScript'e düşer. Bu sitedeki bütün canlı örnekler JavaScript.

PHPEski ama her yerde
<?php
$sayilar = [10, 20, 30];
echo array_sum($sayilar);

Dolar işaretleri PHP'nin imzasıdır. İnternetteki sitelerin çok büyük bölümü hâlâ PHP ile dönüyor, çünkü WordPress PHP ile yazılmış.

JavaKurumsal ağır iş
int[] sayilar = {10, 20, 30};
int toplam = 0;
for (int s : sayilar) toplam += s;
System.out.println(toplam);

Dört satır, üstelik her değişkenin türünü baştan söylemek zorundasın. Karşılığında büyük bankalarda, Android uygulamalarında ve dev sistemlerde güvenle çalışır.

CMakineye en yakın
int sayilar[] = {10, 20, 30}, toplam = 0;
for (int i = 0; i < 3; i++) toplam += sayilar[i];
printf("%d\n", toplam);

Kaç eleman olduğunu bile sen sayıyorsun; dil senin yerine hiçbir şey düşünmez. Karşılığında en hızlısı odur. İşletim sistemleri bu dille yazılır.

GoHızlı sunucu
sayilar := []int{10, 20, 30}
toplam := 0
for _, s := range sayilar { toplam += s }
fmt.Println(toplam)

C kadar hızlıya yakın, Python kadar okunaklıya yakın. Google yazdı. Aynı anda binlerce isteğe cevap veren sunucular için seçilir.

SQLEmir değil, soru
SELECT SUM(sayi) FROM sayilar;

Tek satır, çünkü SQL diğerlerine benzemez. Ona nasıl yapacağını değil, ne istediğini söylersin; toplamayı kendisi halleder. Veritabanının dilidir.

Yukarıdaki yedi kutu aynı işi yapıyor demiştim. İnan olmaz, gör olur: düğmeye bas, her dilin ekrana ne yazdığını gör.

Çıktı burada belirecek.

Not, dürüst olalım: burada gerçekten çalışan tek dil JavaScript, çünkü tarayıcının içinde yalnızca o çalışabilir (11. bölüm). Diğer altısının çıktısı, o kod kendi ortamında çalıştırıldığında ekrana ne yazacaksa odur. Hepsinin sonucu aynı: 60.

Kutulara bir daha bak: aynı iş, kimisinde iki satır, kimisinde dört. Kısa olan her zaman daha iyi değildir. Python kısadır ama yavaştır; C uzundur ama şimşek gibidir. Dil seçmek, neyden fedakârlık edeceğini seçmektir: yazma kolaylığı mı, çalışma hızı mı?

Bütün diller sonunda aynı şeyi yapar, farkı yazarken ve çalışırken hissedersin. Python kısa ve kolay, C uzun ve hızlı, JavaScript tarayıcının tek dili, SQL ise emir değil soru sorar. "Bunu hangi dille yazayım?" diye sorarken aslında "neyi feda edeyim?" diye soruyorsun.
Bölüm 35 · Karşılaştırma

En çok kullanılan diller Sıralama · anket · gerçek rakam

"Hangi dil en popüler?" sorusunun tek bir doğru cevabı yok, çünkü popülerliği ölçmenin birkaç ayrı yolu var: kaç kişi kullanıyor, kaç iş ilanı açılıyor, GitHub'da kaç proje yazılıyor. En çok güvenilen ölçüm, Stack Overflow'un her yıl on binlerce yazılımcıya sorduğu ankettir. Yazılımcılara "geçen yıl hangi dille çalıştın?" diye soruluyor ve çıkan tablo şu:

JavaScript%63
HTML / CSS%54
SQL%52
Python%51

Kaynak: Stack Overflow Geliştirici Anketi 2025. Yüzde, ankete katılan yazılımcıların o dili kullanma oranıdır; toplamı 100 etmez, çünkü herkes birden çok dil kullanıyor. İlk dörtten sonra sırasıyla Java, TypeScript, C#, C/C++, PHP ve Go geliyor.

Bu tablonun sana söylediği asıl şey şu: ilk dört sıranın üçü zaten bu sitede öğrendiğin şeyler. HTML, CSS, JavaScript ve SQL, yazılım dünyasının ortak paydası. Bir yazılımcı hangi işi yaparsa yapsın, er geç bunlara dokunuyor.

Bir uyarı da şart: popüler olmak "en iyi" demek değildir. PHP listenin altlarındadır ama internetin yarısı onunla döner. Rust anketlerde küçük görünür ama yazılımcıların en sevdiği dildir. Popülerlik sana sadece yardım bulmanın ne kadar kolay olacağını söyler: bir dille takıldığında, o dili kullanan ne kadar çok insan varsa, sorununun cevabı da o kadar hazır bekliyordur.

Popülerlik sıralaması "iyilik" sıralaması değil, "kalabalık" sıralamasıdır. Kalabalık olması işine yarar: takıldığında cevabı hazır bulursun. İlk dördün üçünü (HTML/CSS, JavaScript, SQL) zaten bu kitapta gördün.
Bölüm 36 · Karşılaştırma

Hangi iş için hangi dil? Görev · ana tercih · alternatifleri

Yazılımcılar dil seçerken zevkine göre değil, işine göre seçer. Her işin oturmuş bir ana tercihi, bir de birkaç makul alternatifi vardır. Tablo tam olarak bunu gösteriyor: solda yapmak istediğin iş, ortada herkesin ilk seçtiği, sağda "şu da olur" dedikleri.

Yapmak istediğinAna tercihAlternatifleri
Web sayfasının görünen yüzüHTML + CSS + JavaScriptBaşka yolu yok; tarayıcı yalnızca bunları anlar
Sitenin arka mutfağıPython, PHPNode.js (JavaScript), Ruby, Java, Go, C#
Yapay zekâ, veri analiziPythonR (istatistik), Julia (ağır hesap)
iPhone uygulamasıSwiftReact Native, Flutter (ikisi birden iPhone + Android)
Android uygulamasıKotlinJava (eskisi), React Native, Flutter
Windows masaüstü programıC#Python (küçük araçlar), Electron (web teknolojisiyle)
OyunC# (Unity), C++ (Unreal)Godot (kendi dili GDScript), JavaScript (tarayıcı oyunları)
Çok yüke dayanan sunucuGo, RustJava, C++, Elixir
İşletim sistemi, sürücü, gömülü cihazC, C++Rust (yenisi, daha güvenli)
Veritabanından veri çekmekSQLYok sayılır; SQL bilmeyen veriyle çalışamaz
Sunucuda ufak işleri otomatikleştirmekBash (terminal), PythonPowerShell (Windows tarafında)

Tablodan çıkan basit kural: bir işte herkesin aynı dili seçmesinin bir sebebi vardır. O dilin etrafında hazır kütüphaneler, anlatan videolar, sorunu çözülmüş forum başlıkları birikmiştir. Alternatife sapmak, o hazır birikimden vazgeçmek demektir; bunu ancak çok iyi bir sebebin varsa yaparsın.

Dil zevk meselesi değil, iş meselesi. Web yüzü = HTML/CSS/JS, yapay zekâ = Python, telefon = Swift/Kotlin, veri = SQL, hız = Go/Rust/C. Bir yapay zekâya iş tarif ederken dili de söylemek işini kolaylaştırır: "Bunu Python'la yaz" demek, "bir program yaz" demekten çok daha net bir istektir.
Bölüm 37 · Karşılaştırma

Veritabanları SQL · NoSQL · hangisi ne zaman

16. bölümde veritabanının ne olduğunu gördün: bilgiyi düzenli saklayan depo. Peki neden bir sürü çeşidi var? Çünkü bilgiyi saklamanın iki ayrı felsefesi var. Biri her şeyi tabloya dizer (SQL), öteki her kaydı kendi başına bir paket gibi tutar (NoSQL). Aynı müşteri kaydının iki dünyadaki hali yan yana durunca fark hemen anlaşılıyor:

SQL · tablo dünyasıDüzen
musteriler tablosu
┌────┬─────────┬──────────────┐
│ id │ ad      │ sehir        │
├────┼─────────┼──────────────┤
│  1 │ Mustafa │ Antalya      │
└────┴─────────┴──────────────┘

SELECT ad FROM musteriler
WHERE sehir = 'Antalya';

Sütunlar baştan bellidir, her kayıt aynı kalıba uymak zorundadır. Kalıp dışına çıkmaya izin vermemesi, kusuru değil görevidir: yanlış veri içeri giremez.

NoSQL · paket dünyasıEsneklik
{
  "ad": "Mustafa",
  "sehir": "Antalya",
  "telefonlar": ["0532...", "0242..."],
  "notlar": { "vip": true }
}

db.musteriler.find({ sehir: "Antalya" })

Her kayıt kendi şeklinde olabilir; birine fazladan alan eklemek için kimseden izin almazsın. Esnekliğin bedeli: düzeni kimse denetlemez, karışması senin elinde.

Şimdi ikisini de sen sorgula. Aşağıda beş müşteri var. Bir düğmeye bas: solda o işin SQL cümlesi, sağda NoSQL karşılığı yazılsın, altta da gelen cevap gerçekten süzülsün.

SQL dili
SELECT * FROM musteriler;
NoSQL karşılığı
db.musteriler.find({})
AdŞehirHarcamaVIP mi

Gelen kayıt: 5

İkisi de bir dosyaya yazıyor sonuçta; fark, kuralı kimin koyduğunda. Şimdi de isimlere bakalım, çünkü asıl kafa karıştıran onlar:

SQLite

Tek bir dosyadan ibaret veritabanı. Sunucusu yok, kurulumu yok; dosyayı kopyalarsan veritabanını kopyalamış olursun. Küçük ve orta projeler için fazlasıyla yeter.

Hisse panelin, lojman uygulaman ve telefonundaki çoğu uygulama SQLite kullanıyor.

PostgreSQL

SQL dünyasının en yetenekli, en titiz üyesi. Ağır yükü ve karmaşık sorguyu kaldırır, veri bütünlüğüne takıntılıdır. "Büyüyeceğim" diyen proje bununla başlar.

Alternatifi: aynı işi gören ama daha sade olan MySQL / MariaDB.

MySQL / MariaDB

İnternetin en yaygın veritabanı. WordPress ve sayısız hazır sistem bunun üstünde çalışır. PostgreSQL kadar yetenekli değildir ama kurmayan yok gibidir.

Shopify de, YouTube da MySQL kullanıyor (39. bölüme bak).

MongoDB

NoSQL tarafının en bilineni. Kayıtları JSON paketleri gibi tutar. Şekli sürekli değişen veri için rahattır; sıkı hesap işleri için uygun değildir.

Alternatifleri: Firebase (Google), DynamoDB (Amazon), CouchDB.

Redis

Veriyi diske değil belleğe yazar; bu yüzden şimşek gibidir ama makine kapanınca uçabilir. Kalıcı depo değil, hızlı ara bellektir.

"Bu sayfayı her seferinde yeniden hesaplama, 5 dakika hazır tut" işleri onun.

Excel / Google Sheets

Evet, o da bir veritabanı sayılır ve bazen doğru cevap odur. Birkaç yüz satırlık liste için veritabanı kurmak, çivi çakmak için vinç kiralamaktır.

Sınır şudur: iki kişi aynı anda yazmaya başlıyorsa, artık gerçek veritabanı zamanıdır.

Seçim kuralı sade: Verinin şekli belli ve para/stok gibi şaşmaması gereken bir şeyse SQL. Şekli sürekli değişiyor ve hızla büyüyorsa NoSQL. Emin değilsen SQL seç; hem 35. bölümdeki sıralamada gördüğün gibi herkes onu biliyor, hem de yanlış veriyi baştan reddeder.

SQL = tablo, kurallı, kalıp dışı veriyi reddeder. NoSQL = paket, esnek, düzeni sana bırakır. SQLite tek dosya (küçük projeler), PostgreSQL titiz ve güçlü, MySQL en yaygın, MongoDB esnek, Redis bellekte ve çok hızlı. Kararsızsan SQL.
Bölüm 38 · Karşılaştırma

Hafiflik Aynı sayfa · kaç kilobayt?

Bir web sayfası açıldığında tarayıcı, o sayfanın bütün dosyalarını internetten indirir. İndirilecek ne kadar çoksa, sayfa o kadar geç açılır; özellikle telefonda ve zayıf çekimde. "Hafiflik" dedikleri budur: aynı işi daha az dosyayla yapmak. Aşağıdaki rakamlar tahmin değil, bugün ölçüldü.

Şöyle bir sayfa düşün: ortada bir düğme, her tıklamada sayı bir artıyor. Birkaç ayrı yolla yapalım.

YöntemİndirilenNe kazanırsın, ne kaybedersin
Saf HTML + CSS + JavaScript0,3 KBKazanç: anında açılır, hiçbir şeye bağımlı değil. Kayıp: her şeyi elinle yazarsın.
jQuery ile85 KBKazanç: eski tarayıcı dertleri biter. Kayıp: bugün gereksiz, modern JavaScript aynısını yapıyor.
Bootstrap ile (hazır tasarım)227 KBKazanç: dakikalar içinde düzgün görünen sayfa. Kayıp: bütün Bootstrap siteleri birbirine benzer.
React ile138 KBKazanç: büyük ve karmaşık arayüzleri düzenli tutar. Kayıp: tek düğme için fil getirmek.
Vue ile143 KBReact'e çok yakın, öğrenmesi daha kolay kabul edilir.

Ölçüm: 30 Eylül 2026, jsDelivr dağıtım ağından indirilen sıkıştırılmamış üretim dosyaları (React 18 + ReactDOM, Bootstrap 5.3 CSS, jQuery 3.7, Vue 3.4). Sunucular bu dosyaları sıkıştırarak gönderdiğinde rakamlar üçte birine kadar düşer, ama aradaki oran değişmez.

Kilobayt soyut bir şey; hissettirelim. Düğmeye bas, beş sayfa aynı anda yüklenmeye başlasın. Hepsi aynı hızda inen bir bağlantıda (yavaş bir mobil hat, saniyede 50 KB) yarışıyor.

Saf HTML bitmiş, sen daha gözünü kırpmamışsındır. Bootstrap'in çubuğu hâlâ yürüyorsa sebebi şu: aynı düğme için 227 kat fazla dosya indiriyor.

Oranı gör: tek düğmelik sayfa saf HTML'le 0,3 KB, React'le 138 KB. Yani dört yüz kattan fazla. Bu, React kötü demek değil; React'in derdi tek düğme değil, yüzlerce parçası olan karmaşık bir arayüzü düzenli tutmak. Küçük işte fil, büyük işte kurtarıcıdır.

Merak edersen, okuduğun bu sayfanın kendisi 499 KB ve elli sekiz bölümün tamamını, bütün çizimleri, bütün canlı örnekleri, bütün kodları içeriyor. Bu, boş bir React kütüphanesinin (138 KB) iki buçuk katı kadar; React tek başına daha hiçbir şey göstermezken burada koca bir kitap var. Sitenin baştan beri "tek dosya, sunucusuz" kurulmuş olmasının sebebi bu.

Hafiflik = daha az indirilecek dosya = daha hızlı açılan sayfa. Basit iş için saf HTML/CSS/JS her şeyden hızlıdır. Hazır kütüphaneler (React, Vue, Bootstrap) zamandan kazandırır, kilobayttan kaybettirir. Doğru soru "hangisi daha iyi?" değil, "bu iş o yükü hak ediyor mu?"
Bölüm 39 · Karşılaştırma

Tanıdık siteler neyle yazılmış? YouTube · Instagram · WhatsApp · Netflix

Buraya kadar öğrendiğin bütün kelimelerin gerçek hayatta nerede durduğunu görmenin en iyi yolu, her gün açtığın uygulamaların kaputunu kaldırmaktır. Hepsinin ortak bir huyu var: tek bir dille yazılmış hiçbiri yok. Her iş, o işte en iyi olan dile verilmiş.

UygulamaArka mutfak (dil)VeritabanıDikkat çeken
YouTubePython, C++, Java, GoMySQL (Vitess ile)Tek MySQL yetmeyince, onu bölüp yöneten Vitess'i kendileri yazıp herkese açtılar.
InstagramPython (Django)PostgreSQLDünyanın en büyük Python sitelerinden biri. "Python yavaştır" lafının cevabı burada.
WhatsAppErlangMnesia (Erlang'ın kendi veritabanı)Kimsenin duymadığı bir dille, avuç dolusu mühendisle yüz milyonlarca kullanıcıya hizmet verdiler.
NetflixJava, Python, Node.jsCassandra ailesiArayüz React ile yazılıyor; telefon uygulamaları Kotlin ve Swift.
ShopifyRuby on Rails, RustMySQLYüz binlerce mağaza tek bir Ruby uygulamasının üstünde dönüyor. Senin mağazan da orada.

Kaynaklar: şirketlerin kendi mühendislik yazıları ve bu sistemleri inceleyen teknik incelemeler (ByteByteGo, High Scalability, USENIX sunumları). Büyük sistemler yıllar içinde parça parça değişir; buradaki tablo genel resmi verir, son vidayı değil.

Tablo iyi de, bu parçalar birbirine nasıl bağlanıyor? Instagram'ı örnek alıp çizelim; çünkü beşinin de iskeleti aynı. Telefonundaki uygulamadan veritabanına kadar yol şu:

Telefon Swift / Kotlin (arayüz) Sunucu Python · Django (mutfak) PostgreSQL yazılar, beğeniler takipçi listesi Dosya deposu fotoğraf ve videolar (veritabanında durmaz) JSON

Akan noktalar, senin akışını açtığın anda giden isteği temsil ediyor. Dikkat: fotoğrafın kendisi veritabanına konmuyor. Veritabanında yalnızca "bu fotoğraf şu dosyada duruyor" bilgisi var; dosya ayrı bir depoda. Milyarlarca fotoğrafı veritabanına doldurmak hiçbir veritabanının kaldırabileceği bir şey değil.

Bu tablodan çıkarılacak üç ders var. Birincisi: "en iyi dil" diye bir şey yok, en uygun dil var. WhatsApp'ın Erlang'ı, aynı anda milyonlarca konuşmayı ayakta tutmakta ustadır; başka işte kimse kullanmaz. İkincisi: bu şirketler de MySQL, PostgreSQL gibi senin de kullanabileceğin araçlarla başladı. Aradaki fark araçlar değil, ölçek. Üçüncüsü: hepsi arayüzü ayrı, mutfağı ayrı yazmış; yani 18. bölümdeki frontend-backend ayrımı, dünyanın en büyük sistemlerinde de aynen böyle.

Büyük uygulamaların hiçbiri tek dille yazılmaz; her iş en uygun dile verilir. YouTube Python+C++ ve MySQL, Instagram Python ve PostgreSQL, WhatsApp Erlang, Netflix Java, Shopify Ruby. Hepsinin ortak noktası: arayüz ayrı, mutfak ayrı, veritabanı ayrı.
Bölüm 40 · Bilgisayarın İçi

Bilgisayar adan zeye Hardware (donanım) atlası · 23 parça · İngilizce adı ve Türkçesiyle

Bir bilgisayar, ne kadar karmaşık görünürse görünsün, tek bir döngüyü durmadan tekrarlayan bir makinedir: Input (giriş) alır, Process (işlem) yapar, sonucu Memory (bellek) üzerinde tutar, kalıcı olanı Storage (depolama) birimine yazar ve Output (çıkış) verir. Bu beşliye bilgisayar biliminde IPO modeli (Input-Process-Output, Giriş-İşlem-Çıkış) denir. Kasadaki her parça bu beş işten birini yapar ya da diğerlerini besler: Power (güç) elektrik verir, Cooling (soğutma) ısıyı atar, Network (ağ) dış dünyaya bağlar, Motherboard (anakart) hepsini birbirine bağlar.

Aşağıdaki şeritte bir göreve dokun: çizimde yalnızca o işi yapan parçalar yanar. Sonra çizimde herhangi bir parçaya dokun; açıklama tam o parçanın yanında açılır. Önce kısa tanım gelir, Detayı aç düğmesi benzetmeyi, gerçek ürün örneğini ve alternatifini gösterir. Çarpı ya da aynı parçaya ikinci dokunuş balonu kapatır. Klavyeyle de gezebilirsin: Tab ile parçaya gel, Enter'a bas, Esc ile kapat.

Kasa · Case Anakart Port CPU İşlemci Soğutucu RAM PCH Yonga seti SSD · M.2 NVMe GPU Ekran kartı BIOS Pil Ses LAN Wi-Fi Kasa fanı HDD Sabit disk Güç kaynağı · PSU 750 W Kamera Monitör Hoparlör Modem · Router Klavye Fare

Bir tuşa basınca ne olur? Keystroke (tuş vuruşu) yolculuğu

Tek bir harfin klavyeden ekrana, oradan diske yolculuğu. Her adımda o işi yapan parça çizimde yeşil yanar.

"Yolculuğu oynat"a bas: A harfine bastığında hangi parça ne yapıyor, sırayla görelim.

Çizimde küçük kalan parçalar aşağıdaki ızgarada da var; buradan seçmek de aynı balonu, tam dokunduğun kartın altında açar.

Bütün bu parçalar Motherboard (anakart) üzerinden birbirine bağlanır; anakart şehrin yol ağı gibidir. Bir bilgisayar alırken sırayla bak: CPU (Central Processing Unit, Merkezi İşlem Birimi: ne kadar hızlı düşünür), RAM (Random Access Memory, Rastgele Erişimli Bellek: aynı anda kaç işi masada tutar), SSD (Solid State Drive, Katı Hal Sürücüsü: ne kadar hızlı açılır, ne kadar dosya alır), GPU (Graphics Processing Unit, Grafik İşlem Birimi: oyun, video, yapay zekâ), PSU (Power Supply Unit, Güç Kaynağı Birimi: hepsini sağlıklı besleyebilir mi).

  • Office PC (ofis bilgisayarı): Intel Core i5 ya da AMD Ryzen 5, 16 GB RAM, 512 GB SSD; ekran kartı işlemcinin içindeki integrated graphics (dahili grafik) yeter.
  • Gaming / video editing (oyun ve video kurgusu): Ryzen 7 ya da Core i7, 32 GB DDR5 (Double Data Rate 5), 1-2 TB NVMe (Non-Volatile Memory Express) SSD, Nvidia GeForce RTX ya da AMD Radeon RX ekran kartı, 750-850 W güç kaynağı.
  • MacBook: Apple işlemciyi, belleği ve ekran kartını tek bir SoC (System on a Chip, yonga üstünde sistem) içinde birleştirir; bu yüzden RAM sonradan artırılamaz, alırken doğru miktarı seçmek gerekir.
  • Dizüstü (laptop): aynı 23 parçanın hepsi vardır ama küçülmüş ve çoğu lehimlidir; klavye, fare (touchpad), kamera, hoparlör ve batarya (güç) gövdeye gömülüdür.
Giriş (klavye, fare, kamera) → İşlem (CPU beyin, GPU bin işçilik atölye) → Bellek (RAM çalışma masası) → Depolama (SSD çekmeceli dolap, HDD plak arşivi) → Çıkış (monitör, hoparlör). Hepsini anakart bağlar, PSU besler, soğutucu serinletir, LAN ve Wi-Fi dünyaya açar. Dükkânda İngilizce adlarını görürsün: Motherboard, CPU, RAM, SSD, HDD, GPU, PSU.
Bölüm 41 · Bilgisayarın İçi

Bilgisayar nasıl açılır? Güç düğmesinden masaüstüne 8 adım · Boot

Güç düğmesine bastığın an ile masaüstünün göründüğü an arasında 10-30 saniye geçer. O kısa sürede, bir önceki bölümde tanıdığın parçalar sırayla uyanır ve birbirine "hazırım" der. Buna açılış, İngilizcesiyle boot denir. Bilgisayar "açılmıyor" dediğinde hangi adımda takıldığını bilirsen, sorunun yarısını çözmüş olursun.

"Açılışı başlat"a bas, adımlar sırayla yansın. Ya da "Bir adım ilerle" ile kendi hızında git.
  • Hiç ışık yanmıyor: 1. adım, güç kaynağı ya da priz.
  • Fanlar dönüyor ama ekran siyah, bip sesi var: 3. adım (POST), çoğunlukla RAM yerinden oynamıştır ya da ekran kartı oturmamıştır.
  • "No bootable device" yazısı: 4. adım, disk görünmüyor ya da açılış sırası yanlış.
  • Windows logosunda dönüp duruyor: 6-7. adım, bozuk sürücü ya da güncelleme. "Güvenli mod" tam bu adımları en sade hâliyle çalıştırmak demek.
Güç → UEFI (Unified Extensible Firmware Interface) ya da eski adıyla BIOS (Basic Input/Output System, temel girdi/çıktı sistemi) → POST kontrolü → disk seçimi → bootloader → çekirdek + sürücüler → servisler → giriş ekranı. Sorun nerede takılıyorsa, o adımın parçasına bak.
Bölüm 42 · Bilgisayarın İçi

Yazılım katmanları ve işletim sistemleri Firmware · sürücü · işletim sistemi · uygulama

Donanım tek başına bir yığın metal ve silikondur. Onu kullanılır hâle getiren şey, üst üste dizilmiş yazılım katmanlarıdır. Her katman alttakinin dilini bilir, üsttekine daha kolay bir dil sunar. Chrome ekran kartına doğrudan "şu pikseli boya" demez; işletim sistemine söyler, işletim sistemi sürücüye, sürücü de ekran kartına. Pastanın dilimlerine tıkla, her katmanın ne yaptığını ve senin bilgisayarındaki örneğini gör.

Bir katmana tıkla.

Beş büyük işletim sistemi

İşletim sistemi (İngilizcesi Operating System, OS) bilgisayarın yöneticisidir: belleği kime ne kadar vereceğine, hangi programın ne zaman işlemciyi kullanacağına, dosyaların nereye yazılacağına o karar verir. Masaüstünde Windows, macOS ve Linux; telefonda Android ve iOS hüküm sürer.

Pazar payları yaklaşık değerlerdir (StatCounter, 2025). Sunucu dünyasında tablo tersine döner: internetteki sunucuların büyük çoğunluğu Linux çalıştırır, bu kitabın sunucusu da Ubuntu Linux.

Yeni bir bilgisayara ne kurulur?

Kutudan yeni çıkmış bir Windows bilgisayarı düşün. İşletim sistemi hazır geldi; asıl kullanılır hâle gelmesi için şu sırayla gidilir. Sağ sütun, aynı işin ücretsiz ya da farklı alternatifi.

SıraNeYaygın seçimAlternatif
1Güncellemeler + sürücülerWindows Update, Nvidia/AMD sürücüsüÜreticinin destek sayfası (Lenovo Vantage, HP Support Assistant)
2TarayıcıGoogle ChromeBrave, Firefox, Microsoft Edge
3GüvenlikMicrosoft Defender (içinde gelir)Bitdefender, Kaspersky, ESET
4OfisMicrosoft 365 (Word, Excel)Google Docs, LibreOffice (ücretsiz)
5PDF okuyucuTarayıcının kendisiAdobe Acrobat Reader, SumatraPDF
6SıkıştırmaWindows'un dahili ZIP desteği7-Zip, WinRAR
7YedeklemeOneDriveGoogle Drive, harici disk + Dosya Geçmişi
8MedyaVLCWindows Medya Oynatıcı
9İletişimWhatsApp, Telegram, ZoomMicrosoft Teams, Discord
  • Ekran kartı sürücüsü kurulmamış bir oyun bilgisayarı, 40 bin liralık kartı "temel görüntü bağdaştırıcısı" olarak kullanır: oyun açılmaz ya da takılır. Sürücü katmanı bu kadar önemli.
  • macOS ve iOS'u yalnızca Apple cihazlarında kullanabilirsin; Windows ve Linux neredeyse her PC'ye kurulur.
  • Android aslında Linux çekirdeği üstüne kurulmuştur; yani cebindeki telefon bir Linux makinesidir.
Donanım → firmware (UEFI) → sürücü → işletim sistemi → çalışma ortamı → uygulama. Her katman bir alttakine tercümanlık eder. Masaüstünde Windows yaygın, sunucuda Linux, telefonda Android.
Bölüm 43 · Bağlantı

İnternet nasıl çalışır? Evinden veri merkezine bir paketin yolculuğu

Telefonuna youtube.com yazdığında, istek havaya karışıp sihirle karşıya ulaşmaz. Küçük paketlere bölünür ve fiziksel bir yolculuğa çıkar: önce evindeki modeme, oradan internet servis sağlayıcına (Türk Telekom, Superonline gibi, İngilizcesi ISP), oradan ülkeler arası omurga kablolarına, çoğu zaman okyanus tabanındaki denizaltı fiber kablolarına ve sonunda sunucunun durduğu veri merkezine. Cevap aynı yoldan geri döner. Bütün bunlar genellikle 100 milisaniyenin altında olur.

Telefon Modemrouter Servis sağlayıcıISP Omurgabackbone Denizaltı fiber kablo Veri merkezidata center
Kırmızı nokta giden istek, yeşil nokta dönen cevap. Düğmeye basarsan yolculuğu durak durak anlatırım.

Bu yolculuğun bir de dil kuralları var; bunlara protokol denir. Her paketin üstünde kimden kime gittiği (IP adresi, 25. bölüm), içinde hangi programa ait olduğu (port, 20. bölüm) yazar. TCP paketlerin eksiksiz ve sırayla gelmesini garanti eder (web sayfası, e-posta); UDP garanti vermez ama hızlıdır (canlı yayın, görüntülü arama, oyun). Kaybolan bir video karesini yeniden istemek yerine geçmek daha iyidir.

  • Türkiye'nin uluslararası internet trafiğinin önemli bölümü İstanbul ve Akdeniz üzerinden geçen denizaltı kablolarıyla Avrupa'ya bağlanır. Bir kablo koptuğunda bazı sitelerin aniden yavaşlaması bundandır.
  • YouTube ve Netflix videoları çoğu zaman okyanus ötesinden gelmez: servis sağlayıcının içine yerleştirilmiş önbellek sunuculardan (Google Global Cache, Netflix Open Connect) gelir. Buna CDN denir, 46. bölümde göreceksin.
  • Komut satırında tracert google.com (Windows) ya da traceroute google.com (Mac, Linux) yazarsan paketinin geçtiği durakları tek tek görürsün.
İstek paketlere bölünür → modem → servis sağlayıcı → omurga → denizaltı kablosu → veri merkezi; cevap aynı yoldan döner. TCP = garantili ve sıralı, UDP = hızlı ama garantisiz.
Bölüm 44 · Bağlantı

Ethernet, Wi-Fi, Bluetooth ve diğerleri Kablolu ve kablosuz her bağlantı · hız ve menzil karşılaştırması

Cihazların birbirine ve internete bağlanmasının bir düzine yolu var. Hepsi aynı soruya farklı cevap verir: ne kadar hızlı, ne kadar uzağa, ne kadar enerjiyle? Kablo her zaman daha hızlı ve kararlıdır, kablosuz ise özgürlük verir. Aşağıda hepsini aynı cetvele koyduk. Düğmeyle hız ve menzil arasında geçiş yap.

Çubuklar logaritmik ölçekte çizildi, yoksa NFC ile fiber aynı ekrana sığmazdı: uzunluk farkı küçük görünse de Wi-Fi 7, NFC'den yaklaşık 100 bin kat hızlı. Değerler teorik en yüksek hızlardır, evde ölçtüğün genelde bunun yarısı ya da altıdır.

Wi-Fi nesilleri ve frekanslar

Wi-Fi'ın iki adı var: teknik adı 802.11ax gibi, pazarlama adı Wi-Fi 6 gibi. Bir de frekans meselesi var: 2,4 GHz duvarları iyi deler, uzağa gider ama yavaştır ve kalabalıktır (mikrodalga fırın bile karıştırır). 5 GHz daha hızlı ama duvarda çabuk zayıflar. 6 GHz (Wi-Fi 6E ve 7) neredeyse boş bir otoyol gibidir, ama yalnızca aynı odada en iyi sonucu verir.

AdTeknik adYılTeorik hızFrekans
Wi-Fi 4802.11n2009600 Mbps2,4 + 5 GHz
Wi-Fi 5802.11ac20143,5 Gbps5 GHz
Wi-Fi 6802.11ax20199,6 Gbps2,4 + 5 GHz
Wi-Fi 6E802.11ax20219,6 Gbps+ 6 GHz
Wi-Fi 7802.11be202446 Gbps2,4 + 5 + 6 GHz
  • Oyun ve görüntülü toplantı: mümkünse Ethernet kablosu. Wi-Fi hızlı olsa bile ani gecikme sıçramaları yapar, kablo yapmaz.
  • Kulaklık, saat, klavye: Bluetooth. Az enerji harcar, birkaç metrede çalışır. Bluetooth Low Energy sayesinde akıllı saat pili günlerce gider.
  • Telefonla ödeme ve kartlı geçiş: NFC. Menzilin 4 santim olması güvenlik özelliğidir; cebindeki kart uzaktan okunamaz.
  • Köy evi, kablo yok: 4.5G/5G modem ya da Starlink uydu interneti.
Kablo (Ethernet, fiber) = en hızlı ve kararlı. Wi-Fi = evin içi, 2,4 GHz uzağa, 5-6 GHz hızlı. Bluetooth = birkaç metre, az enerji. NFC = 4 cm, ödeme. 4G/5G = her yer. Starlink = kablonun olmadığı yer.
Bölüm 45 · Web Sitesi Baştan Sona

Bir web sitesinin katmanları HTML · CSS · JS · backend · veritabanı · sunucu · CDN

Kitabın başında HTML, CSS ve JavaScript'i tek tek öğrendin. Şimdi hepsini aynı sitede yan yana koyalım. Gerçek bir e-ticaret sitesini düşün: ürün listesi gösteriyor, sepete ekletiyor, ödeme alıyor. Bu site yedi katmandan oluşur. Üç tanesi tarayıcında çalışır (frontend), dört tanesi uzakta bir sunucuda (backend ve altyapı). Katmana tıkla, o katmanın gerçek kodunu gör.

Bir katmana tıkla.

Backend: aynı iş, yedi dil

Ön yüzde neredeyse herkes HTML + CSS + JavaScript kullanır; seçim yoktur. Asıl seçim mutfakta, yani backend'de yapılır. Aşağıda her dil aynı işi yapıyor: veritabanından ürünleri çekip JSON olarak gönderiyor (14. bölümdeki API'nin ta kendisi). Sekmeye bas, kodun dilini ve o dilin artısını eksisini karşılaştır.

Hazır site kurucular: kod yazmadan

Her site sıfırdan kodlanmaz. Dünyadaki sitelerin çok büyük bölümü hazır bir sistemin üstünde döner. W3Techs'in ölçümüne göre internetteki sitelerin yaklaşık %43'ü tek başına WordPress ile çalışıyor.

WordPress PHP + MySQL · ücretsiz, açık kaynak

Binlerce tema ve eklenti, blog ve kurumsal site için birebir.

Eklenti çoğaldıkça yavaşlar, güncellenmezse en çok saldırıya uğrayan sistemdir.

Örnek: TechCrunch, birçok Türk haber ve kurumsal sitesi.

Shopify Ruby · aylık abonelik

Ödeme, kargo, stok hazır; sunucu derdi yok.

Aylık ücret + uygulama ücretleri, temanın dışına çıkmak Liquid dili ister.

Örnek: garamsi.com, Gymshark, Allbirds.

Wix · Squarespace Sürükle bırak

Bir öğleden sonrada vitrin sitesi.

Başka yere taşınamaz, büyüdükçe kısıtlar.

Örnek: küçük işletmeler, portfolyolar.

Statik site Saf HTML/CSS/JS veya Astro, Hugo

En hızlı, en ucuz (çoğu zaman bedava), en güvenli.

Üye girişi, sepet gibi dinamik işler için ek servis gerekir.

Örnek: bu kitap, belgeleme siteleri.

  • Instagram: ön yüz React, mutfak Python (Django), veritabanı PostgreSQL. Üç katman, üç ayrı teknoloji.
  • Wikipedia: PHP ile yazılmış MediaWiki; WordPress ile aynı dilin en büyük örneği.
  • Bu kitap: sadece ilk üç katman var (HTML + CSS + JS), backend ve veritabanı yok. Sunucu dosyaları olduğu gibi gönderiyor.
Tarayıcıda: HTML (iskelet) + CSS (görünüş) + JS (davranış). Sunucuda: backend dili (PHP, Python, Node.js, Java, Go, C#, Ruby) + veritabanı + sunucu yazılımı + CDN. Her katman değiştirilebilir, bu yüzden "en iyi dil" değil "bu işe uygun dil" sorusu sorulur.
Bölüm 46 · Web Sitesi Baştan Sona

Site nerede durur? Hosting seçenekleri Paylaşımlı · VPS · bulut · serverless · statik · CDN

Kodu yazdın, şimdi dünyanın onu görebileceği, 7/24 açık bir bilgisayara koyman lazım. Buna barındırma, İngilizcesiyle hosting denir. Seçenekler, ev kiralamaya çok benzer: apartman dairesinde oda (paylaşımlı), kendi dairen (VPS), istediğin kadar oda ekleyebildiğin otel (bulut), sadece kaldığın saat kadar ödediğin otel odası (serverless).

Paylaşımlı hosting Shared hosting · ayda birkaç dolar

Yüzlerce site aynı sunucuyu paylaşır. cPanel'den WordPress'i tek tıkla kurarsın.

En ucuz, teknik bilgi istemez.

Komşu site yoğunlaşırsa senin site de yavaşlar; kendi programını kuramazsın.

Örnek: Natro, Turhost, Hostinger, GoDaddy.

VPS Virtual Private Server · sanal özel sunucu

Büyük bir makinenin sana ayrılmış dilimi. İçine istediğini kurarsın.

Tam kontrol, öngörülebilir fiyat.

Güncelleme, güvenlik, yedek senin işin (27. bölümdeki aletler).

Örnek: bu kitabın sunucusu (Oracle Cloud), Hetzner, DigitalOcean.

Büyük bulut AWS · Google Cloud · Azure

Yüzlerce hazır servis: sunucu, veritabanı, depolama, yapay zekâ. Kullandıkça ödersin.

Sınırsız büyür, dünyanın her yerinde veri merkezi.

Fatura karmaşık; yanlış ayar sürpriz fatura getirebilir.

Örnek: Netflix (AWS), Spotify (Google Cloud), ChatGPT (Azure).

Serverless Sunucusuz · fonksiyon başına ödeme

Sunucu yok gibi davranırsın: sadece fonksiyonu yüklersin, istek gelince çalışır.

Az trafikte neredeyse bedava, kendiliğinden ölçeklenir.

İlk istekte "soğuk başlama" gecikmesi, sağlayıcıya bağımlılık.

Örnek: AWS Lambda, Cloudflare Workers, Vercel Functions.

Statik barındırma Static hosting · çoğu zaman ücretsiz

Yalnızca HTML/CSS/JS dosyaları. Backend yoksa en iyi seçenek.

Bedava, çok hızlı, saldırılacak sunucu kodu yok.

Veritabanı, üye girişi için dış servis gerekir (49. bölüm: Supabase).

Örnek: GitHub Pages, Cloudflare Pages, Netlify.

CDN Content Delivery Network · içerik dağıtım ağı

Sitenin kopyalarını dünyanın dört bir yanındaki sunuculara dağıtır; ziyaretçi en yakındakinden alır.

Hız + saldırı koruması (DDoS kalkanı).

Önbellek eski kalırsa güncel içerik geç görünür.

Ölçtük: Trendyol ve Sahibinden Cloudflare, Hepsiburada Akamai, Milliyet ve Hürriyet Türk yapımı MerlinCDN arkasında.

Sunucu yazılımı: Nginx mi Apache mi?

Hangi barındırmayı seçersen seç, makinede gelen istekleri karşılayan bir web sunucusu yazılımı çalışır. İkisi dünyaya hâkim: Apache (1995'ten beri, paylaşımlı hostinglerin klasiği, .htaccess dosyasıyla ayarlanır) ve Nginx (aynı anda on binlerce bağlantıyı az bellekle taşır, ters vekil olarak da çalışır). 26. bölümde gördüğün Nginx Proxy Manager, bu kitabın önündeki tam da bu Nginx.

  • Kişisel blog: WordPress + paylaşımlı hosting ya da statik site + GitHub Pages.
  • Küçük araç, panel: VPS üstünde Docker + Nginx (bu sunucudaki bütün paneller böyle).
  • Milyonlarca kullanıcı: bulut + CDN + otomatik ölçekleme. Trendyol, Netflix, Spotify.

CDN bilgisi bu sitelerin yanıt başlıklarından ölçüldü (server: satırı), 1 Ekim 2026.

Paylaşımlı = apartmanda oda (ucuz, kısıtlı). VPS = kendi dairen (kontrol sende). Bulut = sınırsız otel. Serverless = saatlik oda. Statik = bedava vitrin. CDN = dünyanın her yerinde şube.
Bölüm 47 · Web Sitesi Baştan Sona

Ünlü siteler hangi araçları kullanıyor? Ön yüz · mutfak · veritabanı · altyapı · diğer araçlar

39. bölümde beş uygulamanın dilini gördün. Burada kaputu tamamen kaldırıyoruz: önce on iki tanıdık sitenin ön yüzü (tarayıcıda ne çalışıyor), mutfağı (sunucu dili), veritabanı, altyapısı (nerede duruyor) ve diğer araçları aynı kalıpta. Yan yana koyunca bir şey gözüne çarpacak: aynı isimler tekrar tekrar geçiyor. React, MySQL, Kafka, Redis... Bunlar dünyanın ortak alet çantası.

Kartlarda birkaç yabancı isim tekrar ediyor, kısaca: Kafka sistemin parçaları arasında olay taşıyan bir mesaj kuyruğu ("sipariş verildi" haberini depoya, faturaya, maile aynı anda ulaştırır). Redis ve Memcached bellekte duran süper hızlı önbellek; sık sorulan cevabı veritabanına gitmeden verir. Kubernetes binlerce Docker kutusunu (27. bölüm) yöneten orkestra şefi. Elasticsearch arama kutusunun arkasındaki motor.

Tek tabloda: hangi site neyle çalışıyor, kaynağıyla

Kartlardaki bilgiyi bir de yan yana, her satırın kaynağıyla koyalım. Google ve Amazon da eklendi. Sütunlar: Frontend (ön yüz, tarayıcıda çalışan), Backend (arka yüz, sunucu dili), Database (veritabanı) ve Hosting (barındırma, nerede durduğu). Son sütundaki işaret, bilginin ne kadar sağlam olduğunu söyler: Kaynaklı şirketin kendi yazısı ya da resmî belge, Kısmen bir kısmı resmî ve bir kısmı genel bilgi, Doğrulanamadı resmî kaynağı bulunamayan kısım.

SiteFrontend · ön yüzBackend · arka yüzDatabase · veritabanıHosting · barındırmaKaynak
Google AramaWiz (Google'ın iç çatısı), Angular ile birleşme yolundaC++ ağırlıklı, Java, Go (oranlar doğrulanamadı)Bigtable, Spanner (Google'ın kendi yazdığı)Google'ın kendi veri merkezleriAngular Blog (2024), Spanner makalesi
Kısmen
YouTubeWiz + Angular Signals (mobil web), masaüstünde Polymer mirasıPython, C++, Java, Go (güncel oran doğrulanamadı)MySQL + Vitess (YouTube için yazıldı, 2010)Google veri merkezlerivitess.io tarihçe, ng-conf 2024 sunumu
Kısmen
InstagramReact, React NativePython (Django)PostgreSQL, CassandraBaşta AWS, 2014'ten beri Meta veri merkezleriInstagram Engineering
Kaynaklı
FacebookReact, Relay, GraphQL (üçü de Meta'nın)Hack (PHP'nin tipli kardeşi) + HHVM (HipHop Virtual Machine), C++MySQL (MyRocks), TAO sosyal çizge deposuMeta'nın kendi veri merkezlerihhvm.com, TAO (USENIX 2013)
Kaynaklı
WhatsAppTelefon: Swift, Kotlin · Web: doğrulanamadıErlang, FreeBSD işletim sistemi üstündeMnesia (Erlang'ın kendi veritabanı)Meta altyapısı (taşınma ayrıntısı doğrulanamadı)Erlang Factory 2014 (Rick Reed)
Kısmen
NetflixReactJava (Spring Boot), Node.js, PythonCassandra, EVCache (Memcached tabanlı önbellek)AWS (Amazon Web Services) + Open Connect (kendi CDN'i)Netflix TechBlog, Open Connect
Kaynaklı
AmazonDoğrulanamadıJava ağırlıklı mikro servisler (resmî kaynak doğrulanamadı)DynamoDB, AuroraAWSAWS Blog: Prime Day 2019
Kısmen
ShopifyReact (Polaris, Hydrogen), Liquid temalarıRuby on Rails (modüler tek parça), Rust, GoMySQL, mağazalara göre bölünmüş (pod), MemcachedGoogle Cloud + KubernetesShopify Engineering, Shopify mühendisi röportajı (2024)
Kaynaklı
WikipediaSunucudan gelen HTML + Vue.js (Codex bileşenleri)PHP (MediaWiki)MariaDB (MySQL türevi)Wikimedia'nın kendi veri merkezleri, önünde Varnish ve ATS (Apache Traffic Server) önbelleğiMediaWiki mimari belgesi, Wikitech
Kaynaklı
GitHubReact + sunucuda üretilen Rails sayfalarıRuby on Rails, GoMySQL (Vitess), RedisKendi veri merkezleri + Azure (oranı doğrulanamadı)GitHub Engineering Blog
Kısmen
TrendyolVue.js, mikro ön yüzlerGo, Java, KotlinCouchbase, PostgreSQL, ElasticsearchKubernetes, önünde Cloudflare (yanıt başlığından ölçüldü)Trendyol Tech (Medium)
Kısmen

Kontrol tarihi: 2 Ekim 2026. Büyük sistemler yıllar içinde parça parça değişir; tablo genel resmi verir. Resmî kaynağı bulunamayan her hücre "doğrulanamadı" diye işaretlendi, tahminle doldurulmadı. Instagram'ın 2011 tarihli yazısı en ünlü kaynak olduğu için eski; bugün Instagram Meta'nın altyapısında çalışıyor.

Kaynaklar: şirketlerin kendi mühendislik blogları (Meta Engineering, Netflix TechBlog, Shopify Engineering, GitHub Blog, Spotify Engineering, Trendyol Tech, Wikimedia Tech) ve açık konferans sunumları. Milliyet ve Hürriyet satırı tarafımızdan sayfa kaynağı ve yanıt başlıklarından ölçüldü (1 Ekim 2026); mutfakları dışarıdan görünmediği için "görünmüyor" yazdık, tahmin etmedik.

Büyük sitelerin ortak alet çantası: ön yüzde React, veritabanında MySQL ya da PostgreSQL, önbellekte Redis/Memcached, olay taşımada Kafka, yönetimde Kubernetes, önde CDN. Dil değişir, alet çantası pek değişmez.
Bölüm 48 · Programlar ve Platformlar

Masaüstü programları (.exe) neyle yazılır? C++ · C# · Electron · Qt · Tauri · Python · ünlü programların içi

Web sitesi tarayıcının içinde çalışır; .exe ise doğrudan işletim sisteminin üstünde. Windows'ta .exe, Mac'te .app, Android'de .apk, uzantı farklı ama fikir aynı: işlemcinin anlayacağı hâle getirilmiş, paketlenmiş program. Bir yazılımcının yazdığı insan dilindeki kod, oraya kadar şu yolculuğu yapar:

Düğmeye bas: kaynak koddan çift tıklanan simgeye kadar.

Masaüstü programı yapmanın sekiz yolu

C / C++ Doğrudan makine diline derlenir

En hızlı, en az bellek. Ağır işler için tek gerçek seçenek.

Yazması zor, bellek hatasına açık, her işletim sistemi için ayrı derleme.

Kim: Chrome, Photoshop, Office, oyunlar, Windows'un kendisi.

C# / .NET Microsoft'un dili · WinForms, WPF, WinUI

Windows'ta en rahat yol, hızlı geliştirme, güçlü araçlar (Visual Studio).

Mac ve Linux desteği sonradan geldi, en iyi Windows'ta.

Kim: Paint.NET, kurumsal muhasebe ve banka programları, Unity oyunları.

Electron Web teknolojisiyle masaüstü · HTML + CSS + JS

Bir kez yaz, Windows + Mac + Linux. Web bilen herkes yazar.

İçine koca bir Chromium tarayıcı gömer: kurulum 100 MB'ı geçer, RAM'i sever.

Kim: VS Code, Discord, Slack, Figma masaüstü, Obsidian, Notion.

Tauri Electron'un hafif kardeşi · Rust + web

Sistemin kendi tarayıcı motorunu kullanır: kurulum birkaç MB.

Daha genç, işletim sistemine göre görünüm farkları olabilir.

Kim: yeni nesil küçük araçlar, şifre yöneticileri.

Qt C++ arayüz kütüphanesi · her platform

Yerel hızda, tek kodla Windows, Mac, Linux.

Ticari lisans pahalı, C++ bilgisi ister.

Kim: Telegram Desktop, VLC, OBS Studio, VirtualBox.

Flutter Google · Dart dili

Aynı kod telefon, masaüstü ve web.

Masaüstü tarafı mobil kadar olgun değil.

Kim: Google Ads uygulaması, birçok banka uygulaması (mobil).

Python + PyInstaller Betiği exe'ye paketlemek

Python biliyorsan bir öğleden sonrada küçük araç.

Dosya büyük çıkar, açılışı yavaş, antivirüs bazen şüphelenir.

Kim: şirket içi küçük araçlar, CornerPin gibi kişisel tepsi programları.

Swift / Kotlin Apple ve Android'in yerel dilleri

Platformun bütün özelliklerine tam erişim, en akıcı his.

Her platform için ayrı kod.

Kim: iPhone ve Android'deki uygulamaların çoğu, Final Cut Pro.

Her gün kullandığın programlar neyle yazılmış?

  • Görev Yöneticisi'ni aç: Discord, Slack ya da VS Code birden fazla satırla ve yüzlerce MB bellekle görünür. Sebebi Electron'un her pencere için bir tarayıcı süreci açması.
  • Spotify ve Steam'in arayüzü aslında birer web sayfasıdır; içlerine gömülü Chromium (CEF) ile gösterilir, ses ve oyun motoru ise C++.
  • Bir programın neyle yazıldığını merak edersen: kurulum klasöründe resources/app.asar varsa Electron, Qt6Core.dll varsa Qt, .dll'lerin yanında *.deps.json varsa .NET.
Hız lazımsa C++, Windows'a özelse C#, web biliyorsan Electron (ağır) ya da Tauri (hafif), her platformda yerel his istiyorsan Qt. VS Code ve Discord Electron, Chrome ve Photoshop C++, Telegram Qt.
Bölüm 49 · Programlar ve Platformlar

GitHub, Supabase, Hugging Face ve diğer platformlar Kod deposu · hazır backend · yapay zekâ merkezi · yayınlama · paket depoları

Bugün bir yazılımcı her şeyi kendisi kurmaz. Kodunu bir yerde saklar, veritabanını hazır alır, yapay zekâ modelini hazır indirir, siteyi tek komutla yayınlar. Bunların her biri için dev bir platform var. Hepsinin ortak noktası: ücretsiz başlanır, büyüdükçe ödenir. Sekmelere tıkla, her platformun ne işe yaradığını, alternatifini ve gerçek bir kod örneğini gör.

İhtiyaçYaygın seçimAlternatif
Kodu saklamak, ekip çalışmasıGitHubGitLab, Bitbucket
Hazır veritabanı + üye girişiSupabaseFirebase, PocketBase, Appwrite
Yapay zekâ modeli bulmak, denemekHugging FaceReplicate, Kaggle, Ollama (yerel)
Siteyi yayınlamakVercel, NetlifyCloudflare Pages, GitHub Pages
Hazır kod paketlerinpm (JavaScript), PyPI (Python)Composer (PHP), Maven (Java), NuGet (C#)
Hazır sunucu kutularıDocker HubGitHub Container Registry
Her şey bir aradaAWS, Google Cloud, AzureHetzner, DigitalOcean (sade)
  • Bu kitap: kodu GitHub'da gizli bir depoda, sunucusu Oracle Cloud'da, önünde Nginx ve Let's Encrypt sertifikası.
  • Bir yapay zekâ girişimi: modeli Hugging Face'ten alır, ürün verisini Supabase'e koyar, sitesini Vercel'de yayınlar. Üç platform, sıfır kendi sunucusu.
  • Herkesin kullandığı açık kaynak: React, VS Code, Python'ın kendisi GitHub'da geliştiriliyor; istersen sen de kodu okuyup hata bildirebilirsin.
GitHub = kodun evi ve zaman makinesi. Supabase = beş dakikada hazır veritabanı + giriş sistemi (Firebase'in açık kaynak rakibi). Hugging Face = yapay zekâ modellerinin GitHub'ı. Vercel/Netlify = tek tıkla yayın. npm/PyPI = hazır kod marketi.
Bölüm 50 · Yedek ve Güvenlik

Yedekleme 3-2-1 kuralı · tam, artımlı, fark yedeği · beş aşama · araçlar

Disk bozulur, telefon çalınır, fidye yazılımı dosyaları kilitler, sen yanlışlıkla klasörü silersin. Hangisinin olacağı belli değil, birinin olacağı kesin. Yedek, verinin ikinci bir yerde duran kopyasıdır. Ama her kopya yedek değildir: bilgisayarının yanında duran harici disk, ev yangınında bilgisayarla birlikte yanar. Bu yüzden altın kural var: 3-2-1.

1. Asıl veriBilgisayarındaki dosyalar
2. Başka ortamHarici disk ya da NAS, evde
3. Başka yerBulut ya da başka şehir
Önce "3-2-1'i kur"a bas, sonra felaketleri dene.

3 kopya (asıl veri + 2 yedek), 2 farklı ortam (bilgisayar diski + harici disk ya da bulut), 1 tanesi başka bir yerde. Bugün buna iki madde daha eklenir: 3-2-1-1-0. Fazladan 1, fidye yazılımının ulaşamayacağı bağlantısız ya da değiştirilemez bir kopya; 0 ise geri yükleme testinde sıfır hata. Hiç denenmemiş yedek, yedek değil umuttur.

Üç yedek türü

Her gün her şeyi baştan kopyalamak hem yavaştır hem yer yer. Bu yüzden üç yöntem var. Aşağıdaki şeritte bir hafta boyunca her gün ne kadar veri kopyalandığını görüyorsun (P = pazar).

TamPPztSaÇaPeCuCt
ArtımlıTam+Δ+Δ+Δ+Δ+Δ+Δ
FarkTamΔ1Δ1-2Δ1-3Δ1-4Δ1-5Δ1-6
TürNe kopyalarYedek alırkenGeri yüklerken
Tam (full)Her şeyi, her seferindeEn yavaş, en çok yerEn kolay: tek parça
Artımlı (incremental)Sadece dünden beri değişeniEn hızlı, en az yerEn zahmetli: tam + her günün parçası sırayla
Fark (differential)Son tam yedekten beri değişeniGün geçtikçe büyürOrta: tam + son fark

Beş aşamada sağlam yedek

  1. Planla: neyi (fotoğraflar, belgeler, veritabanı), ne sıklıkla (her gece mi, her saat mi) ve ne kadar geriye dönük saklayacaksın? İki kavram: RPO en fazla ne kadar veri kaybını göze alırsın (1 gün mü, 1 saat mi), RTO her şey ne kadar sürede geri gelmeli.
  2. Otomatikle: elle alınan yedek unutulur. Zamanlayıcı kur (27. bölümdeki cron, Windows'ta Görev Zamanlayıcı, Mac'te Time Machine).
  3. Şifrele: bulutta ya da diskte duran yedek, eline geçen herkes için de bir kopyadır. restic ve Borg yedeği kendiliğinden şifreler.
  4. Uzağa kopyala: en az bir kopya başka binada ya da bulutta. Mümkünse silinemez (immutable) modda.
  5. Geri yüklemeyi dene: ayda bir rastgele bir dosyayı yedekten geri getir. Çalışmıyorsa bunu felaketten önce öğrenmiş olursun.

Time Machine macOS · dahili

Harici diske saatlik artımlı yedek, tıklayarak geçmişe dönüş.

Dosya Geçmişi Windows · dahili

Belgeler ve Masaüstü klasörlerini harici diske sürüm sürüm kopyalar.

Google Drive · OneDrive · iCloud Bulut eşitleme

Rahat ama dikkat: eşitleme yedek değildir, yanlışlıkla silinen dosya her yerden silinir. Çöp kutusu ve sürüm geçmişi kurtarır.

restic · Borg Sunucu ve ileri seviye

Şifreli, tekrarı ayıklayan (deduplication) artımlı yedek. Backblaze B2 ya da S3'e gönderilir.

rsync Linux klasiği

Sadece değişen dosyaları başka diske ya da sunucuya kopyalar. Birçok yedek aracının motoru.

Git + GitHub Kod ve ayar dosyaları

Her değişiklik bir sürüm (28. bölüm). Kod için en iyi yedek, büyük dosyalar için uygun değil.

  • Bu kitabın sunucusu: her gece 02:00'de ayarlar, betikler ve zamanlanmış görevler cron ile GitHub'daki gizli bir depoya gönderiliyor; n8n verisi her gece ayrıca kopyalanıyor.
  • Telefon: Google Fotoğraflar ya da iCloud Fotoğraflar = otomatik uzak kopya. Ama tek kopya orada kalırsa hesabın kilitlenince her şey gider; yılda bir bilgisayara indir.
  • Şirket: fidye yazılımı saldırılarında fidyeyi ödemeyip birkaç günde ayağa kalkan şirketlerin ortak noktası, bağlantısız ve test edilmiş yedekleri olmasıdır.
3-2-1: üç kopya, iki ortam, biri uzakta. Eşitleme yedek değildir. Otomatikle, şifrele, uzağa gönder, ayda bir geri yüklemeyi dene. Tam = her şey, artımlı = dünden beri değişen, fark = son tamdan beri değişen.
Bölüm 51 · Yedek ve Güvenlik

Güvenlik Katmanlı savunma · saldırı türleri · canlı SQL injection · OWASP, ISO 27001, KVKK

Güvenlik tek bir kilit değil, iç içe geçmiş katmanlardır. Ortaçağ kalesi gibi düşün: hendek, sur, kapı, nöbetçi, hazine odasının kilidi. Saldırgan birini aşsa bile diğerine takılır. Buna derinlemesine savunma (defense in depth) denir. Halkalara tıkla, her katmanda neyin korunduğunu ve hangi araçla korunduğunu gör.

Fiziksel Ağ · firewall HTTPS · TLS Kimlik · 2FA Uygulama Veri
Dıştan içe bir halkaya tıkla.

Canlı örnek: SQL injection

Web'in en eski ve hâlâ en tehlikeli açıklarından biri. Bir giriş formu düşün. Kötü yazılmış bir backend, kullanıcının yazdığını olduğu gibi SQL cümlesinin içine yapıştırır (16. bölümde SQL'i görmüştün). Saldırgan da parola yerine SQL'in parçası olan bir şey yazar. Önce "Güvensiz kod" modunda parola kutusuna ' OR '1'='1 yaz, sonra aynısını "Güvenli kod" modunda dene.

Backend'in çalıştıracağı sorgu burada görünecek.
Sahte veritabanında 4 kullanıcı var. Ayşe'nin gerçek parolası: deniz42

Güvensiz kodda '1'='1' her zaman doğru olduğu için veritabanı "koşul sağlandı" der ve kapıyı açar. Güvenli kodda parametreli sorgu (prepared statement) kullanılır: kullanıcının yazdığı şey SQL'in parçası olamaz, sadece "aranacak metin" olarak gider. Django, Laravel, Rails gibi framework'ler bunu varsayılan olarak yapar; açık, genellikle elle SQL yazıldığında doğar.

Canlı örnek: parola nasıl saklanır?

Düzgün bir site parolanı asla düz metin olarak saklamaz. Onu geri döndürülemeyen bir parmak izine, yani hash'e çevirir. Giriş yaptığında yazdığını yeniden hash'ler, iki parmak izini karşılaştırır. Bir harfi değiştir, parmak izinin tamamen değiştiğini gör. Bu hesap senin tarayıcında, gerçek SHA-256 ile yapılıyor.

Hesaplanıyor...

Gerçek sistemler SHA-256 yerine kasıtlı olarak yavaş olan bcrypt ya da Argon2 kullanır ve her parolaya rastgele bir "tuz" (salt) ekler. Böylece veritabanı çalınsa bile milyarlarca deneme yapmak yıllar sürer.

Sekiz yaygın saldırı ve korunma yolu

Oltalama Phishing

Bankandan geliyormuş gibi görünen mail ya da SMS, sahte giriş sayfası.

Adres çubuğuna bak, linke değil. 2FA aç.

SQL injection Veritabanı enjeksiyonu

Formdan SQL komutu sızdırmak (yukarıdaki demo).

Parametreli sorgu, ORM.

XSS Cross-site scripting

Yoruma <script> yazıp başka ziyaretçilerin tarayıcısında kod çalıştırmak.

Kullanıcı girdisini kaçışla (escape) göster; React ve Blade bunu kendisi yapar.

CSRF Siteler arası istek sahteciliği

Açık oturumunu kullanarak başka bir siteden senin adına işlem yaptırmak.

Formlara gizli CSRF jetonu (Django, Laravel'de hazır), SameSite çerez.

Kaba kuvvet Brute force

Milyonlarca parolayı sırayla denemek.

Uzun parola, deneme sınırı, fail2ban, SSH'ta parola yerine anahtar.

Fidye yazılımı Ransomware

Dosyaları şifreleyip para istemek.

Güncel sistem, bağlantısız yedek (50. bölüm).

DDoS Dağıtık hizmet engelleme

Binlerce ele geçirilmiş cihazla siteyi trafiğe boğmak.

CDN kalkanı (Cloudflare, Akamai).

Ortadaki adam Man in the middle

Açık kafe Wi-Fi'ında trafiği dinlemek.

HTTPS her yerde, gerekirse VPN.

Güvenlik çerçeveleri: kurallar kitabı

Şirketler güvenliği "aklımıza geldikçe" yapmaz; hazır bir çerçeveye (framework) göre yapar. Çerçeve, "neleri kontrol etmelisin" listesidir. Burada framework kelimesi Django'daki gibi kod kütüphanesi değil, yöntem kitabı anlamında.

OWASP Top 10 Open Worldwide Application Security Project (açık dünya çapında uygulama güvenliği projesi) · Web uygulamaları için

En kritik 10 web açığının listesi. 2021 sürümünde ilk üç: erişim kontrolü hataları, kriptografi hataları, enjeksiyon (SQL injection dahil).

Uygulama: yazılımcı kodu bu listeye göre gözden geçirir, test araçları (OWASP ZAP) bu açıkları tarar.

ISO/IEC 27001 Bilgi güvenliği yönetimi

Şirketin güvenliği bir süreç olarak yönettiğini belgeleyen uluslararası sertifika.

Uygulama: risk listesi, erişim yetkileri, yedek prosedürü yazılı olur ve her yıl denetlenir. Bankalar ve bulut firmaları bu belgeyi ister.

NIST CSF 2.0 ABD siber güvenlik çerçevesi

Altı fonksiyon: Yönet, Tanımla, Koru, Tespit et, Müdahale et, Kurtar.

Uygulama: "saldırı olursa kim ne yapacak" planı önceden yazılır.

KVKK · GDPR Kişisel verilerin korunması

Türkiye'de 6698 sayılı kanun, Avrupa'da GDPR. Müşteri verisini neden, ne kadar süre tuttuğunu açıklamak zorundasın.

Uygulama: çerez bildirimi, aydınlatma metni, veri sızıntısında kurula bildirim.

PCI DSS Kredi kartı verisi

Kart bilgisi işleyen herkesin uyması gereken standart.

Uygulama: küçük mağazalar kart bilgisini hiç görmez; iyzico, Stripe, Shopify Payments bu yükü üstlenir.

  • Bu kitabın sunucusu: paneller dış dünyaya doğrudan değil Nginx üzerinden yayınlanıyor, arkadaki portlar iptables kurallarıyla yalnızca Docker ağına açık, her alt alan adında ücretsiz Let's Encrypt sertifikası haftalık yenileniyor (26. bölüm).
  • Bankacılık uygulaması: parola + SMS ya da uygulama onayı = iki adımlı doğrulama; telefon çalınsa bile tek başına yetmez.
  • Shopify mağazası: sunucu, HTTPS, PCI DSS ve DDoS koruması Shopify'da; sana kalan hesabında 2FA ve güçlü parola.
Güvenlik katmanlıdır: fiziksel, ağ, HTTPS, kimlik (2FA), uygulama, veri. Kullanıcı girdisine asla güvenme: parametreli sorgu (SQL injection), kaçışlama (XSS), CSRF jetonu. Parola hash'lenir, düz saklanmaz. Kurallar kitabı: OWASP, ISO 27001, NIST, KVKK.
Bölüm 52 · AI Donanımı ve Dosyalar

Yapay zekâ donanımı GPU · VRAM · TPU · NPU · bir model kaç GB ister?

29. bölümde LLM'in milyarlarca sayıdan (parametreden) oluştuğunu gördün. Cevap üretmek, bu sayılarla devasa çarpma işlemleri yapmak demek. İşlemci (CPU) bunu sırayla, birkaç düzine çekirdekle yapar; ekran kartı (GPU) ise binlerce küçük çekirdekle aynı anda. Bu yüzden yapay zekâ çağının en değerli parçası ekran kartı oldu ve Nvidia dünyanın en değerli şirketleri arasına girdi.

GPU Graphics Processing Unit · ekran kartı

Binlerce çekirdek, paralel hesap. Yapay zekâ eğitimi ve çalıştırmanın ana motoru.

Örnek: Nvidia H100 (veri merkezi, 80 GB), Nvidia B200 (192 GB), GeForce RTX 5090 (ev, 32 GB).

VRAM Video RAM · ekran kartı belleği

Modelin bütün parametreleri burada durmak zorunda. Hız değil, sığma sorunu: model VRAM'e sığmazsa ya hiç çalışmaz ya da sürünür.

Örnek: oyun kartında 8-32 GB, veri merkezi kartında 80-192 GB.

TPU Tensor Processing Unit · Google

Sadece yapay zekâ hesabı için tasarlanmış çip; satılmaz, Google Cloud'da kiralanır.

Örnek: Gemini modelleri TPU'larda eğitiliyor.

NPU Neural Processing Unit · cihazdaki yapay zekâ çipi

Telefon ve dizüstünde az enerjiyle küçük yapay zekâ işleri: yüz tanıma, fotoğraf iyileştirme, canlı altyazı.

Örnek: Apple Neural Engine, Microsoft'un "Copilot+ PC" şartı 40+ TOPS NPU.

Bir modelin ne kadar bellek istediğini kabaca kendin hesaplayabilirsin: parametre sayısı × parametre başına bayt. Tam hassasiyette (FP16) her parametre 2 bayt, sıkıştırılmış (4-bit "quantize") hâlinde yarım bayt yer kaplar. Üstüne çalışma payı olarak yaklaşık %20 eklenir. Kaydırıcıyla dene:

  • ChatGPT, Claude, Gemini: on binlerce veri merkezi kartı üstünde çalışır; bir konuşma cevabı bile birden fazla GPU'ya bölünmüş bir modelden gelir.
  • Evde yerel model (Ollama, LM Studio): 8 milyarlık bir model 4-bit hâliyle yaklaşık 5 GB ister; 8 GB'lık bir oyun kartında ya da 16 GB belleği olan bir MacBook'ta çalışır. 12 Temmuz 2026'da bu sunucuda denenen qwen2.5:7b tam bu sınıftaydı.
  • Telefon: fotoğraftan arka plan silme, canlı çeviri gibi işler buluta gitmeden NPU'da yapılır; hem hızlı hem gizli.
Yapay zekâ = devasa paralel çarpma → GPU. Belirleyici olan VRAM: model sığmalı. Bellek ≈ parametre × bayt × 1,2. 8 milyar × 4-bit ≈ 5 GB, 70 milyar × FP16 ≈ 168 GB. TPU = Google'ın çipi, NPU = cihazdaki küçük yapay zekâ çipi.
Bölüm 53 · AI Donanımı ve Dosyalar

Skill, plugin, agent, MCP ve eklentiler Yapay zekâya ve programlara yetenek eklemenin yolları

Bir program tek başına her şeyi yapamaz; ona sonradan yetenek eklenir. Bu fikir yapay zekâdan çok önce de vardı: tarayıcı eklentisi, VS Code eklentisi, WordPress eklentisi. Yapay zekâ dünyası buna dört yeni kelime ekledi. Karıştırılıyorlar çünkü hepsi "yetenek ekler". Fark, neyi eklediklerinde. Bir benzetme ile: LLM bir beyin. Onu işe yarar bir çalışana çeviren parçalar şunlar:

Bir parçaya tıkla.
KelimeNe ekler?Gerçek örnek
Tool (araç)Tek bir eylem: dosya oku, web'de ara, hesaplaClaude'un Bash ve Read araçları, ChatGPT'nin web araması
MCP sunucusuBir dış servise standart bağlantı (bir paket araç)Gmail, Google Drive, Notion, Shopify bağlayıcıları
Skill (beceri)Bir işin nasıl yapılacağını anlatan tarif + yardımcı betiklerClaude Code'da SKILL.md klasörü: "PDF doldur", "slayt yap"
Plugin (eklenti paketi)Skill + komut + MCP + kancalardan oluşan hazır paketClaude Code plugin'leri, eski ChatGPT plugin'leri (yerini GPT'ler aldı)
Agent (ajan)Hedefe kadar kendi kendine adım atan döngü: düşün → araç kullan → sonucu gör → tekrarClaude Code, OpenAI Codex, Devin, n8n'deki AI Agent düğümü
Custom GPT · Gem · ProjectTalimat + dosyalar ile kişiselleştirilmiş sohbetChatGPT GPT'leri, Gemini Gem'leri, Claude Projects

Yapay zekâ dışındaki eklentiler

Tarayıcı eklentisi Chrome / Brave extension

HTML + CSS + JS ile yazılır, açtığın sayfaya müdahale eder.

Örnek: uBlock Origin, Google Çeviri, senin Amazon FBM Finder ve WhatsApp takip eklentin.

VS Code eklentisi Extension · TypeScript

Editöre dil desteği, tema, yapay zekâ asistanı ekler.

Örnek: GitHub Copilot, Prettier, Python eklentisi.

WordPress eklentisi Plugin · PHP

Siteye form, SEO, mağaza, önbellek ekler.

Örnek: WooCommerce, Yoast SEO, Elementor.

Shopify uygulaması App · Shopify API

Mağazaya yorum, e-posta, ürün içe aktarma ekler.

Örnek: Judge.me, Klaviyo, Zendrop.

  • Bu kitabı yazan yapay zekâ: bir agent (Claude Code). Tasarım için "ui-ux-pro-max" ve "impeccable" skill'lerini, ekran görüntüsü için tarayıcı aracını, hafıza için dosya araçlarını kullandı.
  • n8n iş akışları: "AI Agent" düğümü + Gmail ve Telegram araçları = sabah raporunu kendisi hazırlayıp gönderen ajan.
  • MCP'nin kendisi: Anthropic'in 2024 sonunda açık standart olarak yayınladığı, sonra OpenAI ve Google'ın da desteklediği protokol (32. bölüm). Yapay zekânın USB-C'si.
LLM = beyin. Tool = el (tek eylem). MCP = standart priz, bir servisin bütün araçlarını bağlar. Skill = tarif kartı. Plugin = hazır alet çantası. Agent = işi kendi yürüten çırak. Eklenti fikri eski: tarayıcı, VS Code, WordPress, Shopify'da da aynı mantık.
Bölüm 54 · AI Donanımı ve Dosyalar

Dosya türleri PNG · JPG · WebP · SVG · PDF · MP4 · ZIP · EXE · JSON... ne, ne zaman, alternatifi

Dosya adının sonundaki noktadan sonraki kısım, yani uzantı, dosyanın içindeki verinin hangi kurallarla dizildiğini söyler. Aynı fotoğraf PNG (Portable Network Graphics, taşınabilir ağ grafiği) olarak 3 MB, JPG (Joint Photographic Experts Group, ortak fotoğraf uzmanları grubu) olarak 400 KB, WebP olarak 250 KB olabilir. Görüntü aynı görünür ama içerideki dizilim farklıdır. Önce iki temel ayrımı öğren, sonra hepsi yerine oturur.

Raster ve vektör

Raster (PNG, JPG, WebP): görüntü minik kare noktalardan, piksellerden oluşur; büyütünce bulanıklaşır. Vektör (SVG, PDF içindeki çizimler): görüntü "şuradan şuraya çizgi çiz" komutlarından oluşur; ne kadar büyütsen keskin kalır. Bu kitaptaki bütün çizimler SVG (Scalable Vector Graphics, ölçeklenebilir vektör grafik).

Kayıplı ve kayıpsız

Kayıpsız (PNG, ZIP, FLAC): açınca birebir aynısı geri gelir. Kayıplı (JPG, MP3, MP4): gözün ve kulağın fark etmeyeceği ayrıntıyı atar, dosya çok küçülür. Her kaydedişte biraz daha bozulur.

Şimdi gerçek ölçüm. Aşağıdaki resim tarayıcında çizildi. Tarayıcı aynı resmi PNG, JPG ve WebP olarak kaydedip gerçek dosya boyutlarını ölçüyor; aynı çizimin SVG hâlinin boyutu da yanında. "Fotoğraf gibi" ile "düz çizim" arasında geçiş yap ve kazananın nasıl değiştiğine bak.

UzantıNe?Ne zaman?Alternatif
  • Instagram ve Facebook: yüklediğin fotoğrafı yeniden sıkıştırıp JPG/WebP olarak dağıtır; bu yüzden yüksek çözünürlüklü PNG yüklemenin pek faydası yok.
  • iPhone: fotoğrafları HEIC olarak saklar (JPG'nin yarısı kadar yer), paylaşırken otomatik JPG'ye çevirir.
  • Shopify ve bu kitap: ürün görselleri WebP'ye çevrilir; aynı kalitede JPG'den belirgin biçimde küçük, sayfa daha hızlı açılır.
  • Logo: her zaman SVG iste. PNG logoyu bir afişe büyütürsen bulanıklaşır, SVG asla.
Fotoğraf → JPG ya da WebP (web için WebP). Logo, ikon, çizim → SVG. Şeffaf arka plan ya da ekran görüntüsü → PNG. Belge → PDF (Portable Document Format, taşınabilir belge biçimi). Video → MP4. Veri → JSON ya da CSV. Program → EXE (Windows), DMG (Mac), APK (Android).
Bölüm 55 · Adan Zeye

Web uygulaması adan zeye Web app (web uygulaması) · fikirden canlı adrese 9 durak

Buraya kadar parçaları tek tek öğrendin: HTML, CSS, JavaScript, API (Application Programming Interface, uygulama programlama arayüzü), veritabanı, DNS (Domain Name System, alan adı sistemi), hosting (barındırma). Şimdi hepsini tek bir yolculukta birleştiriyoruz. Bir web app (web uygulaması), tarayıcıda açılan ama sadece bilgi göstermekle kalmayıp iş yapan sitedir: kayıt alır, hesap yapar, veriyi saklar. Lojman takip paneli, sebze-meyve fiyat takibi, Shopify yönetim ekranı, hepsi web uygulamasıdır. Hepsi aynı dokuz duraktan geçerek doğar.

Durağa dokun: o adımda ne yapıldığı, hangi araçların kullanıldığı ve bu kitapta nerede anlatıldığı tam o kutunun altında açılır. Sırayla oynat düğmesi dokuz durağı kendisi gezer.

    Dokuz durak bittiğinde ortaya çıkan yapı hep aynı iskelettir. Bir ziyaretçi adresi yazdığında istek şu yoldan geçer; akan noktalar o isteği temsil ediyor:

    Browser Tarayıcı · Frontend HTML + CSS + JS DNS Domain Name System Adı IP'ye çevirir CDN Content Delivery Network İçerik dağıtım ağı Web server Web sunucusu · Nginx HTTPS kapısı Backend Arka yüz · Flask İş kuralları, API Database Veritabanı · SQLite Kalıcı kayıtlar Cevap aynı yoldan geri döner: veritabanı → backend → JSON ya da HTML → tarayıcı

    Bu kitabın kendisi bu iskeletin kısa hâli: tarayıcı, DNS, Nginx ve dosyalar. Backend ve veritabanı yok, çünkü saklayacağı bir şey yok. Lojman takip ya da sebze-meyve fiyat takibi gibi kayıt tutan araçlarda yedi kutunun hepsi dolu.

    • Prompt'ta bu dokuz durağı say: "Flask + SQLite backend, saf HTML/CSS/JS frontend, mobil uyumlu, 8510 portunda, Nginx arkasında, HTTPS, yedeği her gece" yazınca yapay zekâ yarım değil bütün uygulamayı kurar.
    • En çok atlanan duraklar: test, yedek ve izleme. Uygulama çalışıyor diye bitmiş sayılmaz; çöktüğünde haber veren bir nöbetçi (monitoring) olmadan sessizce kapalı kalabilir.
    Fikir → Tasarım (wireframe) → Frontend (vitrin) → Backend (mutfak) → Database (veritabanı) → Test → Deploy (yayına alma) → Domain + DNS + HTTPS (adres ve kilit) → Monitoring (izleme ve bakım). İstek yolu: tarayıcı → DNS → CDN → web sunucusu → backend → veritabanı, cevap aynı yoldan geri.
    Bölüm 56 · Adan Zeye

    Mobil ve masaüstü uygulama adan zeye Mobile app (mobil uygulama) · Desktop app (masaüstü uygulaması, .exe) · mağazaya kadar

    Web uygulaması tarayıcıda yaşar, kurulmaz. Native app (yerel uygulama) ise telefona ya da bilgisayara install (kurulum) ile yerleşir: Android'de .apk / .aab, iPhone'da .ipa, Windows'ta .exe / .msi, Mac'te .app / .dmg. Fikir aynıdır ama yol farklıdır: her platformun kendi dili, kendi geliştirme aracı, kendi imza kuralı ve kendi mağazası vardır. Platform seç, sonra durağa dokun.

      Web mi, mobil mi, masaüstü mü?

      Aynı fikir üç yoldan da hayata geçebilir. Seçim, kullanıcının nerede ve nasıl kullanacağına bağlıdır:

      ÖlçütWeb app (web uygulaması)Mobile app (mobil uygulama)Desktop app (masaüstü uygulaması)
      KurulumYok, adres yeter. İstenirse PWA (Progressive Web App) olarak ana ekrana eklenir (21. bölüm).Google Play ya da App Store'dan indirilir.İndirilen kurulum dosyası (.exe, .msi, .dmg) ya da Microsoft Store, Mac App Store.
      GüncellemeSunucuya yüklediğin an herkeste yeni sürüm.Mağaza onayından geçer, kullanıcının telefonu indirir.Programın içindeki güncelleyici (auto-updater) ya da yeni kurulum.
      Donanım erişimiKamera, konum, bildirim var; arka planda çalışma ve dosya sistemi sınırlı.Tam: kamera, sensörler, arka planda çalışma, bildirim.Tam: dosya sistemi, USB aygıtları, ağır hesaplama.
      Başlangıç maliyetiAlan adı ve barındırma; statik site bedava olabilir.Google Play geliştirici hesabı tek seferlik 25 $, Apple Developer Program yıllık 99 $.Mağazasız dağıtım bedava; uyarısız kurulum için kod imzalama sertifikası ücretli.
      Ne zamanPanel, form, katalog, iç araç: çoğu iş için ilk tercih.Cepte her gün açılacak, bildirim ya da kamera isteyen iş.Dosyayla ağır çalışan, çevrimdışı ya da donanıma yakın iş.

      Ücretler resmî sayfalardan: Google Play Console kayıt ücreti (support.google.com/googleplay/android-developer) ve Apple Developer Program üyeliği (developer.apple.com/programs). Kontrol: 2 Ekim 2026.

      • Bir kod, her platform (cross-platform, çapraz platform): Flutter (Google, Dart dili) ve React Native (Meta, JavaScript) tek kodla Android ve iPhone uygulaması çıkarır; Electron ve Tauri web koduyla Windows, Mac ve Linux programı yapar (48. bölüm).
      • Telegram ve WhatsApp: aynı hizmetin web, mobil ve masaüstü sürümü var; üçü de aynı backend'e bağlanır. Değişen sadece vitrin.
      Mobil: Kotlin + Android Studio → .aab → Google Play (25 $ bir kez). iPhone: Swift + Xcode (Mac şart) → .ipa → TestFlight → App Store (99 $ yıllık). Windows: C# / C++ / Electron + Visual Studio → .exe / .msi → imza → site ya da Microsoft Store. Mac: Swift + Xcode → .app → noter onayı (notarization) → .dmg ya da Mac App Store.
      Bölüm 57 · Adan Zeye

      Örnek web sitesi: görünüm ve kod yan yana div · span · label · input · button · form · img · a · h1 · p · header · nav · footer

      Bir web sitesine baktığında gördüğün her kutu, her yazı, her düğme aslında bir HTML element (HTML öğesi)dir. Aşağıda küçük bir deri mağazası sitesi var: solda ziyaretçinin gördüğü view (görünüm), sağda onu çizen code (kod). Sitede herhangi bir yere dokun: o parçanın etiketi ("burası div", "burası span") tam dokunduğun yerin altında açılır, kodda karşılık gelen satırlar kırmızıyla yanar. Tersi de çalışır: kod satırına dokun, sitede o parça yanar.

      https://deri-atolyesi.example
      Bir etiket çipine bas ya da siteye dokun. Etiketleri göster düğmesi her kutunun üstüne adını yazar.

      Kafandaki resim şu olsun: div ve span görünmez kutulardır, kendi başlarına bir anlam taşımazlar; div blok kutu (alt alta dizilir), span satır içi kutu (cümlenin ortasında durur). header, nav, main, footer da birer kutudur ama adları anlam taşır; arama motorları ve ekran okuyucular sayfayı bu adlardan anlar. form içindeki label + input + button üçlüsü kullanıcıdan bilgi alır. img resmi, a bağlantıyı koyar. Gerisi CSS ile verilen görünüştür.

      • Kendin dene: herhangi bir sitede sağ tık → "İncele" (Inspect). Açılan DevTools (Developer Tools, geliştirici araçları) panelinde tam bu gördüğün iki taraflı düzen var (23. bölüm).
      • Prompt'ta kullan: "ürün kartındaki fiyat span'ını kırmızı yap", "abone formuna e-posta input'u ve label ekle" gibi cümleler, yapay zekâya tam olarak neresi olduğunu söyler.
      Görünmez kutular: div (blok), span (satır içi). Anlamlı kutular: header (baş), nav (menü), main (ana içerik), footer (alt). Bilgi alma: form + label + input + button. Medya ve bağlantı: img (src + alt), a (href). Her görünen parçanın arkasında bir etiket, her etiketin bir açılış ve kapanışı var.
      Bölüm 58 · Adan Zeye

      Web'de ne kullanılır? Frontend ve backend araçları Framework (çatı) · library (kütüphane) · ne işe yarar · ne zaman hangisi

      Bir web uygulamasının iki yakası vardır (18. bölüm): frontend (ön yüz, vitrin) tarayıcıda çalışır, backend (arka yüz, mutfak) sunucuda. Her iki yaka için de hazır alet setleri var. Ön yüzde temel her zaman aynıdır: HTML (HyperText Markup Language, hiper metin işaretleme dili), CSS (Cascading Style Sheets, basamaklı stil sayfaları) ve JavaScript; üstündeki araçlar sadece işi hızlandırır. Arka yüzde ise dil seçimi de sende: Python, JavaScript, PHP, Ruby, Java, C#, Go. Aşağıdan yapacağın işi seç: o iş için önerilen ön yüz ve arka yüz araçları iki şeritte yanar, veritabanı ve barındırma önerisi altta yazar.

      Frontend · ön yüz Tarayıcıda çalışır: görünüm ve etkileşim

      Backend · arka yüz Sunucuda çalışır: veri, hesap, güvenlik

      Veritabanı ve barındırma, kısaca

      SQLite Tek dosyalık SQL (Structured Query Language, yapılandırılmış sorgu dili) veritabanı

      Kurulum yok, dosya kopyala taşı. Küçük ve orta araçlar için birebir.

      Sende: tracker'lar ve paneller.

      PostgreSQL Güçlü, açık kaynak SQL veritabanı

      Çok kullanıcı, karmaşık sorgu, büyüyen veri. Instagram'ın ana veritabanı.

      Hazır hâli: Supabase (49. bölüm).

      MySQL · MariaDB Web'in klasik SQL veritabanı

      WordPress, Wikipedia, Shopify, YouTube (Vitess ile) bunun üstünde.

      MongoDB · Redis NoSQL (Not only SQL, yalnızca SQL değil)

      MongoDB esnek belge deposu, Redis bellekte duran süper hızlı önbellek. Ayrıntı 37. bölümde.

      Barındırma Hosting

      Statik site: GitHub Pages, Cloudflare Pages (bedava). Backend'li: VPS (Virtual Private Server, sanal özel sunucu) ya da Vercel, Render. Büyük: AWS (Amazon Web Services), Google Cloud. Ayrıntı 46. bölümde.

      • Bu kitap: frontend saf HTML/CSS/JS, backend yok, barındırma kendi VPS'in (Oracle Cloud) üstünde Nginx.
      • Senin tracker'ların: frontend saf HTML/CSS/JS, backend Flask, veritabanı SQLite, barındırma aynı VPS. Küçük araçta en az parçayla en çok iş.
      • Instagram: frontend React, backend Django, veritabanı PostgreSQL ve Cassandra (47. bölümdeki tablo).
      Frontend: saf HTML/CSS/JS (küçük iş), React / Vue / Svelte / Angular (çok ekranlı arayüz), Next.js / Nuxt / Astro (SEO ve hız), Tailwind / Bootstrap (görünüş). Backend: Flask / FastAPI / Django (Python), Express (Node.js), Laravel (PHP), Rails (Ruby), Spring Boot (Java), ASP.NET Core (C#), Go. Veritabanı: SQLite → PostgreSQL / MySQL büyüdükçe.