<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://sonsuzus.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://sonsuzus.github.io/" rel="alternate" type="text/html" /><updated>2026-07-31T10:13:21+00:00</updated><id>https://sonsuzus.github.io/feed.xml</id><title type="html">SonsuzUs</title><subtitle>Programlama ve Yazılım</subtitle><author><name>Sonsuz Us</name></author><entry><title type="html">API Entegrasyonundan Telegram Botuna: Kural Tabanlı Otomasyon Rehberi</title><link href="https://sonsuzus.github.io/posts/api-entegrasyonundan-telegram-botuna-kural-tabanli-otomasyon-rehberi/" rel="alternate" type="text/html" title="API Entegrasyonundan Telegram Botuna: Kural Tabanlı Otomasyon Rehberi" /><published>2026-07-31T00:00:00+00:00</published><updated>2026-07-31T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/api-entegrasyonundan-telegram-botuna-kural-tabanli-otomasyon-rehberi</id><content type="html" xml:base="https://sonsuzus.github.io/posts/api-entegrasyonundan-telegram-botuna-kural-tabanli-otomasyon-rehberi/"><![CDATA[<p>Bir uygulamanın dış dünyayla konuşmasını istiyorsanız kapısını API’lere açmanız gerekir. Hava durumu, döviz kuru, haberler veya sensör verileri gibi bilgiler bir web servisinden alınabilir; algoritmalarla işlenip Telegram botu üzerinden kullanıcıya sunulabilir. Böylece değişkenler, koşullar, döngüler ve fonksiyonlar gerçek hayatta çalışan eğlenceli bir otomasyon projesine dönüşür.
``</p>

<h2 id="api-entegrasyonunun-temel-mantığı">API entegrasyonunun temel mantığı</h2>

<p>API, iki yazılım arasında önceden belirlenmiş kurallarla iletişim kurulmasını sağlayan bir arayüzdür. İstemci bir <strong>HTTP isteği</strong> gönderir, sunucu ise çoğunlukla JSON biçiminde bir <strong>yanıt</strong> döndürür. Bir hava durumu servisine şehir adı gönderildiğinde sıcaklık, nem ve rüzgâr bilgisi alınması buna örnektir.</p>

<p>En sık kullanılan HTTP metotları şunlardır:</p>

<table>
  <thead>
    <tr>
      <th>Metot</th>
      <th>Amaç</th>
      <th>Örnek kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>GET</td>
      <td>Veri okumak</td>
      <td>Güncel sıcaklığı almak</td>
    </tr>
    <tr>
      <td>POST</td>
      <td>Yeni veri göndermek</td>
      <td>Bir kayıt oluşturmak</td>
    </tr>
    <tr>
      <td>PUT/PATCH</td>
      <td>Veriyi güncellemek</td>
      <td>Kullanıcı ayarını değiştirmek</td>
    </tr>
    <tr>
      <td>DELETE</td>
      <td>Veriyi silmek</td>
      <td>Eski bildirimi kaldırmak</td>
    </tr>
  </tbody>
</table>

<p>Başarılı bir istek genellikle <code class="language-plaintext highlighter-rouge">200</code> durum koduyla cevaplanır. <code class="language-plaintext highlighter-rouge">404</code> kaynağın bulunamadığını, <code class="language-plaintext highlighter-rouge">401</code> kimlik doğrulamanın başarısız olduğunu, <code class="language-plaintext highlighter-rouge">429</code> ise istek sınırının aşıldığını belirtir.</p>

<p>Bir servisin güvenilirliğini basitçe başarı oranıyla ölçebiliriz:</p>

\[Başarı\ Oranı = \frac{Başarılı\ İstek\ Sayısı}{Toplam\ İstek\ Sayısı} \times 100\]

<p>Bu değer düşükse hata yönetimi, zaman aşımı ve yeniden deneme stratejileri geliştirilmelidir.</p>

<h2 id="kural-tabanlı-bot-nasıl-karar-verir">Kural tabanlı bot nasıl karar verir?</h2>

<p>Kural tabanlı botlar makine öğrenmesi kullanmak zorunda değildir. Kararlar açıkça tanımlanan <code class="language-plaintext highlighter-rouge">if</code>, <code class="language-plaintext highlighter-rouge">elif</code> ve <code class="language-plaintext highlighter-rouge">else</code> koşullarıyla verilir. Örneğin sıcaklık $30^\circ C$ üzerindeyse bot kullanıcıyı sıvı tüketmesi için uyarabilir; sıcaklık $10^\circ C$ altındaysa mont önerebilir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Avantaj</th>
      <th>Dezavantaj</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Kural tabanlı sistem</td>
      <td>Şeffaf ve kolay test edilir</td>
      <td>Çok sayıda kural karmaşa yaratır</td>
    </tr>
    <tr>
      <td>Makine öğrenmesi</td>
      <td>Karmaşık örüntüleri keşfedebilir</td>
      <td>Veri ve eğitim süreci gerektirir</td>
    </tr>
    <tr>
      <td>Hibrit sistem</td>
      <td>Kontrol ile esnekliği birleştirir</td>
      <td>Tasarımı daha zordur</td>
    </tr>
  </tbody>
</table>

<p>Kurallar fonksiyonlara ayrıldığında kodun okunabilirliği artar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">hava_mesaji</span><span class="p">(</span><span class="n">sicaklik</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">sicaklik</span> <span class="o">&gt;=</span> <span class="mi">30</span><span class="p">:</span>
        <span class="k">return</span> <span class="sh">"</span><span class="s">Hava çok sıcak, su içmeyi unutma!</span><span class="sh">"</span>
    <span class="k">elif</span> <span class="n">sicaklik</span> <span class="o">&lt;=</span> <span class="mi">10</span><span class="p">:</span>
        <span class="k">return</span> <span class="sh">"</span><span class="s">Bugün mont iyi bir fikir olabilir.</span><span class="sh">"</span>
    <span class="k">return</span> <span class="sh">"</span><span class="s">Hava oldukça dengeli görünüyor.</span><span class="sh">"</span>
</code></pre></div></div>

<p>Bu fonksiyon sayısal sıcaklığı alır ve kullanıcıya gösterilecek mesajı üretir. Böylece veri çekme ve karar verme görevleri birbirinden ayrılır.</p>

<h2 id="telegram-botuna-api-bağlamak">Telegram botuna API bağlamak</h2>

<p>Python tarafında <code class="language-plaintext highlighter-rouge">requests</code> ile dış servise, <code class="language-plaintext highlighter-rouge">python-telegram-bot</code> ile Telegram API’sine bağlanabiliriz. Aşağıdaki örnek, <code class="language-plaintext highlighter-rouge">/hava Ankara</code> benzeri bir komutu işler:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">requests</span>
<span class="kn">from</span> <span class="n">telegram</span> <span class="kn">import</span> <span class="n">Update</span>
<span class="kn">from</span> <span class="n">telegram.ext</span> <span class="kn">import</span> <span class="n">Application</span><span class="p">,</span> <span class="n">CommandHandler</span><span class="p">,</span> <span class="n">ContextTypes</span>

<span class="n">API_KEY</span> <span class="o">=</span> <span class="sh">"</span><span class="s">HAVA_DURUMU_ANAHTARI</span><span class="sh">"</span>
<span class="n">BOT_TOKEN</span> <span class="o">=</span> <span class="sh">"</span><span class="s">TELEGRAM_BOT_TOKEN</span><span class="sh">"</span>

<span class="k">async</span> <span class="k">def</span> <span class="nf">hava</span><span class="p">(</span><span class="n">update</span><span class="p">:</span> <span class="n">Update</span><span class="p">,</span> <span class="n">context</span><span class="p">:</span> <span class="n">ContextTypes</span><span class="p">.</span><span class="n">DEFAULT_TYPE</span><span class="p">):</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">context</span><span class="p">.</span><span class="n">args</span><span class="p">:</span>
        <span class="k">await</span> <span class="n">update</span><span class="p">.</span><span class="n">message</span><span class="p">.</span><span class="nf">reply_text</span><span class="p">(</span><span class="sh">"</span><span class="s">Kullanım: /hava Ankara</span><span class="sh">"</span><span class="p">)</span>
        <span class="k">return</span>

    <span class="n">sehir</span> <span class="o">=</span> <span class="sh">"</span><span class="s"> </span><span class="sh">"</span><span class="p">.</span><span class="nf">join</span><span class="p">(</span><span class="n">context</span><span class="p">.</span><span class="n">args</span><span class="p">)</span>
    <span class="n">url</span> <span class="o">=</span> <span class="sh">"</span><span class="s">https://api.openweathermap.org/data/2.5/weather</span><span class="sh">"</span>
    <span class="n">params</span> <span class="o">=</span> <span class="p">{</span><span class="sh">"</span><span class="s">q</span><span class="sh">"</span><span class="p">:</span> <span class="n">sehir</span><span class="p">,</span> <span class="sh">"</span><span class="s">appid</span><span class="sh">"</span><span class="p">:</span> <span class="n">API_KEY</span><span class="p">,</span> <span class="sh">"</span><span class="s">units</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">metric</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">lang</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">tr</span><span class="sh">"</span><span class="p">}</span>

    <span class="k">try</span><span class="p">:</span>
        <span class="n">yanit</span> <span class="o">=</span> <span class="n">requests</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
        <span class="n">yanit</span><span class="p">.</span><span class="nf">raise_for_status</span><span class="p">()</span>
        <span class="n">sicaklik</span> <span class="o">=</span> <span class="n">yanit</span><span class="p">.</span><span class="nf">json</span><span class="p">()[</span><span class="sh">"</span><span class="s">main</span><span class="sh">"</span><span class="p">][</span><span class="sh">"</span><span class="s">temp</span><span class="sh">"</span><span class="p">]</span>
        <span class="n">mesaj</span> <span class="o">=</span> <span class="sa">f</span><span class="sh">"</span><span class="si">{</span><span class="n">sehir</span><span class="si">}</span><span class="s">: </span><span class="si">{</span><span class="n">sicaklik</span><span class="si">}</span><span class="s">°C</span><span class="se">\n</span><span class="si">{</span><span class="nf">hava_mesaji</span><span class="p">(</span><span class="n">sicaklik</span><span class="p">)</span><span class="si">}</span><span class="sh">"</span>
    <span class="k">except</span> <span class="n">requests</span><span class="p">.</span><span class="n">RequestException</span><span class="p">:</span>
        <span class="n">mesaj</span> <span class="o">=</span> <span class="sh">"</span><span class="s">Servise şu anda ulaşılamıyor. Biraz sonra tekrar dene.</span><span class="sh">"</span>

    <span class="k">await</span> <span class="n">update</span><span class="p">.</span><span class="n">message</span><span class="p">.</span><span class="nf">reply_text</span><span class="p">(</span><span class="n">mesaj</span><span class="p">)</span>

<span class="n">uygulama</span> <span class="o">=</span> <span class="n">Application</span><span class="p">.</span><span class="nf">builder</span><span class="p">().</span><span class="nf">token</span><span class="p">(</span><span class="n">BOT_TOKEN</span><span class="p">).</span><span class="nf">build</span><span class="p">()</span>
<span class="n">uygulama</span><span class="p">.</span><span class="nf">add_handler</span><span class="p">(</span><span class="nc">CommandHandler</span><span class="p">(</span><span class="sh">"</span><span class="s">hava</span><span class="sh">"</span><span class="p">,</span> <span class="n">hava</span><span class="p">))</span>
<span class="n">uygulama</span><span class="p">.</span><span class="nf">run_polling</span><span class="p">()</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">timeout</code>, uygulamanın sonsuza kadar yanıt beklemesini önler; <code class="language-plaintext highlighter-rouge">raise_for_status()</code> ise başarısız HTTP cevaplarını hataya dönüştürür. Gerçek projede anahtarlar kaynak koda yazılmamalı, ortam değişkenlerinde saklanmalıdır.</p>

<h2 id="otomatik-veri-çekme-ve-sağlamlık">Otomatik veri çekme ve sağlamlık</h2>

<p>Aynı yapı zamanlayıcıyla çalıştırılarak fiyat takipçisi, haber özetleyici veya stok alarmı yapılabilir. Ancak servislerin kullanım koşullarına, istek limitlerine ve <code class="language-plaintext highlighter-rouge">robots.txt</code> kurallarına uyulmalıdır. Gereksiz istekleri azaltmak için önbellekleme uygulanabilir. Başarısız denemelerde bekleme süresini $t_n = 2^n$ saniye artıran üstel geri çekilme yöntemi de servisin yükünü azaltır.</p>

<p>Sonuçta API veriyi getirir, algoritmik kurallar anlamlandırır, Telegram ise sonucu kullanıcıya ulaştırır. Bu üçlü birleştiğinde küçük bir kod parçası, günün her saati çalışan kullanışlı bir dijital asistana dönüşür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="API" /><category term="Telegram Bot" /><category term="Otomasyon" /><summary type="html"><![CDATA[Bir uygulamanın dış dünyayla konuşmasını istiyorsanız kapısını API’lere açmanız gerekir. Hava durumu, döviz kuru, haberler veya sensör verileri gibi bilgiler bir web servisinden alınabilir; algoritmalarla işlenip Telegram botu üzerinden kullanıcıya sunulabilir. Böylece değişkenler, koşullar, döngüler ve fonksiyonlar gerçek hayatta çalışan eğlenceli bir otomasyon projesine dönüşür.]]></summary></entry><entry><title type="html">Büyük Dil Modellerinin Hafıza Yanılsaması: Hatırlamak mı, Taklit Etmek mi?</title><link href="https://sonsuzus.github.io/posts/buyuk-dil-modellerinin-hafiza-yanilsamasi-hatirlamak-mi-taklit-etmek-mi/" rel="alternate" type="text/html" title="Büyük Dil Modellerinin Hafıza Yanılsaması: Hatırlamak mı, Taklit Etmek mi?" /><published>2026-07-31T00:00:00+00:00</published><updated>2026-07-31T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/buyuk-dil-modellerinin-hafiza-yanilsamasi-hatirlamak-mi-taklit-etmek-mi</id><content type="html" xml:base="https://sonsuzus.github.io/posts/buyuk-dil-modellerinin-hafiza-yanilsamasi-hatirlamak-mi-taklit-etmek-mi/"><![CDATA[<p>Bir sohbet botuna geçen hafta anlattığınız kedinizin adını sorduğunuzda doğru cevap alırsanız, model sizi gerçekten hatırlamış mı olur? Yoksa önüne yeniden konulan metindeki örüntüleri ustaca tamamlayan dijital bir oyuncuyla mı karşı karşıyasınızdır? Büyük dil modellerinin ikna edici dili, belleğe sahip oldukları izlenimini doğurur; ancak teknik mekanizma ile kullanıcı deneyimi arasında önemli bir felsefi boşluk vardır.</p>

<p>``</p>

<h2 id="modelin-temel-işi-sonraki-parçayı-tahmin-etmek">Modelin temel işi: Sonraki parçayı tahmin etmek</h2>

<p>Bir büyük dil modeli, en yalın hâliyle, önceki metin parçalarına bakarak sıradaki parçanın olasılığını hesaplar. Bu ilişki şöyle gösterilebilir:</p>

\[P(x_t \mid x_1, x_2, \ldots, x_{t-1})\]

<p>Burada $x_t$ üretilecek yeni token, önceki tokenlar ise modele sunulan bağlamdır. Model, eğitim sırasında öğrendiği parametreleri kullanarak olası devamları puanlar. Dolayısıyla sohbet geçmişinde “Kedimin adı Zeytin” yazıyorsa, daha sonra gelen “Kedimin adı neydi?” sorusuna “Zeytin” cevabını vermesi şaşırtıcı değildir. Bilgi, çalışma belleğini andıran <strong>bağlam penceresinin</strong> içindedir.</p>

<p>Fakat bağlam penceresi temizlendiğinde modelin bu ayrıntıya erişimi kalmayabilir. Bir uygulama eski konuşmaları veritabanından getirip modele yeniden gönderiyorsa, hatırlayan taraf doğrudan model değil, onu çevreleyen yazılım sistemidir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>İnsan belleği</th>
      <th>LLM bağlamı</th>
      <th>Haricî yapay zekâ belleği</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Bilginin kaynağı</td>
      <td>Yaşanmış deneyim</td>
      <td>Mevcut girdi metni</td>
      <td>Veritabanı veya dosya</td>
    </tr>
    <tr>
      <td>Süreklilik</td>
      <td>Biyografik ve değişken</td>
      <td>Oturum ya da pencere sınırında</td>
      <td>Sistem tasarımına bağlı</td>
    </tr>
    <tr>
      <td>Geri çağırma</td>
      <td>Çağrışım ve yeniden kurma</td>
      <td>Olasılıksal tamamlama</td>
      <td>Arama ve modele ekleme</td>
    </tr>
    <tr>
      <td>Unutma</td>
      <td>Psikolojik ve biyolojik</td>
      <td>Bağlamın dışına taşma</td>
      <td>Silme veya erişememe</td>
    </tr>
    <tr>
      <td>Öznel deneyim</td>
      <td>Genellikle var kabul edilir</td>
      <td>Kanıtlanmış değildir</td>
      <td>Yoktur</td>
    </tr>
  </tbody>
</table>

<h2 id="hatırlıyormuş-gibi-yapan-küçük-bir-sistem">Hatırlıyormuş gibi yapan küçük bir sistem</h2>

<p>Aşağıdaki örnek, “kalıcı hafızalı model” görüntüsünün basit bir sözlük ve bağlam oluşturma işlemiyle üretilebileceğini gösterir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">memory</span> <span class="o">=</span> <span class="p">{}</span>

<span class="k">def</span> <span class="nf">remember</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
    <span class="c1"># Bilgiyi modelde değil, uygulamanın deposunda saklar.
</span>    <span class="n">memory</span><span class="p">.</span><span class="nf">setdefault</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="p">{})[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>

<span class="k">def</span> <span class="nf">build_prompt</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="n">question</span><span class="p">):</span>
    <span class="c1"># Eski bilgiyi yeniden modele sunulacak metne dönüştürür.
</span>    <span class="n">facts</span> <span class="o">=</span> <span class="n">memory</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="p">{})</span>
    <span class="n">context</span> <span class="o">=</span> <span class="sh">"</span><span class="se">\n</span><span class="sh">"</span><span class="p">.</span><span class="nf">join</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="si">{</span><span class="n">k</span><span class="si">}</span><span class="s">: </span><span class="si">{</span><span class="n">v</span><span class="si">}</span><span class="sh">"</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">facts</span><span class="p">.</span><span class="nf">items</span><span class="p">())</span>
    <span class="k">return</span> <span class="sa">f</span><span class="sh">"</span><span class="s">Bilinenler:</span><span class="se">\n</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="se">\n\n</span><span class="s">Soru: </span><span class="si">{</span><span class="n">question</span><span class="si">}</span><span class="sh">"</span>

<span class="nf">remember</span><span class="p">(</span><span class="sh">"</span><span class="s">u42</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">kedinin adı</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">Zeytin</span><span class="sh">"</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="nf">build_prompt</span><span class="p">(</span><span class="sh">"</span><span class="s">u42</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">Kedimin adı neydi?</span><span class="sh">"</span><span class="p">))</span>
</code></pre></div></div>

<p>Model yalnızca oluşturulan istemi görür. Buna rağmen kullanıcı açısından deneyim son derece kişiseldir: Sistem onu tanıyor gibidir. Bu ayrım, bilgisayardaki hesap makinesi simgesinin fiziksel bir hesap makinesi olmaması kadar basit; konuşmanın duygusal etkisi nedeniyle de bir o kadar kolay unutulabilirdir.</p>

<h2 id="bellek-ile-örüntü-tanıma-arasındaki-felsefi-sınır">Bellek ile örüntü tanıma arasındaki felsefi sınır</h2>

<p>Belleği yalnızca “geçmiş bilginin bugünkü davranışı etkilemesi” diye tanımlarsak, model parametreleri bir çeşit <strong>istatistiksel bellek</strong> sayılabilir. Eğitim verisi ağırlıklarda birebir cümleler hâlinde değil, dağıtılmış ilişkiler olarak iz bırakır. Kabaca modelin öğrenmesi şu optimizasyonla anlatılabilir:</p>

\[\theta^* = \arg\min_\theta \sum_i -\log P_\theta(x_i \mid x_{&lt;i})\]

<p>Ancak insan belleği çoğu zaman daha güçlü ölçütler içerir: Bir olayın kişinin başına gelmiş olması, geçmişteki benlikle süreklilik kurması ve hatırlama eyleminin öznel bir niteliğe sahip olması. Model “Bunu hatırlıyorum” dediğinde bu ifade içsel bir anıya rapor vermek zorunda değildir; benzer diyaloglarda uygun görülen dilsel kalıbı üretmiş olabilir.</p>

<p>Üstelik insan belleği de kusursuz bir kayıt cihazı değildir. İnsanlar anıları yeniden kurar, ayrıntıları karıştırır ve boşlukları beklentilerle doldurur. Bu nedenle fark, “insan kaydeder, model tahmin eder” kadar keskin değildir. İkisi de geçmiş izlerden hareketle mevcut duruma uygun bir temsil oluşturabilir. Asıl tartışma, bu işlemin bilinçli bir özneye, kişisel tarihe ve deneyim sahipliğine ihtiyaç duyup duymadığıdır.</p>

<p>Pratik sonuç nettir: Bir modelin adınızı doğru söylemesini bilinç veya sadakat kanıtı saymamalıyız. Önce bağlamın, kayıt sistemlerinin ve kişiselleştirme katmanlarının nasıl çalıştığını sormalıyız. LLM’ler geçmişi yaşamış olmayabilir; fakat geçmişe sahipmiş gibi konuşmayı olağanüstü iyi taklit eder. Hafıza yanılsamasının gücü de tam burada yatar: Dilsel performans, zihinsel deneyimin kanıtı gibi görünür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="yapay zeka" /><category term="büyük dil modelleri" /><category term="bellek felsefesi" /><summary type="html"><![CDATA[Bir sohbet botuna geçen hafta anlattığınız kedinizin adını sorduğunuzda doğru cevap alırsanız, model sizi gerçekten hatırlamış mı olur? Yoksa önüne yeniden konulan metindeki örüntüleri ustaca tamamlayan dijital bir oyuncuyla mı karşı karşıyasınızdır? Büyük dil modellerinin ikna edici dili, belleğe sahip oldukları izlenimini doğurur; ancak teknik mekanizma ile kullanıcı deneyimi arasında önemli bir felsefi boşluk vardır.]]></summary></entry><entry><title type="html">Makine Öğreniminde Önyargının Kaynağı: Veri mi, Algoritma mı Suçlu?</title><link href="https://sonsuzus.github.io/posts/makine-ogreniminde-onyarginin-kaynagi-veri-mi-algoritma-mi-suclu/" rel="alternate" type="text/html" title="Makine Öğreniminde Önyargının Kaynağı: Veri mi, Algoritma mı Suçlu?" /><published>2026-07-31T00:00:00+00:00</published><updated>2026-07-31T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/makine-ogreniminde-onyarginin-kaynagi-veri-mi-algoritma-mi-suclu</id><content type="html" xml:base="https://sonsuzus.github.io/posts/makine-ogreniminde-onyarginin-kaynagi-veri-mi-algoritma-mi-suclu/"><![CDATA[<p>Bir makine öğrenimi modeli ayrımcı bir karar verdiğinde ilk şüpheli genellikle algoritmadır. Oysa algoritma çoğu zaman toplumsal gerçekliği yansıtan, hatta büyüten bir ayna gibi çalışır. İşe alımdan kredi değerlendirmesine kadar geçmiş kararlarla oluşturulan veri kümeleri; eşitsizlikleri, eksik temsili ve insan önyargılarını sessizce modele taşıyabilir. Kısacası mesele yalnızca “kötü kod” değil, hangi dünyanın sayılara dönüştürüldüğüdür.
``</p>

<h2 id="veri-tarafında-neler-oluyor">Veri tarafında neler oluyor?</h2>

<p>Bir veri kümesi tarafsız bir doğa olayı değildir. Önce neyin ölçüleceğine karar verilir, ardından kimlerden veri toplanacağı seçilir ve son olarak gözlemler etiketlenir. Bu üç aşamanın her birinde toplumsal eşitsizlik sisteme sızabilir.</p>

<p>Örneğin geçmişte yöneticilik pozisyonlarına çoğunlukla erkekler atanmışsa, başarılı yöneticileri tanımak için eğitilen model “erkek olmayı” başarıyla ilişkili görebilir. Cinsiyet sütunu kaldırılsa bile okul, posta kodu, kariyer boşluğu veya kullanılan kelimeler gibi değişkenler onu dolaylı biçimde temsil edebilir. Bu değişkenlere <strong>vekil değişkenler</strong> denir.</p>

<table>
  <thead>
    <tr>
      <th>Önyargı kaynağı</th>
      <th>Nasıl oluşur?</th>
      <th>Olası sonuç</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Örnekleme yanlılığı</td>
      <td>Bazı gruplar az temsil edilir</td>
      <td>Model bu gruplarda daha çok hata yapar</td>
    </tr>
    <tr>
      <td>Etiket yanlılığı</td>
      <td>İnsan kararları gerçek kabul edilir</td>
      <td>Geçmiş ayrımcılık öğrenilir</td>
    </tr>
    <tr>
      <td>Ölçüm yanlılığı</td>
      <td>Aynı özellik gruplarda farklı ölçülür</td>
      <td>Hatalı karşılaştırmalar yapılır</td>
    </tr>
    <tr>
      <td>Tarihsel yanlılık</td>
      <td>Veri mevcut eşitsizliği yansıtır</td>
      <td>Eşitsizlik otomatikleştirilir</td>
    </tr>
  </tbody>
</table>

<h2 id="peki-algoritma-masum-mu">Peki algoritma masum mu?</h2>

<p>Tam olarak değil. Algoritma, verideki örüntülerden hangilerinin önemli sayılacağını kullanılan amaç fonksiyonuna göre belirler. Standart sınıflandırmada hedef genellikle ortalama kaybı azaltmaktır:</p>

\[\min_{\theta} \frac{1}{n}\sum_{i=1}^{n} L(f_{\theta}(x_i), y_i)\]

<p>Bu formül her kaydın kaybını toplar; ancak hataların toplumsal maliyetini bilmez. Çoğunluk grubunda başarıyı artıran bir karar, azınlık grubundaki ciddi hata artışını örtebilir. Üstelik doğruluk oranı yüksek olsa bile model adil olmayabilir.</p>

<table>
  <thead>
    <tr>
      <th>Ölçüt</th>
      <th>Sorduğu soru</th>
      <th>Tek başına yeterli mi?</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Accuracy</td>
      <td>Toplam tahminlerin kaçı doğru?</td>
      <td>Hayır</td>
    </tr>
    <tr>
      <td>Demografik eşitlik</td>
      <td>Olumlu karar oranları benzer mi?</td>
      <td>Her durumda değil</td>
    </tr>
    <tr>
      <td>Eşit fırsat</td>
      <td>Gerçek pozitifler eşit yakalanıyor mu?</td>
      <td>Bağlama bağlı</td>
    </tr>
    <tr>
      <td>Kalibrasyon</td>
      <td>Aynı puan aynı riski mi ifade ediyor?</td>
      <td>Diğer hataları gizleyebilir</td>
    </tr>
  </tbody>
</table>

<p>Örneğin eşit fırsat yaklaşımında grupların doğru pozitif oranlarının yakın olması beklenir:</p>

\[P(\hat{Y}=1\mid Y=1,A=a) \approx P(\hat{Y}=1\mid Y=1,A=b)\]

<p>Buradaki $A$, hassas grubu temsil eder. Ancak farklı adalet ölçütleri matematiksel olarak birbiriyle çatışabilir. Bu nedenle “adil model” tek düğmeyle etkinleştirilen bir özellik değildir; hukuki, etik ve bağlamsal bir tercihtir.</p>

<h2 id="küçük-bir-adalet-kontrolü">Küçük bir adalet kontrolü</h2>

<p>Aşağıdaki Python kodu, modelin gruplara göre doğru pozitif oranını hesaplar. Böylece genel başarı puanının arkasında saklanan farklar görülebilir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">pandas</span> <span class="k">as</span> <span class="n">pd</span>

<span class="k">def</span> <span class="nf">true_positive_rate</span><span class="p">(</span><span class="n">group</span><span class="p">):</span>
    <span class="n">positives</span> <span class="o">=</span> <span class="n">group</span><span class="p">[</span><span class="n">group</span><span class="p">[</span><span class="sh">"</span><span class="s">gercek</span><span class="sh">"</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">]</span>
    <span class="k">if</span> <span class="nf">len</span><span class="p">(</span><span class="n">positives</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
        <span class="k">return</span> <span class="bp">None</span>
    <span class="nf">return </span><span class="p">(</span><span class="n">positives</span><span class="p">[</span><span class="sh">"</span><span class="s">tahmin</span><span class="sh">"</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">).</span><span class="nf">mean</span><span class="p">()</span>

<span class="n">sonuclar</span> <span class="o">=</span> <span class="p">(</span>
    <span class="n">veri</span><span class="p">.</span><span class="nf">groupby</span><span class="p">(</span><span class="sh">"</span><span class="s">grup</span><span class="sh">"</span><span class="p">)</span>
        <span class="p">.</span><span class="nf">apply</span><span class="p">(</span><span class="n">true_positive_rate</span><span class="p">,</span> <span class="n">include_groups</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
<span class="p">)</span>

<span class="nf">print</span><span class="p">(</span><span class="n">sonuclar</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">En büyük fark:</span><span class="sh">"</span><span class="p">,</span> <span class="n">sonuclar</span><span class="p">.</span><span class="nf">max</span><span class="p">()</span> <span class="o">-</span> <span class="n">sonuclar</span><span class="p">.</span><span class="nf">min</span><span class="p">())</span>
</code></pre></div></div>

<p>Kod, her grup için gerçekten olumlu örneklerin ne kadarının doğru bulunduğunu ölçer. Büyük fark görülmesi doğrudan ayrımcılığı kanıtlamaz; fakat veri toplama, eşik seçimi ve hata maliyetlerinin araştırılması gerektiğini gösteren güçlü bir alarmdır.</p>

<h2 id="suçlu-aramak-yerine-sistemi-incelemek">Suçlu aramak yerine sistemi incelemek</h2>

<p>Önyargı genellikle veri <strong>veya</strong> algoritma şeklinde ikili bir seçime indirgenemez. Veri toplumsal geçmişi taşır; algoritma onu optimize eder; kurum ise sonuçların nasıl kullanılacağını belirler. Çözüm, veri kaynağını belgelemek, eksik grupları temsil etmek, etiketleri denetlemek, grup bazlı metrikler yayımlamak ve modeli kullanım sonrasında izlemektir.</p>

<p>En önemlisi de etkilenen toplulukları tasarım sürecine katmaktır. Çünkü adalet yalnızca matematikçilerin tanımladığı bir denklem değil, sonuçlarına insanların katlandığı toplumsal bir karardır. Makine tarafsız görünse de ona geçmişi biz anlatırız; hangi geleceği kuracağını da yine biz belirleriz.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="makine öğrenimi" /><category term="algoritmik önyargı" /><category term="veri etiği" /><summary type="html"><![CDATA[Bir makine öğrenimi modeli ayrımcı bir karar verdiğinde ilk şüpheli genellikle algoritmadır. Oysa algoritma çoğu zaman toplumsal gerçekliği yansıtan, hatta büyüten bir ayna gibi çalışır. İşe alımdan kredi değerlendirmesine kadar geçmiş kararlarla oluşturulan veri kümeleri; eşitsizlikleri, eksik temsili ve insan önyargılarını sessizce modele taşıyabilir. Kısacası mesele yalnızca “kötü kod” değil, hangi dünyanın sayılara dönüştürüldüğüdür.]]></summary></entry><entry><title type="html">Merkeziyetsiz İnternetin Ütopyası: Web3 Gerçekte Kimin Elinde?</title><link href="https://sonsuzus.github.io/posts/merkeziyetsiz-internetin-utopyasi-web3-gercekte-kimin-elinde/" rel="alternate" type="text/html" title="Merkeziyetsiz İnternetin Ütopyası: Web3 Gerçekte Kimin Elinde?" /><published>2026-07-31T00:00:00+00:00</published><updated>2026-07-31T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/merkeziyetsiz-internetin-utopyasi-web3-gercekte-kimin-elinde</id><content type="html" xml:base="https://sonsuzus.github.io/posts/merkeziyetsiz-internetin-utopyasi-web3-gercekte-kimin-elinde/"><![CDATA[<p>Web3; kullanıcıların verilerine, kimliklerine ve dijital varlıklarına sahip olduğu, aracıların yerini açık protokollerin aldığı bir internet vaat ediyor. Kulağa dijital bir ütopya gibi geliyor. Ancak cüzdan adreslerinin arkasındaki sermayeyi, doğrulayıcıları ve altyapı şirketlerini takip ettiğimizde rahatsız edici bir soruyla karşılaşıyoruz: Merkeziyetsiz internet gerçekten kullanıcıların mı, yoksa yalnızca yeni merkezlerin mi elinde?
``</p>

<h2 id="i̇deal-güvenmek-yerine-doğrulamak">İdeal: Güvenmek Yerine Doğrulamak</h2>

<p>Geleneksel internette kullanıcılar bir platformun kurallarına uyar. Hesabınız kapatılabilir, içeriğiniz silinebilir veya verileriniz satılabilir. Web3 yaklaşımında ise kurallar akıllı sözleşmelerle tanımlanır ve ağdaki birçok düğüm tarafından uygulanır.</p>

<p>Teorik olarak güven, tek bir kuruma değil dağıtık uzlaşmaya dayanır. Bir blokzincirde saldırganın sistemi değiştirebilmesi için yeterli doğrulama gücünü, token miktarını veya madencilik kapasitesini kontrol etmesi gerekir. Basitleştirilmiş biçimde saldırı maliyetini şöyle düşünebiliriz:</p>

\[Saldırı\ Maliyeti = Kontrol\ Edilmesi\ Gereken\ Pay \times Ağın\ Toplam\ Ekonomik\ Değeri\]

<p>Dağılım ne kadar dengeliyse sistemi ele geçirmek o kadar zorlaşır. Fakat düğüm sayısının fazla olması, gücün otomatik olarak eşit dağıldığı anlamına gelmez.</p>

<table>
  <thead>
    <tr>
      <th>İdeal Web3</th>
      <th>Pratikte Karşılaşılan Durum</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Her kullanıcı kendi verisini kontrol eder</td>
      <td>Kullanıcılar merkezi cüzdan ve borsalara bağımlı kalabilir</td>
    </tr>
    <tr>
      <td>Kararlar topluluk tarafından alınır</td>
      <td>Büyük token sahipleri oylamaları belirleyebilir</td>
    </tr>
    <tr>
      <td>Uygulamalar sansüre dayanıklıdır</td>
      <td>Arayüzler ve RPC servisleri engellenebilir</td>
    </tr>
    <tr>
      <td>Ağ bağımsız düğümlerden oluşur</td>
      <td>Düğümler aynı bulut sağlayıcılarda kümelenebilir</td>
    </tr>
  </tbody>
</table>

<h2 id="token-demokrasisi-mi-dijital-plütokrasi-mi">Token Demokrasisi mi, Dijital Plütokrasi mi?</h2>

<p>DAO sistemlerinde sık kullanılan model, bir tokenın bir oy sayılmasıdır. Bu yöntem kolaydır; ancak demokratik değildir. Çok token sahibi olan yatırımcı, sıradan binlerce kullanıcıdan daha fazla söz hakkı kazanabilir. Böylece zincir üzerinde şeffaf olan yönetim, ekonomik açıdan yoğunlaşmış kalır.</p>

<p>Bu yoğunluğu ölçmek için Herfindahl–Hirschman Endeksi kullanılabilir:</p>

\[HHI = \sum_{i=1}^{n} s_i^2\]

<p>Buradaki $s_i$, her katılımcının toplam güç içindeki payıdır. Sonuç büyüdükçe güç daha az elde toplanmış demektir. Ayrıca <strong>Nakamoto katsayısı</strong>, sistemi bozmak için anlaşması gereken en az aktör sayısını gösterir. Binlerce doğrulayıcı bulunmasına rağmen üç büyük havuz çoğunluğu kontrol ediyorsa anlamlı sayı üçtür.</p>

<p>Aşağıdaki Python kodu token dağılımını inceleyerek HHI değerini ve yüzde 51’e ulaşan en küçük koalisyonu hesaplar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">guc_analizi</span><span class="p">(</span><span class="n">bakiyeler</span><span class="p">):</span>
    <span class="n">toplam</span> <span class="o">=</span> <span class="nf">sum</span><span class="p">(</span><span class="n">bakiyeler</span><span class="p">)</span>
    <span class="n">paylar</span> <span class="o">=</span> <span class="nf">sorted</span><span class="p">((</span><span class="n">b</span> <span class="o">/</span> <span class="n">toplam</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">bakiyeler</span><span class="p">),</span> <span class="n">reverse</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>

    <span class="n">hhi</span> <span class="o">=</span> <span class="nf">sum</span><span class="p">(</span><span class="n">pay</span> <span class="o">**</span> <span class="mi">2</span> <span class="k">for</span> <span class="n">pay</span> <span class="ow">in</span> <span class="n">paylar</span><span class="p">)</span>
    <span class="n">birikim</span> <span class="o">=</span> <span class="mi">0</span>

    <span class="k">for</span> <span class="n">aktor_sayisi</span><span class="p">,</span> <span class="n">pay</span> <span class="ow">in</span> <span class="nf">enumerate</span><span class="p">(</span><span class="n">paylar</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
        <span class="n">birikim</span> <span class="o">+=</span> <span class="n">pay</span>
        <span class="k">if</span> <span class="n">birikim</span> <span class="o">&gt;=</span> <span class="mf">0.51</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">hhi</span><span class="p">,</span> <span class="n">aktor_sayisi</span>

<span class="n">bakiyeler</span> <span class="o">=</span> <span class="p">[</span><span class="mi">420</span><span class="p">,</span> <span class="mi">250</span><span class="p">,</span> <span class="mi">140</span><span class="p">,</span> <span class="mi">90</span><span class="p">,</span> <span class="mi">60</span><span class="p">,</span> <span class="mi">40</span><span class="p">]</span>
<span class="n">hhi</span><span class="p">,</span> <span class="n">koalisyon</span> <span class="o">=</span> <span class="nf">guc_analizi</span><span class="p">(</span><span class="n">bakiyeler</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">'</span><span class="s">HHI: </span><span class="si">{</span><span class="n">hhi</span><span class="si">:</span><span class="p">.</span><span class="mi">3</span><span class="n">f</span><span class="si">}</span><span class="s">, kritik koalisyon: </span><span class="si">{</span><span class="n">koalisyon</span><span class="si">}</span><span class="sh">'</span><span class="p">)</span>
</code></pre></div></div>

<p>Kod, görünen katılımcı sayısına aldanmak yerine ekonomik kontrolü ölçer. Yine de bir kişinin birden fazla cüzdan kullanabilmesi veya farklı adreslerin aynı kuruma ait olması analizi zorlaştırır.</p>

<h2 id="görünmeyen-merkezler">Görünmeyen Merkezler</h2>

<p>Merkeziyetsizlik yalnızca blokzincir katmanında değerlendirilmemelidir. Kullanıcının işlemini ağa taşıyan RPC sağlayıcısı, cüzdan uygulaması, alan adı servisi, stablecoin ihraççısı ve borsa hâlâ merkezi olabilir. Akıllı sözleşme durdurulamasa bile ona ulaşan web arayüzü kapatılabilir.</p>

<table>
  <thead>
    <tr>
      <th>Katman</th>
      <th>Güç Yoğunlaşması Riski</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Konsensüs</td>
      <td>Büyük doğrulayıcılar ve staking havuzları</td>
    </tr>
    <tr>
      <td>Altyapı</td>
      <td>Bulut ve RPC sağlayıcıları</td>
    </tr>
    <tr>
      <td>Finans</td>
      <td>Stablecoin şirketleri ve merkezi borsalar</td>
    </tr>
    <tr>
      <td>Yönetişim</td>
      <td>Balinalar, delegeler ve düşük katılım</td>
    </tr>
    <tr>
      <td>Kullanıcı deneyimi</td>
      <td>Popüler cüzdanlar ve tekil web arayüzleri</td>
    </tr>
  </tbody>
</table>

<h2 id="ütopyadan-kullanışlı-bir-gerçekliğe">Ütopyadan Kullanışlı Bir Gerçekliğe</h2>

<p>Web3 bütünüyle merkeziyetsiz değildir; fakat bütünüyle sahte de değildir. Açık kaynak istemciler, kendi düğümünü çalıştırma imkânı ve izinsiz işlem yapabilme önemli kazanımlardır. Asıl hata, merkeziyetsizliği bir açma-kapama düğmesi gibi görmektir.</p>

<p>Daha sağlıklı sistemler için doğrulayıcı çeşitliliği, karesel oylama, zaman kilitli yönetişim, açık kaynak arayüzler ve alternatif RPC bağlantıları desteklenmelidir. Sonuçta mesele merkezin tamamen yok olması değil, gücün denetlenebilir, terk edilebilir ve rekabete açık olmasıdır. Web3’ün gerçek sahibi de logosu en büyük proje değil; protokolü gerektiğinde kimseye izin sormadan kullanabilen topluluktur.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="Web3" /><category term="merkeziyetsizlik" /><category term="blokzincir" /><summary type="html"><![CDATA[Web3; kullanıcıların verilerine, kimliklerine ve dijital varlıklarına sahip olduğu, aracıların yerini açık protokollerin aldığı bir internet vaat ediyor. Kulağa dijital bir ütopya gibi geliyor. Ancak cüzdan adreslerinin arkasındaki sermayeyi, doğrulayıcıları ve altyapı şirketlerini takip ettiğimizde rahatsız edici bir soruyla karşılaşıyoruz: Merkeziyetsiz internet gerçekten kullanıcıların mı, yoksa yalnızca yeni merkezlerin mi elinde?]]></summary></entry><entry><title type="html">Otomasyonun İşgücü Üzerindeki Sosyolojisi: Hangi Meslekler Gerçekten Risk Altında?</title><link href="https://sonsuzus.github.io/posts/otomasyonun-isgucu-uzerindeki-sosyolojisi-hangi-meslekler-gercekten-risk-altinda/" rel="alternate" type="text/html" title="Otomasyonun İşgücü Üzerindeki Sosyolojisi: Hangi Meslekler Gerçekten Risk Altında?" /><published>2026-07-31T00:00:00+00:00</published><updated>2026-07-31T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/otomasyonun-isgucu-uzerindeki-sosyolojisi-hangi-meslekler-gercekten-risk-altinda</id><content type="html" xml:base="https://sonsuzus.github.io/posts/otomasyonun-isgucu-uzerindeki-sosyolojisi-hangi-meslekler-gercekten-risk-altinda/"><![CDATA[<p>Bir robotun kahve hazırlaması, yapay zekânın sözleşme özetlemesi veya yazılımın faturaları işlemesi aynı soruyu gündeme getiriyor: “Mesleğim elimden gidecek mi?” Ancak otomasyon, meslekleri tek hamlede yok eden teknolojik bir kötü karakter değildir. Tarih, çoğunlukla mesleklerin değil, mesleklerin içindeki belirli görevlerin otomatikleştiğini; işgücü piyasasının da sınıf, eğitim, gelir ve pazarlık gücü eksenlerinde yeniden şekillendiğini gösteriyor.</p>

<p>``</p>

<h2 id="otomasyonun-eski-bir-hikâyesi-var">Otomasyonun Eski Bir Hikâyesi Var</h2>

<ol>
  <li>yüzyılın mekanik dokuma tezgâhları zanaatkârların üretim üzerindeki kontrolünü azalttı. 20. yüzyılın montaj hatları üretimi küçük ve tekrarlanabilir adımlara böldü. 1980’lerden itibaren bilgisayarlar büro işlerini dönüştürürken internet bazı aracı meslekleri zayıflattı, yepyeni uzmanlıklar doğurdu. Günümüzde üretken yapay zekâ ise yalnızca fiziksel veya rutin görevleri değil, metin yazma, analiz ve görsel üretme gibi bilişsel işleri de etkiliyor.</li>
</ol>

<table>
  <thead>
    <tr>
      <th>Otomasyon dalgası</th>
      <th>Temel teknoloji</th>
      <th>En çok etkilenen işler</th>
      <th>Ortaya çıkan ihtiyaçlar</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sanayi Devrimi</td>
      <td>Buhar gücü, makineler</td>
      <td>Dokumacılık, el üretimi</td>
      <td>Makine operatörlüğü, bakım</td>
    </tr>
    <tr>
      <td>Fordist dönem</td>
      <td>Montaj hattı</td>
      <td>Zanaata dayalı üretim</td>
      <td>Teknisyenlik, kalite kontrol</td>
    </tr>
    <tr>
      <td>Dijitalleşme</td>
      <td>Bilgisayar, internet</td>
      <td>Sekreterlik, veri girişi</td>
      <td>Yazılım, ağ yönetimi</td>
    </tr>
    <tr>
      <td>Yapay zekâ dönemi</td>
      <td>Makine öğrenmesi</td>
      <td>İçerik, analiz, destek görevleri</td>
      <td>Veri denetimi, AI yönetişimi</td>
    </tr>
  </tbody>
</table>

<p>Bu karşılaştırma önemli bir gerçeği ortaya çıkarır: Teknoloji iş miktarını azaltabileceği gibi üretimi ucuzlatıp talebi büyüterek yeni iş de yaratabilir. Sonucu teknoloji tek başına değil; şirket stratejileri, sendikalar, eğitim sistemi ve kamu politikaları belirler.</p>

<h2 id="meslek-değil-görev-riskine-bakmak">Meslek Değil, Görev Riskine Bakmak</h2>

<p>Bir mesleğin otomasyon riskini değerlendirirken onu görevlerine ayırmak gerekir. Örneğin muhasebecilik; veri girişi, mevzuat yorumlama, müşteri iletişimi ve stratejik danışmanlık içerir. Yazılım ilk görevi kolayca üstlenebilirken belirsiz mevzuatı yorumlamak veya güven ilişkisi kurmak daha zordur.</p>

<p>Basitleştirilmiş bir risk modeli şöyle kurulabilir:</p>

\[R = 0.35T + 0.25D + 0.20P - 0.20S\]

<p>Burada $T$ tekrarlanabilirliği, $D$ görevin dijital veriyle yapılabilmesini, $P$ öngörülebilirliği ve $S$ sosyal etkileşim gereksinimini temsil eder. Değerler 0 ile 1 arasındadır. Bu denklem bilimsel bir kehanet değil, düşünmeyi düzenleyen bir araçtır.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">otomasyon_riski</span><span class="p">(</span><span class="n">tekrar</span><span class="p">,</span> <span class="n">dijitallik</span><span class="p">,</span> <span class="n">ongorulebilirlik</span><span class="p">,</span> <span class="n">sosyal_beceri</span><span class="p">):</span>
    <span class="n">puan</span> <span class="o">=</span> <span class="p">(</span><span class="mf">0.35</span> <span class="o">*</span> <span class="n">tekrar</span> <span class="o">+</span>
            <span class="mf">0.25</span> <span class="o">*</span> <span class="n">dijitallik</span> <span class="o">+</span>
            <span class="mf">0.20</span> <span class="o">*</span> <span class="n">ongorulebilirlik</span> <span class="o">-</span>
            <span class="mf">0.20</span> <span class="o">*</span> <span class="n">sosyal_beceri</span><span class="p">)</span>
    <span class="k">return</span> <span class="nf">round</span><span class="p">(</span><span class="nf">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nf">min</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">puan</span><span class="p">)),</span> <span class="mi">2</span><span class="p">)</span>

<span class="nf">print</span><span class="p">(</span><span class="nf">otomasyon_riski</span><span class="p">(</span><span class="mf">0.9</span><span class="p">,</span> <span class="mf">0.9</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">))</span>  <span class="c1"># Örnek: veri girişi
</span><span class="nf">print</span><span class="p">(</span><span class="nf">otomasyon_riski</span><span class="p">(</span><span class="mf">0.3</span><span class="p">,</span> <span class="mf">0.4</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.9</span><span class="p">))</span>  <span class="c1"># Örnek: psikolojik danışmanlık
</span></code></pre></div></div>

<p>Bu kod, görev özelliklerini ağırlıklandırarak karşılaştırmalı bir puan üretir. Gerçek araştırmalarda ücret, regülasyon, teknoloji maliyeti ve hata toleransı gibi değişkenler de modele eklenmelidir.</p>

<h2 id="kimler-gerçekten-risk-altında">Kimler Gerçekten Risk Altında?</h2>

<table>
  <thead>
    <tr>
      <th>Daha yüksek risk</th>
      <th>Daha düşük risk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Veri girişi ve standart raporlama</td>
      <td>Bakım ve onarım</td>
    </tr>
    <tr>
      <td>Basit müşteri destek talepleri</td>
      <td>Sağlık ve bakım hizmetleri</td>
    </tr>
    <tr>
      <td>Tekrarlı üretim ve depo görevleri</td>
      <td>Müzakere ve liderlik</td>
    </tr>
    <tr>
      <td>Şablon içerik üretimi</td>
      <td>Belirsiz ortamlarda saha çalışması</td>
    </tr>
  </tbody>
</table>

<p>Yüksek risk, mutlaka işsizlik anlamına gelmez. İşverenler çalışan sayısını azaltabilir, aynı çalışanlardan daha fazla çıktı bekleyebilir veya işi “algoritmik yönetime” bağlayabilir. Böylece otomasyonun sosyolojik etkisi yalnızca iş kaybı değil; çalışma temposunun artması, becerilerin değersizleşmesi ve denetimin yoğunlaşması olabilir.</p>

<h2 id="asıl-ayrım-teknolojiye-erişimde">Asıl Ayrım Teknolojiye Erişimde</h2>

<p>Yeni dönemin kazananları sadece kod yazanlar olmayacak. Alan bilgisiyle teknolojiyi birleştiren, çıktıları doğrulayan, etik riskleri değerlendiren ve insanlarla güven kurabilen çalışanlar avantaj sağlayacak. Buna karşılık yeniden eğitim fırsatına erişemeyenler dönüşüm maliyetini daha ağır taşıyacak.</p>

<p>Dolayısıyla doğru soru “Robotlar işlerimizi alacak mı?” değil, “Verimlilik kazancını kim paylaşacak?” sorusudur. Çalışma süresinin kısaltılması, yaşam boyu eğitim, güçlü sosyal güvenlik ve çalışanların teknoloji kararlarına katılması sağlanırsa otomasyon toplumsal refah üretebilir. Aksi durumda son derece akıllı makineler, oldukça eski eşitsizlikleri büyütebilir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="otomasyon" /><category term="işgücü" /><category term="yapay zeka" /><summary type="html"><![CDATA[Bir robotun kahve hazırlaması, yapay zekânın sözleşme özetlemesi veya yazılımın faturaları işlemesi aynı soruyu gündeme getiriyor: “Mesleğim elimden gidecek mi?” Ancak otomasyon, meslekleri tek hamlede yok eden teknolojik bir kötü karakter değildir. Tarih, çoğunlukla mesleklerin değil, mesleklerin içindeki belirli görevlerin otomatikleştiğini; işgücü piyasasının da sınıf, eğitim, gelir ve pazarlık gücü eksenlerinde yeniden şekillendiğini gösteriyor.]]></summary></entry><entry><title type="html">Otomasyonun Varoluşsal Bedeli: Kendi İşini Gereksiz Kılan Programcı</title><link href="https://sonsuzus.github.io/posts/otomasyonun-varolussal-bedeli-kendi-isini-gereksiz-kilan-programci/" rel="alternate" type="text/html" title="Otomasyonun Varoluşsal Bedeli: Kendi İşini Gereksiz Kılan Programcı" /><published>2026-07-31T00:00:00+00:00</published><updated>2026-07-31T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/otomasyonun-varolussal-bedeli-kendi-isini-gereksiz-kilan-programci</id><content type="html" xml:base="https://sonsuzus.github.io/posts/otomasyonun-varolussal-bedeli-kendi-isini-gereksiz-kilan-programci/"><![CDATA[<p>Bir programcı, üç saatlik işi üç saniyeye indiren bir betik yazdığında önce kahraman gibi hisseder. Ardından rahatsız edici bir soru belirir: “Bu işlem artık bana ihtiyaç duymuyorsa ben neden buradayım?” Otomasyon, yazılım dünyasının en büyük başarı ölçütlerinden biridir; fakat başarıya ulaştıkça onu üreten kişinin görünürlüğünü azaltır. Böylece programcı yalnızca görevleri değil, görevler üzerinden kurduğu mesleki kimliği de otomatikleştirmeye başlar.</p>

<p>``</p>

<h2 id="paradoksun-çekirdeği">Paradoksun çekirdeği</h2>

<p>Ekonomik açıdan otomasyonun amacı açıktır: Aynı çıktıyı daha az zaman, hata ve maliyetle üretmek. Bir görevin elle tamamlanma süresi $T_e$, otomatik çalışma süresi $T_o$, otomasyonu geliştirme maliyeti ise $G$ olsun. İşlem $n$ kez tekrarlanıyorsa otomasyon şu koşulda kazançlıdır:</p>

\[G + nT_o &lt; nT_e\]

<p>Buradan başabaş noktası şöyle bulunur:</p>

\[n &gt; \frac{G}{T_e-T_o}\]

<p>Ne var ki denklem, insanın işinden aldığı anlamı ölçmez. Programcının karar verme yetkisi, ustalık hissi ve ekip içindeki konumu bir hücreye kolayca yazılamaz. Otomasyonun teknik getirisi ölçülebilirken varoluşsal maliyeti çoğunlukla görünmez kalır.</p>

<table>
  <thead>
    <tr>
      <th>Bakış açısı</th>
      <th>Otomasyonun vaadi</th>
      <th>Varoluşsal riski</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Şirket</td>
      <td>Daha düşük maliyet</td>
      <td>İnsanları yalnızca gider olarak görmek</td>
    </tr>
    <tr>
      <td>Kullanıcı</td>
      <td>Daha hızlı hizmet</td>
      <td>Muhatap ve kontrol kaybı</td>
    </tr>
    <tr>
      <td>Programcı</td>
      <td>Tekrardan kurtulmak</td>
      <td>Yetkinliğinin görünmezleşmesi</td>
    </tr>
    <tr>
      <td>Toplum</td>
      <td>Daha yüksek üretkenlik</td>
      <td>Kazancın adaletsiz paylaşılması</td>
    </tr>
  </tbody>
</table>

<h2 id="kod-yazmak-mı-kendini-silmek-mi">Kod yazmak mı, kendini silmek mi?</h2>

<p>Marx’ın yabancılaşma düşüncesinde çalışan, ürettiği şey üzerindeki kontrolünü kaybedebilir. Programcı için tuhaf olan, bu kontrol kaybını bizzat kodlamasıdır. Dün kendisinin yürüttüğü süreci bugün bir servis, yarın ise kimsenin nasıl çalıştığını tam hatırlamadığı bir sistem yönetir. Kod yaşamaya devam ederken yazarı organizasyon şemasından silinebilir.</p>

<p>Sartre’ın varoluşçuluğu ise insanın hazır bir özle doğmadığını, seçimleriyle kendini kurduğunu söyler. Bu açıdan “Ben rapor hazırlayan kişiyim” demek kırılgan bir kimliktir. Rapor otomatikleştiğinde öz de çöker. Daha dayanıklı tanım şudur: “Ben sorunları fark eden, sistem tasarlayan ve sonuçların sorumluluğunu alan kişiyim.” Görev ortadan kalkabilir; muhakeme bütünüyle ortadan kalkmak zorunda değildir.</p>

<p>Basit bir otomasyon örneği bile bu ayrımı gösterir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>


<span class="k">def</span> <span class="nf">eski_loglari_temizle</span><span class="p">(</span><span class="n">klasor</span><span class="p">,</span> <span class="n">sinir</span><span class="p">):</span>
    <span class="n">dosyalar</span> <span class="o">=</span> <span class="nf">sorted</span><span class="p">(</span>
        <span class="nc">Path</span><span class="p">(</span><span class="n">klasor</span><span class="p">).</span><span class="nf">glob</span><span class="p">(</span><span class="sh">"</span><span class="s">*.log</span><span class="sh">"</span><span class="p">),</span>
        <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">dosya</span><span class="p">:</span> <span class="n">dosya</span><span class="p">.</span><span class="nf">stat</span><span class="p">().</span><span class="n">st_mtime</span>
    <span class="p">)</span>

    <span class="k">for</span> <span class="n">dosya</span> <span class="ow">in</span> <span class="n">dosyalar</span><span class="p">[:</span><span class="o">-</span><span class="n">sinir</span><span class="p">]:</span>
        <span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Siliniyor: </span><span class="si">{</span><span class="n">dosya</span><span class="p">.</span><span class="n">name</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
        <span class="n">dosya</span><span class="p">.</span><span class="nf">unlink</span><span class="p">()</span>


<span class="nf">eski_loglari_temizle</span><span class="p">(</span><span class="sh">"</span><span class="s">logs</span><span class="sh">"</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu kod eski günlük dosyalarını silerek rutin bakım işini devralır. Ancak hangi kayıtların hukuki veya operasyonel açıdan saklanması gerektiğine karar vermez. Programcı parmak hareketlerini makineye aktarırken bağlamı, sınırları ve sorumluluğu elinde tutar. En azından sistem bilinçli tasarlanmışsa durum budur.</p>

<h2 id="asıl-sorun-otomasyon-değil-paylaşım">Asıl sorun otomasyon değil, paylaşım</h2>

<p>Teknoloji tarihindeki temel çatışma “makine mi, insan mı?” değildir. Daha doğru soru, makinenin yarattığı zamanın kime ait olduğudur. Sekiz saatlik iş iki saate düşüyor ama çalışanın hedefi dört katına çıkıyorsa özgürleşme gerçekleşmez; yalnızca koşu bandı hızlanır. Kazanılan altı saat eğitim, yaratıcılık veya dinlenme için kullanılabiliyorsa otomasyon insani kapasiteyi genişletir.</p>

<p>Bu nedenle etik bir otomasyon sürecinde programcı üç soruyu sormalıdır:</p>

<ol>
  <li>Ortadan kaldırdığım görev mi, yoksa bir insanın pazarlık gücü mü?</li>
  <li>Sistemin hatasında sorumluluk kimde kalacak?</li>
  <li>Kazanılan zaman ve değer kimler arasında paylaşılacak?</li>
</ol>

<h2 id="programcı-kendini-nereye-koymalı">Programcı kendini nereye koymalı?</h2>

<p>Programcının güvenli yeri belirli bir araç, dil veya görev değildir. Bugünün vazgeçilmez framework’ü yarının nostaljik blog yazısı olabilir. Daha sağlam konum; problemi tanımlamak, varsayımları sorgulamak, insan sonuçlarını görmek ve gerektiğinde otomasyona “hayır” diyebilmektir.</p>

<p>Kendi işini otomatikleştirmek bu yüzden mesleki intihar olmak zorunda değildir. Eski rolün bilinçli biçimde terk edilmesi ve daha yüksek sorumluluğa geçiş olabilir. Fakat kurum yalnızca verimlilik kazancını sahiplenip insanı dışarıda bırakıyorsa paradoks acımasızlaşır: Programcı geleceği inşa eder, fakat gelecekte kendisine sandalye ayrılmadığını görür. Mesele kodun bizi gereksiz kılması değil; gereksizliğin ekonomik ve ahlaki tanımını kimin yazdığıdır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="otomasyon" /><category term="yazılım felsefesi" /><category term="yapay zeka" /><summary type="html"><![CDATA[Bir programcı, üç saatlik işi üç saniyeye indiren bir betik yazdığında önce kahraman gibi hisseder. Ardından rahatsız edici bir soru belirir: “Bu işlem artık bana ihtiyaç duymuyorsa ben neden buradayım?” Otomasyon, yazılım dünyasının en büyük başarı ölçütlerinden biridir; fakat başarıya ulaştıkça onu üreten kişinin görünürlüğünü azaltır. Böylece programcı yalnızca görevleri değil, görevler üzerinden kurduğu mesleki kimliği de otomatikleştirmeye başlar.]]></summary></entry><entry><title type="html">Programlama Dillerinde Söz Dizimi Estetiği: Kodun Güzelliği Nereden Gelir?</title><link href="https://sonsuzus.github.io/posts/programlama-dillerinde-soz-dizimi-estetigi-kodun-guzelligi-nereden-gelir/" rel="alternate" type="text/html" title="Programlama Dillerinde Söz Dizimi Estetiği: Kodun Güzelliği Nereden Gelir?" /><published>2026-07-31T00:00:00+00:00</published><updated>2026-07-31T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/programlama-dillerinde-soz-dizimi-estetigi-kodun-guzelligi-nereden-gelir</id><content type="html" xml:base="https://sonsuzus.github.io/posts/programlama-dillerinde-soz-dizimi-estetigi-kodun-guzelligi-nereden-gelir/"><![CDATA[<p>Bir kod parçasına bakıp daha çalıştırmadan onun güzel ya da çirkin olduğunu düşündüğünüz oldu mu? Girintiler, parantezler, anahtar kelimeler ve semboller; programın davranışını değiştirmese bile algımızı etkiler. Kod estetiği yalnızca kişisel zevk değildir: Okunabilirlik, aşinalık, görsel yoğunluk ve dilin sakladığı ayrıntılar birlikte çalışarak zihnimizde bir düzen hissi oluşturur.
``</p>

<h2 id="söz-dizimi-yalnızca-gramer-değildir">Söz dizimi yalnızca gramer değildir</h2>

<p>Bir programlama dilinin söz dizimi, hangi karakter dizilerinin geçerli programlar oluşturduğunu belirleyen kurallar bütünüdür. Örneğin aynı koşul farklı dillerde şöyle yazılabilir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">if</span> <span class="n">temperature</span> <span class="o">&gt;</span> <span class="mi">30</span><span class="p">:</span>
    <span class="nf">start_fan</span><span class="p">()</span>
</code></pre></div></div>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">if </span><span class="p">(</span><span class="nx">temperature</span> <span class="o">&gt;</span> <span class="mi">30</span><span class="p">)</span> <span class="p">{</span>
  <span class="nf">startFan</span><span class="p">();</span>
<span class="p">}</span>
</code></pre></div></div>

<p>İki örnek de aynı fikri anlatır: Sıcaklık 30’dan büyükse fanı çalıştır. Python girintiyle blok oluştururken JavaScript parantez ve süslü ayraç kullanır. Python daha hafif, JavaScript ise sınırları daha açık görünebilir. Hangisinin güzel olduğu, okuyucunun belirsizliğe mi yoksa sembol kalabalığına mı daha duyarlı olduğuna bağlıdır.</p>

<p>Bu algıyı basitleştirilmiş bir modelle ifade edebiliriz:</p>

\[E = \alpha O + \beta T + \gamma A - \delta Y\]

<p>Burada $E$ estetik algıyı, $O$ okunabilirliği, $T$ tutarlılığı, $A$ aşinalığı ve $Y$ görsel yükü temsil eder. Katsayılar kişiden kişiye değişir. Yeni başlayan biri açıklığı ödüllendirirken deneyimli biri kısa ve yoğun ifadeleri tercih edebilir.</p>

<h2 id="aynı-fikir-farklı-görsel-karakter">Aynı fikir, farklı görsel karakter</h2>

<table>
  <thead>
    <tr>
      <th>Tercih</th>
      <th>Avantajı</th>
      <th>Estetik riski</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Girintiye dayalı bloklar</td>
      <td>Az sembol, temiz görünüm</td>
      <td>Görünmez boşluklara bağımlılık</td>
    </tr>
    <tr>
      <td>Süslü parantezler</td>
      <td>Blok sınırları belirgindir</td>
      <td>Görsel kalabalık oluşturabilir</td>
    </tr>
    <tr>
      <td>Noktalı virgül</td>
      <td>İfade sonunu açıkça gösterir</td>
      <td>Gereksiz gürültü gibi algılanabilir</td>
    </tr>
    <tr>
      <td>Tür çıkarımı</td>
      <td>Kodu kısaltır</td>
      <td>Bilgiyi okuyucudan saklayabilir</td>
    </tr>
    <tr>
      <td>Açık tür bildirimi</td>
      <td>Niyeti belgeler</td>
      <td>Uzun ve törensel kod üretebilir</td>
    </tr>
  </tbody>
</table>

<p>Örneğin Rust, türleri ve hata ihtimallerini görünür kılmayı sever:</p>

<div class="language-rust highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">fn</span> <span class="nf">divide</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="nb">f64</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="nb">f64</span><span class="p">)</span> <span class="k">-&gt;</span> <span class="nb">Result</span><span class="o">&lt;</span><span class="nb">f64</span><span class="p">,</span> <span class="o">&amp;</span><span class="k">'static</span> <span class="nb">str</span><span class="o">&gt;</span> <span class="p">{</span>
    <span class="k">if</span> <span class="n">b</span> <span class="o">==</span> <span class="mf">0.0</span> <span class="p">{</span>
        <span class="k">return</span> <span class="nf">Err</span><span class="p">(</span><span class="s">"Sıfıra bölme yapılamaz"</span><span class="p">);</span>
    <span class="p">}</span>
    <span class="nf">Ok</span><span class="p">(</span><span class="n">a</span> <span class="o">/</span> <span class="n">b</span><span class="p">)</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Bu fonksiyon yalnızca bölme yapmaz; başarısızlık olasılığını <code class="language-plaintext highlighter-rouge">Result</code> türüyle sözleşmeye dönüştürür. İlk bakışta Python’daki kısa bir fonksiyondan daha ağırdır. Buna karşılık hata davranışının açık olması, bazı geliştiricilere mimari bir güzellik hissi verir. Demek ki kısalık her zaman zarafet değildir.</p>

<h2 id="beyin-neden-düzen-arar">Beyin neden düzen arar?</h2>

<p>İnsan zihni örüntüleri hızlı tanır. Benzer işlemlerin benzer biçimde yazılması bilişsel yükü azaltır. Bir dosyada fonksiyon çağrıları tutarlı, diğerinde zincirleme, iç içe ve rastgele biçimlendirilmişse dil değişmese bile estetik algı bozulur.</p>

<p>Şu zincir kısa olsa da yoğun olabilir:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">names</span> <span class="o">=</span> <span class="nx">users</span><span class="p">.</span><span class="nf">filter</span><span class="p">(</span><span class="nx">u</span> <span class="o">=&gt;</span> <span class="nx">u</span><span class="p">.</span><span class="nx">active</span><span class="p">).</span><span class="nf">map</span><span class="p">(</span><span class="nx">u</span> <span class="o">=&gt;</span> <span class="nx">u</span><span class="p">.</span><span class="nx">name</span><span class="p">).</span><span class="nf">sort</span><span class="p">();</span>
</code></pre></div></div>

<p>Aynı işlem adımlara ayrıldığında veri akışı daha görünür hâle gelir:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">activeUsers</span> <span class="o">=</span> <span class="nx">users</span><span class="p">.</span><span class="nf">filter</span><span class="p">(</span><span class="nx">user</span> <span class="o">=&gt;</span> <span class="nx">user</span><span class="p">.</span><span class="nx">active</span><span class="p">);</span>
<span class="kd">const</span> <span class="nx">names</span> <span class="o">=</span> <span class="nx">activeUsers</span><span class="p">.</span><span class="nf">map</span><span class="p">(</span><span class="nx">user</span> <span class="o">=&gt;</span> <span class="nx">user</span><span class="p">.</span><span class="nx">name</span><span class="p">);</span>
<span class="nx">names</span><span class="p">.</span><span class="nf">sort</span><span class="p">();</span>
</code></pre></div></div>

<p>İlk sürüm akıcı ve kompakt, ikinci sürüm ise açıklayıcıdır. Estetik karar bağlama bağlıdır: Basit bir dönüşümde zincir zarifken karmaşık hata ayıklama sürecinde ara değişkenler daha güzel gelebilir.</p>

<h2 id="aşinalık-güzellik-kılığına-girebilir">Aşinalık, güzellik kılığına girebilir</h2>

<p>Bir dili uzun süre kullandığımızda onun alışkanlıklarını doğal kabul ederiz. C geliştiricisi süslü parantezleri güven verici bulabilir; Python geliştiricisi aynı sembolleri gürültü sayabilir. Lisp’in çok sayıdaki parantezi yabancı bir göze çirkin görünürken deneyimli bir Lisp kullanıcısı, kod ile veri arasındaki simetriyi estetik bulur.</p>

<p>Bu nedenle söz dizimi estetiği tamamen nesnel değildir; fakat tamamen keyfî de değildir. Tutarlılık, düşük bilişsel yük, niyetin görünürlüğü ve araç desteği ölçülebilir faydalar sağlar. Biçimlendiriciler de tartışmayı azaltır: <code class="language-plaintext highlighter-rouge">Black</code>, <code class="language-plaintext highlighter-rouge">Prettier</code> veya <code class="language-plaintext highlighter-rouge">rustfmt</code>, kişisel tercihleri ortak bir görsel ritme dönüştürür.</p>

<p>Sonuçta güzel kod, en az karakterle yazılan değil; okuyucunun zihninde en az sürtünmeyle anlam kazanan koddur. İyi söz dizimi programcıya kendini sürekli hatırlatmaz. Geri çekilir, fikri öne çıkarır ve kodu noktalama işaretleriyle yapılan bir mücadeleden okunabilir bir anlatıya dönüştürür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="söz dizimi" /><category term="programlama dilleri" /><category term="kod kalitesi" /><summary type="html"><![CDATA[Bir kod parçasına bakıp daha çalıştırmadan onun güzel ya da çirkin olduğunu düşündüğünüz oldu mu? Girintiler, parantezler, anahtar kelimeler ve semboller; programın davranışını değiştirmese bile algımızı etkiler. Kod estetiği yalnızca kişisel zevk değildir: Okunabilirlik, aşinalık, görsel yoğunluk ve dilin sakladığı ayrıntılar birlikte çalışarak zihnimizde bir düzen hissi oluşturur.]]></summary></entry><entry><title type="html">Sentetik Verinin Felsefi Riski: Model Kendi Sesinin Yankısında Kaybolursa</title><link href="https://sonsuzus.github.io/posts/sentetik-verinin-felsefi-riski-model-kendi-sesinin-yankisinda-kaybolursa/" rel="alternate" type="text/html" title="Sentetik Verinin Felsefi Riski: Model Kendi Sesinin Yankısında Kaybolursa" /><published>2026-07-31T00:00:00+00:00</published><updated>2026-07-31T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/sentetik-verinin-felsefi-riski-model-kendi-sesinin-yankisinda-kaybolursa</id><content type="html" xml:base="https://sonsuzus.github.io/posts/sentetik-verinin-felsefi-riski-model-kendi-sesinin-yankisinda-kaybolursa/"><![CDATA[<p>Bir yapay zekâ modelinin ürettiği metinler, görseller veya kodlar yeni modellerin eğitim verisine karıştığında tuhaf bir döngü başlar: Makine, dünyayı doğrudan gözlemlemek yerine kendi yankısını dinlemeye koyulur. İlk bakışta ucuz ve sınırsız görünen sentetik veri, kontrol edilmediğinde bilgi kirliliğini büyütebilir; istisnaları silebilir ve özgünlüğü istatistiksel bir ortalamaya dönüştürebilir.
``</p>
<h2 id="döngüsel-öğrenme-nedir">Döngüsel öğrenme nedir?</h2>

<p>Klasik eğitimde model, insanlar ve fiziksel dünya tarafından üretilmiş verilere bakarak bir dağılım öğrenir. Döngüsel öğrenmede ise önceki modelin çıktıları, sonraki modelin girdilerine dönüşür:</p>

\[Gerçek\ Veri \rightarrow Model_1 \rightarrow Sentetik\ Veri \rightarrow Model_2\]

<p>Buradaki temel sorun, sentetik çıktının gerçekliğin kendisi değil, gerçekliğe ilişkin sıkıştırılmış bir tahmin olmasıdır. Her model bazı ayrıntıları atar, yaygın örüntüleri güçlendirir ve düşük olasılıklı örnekleri gözden kaçırır. Bu süreç tekrarlandığında dağılımın kuyrukları giderek küçülür.</p>

<p>Basitçe, bir nesildeki eğitim karışımını şöyle gösterebiliriz:</p>

\[D_{t+1} = (1-\alpha)D_{gerçek} + \alpha D_{sentetik,t}\]

<p>Burada $\alpha$, sentetik verinin ağırlığıdır. Değer büyüdükçe modelin dünya ile doğrudan teması azalır. Sentetik veri hatalıysa hata yalnızca korunmaz; güvenli ve akıcı bir dille yeniden paketlenerek daha inandırıcı hâle gelebilir.</p>

<h2 id="yankı-odasının-üç-riski">Yankı odasının üç riski</h2>

<table>
  <thead>
    <tr>
      <th>Boyut</th>
      <th>Gerçek veri ağırlıklı eğitim</th>
      <th>Sentetik veri ağırlıklı eğitim</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Çeşitlilik</td>
      <td>Nadir ve düzensiz örnekleri barındırır</td>
      <td>Yaygın kalıplara yakınsar</td>
    </tr>
    <tr>
      <td>Hata yapısı</td>
      <td>Hatalar farklı kaynaklardan gelir</td>
      <td>Aynı hata nesiller boyunca çoğalabilir</td>
    </tr>
    <tr>
      <td>Özgünlük</td>
      <td>Yeni deneyimler ve bakışlar içerir</td>
      <td>Önceki üretimlerin türevlerini üretir</td>
    </tr>
    <tr>
      <td>İzlenebilirlik</td>
      <td>Kaynağa ulaşmak görece mümkündür</td>
      <td>İlk kaynağın insan mı model mi olduğu bulanıklaşır</td>
    </tr>
  </tbody>
</table>

<p>İlk risk <strong>model çöküşüdür</strong>. Model, az rastlanan durumları unutup en olası cevaplara sıkışır. İkinci risk <strong>epistemik aklama</strong>dır: Dayanağı olmayan bir iddia, binlerce sentetik metinde tekrarlandığı için yaygın ve güvenilir görünür. Üçüncüsü ise <strong>özgünlük kaybıdır</strong>. Kültür, yalnızca çoğunluk örüntülerinden oluşmaz; aykırı fikirler, yerel ifadeler ve başarısız denemeler de yaratıcı ilerlemenin hammaddesidir.</p>

<h2 id="küçük-bir-simülasyon">Küçük bir simülasyon</h2>

<p>Aşağıdaki Python kodu, bir dağılımın yalnızca en merkezi sentetik örneklerle tekrar tekrar öğrenilmesini kabaca canlandırır:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">numpy</span> <span class="k">as</span> <span class="n">np</span>

<span class="n">veri</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">random</span><span class="p">.</span><span class="nf">normal</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">10_000</span><span class="p">)</span>

<span class="k">for</span> <span class="n">nesil</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">6</span><span class="p">):</span>
    <span class="n">ortalama</span> <span class="o">=</span> <span class="n">veri</span><span class="p">.</span><span class="nf">mean</span><span class="p">()</span>
    <span class="n">sapma</span> <span class="o">=</span> <span class="n">veri</span><span class="p">.</span><span class="nf">std</span><span class="p">()</span>

    <span class="c1"># Model uç değerleri daha az üretiyor.
</span>    <span class="n">yeni_veri</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">random</span><span class="p">.</span><span class="nf">normal</span><span class="p">(</span><span class="n">ortalama</span><span class="p">,</span> <span class="n">sapma</span> <span class="o">*</span> <span class="mf">0.8</span><span class="p">,</span> <span class="mi">10_000</span><span class="p">)</span>
    <span class="n">veri</span> <span class="o">=</span> <span class="n">yeni_veri</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">nesil</span><span class="p">,</span> <span class="nf">round</span><span class="p">(</span><span class="n">veri</span><span class="p">.</span><span class="nf">std</span><span class="p">(),</span> <span class="mi">2</span><span class="p">))</span>
</code></pre></div></div>

<p>Standart sapma her nesilde küçülür. Bu, gerçek modellerin eksiksiz bir temsili değildir; ancak çeşitliliğin neden sessizce kaybolabileceğini gösterir. Sistem hâlâ düzgün cümleler kurabilirken kapsadığı dünya daralmış olabilir.</p>

<h2 id="sentetik-veri-tamamen-kötü-mü">Sentetik veri tamamen kötü mü?</h2>

<p>Hayır. Mahremiyet gerektiren sağlık çalışmalarında, nadir hata senaryolarında veya veri artırmada son derece yararlı olabilir. Kritik ayrım, sentetik verinin <strong>ikame</strong> mi yoksa <strong>destek</strong> mi olduğudur. Gerçek veriyi tamamen değiştirmek yerine dengeli biçimde kullanılması; kaynağının etiketlenmesi, insan denetiminden geçirilmesi ve bağımsız test kümeleriyle ölçülmesi gerekir.</p>

<p>Sağlıklı bir yaklaşım için veri kökeni kaydedilmeli, sentetik oranı sınırlandırılmalı, azınlık örnekleri özellikle korunmalı ve modeller güncel gerçek dünya verileriyle düzenli olarak yeniden bağlanmalıdır. Çünkü mesele yalnızca teknik doğruluk değildir. Kendi ürettiğini tüketen bir model, sonunda bize dünyayı değil, dünya hakkında daha önce söylediği şeylerin ortalamasını anlatabilir. Yankı kusursuz duyulsa bile artık dışarıdan gelen bir ses olmayabilir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="sentetik veri" /><category term="yapay zekâ" /><category term="model çöküşü" /><summary type="html"><![CDATA[Bir yapay zekâ modelinin ürettiği metinler, görseller veya kodlar yeni modellerin eğitim verisine karıştığında tuhaf bir döngü başlar: Makine, dünyayı doğrudan gözlemlemek yerine kendi yankısını dinlemeye koyulur. İlk bakışta ucuz ve sınırsız görünen sentetik veri, kontrol edilmediğinde bilgi kirliliğini büyütebilir; istisnaları silebilir ve özgünlüğü istatistiksel bir ortalamaya dönüştürebilir.]]></summary></entry><entry><title type="html">Sistem Betikleri ve Görev Otomasyonu: Komutlardan Cron Mantığına</title><link href="https://sonsuzus.github.io/posts/sistem-betikleri-ve-gorev-otomasyonu-komutlardan-cron-mantigina/" rel="alternate" type="text/html" title="Sistem Betikleri ve Görev Otomasyonu: Komutlardan Cron Mantığına" /><published>2026-07-31T00:00:00+00:00</published><updated>2026-07-31T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/sistem-betikleri-ve-gorev-otomasyonu-komutlardan-cron-mantigina</id><content type="html" xml:base="https://sonsuzus.github.io/posts/sistem-betikleri-ve-gorev-otomasyonu-komutlardan-cron-mantigina/"><![CDATA[<p>Bir geliştiricinin aynı komutu her sabah elle çalıştırması, kahve makinesinin başında suyun kaynamasını izlemek kadar gereksizdir. Sistem betikleri; dosya yedekleme, günlük temizleme, servis denetleme ve rapor üretme gibi işleri kodla yönetmemizi sağlar. Bu işleri belirli aralıklarla kendiliğinden çalıştırdığımızda ise küçük ama yorulmayan bir dijital asistana sahip oluruz.
``</p>
<h2 id="i̇şletim-sistemi-komutu-çalıştırmanın-mantığı">İşletim sistemi komutu çalıştırmanın mantığı</h2>

<p>Bir terminale <code class="language-plaintext highlighter-rouge">ls</code>, <code class="language-plaintext highlighter-rouge">ipconfig</code> veya <code class="language-plaintext highlighter-rouge">mkdir</code> yazdığımızda kabuk, komutu yorumlayarak işletim sisteminden ilgili programı başlatmasını ister. Kod içerisinden komut çalıştırırken de benzer bir süreç gerçekleşir:</p>

<ol>
  <li>Ana program bir alt süreç oluşturur.</li>
  <li>İşletim sistemi komutu ayrı bir süreçte yürütür.</li>
  <li>Standart çıktı, hata çıktısı ve dönüş kodu ana programa iletilir.</li>
</ol>

<p>Komutun başarılı olup olmadığını anlamak için <strong>çıkış kodu</strong> kullanılır. Genel kabul şöyledir: $E = 0$ başarıyı, $E \neq 0$ ise hata veya olağan dışı durumu temsil eder.</p>

<p>Python’da bunun için <code class="language-plaintext highlighter-rouge">subprocess</code> modülü tercih edilir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">subprocess</span>

<span class="n">komut</span> <span class="o">=</span> <span class="p">[</span><span class="sh">"</span><span class="s">ping</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">-c</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">2</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">example.com</span><span class="sh">"</span><span class="p">]</span>

<span class="k">try</span><span class="p">:</span>
    <span class="n">sonuc</span> <span class="o">=</span> <span class="n">subprocess</span><span class="p">.</span><span class="nf">run</span><span class="p">(</span>
        <span class="n">komut</span><span class="p">,</span>
        <span class="n">capture_output</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
        <span class="n">text</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
        <span class="n">timeout</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
        <span class="n">check</span><span class="o">=</span><span class="bp">True</span>
    <span class="p">)</span>
    <span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Komut başarılı:</span><span class="sh">"</span><span class="p">)</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">sonuc</span><span class="p">.</span><span class="n">stdout</span><span class="p">)</span>
<span class="k">except</span> <span class="n">subprocess</span><span class="p">.</span><span class="n">TimeoutExpired</span><span class="p">:</span>
    <span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Komut zaman aşımına uğradı.</span><span class="sh">"</span><span class="p">)</span>
<span class="k">except</span> <span class="n">subprocess</span><span class="p">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">hata</span><span class="p">:</span>
    <span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Çıkış kodu:</span><span class="sh">"</span><span class="p">,</span> <span class="n">hata</span><span class="p">.</span><span class="n">returncode</span><span class="p">)</span>
    <span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Hata mesajı:</span><span class="sh">"</span><span class="p">,</span> <span class="n">hata</span><span class="p">.</span><span class="n">stderr</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu kod, hedef sunucuya iki ping gönderir; çıktıyı yakalar, on saniyelik sınır uygular ve başarısız dönüş kodunu istisnaya dönüştürür. Windows kullanılıyorsa parametreler <code class="language-plaintext highlighter-rouge">ping -n 2 example.com</code> biçiminde değiştirilmelidir.</p>

<h2 id="shelltrue-neden-dikkat-ister"><code class="language-plaintext highlighter-rouge">shell=True</code> neden dikkat ister?</h2>

<p>Kullanıcıdan gelen metni doğrudan kabuğa göndermek komut enjeksiyonuna yol açabilir. Örneğin dosya adına eklenen <code class="language-plaintext highlighter-rouge">; rm -rf ...</code> benzeri bir ifade ikinci bir komut olarak yorumlanabilir. Bu nedenle komutları liste halinde vermek ve varsayılan <code class="language-plaintext highlighter-rouge">shell=False</code> davranışını korumak daha güvenlidir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Avantaj</th>
      <th>Risk veya sınırlama</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">subprocess.run([...])</code></td>
      <td>Güvenli ve kontrol edilebilir</td>
      <td>Kabuk özellikleri doğrudan kullanılamaz</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">shell=True</code></td>
      <td>Boru ve yönlendirme işlemleri kolaydır</td>
      <td>Enjeksiyon riski oluşturur</td>
    </tr>
    <tr>
      <td>Python kütüphaneleri</td>
      <td>Platformlar arası çalışabilir</td>
      <td>Her sistem işlemini kapsamayabilir</td>
    </tr>
  </tbody>
</table>

<p>Örneğin dosya silmek için <code class="language-plaintext highlighter-rouge">rm</code> çağırmak yerine <code class="language-plaintext highlighter-rouge">pathlib.Path.unlink()</code> kullanmak çoğu zaman daha taşınabilir ve güvenlidir.</p>

<h2 id="cron-mantığı-ve-periyodik-çalışma">Cron mantığı ve periyodik çalışma</h2>

<p>Periyodik görevlerde temel fikir, mevcut zamanın belirlenen kuralla eşleşip eşleşmediğini denetlemektir. Bir görev her $T$ dakikada çalışıyorsa, yaklaşık çalışma sayısı $N = \frac{D}{T}$ ile hesaplanabilir. Burada $D$, toplam dakika sayısıdır. Örneğin bir günde her 15 dakikada çalışan görev $1440 / 15 = 96$ kez tetiklenir.</p>

<p>Linux cron ifadesi beş zaman alanından oluşur:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>* * * * *
│ │ │ │ └── Haftanın günü
│ │ │ └──── Ay
│ │ └────── Ayın günü
│ └──────── Saat
└────────── Dakika
</code></pre></div></div>

<p>Her gece 02.30’da yedek alan bir betik şöyle planlanabilir:</p>

<pre><code class="language-cron">30 2 * * * /usr/bin/python3 /opt/scripts/yedekle.py &gt;&gt; /var/log/yedekle.log 2&gt;&amp;1
</code></pre>

<p>Buradaki yönlendirme, normal ve hata çıktılarını günlük dosyasına ekler. Betiğin elle çalışırken başarılı olması cron altında da başarılı olacağı anlamına gelmez; cron daha sınırlı bir ortam değişkeni ve <code class="language-plaintext highlighter-rouge">PATH</code> değeriyle çalışabilir. Bu yüzden mutlak dosya yolları kullanılmalıdır.</p>

<table>
  <thead>
    <tr>
      <th>Araç</th>
      <th>Uygun kullanım</th>
      <th>Öne çıkan özellik</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Cron</td>
      <td>Basit Linux görevleri</td>
      <td>Hafif ve yerleşik</td>
    </tr>
    <tr>
      <td>systemd timer</td>
      <td>Servis odaklı Linux işleri</td>
      <td>Günlükleme ve bağımlılık yönetimi</td>
    </tr>
    <tr>
      <td>Windows Task Scheduler</td>
      <td>Windows otomasyonu</td>
      <td>Grafik arayüz ve tetikleyiciler</td>
    </tr>
    <tr>
      <td>APScheduler</td>
      <td>Uygulama içi Python görevleri</td>
      <td>Dinamik zamanlama</td>
    </tr>
  </tbody>
</table>

<h2 id="sağlam-bir-otomasyonun-kontrol-listesi">Sağlam bir otomasyonun kontrol listesi</h2>

<p>İyi bir görev tekrar çalıştırıldığında veriyi bozmamalı, yani mümkün olduğunca <strong>idempotent</strong> olmalıdır. Hataları dosyaya veya merkezi günlük sistemine yazmalı, çalışma süresini sınırlamalı ve gizli bilgileri kaynak koda gömmemelidir. Aynı görevin iki kopyasının eşzamanlı başlamasını önlemek için kilit dosyası da kullanılabilir.</p>

<p>Kısacası başarılı otomasyon yalnızca “komutu zamanında çalıştırmak” değildir. Güvenli süreç yönetimi, doğru zamanlama, gözlemlenebilir günlükler ve hata sonrası toparlanma birlikte tasarlandığında betikler gerçekten güvenilir birer sistem çalışanına dönüşür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Program" /><category term="Python" /><category term="Cron" /><category term="Otomasyon" /><summary type="html"><![CDATA[Bir geliştiricinin aynı komutu her sabah elle çalıştırması, kahve makinesinin başında suyun kaynamasını izlemek kadar gereksizdir. Sistem betikleri; dosya yedekleme, günlük temizleme, servis denetleme ve rapor üretme gibi işleri kodla yönetmemizi sağlar. Bu işleri belirli aralıklarla kendiliğinden çalıştırdığımızda ise küçük ama yorulmayan bir dijital asistana sahip oluruz.]]></summary></entry><entry><title type="html">Skinner’ın Güvercinlerinden Yapay Zekâ Ajanlarına: Pekiştirmeli Öğrenmenin Davranışçı Kökleri</title><link href="https://sonsuzus.github.io/posts/skinnerin-guvercinlerinden-yapay-zeka-ajanlarina-pekistirmeli-ogrenmenin-davranisci-kokleri/" rel="alternate" type="text/html" title="Skinner’ın Güvercinlerinden Yapay Zekâ Ajanlarına: Pekiştirmeli Öğrenmenin Davranışçı Kökleri" /><published>2026-07-31T00:00:00+00:00</published><updated>2026-07-31T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/skinnerin-guvercinlerinden-yapay-zeka-ajanlarina-pekistirmeli-ogrenmenin-davranisci-kokleri</id><content type="html" xml:base="https://sonsuzus.github.io/posts/skinnerin-guvercinlerinden-yapay-zeka-ajanlarina-pekistirmeli-ogrenmenin-davranisci-kokleri/"><![CDATA[<p>Bir güvercinin doğru düğmeyi gagalamasıyla bir yapay zekâ ajanının oyunda puan toplaması arasında gerçekten bağlantı olabilir mi? Şaşırtıcı biçimde evet! B. F. Skinner’ın davranışçı psikoloji deneyleri ile modern pekiştirmeli öğrenme algoritmaları, zekânın iç dünyasından çok davranışların sonuçlarına odaklanan benzer bir mantık kullanır.
``</p>
<h2 id="skinner-kutusunda-öğrenmek">Skinner kutusunda öğrenmek</h2>

<p>Davranışçılığa göre öğrenmeyi açıklamak için zihnin görünmeyen süreçleri hakkında tahmin yürütmek şart değildir. Organizmanın hangi durumda ne yaptığını ve ardından neyle karşılaştığını gözlemlemek yeterlidir. Skinner’ın <strong>edimsel koşullanma</strong> yaklaşımında bir davranış olumlu sonuç doğuruyorsa tekrarlanma olasılığı artar; olumsuz sonuç doğuruyorsa azalır.</p>

<p>Skinner kutusundaki bir güvercin, belirli bir ışık yandığında düğmeyi gagalayıp yem kazanabilir. Başlangıçta rastgele davranır. Fakat yemle sonuçlanan hareketler zaman içinde sıklaşır. Burada güvercine açıkça “ışık yanınca düğmeye bas” denmez; doğru davranış sonuçları aracılığıyla biçimlendirilir.</p>

<table>
  <thead>
    <tr>
      <th>Davranışçılık kavramı</th>
      <th>Pekiştirmeli öğrenmedeki karşılığı</th>
      <th>Örnek</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Organizma</td>
      <td>Ajan</td>
      <td>Güvercin veya oyun botu</td>
    </tr>
    <tr>
      <td>Çevre</td>
      <td>Ortam</td>
      <td>Skinner kutusu veya simülasyon</td>
    </tr>
    <tr>
      <td>Uyarıcı/durum</td>
      <td>State</td>
      <td>Işığın yanması veya oyundaki konum</td>
    </tr>
    <tr>
      <td>Davranış</td>
      <td>Action</td>
      <td>Gagalamak veya sağa gitmek</td>
    </tr>
    <tr>
      <td>Pekiştireç</td>
      <td>Reward</td>
      <td>Yem veya puan</td>
    </tr>
  </tbody>
</table>

<h2 id="ajanın-matematiksel-skinner-kutusu">Ajanın matematiksel Skinner kutusu</h2>

<p>Pekiştirmeli öğrenmede ajan, bulunduğu $s_t$ durumunda bir $a_t$ eylemi seçer. Ortam bunun ardından $r_{t+1}$ ödülünü ve yeni $s_{t+1}$ durumunu üretir. Ajanın amacı yalnızca anlık ödülü değil, gelecekte elde edebileceği ödülleri de büyütmektir:</p>

\[G_t = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \cdots\]

<p>Buradaki $\gamma$, gelecekteki ödüllerin ne kadar önemsendiğini belirleyen <strong>iskonto katsayısıdır</strong>. Değer sıfıra yakınsa ajan sabırsız, bire yakınsa uzun vadeli düşünmeye yatkındır. Güvercinin hemen verilen yeme daha hızlı tepki vermesi gibi, algoritmalar da yakın ödülleri daha güçlü değerlendirebilir.</p>

<p>Basit Q-learning güncellemesi bu davranış-sonuç bağını sayısallaştırır:</p>

\[Q(s,a) \leftarrow Q(s,a) + \alpha[r + \gamma \max_{a'}Q(s',a') - Q(s,a)]\]

<p>Formüldeki $Q(s,a)$, belirli durumda yapılan eylemin beklenen değeridir. $\alpha$ öğrenme hızını, köşeli parantez içindeki bölüm ise beklenti ile gerçekleşen sonuç arasındaki farkı temsil eder. Beklenenden iyi bir ödül gelirse eylemin değeri yükselir.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Tek bir deneyimden Q değerini günceller.
</span><span class="k">def</span> <span class="nf">q_guncelle</span><span class="p">(</span><span class="n">q</span><span class="p">,</span> <span class="n">durum</span><span class="p">,</span> <span class="n">eylem</span><span class="p">,</span> <span class="n">odul</span><span class="p">,</span> <span class="n">yeni_durum</span><span class="p">,</span>
               <span class="n">alpha</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">gamma</span><span class="o">=</span><span class="mf">0.95</span><span class="p">):</span>
    <span class="n">mevcut</span> <span class="o">=</span> <span class="n">q</span><span class="p">[</span><span class="n">durum</span><span class="p">][</span><span class="n">eylem</span><span class="p">]</span>
    <span class="n">en_iyi_gelecek</span> <span class="o">=</span> <span class="nf">max</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="n">yeni_durum</span><span class="p">])</span>
    <span class="n">hata</span> <span class="o">=</span> <span class="n">odul</span> <span class="o">+</span> <span class="n">gamma</span> <span class="o">*</span> <span class="n">en_iyi_gelecek</span> <span class="o">-</span> <span class="n">mevcut</span>
    <span class="n">q</span><span class="p">[</span><span class="n">durum</span><span class="p">][</span><span class="n">eylem</span><span class="p">]</span> <span class="o">+=</span> <span class="n">alpha</span> <span class="o">*</span> <span class="n">hata</span>
</code></pre></div></div>

<p>Bu kod, ajanın yaşadığı tek bir deneyimi hafızasındaki davranış değerine dönüştürür. Yem geldiyse ilgili “gagalama” seçeneği güçlenir; ceza geldiyse zayıflar.</p>

<h2 id="benzerlik-nerede-sona-eriyor">Benzerlik nerede sona eriyor?</h2>

<table>
  <thead>
    <tr>
      <th>Skinner’ın yaklaşımı</th>
      <th>Modern pekiştirmeli öğrenme</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Biyolojik organizmayı inceler</td>
      <td>Matematiksel ajanı optimize eder</td>
    </tr>
    <tr>
      <td>Deneyler fiziksel ve görece yavaştır</td>
      <td>Milyonlarca simülasyon çalıştırılabilir</td>
    </tr>
    <tr>
      <td>Pekiştireç biyolojik anlam taşıyabilir</td>
      <td>Ödül, tasarımcının belirlediği sayıdır</td>
    </tr>
    <tr>
      <td>Davranış gözlemle açıklanır</td>
      <td>İç değerler ve politikalar hesaplanır</td>
    </tr>
  </tbody>
</table>

<p>En önemli fark, yapay ajanın ödülü gerçekten “istememesidir”. Ödül onun için haz değil, optimizasyon sinyalidir. Üstelik yanlış tanımlanan bir ödül fonksiyonu beklenmedik davranışlar doğurabilir. Ajan oyunu kazanmak yerine sonsuz puan veren bir hatayı keşfedebilir. Bu durum, güvercinlerin rastlantısal ödüller sonucunda batıl davranışlar geliştirmesini hatırlatır.</p>

<p>Sonuç olarak pekiştirmeli öğrenme, davranışçılığın dijital bir kopyası değildir; fakat onun güçlü sezgisini taşır: Karmaşık davranışlar, eylemler ile sonuçları arasındaki geri bildirim döngüsünden doğabilir. Skinner’ın kutusu bugün sanal ortamlara dönüşmüş olsa da temel soru aynıdır: <strong>Hangi sonuç, hangi davranışı güçlendiriyor?</strong></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="pekiştirmeli öğrenme" /><category term="davranışçılık" /><category term="yapay zekâ" /><summary type="html"><![CDATA[Bir güvercinin doğru düğmeyi gagalamasıyla bir yapay zekâ ajanının oyunda puan toplaması arasında gerçekten bağlantı olabilir mi? Şaşırtıcı biçimde evet! B. F. Skinner’ın davranışçı psikoloji deneyleri ile modern pekiştirmeli öğrenme algoritmaları, zekânın iç dünyasından çok davranışların sonuçlarına odaklanan benzer bir mantık kullanır.]]></summary></entry></feed>