<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Damla ARPA on Medium]]></title>
        <description><![CDATA[Stories by Damla ARPA on Medium]]></description>
        <link>https://medium.com/@severustark?source=rss-b2a0870810fc------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*p0n70pXEAvarD6lxL5IHug.jpeg</url>
            <title>Stories by Damla ARPA on Medium</title>
            <link>https://medium.com/@severustark?source=rss-b2a0870810fc------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 06:59:59 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@severustark/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Ne ulan bu Database ?]]></title>
            <link>https://medium.com/@severustark/ne-ulan-bu-database-bdfc5bc4aba2?source=rss-b2a0870810fc------2</link>
            <guid isPermaLink="false">https://medium.com/p/bdfc5bc4aba2</guid>
            <category><![CDATA[postgresql]]></category>
            <category><![CDATA[cap-theorem]]></category>
            <category><![CDATA[database]]></category>
            <dc:creator><![CDATA[Damla ARPA]]></dc:creator>
            <pubDate>Sat, 28 Mar 2026 07:24:06 GMT</pubDate>
            <atom:updated>2026-03-28T10:33:07.371Z</atom:updated>
            <content:encoded><![CDATA[<p>Hepimizin duyduğu bu “Database” aslında nedir? Genelde verilen cevaplar “veri depolama” veya “verilerin tutulduğu teknolojiler” etrafında döner. Bu tanımlar yanlış değil, ancak eksiktir. Bir proje geliştirirken hangi veritabanını seçeceğinizi veya hangisinin en doğru çözüm olduğunu anlamak için daha profesyonel bir tanım yapmak gerekir:</p><p><strong>Database , </strong>veriyi yalnızca saklayan değil; onu düzenli, güvenilir, hızlı, erişilebilir ve yönetilebilir hale getiren bir sistemdir.</p><p>Peki, neden verileri basit metin dosyalarına yazmıyoruz ya da Excel bizim için yeterli gelmiyor?</p><p>Bu ayrım önemli. Çünkü şirketlerde asıl ihtiyaç veriyi bir yere koymak değildir. Asıl ihtiyaç şudur:</p><ul><li>Bu veriye birden fazla kişi aynı anda erişebilsin</li><li>Veri bozulmasın</li><li>Yanlışlıkla kaybolmasın</li><li>Gerektiğinde çok hızlı bulunsun</li><li>Sistem çöktüğünde geri getirilebilsin</li><li>İş büyüdükçe sistem de büyüyebilsin</li></ul><p>Bir örnek düşünelim.<br>Bir e-ticaret sisteminiz var. Aynı anda yüzlerce kullanıcı ürün satın alıyor. Ürün stoğu azalıyor, ödeme bilgileri işleniyor, sipariş geçmişi yazılıyor.</p><p>Bunu metin dosyalarıyla yönetmeye çalıştığınızda şu sorular çıkar:</p><ul><li>Aynı anda iki kişi aynı ürünü alırsa stok nasıl doğru kalacak?</li><li>Sistem çökmeden hemen önce yazılan veri kaybolursa ne olacak?</li><li>Bir müşterinin son 1 yıldaki siparişlerini nasıl hızlıca bulacaksınız?</li><li>Yanlışlıkla dosya bozulursa nasıl toparlanacaksınız?</li></ul><p>Database tam olarak bu sorunları çözmek için vardır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4v7Mm_my8P8N-EjnOLNrTw.png" /></figure><h3>1. Database ile DBMS aynı şey mi?</h3><p>Burada çok sık karıştırılan bir ayrım var. Günlük konuşmada “database kullanıyoruz” deriz. Ama çoğu zaman aslında database’i değil, <strong>DBMS</strong>’i kastediyoruz.</p><h4><strong>Database nedir?</strong></h4><p>Database, verinin kendisidir. Tablolar, kayıtlar, index’ler, şemalar, ilişki tanımları, metadata… Bunların tamamı verinin yapısal dünyasını oluşturur.</p><h4>DBMS nedir?</h4><p>DBMS, yani <strong>Database Management System</strong>, bu veriyi yöneten yazılımdır.</p><p>Örneğin:PostgreSQL, MySQL, Oracle, SQL Server, MongoDB bunların her biri birer <strong>DBMS</strong>’tir.</p><p>Yani basitçe:</p><ul><li><strong>Database = veri ve veri yapısı</strong></li><li><strong>DBMS = bu veriyi yöneten motor</strong></li></ul><p>Bunu bir kütüphane gibi düşünebilirsin:</p><ul><li>Kitapların kendisi = database</li><li>Kütüphane sistemi, raf düzeni, ödünç alma mekanizması = DBMS</li></ul><p>Şirketler yalnızca veri depolamaz; veriyi güvenli, denetlenebilir ve performanslı biçimde yönetmek zorundadır.</p><h3>2. Database’in kalbi</h3><p>Bir database’in en temel vaadi hız değildir.İlk vaadi <strong>güvenilirliktir</strong>.Çünkü iş dünyasında en pahalı hata çoğu zaman “yavaşlık” değil, <strong>yanlış veridir</strong>.</p><p>Bir kullanıcıya iki kez ücret yansıtılması, siparişin kaybolması, stok bilgisinin yanlış görünmesi, raporların hatalı çıkması… Bunların hepsi doğrudan iş kaybına dönüşür.</p><p>Bu yüzden ciddi database sistemleri bir güven modeli üzerine kuruludur. Bunu teknik dünyada genellikle <strong>ACID</strong> kavramıyla anlatırız.</p><h3>3. ACID</h3><h4>Atomicity</h4><p>Bir işlem ya tamamen olur ya da hiç olmaz.Örneğin banka transferi düşünün.Bir hesaptan para düşülüp diğerine eklenmeden sistem çökerse ne olacak?</p><p>Atomicity der ki:<br>Bu işlem yarım kalamaz. Ya iki taraf da tamamlanır, ya da hiçbir şey olmamış sayılır.Bu, teknik olmayan ekipler için de çok önemli bir kavramdır. Çünkü “yarım işlem” iş süreçlerinin en tehlikeli halidir.</p><h4>Consistency</h4><p>Veri her zaman tanımlanmış kurallara uygun kalmalıdır. Örneğin: olmayan bir kullanıcıya sipariş yazılamaz, eksi stok oluşmamalı, boş geçilmemesi gereken alanlar boş olamaz</p><p>Consistency, sistemin kendi kurallarına sadık kalmasını sağlar.</p><h4>Isolation</h4><p>Aynı anda çalışan işlemler birbirini bozmasın.Gerçek dünyada onlarca, yüzlerce işlem paralel yürür.Isolation olmazsa bir kullanıcının yaptığı değişikliği diğer işlem yarım halde görebilir. Bu da yanlış raporlara, bozuk hesaplamalara ve kaotik davranışlara yol açar.</p><h4>Durability</h4><p>“Kaydedildi” denmişse gerçekten kaydedilmiş olmalı Sistem kapansa, sunucu çökse, elektrik gitse bile commit edilmiş veri kaybolmamalı. Kurumsal dünyada bu madde kritik önemdedir. Çünkü kullanıcı “işlem başarılı” gördüğünde, bunun teknik olarak garanti altına alınmış olması gerekir. Kısacası ACID şunu söyler:</p><p><strong>Database, veriyi sadece tutmaz; ona güvenebilmeni sağlar.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JgGfCVwcwf0SyR_MLRalFw.png" /></figure><h3>4. Storage engine</h3><p>Birçoğumuz database ile SQL üzerinden konuşuruz ama SQL, görünen yüzdür. Perdenin arkasında asıl ağır işi yapan katman <strong>storage engine</strong>’dir.</p><p>Storage engine şu soruların cevabıdır:</p><ul><li>Veri diskte nasıl tutuluyor?</li><li>Nasıl bulunuyor?</li><li>Nasıl güncelleniyor?</li><li>Çökme sonrası nasıl geri yükleniyor?</li></ul><p>Bir database mimarı için burası çok kritiktir. Çünkü performans ve ölçeklenme davranışı büyük ölçüde burada belirlenir.</p><h4>B-Tree Yaklaşımı: Okuma Performansının Mimarı</h4><p>Birçok ilişkisel veritabanı sisteminin (PostgreSQL, MySQL, SQL Server) kalbinde <strong>B-Tree</strong> tabanlı yapılar yatar. Eğer sisteminizde kullanıcı kayıtları, sipariş geçmişi veya rapor sorguları gibi “bulma” (read) işlemleri yoğunsa, B-Tree en mantıklı tercihtir.</p><h4><strong>Peki, B-Tree neden okuma dostudur?</strong></h4><p>B-Tree, veriyi ve indeksleri <strong>dengeli bir ağaç yapısında</strong> tutar. Bu dengeli yapı sayesinde arama işlemleri <strong>logaritmik karmaşıklıkla</strong> (<em>O</em>(log<em>n</em>)) gerçekleştirilir. Yani veriniz bin kat büyüse bile, arama maliyeti sadece küçük bir miktar artar; sistem kontrolünüzden çıkmaz.</p><p>Daha da önemlisi, B-Tree doğrudan <strong>disk erişimi</strong> düşünülerek tasarlanmıştır:</p><ul><li><strong>Disk Dostu Organizasyon:</strong> Ağacın düğümleri (nodes), diskteki sayfa yapısına (page size) uygun biçimde organize edilir.</li><li><strong>Minimum Rastgele Okuma:</strong> Tek bir düğümde çok sayıda anahtar tutularak ağacın derinliği azaltılır. Böylece veriye ulaşmak için gereken “disk sıçraması” sayısı minimuma iner.</li></ul><p>Bu yapı şu senaryolarda rakipsizdir:</p><ul><li><strong>Tekil Kayıt Bulma:</strong> Milyonlarca satır arasından spesifik bir ID’ye anında ulaşmak.</li><li><strong>Aralık Sorguları (Range Scans):</strong> Belirli iki tarih arasındaki tüm siparişleri hızlıca listelemek.</li><li><strong>Sıralı Okuma:</strong> Verileri alfabetik veya kronolojik sırayla, ekstra bir sıralama maliyeti olmadan getirmek.</li></ul><p>Kısacası B-Tree; veriyi rastgele bir yığın olmaktan çıkarıp, her bir parçanın adresini milisaniyeler içinde bulabileceğiniz devasa ve düzenli bir kütüphaneye dönüştürür.</p><h4>LSM-Tree Yaklaşımı: Yazma Yoğun Sistemlerin Güç Kaynağı</h4><p>B-Tree okuma işlemlerinde parıldarken, bazı modern sistemler (Cassandra, RocksDB, InfluxDB) tamamen farklı bir felsefeye odaklanır: <strong>LSM-Tree (Log-Structured Merge-Tree).</strong> Eğer sisteminiz saniyede on binlerce log satırı üretiyorsa, sürekli IoT sensör verisi akıyorsa veya devasa event stream’leri (olay akışlarını) yönetiyorsanız, LSM-Tree sizin için en doğru mimaridir.</p><h4>Peki, LSM-Tree neden “yazma dostu” bir yapıdır?</h4><p>LSM-Tree’nin temel mantığı, veriyi diskteki ana yerine hemen yazmaya çalışmak yerine <strong>katmanlı bir yapı</strong> kullanmaktır:</p><ul><li><strong>Önce Bellek (MemTable):</strong> Gelen her yeni veri önce bellekte (RAM) çok hızlı bir şekilde tutulur. Bu, disk gecikmesini (latency) tamamen ortadan kaldırır.</li><li><strong>Sıralı Yazma (Sequential Write):</strong> Bellek dolduğunda, veriler disk üzerine büyük bloklar halinde ve <strong>sıralı</strong> şekilde aktarılır. Disk ve SSD seviyesinde “sıralı yazma”, “rastgele yazmaya” (random write) göre çok daha verimlidir. LSM-Tree, küçük ve dağınık yazma taleplerini devasa bir nehre dönüştürerek diske akıtır.</li><li><strong>Arka Planda Birleştirme (Compaction):</strong> Diske yazılan bu küçük dosyalar, arka planda periyodik olarak birleştirilir (Merge). Bu sayede veri hem temizlenir hem de okunabilirliği artırılır.</li></ul><p><strong>Bu yaklaşım şu senaryolarda rakipsizdir:</strong></p><ul><li><strong>Yüksek Hacimli Event Akışları:</strong> Sürekli gerçekleşen kullanıcı hareketlerini kaydetmek.</li><li><strong>IoT ve Sensör Verileri:</strong> Binlerce cihazdan gelen anlık metrikleri milisaniyeler içinde depolamak.</li><li><strong>Log Yönetimi:</strong> Sistemin her adımını izleyen devasa günlük kayıtlarını performans kaybı yaşamadan tutmak.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3wIIce-n16Mr3scRv6gvIg.png" /></figure><h3>5. WAL: “Kaydettim” sözünün teknik karşılığı</h3><p>Durability’den söz ettik. Peki bu nasıl sağlanıyor?</p><p>Burada karşımıza <strong>WAL — Write Ahead Log</strong> çıkar. Mantığı şudur:Asıl veri yapısını değiştirmeden önce, yapılacak değişiklik önce log’a yazılır.</p><p>Bunun iki büyük faydası vardır:</p><ol><li>Birincisi, sistem çökerse log yeniden oynatılarak hangi işlemlerin tamamlandığı anlaşılır.</li><li>İkincisi, sıralı log yazımı çoğu zaman rastgele disk güncellemelerinden daha verimlidir.</li></ol><p>Bir muhasebecinin önce işlem defterine not düşüp sonra ana kayıtları güncellemesi gibi düşünün. Ana tablo bozulsa bile işlem kaydı sayesinde ne yapıldığını biliyorsunuzdur.</p><p>İşte WAL, database’in hafızasını koruyan mekanizmalardan biridir.</p><h3>6. Index: Hızın görünen ama yanlış kullanıldığında pahalı olan kısmı</h3><p>Bir database konuşmasında index anlatmadan ilerlemek olmaz. Çünkü insanlar çoğu zaman index’i “performans düğmesi” gibi düşünüyor.Bir açıdan doğru. Ama eksik.</p><p>Klasik örnektir Index’i şöyle düşünelim:<br>Bir kitabın sonunda konu dizini varsa, istediğin kavramı hızlıca bulursun. Yoksa her sayfayı tek tek çevirmen gerekir.Bu örnek öğretici olsa da çok temel kalır. Bir adım daha derine inelim.</p><p><strong><em>Bir index, çoğu zaman verinin kendisini değil, veriye giden yolu tutar.</em></strong></p><p>Yani kabaca şunu yapar:</p><ul><li>belirli kolon değerlerini sıralı veya aranabilir bir yapıda tutar</li><li>her değerin yanında ilgili satıra ulaşmayı sağlayan bir referans taşır</li></ul><p>Bu referans bazı sistemlerde RowID, bazı sistemlerde primary key, bazı yapılarda doğrudan fiziksel sayfa adresi benzeri mantıklarla temsil edilir.</p><p>Bu yüzden index, “verinin kopyası” değil; çoğu zaman “veriye erişim haritası”dır.Ama burada kritik bir mimari gerçeği var:</p><p><strong>Index bedava değildir.</strong></p><p>Her index:</p><ul><li>ek disk alanı kullanır</li><li>write işlemlerini yavaşlatır</li><li>bakım yükü oluşturur</li></ul><p>Çünkü veri eklendiğinde, silindiğinde veya güncellendiğinde sadece tablo değil, index de güncellenir.</p><p>Bu yüzden iyi mimar şu hatayı yapmaz: “Her sütuna index atalım.”</p><p>Onun yerine şunu sorar:</p><ul><li>En çok hangi sorgular çalışıyor?</li><li>Filtrelenen kolonlar hangileri?</li><li>Sıralama nerede yapılıyor?</li><li>Join hangi alanlardan kuruluyor?</li></ul><p>Yani index, veriye değil; <strong>kullanım desenine</strong> göre tasarlanır.</p><h3>7. Query execution: Yazdığın SQL’in arka planda başına ne geliyor?</h3><p>Teknik ekip için en dönüştürücü kavramlardan biri budur.Çünkü çoğu geliştirici SQL’i metin gibi görür. Oysa database onu bir yürütme planına çevirir. Bir sorgu geldiğinde kabaca şu adımlar olur:</p><h4>Parsing</h4><p>Yazdığın SQL önce dil bilgisi açısından çözülür.</p><h4>Semantic analysis</h4><p>Tablo var mı, kolon var mı, veri tipleri uyumlu mu, yetkin var mı kontrol edilir.</p><h4>Optimization</h4><p>Aynı sonucu üreten farklı yollar arasından en düşük maliyetli olan seçilmeye çalışılır.</p><p>Bu aşamada veritabanı şunları düşünür:</p><ul><li>full scan mi yapayım?</li><li>index scan mi kullanayım?</li><li>hash join mi daha uygun?</li><li>merge join mi?</li><li>önce filtreleyip sonra mı join yapayım, yoksa tersi mi?</li></ul><h4>Execution</h4><p>Seçilen plan gerçekten çalıştırılır. İşte bu yüzden performans sorunu yaşayan bir sistemde mühendis yalnızca sorguya bakmaz;<strong>execution plan</strong>’a bakar.</p><h3>8. Normalizasyon ve denormalizasyon: Düzen ile hız arasındaki denge</h3><p>Veri modelleme tarafında da önemli bir denge vardır.</p><h4>Normalizasyon</h4><p>Amaç veri tekrarını azaltmak ve tutarlılığı artırmaktır.</p><p>Avantajı:</p><ul><li>daha temiz veri modeli</li><li>daha az tekrar</li><li>güncelleme anomalisinin azalması</li><li>kuralları merkezi yönetebilme</li></ul><p>Örneğin kullanıcı bilgilerini her sipariş satırına yazmak yerine ayrı kullanıcı tablosunda tutarsın.</p><h4>Denormalizasyon</h4><p>Bazen de hız için bilerek tekrar üretirsin.Özellikle analitik sistemlerde veya çok sık raporlanan yapılarda sürekli join yapmak maliyetli olabilir. O zaman bazı bilgileri bilinçli şekilde tekrar edersin.</p><p>Burada doğru soru “hangisi doğru?” değildir.<br>Doğru soru şudur:</p><p><strong>Bu sistem işlem odaklı mı, analiz odaklı mı?</strong></p><ul><li>OLTP sistemleri çoğu zaman daha normalize yapılardan fayda görür</li><li>OLAP sistemleri çoğu zaman daha denormalize yapılardan fayda görür</li></ul><p>Bu da yine mimari bir karar alanıdır.</p><h3>9. Replication ve sharding: Sistem büyümeye başladığında</h3><p>Tek bir veritabanı sunucusu her zaman yeterli olmayabilir. Sistem büyüdükçe iki temel strateji öne çıkar.</p><h4>Replication</h4><p>Aynı veriyi birden fazla kopyada tutarsın.</p><p>Genel mantık şöyledir:</p><ul><li>yazmalar primary node’a gider</li><li>okumalar replica’lara dağıtılabilir</li></ul><p>Bu yöntem özellikle okuma ağırlıklı sistemlerde çok etkilidir.</p><p>Ama yeni sorular doğurur:</p><ul><li>Replica ne kadar güncel?</li><li>Replication lag kabul edilebilir mi?</li><li>Primary çökerse failover nasıl olacak?</li></ul><h4>Sharding</h4><p>Burada aynı veriyi çoğaltmak yerine veriyi parçalarsın.Örneğin kullanıcıları user_id’ye göre farklı shard’lara dağıtabilirsin.</p><p>Bu sayede:</p><ul><li>yazma yükü bölünür</li><li>depolama yükü dağılır</li><li>tek node üzerindeki baskı azalır</li></ul><p>Ancak bedeli büyüktür:</p><ul><li>cross-shard sorgular zorlaşır</li><li>transaction yönetimi karmaşıklaşır</li><li>operasyonel maliyet ciddi biçimde artar</li></ul><p>Yani ölçekleme teknik bir başarı olduğu kadar, aynı zamanda karmaşıklık yönetimi problemidir.</p><h3>10. CAP teoremi: Dağıtık sistemlerde her şeyi aynı anda alamazsın</h3><p>Dağıtık sistemlerle (distributed systems) çalışan her mühendisin karşısına çıkan en temel kısıt <strong>CAP Teoremi</strong>’dir. Bu teorem, sadece teknik bir kısıtlama değil; aynı zamanda bir ürünün karakterini belirleyen stratejik bir karar mekanizmasıdır.</p><p><strong>CAP Teoremi bize şunu söyler:</strong> Bir dağıtık sistemde aşağıdaki üç özelliğin üçünü birden aynı anda, en yüksek seviyede garanti edemezsiniz:</p><ol><li><strong>Consistency (Tutarlılık):</strong> Her okuma işlemi, en son yazılan veriyi (veya hata mesajını) döndürmelidir. Yani her düğümde veri aynı anda güncel olmalıdır.</li><li><strong>Availability (Erişilebilirlik):</strong> Sistemdeki her istek, (başarılı veya başarısız) bir yanıt almalıdır. Sistem her zaman “açık” olmalıdır.</li><li><strong>Partition Tolerance (Bölünme Toleransı):</strong> Ağdaki düğümler arasındaki iletişim kopsa bile (network partition) sistem çalışmaya devam etmelidir.</li></ol><p><strong>Gerçek Hayatın Seçimi: AP mi, CP mi?</strong> Gerçek dünyada ağ bölünmeleri (network split) kaçınılmazdır. Bu yüzden <strong>Partition Tolerance (P)</strong> bir lüks değil, zorunluluktur. Bu durumda asıl seçim şuna döner:</p><ul><li><strong>CP (Consistency + Partition Tolerance):</strong> “Eğer ağda bir sorun varsa ve veriyi güncelleyemiyorsam, yanlış bilgi vermektense isteği reddederim (hata döndürürüm).” <em>Örnek:</em> <strong>Banka transfer sistemleri.</strong> Yanlış bakiye göstermektense, sistemin kısa süreliğine “hizmet dışı” kalması tercih edilir.</li><li><strong>AP (Availability + Partition Tolerance):</strong> “Ağda sorun olsa bile sistem çalışmaya devam etsin. Veri o an eski (tutarsız) olsa bile kullanıcıya bir cevap dönerim, ağ düzelince veriyi eşitlerim.” <em>Örnek:</em> <strong>Sosyal medya beğeni sayacı.</strong> Bir gönderinin beğeni sayısının birkaç saniye eski görünmesi kritik bir sorun yaratmaz; önemli olan kullanıcının uygulamayı kullanmaya devam edebilmesidir.</li></ul><p>Bir veritabanı mimarı için “en iyi” diye bir şey yoktur; “bu iş yükü için en doğru takas (trade-off)” vardır.</p><p>Popüler bir yemek teslimat uygulamasını ele alalım:</p><ol><li><strong>Sipariş ve Ödeme Kayıtları:</strong> Burada hata payı sıfır olmalıdır. Güçlü tutarlılık (Consistency) ve ACID desteği için <strong>PostgreSQL</strong> gibi ilişkisel (Relational) bir sistem şarttır.</li><li><strong>Sepet ve Oturum Yönetimi:</strong> Kullanıcının sepetindeki ürünler milisaniyeler içinde güncellenmelidir. Çok hızlı erişim için <strong>Redis</strong> gibi <em>In-memory</em> (bellek içi) sistemler tercih edilir.</li><li><strong>Kurye Lokasyon Takibi:</strong> Saniyede binlerce koordinat verisi akan bir senaryoda, yüksek yazma hızına sahip <strong>LSM-Tree</strong> tabanlı bir NoSQL yapısı veya zaman serisi (Time-series) veritabanı çok daha verimlidir.</li><li><strong>Arama ve Filtreleme:</strong> Binlerce restoran arasından “en yakın ve en ucuz” olanı bulmak için <strong>Elasticsearch</strong> gibi <em>Full-text search</em> motorları kullanılır.</li></ol><p>Bu yüzden iyi bir veritabanı mimarisi yalnızca teknik bilgiyle değil, <strong>iş önceliklerini (business priorities)</strong> doğru analiz ederek inşa edilir. Teknik kararlarınız, ürünün kullanıcıya verdiği sözün teknik karşılığıdır.</p><h3>11. Connection Pooling: Sistemin Görünmeyen Taşıyıcı Kolonu</h3><p>Şimdi çok pratik ama çoğu zaman göz ardı edilen bir konuya gelelim.Database’e bağlantı açmak ucuz bir işlem değildir. Her web isteği için yeni bağlantı açarsan sistem boğulur.İşte burada connection pool kullanılır.</p><p>Uygulama, önceden belirli sayıda bağlantı açar ve bunları havuzda bekletir.<br>İstek geldiğinde havuzdan bir bağlantı alınır, işlem yapılır, sonra geri bırakılır.</p><p>Bu küçük gibi görünen konu, gerçek sistem performansında çok büyüktür.</p><p>Yanlış pool ayarı:</p><ul><li>gereksiz beklemeye</li><li>database overload’ına</li><li>timeout’lara</li><li>ani performans düşüşlerine</li></ul><p>neden olabilir. Yani bazen sorun SQL’de değil, bağlantı yönetimindedir.</p><h4>Yazının başında sorduğumuz soruya dönelim.</h4><p>Database nedir? En sade haliyle: organize edilmiş, kalıcı ve yönetilebilir bir veri sistemidir. Ama bu tanım, bir veritabanının gerçekte ne yaptığını anlatmaya yetmez.</p><p>Daha doğru bir tanım şöyle kurulabilir:</p><p><strong><em>Database; veriyi güvenilir, tutarlı, hızlı ve ölçeklenebilir biçimde yönetmeyi sağlayan; eş zamanlılığı, bütünlüğü ve kalıcılığı garanti altına alan bir sistemdir.</em></strong></p><p>Bu yazı boyunca gördük ki bir veritabanı seçimi, yalnızca teknik bir tercih değildir. Hangi garantileri verdiğinizi, hangi trade-off’ları kabul ettiğinizi ve sistemin hangi koşullar altında nasıl davranacağını belirleyen bir mühendislik kararıdır.Doğru soruyu sormak her şeyden önce gelir: Bu sistem ne kadar tutarlı olmalı? Ne kadar hızlı yazmalı? Ağ bölünmesinde ne yapmalı? Veri ne zaman gerçekten “güvenli” sayılmalı?</p><p>Bu soruların cevabı sizi doğru veritabanına götürür. Teknolojiyi seçmek değil, problemi anlamak — işin özü budur.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bdfc5bc4aba2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Insider Aiweekend]]></title>
            <link>https://medium.com/@severustark/insider-aiweekend-2baef3d1f230?source=rss-b2a0870810fc------2</link>
            <guid isPermaLink="false">https://medium.com/p/2baef3d1f230</guid>
            <dc:creator><![CDATA[Damla ARPA]]></dc:creator>
            <pubDate>Mon, 17 Nov 2025 22:28:20 GMT</pubDate>
            <atom:updated>2025-11-18T07:49:40.053Z</atom:updated>
            <content:encoded><![CDATA[<p>Etkinlik boyunca teknik açıdan çok zengin bir içerik sunulması ile birlikte, benim için en değerli kısımlardan biri yazılım dünyasına yeni adım atmak isteyen pek çok kişinin aklındaki ortak sorunun cevabını bulmam oldu. Uzun süredir “Bir şeyler geliştiriyorum, kod yazıyorum, ortaya ürün çıkarıyorum ama çoğu zaman analizleri, hata kontrollerini hatta kod incelemelerini bile yapay zekâ ile tamamlıyorum. Peki bu doğru mu? Sektörde bunun yeri ne olacak?” sorusu beni hem düşündüren hem de zaman zaman rahatsız eden bir konuydu.</p><p>Hafta sonu boyunca eğitmenlerle yaptığımız sohbetler bu konuda zihnimi açtı. Özellikle Yusuf Bey’in yaklaşımı, mesleki tatminin yalnızca “kodu bizzat yazmakla” değil, insanlara değer sağlayan bir çıktıyı üretebilmekle mümkün olduğunu hatırlattı. Yapay zekânın artık yazılım geliştiricilerin bir parçası olduğu, asıl farkın ise güçlü bağlam kurabilme, problemi doğru tanımlayabilme ve doğru çıktıyı yönlendirebilme becerisinde ortaya çıktığı vurgulandı.</p><p>Bu bakış açısı, yazılımcı olma yolculuğumda beni kaygılandıran soruların yerini daha net bir farkındalığa bıraktı:<br><strong><em> “Değer kodu yazan elde değil, problemi doğru çözen zihindedir.”</em></strong></p><h3>1. Oturum: Mutlu Polatcan ile Yapay Zekâ Temelleri</h3><p>AI Weekend’in ilk oturumunda Mutlu Polatcan, günümüz yapay zekâ teknolojilerinin temelini oluşturan büyük dil modellerini (LLM) sade ve anlaşılır bir dille ele aldı. Sunumun ilk bölümü, LLM’lerin ne olduğu ve neden dönüştürücü bir teknoloji haline geldiğini anlamak için güçlü bir çerçeve sundu.</p><p>Polatcan, LLM’leri “Model aslında sadece bir sonraki token’ı tahmin ediyor. Ama bunu o kadar iyi yapıyor ki, bize anlamış gibi geliyor.” olarak tanımlıyor. Bu ifade, LLM’lerin insan benzeri bir anlayış sergiliyor gibi görünmesinin aslında devasa ölçekli istatistiksel tahminlerin bir sonucu olduğunu ortaya koyuyor.<br>GPT-3’ün 175 milyar, GPT-4’ün trilyon seviyesinde parametreye sahip olduğu düşünüldüğünde, neden bu kadar ‘akıcılık’ üretebildikleri daha da anlaşılır hale geliyor.</p><p>Bu mimarinin temelinde, 2017’de tanıtılan Transformer yapısı ve özellikle <strong>self-attention</strong> mekanizması bulunuyor. Polatcan’ın işaret ettiği gibi, self-attention modelin bir cümledeki tüm kelimeler arasındaki ilişkileri paralel olarak analiz etmesini sağlıyor ve bu yetenek uzun bağlamları anlama kapasitesinin özünü oluşturuyor.</p><h4>LLM’ler Nasıl Çalışır?</h4><p>Oturumun önemli bölümlerinden biri, LLM’lerin çalışma prensibini oluşturan <strong>next-token prediction</strong> mekanizmasının açıklanmasıydı. Model, verilen bir metinden sonra gelmesi en olası kelimeyi istatistiksel olarak tahmin ediyor. Bu tahmin süreci, gramer, bağlam, mantık ilişkileri ve uzun bağımlılıkların bir arada değerlendirilmesiyle gerçekleşiyor.</p><p>Bu gelişmiş yapının kalbinde, 2017’de tanıtılan Transformer mimarisi bulunuyor. Transformer’ın “self-attention” mekanizması, bir cümlenin içindeki her kelimenin diğer kelimelerle olan ilişkilerini çözümleyerek bağlamsal anlamı yakalıyor. Polatcan’ın verdiği örnekte olduğu gibi; <em>“The animal didn’t cross the street because it was tired”</em> cümlesindeki “it” kelimesinin “animal”ı işaret ettiğini doğru ilişkilendirmek, Transformer tabanlı modellerin güçlerinden biri.</p><h4>Token’lar: LLM’lerin Temel İşlem Birimi</h4><p>Token kavramı oturumda ayrıntılı şekilde ele alındı. Tokenlar her zaman bir kelimeye karşılık gelmeyebilir; kelime parçaları, ekler veya hatta boşluklar bile birer token olarak işlenebilir. Bu durum, özellikle Türkçe gibi eklemeli dillerde token sayısının artmasına ve maliyetin etkilenmesine neden olabiliyor.</p><p>Polatcan’ın gösterdiği tokenizer örneği (ör. <em>“AI Weekend’e hoş geldiniz”</em> cümlesinin 6 token’a bölünmesi) tokenizasyon mantığını somutlaştırdı ve eklemeli dillere özgü token dağılımının nasıl farklılaştığını görmemi sağladı.</p><p>Polatcan’ın gösterdiği tokenizer örneğinde, <em>“AI Weekend’e hoş geldiniz”</em> cümlesinin 6 token’a bölünmesi, tokenizasyonun pratikte nasıl çalıştığını netleştirdi.<br> Her modelin belirli bir <strong>context window</strong> sınırı olduğu için, token sayısı hem maliyet hem performans açısından kritik bir değişkendir. Örneğin GPT-4’ün 128K token’lık kontekst sınırı, aynı anda işleyebileceği metnin büyüklüğünü belirliyor.</p><h4>Embedding: Anlamın Matematiksel Temsili</h4><p>Token’ların sayısal vektörlere dönüştürülmesi, yapay zekânın metni “anlamlandırdığı” aşamayı oluşturuyor. Embedding’ler, her kelime veya cümlenin yüksek boyutlu bir uzayda temsil edilmesini sağlıyor. Mutlu Polatcan’ın örneğinde “king”, “queen”, “man” ve “woman” gibi kelimeler arasındaki ilişkiler vektör aritmetiğiyle açıklanıyor:</p><p><strong>king — man + woman ≈ queen</strong></p><p>Bu örnek, embedding uzayının yalnızca anlamı değil, kavramlar arasındaki ilişkileri de temsil edebildiğini gösteriyor. Bu nedenle embedding’ler semantik arama, öneri sistemleri, sınıflandırma ve kümeleme gibi birçok uygulamanın temelini oluşturuyor.</p><h4>Colab Üzerinde Yapılan Uygulama: Kavramların Somutlaşması</h4><p>Oturumun uygulamalı bölümünde, Google Colab üzerinde SentenceTransformers kullanılarak embedding oluşturma süreci gösterildi:</p><pre>from sentence_transformers import SentenceTransformer<br>model = SentenceTransformer(&#39;all-MiniLM-L6-v2&#39;)<br>sample_text = &quot;AI Weekend&#39;e Hoş Geldiniz!&quot;<br>embedding = model.encode(sample_text)</pre><p>Bu çalışmanın çıktısı olan 384 boyutlu embedding vektörü, metnin sayısal uzayda nasıl temsil edildiğini somut bir şekilde gösterdi. Mutlu Bey’in cosine similarity üzerinden benzerlik hesaplamasını açıklaması, semantik arama mantığını daha anlaşılır hale getirdi.</p><h4>LLM Pipeline’ı Bir Arada Düşünmek</h4><p>Mutlu Bey, bu üç temel bileşenin (token → embedding → transformer) nasıl birlikte çalıştığını basit bir akışla özetledi:</p><ol><li>Input metni verilir</li><li>Metin tokenize edilir</li><li>Tokenlar embedding modelinde vektörlere dönüştürülür</li><li>Transformer, self-attention ile ilişkileri çözer ve bağlamı anlar</li><li>Model, bir sonraki tokenı tahmin ederek çıktı üretir</li></ol><p>Bu süreç, bir LLM’in nasıl “düşündüğünü” anlamak için temel bir referans oluşturuyor.</p><h4>Gerçek Dünya Uygulamaları ve İyi Pratikler</h4><p>Oturumun son bölümünde, LLM’lerin günlük iş süreçlerindeki kullanım örnekleri paylaşıldı:</p><ul><li>7/24 müşteri destek botları</li><li>Otomatik biletlendirme ve kategorizasyon</li><li>İçerik üretimi ve kod geliştirme</li><li>Veri analizi ve duygu analizi</li><li>Semantik arama ve öneri sistemleri</li></ul><p>Ayrıca prompt engineering ve context management gibi pratik konulara da değinildi. Büyük işlerin küçük parçalara bölünmesi, net talimatlar verilmesi ve token maliyetinin kontrol edilmesi gibi noktalar, LLM’lerle çalışırken kritik öneme sahip.</p><h3>2. Oturum: Kadir Çubukçu ile Yapay Zekâya Doğru Soru Sorma Sanatı</h3><p>AI Weekend’in ikinci oturumunda Kadir Nuri Çubukçu, yapay zekâ modelleriyle etkili iletişim kurmanın yalnızca teknik bir beceri değil, aynı zamanda bilinçli bir yönlendirme gerektiren bir süreç olduğunu vurguladı. Modern LLM’ler her ne kadar yüksek kapasiteli modeller olarak konumlansa da, ürettikleri yanıtların niteliği büyük ölçüde kullanıcı tarafından sunulan bilgi setine ve bu bilginin nasıl yapılandırıldığına bağlıdır. Bu nedenle doğru soruyu sormak, AI ile çalışmanın en kritik bileşenlerinden biri hâline geliyor.</p><h4>AI Neden İyi Bir Cevap Veremiyor?</h4><p>Kadir Bey’in sunumunda altını çizdiği temel prensiplerden biri, LLM’lerin insan benzeri bir “anlama” kapasitesine sahip olmadığıydı. Bu modeller, bağlamı insan gibi yorumlamak yerine istatistiksel olasılık dağılımları üzerinden tahmin üretir. Dolayısıyla girdiler eksik veya belirsiz olduğunda, model en güvenli ve en sık rastlanan yanıt kalıplarına yönelir.</p><p>Bu durum, özellikle gerçek hayata yakın sorularda açıkça görülebilir. Örneğin, “Köpeğim hasta, ne yapmalıyım?” gibi yüzeysel bir soru, modelin genel tavsiye moduna geçmesine sebep olur. Çünkü elimizde yalnızca kategori düzeyinde bilgiler vardır; yaş, cins, semptom süresi, risk derecesi gibi karar destekleyen değişkenler eksiktir.</p><p>Bu örnek, LLM’lerle iletişimde bilginin kapsamı, doğruluğu ve netliğinin yanıt kalitesini doğrudan belirlediğini gösteriyor<br> <strong>Model, kullanıcı kadar bilgili değildir; yalnızca kullanıcı kadar bilgilidir.</strong></p><h4><strong>Prompt Tasarımında Yapısal Yaklaşım</strong></h4><p>Kadir Bey’in sunduğu yaklaşım, prompt tasarımını dört bileşenli bir mimari çerçevesine oturtuyor. Bu çerçeve, LLM’lerin tahmin mekanizmasını yönlendirmek ve belirsizlik düzeyini azaltmak için sistematik bir yöntem sunuyor.</p><h4>1) Bağlam (Context)</h4><p>Modelin içinde çalışacağı bilgi alanını belirler.Başarılı bağlam, konu hakkında gereksiz ayrıntı vermeden yönlendirici bilgiler sunar.<br>Bağlam, modelin problem uzayını daraltarak tahmin kalitesini artırır.</p><h4>2) İstek (Instruction)</h4><p>Modelden tam olarak ne yapılmasının istendiğini açıkça tarif etmek:<br>“Özetle”, “Karşılaştır”, “Tablo oluştur”, “Yeniden yaz” gibi net eylemler.</p><h4>3) Format (Output Structure)</h4><p>Çıktının hangi yapıda gelmesi gerektiği.<br>Özellikle teknik işlerde format belirlemek, çıktının kullanılabilirliğini doğrudan etkiliyor.</p><h4>4) Örnek (Example)</h4><p>Örnek, modelin üslup, kapsam ve beklenti seviyesini hizaladığı için kaliteyi belirleyen kritik bir unsurdur.<br>İyi bir örnek, modelin “hangi derinlikte ve hangi doğrultuda” yanıt üretmesi gerektiğini çok net şekilde gösterir.</p><p>Bu dört başlık birleştiğinde, modelin “tahmin etmesine” gerek kalmadan doğru davranış biçimi tanımlanmış oluyor.</p><h4>Geri Bildirim Döngüsü: Tek Cevapla Yetinmemek</h4><p>Oturumun öne çıkan bir diğer noktası, <strong>modelin ilk cevabını nihai kabul etmemenin</strong> önemiydi.<br>Kadir Bey’e göre en doğru çıktı çoğu zaman iteratif bir süreçle elde ediliyor.</p><p>Kullanılabilecek geri bildirim türlerinden bazıları:</p><ul><li><strong>Ton ayarı:</strong> “Daha profesyonel bir tonda yaz.”</li><li><strong>Uzunluk ayarı:</strong> “Bu kısmı iki kat daha detaylandır.”</li><li><strong>Format güncelleme:</strong> “Bunu JSON formatında ver.”</li><li><strong>Derinlik artırma:</strong> “Gerçek bir örnek ekle.”</li><li><strong>Basitleştirme:</strong> “Yeni başlayan biri için anlat.”</li></ul><p>Bu yaklaşım, LLM’lerle çalışırken kullanıcıyı <strong>aktif rol alan bir editör</strong> konumuna getiriyor.</p><h4>Bağlam Kayması ve Oturum Yönetimi</h4><p>Kadir Çubukçu’nun özellikle vurguladığı bir konu da şuydu:<br>Model, tek bir oturum içinde önceki mesajlarla ilişki kurmaya devam eder.</p><p>Bu bazen avantajdır, ancak konu değiştiğinde dezavantaj hâline gelir.<br>Örneğin hava sıcaklığı konuşulurken, aniden yemek tarifi sormak modelin yanlış bağlam kurmasına neden olabilir.</p><p>Bu yüzden:<br> <strong>Yeni konu = Yeni oturum</strong><br>ilkesi, daha kararlı ve hatasız sonuçların alınmasını sağlıyor.</p><h4>Genel Değerlendirme</h4><p>Bu oturum, yapay zekâ ile çalışmanın yalnızca teknolojiyi bilmekten ibaret olmadığını gösterdi.Doğru soruyu sormak, doğru yapıyı kurmak ve yanıtları iteratif şekilde geliştirmek; AI kullanımında en kritik yetkinlikler arasında.</p><p>Kadir Çubukçu’nun perspektifi, özellikle test, yazılım, ürün ve içerik ekipleri için uygulanabilir bir metodoloji sunuyor:<br>“Yapay zekâdan beklediğimiz verimi almak istiyorsak, önce doğru soruyu inşa etmeyi öğrenmeliyiz.”</p><h3>3. Oturum: Yusuf Tayman &amp; Eren Akyol :Prompt Refine Atölyesi</h3><p>AI Weekend’in üçüncü oturumu, teorik kavramları pratiğe taşıyarak LLM’lerle çalışma biçiminin nasıl sistematik bir yönteme dönüşmesi gerektiğini ortaya koydu. Yusuf Tayman ve Eren Akyol’a göre etkili bir prompt, yalnızca bir isteği ifade eden metin değildir; aynı zamanda modelin nasıl düşüneceğini, hangi sınırlar içinde hareket edeceğini ve nasıl bir çıktı üretmesi gerektiğini tanımlayan yapısal bir talimattır.</p><h4>Prompt Tasarımında 6 Kural: Teoriden Pratiğe</h4><p>Mutlu Bey’in ve Kadir Bey’in anlattığı teorik çerçeve, bu oturumda somut örneklerle uygulamaya dönüştürüldü. Yusuf Bey ve Eren Bet, iyi bir prompt’un şu altı temel prensibe dayanması gerektiğini gösterdi:</p><ol><li>Bağlam oluşturmak (Context)</li><li>Örnek göstermek (Example)</li><li>Format/çıktı kısıtları belirlemek (Constraints)</li><li>Görevi adımlara ayırmak (Steps)</li><li>Modelin önce düşünmesini istemek (Think-first prompting)</li><li>Modele rol tanımlamak (Role Assignment)</li></ol><p>Bu altı ilke, yalnızca daha doğru sonuçlara ulaşmayı değil, AI ile çalışırken tekrar edilebilir ve istikrarlı bir yöntem geliştirmeyi de mümkün kılıyor.</p><h4>1. Bağlam: Belirsiz Bir Soru, Belirsiz Bir Çıktı Üretir</h4><p>Oturumun ilk uygulaması, katılımcılardan rastgele bir konu seçip önce bağlam vermeden, ardından bağlam ekleyerek iki farklı çıktı üretmeleriydi.<br>Amaç, bağlamın çıktı kalitesini nasıl dramatik şekilde değiştirdiğini gözle görünür hâle getirmekti.</p><p>Örnek:</p><ul><li>“İklim değişikliği hakkında bilgi ver.”<br> → Model, genel tanımlar ve bilinen etkiler üzerinden ilerler.</li><li>“Son 10 yılda tropikal bölgelerde tarımsal üretimi etkileyen üç iklim değişikliği faktörünü örnekleriyle birlikte açıkla.”<br>→ Çıktı daha spesifik, ölçülebilir ve doğrulanabilir hâle gelir.</li></ul><p>Bu egzersiz, bağlamın yalnızca “ek bilgi” değil, modelin düşünce alanını belirleyen bir sınır olduğunu gösterdi.</p><h4>2. Örnek Vermek: Modelin ‘Seviyeyi’ Doğru Anlamasını Sağlamak</h4><p>Katılımcıların en sık yaptığı hatalardan biri, bir görevin nasıl ideal göründüğünü modele göstermemekti.<br>Eren Bey’in verdiği örnek, bu hatanın kod yazımı ve e-posta hazırlama gibi alanlarda ne kadar kritik olduğunu gösteriyordu:</p><p>“İyi bir çıktı istiyorsanız, modelin ‘iyi’ kavramını sizin nasıl tanımladığınızı bilmesi gerekir.”</p><p>Model, siz örnek vermedikçe doğruluk, tarz veya kalite standardınızı tahmin edemez.</p><h4>3. Format ve Kısıtlar: Modelin Serbestlik Alanını Yönetmek</h4><p>Format belirtilmediğinde LLM’lerin:</p><ul><li>gereksiz uzun çıktılar üretmesi,</li><li>yanlış veri yapıları kullanması,</li><li>istenmeyen tonlarda içerik oluşturması,</li><li>halüsinasyona daha açık hâle gelmesi</li></ul><p>çok doğal.</p><p>Bu nedenle katılımcılar, önce format tanımlanmamış hâliyle, ardından açık bir çıktı yapısı ekleyerek aynı görevi modele tekrar iletti. İki sonuç arasındaki fark, formatın model davranışını ne kadar belirgin biçimde yönlendirdiğini ortaya koydu.</p><p>Örneğin:</p><p>“Bir portföy sitesi tasarla”<br> → Rastgele renkler, rastgele layout, değişken kalite.</p><p>“Tek sayfalık, modern, sunset renk paletli bir portföy tasarla. Bölümler: Hero, About, Skills, Projects, Contact. Navigasyon sticky olmalı.”<br> → Tutarlı, öngörülebilir, yeniden kullanılabilir bir çıktı.</p><h4>4. Karmaşık Görevleri Adımlara Bölmek: Hata Tespitinin En Etkili Yolu</h4><p>Modelden karmaşık bir iş istenirken (ör. site tasarımı, rapor analizi, veri yorumlama) tek bir paragraf hâlinde komut verilmesi, modelin tüm adımları aynı anda yürütmeye çalışmasına neden oluyor.<br> Bu da:</p><ul><li>adımların karışmasına,</li><li>mantık hatalarına,</li><li>eksik veri kullanımına<br> yol açıyor.</li></ul><p>Yusuf Tayman’ın deneyimle aktardığı önemli nokta şuydu:</p><p>“Görevi adımlara böldüğünüzde, hatanın hangi adımda üretildiğini görebilir ve yalnızca o adımı düzelterek ilerleyebilirsiniz.”</p><p>Bu yaklaşım, AI ile çalışan teknik ekiplerin hata ayıklama süreçlerinde zaman kazanmalarını sağlıyor.</p><h4>5. Modelden Önce “Düşünmesini” İstemek</h4><p>“Think before you answer” yaklaşımı, özellikle analiz, değerlendirme ve problem çözme gerektiren görevlerde modelin performansını belirgin biçimde iyileştiriyor. Bu yöntemle model, doğrudan çıktı üretmek yerine önce içsel bir akıl yürütme süreci gerçekleştiriyor.</p><p>Bu ek düşünme aşaması, yanıtların:</p><ul><li>daha yapılandırılmış,</li><li>tutarlılığı yüksek,</li><li>hata oranı düşük</li></ul><p>bir formda üretilmesini sağlıyor.</p><p>Uygulamalı örneklerde, bu tekniğin özellikle veri analizi, karar destek sistemleri ve çok adımlı mantık gerektiren görevlerde daha güvenilir sonuçlar ortaya çıkardığı gözlemlendi.</p><h4>6. Modele Rol Tanımlamak: Beklentiyi Netleştirmek</h4><p>Oturumda üzerinde durulan son ilke, <strong>LLM’in rolünü belirlemekti.</strong><br> “Bir bilim öğretmeni gibi açıkla”,<br> “Deneyimli bir yazılım mühendisi gibi düşün”,<br> “Profesyonel bir UX tasarımcısı gibi geri bildirim ver”</p><p>gibi ifadeler, modelin hem tonu hem de detay düzeyini hedeflenen standarda yaklaştırıyor.</p><p>Bu yöntem, özellikle içerik üretimi, eğitim amaçları ve kod geliştirme süreçlerinde çıktı kalitesini doğrudan etkiliyor.</p><h4>Gerçek Zamanlı Uygulamalar ve Karşılaştırmalar</h4><p>Oturum boyunca katılımcılar:</p><ul><li>yemek tarifi oluşturma,</li><li>öğrenme planı çıkarma,</li><li>kod yazdırma,</li><li>kişisel web sitesi tasarlatma</li></ul><p>gibi farklı pratik görevlerde “before–after” karşılaştırmaları yaptı.<br>Her uygulama, modelin <strong>belirsizlikte çabaladığını</strong>, <strong>yapı verildiğinde ise beklenenden çok daha iyi performans sergilediğini</strong> gösterdi.</p><h4>Sonuç: Prompt, Bir Komut Değil Bir Tasarım Süreci</h4><p>Bu oturumun genel çerçevesi, prompt yazmanın tek seferlik bir talep değil; bir tasarım süreci olduğu yönündeydi.</p><p>Yusuf Tayman ve Eren Akyol’un aktardığı perspektif şu noktada birleşiyor:</p><p>İyi bir prompt, net bir hedefi olan, sınırları tanımlanmış, adımları belirli ve örneklerle desteklenmiş bir çalışma talimatıdır.</p><p>Böyle bir yapı sayesinde LLM’ler:</p><ul><li>daha az hata yapıyor,</li><li>daha öngörülebilir sonuç üretiyor,</li><li>iterasyon süreçleri daha az zaman alıyor,</li><li>çıktı kalitesi daha yüksek oluyor.</li></ul><p>Bu oturum, katılımcıların yapay zekâyı sadece kullanmakla kalmayıp, onu etkili şekilde yönlendirebilecek bir çalışma alışkanlığı edinmesini sağladı.</p><h3><strong>4. Oturum: </strong>Murat Polatcan : <strong>Kendi GPT’ni Tasarla</strong></h3><p>AI Weekend’in dördüncü oturumu, yapay zekâyı “kullanıcı” seviyesinden çıkarıp “üretkenlik mimarı” seviyesine taşıyan ayrı bir bakış açısı sunuyordu. Murat Polatcan, Custom GPT’lerin yalnızca ChatGPT’nin kişiselleştirilmiş sürümleri olmadığını; aslında bireyin kendi çalışma biçimini kodlaştıran, şirket süreçlerini modülerleştiren ve ekip içi uzmanlığı merkezileştiren yeni bir araç sınıfı olduğunu vurguladı.</p><p>Modern LLM modellerinin en büyük dezavantajlarından biri, “çok fazla şey bilmesi” nedeniyle dikkatin kolayca dağılabilmesi. Polatcan’ın ifadesiyle, standart ChatGPT geniş bilgi uzayı nedeniyle kimi zaman “fazla özgür” davranıyor. Custom GPT yaklaşımı ise modele adeta <strong>at gözlüğü</strong> takarak onu yalnızca belirli bir alanda çalışmaya zorluyor. Böylece hem tutarlılık hem de hız radikal şekilde artıyor.</p><h4>Neden Custom GPT? Sadece Özelleştirme Değil, Operasyonel Kararlılık</h4><p>Mutlu Bey’in altını çizdiği temel faydalar üç başlıkta toplanabilir:</p><ul><li><strong>Tutarlılık:</strong><br>Birden fazla departmanın aynı karar süreçlerini takip etmesi gerekiyorsa, Custom GPT bu standartları otomatik olarak uygular. Böylece her kullanıcı — deneyimi ne olursa olsun — aynı kalite seviyesinde çıktı alır.</li><li><strong>Verimlilik:</strong><br> Modelin odak alanı daraldıkça yanıt süresi kısalır. Gereksiz bilgi aramaları, bağlam hataları ve halüsinasyonlar minimize edilir. Gerçek dünyada bu, %30 ile %70 arasında zaman kazancı anlamına geliyor.</li><li><strong>Paylaşılabilir uzmanlık:</strong><br> Bir şirketin ya da ekip liderinin bilgi birikimi, bir Custom GPT’ye gömüldüğünde, herkes aynı uzmanlık seviyesine erişebilir. Bu, operasyonel bilgi kaybını ortadan kaldıran ciddi bir avantaj.</li></ul><h4>“Model Çok Bildiği İçin Hata Yapıyor” — Paradoksun Çözümü</h4><p>Oturumda en çok ilgi çeken bölümlerden biri, Mutlu Bey’in büyük modellerin neden hata üretebildiğine dair açıklamasıydı.</p><p>“Model aslında çok şey bildiği için zihni dağılıyor. Biz ona ‘sadece buraya bakacaksın’ demediğimiz sürece odaktan sapması doğal.”</p><p>Bu nedenle Custom GPT, modeli sınırlandırarak onu belirli bir görevde uzman hâline getiriyor. Örneğin yalnızca <strong>yemek tarifi</strong> veren bir GPT, başka bir konuya sapmadan hızlı ve doğru çalışıyor. Aynı model geniş bilgi alanında çalıştığında ise tahmin yüzeyi büyüdüğü için hataya daha açık hale geliyor.</p><h4>Teknik Derinlik: GPT Tasarlamanın Gerçek Yapı Taşları</h4><p>Mutlu Bey sunumunda GPT tasarımının 7 temel aşamasını ele aldı :</p><ul><li><strong>Purpose (Amaç):</strong><br>GPT’nin tek bir alana yoğunlaşması şart. “Her şeyi bilen” bir GPT her zaman düşük performans gösterir.</li><li><strong>Instruction Set (Talimat Kurgusu):</strong><br>Modelin nasıl davranacağını belirleyen en kritik katman. Emir kipindeki net talimatların halüsinasyonu azalttığı vurgulandı.</li><li><strong>Knowledge Base (Bilgi Tabanı):</strong><br>Doğru yapılandırılmış PDF, Excel ya da kod dosyalarıyla GPT tamamen şirkete özel bir asistana dönüşebiliyor.</li><li><strong>Actions (Aksiyonlar):</strong><br>Web taraması, görsel üretimi veya Python yorumlayıcısı gibi ek yetenekler, GPT’yi basit bir asistan olmaktan çıkarıp aktif bir iş yürütücüsüne dönüştürüyor.</li><li><strong>Testing &amp; Refinement (Test ve İyileştirme):</strong><br>Her GPT ilk denemede kusursuz olmaz; asıl ürün test sürecinde ortaya çıkar.</li></ul><h4>Gerçek Dünya Etkisi: 80% Daha Hızlı Müşteri Hizmetleri</h4><p>Sunum boyunca sıkça geçen yoğun istatistikler, Custom GPT yaklaşımının pratik değerini net biçimde ortaya koydu:</p><ul><li>Müşteri hizmetlerinde <strong>%80 daha hızlı yanıt süresi</strong></li><li>Tekrarlayan görevlerde <strong>%30–70 zaman tasarrufu</strong></li><li>Kod incelemeleri ve raporlama süreçlerinde <strong>dramatik otomasyon verimleri</strong></li></ul><p>Bu veriler, Custom GPT’yi yalnızca bir “kişiselleştirme” aracı değil, işletme verimliliğini yeniden tanımlayan bir yapı olarak konumlandırıyor.</p><h4>Sonuç: Yapay Zekâyı Kullanmanın Ötesine Geçip Kendi İş Akışını Tasarlamak</h4><p>Bu oturum, AI çağında gerçek farkın yalnızca yapay zekâ araçlarını kullanmaktan değil, bu araçların nasıl çalışacağına dair kendi metodolojisini oluşturabilmekten geçtiğini ortaya koydu. Custom GPT’ler, bireylerin ve kurumların çalışma biçimini modele aktararak süreçleri daha tutarlı, tekrarlanabilir ve ölçeklenebilir hâle getiriyor. Böylece yapay zekâ, sadece destekleyici bir araç olmaktan çıkıp, iş akışlarının merkezine yerleşen stratejik bir bileşene dönüşüyor.</p><h3>5. Oturum: Damla Karakoyun &amp; Muhammed Çelebi ile Multimodal AI — Görsel ve Video Üretimde Yaratıcılığı Yeniden Tanımlamak</h3><p>AI Weekend’in son oturumu, Damla Karakoyun ve Muhammed Çelebi’nin yürüttüğü multimodal AI atölyesiydi. Gün boyunca işlenen teknik içeriklerin ardından bu oturum, yapay zekânın yaratıcılık tarafını ön plana çıkararak oldukça keyifli bir atmosfer yarattı. Farklı görsel ve video modellerinin nasıl çalıştığını yalnızca teorik olarak anlatmakla kalmadı; katılımcıların bu araçları gerçek zamanlı olarak deneyimleyebileceği bir ortam oluşturdu. Böylece herkes, yapay zekânın prodüksiyon süreçlerini nasıl hızlandırdığını ve basit bir fikrin nasıl saniyeler içinde görsele ya da videoya dönüştüğünü birebir gözlemleme fırsatı bulduk.</p><h4>AI ile Görsel ve Video Üretimi: İşçilikten Yaratıcılığa Geçiş</h4><p>Muhammed Bey’in paylaştığı örneklerden birinde, geleneksel yöntemlerle haftalar sürebilecek bir süper kahraman temalı şirket içi projenin, AI araçları kullanılarak çok daha kısa sürede tamamlandığı anlatıldı. Karakter tasarımları Midjourney ile oluşturulmuş, Wan veya Veo 3 üzerinden kısa video sekansları üretilmiş, ardından minimal post-prodüksiyon işlemleriylekip içinde kullanılabilecek bir görsel-video çalışmasına dönüştürülmüş.Bu süreç, yapay zekânın görsel üretim ve video prodüksiyonundaki hız kazandırıcı etkisini net şekilde göstermesi açısından güzel bir örnekti.</p><p>Bu örnek, üretken yapay zekânın teknik iş yükünü azaltarak yaratıcı süreci hızlandırma potansiyelini net bir şekilde gösteriyordu. Damla Hanım, bu noktada AI tabanlı görsel ve video üretiminin deneme-yanılma temelli bir çalışma biçimi olduğunun altını çizdi. Tek seferde “ideal” sonuca ulaşmanın her zaman mümkün olmadığını; modelleri test etmek, farklı çıktıları karşılaştırmak ve gerektiğinde yeniden üretim yapmak gerektiğini belirtti.</p><p>Bu çalışma biçimi, özellikle fal.ai’nin sunduğu eş zamanlı model karşılaştırma imkânı sayesinde son derece pratik ve hızlı bir metodolojiye dönüşüyor.</p><h4>Multimodal Araçların Gücü: Tek Prompt, Çok Sonuç</h4><p>Oturumun son bölümünde fal.ai’nin sunduğu multimodal çalışma yapısı üzerinden, üretken yapay zekânın yaratıcı süreçlerde nasıl bir altyapıya dönüştüğü ele alındı. Aynı fikrin farklı modellerde eş zamanlı test edilebilmesi, katılımcılara görsel stil, kalite ve kompozisyon açısından hızlı bir karşılaştırma imkânı sağladı. Bununla birlikte görsel, video, efekt ve düzenleme adımlarının tek bir akış içinde birleştirilebilmesi; 3D varlık, avatar, kısa video veya sahne gibi farklı çıktı türlerinin aynı arayüzden yönetilmesi üretim sürecini oldukça bütüncül bir yapıya taşıdı.</p><p>Model maliyetlerini, üretim hızlarını ve çıktı kalitesini gerçek zamanlı kıyaslama olanağı ise bu yaklaşımın pratikte ne kadar güçlü olabileceğini gösterdi. Tüm bu özellikler bir araya geldiğinde, üretken yapay zekânın artık yalnızca yaratıcı bir araç değil, ekiplerin üretim süreçlerini taşıyabileceği <strong>tam teşekküllü bir prodüksiyon altyapısı</strong> hâline geldiği net bir şekilde ortaya çıktı.</p><h4>Sonuç: Günü Eğlenceyle Birleştiren Yaratıcı Bir Kapanış</h4><p>Muhammed Bey ve Damla Hanım’ın atölyesi, AI Weekend’in e en eğlenceli bölümü oldu.<br>Günün sonunda hepimiz yalnızca yeni araçlar öğrenmiş değil; aynı zamanda yapay zekâ ile üretmenin ne kadar hızlı, esnek ve keyifli olabileceğini birebir deneyimlemiş olduk. Aşağıdaki görsel, atölye sırasında benim de AI ile ürettiğim çalışmalardan birisi :)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IuZR9sIndhSEwTxVB94mpQ.png" /></figure><h3>2. Gün — 1. Oturum: Mutlu Polatcan ile Otomasyonun Temelleri</h3><p>AI Weekend’in ikinci gününün açılışı, Mutlu Bey’in LLM tabanlı otomasyon mimarisine dair kapsamlı sunumuyla yapıldı. İlk gün modelleri anlamaya odaklanan katılımcılar, bu oturumla birlikte yapay zekânın iş akışlarında nasıl konumlandırılması gerektiğini, hangi metodolojinin izlenmesi gerektiğini ve otomasyon tasarımında hangi yapı taşlarının kritik olduğunu net bir şekilde görmüş oldu.</p><p>Mutlu Bey’e göre LLM çağında otomasyon; yalnızca tekrarlayan adımları mekanik olarak devreden çıkaran bir süreç değil, bağlamı anlayabilen, karar alabilen ve veriyi işleyerek eyleme dönüştürebilen akıllı iş akışlarının tasarlanmasıdır.</p><h4>1. n8n ile Fonksiyonel Otomasyonun Yapı Taşları</h4><p>Oturumun ilk bölümünde n8n’in görsel iş akışı mimarisi ele alındı. Mutlu Bey, platformun yalnızca uygulamalar arası bağlantı sağlayan bir araç olmadığını; doğru LLM entegrasyonuyla birlikte karar mekanizması içeren bir orkestrasyon katmanına dönüştüğünü vurguladı.</p><p>Katılımcılar şu temel kavramlar üzerinden ilerledi:</p><ul><li><strong>Trigger:</strong> Süreci başlatan tetikleyici</li><li><strong>Nodes:</strong> İş mantığını oluşturan bileşenler</li><li><strong>Connections:</strong> Veri akışını yöneten dinamik bağlar</li></ul><p>Bu yapı sayesinde e-posta sınıflandırmadan raporlama süreçlerine, doküman işlemekten içerik dönüştürmeye kadar pek çok senaryo birkaç node ile tanımlanabilir hâle geliyor.</p><h4>2. LLM’lerin Otomasyona Eklediği Değer: Karar Mekanizması</h4><p>Mutlu Bey, otomasyonun LLM öncesi ve sonrası arasındaki temel farkları net bir şekilde ortaya koydu. LLM öncesinde otomasyon büyük ölçüde kural tabanlı sistemlere dayanıyordu; süreçler yalnızca tanımlı koşullar gerçekleştiğinde ilerleyebiliyor ve çoğunlukla yapılandırılmış veriyle sınırlı kalıyordu. Esneklik düşük, yorumlama kapasitesi ise oldukça sınırlıydı.</p><p>LLM’lerle birlikte bu yapı önemli ölçüde değişti. Modeller artık:</p><ul><li>bağlamı anlama,</li><li>yapılandırılmamış veriyi işleme,</li><li>sınıflandırma ve özetleme,</li><li>analiz yapma,</li><li>gerektiğinde öneri üretme</li></ul><p>gibi yeteneklerle otomasyona yeni bir katman ekleyebiliyor.</p><p>Bu gelişim, otomasyon kavramının artık yalnızca “uygulamaları birbirine bağlamak” anlamına gelmediğini; karmaşık girdileri değerlendirebilen ve buna göre karar üretebilen sistemlerin tasarlanabileceğini gösteriyor.</p><h4>3. LLM Node Tasarımında Best Practices</h4><p>Bu bölümü daha profesyonel hâle getirmek için özellikle derinleştirdim.<br> şağıda Mutlu Bey’in vurguladığı LLM node tasarımı için en kritik best practice’ler yer alıyor:</p><h4>a) Görev Tanımı (Task Definition) Kesin Olmalı</h4><ul><li>Belirsiz komut → belirsiz çıktı</li><li>İşlevi tanımlayan kısa ve direkt talimatlar</li></ul><h4>b) Çıktı Formatı Mutlaka Yapılandırılmış Olmalı</h4><p>LLM tabanlı otomasyonun en sık hata verdiği nokta budur.<br> Önerilen format:</p><ul><li>JSON</li><li>Markdown tablo</li><li>Liste yapılandırmaları</li></ul><h4>c) Prompta Aşırı Serbestlik Verilmemeli</h4><ul><li>“Açıkla” yerine “Şu formatta açıkla”</li><li>“Bir özet oluştur” yerine “200 kelimelik, 3 başlıklı özet oluştur”</li></ul><h4>d) Node İçinde Rol Ataması Yapılmalı</h4><p>“Profesyonel bir sınıflandırma aracı gibi davran.”<br> LLM’in tonunu ve mantığını net biçimde sabitler.</p><h4>e) Hata Yönetimi (Error Handling) Stratejisi Zorunlu</h4><ul><li>Boş çıktı kontrolleri</li><li>Retry mekanizmaları</li><li>Alternatif yol (fallback) tasarımı</li></ul><h4>f) Input Kontrolü</h4><p>Gereksiz uzun girdiler hem maliyeti artırır hem de model performansını düşürür.<br> “Prompt sanitization” bu nedenle kritik bir adımdır.</p><h4>4. Sık Kullanılan Otomasyon Örüntüleri</h4><p>Mutlu Bey, gerçek üretim ortamlarında sık karşılaşılan otomasyon örüntülerini metodolojik bir çerçevede sundu:</p><h4>a) Sınıflandırma → Yönlendirme</h4><p>Metin, e-posta veya destek taleplerinin LLM ile kategorize edilip ilgili departmana aktarılması.</p><h4>b)İçerik Üretimi → Platform Optimizasyonu</h4><p>Tek bir içerikten sosyal medya için farklı formatlarda otomatik varyasyon oluşturma.</p><h4>c)Doküman İşleme → Veri Yapılandırma</h4><p>Sözleşme, CV, fatura, akademik makale gibi belgelerden veri çıkarma ve tabloya dönüştürme.</p><h4>d) Özetleme → Raporlama</h4><p>Toplu verilerden günlük/haftalık rapor oluşturma.</p><h4>e) Soru Cevap → Bilgi Tabanı Araması</h4><p>Şirket içi dokümanlardan beslenen akıllı yanıt sistemleri tasarlama.</p><p>Her örnek, LLM + n8n entegrasyonunun gerçek hayattaki potansiyelini gösteren teknik bir çerçeve sundu.</p><h4>5. Maliyet, Performans ve Doğruluk Arasında Optimum Dengeyi Kurmak</h4><p>Mutlu Bey’e göre LLM tabanlı otomasyonun verimli olabilmesi için üç unsurun dengede olması gerekir:</p><h4>a) Performans</h4><p>Görev karmaşıklığına göre doğru modelin seçilmesi.</p><h4>b) Maliyet</h4><ul><li>Basit görevler: GPT-3.5 / Lokal modeller</li><li>Karmaşık görevler: GPT-4 / Claude 3</li><li>Ağır işleyişler için batching ve caching teknikleri</li></ul><h4>c) Doğruluk</h4><ul><li>Model çıktılarını doğrulayan kontrol node’ları</li><li>JSON-parsing temelli validasyon</li><li>Ölçekli sistemlerde A/B test yaklaşımı</li></ul><p>Bu yapı, üretim ortamında otomasyonun kararlı ve sürdürülebilir olmasını sağlar.</p><h4>Sonuç: LLM Destekli Otomasyon Artık Bir Yetkinlik Alanı</h4><p>Oturumun sonunda ortaya çıkan tablo çok netti:<br> LLM’lerle geliştirilen otomasyon sistemleri, klasik otomasyon anlayışından farklı bir disiplin oluşturuyor. Süreçler yalnızca otomatikleşmiyor; <strong>yapılandırılıyor, yönetiliyor ve karar verebilir hâle geliyor.</strong></p><p>Mutlu Bey’in sunduğu metodoloji, katılımcılara yalnızca “bir otomasyon kurmayı” değil, sürdürülebilir ve profesyonel bir <strong>LLM otomasyon stratejisi</strong> geliştirmeyi öğretti.</p><h3>2. Gün — 2.Oturum: Yusuf Tayman &amp; Eren Akyol ile Uygulamalı Otomasyon Atölyesi LLM Tabanlı İş Akışları</h3><p>İkinci günün pratik kısmında Yusuf Tayman ve Eren Akyol, LLM tabanlı otomasyonun gerçek hayatta nasıl kullanılabileceğini n8n üzerinde adım adım uygulayarak anlattı. Bu bölüm, özellikle iş akışı tasarımına yeni başlayanlar için kavramları somutlaştıran, teknik detayları ise uygulanabilir hâle getiren bir çalışma ortamı oluşturdu.</p><p>Amaç; tek bir LLM çağrısıyla sınırlı kalmayan, birden fazla veriyi toparlayıp yorumlayan ve farklı platformlara aksiyon üreten uçtan uca akıllı süreçler kurmaktı.</p><h4>1. Slack Otomasyonu: Mesajları İşleyip Karara Bağlayan Akış</h4><p>Atölyenin ilk senaryosu Slack üzerinden yapıldı.<br> Katılımcılar, Slack’ten gelen mesajları:</p><ul><li>çekip,</li><li>LLM ile analiz edip,</li><li>ilgili kanala yönlendiren</li></ul><p>bir iş akışı tasarladı.</p><p>Bu akış sayesinde LLM:</p><ul><li>mesajı yorumladı,</li><li>konusuna göre sınıflandırdı,</li><li>formatlı bir çıktı üretti,</li><li>Slack’e geri gönderdi.</li></ul><p>Bu örnek, anlık iletişimde LLM’in yalnızca üretim için değil, karar destek unsuru olarak da kullanılabileceğini gösterdi.</p><h4>2. Form → GPT → Mail Akışı: Dinamik Yanıt Üreten Bir Sistem</h4><p>Bir diğer uygulamada, bir formdan gelen verilerin GPT tarafından işlenip otomatik olarak e-posta şeklinde iletildiği bir yapı kuruldu.<br> Bu akış şu adımlardan oluşuyordu:</p><ol><li>Form verisinin n8n’e alınması</li><li>LLM’in veriyi analiz edip anlamlı bir yanıt oluşturması</li><li>Çıktının belirlenen formatta bir e-postaya dönüştürülmesi</li><li>Gmail node’u ile otomatik gönderim</li></ol><p>Bu senaryo, müşteri talepleri ya da şirket içi formlar gibi tekrar eden süreçlerin LLM ile kişiselleştirilmiş ve tutarlı bir akış hâline gelebileceğini gösterdi.</p><h4>3. API → GPT → Slack Akışı: Çoklu Veri Kaynağını Tek Çıktıya Dönüştürme</h4><p>Atölyenin en öğretici bölümlerinden biri, birden fazla API kaynağından veri toplayıp bunları GPT ile tek bir bağlam altında birleştiren akıştı.</p><p>Katılımcılar:</p><ul><li>finans verisi,</li><li>haber akışı,</li><li>hava durumu,</li><li>ilginç bir bilgi (ör. cat fact)</li></ul><p>gibi farklı API çağrılarını tek bir Merge node’unda topladı.</p><p>Ardından bu veriler GPT’ye gönderildi ve model:</p><ul><li>tüm veriyi analiz etti,</li><li>özet bir metin oluşturdu,</li><li>Slack’e gönderdi.</li></ul><p>Bu uygulama, LLM’in çoklu veri kaynağını tek bir anlamlı çıktıya dönüştürmekte ne kadar etkili olduğunu gösterdi.</p><h4>4. Workflow Görselleri: Tasarım Mantığının Görsel Karşılığı</h4><p>Eğitim boyunca kullanılan akışlar — paylaştığın görsellerdeki gibi — LLM tabanlı otomasyonun içindeki mantığı oldukça sade bir biçimde ortaya koyuyordu:</p><ul><li>API çağrıları</li><li>birleştirme (Merge)</li><li>LLM’in bağlamsal analiz yapması</li><li>farklı platformlara sonuç gönderimi</li></ul><p>Bu yapı, n8n’in LLM ile birleşince yalnızca entegrasyon değil, <strong>a</strong>kıllı süreç orkestrasyonu sağlayabildiğini somut şekilde hissettirdi.</p><h4>Sonuç: LLM ile Otomasyon, Pratik Uygulamayla Anlam Kazandı</h4><p>Yusuf Tayman ve Eren Akyol’un yürüttüğü bu atölye, otomasyonun gerçek değerinin doğru kurgulanmış bir akışla ortaya çıktığını gösterdi.<br> Katılımcılar yalnızca örnek akışlar oluşturmadı; aynı zamanda:</p><ul><li>veri toplama,</li><li>analiz ettirme,</li><li>formatlama,</li><li>dağıtım,</li><li>platform entegrasyonu</li></ul><p>gibi süreçlerin nasıl tek bir çatı altında birleştiğini deneyimlemiş oldu.</p><p>Bu bölüm, yapay zekânın iş akışlarını güçlendiren bir bileşen olduğunu değil onları yeniden tanımlayan bir mimariye dönüştüğünü gösteren güçlü bir deneyimdi.</p><h3>2. Gün — 3.Oturum: Mutlu Polatcan ile Uygulamalı Colab Çalışmaları: LLM Davranışını Kod Üzerinden Anlama</h3><p>İkinci günün teknik açılışında Mutlu Polatcan, LLM’lerle çalışırken temel kavramları yalnızca teorik seviyede anlatmakla kalmadı; Colab üzerinde paylaştığı beş farklı örnekle model davranışını doğrudan kod üzerinden gözlemlememizi sağladı. Bu bölüm, üretken modellerin nasıl çalıştığını anlamak isteyen katılımcılar için oldukça yol göstericiydi.</p><p>Mutlu Bey’in vurguladığı temel yaklaşım şuydu:</p><p>“Modeli anlamadan otomasyon kuramazsınız. Önce küçük örneklerde nasıl davrandığını gözlemlemek gerekir.”</p><h4>1. Temperature ve Top-P: Modelin Kişiliğini Belirleyen Ayarlar</h4><p>Mutlu Bey, temperature ve top-p’nin çoğu kişi tarafından göz ardı edildiğini, ancak model davranışını belirleyen en kritik parametreler olduğunu vurguladı.</p><ul><li><strong>Düşük temperature:</strong> Daha tutarlı, otomasyona uygun çıktılar</li><li><strong>Yüksek temperature:</strong> Daha yaratıcı metinler</li><li><strong>Top-p daraltıldığında:</strong> Modelin olası seçenekleri azaltarak daha deterministik davranması</li></ul><p>Bu ayarların ne kadar küçük değişikliklerle bile çıktıyı tamamen değiştirdiği Colab üzerinden canlı şekilde gösterildi.</p><h4>2. Prompt’un Küçük Değişikliklerle Çıktıyı Tamamen Değiştirmesi</h4><p>Colab örnekleri, beş kelimelik bir eklemenin bile modeli farklı bir yanıt tarzına yönlendirebildiğini gösterdi.</p><p>Mutlu Bey burada özellikle şuna dikkat çekti:</p><ul><li>Görev tanımı net değilse model de net değildir.</li><li>Role assignment, bağlam ve kısıtlar net verilmeli.</li><li>Gereksiz özgürlük modeli tahmin edilemez hâle getirir.</li></ul><p>Bu nedenle prompt’ların otomasyonda “tasarım girdisi” olarak görülmesi gerektiğini belirtti.</p><h4>3. JSON Çıktı Zorlaması: Otomasyonun Zorunlu Bileşeni</h4><p>Mutlu Bey’in üzerinde en çok durduğu konulardan biri modelin JSON çıktısını her zaman düzgün üretmemesiydi.</p><p>Colab’daki örneklerde model:</p><ul><li>JSON’un dışına çıkabildi,</li><li>açıklama eklemeye çalıştı,</li><li>property eksiltebildi,</li><li>tırnak hataları yapabildi.</li></ul><p>Bu nedenle otomasyon kurarken mutlaka:</p><ul><li>JSON schema dayatılması,</li><li>validasyon yapılması,</li><li>hata yakalama mekanizmalarının kullanılması</li></ul><p>gerektiğini vurguladı.</p><p>“Model mükemmel değildir. Mükemmelliği siz zorunlu kılarsınız.”</p><h4>4. Multi-Turn Diyalog ve Context Window Yönetimi</h4><p>Bazı Colab örneklerinde çok adımlı (multi-turn) konuşmalar gösterildi. Mutlu Bey şu noktayı açıkça belirtti:</p><p>“Modelin hafızası yoktur; ona verdiğinizden başka hiçbir şeyi hatırlamaz.”</p><p>Bu nedenle uzun süreçlerde:</p><ul><li>gereksiz içerikten kaçınmak,</li><li>bağlamı sadeleştirmek,</li><li>her adımda yeniden çerçeve çizmek</li></ul><p>gibi teknikler üzerinde duruldu.</p><h4>5. Kod Tarafında Modeli Tanımak, Otomasyonun Temeli</h4><p>Son bölümde Mutlu Bey, bu beş Colab çalışmasının neden önemli olduğunu şu şekilde özetledi:</p><ul><li>Otomasyon kurarken modelin nasıl düşündüğünü bilmek şart.</li><li>API çağrılarında beklenmedik davranışlar olabilir; sürprizleri ancak test ederek görürsünüz.</li><li>“Küçük testler → davranış analizi → güvenli akış” üçlüsü, profesyonel çalışma yönteminin temelidir.</li></ul><p>Bu anlayış, ikinci günün devamındaki Slack, Form → Mail, API → GPT → Slack gibi otomasyon örneklerinin altyapısını oluşturdu.</p><h4>Sonuç: Kod Seviyesinde LLM Davranışını Gözlemlemek, Yöntemi Olgunlaştırdı</h4><p>Mutlu Bey’in hazırladığı bu Colab seti, katılımcılara yalnızca model çıktısı üretmeyi değil, model davranışını <em>yönetmeyi</em> öğretti.<br> Bu bölümden sonra herkes LLM’lerin:</p><ul><li>nasıl karar verdiğini,</li><li>nerelerde hataya açık olduğunu,</li><li>hangi parametrelerin kritik olduğunu,</li><li>otomasyon için neden validasyon gerektiğini</li></ul><p>çok daha net bir şekilde anlamış oldu.</p><p>Bu çalışmalar, ikinci günün geri kalanındaki otomasyon oturumlarının teknik temelini<strong> </strong>oluşturdu.</p><h3>2. Gün — 4.Oturum:Kadir Nuri Çubukçu ile Yapay Zekâda Bilgi Kalitesi ve Güvenilirlik</h3><p>Haftasonunun son oturumu, Kadir Nuri Çubukçu’nun yapay zekâ sistemlerinde bilgi kalitesi ve doğrulama tekniklerine odaklanan sunumuyla tamamlandı. Gün boyunca otomasyon, workflow tasarımı ve çoklu ajan sistemlerini ele aldıktan sonra, bu oturum AI projelerinde sıklıkla göz ardı edilen ama profesyonel ölçekte kritik öneme sahip bir soruya yöneldi:</p><p>“Modelin ürettiği bilginin güvenilir olduğundan nasıl emin oluruz?”</p><p>Kadir Bey, yazılım test süreçlerinden gelen deneyimini üretken yapay zekâ bağlamına uyarlayarak, bilgi kalitesi konusunu teoriden uzak, tamamen pratik bir açıyla ele aldı.</p><h4>Bilgi Kalitesinin Temel Boyutları</h4><p>Sunumun giriş bölümünde bilgi kalitesini oluşturan beş ana boyut üzerinde duruldu:</p><ul><li>Doğruluk (Accuracy)</li><li>Güncellik (Timeliness)</li><li>Tamlık (Completeness)</li><li>Tutarlılık (Consistency)</li><li>Alaka Düzeyi (Relevance)</li></ul><p>Bu yapı, LLM’lerin ürettiği çıktıları değerlendirirken “iyi hissettiren bir cevap” ile “gerçekten güvenilir bir bilgi” arasındaki farkı ayırt etmeye yardımcı olan temel çerçeve olarak sunuldu.</p><p>Kadir Bey’in ifadesiyle:<br> “Her bilgi kaliteli değildir. Kaliteyi biz tanımlar, biz kontrol ederiz.”</p><h4>Yapay Zekâda Bilgi Kalitesi Problemleri</h4><p>Oturumun devamında, LLM’lerin neden hatalı ya da yanıltıcı cevaplar üretebileceği örnekler üzerinden açıklandı.<br> Öne çıkan problem türleri:</p><ul><li>Yanlış veya tutarsız etiketleme</li><li>Dengesiz veri kümeleri</li><li>Gürültülü veriler</li><li>Veri setindeki önyargılar (bias)</li><li>Eski, geçerliliğini yitirmiş bilgiler</li><li>Modelin eğitim verisinden kaynaklanan yanılgılar</li></ul><p>Özellikle “kedilerin 6 bacağı olduğu” gibi absürt ama teknik olarak açıklanabilir hatalar, bu problemlerin günlük hayatta nasıl ortaya çıkabileceğinin iyi bir örneği olarak paylaşıldı.</p><h4>Kalite Kontrol Teknikleri: Profesyonel Yaklaşım</h4><p>Kadir Bey, bir AI kalite kontrol uzmanının günlük iş akışını sade ve anlaşılır şekilde kategorize ederek anlattı.<br> Bu süreçler:</p><h4>1. Veri Ön İşleme (Preprocessing)</h4><ul><li>Etiket tutarsızlıkları</li><li>Görsel sınıflandırma anlaşmazlıkları</li><li>Kaynak kalitesinin manuel kontrolü</li></ul><h4>2. Veri Doğrulama (Validation)</h4><ul><li>Mantık hataları</li><li>Tarih, yaş, sayı gibi alanların sınırlandırılması</li><li>Tutarsız kayıtların tespiti</li></ul><h4>3. Veri Temizleme (Cleansing)</h4><ul><li>Eksik veya hatalı veri tiplerinin ayrıştırılması</li><li>Girdi formatlarının standardizasyonu</li></ul><h4>4. Veri Dengeleme (Balancing)</h4><ul><li>Çok az görülen sınıfların iyileştirilmesi</li><li>Aşırı temsil edilen sınıfların azaltılması</li></ul><h4>5. Bias (Önyargı) Kontrolü</h4><ul><li>Veri hazırlayan kişiden modele taşınan yanlılık</li><li>Kültürel, bölgesel veya toplumsal önyargıların filtrelenmesi</li></ul><h4>6. Human-in-the-loop Yaklaşımı</h4><ul><li>Modelin emin olmadığı durumlarda insana devretme</li><li>Kritik kararların hibrit şekilde yönetilmesi</li></ul><p>Bu tekniklerin tümü, özellikle kurumsal seviyede LLM kullanımında güvenilirlik için zorunlu adımlar olarak ele alındı.</p><h4>Gerçek Hayattan Mini Senaryolar: Halüsinasyonun Anatomisi</h4><p>Sunumun en ilgi çekici kısmı, yapay zekâ sistemlerinin yaşadığı tipik bilgi hatalarının günlük örnekler üzerinden gösterildiği mini senaryolardı:</p><ul><li>Düz Dünya (Flat Earth) iddiaları</li><li>Aşı-mikroçip komplo teorileri</li><li>Güneş’in Dünya’nın etrafında döndüğü savı</li><li>Deepfake videolar</li><li>Klasik halüsinasyon örnekleri</li></ul><p>Bu senaryolar üzerinden Kadir Bey, “modelin ikna edici görünmesinin doğru olduğu anlamına gelmediğini” belirterek, kullanıcıların teyit kültürünü güçlendirmesi gerektiğini vurguladı.</p><h4>Sonuç: Bilgi Kalitesi, Model Kalitesinden Daha Temel Bir Konu</h4><p>Oturumun kapanışında ortaya çıkan ana mesaj netti:</p><p>Yapay zekâ uygulamalarının güvenilirliği, modelin ne kadar gelişmiş olduğundan çok, kullanılan bilginin ne kadar kaliteli olduğuyla doğrudan ilişkilidir.</p><p>Kadir Nuri Çubukçu’nun sunduğu kalite kontrol perspektifi, hem otomasyon hem de çoklu ajan oturumlarında kurulan akışları düşünürken kritik bir bakış açısı kazandırdı.<br>Haftasonunun son oturumu olarak, AI projelerinde “üretmekten önce doğrulamayı öğrenmek” gerektiğini hatırlatan değerli bir kapanış niteliği taşıdı.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2baef3d1f230" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[LLM Bootcamp Notları]]></title>
            <link>https://medium.com/@severustark/llm-bootcamp-notlar%C4%B1-760d65d38b46?source=rss-b2a0870810fc------2</link>
            <guid isPermaLink="false">https://medium.com/p/760d65d38b46</guid>
            <category><![CDATA[llm]]></category>
            <dc:creator><![CDATA[Damla ARPA]]></dc:creator>
            <pubDate>Sun, 24 Aug 2025 06:44:55 GMT</pubDate>
            <atom:updated>2025-08-24T07:04:19.803Z</atom:updated>
            <content:encoded><![CDATA[<p>Büyük bir heyecanla katıldığım LLM (Büyük Dil Modelleri) bootcamp’inin 8 haftalık sürecini tamamladım. Bu yazı dizisinde, her hafta öğrendiklerimi, karşılaştığım zorlukları ve edindiğim içgörüleri sizlerle paylaşacağım.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/944/1*HNiPups01g6riwwC-0VFtw.png" /></figure><h3>1.Hafta: LLM Temelleri ve Python ile NLP’ye Giriş</h3><p>Bootcamp’in ilk haftasında, “LLM nedir?” sorusuna yanıt aradık. LLM’ler (Büyük Dil Modelleri), adından da anlaşılacağı gibi milyarlarca parametreye sahip devasa yapay zeka modelleridir. GPT ve BERT gibi modeller, insan dilini anlamak, üretmek ve işlemek için tasarlanmıştır. Bu modellerin temel mimarisi <strong>Transformer</strong> olarak bilinir ve paralel işlem yeteneği sayesinde yüksek performans sağlar.</p><h4>Token’lar ve Tokenizer’lar: Makinelerin Dili</h4><p>LLM’ler, metinleri en küçük yapı taşlarına, yani <strong>token’lara</strong> böler. Token’lar kelime, alt kelime veya karakter olabilir. Belki de ilk haftanın en önemli konularından biri token’lar oldu. Çünkü token’lar, modelin maliyetini ve işleme hızını doğrudan etkiler ve bir metnin sayısallaştırılma yöntemini gösterir.</p><p>Örnek olarak :</p><pre>from transformers import AutoTokenizer<br><br>tokenizer = AutoTokenizer.from_pretrained(&quot;bert-base-uncased&quot;)<br>text = &quot;Transformers are powerful LLMs!&quot;<br>tokens = tokenizer.tokenize(text)<br>ids = tokenizer.convert_tokens_to_ids(tokens)<br><br>print(&quot;Tokens:&quot;, tokens)<br>print(&quot;Token IDs:&quot;, ids)<br></pre><p>Bu kodu çalıştırdığımızda, &quot;LLMs&quot; kelimesinin &quot;ll&quot; ve &quot;##ms&quot; olarak ikiye ayrıldığını gördük. Bu, <strong>subword tokenization</strong>’ın bir örneğidir. &quot;##&quot; işareti, bir token’ın önceki token’ın devamı olduğunu gösterir. Bu yöntem sayesinde model, eğitim sırasında hiç karşılaşmadığı uzun veya karmaşık kelimeleri bile anlamaya çalışabilir.</p><h4>Hugging Face: LLM’ler İçin Bir Kütüphane</h4><p>Bootcamp boyunca büyük ölçüde <strong>Hugging Face</strong> platformunu kullandık. Bu platform, önceden eğitilmiş binlerce modeli indirmeyi ve kullanmayı kolaylaştırır. Özellikle pipeline() fonksiyonu, metin tamamlama, duygu analizi veya varlık tanıma gibi görevleri tek bir satırla yapmamızı sağlar. Örneğin, duygu analizi için:</p><pre>from transformers import pipeline<br><br>classifier = pipeline(&quot;sentiment-analysis&quot;)<br>print(classifier(&quot;I love using large language models.&quot;))</pre><h4>Bağlam ve Embedding’ler: Kelimelerin Anlam Haritası</h4><p>LLM’lerin en güçlü yanlarından biri, kelimelerin <strong>bağlamını anlamasıdır</strong>. Örneğin “En popüler yaz içecekleri” sorusundan sonra “Neden popülerler?” diye sorduğumuzda, model bu iki soru arasındaki ilişkiyi kurabilir. Bu bağlam, hem sistem prompt’ları hem de konuşma geçmişi gibi unsurlarla oluşturulur.</p><p>Her kelime, bir <strong>embedding vektörüne</strong> dönüştürülür. Bu vektörler, kelimelerin anlamsal özelliklerini içeren çok boyutlu sayı dizileridir. PCA (Temel Bileşen Analizi) kullanarak bu vektörleri görselleştirdik ve kelimelerin bağlamsal yakınlıklarını 2D bir grafikte gözlemledik. Örneğin, &quot;the&quot; kelimesi farklı bağlamlarda farklı konumlarda yer alırken, &quot;sat&quot; ve &quot;on&quot; gibi ilişkili kelimeler birbirine yakın duruyordu. Bu görselleştirme oldukça etkileyici ve öğreticiydi.</p><h3>2. Hafta: Prompt Engineering ve OpenAI API Kullanımı</h3><p>İlk haftada LLM’lerin temellerini ve Python ile ilk adımlarımızı attıktan sonra, ikinci haftada modellerden en iyi şekilde nasıl yararlanabileceğimizi öğrendik: <strong>Prompt Engineering</strong> ve <strong>Agent’lar</strong>. Bu hafta, LLM’lerin yalnızca metin üreten araçlar olmadığını, aynı zamanda belirli görevleri yerine getirebilen akıllı sistemler olduğunu keşfettik.</p><h4>Prompt Engineering: Modelin Dilini Konuşmak</h4><p><strong>Prompt Engineering</strong>, bir modelden istediğimiz yanıtı alabilmek için doğru yönergeleri (prompt’ları) tasarlama sanatıdır. Bu yaklaşım, modeli baştan eğitmek yerine, mevcut yeteneklerini en etkili şekilde kullanmaya odaklanır.</p><p>Bootcamp’te üç temel prompt tekniğini öğrendik:</p><ul><li><strong>Zero-Shot Prompting:</strong> Modele hiçbir örnek göstermeden doğrudan soru sorarız. Örneğin:<br> &quot;İklim değişikliği nedir?&quot;<br> Model, önceden öğrendiği bilgilerle yanıt verir.</li><li><strong>Few-Shot Prompting:</strong> Modelin yanıt formatını öğretmek için birkaç örnek sunarız. Örneğin:</li></ul><pre>Soru: Sera gazı nedir? <br>Cevap: Atmosferde ısıyı tutan gazlardır.</pre><ul><li>Bu sayede model, kalıbı öğrenir ve yeni sorulara benzer formatta cevap verir.</li><li><strong>Chain of Thought (CoT):</strong> Modelden cevaba ulaşmadan önce adım adım düşünmesini isteriz. Prompt’a &quot;Düşün:&quot; gibi bir ifade ekleyerek, modelin akıl yürütme sürecini dışa vurmasını sağlarız. Bu yöntem, karmaşık sorularda daha mantıklı ve açıklayıcı yanıtlar üretir.</li></ul><p>Bu teknikler, aynı soruya farklı yaklaşımlarla nasıl değişik kalitede yanıtlar alınabileceğini net bir şekilde gösteriyor.</p><h4>Agent’lar: LLM’ler İçin Akıllı Asistanlar</h4><p>Prompt Engineering ile doğru yanıtı almayı öğrensek de, LLM’ler hâlâ yalnızca metinlerle sınırlıydı. İşte burada <strong>Agent’lar</strong> devreye giriyor.</p><p>Bir <strong>Agent</strong>, verilen bir görevi çözmek için elindeki araçları (<strong>tools</strong>) ne zaman ve nasıl kullanacağına kendi başına karar verebilen bir yapıdır.</p><ul><li><strong>Agent (Akıllı Asistan):</strong> Ne yapacağına karar verir.</li><li><strong>Tool (Araç):</strong> Agent’ın kullanabileceği hazır bir işlevi olan fonksiyondur.</li></ul><p>Örneğin: &quot;İstanbul&#39;da hava durumu nedir?&quot; sorusu geldiğinde, Agent bu sorunun bir hava durumu sorgusu olduğunu anlar, uygun API aracını çağırır ve veriyi işleyerek kullanıcıya anlamlı bir yanıt sunar.</p><p>Bootcamp örneklerinden conversational_agent.py, bir Agent’ın konuşma geçmişini nasıl hafızasında tuttuğunu gösteriyor. &quot;Fransa nerede?&quot; sorusuna yanıt verdikten sonra &quot;Başkentinde ne meşhur?&quot; sorusu sorulduğunda, Agent bağlamı koruyarak doğru aracı çağırıyor ve ilgili cevabı buluyor.</p><h4>LangChain: Agent’ların Hayatımızdaki Yeri</h4><p>Bu akıllı sistemleri kurmak için <strong>LangChain</strong> gibi kütüphaneler kullanılıyor. initialize_agent fonksiyonu ile bir Agent’ı, ona vereceğimiz araçları ve kullanacağı LLM’i belirleyebiliyoruz. verbose=True parametresi ise Agent’ın düşünme ve aksiyon alma sürecini adım adım izlememizi sağlıyor.</p><p>Böylece LLM’ler artık sadece metin üretmiyor; dış kaynaklara erişebiliyor (Wikipedia, Google Search vb.), hesap yapabiliyor ve çok adımlı sorguları çözebiliyor.</p><p>İkinci haftanın sonunda, prompt tekniklerini ve Agent’ların nasıl çalıştığını uygulamalı olarak deneyimledik. Modelin yanıt kalitesini kontrol etmeyi ve bir LLM’i akıllı bir asistana dönüştürmeyi öğrendik.</p><p>Ödevimizde, bir prompt tekniği ile bir Agent’ı birleştirerek bir uygulama geliştirmemiz isteniyor.</p><p>Proje Linki :<em> </em><a href="https://github.com/Severustark/book_summarizer_agent-">https://github.com/Severustark/book_summarizer_agent-</a></p><h3>3. Hafta: Derinlemesine Hugging Face Transformers</h3><p>LLM Bootcamp’in üçüncü haftasında, daha önce temel seviyede kullandığımız <strong>Hugging Face Transformers</strong> kütüphanesine daha derinlemesine daldık. Artık sadece hazır pipeline’ları kullanmakla kalmayıp, bir modeli kendi özel veri setimizle <strong>fine-tuning</strong> yapmayı ve bunu bir web arayüzü ile sunmayı öğrendik.</p><h4>Haber Sınıflandırma Projesi</h4><p>Haftanın en önemli uygulaması, Türkçe haber metinlerini kategorilere ayırmak için bir model eğitmekti. Önceden eğitilmiş bir Türkçe BERT modelini, özel bir haber veri seti üzerinde fine-tuning yaparak kullandık.</p><p>Projenin teknik detayları arasında şunlar öne çıktı:</p><ul><li><strong>csv.field_size_limit:</strong> Uzun metin dosyalarında karşılaşılabilecek hataları önlemek için CSV okuma limitini yükseltmek.</li><li><strong>attention_mask:</strong> Modelin bir metin içindeki hangi token’lara odaklanacağını belirten maske.</li><li><strong>Epoch Sayısı:</strong> Modelin tüm veri setini kaç kez işleyeceğini gösterir. Epoch sayısını artırmak, modelin performansını yükseltir.</li></ul><p>Bu adımlar sayesinde, genel amaçlı bir dil modeli olan dbmdz/bert-base-turkish-cased’i, <strong>Türkçe haber sınıflandırması</strong> gibi spesifik bir görevi başarıyla yerine getiren özel bir modele dönüştürdük.</p><h4>CPU vs. GPU</h4><p>Hocamız, model eğitimindeki kritik bir konuya değindi: <strong>CPU ve GPU farkları.</strong></p><ul><li><strong>CPU (Merkezi İşlem Birimi):</strong> Genel amaçlı görevler için tasarlanmış, seri işlemler yapan bir birim.</li><li><strong>GPU (Grafik İşlem Birimi):</strong> Binlerce çekirdeğe sahip ve paralel işlem yapabilme yeteneği ile yoğun matematiksel hesaplamaları çok hızlı gerçekleştirebiliyor.</li></ul><p>LLM’ler gibi devasa modellerin eğitimi yoğun hesaplama gerektirir. Bu nedenle GPU, özellikle büyük veri setlerinde eğitim süresini kat kat hızlandırıyor.</p><h4>Gradio: Modelleri Hızla Paylaşma</h4><p>Eğittiğimiz haber sınıflandırma modelini test etmek için <strong>Gradio</strong> kullandık. Gradio, makine öğrenmesi modelleri için kolayca web arayüzleri oluşturmamızı sağlayan bir Python kütüphanesi. Birkaç satır kodla, metin girişi ve model çıktısını gösteren basit bir arayüz hazırladık. Bu sayede modelin çalışma mantığını kod yazmadan da gözlemleyebildik.</p><p>Haftanın projesi: Haber sınıflandırma örneği yerine, farklı bir model seçip Gradio ile bir arayüz oluşturmak istendi. Bu, tüm adımları yeni bir veri seti ve model üzerinde tekrarlamamızı gerektiren bir görevdi.</p><p>Bu hafta, LLM’lerin sadece bir “sihirli kutu” olmadığını, doğru araçlar ve veri setleriyle nasıl şekillendirilebileceğini somut olarak gördük.</p><p>Proje Linki : <a href="https://github.com/Severustark/character-morality-classifier">https://github.com/Severustark/character-morality-classifier</a></p><h3>4. Hafta: RAG, Embedding ve Akıllı Arama</h3><p>LLM Bootcamp’in dördüncü haftasında, modellerin kendi bilgi setlerinin ötesine geçerek <strong>harici kaynaklardan nasıl bilgi alabileceğini</strong> öğrendik. Bu hafta, modern LLM uygulamalarının en önemli mimarilerinden biri olan <strong>Retrieval-Augmented Generation (RAG)</strong> sistemlerine daldık.</p><p>Üç temel kavram etrafında çalıştık: <strong>Embedding</strong>, <strong>Vektör Veritabanları</strong> ve <strong>LangChain</strong> ile bunları bir araya getirmek.</p><h4>RAG Nedir? LLM’lere Dış Kaynaklardan Bilgi Sağlamak</h4><p>Büyük dil modelleri ne kadar bilgili olsalar da, eğitim verilerinden sonra olan güncel bilgilere veya özel belgelere erişimleri yoktur. İşte burada <strong>RAG</strong> devreye girer. RAG iki ana adımdan oluşur:</p><ol><li><strong>Retrieval (Bilgiyi Getirme):</strong> Kullanıcının sorusuna en uygun bilgiyi harici bir kaynaktan (PDF, web sitesi, Excel vb.) bulur.</li><li><strong>Generation (Yanıt Üretme):</strong> Bulunan bilgiyi LLM’e bağlam olarak sunar ve modelin bu bağlama dayanarak doğru ve güncel bir yanıt üretmesini sağlar.</li></ol><p>Bu yöntem, modelin yanlış bilgi üretme (halüsinasyon) olasılığını azaltır ve yanıtları daha güvenilir hâle getirir.</p><h4>Embedding ve Vektör Veritabanları: Anlamın Sayısal Temsili</h4><p>RAG sisteminin kalbinde <strong>Embedding</strong> ve <strong>Vektör Veritabanları</strong> bulunur.</p><ul><li><strong>Embedding:</strong> Metinleri (kelime, cümle, paragraf) sayısal vektörlere dönüştürme işlemidir. Örneğin, “mutlu” ve “neşeli” gibi anlamsal olarak yakın kelimeler, vektör uzayında birbirine çok yakın konumlanır.</li><li><strong>Vektör Veritabanları:</strong> Bu sayısal vektörleri saklamak ve benzerliklerini hızlıca bulmak için özel olarak tasarlanmıştır.</li></ul><p>Dersimizde iki önemli vektör veritabanını inceledik:</p><ul><li><strong>FAISS (Facebook AI Similarity Search):</strong> Milyonlarca vektör içeren büyük ölçekli projeler için yüksek performanslı bir kütüphane.</li><li><strong>ChromaDB:</strong> LLM projeleri için optimize edilmiş, kullanımı kolay ve LangChain ile güçlü entegrasyona sahip bir çözüm.</li></ul><h4>LangChain: RAG Sistemini Kurma Aracı</h4><p>Tüm bileşenleri bir araya getiren ve LLM uygulamalarını geliştirmeyi kolaylaştıran framework ise <strong>LangChain</strong>. Karmaşık ve çok adımlı yapıları basitleştirir.</p><p>LangChain ile bir RAG sistemi kurarken izlediğimiz adımlar şunlardı:</p><ol><li>Dokümanları chunk’lara (parçalara) ayırmak.</li><li>chunk_overlap ile parçalar arasında anlam bütünlüğünü korumak.</li><li>Chunk’ları embedding modeline gönderip vektörlere dönüştürmek.</li><li>Vektörleri FAISS veya ChromaDB’ye kaydetmek.</li><li>Kullanıcı sorusu geldiğinde, sorunun vektörünü oluşturup veritabanında en benzer chunk’ları bulmak.</li><li>Bulunan chunk’ları LLM’e özel bir prompt ile vererek son yanıtı üretmek.</li></ol><p>Haftanın projesi, öğrendiklerimizi uygulamaya dökmek için harika bir fırsattı. Geliştirmemiz gereken <strong>RAG sistemi</strong>, bir Excel dosyasındaki soru-cevap setine dayanıyordu. Sistem:</p><ul><li>Sorunun cevabı kendi bilgi setinde varsa yanıt veriyor.</li><li>Yoksa OpenAI API’ye gidip doğru cevabı buluyordu.</li><li>Önemli koşul: Sadece ilgili konudaki sorulara yanıt veriyor; alakasız sorularda cevap üretmiyordu.</li></ul><p>Bu hafta, LLM’lerin yalnızca genel bilgiye değil, özel bilgi kaynaklarına da erişebildiğini ve bu sürecin arka planda nasıl işlediğini gördük. <strong>LangChain</strong> gibi araçlar sayesinde karmaşık sistemleri kurmanın ne kadar kolay olduğunu görmüş olduk.</p><p>Proje linki : <a href="https://github.com/Severustark/qa-with-books">https://github.com/Severustark/qa-with-books</a></p><h3>5. Hafta: LangChain ile Uygulama Geliştirme</h3><p>LLM Bootcamp’in beşinci haftası, şimdiye kadar öğrendiğimiz tüm bilgileri bir araya getirerek gerçek dünya uygulamaları geliştirmeye odaklandığımız bir hafta oldu. Haftanın yıldızı, LangChain’in temel yapı taşları olan <strong>Chain, Agent, Tool ve Memory</strong> kavramlarının canlı bir senaryoda nasıl kullanılabileceğiydi.</p><h4>LangChain’in Yapı Taşları: Chain, Memory ve Agent</h4><p>Karmaşık LLM uygulamaları oluşturmak için kullandığımız ana bileşenler şunlardı:</p><ul><li><strong>Chain (Zincir):</strong> Birden fazla LLM çağrısını veya aracı, belirli bir sırayla arka arkaya çalıştıran yapı. Örneğin, bir metni özetlemek ve ardından bu özete dayanarak bir soru sormak gibi adımları otomatikleştirebilir.</li><li><strong>Memory (Bellek):</strong> LLM’lerin konuşma geçmişini hatırlamasını sağlar. Tıpkı ChatGPT gibi, model önceki konuşmalardan bağımsız yanıtlar vermek yerine, sürekli ve akışkan bir diyalog kurabilir.</li><li><strong>Agent (Ajan):</strong> LLM’in hangi aracı (<strong>Tool</strong>) ne zaman kullanacağına kendi başına karar vermesini sağlar. Karmaşık ve çok adımlı görevlerde (ör. e-ticaret asistanı) performans ve maliyet avantajı sağlar.</li></ul><p><strong>Streaming</strong>, model yanıtlarının parça parça gelmesini sağlar ve kullanıcı deneyimini iyileştirir. Normal bir LLM’de, model tüm cevabı üretene kadar beklenirken, streaming sayesinde yanıt anında akmaya başlar. Bu, özellikle uzun metinler veya çok aşamalı işlemler için sistemin daha hızlı ve duyarlı hissettirmesini sağlar.</p><h4>E-ticaret Asistanı Senaryosu:</h4><p>Haftanın en önemli uygulaması, bu kavramların bir araya geldiği <strong>e-ticaret asistanı</strong> projesiydi. Bu projede bir LLM’i (GPT-4) çeşitli araçlarla donattık:</p><ul><li><strong>akilli_urun_onerisi:</strong> Kullanıcının tercihlerine göre ürün önerir.</li><li><strong>siparis_takibi:</strong> Sipariş numarasına göre durum sorgular.</li><li><strong>kullanici_profili_goster:</strong> Kullanıcının geçmişini ve tercihlerini listeler.</li><li><strong>baglam_takip:</strong> Son konuşmanın konusuna göre akıllı cevaplar üretir (örn. “değer mi?” sorularını yanıtlar).</li></ul><p>Agent, kullanıcının sorusuna göre hangi aracı kullanacağını kendisi seçiyordu. Örneğin, &quot;telefon öner&quot; denildiğinde <strong>akilli_urun_onerisi</strong>, &quot;12345 siparişim nerede?&quot; denildiğinde ise <strong>siparis_takibi</strong> çağrılıyordu. Böylece LLM, sadece bir sohbet robotu değil, belirli görevleri yerine getirebilen bir “ajan” hâline geliyordu.</p><p>Haftanın ödevi, önceki haftada öğrendiğimiz <strong>RAG sistemini</strong>, Makine Öğrenimi dokümanlarıyla geliştirmekti.</p><p>Adımlar şunlardı:</p><ol><li><strong>Dokümanları Yükleme ve Parçalama:</strong> PDF veya metin dosyasındaki makine öğrenimi terimlerini parçalara ayırmak.</li><li><strong>Embedding Oluşturma:</strong> Her terimi sayısal vektöre dönüştürmek.</li><li><strong>Vektör Veritabanına Ekleme:</strong> Vektörleri FAISS veya ChromaDB’ye kaydetmek.</li><li><strong>RAG Zincirini Kurma:</strong> Kullanıcının sorusunu vektör veritabanıyla eşleştirip ilgili doküman parçasını LLM’e göndermek.</li></ol><p>Böylece sistem, sadece genel bilgilerle değil, kendi beslediğimiz özel bilgilerle de akıllıca yanıt verebiliyordu. Bu, sürekli API çağrısı yapmanın maliyetini azaltmak ve modeli kendi veri tabanımızla özelleştirmek için kritik bir adımdı.</p><p>Bu hafta, LLM’lerin sadece metin üretmenin ötesine geçip, gerçek dünyada işe yarayan karmaşık uygulamaların merkezinde nasıl konumlandığını gösterdi</p><p>Proje linki : <a href="https://github.com/Severustark/ml-mentor">https://github.com/Severustark/ml-mentor</a></p><h3>6. Hafta: LLM’lerde Fine-Tuning ve Kişiselleştirilmiş Inference</h3><p>Büyük Dil Modelleri (LLM’ler) devasa veri setleri üzerinde eğitilmiş olsalar da, bazen şirketinizin özel ihtiyaçlarına veya spesifik bir göreve uygun hâle getirilmeleri gerekir. İşte bu noktada <strong>Fine-Tuning (İnce Ayar)</strong> devreye girer. Hazır eğitilmiş bir modelin tüm ağırlıklarını güncellemek yerine, onu belirli bir veri setiyle yeniden eğiterek tamamen kendi işinize özel bir model oluşturabilirsiniz.</p><p>Bu haftanın ana odak noktaları, fine-tuning süreçlerini verimli hâle getiren yöntemler ve modelin nihai kullanım aşaması olan <strong>inference </strong>üzerineydi.</p><p><strong>Fine-Tuning ve PEFT (Parameter-Efficient Fine-Tuning)</strong></p><ul><li><strong>Fine-Tuning:</strong> Modelin tüm katmanlarındaki ağırlıkların, belirli bir görev için yeniden eğitilmesi. Yüksek performans sağlar fakat maliyetli ve zaman alıcıdır.</li><li><strong>PEFT (Parametre Verimli Fine-Tuning):</strong> Tüm parametreleri güncellemek yerine, sadece az sayıda parametre ekleyerek veya değiştirerek modeli yeniden eğitme yöntemi. LoRA (Low-Rank Adaptation) da buna örnektir.</li></ul><p><strong>Optimizer (Optimizasyon Algoritması)</strong><br> Modelin çıktıları ile gerçek etiketler arasındaki farkı (loss) en aza indirmek için ağırlıkları günceller. Her adımda kaybı azaltacak şekilde küçük adımlar atar.</p><p><strong>Attention Mask (Dikkat Maskesi)</strong><br> Transformer’larda, modelin hangi token’lara odaklanacağını kontrol eder. Dolgu (padding) tokenlarını göz ardı edip sadece gerçek metin tokenlarına dikkat edilmesini sağlar.</p><p><strong>Inference (Çıkarım)</strong><br> Eğitilmiş modelin, daha önce görmediği verilere tahmin yapma sürecidir. Metin üretmek, duygu analizi yapmak veya görüntüde nesne tanımak gibi işlemler inference aşamasında gerçekleşir.</p><p><strong>Ödev Analizi:</strong>Bu kod, temel bir modelin ve üzerine eklenmiş kişiselleştirilmiş PEFT modelinin nasıl yükleneceğini ve inference için nasıl kullanılacağını gösterir.</p><p><strong>Kodun ana adımları:</strong></p><ol><li><strong>load_base_model():</strong> GPT-2 gibi temel modeli yükler ve tokenizer ile generation_config tanımlar.</li><li><strong>load_personalized_model():</strong> PEFT ile eğitilmiş adaptör katmanlarını yükler. Başarılı olursa model kişiselleştirilmiş şekilde çalışır.</li><li><strong>create_personalized_prompts():</strong> Test senaryolarına uygun özel prompt’lar oluşturur.</li><li><strong>batch_inference():</strong> Hazırlanan prompt’lar üzerinden toplu tahminler üretir.</li><li><strong>analyze_generation_quality():</strong> Üretilen çıktıları analiz eder ve kalite metriklerini hesaplar.</li><li><strong>save_results():</strong> Tahmin sonuçlarını JSON dosyasına kaydeder.</li></ol><p><strong>Kişiselleştirme ve Kullanım:</strong></p><ul><li>Prompt’ları kendi senaryonuza göre özelleştirin (örn. &quot;Finansal danışmanım olarak yatırım tavsiyesi ver&quot;).</li><li>Kalite analizini geliştirmek için doğruluk veya uygunluk gibi ek metrikler ekleyebilirsiniz.</li><li>Çalıştırdıktan sonra sonuçları JSON dosyası veya konsol çıktılarıyla paylaşabilirsiniz.</li></ul><p>Bu adımlarla, fine-tuning ve inference süreçlerini teorik değil, pratik bir örnek üzerinden deneyimlemiş oluyorsunuz. LLM’leri kendi ihtiyaçlarınıza uygun hâle getirerek, onları sadece genel amaçlı değil, gerçekten işlevsel ve kişiselleştirilmiş araçlar hâline getirebilirsiniz.</p><p>Proje linki : <a href="https://github.com/Severustark/personalized_inference">https://github.com/Severustark/personalized_inference</a></p><h3>7. Hafta: LLM Dağıtımı ve Uygulama Entegrasyonu</h3><p>Bu hafta, LLM’lerin sadece model olarak değil, uçtan uca bir proje olarak nasıl geliştirileceğini ve dağıtılacağını öğrendik. Dersin temelinde, bir PDF dosyasından soru-cevap yapabilen bir <strong>RAG (Retrieval-Augmented Generation)</strong> sistemi geliştirmek vardı ve bu sistem için <strong>web arayüzü (Streamlit)</strong> ile <strong>API (FastAPI)</strong> entegrasyonu yapıldı.</p><p>Projeyi farklı ortamlarda sorunsuz çalıştırmak için <strong>Docker</strong> kullanıldı ve Docker imajı oluşturuldu. Bu sayede uygulamayı paketleyip kolayca dağıtabilmek mümkün oldu.</p><h4>Temel Kavramlar ve Araçlar</h4><ul><li><strong>Docker:</strong> Uygulamayı bağımlılıklarıyla birlikte bir konteyner içinde paketler. docker komutuyla imaj oluşturulur; docker-compose.yml ise birden fazla servisi tek komutla yönetmeyi sağlar.</li><li><strong>FastAPI:</strong> Yüksek performanslı ve modern web API’leri oluşturmak için kullanılan Python kütüphanesi.</li><li><strong>Endpoint:</strong> API’nin belirli bir işlevi gerçekleştirmek için erişilebilen adresleridir (örn. /analyze, /upload).</li></ul><p><strong>HTTP Metotları:</strong></p><ul><li><strong>GET:</strong> Sunucudan veri almak için kullanılır; veri URL üzerinden görünür.</li><li><strong>POST:</strong> Sunucuya veri gönderir; veri isteğin gövdesinde gizli şekilde iletilir.</li><li><strong>Uvicorn:</strong> Asenkron çalışan Python web sunucusu; FastAPI projelerini çalıştırmak için kullanılır.</li><li><strong>.env dosyası:</strong> API anahtarları gibi hassas bilgileri güvenli şekilde saklamak için kullanılır.</li><li><strong>app klasörü:</strong> Ana uygulama kodu ve endpoint’lerin bulunduğu klasördür (main.py vb.).</li><li><strong>schemas.py:</strong> Pydantic ile API’den gelen ve giden verilerin yapısını tanımlar.</li><li><strong>Swagger UI:</strong> API’nin interaktif dokümantasyon arayüzü; http://localhost:8000/docs üzerinden test edilebilir.</li><li><strong>CORS (Cross-Origin Resource Sharing):</strong> Farklı domain’lerden gelen isteklerin API’ye erişimine izin verir.</li></ul><p>Bu haftanın projesi , kendi belirlediğiniz bir LLM uygulamasını <strong>FastAPI</strong> kullanarak küçük bir API hâline getirmekti.</p><p>Bu ödev, LLM modellerini uçtan uca bir projeye entegre etme, API ve web arayüzü ile dağıtma sürecini deneyimlemek için mükemmel bir fırsattı.</p><p>Proje linki :<a href="https://github.com/Severustark/llm_fastapi_app">https://github.com/Severustark/llm_fastapi_app</a></p><h3>8. Hafta: Agent Sistemlerinde Protokoller ve Streamlit Entegrasyonu</h3><p>Büyük LLM bootcamp’inin son haftasında, çoklu agent sistemlerinde <strong>protokoller ve iletişim mekanizmaları</strong> üzerinde yoğunlaştık. Bu hafta, agent’ların birbirleriyle veya dış sistemlerle güvenli ve standart bir şekilde etkileşim kurmasını sağlayan <strong>MCP (Model Context Protocol)</strong> ve <strong>A2A (Agent-to-Agent) Protokolü</strong>nü öğrendik.</p><p><strong>MCP (Model Context Protocol):</strong><br>MCP, yapay zeka modelleri ile dış sistemler arasında güvenli ve standart bir iletişim protokolüdür. Adeta bir “ortak kutu” görevi görür; agent’ların birbirleriyle veya dış araçlarla iletişim kurmasını sağlayan temel veri formatını tanımlar.</p><p><strong>Ne Zaman Gerekir?</strong></p><ul><li>Birden fazla agent aynı görevi paylaşması gerektiğinde.</li><li>Agent’ların bağlam (context) ve durum bilgisini sürekli güncellemesi gerektiğinde.</li><li>Veritabanı erişimi veya API çağrıları gibi dış sistemlerle güvenli bir şekilde etkileşim kurulması gerektiğinde.</li></ul><p><strong>Schema:</strong><br> schemas.py dosyasında tanımlı olan schema yapısı, MCP’nin temelini oluşturur. Mesajların hangi veri tipinde ve formatta olacağını belirler, tip güvenliği sağlar.</p><p><strong>A2A (Agent-to-Agent) Protokolü:</strong><br>A2A, birden fazla AI agent’ı arasında veri paylaşımı ve haberleşme protokolüdür. MCP gibi veri formatını standartlaştırır, ancak özel olarak agent’ların birbirine görev vermesi ve sonuçları aktarması için tasarlanmıştır.</p><p><strong>Ne Zaman Gerekir?</strong></p><ul><li>Karmaşık bir görevi birden fazla uzman agent’a bölmek istediğinizde (ör. araştırma, analiz ve raporlama agent’ları).</li><li>Sisteminizin ölçeklenebilir ve hataya dayanıklı olmasını istediğinizde.</li><li>Agent’lar arasında paralel işlem yapılması gerektiğinde.</li></ul><h4>Agent Haberleşme Bileşenleri</h4><p>schemas.py dosyasındaki <strong>A2AMessage</strong> sınıfı, agent’lar arasındaki mesajlaşmanın temel bileşenlerini tanımlar:</p><ul><li><strong>sender (Gönderen):</strong> Mesajı yollayan agent.</li><li><strong>receiver (Alıcı):</strong> Mesajın hedefi olan agent.</li><li><strong>task (Görev):</strong> Agent’ın hangi görevi yerine getireceğini belirten ana eylem.</li><li><strong>payload (Veri):</strong> Görevin yerine getirilmesi için gerekli detaylı veriler.</li></ul><p>Bu hafta ödevimiz, çoklu agent projesine <strong>Streamlit</strong> eklemekti. Streamlit, veri uygulamaları ve etkileşimli arayüzler oluşturmayı kolaylaştıran bir Python kütüphanesidir.</p><p>Amaç:</p><ul><li>Agent’ların çalışma sürecini görselleştirmek.</li><li>Kullanıcının agent’lara komut vermesini sağlamak.</li><li>Analiz sonuçlarını kullanıcı dostu bir rapor şeklinde sunmak.</li></ul><p>FastAPI’de tanımladığımız endpoint’ler, Streamlit arayüzünden çağrılabilecek API’ler olarak hizmet verdi. Böylece kullanıcılar, web arayüzü üzerinden agent’larla etkileşime geçebildi ve sistemin işleyişini gerçek zamanlı gözlemleyebildi.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=760d65d38b46" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Insider Staj Günlükleri — Bölüm 4]]></title>
            <link>https://medium.com/@severustark/insider-staj-g%C3%BCnl%C3%BCkleri-b%C3%B6l%C3%BCm-4-2e29ed7ab9a1?source=rss-b2a0870810fc------2</link>
            <guid isPermaLink="false">https://medium.com/p/2e29ed7ab9a1</guid>
            <category><![CDATA[insider]]></category>
            <category><![CDATA[staj]]></category>
            <dc:creator><![CDATA[Damla ARPA]]></dc:creator>
            <pubDate>Sun, 03 Aug 2025 16:06:00 GMT</pubDate>
            <atom:updated>2025-08-03T16:09:08.899Z</atom:updated>
            <content:encoded><![CDATA[<h3>Insider Staj Günlükleri — Bölüm 4</h3><p>Bu hafta Insider’daki staj sürecimizde, bize verilen backend path’ni başlamakla birlikte teknik anlamda oldukça verimli bir dönem geçirdik. Grup arkadaşlarımla birlikte hem proje üzerinde aktif bir şekilde çalıştık hem de teknik konularda bilgi paylaşımında bulunduk. Bununla birlikte, Emin Bey’in verdiği UX 101 eğitimi sayesinde yazılım geliştirme sürecine yalnızca teknik açıdan değil, aynı zamanda kullanıcı odaklı bir bakış açısıyla yaklaşmayı da öğrendik. Kullanıcının ihtiyaçlarını anlamak, deneyimlerini ön planda tutmak gerektiğini görmek benim için oldukça ufuk açıcıydı. Bu yazıda, bu haftaki deneyimlerimin bir özeti olarak özellikle Docker ve Kubernetes teknolojilerinden edindiğim bilgileri sizlerle paylaşmak istiyorum.</p><h3>DOCKER</h3><blockquote><em>“It works on my machine.”</em></blockquote><p>Eskiden uygulamaları deploy etmek çok daha karmaşık ve zordu. Neden?<br>Çünkü, örneğin bir Java uygulamanız var: Java kuracaksınız, environment ayarlayacaksınız, portları ayarlayacaksınız vs… Lokalde çalışıyor fakat başka bir ortama geçtiğimizde, o ortam daha önceden hazırlanmış, yani hazır bir setup’a sahip olmadığı için patlıyor ya da patlayabiliyor.</p><p>Bu klasik bir hikâyedir. Ortam bağımlılığına çözüm olarak <strong>containerization</strong> dediğimiz yaklaşım ortaya çıkıyor. Bu aynı zamanda <strong>cloud devrimi</strong> ile birlikte yaşanıyor.</p><p>Docker’dan önce de sanal makineler (virtual machines — VM’ler) vardı. Buna <strong>virtualization</strong> diyoruz. Ancak Docker dediğimiz şey aslında sadece bir platformdur. Ne bir teknoloji icat etti, ne de sıfırdan bir şey yarattı.</p><p>Containerization dediğimiz şey zaten daha önceden vardı. Örneğin <strong>Linux Containers (LXC)</strong>. Ancak bu oldukça zahmetliydi çünkü manuel olarak konfigüre ediliyordu.</p><h4>Docker Ne Yaptı?</h4><p>Aslında bir <strong>developer experience devrimi</strong> yaptı. Ne yaptı?</p><p>Docker:</p><ul><li>Zaten var olan arka plandaki daemon’ları,</li><li>CLI (komut satırı arayüzü),</li><li>API,</li><li>Ve en önemlisi kullanıcı deneyimi (UX) ile<br> birleştirerek geliştiricilerin <strong>containerization</strong> dediğimiz şeyi çok daha rahat, basit ve etkili bir şekilde kullanmasını sağladı.</li></ul><h4>Ne İşe Yarıyor?</h4><p>Uygulamanızı hızlıca build edebiliyor, test edebiliyorsunuz.<br>İster development ister production ortamı olsun, <strong>her ortamda stabil bir build</strong> elde ediyorsunuz.Yani artık :</p><blockquote>“It works on my machine” → “It works on your machine too.”</blockquote><h4>Container Runtime Nedir?</h4><p>Container runtime, imajları arka planda çalışan proseslere (container prosesleri) dönüştüren çekirdektir.Biz image yazıyoruz, Dockerfile’lar yazıyoruz, bunlar image’lara dönüşüyor. Ve container runtime da bu image’ları aktif proseslere çeviriyor.</p><h4>Docker Ne Değildir?</h4><p>Şunu sorarak başlayalım: Docker nedir, ne değildir?</p><ul><li>Docker, Linux kernel’a yeni bir özellik getirmiyor.</li><li>Yeni bir sistem üretmedi.</li><li>Container fikrini de icat etmedi.</li></ul><p>Peki ne yaptı?</p><p><strong>Linux kernel</strong>’da hali hazırda bulunan bazı mekanizmaları (örneğin namespaces ve cgroups) kullanarak bunları geliştiricilerin kolayca kullanabileceği hâle getirdi.</p><p>Linux zaten <strong>LXC</strong> (Linux Containers) diye bir teknolojiyi barındırıyordu.</p><ul><li><strong>Namespaces</strong> → Her container kendi dosya sistemi, ağı, kullanıcıları vb. ile tamamen izole olur. Buna <strong>process isolation</strong> denir.</li><li><strong>Cgroups</strong> → Her container’ın ne kadar kaynak kullanabileceğini tanımlar (örn. %10 CPU, belirli miktarda RAM vs).</li></ul><p>Docker bu mekanizmaları bir araya getirerek <strong>developer-friendly</strong> bir format sundu.</p><h4>Ürünleştirme (Productization) ve Devrim</h4><p>Buradaki asıl devrim, bu fikrin ürünleştirilmesiydi .Yani teknik bir konsepti, geliştiricilerin kolayca kullanabileceği bir ürüne dönüştürmek.</p><p>Bu devrim de, tam anlamıyla <strong>cloud devrimi</strong> ile birlikte geldi.</p><h4>Virtualization’dan Containerization’a</h4><p>1960–2000: Her şey fizikseldi : Eskiden, şirketler her bir görev için ayrı bir fiziksel sunucu kullanıyordu:</p><ul><li>E-posta sunucusu,</li><li>Veritabanı sunucusu,</li><li>Web sunucusu…</li></ul><p>Bu çok kötü bir kaynak kullanımıydı çünkü sunucuların genelde sadece %10–15’i aktif kullanılıyordu. Geri kalanı boşuna çalışıyordu.</p><p>Üstelik:</p><ul><li><strong>Dependency Hell</strong> yaşanıyordu. Örneğin bir uygulama PHP 5.6 istiyor, diğeri 8.0… Aynı OS üzerinde bunları çalıştırmak zor.</li><li><strong>Port Conflict</strong> yaşanıyordu. İki uygulama aynı portu kullanmak istiyorsa? Olmaz.</li><li><strong>Güvenlik açıkları</strong> büyüyordu. Bir uygulama hacklenirse, aynı OS üzerinde çalışan diğerleri de riske giriyor.</li></ul><h4>Virtual Machine (VM) Devri</h4><p>Çözüm olarak <strong>virtualization</strong> geldi.Hypervisor denen yazılımlar, tek fiziksel makine üzerinde birden fazla <strong>sanal makine (VM)</strong> çalıştırmayı mümkün kıldı.</p><p>Her VM:</p><ul><li>Kendi işletim sistemine (Windows/Linux)</li><li>Kendi CPU/RAM/Disk/Network kaynaklarına<br> sahipmiş gibi davranır.</li></ul><p>Bu yaklaşım tam bir <strong>machine isolation</strong> sağlar. Ama…</p><h4>VM’lerin Sorunları</h4><ul><li>Her VM ayrı bir OS içerdiğinden:</li><li>Boyutları çok büyüktür (GB’larca).</li><li>Boot süresi uzundur (3–5 dakika).</li><li>Performans overhead’i %20–30’dur.</li></ul><p>Bu yüzden:</p><ul><li>Her microservice için ayrı bir VM açmak mümkün değil.</li><li>Netflix gibi firmalar <strong>microservice</strong> mimarisine geçtiklerinde bu sınırlamalara takıldılar.</li></ul><h4>Docker ile Container Devri</h4><p>İşte tam burada <strong>Docker</strong> sahneye çıktı.Kendi yazılımımızı bir image olarak build edebiliyor, bunu saniyeler içinde ayağa kaldırabiliyoruz.</p><ul><li>Container’lar, <strong>tek bir Linux kernel üzerinde çalışır.</strong></li><li>Kendi OS’leri yoktur.</li><li>User-space seviyesinde izole edilirler.</li><li>Saniyeler içinde çalışır duruma gelirler.</li><li>Boyutları küçüktür (100–200 MB).</li><li>Overhead oranı çok düşüktür (%1–2).</li></ul><h4>Docker ile Gelen Güç</h4><ul><li>Bir kere yazarsınız, her yerde çalıştırırsınız.</li><li>Dockerfile yazar, image build eder, her ortamda aynı sonucu elde edersiniz.</li><li>DevOps kültürüne çok uygundur:</li><li>Continuous Integration / Continuous Deployment (CI/CD)</li><li>Günde onlarca kez deploy yapabilme</li><li>Hızlı iterasyon</li></ul><h3>Peki Ya Bugün?</h3><ul><li>Günümüzde hâlâ bazı sektörlerde (örneğin yüksek güvenlik gerektiren finans, savunma sanayii gibi) VM kullanımı devam ediyor.</li><li>Ancak modern <strong>cloud-native uygulamalar</strong>, <strong>microservice mimarileri</strong> neredeyse tamamen container’lar üzerinden çalışıyor.</li></ul><h4>Neden Docker Başarılı Oldu?</h4><p>Docker:</p><ul><li>Basit bir CLI + API + UX deneyimi sundu.</li><li>Tek bir Dockerfile ile logic yazmanıza imkân tanıdı.</li><li>Build → Ship → Run sürecini devrim niteliğinde basitleştirdi.</li><li>Cloud devrimi ile birleşerek modern yazılım dağıtımının temeli oldu.</li></ul><p>İşte bu yüzden:<br>Docker sadece bir araç değil, bir <strong>zihniyet değişimi</strong>, bir <strong>devrim</strong>.</p><p><strong>Docker Temel Terimler Rehberi :</strong></p><p><strong><em>Image :</em></strong><br>Uygulamanın çalışması için ihtiyaç duyduğu bütün bileşenleri içeren bir pakettir. ISO dosyası gibi düşünebilirsiniz. Örneğin PHP geliştirme ortamı için PHP, MySQL, phpMyAdmin ve Apache gibi bileşenlerin birlikte bulunduğu bir image gerekir.</p><p><strong><em>Docker Engine &amp; Docker Daemon :</em></strong><br>Docker Engine, image’lardan container oluşturmayı sağlayan çekirdektir. Docker Daemon ise bu işlemleri arka planda gerçekleştiren servis yapısıdır. Komut verildiğinde image’tan bir container üretmek bu sistemler sayesinde gerçekleşir.</p><p><strong><em>Container :</em></strong><br>Docker Engine’in image’tan ürettiği, içinde uygulamanın çalıştığı izole yapıdır. Sanal makineler gibi davranır ama çok daha hafif ve hızlıdır. İçinde kod çalıştırabilir, servisleri ayağa kaldırabilirsiniz.</p><p><strong><em>Network &amp; Çoklu Container :</em></strong><br>Farklı container’lar (örneğin Apache ve MySQL) aynı Docker ağı (network) içinde haberleşebilir. Bu sayede servisler modüler ve izole hâlde çalışırken, birbirlerine erişim sağlayabilirler.</p><p><strong><em>Dockerfile :</em></strong><br>Kendi özel image’ınızı oluşturmak için yazdığınız tarif dosyasıdır. İçine hangi komutların çalışacağını, hangi dosyaların kopyalanacağını, hangi base image kullanılacağını yazabilirsiniz. RUN, COPY, CMD gibi komutlar içerir.</p><p><strong><em>Docker Compose :</em></strong><br>Birden fazla container’ı tek bir yapı (kompozisyon) olarak yönetmenizi sağlar. Örneğin veritabanı, backend ve frontend servislerinizi tek bir docker-compose.yml dosyası ile aynı anda başlatabilir veya durdurabilirsiniz.</p><p><strong><em>Docker Hub : </em></strong><br>Docker image’larının paylaşıldığı merkezi havuzdur. Başkalarının hazırladığı image’ları buradan çekebilir, kendi image’larınızı buraya push edebilirsiniz. App Store mantığıyla çalışır.</p><p><strong><em>Volume :</em></strong><br>Container silindiğinde içindeki veriler de silinir. Verilerin kalıcı olmasını istiyorsanız volume kullanmalısınız. Volume’ler, container’dan bağımsız olarak veri saklamanızı sağlar.</p><h3>Kubernetes Nedir?</h3><p>Kubernetes, mikroservis mimarisi kullanan geliştiricilerin adeta bir kurtarıcısı; öte yandan monolitik mimari ile çalışan geliştiriciler için pek de ihtiyaç duyulmayan bir teknoloji olarak görülür. Aslında uzun yıllar boyunca hepimiz monolitik yapılarla projeler geliştirdik, bu nedenle Kubernetes gibi bir teknolojinin eksikliğini çok da hissetmedik.</p><h4>Monolitik Mimari Ne Demek?</h4><p>Monolitik mimari, yazılımın tüm bileşenlerinin tek bir proje çatısı altında bulunduğu bir yapıdır.Günümüzde hâlâ yaygın şekilde kullanılmaktadır. Örneğin, Laravel gibi bir framework ile geliştirmeye başladığınız projelerin çoğu büyük olasılıkla monolitik olacaktır.</p><p>Burada Laravel gibi framework’lerin direkt olarak monolitik olduğunu söylemiyoruz; demek istediğimiz şey şu: Eğer standart ve küçük-orta ölçekli bir proje geliştiriyorsanız, bu genelde <strong>monolitik bir yapıya</strong> sahip olacaktır.Herkesin bildiği örneklerden biri: <strong>WordPress</strong>. WordPress başlı başına klasik bir monolitik yapıdır.</p><h4>Monolitik Yapının Sınırları Nerede Başlar?</h4><p>Projeniz büyüdükçe ve daha fazla kullanıcı tarafından kullanılmaya başlandıkça, bakım ve dağıtım süreçleri gittikçe karmaşık hâle gelir.<br>Örneğin kullanıcı kayıt kısmında bir değişiklik yapmak istiyorsanız, tüm projeyi tekrar deploy etmeniz gerekebilir.</p><p>Aynı şekilde, tek sunucuda çalışan uygulamanız bir süre sonra yetmemeye başlar ve ikinci bir sunucuya ihtiyaç duyarsınız. Monolitik yapılarda bu tür durumlarda genellikle <strong>dikey ölçeklendirme</strong> tercih edilir.<br>Yani RAM veya CPU artırımı gibi çözümlerle sistem güçlendirilir. Bu da yeterli gelmediğinde <strong>yatay ölçeklendirme</strong> yapılır ama esnekliği sınırlıdır.</p><h4>Mikroservis Mimarisi: Neden Geçiş Yaptık?</h4><p>Monolitik yapılar karmaşıklaştıkça, geliştiriciler daha esnek bir yapı aramaya başladı.İşte burada mikroservis mimarisi devreye giriyor.<br>Mikroservis mimarisi, büyük ve karmaşık sistemleri küçük, bağımsız servisler hâline bölerek geliştirme yöntemidir.</p><p>Bu mimari sayesinde:</p><ul><li>Her servis bağımsız olarak güncellenebilir.</li><li>Yük arttığında sadece ihtiyaç duyulan servis ölçeklendirilebilir.</li><li>Farklı programlama dilleri aynı proje içinde kullanılabilir.</li></ul><p>Örneğin bir e-ticaret sitesinde ürün arama servisi çok yoğun kullanılıyorsa, bu servisten birkaç tane daha ayağa kaldırabilirsiniz. Kullanıcılar azaldığında ise bu servisleri düşürebilirsiniz.</p><h4>Amaç Mikroservis Değil, Mikroservisleri Yönetebilmek</h4><p>Mikroservis yapısını kurduktan sonra ortaya bazı problemler çıkmaya başlar:</p><ul><li>Servisler düştüğünde kim ayağa kaldıracak?</li><li>Yük artınca hangi servisten kaçı çalışacak?</li><li>Kullanıcı istekleri hangi servislere yönlendirilecek?</li><li>IP adreslerini kim yönetecek?</li><li>Servisler nasıl rollback yapacak?</li></ul><p>Bu tür ihtiyaçlar arttıkça, sadece mikroservis yapısı değil, <strong>bu yapıyı yönetecek bir sistem</strong> ihtiyacı da doğar.</p><h4>Borg → Kubernetes</h4><p>Google, 2000’li yıllardan beri container teknolojilerini hem de production seviyesinde kullanıyor. Bu kapsamda geliştirdiği iç araçlardan biri olan <strong>Borg</strong>, Kubernetes’in atası sayılır. Borg, büyük ölçekte container yönetimi sağlayan ancak esnek olmayan, sıkı bağlı (tightly coupled) ve monolitik bir sistemdi.</p><p>Zamanla Google mühendisleri bu sistemi daha modüler hale getirmek istediler ve <strong>Omega</strong> adında yeni bir sistem geliştirdiler. Ancak Omega, deneysel kaldı ve production ortamında kullanılmadı. Bu süreçten edindikleri tecrübelerle 2014 yılında <strong>Kubernetes</strong> projesini başlattılar. 2015 yılında ise proje, <strong>CNCF (Cloud Native Computing Foundation)</strong> çatısı altında açık kaynak olarak yayımlandı.</p><p>Peki neden açık kaynak?</p><p>Google, Kubernetes’i sadece kendisi için değil, herkesin kullanabileceği bir <strong>endüstri standardı</strong> haline getirmek istiyordu. Bu sayede Kubernetes’in “doğal habitatı” olarak Google Cloud Platform (GCP)’u konumlandırabileceklerdi. Yani mesaj şuydu:</p><blockquote><em>“Evet Kubernetes herkesin olabilir, ama biz bu işin ustasıyız.”</em></blockquote><h4>Kubernetes Neyi Çözüyor?</h4><p>Container orchestration dedik. Peki bu tam olarak ne demek?</p><ul><li>Container’ları <strong>pod</strong> adı verilen birimlerde toplar.</li><li>Hangi container hangi <strong>node</strong>’a gidecek, onu <strong>scheduler</strong> belirler.</li><li>Trafik artarsa otomatik olarak yeni <strong>instance</strong>’lar yaratır (auto-scaling).</li><li>Container çökerse yeniden başlatır (self-healing).</li><li>Uygulama güncellenirken kesinti yaşanmaması için <strong>rolling update</strong> uygular.</li><li>IP adresleri değişse bile sabit bir <strong>servis katmanı</strong> sağlar (abstraction).</li></ul><p>Bu sistemde bazı yeni kavramlar karşımıza çıkar:</p><ul><li><strong>Pod</strong>: Kubernetes’in deploy edilebilir en küçük birimidir. Genellikle bir pod tek bir container içerir, ancak örneğin log toplamak için ek bir sidecar container da içerebilir.</li><li><strong>Node</strong>: CPU, RAM ve storage gibi kaynakları barındıran fiziksel ya da sanal makineler.</li><li><strong>Control Plane</strong>: Sistemin beyni. Burada scheduler, controller, API sunucusu gibi bileşenler bulunur.</li></ul><h4>Kubernetes Mimarisi</h4><p>Kubernetes mimarisi üç ana bileşenden oluşur:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xHsJe72r960F9QGd965-vQ.png" /></figure><h4>1. Cluster</h4><p>Tüm yapının genel ismidir. İçerisinde Control Plane ve Node’lar bulunur.Yani beraber çalışan sistem grubu.</p><h4>2. Control Plane</h4><p>Sistemin beyni gibi çalışır. İçerisinde şu bileşenler vardır:</p><ul><li><strong>etcd</strong>: Kubernetes’in tüm verilerini sakladığı dağıtık key-value veritabanıdır.</li><li><strong>kube-apiserver</strong>: Sistemin tüm dış dünya ile konuştuğu API arayüzüdür.</li><li><strong>kube-scheduler</strong>: Hangi pod’un hangi node’a atanacağını belirler.</li><li><strong>controller-manager</strong>: Sistem durumunu izler, gerekirse aksiyon alır.</li><li><strong>cloud-controller-manager</strong>: Kubernetes’in bulut servis sağlayıcılarıyla iletişimini sağlar.</li></ul><h4>3. Node</h4><p>Her biri bir compute birimi (CPU, RAM, disk) olan fiziksel veya sanal makineler:</p><ul><li><strong>Kubelet</strong>: Node üzerinde çalışan ve container’ları ayağa kaldıran ajan.</li><li><strong>Kube-proxy</strong>: Node içi ve dış dünya arasındaki ağ trafiğini yönetir.</li><li><strong>CRI (Container Runtime Interface)</strong>: Docker veya containerd gibi container çalıştırıcılarla etkileşir.</li></ul><h4>Sonuç: Modern Dağıtımın Standardı</h4><p>Bugün Amazon’un <strong>Elastic Kubernetes Service (EKS)</strong>, Microsoft’un <strong>AKS</strong>’i, IBM’in <strong>OpenShift</strong>’i gibi hizmetler, Kubernetes’in farklı dağıtımlarıdır. Tıpkı Linux’un Ubuntu, Fedora, Debian gibi farklı distroları olduğu gibi, Kubernetes de bir “çekirdek”tir.</p><p>Kubernetes, Google’dan doğmuş ve tüm dünyaya yayılmıştır. Modern yazılım dünyasında uygulama dağıtımının ve ölçeklenebilirliğin <strong>endüstri standardı</strong> haline gelmiştir.</p><h3>Mehmet Emin Ciddi (UX 101)</h3><h4>Deneyimi Her Yerde</h4><p>“Deneyim” dediğimiz şey; bir butonun rengi, bir masanın yüksekliği ya da hangi malzemeden üretildiği gibi yalnızca somut özelliklerden ibaret değildir. Aslında deneyim, bir hizmetin ya da ürünün <strong>en başından en sonuna kadar yaşattığı tüm süreci</strong> kapsar. Bu nedenle deneyim soyut bir kavramdır; hissedilir, hatırlanır ama çoğu zaman kelimelere dökülemez.</p><p>Kullanıcı deneyimi (UX) kavramını bu sektörde ilk kez kullanan kişi <strong>Don Norman</strong> olmuştur. Apple’da çalıştığı dönemde, bu kavramı yazılım ve donanım dünyasına kazandırdı. Onun bakış açısıyla deneyim, sadece kullanıcı arayüzüyle sınırlı değildir; iletişimde, algıda, hatta zihinsel süreçlerde bile ortaya çıkar.</p><p>Henry Ford’un meşhur bir sözü vardır:</p><blockquote><em>“Eğer kullanıcıları birebir dinleseydim, onlara araba değil, daha hızlı atlar verirdim.”</em></blockquote><p>Bu söz, kullanıcıyı anlamanın her zaman doğrudan söylediklerinden ibaret olmadığını gösterir. Kullanıcının ihtiyacını doğru anlayabilmek, onun yerine empati kurmakla mümkündür.</p><h4>Empati: Tasarımcının En Önemli Kaslarından Biri</h4><p>Bir tasarımcının sahip olması gereken en güçlü yetkinlik <strong>empati</strong>dir. Muhatabının dertleriyle dertlenebilen bir kişi, gerçek anlamda çözüm üretebilir. Don Norman’ın kitapları bu konuda muazzam bir rehberdir, fakat empati sadece kitaplardan öğrenilmez.</p><p>Empati kasını geliştirmek için iki temel yol vardır:</p><ol><li><strong>Çok gezmek</strong> — Gerçek insanlarla, gerçek deneyimlerle yüzleşmek</li><li><strong>Çok okumak</strong> — Özellikle Dostoyevski gibi yazarlar, insan ruhuna dair derinlikleri ortaya koyar</li></ol><p>Tasarım yaparken, o ürün ya da hizmetin kullanıcısıyla etkileşime geçmek; onların dünyasına girmek, gerekirse onların deneyimlerini birebir yaşamak büyük önem taşır. <strong>Derdi çekilen yerde bulunmak</strong>, anlamlı bir çözüm için ilk adımdır.</p><h4>Segmentasyon ve Persona: İnsanları Anlamak</h4><p>Bir kullanıcıyı tanımlarken yalnızca demografik bilgilerle (segment) yetinmek yeterli değildir. İnsanların neyi sevdiği, neye ihtiyaç duyduğu, nelerden hoşlanmadığı gibi özellikleri de anlamamız gerekir. <strong>Persona oluşturmak</strong>, kullanıcıları gerçekten tanımak ve onlara uygun deneyimler sunmak için hayati bir adımdır.</p><h4>Tasarım Sürecine Yaklaşım: Küçük Başla, Doğru İlerle</h4><p>Tasarım süreci, T-şekilli veya M-şekilli bir gelişimle ilerlemelidir:</p><ul><li><strong>T-şekilli birey</strong>: Bir alanda derinleşmiş, ama birçok farklı disiplinden anlayan kişidir.</li><li><strong>M-şekilli birey</strong>: Birden fazla alanda uzmanlaşmış ve bu alanları birbiriyle entegre edebilen kişidir.</li></ul><p>Ürün geliştirme sürecinde herkes fikirler üretebilir. Ama önemli olan bu fikirleri <strong>doğru bir problem çözümüne dönüştürebilmektir</strong>. Bunun için de sürece en küçük yapı taşından başlamak gerekir: <strong>MVP</strong> (Minimum Viable Product).</p><p>Prototipleme aşamasında her şeyin mükemmel olması gerekmez. Bazen basit bir “mış gibi” yapmak bile fikirleri test etmek için yeterlidir. Burger King örneğinde olduğu gibi, tonlarca para ve zamana gerek kalmadan sade prototiplerle kullanıcıya ulaşmak mümkündür.</p><h4>Son Söz: Negatif Olmayan İnsanlarla Çalışın</h4><p>Başarılı ekipler, sadece çözüm üreten değil; <strong>çözümün bir parçası olmayı seçen insanlardan oluşur</strong>. Negatif enerji yayan kişiler süreci yavaşlatır. Oysa doğru insanlar, sorunları sahiplenir, birlikte üretir ve birlikte büyür.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2e29ed7ab9a1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Insider Staj Günlükleri — Bölüm 3]]></title>
            <link>https://medium.com/@severustark/insider-staj-g%C3%BCnl%C3%BCkleri-b%C3%B6l%C3%BCm-3-b5e724415d46?source=rss-b2a0870810fc------2</link>
            <guid isPermaLink="false">https://medium.com/p/b5e724415d46</guid>
            <category><![CDATA[insider]]></category>
            <category><![CDATA[staj]]></category>
            <dc:creator><![CDATA[Damla ARPA]]></dc:creator>
            <pubDate>Sun, 27 Jul 2025 09:53:07 GMT</pubDate>
            <atom:updated>2025-07-27T10:13:21.969Z</atom:updated>
            <content:encoded><![CDATA[<h3>Insider Staj Günlükleri — Bölüm 3</h3><p>Insider’da geçirdiğim bu haftada en çok dikkatimi çeken şey, iletişime verilen gerçek değerdi. Hem ekip içi etkileşimlerde hem de partnerlerle olan ilişkilerde iletişim sadece bir gereklilik değil, kültürün merkezinde yer alan bir öncelik. Üstelik bu, yalnızca sözde değil — gerçekten önemsenen, üzerine düşünülen ve sürekli geliştirilen bir alan. Belki de Insider’ın global başarılarının arkasındaki en güçlü etkenlerden biri de bu: İnsanların birbirini gerçekten dinlediği, anladığı ve birlikte hareket ettiği bir yapı.</p><h3><strong>Cengizhan Anıl Onay(Code Editors &amp; AI Tools)</strong></h3><p>Bu hafta katıldığımız eğitimde Anıl Bey bizlere yazılım dünyasının gelişen araçları ve yapay zekâ destekli geliştirme süreçleri hakkında oldukça kapsamlı bilgiler sundu. Eğitim, Visual Studio Code, WebStorm ve özellikle Cursor gibi modern kod editörlerinin sunduğu avantajları tanıyarak başladı. Cursor’ın LLM destekli özellikleri sayesinde, artık sadece kod yazmak değil; kodla iletişim kurmak mümkün hale geliyor.</p><p>Devamında “Prompt Engineering” konusuna geçildi. Yapay zekadan verimli şekilde faydalanmak için nasıl doğru prompt’lar yazmamız gerektiğini, kötü ve iyi prompt örnekleriyle karşılaştırmalı olarak öğrendik. Doğru sorular sormanın, doğru çözümlere ulaşmak için ne kadar kritik olduğunu net bir şekilde kavradık.</p><p>Limitasyonlar ve riskler başlığında ise 4 önemli konu dikkat çekiciydi:</p><ol><li>Yapay zekânın zaman zaman halüsinasyon görmesi,</li><li>Modellerin bilgi güncelliğinin sınırlı olması,</li><li>Güvenlik riskleri — özellikle API anahtarlarının paylaşılmaması gerektiği,</li><li>Ve belki de en insani olanı: Beyin tembelliği riski.</li></ol><p>Ancak bana göre eğitimin en etkileyici kısmı, interaktif ve gerçek zamanlı yapılan hands-on demo oldu. Kahoot’a benzer bir yapıda gerçekleşen canlı coding oturumu, teorik bilgilerin pratiğe dönüşmesini sağladı.Bu kısımda öğrendiğim bazı önemli kavramları açıklayacağım :</p><h4>1.WEB SOCKET:</h4><h4>HTTP</h4><p>Biz WebSocket’i kullanmadan, HTTP’nin nimetlerinden yararlanarak gerçek zamanlı olmasa da bunu simüle edebiliriz. Nasıl mı? <strong>Short polling</strong> ve <strong>Long polling</strong> yöntemleriyle.</p><p><strong>Short Polling:</strong><br> Bir senaryo düşünün: İki tane cihaz, iki tane client var ve aralarında WhatsApp gibi bir mesajlaşma uygulaması üzerinden konuşuyorlar. Bir tanesi diğerine mesaj attığında, mesajı alan client bu mesajın geldiğini öğrenmek istiyor. Bunun için backend’e (sunucuya) 1 saniye aralıklarla sürekli istek atıyor:</p><pre>GET /updates  <br>GET /updates  <br>GET /updates  <br>GET /updates ...</pre><p>Ta ki mesaj gerçekten gelene kadar. Yani mesaj henüz ulaşmadıysa backend her seferinde boş bir yanıt dönüyor çünkü içinde mesaj yok. Bu istekler sürekli gidiyor ama cevap gelmiyor. Bu yöntem hem gereksiz, hem verimsiz, hem de mantıklı değil.</p><p>Neden mantıklı değil? Çünkü her istek için bir TCP bağlantısı açılıyor. Bu da sistemde ekstra yük yaratıyor. Bunu yapan sadece 1 kişi değil, bin kişi olduğunu düşünün. Bin kişi sürekli olarak sunucuya “mesajım geldi mi?” diye soruyor ve sunucu her seferinde boş bir yanıt olarak döndürüyor. Bu, bandwith (bant genişliği) açısından oldukça kötü bir kullanım. Ayrıca client tarafında da sürekli kaynak tüketiliyor.</p><p><strong>Long Polling:</strong><br> Short polling’e göre daha mantıklı, ama hâlâ bizim istediğimiz kadar <strong>verimli</strong> ve <strong>ölçeklenebilir (scalable)</strong> değil. Biz bir çözüm üretiyorsak, bu çözümün scalable ve performanslı olması gerekir. Mühendis dediğimiz kişi, bir soruna en <strong>optimal</strong> ve <strong>uygulanabilir</strong> çözümü bulmalı ve onu uygulamalıdır.</p><p>Long polling şöyle çalışır:<br> Client, backend’e bir istek atar, örneğin GET /updates. Fakat backend bu isteği hemen cevaplamaz, <strong>suspend</strong> eder yani askıya alır. Daha sonra belirli bir event (tetikleyici bir olay) oluştuğunda — örneğin yeni veri geldiğinde — backend cevabı gönderir.</p><p>Buradaki problem şu: Bu istekler tarayıcı için hâlâ “uçuşta”dır (inflight request). Tarayıcı henüz bu isteğin gelip gelmediğini bilmez. Bir tane attı, gelmedi. İki tane attı, gelmedi. Böylece beş tane inflight request oluşur. Bunlar hâlâ cevap bekliyor. Bu da <strong>kötü bellek kullanımı (memory usage)</strong> anlamına gelir. Yani yine gerçek zamanlılık elde edemiyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nI7NfjyV-Oml66m7pE1F7A.jpeg" /></figure><p>Peki bunu nasıl çözeceğiz? İşte burada devreye WebSocket giriyor.</p><p><strong>WebSocket Nasıl Çalışır?</strong></p><p>Öncelikle client, sunucuya bir GET isteği gönderir. Biz buna <strong>handshake</strong> diyoruz. Gerçekten client ve server arasında bir anlaşma başlar. İsteğin içinde bir header bulunur: Connection: UpgradeBackend, bu isteği aldığında client’a 101 kodlu bir response döner:</p><p><strong>101 Switching Protocols</strong></p><p>Yani sunucu, client’a “artık HTTP konuşmayalım, WebSocket üzerinden devam edelim” der. Bu aşamaya da <strong>ACK (acknowledgement)</strong> denir.</p><p>Bu andan sonra client ile server arasındaki iletişim artık <strong>data frame</strong> üzerinden ilerler. Bu data frame içindeki tüm konuşmalar <strong>çift yönlü (full duplex)</strong> gerçekleşir. Yani hem server client’a konuşur, hem de client server’a. Üstelik <strong>eş zamanlı</strong> olarak.</p><p>Örneğin client bir mesaj gönderdi — tıpkı WhatsApp’ta Ali’nin Ahmet’e mesaj göndermesi gibi. Server bu mesajı aldıktan hemen sonra, WebSocket ile bağlı olan diğer client’a “sana mesaj geldi kardeşim” diyebilir. Bu tamamen <strong>gerçek zamanlı</strong> olur ve <strong>tek bir TCP bağlantısı</strong> üzerinden işler. İşte bu yüzden WebSocket <strong>gerçekten gerçek zamanlı</strong> bir çözümdür.</p><p>Her mesaj için ayrı bir HTTP request işlemediğimiz için:</p><ul><li><strong>Bandwidth</strong> verimli kullanılır,</li><li>Sistem çok daha <strong>scalable</strong> (ölçeklenebilir) hale gelir.</li></ul><p>Bu çözüm, 10.000 hatta 1.000.000 kullanıcıya bile cevap verebilecek kadar güçlüdür.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/792/1*JL9U9rEDVnX7NXySTw1HXA.png" /></figure><p><strong>Peki Ne Zaman WebSocket Kullanmamalıyız?</strong></p><p>Gerçekten gerçek zamanlı bir iletişime ihtiyaç duymuyorsanız, WebSocket kullanmamalısınız. Çünkü bu yapı, sisteminize gereksiz karmaşıklık katar. Düşük trafikli bir sistemde, az sayıda istek varsa HTTP, yani short polling ya da long polling gayet yeterli olabilir.</p><p>Örneğin 5 saniyede bir yapılan bir işlem için WebSocket kurmak mantıksız olur.</p><h4>Ekstra: Broadcast Nedir?</h4><p>WebSocket ile yalnızca iki uç nokta arasında değil, <strong>çoklu istemciler arasında da</strong> anlık iletişim kurulabilir. Broadcast, sunucuya bağlı olan tüm client’lara aynı anda mesaj göndermek anlamına gelir. Örneğin bir kullanıcı kanvasa bir şey çizdiğinde, bu <strong>“draw event”</strong> sunucuya iletilir. Sunucu ise bu olayı bağlı olan tüm client’lara <strong>broadcast</strong> eder:</p><blockquote><em>“Birisi bir şey çizdi, alın bu veriyi siz de kendi ekranınıza çizin.”<br> Bu şekilde tüm kullanıcılar </em><strong><em>eş zamanlı</em></strong><em> olarak aynı çizimi görebilir. Bu da WebSocket’in en önemli kullanım alanlarından biridir: </em><strong><em>gerçek zamanlı iş birliği.</em></strong></blockquote><h4>2.MCP(Model Context Protocol)</h4><p><strong>MCP nedir?</strong></p><p>MCP (Model Context Protocol), LLM’lerimizi (Large Language Models) harici veri kaynaklarına bağlamanın standartlaştırılmış bir yoludur. Bu protokolün yaratıcısı Anthropic’tir — yani aslında Claude’un geliştiricileri.</p><p>Peki, buradaki temel mantık nedir?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*H47_FK39ihmlkJT-lWqBwg.png" /></figure><p>MCP’den önce LLM’imiz, Slack API, Figma API, GitHub API gibi çeşitli servislerle doğrudan entegre olabiliyordu. Ancak bunu gerçekleştirebilmek için, her API’ye özel kod yazmak ve tüm implementasyon detaylarını modele uygun şekilde oluşturmak gerekiyordu. Yani modelin, örneğin Slack API’yi nasıl kullanacağını, GitHub API ile nasıl etkileşime geçeceğini birebir bilmesi gerekiyordu. Bu da şu demekti: Kodu her modele özel yazmamız gerekiyordu. Yeni bir model veya versiyon çıktığında ise tüm süreci yeniden baştan geliştirmek gerekiyordu.</p><p>İşte MCP’nin getirdiği yenilik burada devreye giriyor. Artık modeller, function call yapma konusunda fine-tune ediliyor ve birçok farklı API’yi kullanabilmeleri için ortak bir yapı (unified API) tanımlanıyor. Bu yapıya da MCP deniyor.</p><p>MCP basitçe bir server ve bir client yapısından oluşuyor. Model, client ile konuşuyor; client da MCP server’da tanımlı olan tool’ların açıklamalarına bakarak hangi tool’un kullanılacağına karar veriyor. İşte bu kadar basit.</p><h4>MCP neden ortaya çıktı?</h4><p>Sorun oldukça basitti: LLM’lerin bilgi veri tabanı (knowledge store) sınırlıdır. Yani yalnızca eğitildikleri veri setiyle sınırlı çalışırlar. Güncel bilgilerden izole olmuşlardır. Bu izolasyon, her tool entegrasyonu için özel, yani “custom” yapıların geliştirilmesini gerektiriyordu.</p><p>Bu da bizi bir <strong>n*m</strong> problemine götürüyor:<br> n tane modelimiz, m tane tool’umuz varsa, her modelin her tool ile özel bir şekilde konuşabilmesi için <strong>n*m adet entegrasyon</strong> yapılması gerekiyordu. Bu da büyük bir kaos, gereksiz geliştirme ve bakım yükü demekti.</p><p>MCP bu sorunu çözüyor. Modeli function call yapabilir şekilde fine-tune ediyoruz ve MCP ile bu çağrıları <strong>standardize</strong> hale getiriyoruz. Böylece her LLM’e ayrı ayrı kod yazmak zorunda kalmıyoruz.</p><h4>MCP ne sağlar?</h4><p>MCP, LLM’lere function call işlemini öğrenmeleri için bir yöntem sunar. Bu yöntem sayesinde:</p><ul><li>Her tool için ayrı ayrı entegrasyon yazmak gerekmez.</li><li>Gereksiz bakım ve geliştirme yükü ortadan kalkar.</li><li>Sistemler arasında ölçeklenebilirlik (scalability) sağlanır.</li><li>LLM, elindeki araçlara (tool’lara) bakarak neyi yapabileceğine <strong>kendisi karar verir</strong>.</li></ul><p>MCP = <strong>Tool Discovery for LLMs</strong><br> Yani model, kendi erişebildiği tool’lara bakar ve “Ben şunları yapabiliyormuşum” der. Bu sayede ihtiyaç duyduğu işlemleri doğru şekilde yönlendirebilir.</p><h4>MCP Mimarisi</h4><p>MCP mimarisini nasıl hayal etmeliyiz?</p><p>Bir host düşünün. Bu bir VS Code, IDE, Notepad veya başka bir editor olabilir. Bu host’un içinde bir MCP client bulunur. Ayrıca LLM ya host’un içinde yer alır ya da host, bir LLM ile API üzerinden konuşur. Bir ya da birden fazla MCP server da olabilir.</p><p>Bu MCP server’lar:</p><ul><li>Local veya remote bir veritabanına bağlı olabilir.</li><li>Host’tan gelen kullanıcı sorgularına göre ilgili tool’u bulabilir.</li><li>LLM’e bağlanarak işlemi gerçekleştirmek üzere yönlendirme yapabilir.</li></ul><p>Örneğin:<br> Kullanıcı “Ankara’da hava durumu nasıl?” diye sorduğunda, LLM kendi eğitildiği veri setinin dışında olduğu için bu soruya cevap veremez. Ancak MCP client, LLM’e şunu söyler: “Senin şu tool’ların var: getWeather.”<br> Tool’un açıklamasını okuyan model, bu tool’u çağırarak MCP server üzerinden hava durumu bilgisini alır ve kullanıcıya döner.</p><p>Buradaki önemli ayrım:</p><ul><li><strong>Resources</strong>: Statik ya da dinamik veri kaynaklarıdır. Hangi verinin kullanılacağına <strong>client karar verir</strong>.</li><li><strong>Tools</strong>: Yürütülebilir (executable) fonksiyonlardır. Hangi tool’un kullanılacağına <strong>model karar verir</strong>.</li></ul><h4>Süreç Nasıl İşliyor? (Kısa Özet)</h4><ol><li>Kullanıcı LLM’e bir soru sorar: “Bugün Ankara’da hava nasıl?”</li><li>Model, bu bilgiye sahip olmadığını ve dış veri kaynağına (function call) ihtiyaç duyduğunu bilir.</li><li>MCP client ile MCP server arasında daha önceden bir bağlantı kurulmuştur. Client, modelin erişebileceği tool ve resource listesini almıştır.</li><li>LLM, listede “getWeather” tool’unu ve açıklamasını görerek bunu kullanması gerektiğine karar verir.</li><li>Tool’u çağırır.</li><li>MCP server gelen request’i işler, schema validation yapar ve external servise (örneğin bir hava durumu API’si) istek atar.</li><li>Gelen veriyi formatlar, client’a gönderir.</li><li>Client da bu veriyi alır, model üzerinden kullanıcıya döner.</li></ol><p>Bu sayede model dış veri kaynaklarından anlamlı ve güvenilir bilgi çekebilir hale gelir.</p><h4>Transport Katmanı</h4><p>MCP ile konuşurken iki farklı iletişim yöntemi kullanılabilir:</p><ul><li>stdin/stdout → Local kullanımlar için (client ve server aynı makinedeyse)</li><li>HTTP/SSE → Remote kullanımlar için</li></ul><p>MCP, dış veri kaynaklarıyla konuşabilen modeller yaratmanın en önemli yapı taşlarından biri haline geliyor. Web search gibi ama daha güvenilir, daha kontrollü ve daha entegrasyon dostu — çünkü API standardı ile çalışıyor.</p><h3>3.Redis ve Caching</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/980/1*WhZ1PlrFiKmS8N1vCoKmnQ.png" /></figure><p>Kullanıcımız , telefonundan, bilgisayarından ya da dizüstü bilgisayarından bir web sitesine giriyor. Bu, bizim için bir <strong>client</strong> demektir. User, giriş yaptığında bilgilerini almak için kendi backend sunucusuna bir istek (GET request) gönderir:<br> GET /api/user/1<br> (ID değeri burada 1&#39;dir.)</p><p>Bu istek önce API router’a, ardından da user rotasına ulaşır. Gönderilen ID (örneğin 1), bir ORM (Object-Relational Mapping) aracılığıyla veritabanına bir sorgu olarak iletilir. Bu sorgu, veritabanının <strong>diskine</strong> yazılır ya da diskten okunur. Yani burada klasik bir <strong>input/output (I/O)</strong> işlemi gerçekleşir.</p><p>Ancak bu işlem yavaştır. Neye göre? <strong>Redis’e göre çok daha yavaş.</strong></p><p>Veritabanı diskinden gelen yanıt, tekrar backend’e, ardından da client’a gönderilir. Böylece kullanıcı, örneğin şu bilgileri öğrenmiş olur:</p><ul><li>Kim olduğu</li><li>Hesabını ne zaman açtığı/kapatttığı</li><li>Ne satın aldığı vb.</li></ul><h4>Peki bu yapıda geliştirmek istediğimiz veya sorunlu gördüğümüz ne?</h4><p>Aslında Redis olmadan da sistem çalışır. Ama <strong>yüksek trafik altında çalışmaz</strong> — ya da <strong>verimli çalışmaz</strong>. Neden mi?</p><h4>Neden Redis’e İhtiyacımız Var?</h4><p>Şöyle bir senaryo düşünelim:<br> Sunucuya aynı anda <strong>10.000 kişi</strong> bağlanıyor ve her biri <strong>10 saniye boyunca</strong> aynı route’a (örneğin /api/user) istek atıyor. Yani her kullanıcı için tekrar tekrar veritabanına sorgular gönderiliyor.</p><p>Bu durumda:</p><ul><li>10.000 bağlantı = 10.000 ayrı veritabanı sorgusu</li><li>Her biri I/O işlemi (disk erişimi)</li><li>Her seferinde <strong>veritabanı bağlantısı (connection pool)</strong> açılıyor</li></ul><p>Sonuç?<br> Bu süreç <strong>çok maliyetli ve yavaş</strong>.<br> İşte bu noktada devreye <strong>Redis</strong> giriyor.</p><h4>Redis ile Ne Yapıyoruz?</h4><p>Redis, genelde bir <strong>cache server</strong> olarak kullanılır. Yani biz, veritabanının döndüğü verileri alıp <strong>önbelleğe (cache memory)</strong> kaydediyoruz.<br> Bu cache memory, diske erişimden <strong>kat kat daha hızlıdır</strong>. (Ancak RAM tabanlı olduğu için daha maliyetlidir.)</p><h4>Senaryo: Redis ile User Bilgisi Getirme</h4><ol><li>Kullanıcı GET /api/user/1 isteğini gönderir.</li><li>Backend sunucusu önce veritabanına <strong>gitmez.</strong></li><li>Önce Redis’e sorar:<br> “Hey Redis, bu kullanıcı bilgisi sende var mı?”</li></ol><blockquote><em>Bu kontrol için bir fonksiyon çalışır: </em><em>getCachedUser()</em></blockquote><p>4.Redis bir <strong>key-value</strong> veri tabanıdır. getCachedUser() fonksiyonu, ID&#39;si 1 olan kullanıcıyı Redis içinde arar.</p><h4>İki Olası Durum:</h4><h4>1. Hit (Cache’te bulduk):</h4><ul><li>Redis, aradığımız veriyi key-value olarak tutuyorsa:</li><li>Veritabanına hiç gitmeden,</li><li>Doğrudan client’a veri döneriz.</li><li>Connection açılmadığı için <strong>çok daha hızlı ve maliyetsizdir.</strong></li></ul><h4>2. Miss (Cache’te yok):</h4><ul><li>Redis’te veri bulunmazsa:</li><li>Mecburen veritabanına sorgu gönderilir.</li><li>Bağlantı açılır, veri alınır.</li><li><strong>Fakat döndürmeden önce bu veri Redis’e yazılır.</strong></li></ul><blockquote><em>Bunun için ayrı bir fonksiyon çalışır: </em><em>cacheUser()<br> Ayrıca, bu verinin bir </em><strong><em>TTL (Time To Live)</em></strong><em> değeri olur.<br> Yani: &quot;Bu cache, x saniye sonra silinebilir&quot; denir.</em></blockquote><h4>İlk Request Neden Maliyetli?</h4><p>İlk istek (yani Miss durumunda):</p><ul><li>Redis’e bakılır (veri yok),</li><li>Veritabanına gidilir (maliyet),</li><li>Veritabanından alınan veri Redis’e kaydedilir (ekstra işlem),</li><li>Sonra client’a veri döner.</li></ul><p>Ancak <strong>ikinci request</strong> artık farklıdır:</p><ul><li>Redis’e tekrar sorulur,</li><li>Bu kez veri vardır (Hit),</li><li>Veritabanına hiç uğramadan,</li><li>Doğrudan client’a veri döner.</li></ul><p>İlk istek pahalı olabilir, ama <strong>ikinci ve sonraki istekler çok daha hızlıdır.</strong></p><p><em>Örnek: 10.000 kişi 10 saniye boyunca aynı endpoint’e istek atıyor.<br> İlk istek maliyetlidir, ama 2., 3., 4…. tüm istekler Redis’ten döner.<br> Yani </em><strong><em>yüksek trafik altında performansımız dramatik şekilde artar.</em></strong></p><h4>Redis Ne Tür Veriler Tutabilir?</h4><p>Redis sadece key-value değil, aynı zamanda:</p><ul><li>String</li><li>List</li><li>Set</li><li>Sorted Set</li><li>Hash</li></ul><p>gibi veri yapıları da tutabilir. Bu sayede birçok farklı kullanım senaryosu mümkündür.</p><ul><li>Redis ile <strong>yüksek trafikte bile sistemimiz hızlı çalışır.</strong></li><li>Gereksiz veritabanı bağlantılarını <strong>önler.</strong></li><li>Cache sayesinde istemciler veriye daha hızlı erişir.</li><li>TTL (zaman aşımı) ile güncel olmayan verilerin otomatik temizliği sağlanır.</li></ul><h3>Bünyamin Gökkaya (CSS &amp; Layouts)</h3><p>Bünyamin Bey, temel HTML anlatımının ardından katılımcılara <strong>CSS ile sayfa düzeni (layout)</strong> konusuna giriş yaptı. Bu bölümde özellikle modern web tasarımında sayfa yapısını oluşturmada kullanılan CSS tekniklerine odaklanıldı.</p><h4>1. Layout’a Giriş</h4><ul><li>Layout (yerleşim düzeni) kavramının ne olduğu, kullanıcı deneyimi üzerindeki etkisi anlatıldı.</li><li>HTML elementlerinin görsel yerleşimini düzenlemek için CSS’in nasıl devreye girdiği açıklandı.</li></ul><h4>2. Kullanılan Temel Layout Yöntemleri</h4><ul><li>Block &amp; Inline elementler</li><li>display kullanımı:</li><li>block, inline, inline-block, none</li><li><strong>Float ve Clear</strong>: Eskiden kullanılan klasik layout yöntemi olarak tanıtıldı.</li><li><strong>Flexbox</strong>:</li><li>Ana eksen, çapraz eksen kavramları</li><li>justify-content, align-items, flex-direction</li><li>Responsive tasarım için kullanım örnekleri</li></ul><h4>3. Responsive Layout’lara Giriş</h4><ul><li>Mobil uyumlu tasarımlar için media queries kullanımı kısaca tanıtıldı.</li><li>W3Schools üzerinden bazı örnek responsive sayfa yapıları gösterildi.</li></ul><h3>Berke Altıparmak (JavaScript Basics)</h3><p><strong>Değişken Nedir?</strong><br> Değişken, veri depolamak için kullanılan bir kaptır. JavaScript’te 3 şekilde değişken tanımlanabilir:</p><ul><li>var → (Eski yöntem – artık önerilmez)</li><li>let → (Blok kapsamında geçerli – değişebilen değerler için önerilir)</li><li>const → (Blok kapsamında geçerli – sabit değerler için kullanılır)</li></ul><p><strong>Değişken Tanımlama Kuralları:</strong></p><ul><li>Harf, _ (alt çizgi) veya $ ile başlamalıdır.</li><li>Sayı ile başlayamaz.</li><li>Büyük/küçük harf duyarlıdır (myVar ≠ myvar)</li><li>let, function gibi JavaScript’e ait anahtar kelimeler kullanılamaz.</li></ul><p><strong>Veri Türleri:</strong></p><ul><li>String → Metin verileri</li><li>Number → Sayısal değerler (tam sayı, ondalıklı)</li><li>Boolean → true veya false</li><li>Array → Liste veri tipi</li><li>Object → Anahtar-değer çiftleri</li><li>null ve undefined değerleri</li></ul><p><strong>Hoisting (Yukarı Taşınma):</strong></p><ul><li>var ile tanımlanan değişkenler kapsamın başına taşınır, ancak tanımsız (undefined) olarak başlatılır.</li><li>let ve const ise tanımlanmadan önce kullanılamaz (Temporal Dead Zone – geçici ölü bölge).</li></ul><p><strong>Fonksiyon Nedir?</strong><br> Fonksiyon, belirli bir görevi yerine getiren ve tekrar kullanılabilen kod bloklarıdır. Kodun organize edilmesini ve tekrar kullanımını sağlar.</p><p><strong>Fonksiyon Türleri:</strong></p><ul><li><strong>Klasik Fonksiyon Tanımları</strong></li><li><strong>Arrow Functions (=&gt;)</strong> → Daha kısa sözdizimi</li><li><strong>Anonim Fonksiyonlar</strong> → İsimsiz fonksiyonlar, genellikle callback olarak kullanılır</li><li><strong>Callback Functions</strong> → Bir başka fonksiyona argüman olarak verilen fonksiyonlar</li><li><strong>Higher-Order Functions</strong> → Fonksiyonu argüman olarak alan veya fonksiyon döndüren fonksiyonlar</li></ul><p><strong>Döngü Nedir?</strong><br> Bir koşul sağlandığı sürece aynı kod bloğunu tekrar tekrar çalıştırmamızı sağlar. Tekrarlı işlemleri otomatik hale getirir.</p><p><strong>Döngü Türleri:</strong></p><ul><li>while → Koşul doğru olduğu sürece çalışır (koşul önceden kontrol edilir)</li><li>do-while → En az bir kez çalışır, sonra koşula bakılır</li><li>for-of → Dizi (array) ve iterable nesneler üzerinde döner</li><li>for-in → Nesnelerin anahtarları üzerinde döner</li></ul><p><strong>Diğer Yapılar:</strong></p><ul><li>break → Döngüyü tamamen durdurur</li><li>continue → Sadece mevcut döngü adımını atlar</li><li><strong>Nested Loops</strong> → İç içe döngüler</li><li><strong>Array ve String Üzerinde Dönme</strong></li></ul><p><strong>DOM Nedir?</strong><br> DOM (Document Object Model), web sayfalarını temsil eden ve JavaScript ile etkileşim kurmamızı sağlayan bir modeldir.</p><p><strong>JavaScript ile DOM Üzerinde Yapılabilecekler:</strong></p><ul><li>HTML elementlerine erişme</li><li>Element içeriğini değiştirme</li><li>Yeni element oluşturma ve ekleme</li><li>Event Listener (Olay dinleyicisi) ekleyerek kullanıcı etkileşimlerine yanıt verme</li></ul><p><strong><em>Örnek: Bir butona tıklanınca yazının rengini değiştirme gibi işlemler DOM ile gerçekleştirilir.</em></strong></p><h3>Anıl Nuhoğlu(JS Events &amp; Web APIs)</h3><p>Anıl Bey, bu eğitimde <strong>JavaScript’te olay yönetimi (event handling)</strong> ve <strong>Web API kullanımı</strong> konularını detaylı bir şekilde ele aldı. Eğitim boyunca tüm konular, kendi hazırladığı ve uygulamalı örneklerle zenginleştirilmiş özel web arayüzü üzerinden işlendi.</p><blockquote><a href="https://js-events-inky.vercel.app/">https://js-events-inky.vercel.app/</a></blockquote><p>Bu bağlantı, eğitimin tüm başlıklarını, kod örneklerini ve anlatımı barındırmakta olup incelemek isteyenler için güzel bir kaynak.</p><h3>Mehmet Sel (HTML Basics)</h3><p>Mehmet Sel, bu eğitimde <strong>HTML’in temel yapı taşlarını</strong> detaylı bir şekilde anlattı. Eğitim süresince sadece teorik bilgiler değil, aynı zamanda <strong>canlı uygulamalar</strong> da yapıldı.</p><p>Özellikle web sayfalarının yapısını daha iyi anlamak için Google gibi popüler siteler üzerinden <strong>tarayıcı geliştirici araçları (Inspect / İncele)</strong> kullanılarak gerçek örnekler incelendi. Öğrencilere HTML etiketlerinin nasıl çalıştığı, nerede ve nasıl kullanıldığı doğrudan sayfa üzerinden gösterildi.</p><h3>Ceyhun Alyeşil — Quality Assurance (QA)</h3><p>Bu eğitimde Ceyhun Bey, kalite süreçlerini yalnızca otomasyon testlerine indirgemeyen; manuel (elle) testlerin kritik rolünü vurgulayan kapsamlı bir perspektif sundu. Eğitimin en dikkat çekici yanlarından biri, <strong>o</strong>tomasyonun her zaman her şeyi yakalayamayacağına dair verdiği somut örneklerdi. Özellikle bazı hata türlerinin zamanla sistemin evrilmesiyle birlikte değiştiğini, bu nedenle manuel kontrollerin güncelliğini ve önemini hiçbir zaman yitirmediğini gerçek projelerden aktardığı kişisel tecrübeler ile açıkladı.</p><p>Ceyhun Bey, yalnızca teknik test araçlarının nasıl çalıştığını değil, bir QA uzmanının sahip olması gereken <strong>d</strong>üşünce yapısını, sorgulama refleksini ve risk farkındalığını da bizlere kazandırmayı hedefledi.</p><p>Testin 7 temel prensibini ele aldı:</p><ol><li>Test etmek hataların varlığını gösterir</li><li>Tüm ihtimaller test edilemez</li><li>Teste erken başlamak daha verimlidir</li><li>Hatalar genellikle belli noktalarda kümelenir</li><li>Aynı testler sürekli uygulanırsa yeni hatalar yakalanmaz</li><li>Test bağlama (ürüne, kullanıcıya, sektöre) göre değişir</li><li>Hata olmaması, ürünün doğru çalıştığı anlamına gelmez</li></ol><p>Bunlara ek olarak, <strong>QA süreçlerinde yaygın olarak kullanılan %80 — %20 kuralı (Pareto Prensibi)</strong> üzerinde durularak, yazılımdaki hataların büyük çoğunluğunun genellikle kodun küçük bir bölümünden kaynaklandığı vurgulandı. Bu nedenle, <strong>test odağının stratejik şekilde belirlenmesinin</strong> önemi açıkça ortaya kondu.</p><blockquote><strong><em>“Test sadece teknik bir görev değil, kaliteye olan zihinsel bir bağlılıktır.”</em></strong></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b5e724415d46" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Insider Staj Günlükleri — Bölüm 2]]></title>
            <link>https://medium.com/@severustark/insider-staj-g%C3%BCnl%C3%BCkleri-b%C3%B6l%C3%BCm-2-efbd66d97a17?source=rss-b2a0870810fc------2</link>
            <guid isPermaLink="false">https://medium.com/p/efbd66d97a17</guid>
            <category><![CDATA[staj]]></category>
            <category><![CDATA[insider]]></category>
            <dc:creator><![CDATA[Damla ARPA]]></dc:creator>
            <pubDate>Sun, 20 Jul 2025 11:38:12 GMT</pubDate>
            <atom:updated>2025-07-20T11:57:34.326Z</atom:updated>
            <content:encoded><![CDATA[<h3>Insider Staj Günlükleri — Bölüm 2</h3><p>Bu hafta edindiğim en değerli tecrübelerden biri, şirketteki insanlarla yaptığım sohbetlerde fark ettiğim; herkesin karakteri ve farkındalığıyla en iyi olduğu alanda çalışıyor olması ve bu durumun bana farklı bir bakış açısı kazandırmasıydı. Insider, herkesin iyi olduğu noktayı ön plana çıkarıyor ve bu sayede inanılmaz işler ortaya çıkıyor.</p><h3>Muhammet Furkan Demiral (What/How a QA does !)</h3><h4>Quality Assurance Team</h4><p>Yazılım geliştirme süreçlerinde kalitenin korunması, müşteri memnuniyetinin artırılması ve sürdürülebilir ürünler oluşturulması adına Quality Assurance (QA) ekibinin rolü kritik önemdedir. Bu yazıda, kalite kavramından yazılım test yaşam döngüsünü (STLC), test süreçlerinin evriminden etkili hata raporlamaya kadar QA dünyasına dair temel konulara teknik bir perspektiften ışık tutuyoruz.</p><h4>Kalite Nedir?</h4><p>Kalite, genel anlamda “standartlara uygunluk” olarak tanımlanır. Ancak yazılım sektöründe kalite, <strong>müşteri beklentilerini karşılamakla eşdeğerdir</strong>. Özellikle Growth Management Platform gibi hızlı iterasyon gerektiren sistemlerde, kalite yalnızca kodun düzgün çalışması değil; aynı zamanda sürdürülebilir, ölçeklenebilir ve kullanıcı dostu bir deneyim sunmaktır.</p><h4>Yazılımda Kalite ve Kontrol</h4><p>Yazılım testi yalnızca hata bulma aracı değildir; aynı zamanda kalite güvencesinin ayrılmaz bir parçasıdır. Kalite kontrol (QC), uygulamanın çıktısını değerlendirirken, kalite güvence (QA) sürecin kendisini iyileştirmeyi hedefler.</p><ul><li>QC = Ürün üzerinde kontrol</li><li>QA = Süreçlerin kontrolü</li></ul><p>Bu sayede yalnızca çalışan bir ürün değil, aynı zamanda sürdürülebilir, güvenilir ve kullanıcı odaklı bir sistem elde edilir.</p><h4>SDLC ve STLC Farkı</h4><ul><li><strong>SDLC (Software Development Life Cycle):</strong> Gereksinim analizi → Tasarım → Geliştirme → Test → Dağıtım → Bakım adımlarını kapsayan genel yazılım yaşam döngüsüdür.</li><li><strong>STLC (Software Testing Life Cycle):</strong> SDLC’nin “test” adımının detaylandırılmış halidir. Test planlaması, test case yazımı, ortam kurulumu, test yürütme ve kapanış gibi aşamalardan oluşur.</li></ul><p><strong><em>Kritik fark:</em></strong> SDLC tüm süreci kapsarken, STLC sadece test evresine odaklanır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/923/1*g2VofIBup2u4dYkNppnDBA.png" /></figure><h4>QA Neden Gereklidir?</h4><ul><li>QA süreçleri, sadece hataları tespit etmeyi değil, <strong>hataları oluşmadan önlemeyi</strong> amaçlar.</li><li>Zaman, maliyet ve kaynak verimliliği sağlar.</li><li>Yasal veya sözleşmeye dayalı yükümlülüklerin yerine getirilmesini güvence altına alır.</li><li>Kullanıcı memnuniyetini artırır, çünkü son ürün beklentilere daha uygun olur.</li></ul><h4>Test Sürecinin Evrimi</h4><p>Yazılım testi artık yalnızca hata bulma eylemi değildir. Günümüzde test, aşağıdaki modern yaklaşımları içerecek şekilde evrilmiştir:</p><ul><li>Fonksiyonel, yıkıcı ve otomasyon testleri</li><li>Agile ve sürekli test (continuous testing)</li><li>CI/CD entegrasyonu</li><li>Yapay zekâ destekli test senaryoları</li></ul><p>Test artık yalnızca bir aktivite değil, bir <strong>kültür ve bakış açısıdır.</strong></p><h4>Doğrulama ve Geçerleme (Verification vs Validation)</h4><ul><li>Verification (Doğrulama): Doğru şekilde mi geliştirildi?</li><li>Validation (Geçerleme): Doğru ürün mü geliştirildi?</li></ul><p>Bu ayrım, QA süreçlerinde sıkça karşılaşılan ancak çoğu zaman karıştırılan iki kavramın teknik temelini oluşturur.</p><h4>Tester Mindset: Testçinin Bakış Açısı</h4><p>Başarılı bir QA uzmanı yalnızca teknik bilgiye değil, aynı zamanda şu niteliklere de sahip olmalıdır:</p><p>Detay odaklı — Sorgulayıcı — Sürekli öğrenmeye açık — Analitik — Sistematik<br>Kullanıcı odaklı — Risk bazlı yaklaşım — Takım çalışması — Sabırlı ve kararlı</p><h4>Yazılım Testinin 7 Temel İlkesi (7 Principles of Software Testing)</h4><ol><li><strong>Tüm olası testleri yapmak imkansızdır.</strong><br> <em>Exhaustive testing is not possible.</em></li><li><strong>Hatalar genellikle aynı modülde kümelenir.</strong><br> <em>Defect clustering.</em></li><li><strong>Aynı testler tekrarlandığında yeni hata bulunamaz.</strong><br> <em>Pesticide paradox.</em></li><li><strong>Testler hata olmadığını değil, hata olduğunu gösterir.</strong><br> <em>Testing shows presence of defects.</em></li><li><strong>Hatasız yazılım, ihtiyaçları karşılayan yazılım demek değildir.</strong><br> <em>Absence of error is a fallacy.</em></li><li><strong>Erken yapılan test daha az maliyetlidir.</strong><br> <em>Early testing.</em></li><li><strong>Test bağlama (context) bağlıdır.</strong><br> <em>Testing is context dependent.</em></li></ol><h4>Etkili Bir Hata Raporu Neden Önemlidir?</h4><p>İyi yazılmış bir bug report:</p><ul><li>Geliştiricilerin hatayı hızlıca anlamasını sağlar.</li><li>Hataların üretime taşınmasını önler.</li><li>Test ve geliştirme ekipleri arasında <strong>verimli iletişim</strong> kurar.</li><li>Gelecek sürümler için <strong>belge niteliği</strong> taşır.</li></ul><p>Bug Report Template:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*A8m_sVySB02od51jfozlrQ.png" /></figure><h4>Sonuç</h4><p>Kaliteli yazılım, yalnızca işlevsel değil; aynı zamanda hatalardan arındırılmış, güvenilir ve sürdürülebilir olmalıdır. Bunun için yalnızca test etmek değil, doğru zamanda, doğru yöntemle test etmek gerekir.</p><p><strong>STLC süreçlerini iyi yönetmek, etkili test ilkelerine bağlı kalmak ve güçlü bug report’lar yazmak, QA ekiplerinin yazılım başarısına olan katkısını maksimize eder.</strong></p><p>Kaynaklar ve Ek Okumalar :</p><ul><li><a href="https://roadmap.sh/qa">QA Roadmap: Learn to become a modern QA engineer</a></li><li><a href="https://www.linkedin.com/pulse/qa-engineer-roadmap-mejbaur-bahar-fagun/">QA Engineer Roadmap 🚀</a></li></ul><h3>Bulutay Saraç(Clean Code ,Git,Debugging)</h3><p>Yazılım geliştirme dünyasında yalnızca çalışan kod yazmak yeterli değildir. Kodun okunabilir, sürdürülebilir ve hatalardan arındırılmış olması gerekir. Bu noktada <strong>Clean Code (Temiz Kod)</strong> yaklaşımı, <strong>Debugging (Hata Ayıklama)</strong> becerisi ve <strong>Git</strong> versiyon kontrol sistemi devreye girer. Bu yazıda bu üç temel konuyu hem teorik hem de pratik yönleriyle inceleyeceğiz.</p><h4>1. Clean Code (Temiz Kod) Nedir?</h4><p><strong>Clean Code,</strong> yalnızca çalışmakla kalmayıp, aynı zamanda anlaşılabilir,<strong> </strong>sürdürülebilir ve geliştirilebilir olan koddur. Temiz kod yazarken hedef, gelecekte bu kodu geliştirecek kişinin (hatta bizzat sizin) zorlanmadan<strong> </strong>kodu okuyabilmesi ve değiştirebilmesidir.</p><blockquote><em>“Temiz kod, kendini açıklayan koddur. Yorum satırlarına ihtiyaç duymadan niyetini belli eder.”</em></blockquote><h4>Felsefesi</h4><ul><li><strong>Okunabilirlik &gt; Kısa Yol</strong>: Performans gerekmedikçe anlaşılırlık her zaman önceliklidir.</li><li><strong>Anlamlı İsimlendirme</strong></li><li><strong>Basitlik</strong>: Gereksiz soyutlamalardan kaçın.</li><li><strong>Küçük Birimlere Bölme</strong>: Tek sorumluluk prensibi.</li><li><strong>Sürekli İyileştirme</strong>: Refactor etmekten çekinme.</li></ul><h4>Benzer Yaklaşımlar</h4><ul><li><strong>YAGNI</strong> (You Aren’t Gonna Need It)</li><li><strong>SOLID Prensipleri</strong></li><li><strong>DRY</strong> (Don’t Repeat Yourself)</li><li><strong>TDD</strong> (Test-Driven Development)</li></ul><h4>10 Temel Temiz Kod Prensibi</h4><ol><li>Anlamlı İsimlendirme</li><li>Küçük Fonksiyonlar Yaz</li><li>Tek Sorumluluk Prensibi (SRP)</li><li>Yinelemeden Kaçın (DRY)</li><li>Gereksiz Kod Yazma (YAGNI)</li><li>Kodun Okunabilirliğini Öncelikli Tut</li><li>Basitlikten Şaşma (KISS)</li><li>Hataları Anlamlı Yönet</li><li>Test Edilebilir Kod Yaz</li><li>Gereksiz Yorumlardan Kaçın</li></ol><p>Her prensibe ait örnek kodlar eğitim sırasında ele alındı. Bu prensiplerin gerçek dünyada uygulanması, projelerin ölçeklenebilirliği açısından kritik öneme sahiptir.</p><h4>2.Code Review</h4><p>Code review, geliştirilen kodun başka bir geliştirici tarafından incelenmesidir. Genellikle PR (Pull Request) açılarak yapılır. Kod okunur, yorumlanır ve iyileştirme önerileri verilir. Kod onaylandığında ana dala (main/master) merge edilir.</p><h4>3. Debugging (Hata Ayıklama)</h4><p>Debugging, yazılım geliştirme sürecinde hataların nedenini bulma, analiz etme ve düzeltme sürecidir.</p><blockquote><em>Debugging = Hatanın izini sürmek + Davranışı anlamak + Çözmek</em></blockquote><h4>Neden Önemlidir?</h4><ul><li>Kod her zaman beklendiği gibi çalışmaz.</li><li>Hataların nerede oluştuğu her zaman açık değildir.</li><li>Geliştirme sürecinin büyük kısmı debugging’e gider.</li></ul><h4>Debugging Araçları</h4><ul><li><strong>Tarayıcı Geliştirici Araçları</strong> (Chrome DevTools, Firefox DevTools)</li><li><strong>IDE Debugger</strong> (VS Code, GoLand)</li><li><strong>Logging</strong> (Loglama ile davranış analizi)</li><li><strong>Delve, GDB</strong> (Go ve sistem dilleri için)</li></ul><h4>JavaScript Debugging (DevTools)</h4><p>Chrome DevTools, kodun satır satır izlenmesi, değişkenlerin gözlenmesi ve hata tespiti için yaygın olarak kullanılır.</p><p><strong>DevTools’un Temel Sekmeleri:</strong></p><ul><li><strong>Elements</strong>: HTML/CSS analiz</li><li><strong>Console</strong>: JS komutları &amp; loglar</li><li><strong>Sources</strong>: Breakpoint ile adım adım izleme</li><li><strong>Network</strong>: API çağrıları</li><li><strong>Application</strong>: LocalStorage, Cookie vs.</li></ul><h4>Go API Debugging</h4><p><strong>Delve Debugger</strong> ile çalışan Go servisleri adım adım izlemek, değişkenleri görmek ve performans izlemek mümkündür.</p><h4>Logging ile Debugging</h4><p>Kodun çeşitli noktalarına log satırları eklenerek akış ve veri analizi yapılır. Özellikle dağıtık sistemlerde en etkili hata ayıklama yöntemlerinden biridir.</p><h4>Git: Temel Versiyon Kontrolü</h4><h4>Git Clone</h4><p>Uzak bir Git reposunun yerel kopyasını oluşturur.</p><pre>git clone https://github.com/kullanici/proje.git<br>git clone git@github.com:kullanici/proje.git</pre><h4>Branch (Dal)</h4><p>Kodun bağımsız bir kopyasında geliştirme yapmaya olanak tanır.</p><pre>git checkout -b feature/OPT-169278</pre><h4>Commit</h4><p>Yapılan değişiklikleri Git’e kaydeder.</p><pre>git add .<br>git commit -m &quot;OPT-169278 1 new: inshoppingcart add product getter service&quot;</pre><h4>Push &amp; Pull Request (PR)</h4><pre>git push --set-upstream origin feature/OPT-169278</pre><p>Push işleminden sonra GitHub’da PR (Pull Request) açılır ve kodun ana dala eklenmesi için review süreci başlatılır.</p><h4>Sonuç</h4><p>Clean Code prensipleri, debugging becerileri ve Git gibi versiyon kontrol sistemleri yazılım geliştiricilerin en temel taşlarıdır. Bu bilgiler, sadece bugünkü yazılımlar için değil, gelecekteki sürdürülebilir sistemler için de vazgeçilmezdir.</p><p>Kod yazarken okunabilirliği, hata ayıklarken sistematik yaklaşımı ve versiyon kontrolü yaparken işbirliğini merkeze koyan her yazılımcı, mesleğinde fark yaratacaktır.</p><blockquote><em>“Kod yalnızca makine için değil, insanlar için de yazılır.”</em></blockquote><h3>Deniz Doğan(Algorithms &amp; Problem Solving)</h3><p><strong>Giriş: Verimli Kodlama</strong></p><blockquote>Kod yazmak kolaydır.<br>Verimli kod yazmak ise bir sanattır.</blockquote><p>Modern uygulamalarda <strong>performans kritik bir faktör</strong> haline gelmiştir. Milyonlarca kullanıcıya hizmet eden sistemlerde doğru algoritma seçimi ve optimizasyon, ürünün başarısını doğrudan etkiler. Bu nedenle algoritmalar, zaman karmaşıklığı ve sıralama yöntemleri gibi konular, yazılım mühendisliğinin temel yapı taşlarıdır.</p><p>Bu yazıda:</p><ul><li><strong>Döngüler (Loops)</strong></li><li><strong>Özyineleme (Recursion)</strong></li><li><strong>Zaman Karmaşıklığı (Time Complexity)</strong></li><li><strong>Sıralama Algoritmaları (Sorting)</strong></li></ul><p>temelinde verimli algoritmaların nasıl tasarlanacağını öğreneceğiz.</p><h4>1. Loops (Döngüler)</h4><p>Döngü, belirli bir koşul sağlandığı sürece tekrar eden işlemleri ifade eder.</p><h4>Temel Döngü Yapıları</h4><ul><li>for</li><li>while</li><li>do ... while</li><li>for ... of, for ... in</li></ul><pre>for (let i = 0; i &lt; 5; i++) {<br>  console.log(&quot;Adım: &quot; + i);<br>}</pre><h4>2. Recursion (Özyineleme)</h4><p>Recursion, bir fonksiyonun kendini çağırmasıdır. İki temel bileşeni vardır:</p><ol><li><strong>Base Case (Çıkış Koşulu)</strong>: Fonksiyonun durmasını sağlar.</li><li><strong>Recursive Case (Yeniden Çağrı)</strong>: Fonksiyonun kendini tekrar çağırdığı durum.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TSuueEv74XaawxlGDVPBcw.png" /></figure><pre>def factorial(n):<br>    if n == 1:  # Base Case<br>        return 1<br>    return n * factorial(n - 1)  # Recursive Case</pre><h4>3. Time Complexity (Zaman Karmaşıklığı)</h4><p>Bir algoritmanın giriş büyüklüğüne göre çalışmasının ne kadar zaman alacağını ölçer. <strong>Big O Notasyonu</strong> kullanılır.</p><h4>Big O Örnekleri</h4><ul><li><strong>O(1):</strong> Sabit zaman — Örnek: Diziye index ile erişim</li><li><strong>O(n):</strong> Tek döngü — Örnek: Listeyi baştan sona gezmek</li><li><strong>O(n²):</strong> İç içe döngü — Örnek: Bubble Sort</li><li><strong>O(log n):</strong> Binary Search</li><li><strong>O(n log n):</strong> Merge Sort, Quick Sort (ortalama durum)</li></ul><h4>4. Big O, Omega ve Theta</h4><ul><li><strong>Big O (O):</strong> En kötü durum analizi (Worst Case)</li><li><strong>Omega (Ω):</strong> En iyi durum analizi (Best Case)</li><li><strong>Theta (Θ):</strong> Ortalama durum analizi (Average Case)</li></ul><p><strong>Örnek:</strong><br> Binary Search algoritması, en kötü durumda <strong>O(log n)</strong> zaman karmaşıklığına sahiptir.</p><h4>5. Sorting (Sıralama Algoritmaları)</h4><p>Veri setini artan ya da azalan sıraya sokma işlemidir.<br> Gerçek dünya kullanımları: <strong>arama motorları, e-ticaret filtreleme, skor listeleri</strong> vb.</p><h4>Temel Sıralama Algoritmalar</h4><ol><li><strong>Bubble Sort:</strong> Komşu elemanları karşılaştırır, büyük olanı sağa iter.<br> Zaman karmaşıklığı: <strong>O(n²)</strong></li><li><strong>Selection Sort:</strong> En küçük elemanı bulur ve başa yerleştirir.<br> Zaman karmaşıklığı: <strong>O(n²)</strong></li><li><strong>Insertion Sort:</strong> Elemanları tek tek alıp sıralı kısmın uygun yerine yerleştirir.<br> Zaman karmaşıklığı: <strong>O(n²)</strong> (ama küçük/nasıl sıralı dizilerde hızlıdır)</li><li><strong>Quick Sort:</strong> Pivot seçilir, küçük elemanlar sola, büyük elemanlar sağa ayrılır.<br> Ortalama karmaşıklık: <strong>O(n log n)</strong></li><li><strong>Counting Sort:</strong> Elemanların frekansını sayar, pozitif tamsayılar için uygundur.<br> Zaman karmaşıklığı: <strong>O(n + k)</strong></li></ol><h4>6. Sorting Algoritmalarının Performansı</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ayRRca2RX9unaBjRF1cTFQ.png" /></figure><h4>Sonuç</h4><ul><li><strong>Döngüler ve Recursion</strong>, problem çözümünün temel yapı taşlarıdır.</li><li><strong>Time Complexity</strong>, algoritma seçiminde yol gösterir.</li><li><strong>Sorting algoritmaları</strong>, gerçek hayattaki veri işlemenin kalbidir.</li></ul><blockquote><strong>Verimli algoritmalar yazmak, bir yazılımcının profesyonellik göstergesidir.</strong></blockquote><h3>Özgür Ünlü(Yapay Zeka Koduna Akıl Katıyor)</h3><h4>Giriş: Yapay Zeka ile Üretkenliğin Kesişim Noktası</h4><p>Yazılım geliştirme dünyasında üretkenliği artıran en büyük devrimlerden biri, yapay zeka destekli araçların doğrudan geliştirme sürecine entegre edilmesidir. Artık yazılımcılar için sadece kod yazmak değil, <strong><em>doğru sorularla yapay zekayı yönlendirmek</em></strong> de temel bir beceri haline gelmiştir.</p><p>Sunumlarda paylaşılan çarpıcı örneklerden biri,<em> </em><strong><em>Cursor kullanılarak 3 ayda tamamlanacak bir projenin yalnızca 3 günde bitirilmiş olmasıdır.</em></strong> Bu farkı yaratan şey, sadece teknoloji değil; teknolojiyle nasıl konuşulacağını bilmektir.</p><h4>Yapay Zeka ve Etkili Prompt Kullanımı</h4><p>Yapay zekaya verilen komutlara <strong>“prompt”</strong> denir. Basit bir komut ile verilen talimatların kalitesi, yapay zekadan alınan sonucu direkt etkiler.<br> İyi bir prompt = Daha doğru, anlamlı ve hızlı sonuçlar.<br> Kötü bir prompt = Belirsiz ve hatalı yanıtlar.</p><p>Eğitimde Özgür Bey’in altını çizdiği en önemli konu buydu:</p><blockquote>“AI ile konuşurken, sanki 5 yaşındaki bir çocuğa anlatır gibi detaylı ve net olmalısınız.”</blockquote><p><strong>Örnek:</strong><br>“Bir bardak çiz” demek yerine:<br>“Beyaz arka plan üzerinde cam bir su bardağı çiz, içi yarıya kadar su dolu olsun ve yanından ışık vuruyor gibi görün.”</p><p>Aynı mantık kod yazarken de geçerli.<br>“HTML’de güzel bir iletişim formu yap” demek yerine:<br>“HTML’de ad, soyad (ayrı alanlarda), e-posta ve mesaj alanlarını içeren, butonla gönderilen basit bir iletişim formu ver. Veriler henüz kaydedilmeyecek ama Supabase’e aktarım için placeholder kod ekle.”</p><h4>CRISPE Metodu ile Etkili Promptlar</h4><p>Yapay zeka modelleri, ne yapmaları gerektiğini insan gibi “anlamaz”. Onlara detaylı, bağlama uygun ve yapılandırılmış komutlar verilmelidir. İşte burada devreye <strong>CRISPE metodu</strong> girer:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/915/1*DcBHkBmIoYv3f_Xk6nlQjA.png" /></figure><h4>AI’yi Asistanınız veya Mentörünüz Yapın</h4><p>Sunumda aktarılan stratejiler, özellikle yazılım projelerinde AI’den <strong>mentör</strong> gibi faydalanmayı öneriyor. Uygulama:</p><ol><li><strong>Büyük resmi AI’ye anlatarak planlama</strong>: “Bu projede üç modül olacak, veri API’den gelecek.”</li><li><strong>Task’lara bölme ve test case yazdırma</strong>: “Her modül için edge-case testleri yaz.”</li><li><strong>Kodları birleştirip refactor ettirme</strong>: “Kod tekrarlarını azalt ve dosya yapısını sadeleştir.”</li></ol><p>Böylece AI sadece kod yazan bir araç değil, aynı zamanda bir <strong>teknik danışman</strong> rolüne bürünmüş olur.</p><h4>Stajyerler İçin Yapay Zeka Kullanım Alanları</h4><ol><li><strong>Yazım ve Tercüme:</strong> ChatGPT, Deepl, Grammarly.</li><li><strong>Görev ve Zaman Yönetimi:</strong> Notion AI, ClickUp, Taskade.</li><li><strong>Profesyonel E-posta:</strong> Compose.ai, GrammarlyGO.</li><li><strong>Kod Anlama / Açıklama:</strong> Cursor, Claude AI, ExplainDev.</li></ol><h4>Live Coding ve Vibe Coding</h4><p>Eğitimde canlı kodlama örneği üzerinden AI’nin nasıl yönlendirileceği gösterildi.<br> V<em>ibe Coding</em> adı verilen bu yaklaşımda, AI sanki bir kıdemli yazılımcıymış gibi kullanılıyor. Kod parçaları, test senaryoları ve hata kontrolleri tamamen yapay zekaya yöneltilen <strong>net talimatlar (promptlar)</strong> ile şekilleniyor.</p><blockquote>“Yapay zekayı, doğru sorular sorarak ve net brief vererek kendi senior developer’ınız gibi kullanabilirsiniz.”</blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=efbd66d97a17" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[HOW DOES INTERNET WORK]]></title>
            <link>https://medium.com/@severustark/how-to-internet-works-4fde95d3e024?source=rss-b2a0870810fc------2</link>
            <guid isPermaLink="false">https://medium.com/p/4fde95d3e024</guid>
            <dc:creator><![CDATA[Damla ARPA]]></dc:creator>
            <pubDate>Mon, 14 Jul 2025 12:24:31 GMT</pubDate>
            <atom:updated>2025-08-24T12:40:55.161Z</atom:updated>
            <content:encoded><![CDATA[<p>İnternette olup biteni anlamak için önce bazı temel kavramları bilmek gerekiyor. Tarayıcılar nasıl çalışır, DNS ne yapar, HTTP ve HTTPS nedir gibi sorulara sade ama teknik bir açıklık getirelim.</p><p><strong>DNS ne iş yapar?</strong> Domain adını (örneğin youtube.com) IP adresine (192.158.1.38) çevirir. DNS, tıpkı bir telefon rehberi gibi çalışır: Siz kişinin adını yazarsınız, sistem arka planda o isme karşılık gelen telefon numarasını bulur ve aramayı başlatır.</p><p><strong>Tarayıcı (browser) ne yapar?</strong> Tarayıcı, kullanıcının yazdığı web adresini analiz eder, ilgili IP adresini bulur ve uygun HTTP isteğini sunucuya gönderir. Sunucudan gelen yanıtı aldıktan sonra, sayfanın HTML, CSS ve JavaScript dosyalarını işler ve bu içerikleri kullanıcıya görsel olarak sunar. Bu süreci birazdan daha ayrıntılı olarak inceleyeceğiz.</p><p><strong>HTTP ve HTTPS nedir?</strong><em><br>HTTP (HyperText Transfer Protocol), web tarayıcımız ile sunucu arasında veri alışverişini sağlayan iletişim protokolüdür. Yani, tarayıcıdan sunucuya istek gönderilmesini ve sunucudan yanıt alınmasını sağlar.HTTPS (HTTP Secure), HTTP protokolünün </em><strong><em>şifrelenmiş ve güvenli versiyonudur</em></strong><em>. Veriler, SSL/TLS protokolleri ile şifrelenerek iletilir; böylece üçüncü kişilerin bu verilere erişmesi engellenir.</em></p><p><strong>Client–Server Mimarisi Nedir?</strong><br>İstemci–sunucu mimarisi, temel olarak istemcinin (client) gönderdiği istekler ve sunucunun (server) bu isteklere verdiği yanıtlar üzerine kuruludur.En basit haliyle: <strong>istemci talep eder, sunucu yanıtlar.</strong><br>Bu model günümüzde web uygulamalarının temel çalışma prensibini oluşturur.</p><p><strong>API nedir?</strong><br>API (Application Programming Interface), bir uygulamanın başka bir sistemdeki veri veya işlevlere erişmesini sağlayan <strong>bağlantı arayüzüdür</strong>.<br>Genellikle istemci–sunucu modeliyle çalışır: İsteği gönderen taraf istemci, yanıtı sağlayan taraf sunucudur.Örneğin, hava durumu uygulaması Meteoroloji Genel Müdürlüğü’nün veritabanından veri almak için API kullanır.“Google ile giriş yap” ya da ödeme sistemlerinde banka altyapılarıyla iletişim kurmak gibi işlemler de hep API’ler sayesinde gerçekleşir.e-Devlet platformu, farklı kurum sistemlerini bir araya getiren güçlü bir API örneğidir.<br>Kısaca API, iki sistemin <strong>birbiriyle konuşmasını, veri okuma-yazma işlemlerini</strong> yapmasını sağlar.</p><h4>SSL/TLS Nedir?</h4><p>SSL (Secure Socket Layer) ve TLS (Transport Layer Security), internet trafiğini şifrelemek ve güvenli iletişim sağlamak için kullanılan protokollerdir. Temel amacı, verilerin güvenli bir şekilde iletilmesini ve üçüncü tarafların bu verilere erişimini engellemektir.</p><p>SSL, ilk olarak Netscape Communications tarafından geliştirilmiş ve daha sonra TLS olarak standartlaştırılmıştır. TLS, SSL’in güncellenmiş ve daha güvenli bir sürümüdür ve günümüzde daha yaygın olarak kullanılmaktadır. Ancak, genellikle SSL/TLS terimi kullanılarak her ikisi de ifade edilir.</p><p><strong>Veri Güvenliği</strong>: Veriler şifrelenerek iletilir, üçüncü kişiler erişemez.</p><p><strong>Veri Bütünlüğü</strong>: Verinin transfer sırasında bozulmadığı kontrol edilir (hash algoritmaları ile).</p><p><strong>Kimlik Doğrulama</strong>: Sunucu kimliği dijital sertifikalarla doğrulanır (sahte sitelere karşı koruma).</p><p><strong>SEO ve Güvenlik Uyarısı</strong>: HTTPS kullanan siteler tarayıcılar tarafından “güvenli” olarak işaretlenir, Google sıralamasında avantaj sağlar.</p><h4>TCP Nedir?</h4><p>TCP (Transmission Control Protocol), IP protokolü üzerinde çalışan, <strong>güvenli ve sıralı veri iletimi</strong> sağlayan bir bağlantı tabanlı (connection-oriented) protokoldür.<br>Veri kaybını önler, paketlerin doğru sırayla ve eksiksiz ulaşmasını garanti eder.HTTP, SMTP gibi uygulamalar bu güvenli aktarım yapısını kullanır.</p><h4>Artık Hazırız: Web Tarayıcısına URL Yazıp Enter’a Basınca Neler Oluyor?</h4><p>Tarayıcımıza bir web sitesinin adresini yazıp Enter’a bastığımız anda, arka planda tam olarak neler olduğunu hiç merak ettiniz mi? Bu yazıda, web geliştiricisi olarak mutlaka bilmeniz gereken birkaç temel kavram ve terimden bahsedeceğim.</p><p>Öncelikle, diyelim ki tarayıcınızı açtınız ve youtube.com gibi bir web sitesine gittiniz. Tarayıcıdaki adres çubuğunda yazan bu adrese <strong>URL (Uniform Resource Locator)</strong> denir. URL, internette bir kaynağı (örneğin web sayfası veya HTML belgesi) bulmanın yoludur.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/778/1*_m5VrqDYN9dxVqMDFd_PKg.png" /></figure><p>Bunlar; resimler, video dosyaları, yazı tipleri vb. olabilir. Bir web sitesinin URL’sini yazıp Enter’a basıyoruz. Peki şimdi ne oluyor?</p><p>Burada iki parça söz konusu: Tarayıcı, <strong>istemci</strong> olarak da adlandırılır ve hedef web sitemizi barındıran bilgisayar veya bilgisayarlara <strong>web sunucuları</strong> (veya kısaca sunucular) diyoruz. Bu yapıya <strong>client-server modeli</strong> denir.<br>İstemci bir hizmet talep eder, sunucu ise bu hizmeti sağlar.</p><p>Tarayıcımız sunucuya bir mesaj gönderir ve şöyle der:<br> <strong>“Hey, bana bu web sitesinin ana sayfasını ver!”</strong></p><p>Bu, bir arkadaşınıza kısa mesaj göndermeye benzer.<br>Telefondan mesajı gönderen taraf istemci, arkadaşınızın telefonu ise mesajı alan <strong>sunucu (server)</strong> gibidir.</p><p>Şimdi örneğimize geri dönelim. Bu mesaj, <strong>HTTP (Hypertext Transfer Protocol)</strong> adı verilen bir protokole göre biçimlendirilmiştir.</p><p>Muhtemelen daha önce fark etmişsinizdir: https://www.youtube.com gibi bağlantılar görmüşsünüzdür, ancak tam olarak ne anlama geldiğini bilmiyor olabilirsiniz.</p><p><strong>HTTP</strong>, istemci ve sunucuların birbirleriyle konuşmak için kullandığı bir iletişim protokolüdür.<br>Bir programlama dili değildir; internet üzerinden iletişim kurmak için kullanılan düz bir metin dilidir.</p><p>Ayrıca:<br><strong>HTTPS = HTTP + Encryption</strong><br>Yani şifrelenmiş HTTP diyebiliriz. Bu sayede istemci ve sunucu arasındaki mesaj alışverişi şifrelenmiş olur.</p><p>İşte basitleştirilmiş bir HTTP mesajı örneği:</p><blockquote>GET /index.html HTTP/1.1 <br>Host: <a href="http://www.youtube.com/">www.youtube.com</a> <br>Accept-Language: en-us</blockquote><p>Bu mesajla tarayıcı, sunucuya ne aradığını söyler.</p><p><strong>İlk satırda</strong>, HTTP 1.1 sürümünü kullanan tarayıcının index.html adlı bir sayfayı (veya dosyayı) almak istediğini görebiliriz.<br> index.html genellikle web sitelerinin ana sayfalarını temsil eder.</p><p><strong>İkinci satırda</strong>, youtube.com olan ana bilgisayar (host) bilgisini görürüz.</p><p><strong>Üçüncü satırda</strong> ise, istemcinin kabul edebileceği dili görebiliriz. Bu durumda İngilizce (en).</p><p>Bunların hiçbirini ezberlememiz gerekmez; sadece <strong>nasıl çalıştığını anlamamız yeterlidir.</strong></p><p>Bu mesaj, istemcilerin ve sunucuların anladığı <strong>HTTP protokolüne göre</strong> yapılandırılmıştır.<br>Sunucu, bu mesajı aldığında istemcinin ne istediğini anlar ve ona yanıt olarak başka bir mesaj gönderir.</p><p>İlk mesaja <strong>HTTP isteği (Request)</strong>, ikinci mesaja ise <strong>HTTP yanıtı (Response)</strong> denir.<br>HTTP protokolünü kullanan her veri alışverişi, mutlaka <strong>bir istek ve bir yanıt</strong> olmak üzere iki mesaj içerir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/827/1*_P3kL0cYEQVERUlSdH1eRA.png" /></figure><p>Şimdi yanıtta ne var?</p><blockquote>HTTP/1.1 200 OK<br>Date: 1 Jan 2021 09:00<br>Content-Type: text/html</blockquote><blockquote>&lt;!DOCTYPE html&gt;<br>&lt;html&gt;<br>…<br>&lt;/html&gt;</blockquote><p><strong>İlk satırda</strong>, kullanılan HTTP protokolünün sürümünü ve ardından durum kodu olan bir sayı görüyoruz. Örneğin, <strong>200</strong> kodu başarılı veya tamam anlamına gelir.</p><p><strong>İkinci satırda</strong>, yanıtın tarih ve saat bilgisi yer alır.</p><p><strong>Üçüncü satırda</strong> ise, istemciye geri gönderilen içerik türünü görebiliriz. Bu durumda, içerik <strong>metin/html</strong> türündedir. Ardından, youtube.com sitesinin ana sayfasını temsil eden HTML kodu ya da HTML belgesi gelir. Elbette, gerçek HTML kodu çok daha uzundur.</p><p>Şimdi tarayıcı, bu HTML belgesini okurken, bir <strong>DOM (Document Object Model)</strong> oluşturur. DOM, HTML belgesindeki nesneleri veya öğeleri temsil eden bir modeldir.</p><p>Peki bu öğeler nelerdir? Sayfadaki metin paragrafları, resimler, bağlantılar ve diğer bloklar gibi parçalar.</p><p>Tarayıcı, sunucudan dönen bu HTML belgesini işlerken, içindeki resimler, yazı tipleri ve diğer kaynaklara dair referanslar keşfeder. Bu kaynakların her birinin bir adresi yani URL’si vardır.</p><p>Dolayısıyla, tarayıcı her bir kaynak için sunucuya o kaynağı almak üzere ayrı bir HTTP isteği gönderir. Bu HTTP isteklerinin çoğu <strong>paralel olarak</strong> yapılır; böylece sayfa mümkün olduğunca hızlı yüklenir ve görüntülenir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/762/1*8lDEppojzzM_XS5MmQEVfw.png" /></figure><p>Tarayıcı, gerekli tüm kaynaklara sahip olduğunda HTML belgesini işler.<br>Bir HTML belgesini işlemek, aslında onu <strong>görüntülemek</strong> anlamına gelir.<br>Bu, sıkça kullandığımız teknik bir terimdir.</p><p>Özetle, tarayıcımız sunucuya bir HTTP isteği (<strong>request</strong>) gönderir ve bir HTTP yanıtı (<strong>response</strong>) alır.<br>Bu yanıt genellikle bir HTML belgesi içerir.<br>Tarayıcı, bu HTML belgesini okuyarak bir <strong>Belge Nesne Modeli (DOM)</strong> oluşturur ve sayfayı işler.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/822/1*o3QWyuhK4mh_9UZoEFumYg.png" /></figure><p>Tarayıcı, HTML belgesini okuyup DOM’u oluşturduktan sonra, sayfanın görünümünü belirlemek için <strong>CSS</strong> dosyalarını indirir ve uygular. CSS (Cascading Style Sheets), sayfadaki yazı tipleri, renkler, yerleşim gibi görsel tasarım özelliklerini kontrol eder.</p><p>Ardından, sayfaya işlevsellik ve etkileşim kazandırmak için <strong>JavaScript</strong> dosyaları yüklenir ve çalıştırılır. JavaScript, butonlara tıklama, form gönderme, dinamik içerik güncelleme gibi özelliklerin gerçekleşmesini sağlar.</p><p>Sayfa içindeki <strong>resimler, videolar ve diğer medya dosyaları</strong> da tarayıcı tarafından arka planda yüklenir. Bu yüklemeler, genellikle <strong>paralel olarak</strong> gerçekleşir, böylece sayfa daha hızlı açılır.</p><p>Tüm bu kaynaklar yüklendikten sonra, tarayıcı sayfayı tam anlamıyla işler ve kullanıcıya <strong>etkileşimli, görsel olarak zengin</strong> bir web deneyimi sunar.</p><p>Son olarak, tarayıcı kullanıcı etkileşimlerini takip eder; örneğin, fare hareketleri, tıklamalar veya klavye girdileri gibi olaylara tepki verir. Böylece sayfa sürekli canlı ve dinamik kalır.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4fde95d3e024" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Insider Staj Günlükleri — Bölüm 1:]]></title>
            <link>https://medium.com/@severustark/insider-staj-g%C3%BCnl%C3%BCkleri-b%C3%B6l%C3%BCm-1-17ee59658baa?source=rss-b2a0870810fc------2</link>
            <guid isPermaLink="false">https://medium.com/p/17ee59658baa</guid>
            <category><![CDATA[staj]]></category>
            <category><![CDATA[insider]]></category>
            <dc:creator><![CDATA[Damla ARPA]]></dc:creator>
            <pubDate>Sat, 12 Jul 2025 08:19:47 GMT</pubDate>
            <atom:updated>2025-07-12T08:53:03.263Z</atom:updated>
            <content:encoded><![CDATA[<h3>Insider Staj Günlükleri — Bölüm 1</h3><p>Insider’daki ilk günümde elime verilen giriş kartının sadece bir kart olmadığını kısa sürede fark ettim. Kartın arkasında yer alan altı madde, kurumun vizyonunu ve değerlerini sade ama güçlü bir şekilde özetliyordu. İlk başta basit bir bilgilendirme gibi görünse de, zamanla bu altı ilkenin şirketin her köşesine işlemiş olduğunu gördüm.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*80beemctN9BRPlqeWIJtzA.png" /></figure><p>Toplantı odalarında, ekranlardaki sunumlarda, ekip içi sohbetlerde…<br>Bu değerler sadece yazılı birer ifade değil; gerçekten yaşanıyor, karar alma süreçlerine ve günlük iletişime yön veriyordu. Insider’da kurum kültürünün afişlerde kalmayıp davranışa dönüştüğüne tanıklık etmek, benim için en etkileyici deneyimlerden biriydi.</p><h3><strong>Kerem OKUDAN (Department Introduction)</strong></h3><p>İlk staj günümde, Insider’da çalıştığım departman hakkında oldukça bilgilendirici bir sunum yapıldı. “Departman Tanıtımı” başlığı altında Kerem Bey, şirketin iş yapış şekli ve bizim departmanın rolü hakkında değerli bilgiler paylaştı.</p><h4>Yazılım Satışı Değil, Hizmet Kiralama Modeli</h4><p>Insider, parasını ödediğiniz sürece kullanabileceğiniz yazılımlar sunan bir teknoloji firması. Buradaki önemli fark şu: Yazılımı satın alıp sahip olmuyorsunuz, kiralıyorsunuz. Yani ne zaman vazgeçerseniz, o zaman kullanımı da sona eriyor. Teknik olarak “satış” dense de aslında bir “hizmet kiralama” modeli söz konusu.</p><p>Insider, “müşteri” yerine <strong>partner</strong> kelimesini kullanıyor. Çünkü burada kurulan ilişki sadece bir alıcı-satıcı ilişkisi değil, bir <strong>iş ortaklığı</strong>. Insider, B2B yani şirketten şirkete hizmet sunan bir firma. Dolayısıyla odak noktası sadece iş ortağı değil, onların müşterileri — yani son kullanıcılar.</p><h4>Partner Success: Müşteri Başarısından Fazlası</h4><p>Insider’da “Customer Success” değil, “<strong>Partner Success</strong>” bu bile şirketin jargonunun ne kadar özgün olduğunu gösteriyor. Amacımız, partnerimizin ürün ve hizmetlerini daha iyi sunmasını sağlamak. Onlar daha çok satış yaptıkça, biz de kazanıyoruz.</p><p>Departmanımızın misyonu ise net: Yazılımlarımızı partnerin ihtiyacına göre özelleştirmek. Bu özelleştirme süreci, “Optimus” adı verilen alt birim tarafından yürütülüyor.</p><h4>Optimus Nedir?</h4><p>Optimus bir ürün değil, bir bakış açısı. Araba örneğiyle anlatmak gerekirse: Bir araç aldığınızı düşünün. Aracı beğendiniz, ama müzik sistemini daha iyi bir sistemle değiştirmek istiyorsunuz. Gidip serviste bunu yaptırabiliyorsunuz. İşte Optimus, bu özelleştirme sürecini yürütüyor. Araba aynı kalıyor ama müzik sistemi değişiyor — tıpkı yazılımda olduğu gibi.</p><p>Burada iki seçenek var:</p><ol><li>Özelliği sisteme entegre edip tüm kullanıcılara sunmak.</li><li>Sadece isteyen partnerlere özel hale getirmek.</li></ol><p>Hangisini seçeceğimiz ise tamamen <strong>arz-talep</strong> dengesine bağlı.</p><h4>Arz-Talep Dengesi</h4><p>Kerem Bey bu konuyu şu şekilde özetledi:</p><ul><li>Arz yüksekse, talebi artırmaya çalışırsın.</li><li>Talep yüksekse, ürünü arz edersin ki pazar kazanılsın.</li></ul><p>Ürün geliştirme süreci de bu dengeyle yönetiliyor. Örneğin bir özelliği 30 partnerden 18’i istiyorsa bu durum roadmap’e alınıyor ve ürünün içine dahil ediliyor.</p><p>Insider’ın çalışma mantığı “agile” yani çevik yöntemlerle ilerliyor. Tıpkı bir fabrikanın üretim hattı gibi: Görevler Jira isimli bir proje yönetim aracıyla takip ediliyor. Her görev bir karta işleniyor ve süreç boyunca izleniyor. Çalışanların performansı da bu sistem üzerinden ölçülüyor.</p><p>Burada beyaz yaka — mavi yaka ayrımı yok; herkes aktif bir üretim sürecinin parçası gibi çalışıyor. Yapılan işlerin kalitesi, zamanında teslimi ve verimlilik çok önemli. Verimsizlik, adeta şirketin parasını çalmak gibi görülüyor.</p><h4>NPS: Herkesin Geri Bildirimi Değerli</h4><p>Insider, hem müşterilere hem de çalışanlara <strong>Net Promoter Score (NPS)</strong> uygulayarak geri bildirim topluyor. Bu sistem sayesinde süreçlerdeki aksaklıklar tespit ediliyor ve iyileştirmeler yapılıyor.</p><h4>“Optimus” Bir İş Parçası Değil, Bir Yaşam Tarzı</h4><p>Bu cümle gerçekten çok etkileyiciydi. Optimus sadece görevlerin yapıldığı bir birim değil; sürekli gelişen, partnerle birlikte dönüşen ve ihtiyaçlara göre şekillenen bir felsefe.</p><blockquote>“Her şirketin artıları ve eksileri vardır. Hiçbir şirket kusursuz değil, zaten öyle olması da mümkün değil. Mükemmel bir yer ya da departman yoktur; <strong>mükemmeli aramak</strong> vardır.”</blockquote><h3>Bünyamin İŞERİ (Agile,Scrum,Kanban)</h3><p>Agile, <em>“insanların ve etkileşimlerin süreç ve araçlardan daha önemli olduğunu”</em> savunan bir çalışma felsefesidir. İş yaparken ve öğrenirken de biz bu felsefeyi benimsiyoruz.</p><h4>Waterfall (Şelale) Yöntemi Nedir?</h4><p>Waterfall, yani şelale yöntemi, proje yaşam döngüsünün baştan sona planlandığı klasik modeldir.</p><ul><li>Proje başlangıcında neyin ne zaman yapılacağı net olarak belirlenir.</li><li>Plan tamamen yapıldıktan sonra uygulamaya geçilir.</li><li>Ürün ortaya ancak projenin sonunda çıkar.</li></ul><p>Ancak günümüzde projelerde belirsizlikler çoktur ve bazen baştan sona tüm planı yapmak mümkün olmaz. İşte tam bu noktada Agile devreye girer.</p><h4>Agile Nedir?</h4><p>Agile, kısa döngülerle (sprintlerle) değeri aşamalı olarak ortaya koymayı amaçlayan bir felsefedir.</p><ul><li>Ürün, parçalar halinde geliştirilir.</li><li>“İş tamamlandıysa vardır; yoksa çaba sıfırdır” prensibiyle ilerler.</li><li>Agile’da “hizmetkar lider” kavramı ön plandadır.</li></ul><p>Örnekle açıklarsak: Bir ev inşa edilecekse, öncelikle ne yapılacağı belirlenir, ardından kısa sürelerde bitirilebilecek parçalar halinde ilerlenir. Bu süreç, <em>müşteri gereksinimlerinin önceliklendirilmesin</em>i sağlar.<strong>Agile bir felsefedir; amacı, kısa döngülerle değeri aşamalı olarak ortaya koymaktır.</strong> Ürünü parça parça geliştirir ve her tamamlanan işin somut bir sonucu olur. Agile’da ilerleyiş “1–0” mantığıyla işler: İş tamamlandıysa vardır, yoksa çabamız sıfırdır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*TKaSpnX6P6X7O6SJjj2PZw.png" /></figure><p>Ayrıca Agile’da “hizmetkar lider” (servant leader) kavramı önemli bir yer tutar. Bu lider, ekibin önünü açar, destek olur ancak işi doğrudan yapmaz. Ekip üyelerinin potansiyellerini en iyi şekilde kullanabilmeleri için ortam yaratır.</p><h4>Agile Rolleri</h4><ul><li><strong>Product Owner:</strong> Ürünün sahibi, müşteri temsilcisi. Backlog’u önceliklendirir ve ürünle ilgili detayları sağlar.</li><li><strong>Development Team:</strong> Ürünü geliştiren ekip. İşin doğrudan sorumlusu.</li><li><strong>Scrum Master:</strong> Scrum sürecinin doğru işlemesini sağlar, ekip içi engelleri kaldırır ve Agile prensiplerin uygulanmasına rehberlik eder. Ekip için bir kolaylaştırıcı ve liderdir, ancak işi doğrudan yapmaz.</li></ul><h4>Predictive vs Agile</h4><ul><li><strong>Predictive (Waterfall):</strong> Gereksinimler baştan belirlenir ve ürün sonunda teslim edilir.</li><li><strong>Agile:</strong> Gereksinimler adım adım belirlenir, ara teslimatlar yapılır.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jHEfPmYnZPbfLqqKuaQmcQ.png" /></figure><h4>Agile’ın Uygulanışı (Agile in Action)</h4><ul><li>Ürün istekleri (user story) Product Owner’dan alınır, küçük parçalara bölünür.</li><li>İşin büyüklüğü süre değil, efor olarak Fibonacci serisi (1,3,5,8…) ile tahmin edilir.</li><li>Sprintler 1–4 hafta arasında sürer.</li><li>Her sprint sonunda çalışan bir ürün parçası çıkar.</li></ul><h4>Scrum Süreçleri</h4><ul><li><strong>Sprint Planlama:</strong> Sprint başlamadan önce hangi işlerin yapılacağı belirlenir.</li><li><strong>Daily Scrum (Günlük Stand-up):</strong> Kısa toplantılar; herkes üç soruya cevap verir:</li></ul><ol><li>Dün ne yaptım?</li><li>Bugün neleri yapacağım?</li><li>İşleri yaparken karşılaştığım herhangi bir zorluk var mı? Bu zorlukları aşmak için nasıl bir yardıma ihtiyacım var?</li></ol><ul><li><strong>Sprint Review(Gözden Geçirme):</strong> Sprint sonunda yapılan iş müşteri veya paydaşlara gösterilir.</li><li><strong>Sprint Retrospective(Geri Bildirim):</strong> Sürecin nasıl iyileştirileceği konuşulur.</li></ul><h4>Diğer Önemli Kavramlar</h4><ul><li><strong>Velocity Tracking:</strong> Ekibin ne kadar işi ne kadar sürede bitirebildiğinin ölçümü.</li><li><strong>Definition of Done (Tamamlanma Tanımı):</strong> İşin tamam sayılması için hangi kriterlerin sağlanması gerektiği.</li><li><strong>Bruce Tuckman’ın Modeli:</strong> Takım gelişim aşamalarını açıklar (Forming, Storming, Norming, Performing).</li></ul><h4>80/20 Kuralı ve Agile</h4><p>Bruce Tuckman’ın modeline ek olarak,</p><blockquote><em>“İşlerimizin %20’si zamanımızın %80’ini alır.”</em></blockquote><p><em>Bu yüzden Agile’da, kullanıcı hikayelerinin %20’si ürünün değerinin %80’ini oluşturur. Product Owner’ın görevi bu kritik %20’yi belirlemektir.</em></p><h4>Kanban Metodolojisi</h4><p>Kanban, Japonca “işaret tahtası” anlamına gelir ve iş akışını görselleştirerek verimliliği artıran bir sistemdir. Toyota’nın üretim bantlarında kullanılmıştır.</p><ul><li><strong>Kanban Board:</strong> İşlerin statülerini (To Do, In Progress, Done) gösteren tahta.</li><li><strong>Task:</strong> Her iş veya görev için kartlar.</li><li><strong>WIP Limit (Work In Progress):</strong> Aynı anda devam eden iş sayısının sınırlandırılması.</li><li><strong>Cycle Time:</strong> Bir işin başlanmasından bitimine kadar geçen süre.</li></ul><p>Kanban’da belirli roller yoktur, ancak takım yapısına göre görevler dağıtılır: Developers, QA, Team Leader, vb.</p><h3>Kanban ve Scrum Arasındaki Farklar</h3><ul><li>Kanban belirli süreçler ve kısıtlamalar getirmez, Scrum daha yapılandırılmıştır.</li><li>Projenin karmaşıklığı ve takım dinamiklerine göre tercih edilir.</li><li>Kanban daha esnektir, Scrum belirli sprint döngüleriyle çalışır.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/1*Qq9L2gmtcatx8yeZkw7DPQ.png" /></figure><h3>Buket YEŞİLÖZ (OKRs &amp; KPIs in Tech)</h3><p>Birçok çalışan neyi, neden yaptığını tam olarak bilmeden iş üretmekte; bu durum hem bireysel motivasyonu hem de şirket başarısını olumsuz etkiliyor. İşte tam bu noktada <strong>OKR (Objectives and Key Results)</strong> ve <strong>KPI (Key Performance Indicators)</strong> sistemleri devreye girer. Bu sistemler, belirsizliği ortadan kaldırarak herkesin net hedefler doğrultusunda çalışmasını sağlar.</p><h4>Hedeflerle Yönetim Nedir?</h4><p>Hedeflerle yönetim, çalışanların ve ekiplerin işlerini rastgele değil, belirli hedeflere ulaşmak için bilinçli bir şekilde yapmalarını sağlayan yaklaşımdır. Bu sayede şirket kaynaklarını boşa harcamaz, çalışanlar da yaptıkları işin neden önemli olduğunu bilir.</p><p>Örneğin, bir geliştirici için sadece “bir task yapmak” değil, “müşteri memnuniyetini artırmak için hatayı düzeltmek” anlamına gelir. Hedeflerle yönetim, sadece performansı değil, işin anlamını da ön plana çıkarır.</p><h4>KPI Nedir? Ne İşe Yarar?</h4><p><strong>KPI (Key Performance Indicator)</strong>, bir kişi, ekip veya departmanın performansını <em>o</em><strong><em>bjektif olarak değerlendirmek</em></strong><em> </em>için kullanılan ölçütlerdir. Genellikle sayı, oran veya zaman gibi ölçülebilir verilerle tanımlanırlar.</p><p>Örnek KPI’lar:</p><ul><li>Müşteri hizmetlerinde ortalama çağrı süresi: 3 dakika</li><li>Destek taleplerine 24 saat içinde dönüş yapılması</li></ul><p>KPI’ların amacı, yapılan işlerin ne kadar etkili olduğunu değerlendirmek ve ekiplerin güçlü-zayıf yönlerini belirleyerek gelişim sağlamak.</p><h4>İyi Bir KPI Nasıl Yazılır?</h4><ul><li><strong><em>Ölçülebilir</em></strong> olmalıdır; çünkü ölçülemeyen bir şeyi yönetmek mümkün değildir.</li><li><strong>Spesifik, ulaşılabilir </strong>ve<strong> zamana bağlı</strong> olmalıdır.</li></ul><p>Örneğin, “müşteri memnuniyetini artırmak” gibi genel bir ifade yerine,<br> “Her ay müşteri anketlerinden alınan puanı minimum 80 puanda tutmak” daha etkili bir KPI’dır.</p><h4>KPI Örnekleri</h4><ul><li>Satış ekibi için: “Aylık 500.000 TL satış yapmak”</li><li>Yazılım destek ekibi için: “Taleplere ilk yanıt süresi &lt; 2 saat”</li><li>İçerik ekibi için: “Ayda 4 blog yazısı yayınlamak”</li></ul><p>Her KPI, farklı rollerin performansını somut şekilde ölçer ve gelişim fırsatları sunar.</p><h4>KPI Takibi ve Kullanımı</h4><p>KPI’lar belirli periyotlarla (haftalık, aylık, çeyrek) takip edilip raporlanmalıdır. Düzenli değerlendirme, çalışanlara geri bildirim vermeyi ve süreç iyileştirmeyi sağlar.</p><p>Örneğin, aylık efor hedefi tutmadığında nedenleri analiz edilir: Eksik developer sayısı mı var, task eforları mı düşük, bilgi paylaşımı mı yetersiz? Bu analizler gelecekte daha etkili stratejilerin geliştirilmesine yardımcı olur.</p><h4>Performans Geri Bildirimi ve KPI</h4><p>KPI sonuçları bireylere ve ekiplere doğrudan geri bildirilmelidir. Ancak bu geri bildirim sadece rakamlara değil, süreçlere odaklanmalıdır. Hedefe ulaşılamaması başarısızlık değil, gelişim fırsatı olarak görülmelidir.</p><p>Liderler, KPI verilerini kullanarak kişiye özel destek ve gelişim planları oluşturabilir.</p><h4>OKR Nedir?</h4><p><strong>OKR (Objectives and Key Results)</strong>, bireylerin ve ekiplerin ulaşmak istedikleri vizyoner hedefleri belirlemesini ve ilerlemeyi somut olarak ölçmesini sağlayan sistemdir.</p><ul><li><strong>Objective (Amaç):</strong> Motivasyon verici, net bir yön gösteren hedeftir.</li><li><strong>Key Results (Anahtar Sonuçlar):</strong> Bu hedefe ne kadar yaklaşıldığını ölçen, somut ve ölçülebilir çıktılardır.</li></ul><p>Örnek:</p><ul><li>Objective: “Pazar lideri olmak”</li><li>Key Results:</li><li>3 yeni pazara açılmak</li><li>Müşteri sayısını %30 artırmak</li></ul><h4>OKR Nasıl Yazılır?</h4><ul><li>Objective motivasyon verici ve net olmalı; <strong>ölçülemeyen ancak ilham veren ifadeler</strong> tercih edilir.</li><li>Key Results mutlaka ölçülebilir ve somut olmalıdır.</li></ul><h4>Şirket ve Takım Seviyesi OKR Örnekleri</h4><p><strong>Şirket Seviyesi:</strong></p><ul><li>Objective: Türkiye’de pazarlama alanında öncü SaaS markası olmak.</li><li>KR1: 10 büyük müşteriye satış yapmak</li><li>KR2: Dijital görünürlüğü %40 artırmak</li><li>KR3: Ürün değerlendirme platformlarında 4.5 puan ortalaması sağlamak</li></ul><p><strong>Takım Seviyesi:</strong></p><ul><li>Objective: Backend kod kalitesini artırmak.</li><li>KR1: Test coverage %80’in üzerine çıkartmak</li><li>KR2: Code review cevap süresini ortalama 12 saatin altına indirmek</li></ul><h4>OKR Yapısında Yaygın Hatalar</h4><ul><li>Objective’lerin belirsiz olması.</li><li>Key Results’ın ölçülebilir olmaması veya aktiviteleri tanımlaması.</li><li>Çok fazla Key Result yazılması (2–4 arası ideal).</li></ul><h4>OKR Değerlendirme Dönemi</h4><p>OKR’lar genellikle çeyrek bazında değerlendirilir. Başarı oranı %70–80 arasında olmalıdır; bu, hedeflerin hem iddialı hem de ulaşılabilir olduğunu gösterir. %100 başarı hedefin kolay olduğunu, %40 altı ise gerçekçi olmadığını gösterir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*LNzpWFssfXePavnFoP4rvg.jpeg" /></figure><h4>OKR ve KPI Nasıl Birlikte Kullanılır?</h4><p>Birbirlerini tamamlarlar. KPI’lar mevcut durumun ölçümünü yaparken, OKR’lar iyileştirme ve büyüme hedeflerini belirler. Örneğin:</p><ul><li>KPI: Destek taleplerine dönüş süresi 8 saat</li><li>OKR: Destek dönüş süresini 3 saate düşürmek</li></ul><h4>Kapanış: Kültür Haline Getirme</h4><p>OKR ve KPI sistemleri birer araçtır; <em>asıl amaç bu araçları ekip kültürüne dönüştürmektir.</em> Hedeflerin herkes tarafından bilindiği, takip edildiği ve sahiplenildiği bir ortam yaratıldığında hem bireyler hem de şirket gelişir.</p><h3>Çağatay KANDAZ (How the Internet Works)</h3><h4>Bilgisayarımız internete nasıl çıkar:</h4><p>Bilgisayarımızın tuşuna bastık ve kısa süre sonra işletim sistemimiz ayağa kalkacak. Bilgisayarımız hemen internete çıkmak için ethernet kartımızla iletişime geçer. Ethernet kartı, bilgisayarın diğer cihazlar ile ağ üzerinden haberleşmesi için gerekli olan elektronik komponentlerin bulunduğu bir devre kartıdır.</p><p><strong>Ağ bağdaştırıcısı = network kartı = internet kartı = ethernet kartı</strong><br> Bu terimlerin hepsi aynı anlama gelir ve aynı şeyi betimler.</p><p>Ethernet kartının doğrudan diğer cihazlarla iletişime geçebilmesi için bir adrese ihtiyacı vardır. Yani bir ethernet kartına veri göndermek istiyorsanız, o ethernet kartının adresini bilmek zorundasınız. Bu adres, 12 karakterli ve 48 bitten oluşan bir dizedir: 01:1A:7B:3C:8D:5E gibi görünür.</p><p>Bu adrese <strong>MAC (Media Access Control)</strong> adresi diyoruz.<br> MAC adresi fiziksel bir adrestir ve sabittir. Yani bir ethernet kartında kullanılan MAC adresi başka bir ethernet kartında kullanılamaz. Üretici tarafından MAC adresi bu ethernet kartına gömülür ve tıpkı bir <strong>“vatandaşlık numarası” </strong>gibidir. Bu ethernet kartıyla doğar, bu kartla ölür.<br> Bu adresi değiştirmenin tek yolu ethernet kartının üzerindeki entegre devrenin yazılımına müdahale etmektir.</p><h4>IP adresine neden ihtiyacımız var?</h4><p>MAC adresi ethernet kartımızın <strong>fiziksel</strong> adresidir.<br>IP adresi ise ethernet kartımızın <strong>mantıksal</strong> adresidir.<br>Yani MAC adresi bizim<strong> “vatandaşlık numaramız”</strong> ise, IP adresi bizim<strong> “ev adresimizdir”</strong>.</p><p>Bir evden başka bir eve taşındığımızda ev adresimiz değişebilir ama vatandaşlık numaramız kalıcıdır. Ağ üzerinde sağlıklı iletişim kurabilmemiz için hem MAC adresine hem de IP adresine ihtiyacımız var.</p><h4>Ethernet kartı IP adresini nasıl alır?</h4><p>IP almanın iki yolu vardır:</p><ol><li><strong>Manuel:</strong> El ile ethernet kartına bir IP adresi atanabilir.</li><li><strong>DHCP (Dynamic Host Configuration Protocol):</strong> Son kullanıcının hayatını kolaylaştırmak için geliştirilmiş otomatik sistemdir.</li></ol><p>Bir ethernet kartı, DHCP üzerinden IP almak istediğinde, tüm karakterleri F’lerden oluşan MAC adresine (yani ff:ff:ff:ff:ff:ff) bir <strong>broadcast çerçevesi</strong> gönderir.<br>Cihazın bir IP adresi olmadığı için “avazı çıktığı kadar bağırmasına” broadcast denir.</p><p>Bu çağrıya sadece <strong>tek bir cihaz</strong>, yani <strong>modem</strong> cevap verir.<br>Modemlerin de içinde ethernet kartı vardır, bu yüzden broadcast çerçevelerini dinleyebilir.Modemin bu çağrıya cevap verme sebebi, içinde DHCP sunucusu bulunmasıdır.</p><p>Modem, gönderilen broadcast çerçevesini duyduğunda paketi açar, bizim MAC adresimizi ve ne istediğimizi görür. DHCP sunucu, hemen boşta olan bir IP adresini hazırlar ve bize bir cevap döner:<br> “Bu IP adresini senin için ayarladım.”</p><p>Ethernet kartımız gelen IP adresine bakar ve eğer beğendiyse DHCP sunucusuna tekrar cevap gönderir:<br> “Ben bu IP’yi aldım ve kabul ettim.”</p><p>DHCP sunucusu, IP adresinin kabul edildiğini onayladıktan sonra:</p><ul><li>1 adet IP adresi</li><li>1 adet <strong>default gateway</strong></li><li>1 adet <strong>subnet mask</strong></li></ul><p>gönderir.</p><p>Ethernet kartımız da bu bilgilerle kendi IP adresini ayarlar. Artık cihazımız IP üzerinden haberleşebilir.</p><h4>Default Gateway Nedir, Nereden Çıktı?</h4><p>Şu anda aktif olarak kullandığımız <strong>IPv4</strong> sistemi 32 bitten oluşur. Bu da 4.294.967.296 farklı IP adresi türetilebilir anlamına gelir. Ancak bu adreslerin çoğu özel IP adresleridir ve internete doğrudan çıkamaz.</p><p>Gerçekten internete çıkabilen IP adresi sayısı yaklaşık 3.3 milyardır. Bu sayı, tüm cihazlar için yetersizdir.</p><h4>Peki internete çıkmak için hangi IP adresini kullanacağız?</h4><p>Evimizdeki hiçbir cihaz hangi IP adresi ile internete çıkacağını bilmez. Evdeki modemimizin bize sağladığı <strong>internete çıkış kapısı</strong> vardır.<br>Cihazlarımız internete çıkmak için veri paketlerini <strong>default gateway</strong>’e gönderir.</p><h4>Peki, MAC adresini nasıl öğreniyoruz?</h4><p>Bir ethernet kartının başka bir ethernet kartına bilgi gönderebilmesi için onun <strong>MAC adresini</strong> bilmesi gerekir.<br> Bizim bildiğimiz sadece IP adresi, peki MAC adresi nasıl öğrenilir?</p><p>Bunu bize söyleyen şey <strong>ARP (Address Resolution Protocol)</strong>’dür.</p><p>Her cihazda bulunan bu protokol, IP adresine karşılık gelen MAC adresini bulmak için önce kendi kayıtlarına bakar. Daha önce sormuşsa cevabı oradan alır, bulamazsa yeni bir <strong>ARP talebi</strong> gönderir.</p><p>Bu da broadcast türünde bir çerçevedir:<br> “192.168.1.1 IP adresi kime ait?”<br> Bu tüm ağa yayılır ve sadece bir cihaz cevap verir:<br> “Bu IP bana ait, MAC adresim şu.”</p><p>Gelen MAC adresi genellikle bizim <strong>modemimizin MAC adresi</strong> olur. Çünkü biz internete modem üzerinden çıkıyoruz.</p><h4>NAT (Network Address Translation) Neden Vardır?</h4><p><strong>Local IP’ler internete çıkamaz.</strong><br>Bu yüzden <strong>NAT</strong> sistemine ihtiyaç duyarız. Cihazımızın kullandığı yerel IP (örneğin 192.168.1.5) NAT sayesinde, internet sağlayıcımızın verdiği <strong>public IP</strong> ile değiştirilir.</p><p>Yani NAT, tüm cihazlarımız için tek bir IP kullanarak internete çıkmamızı sağlar.<br> Modem, bu işlemi yapar: Yerel IP’yi siler, public IP’yi yazar.</p><h4>Peki dışarıdan gelen paketler nasıl karışmıyor?</h4><p>Modem, dışarı gönderdiğimiz her paket için <strong>NAT tablosuna</strong> bir kayıt oluşturur:</p><ul><li>Kaynak IP ve port</li><li>Hedef IP ve port</li></ul><p>Dışarıdan gelen cevaplar da bu tablodaki kayıtlar sayesinde doğru cihaza yönlendirilir.</p><p>Örneğin, evde iki cihaz YouTube’a bağlanıyor. NAT her cihaz için farklı bir <strong>port</strong> numarası belirler.<br> Cevap geldiğinde gelen porttan hangi cihazın veri istediği anlaşılır ve doğru cihaza iletilir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/313/1*2L4eSXzkEYZbeR2m8r5b7w.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/305/1*ciS0P5n-qWEHb_DnzCy7Tw.png" /></figure><h4>DNS Nedir?</h4><p>Sunucuya erişmek için IP adresini bilmemiz gerekir. Ancak IP’ler karmaşık ve ezberlemesi zordur.<br> Bu yüzden <strong>DNS (Domain Name System)</strong> adında bir sistem kullanırız.</p><p>DNS, alan adlarını (örneğin: www.youtube.com) IP adreslerine çevirir.</p><p>Tarayıcı, yazdığınız adresin IP’sini öğrenmek için DNS sunucusuna bir istek gönderir.<br> Örneğin: 8.8.8.8 Google’ın DNS sunucusudur.</p><p>DNS sayesinde domain isimleri ezberlenebilir ve kullanıcı dostu olur.</p><h4>IP’nin Network ve Host Kısımları</h4><p>Bir IP adresi ikiye ayrılır:<br> <strong>Network</strong> ve <strong>Host</strong>.</p><p>Örneğin: 192.168.1.5</p><ul><li>192.168.1 kısmı <strong>network</strong></li><li>.5 kısmı <strong>host</strong> (cihaz)</li></ul><p>Bu ayrımı yapabilmek için <strong>AND işlemi</strong> kullanılır.<br> Böylece cihaz, verdiğiniz IP’nin kendi ağına ait olup olmadığını anlayabilir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/457/1*Vcqgym65A0sU53tLqAdcig.png" /></figure><h4>İnternete Çıkışın Teknik Akışı:</h4><ol><li>Cihaz açılır ve Ethernet kartı aktif olur.</li></ol><p>2. DHCP ile IP alınır (IP, gateway ve subnet mask).</p><p>3. DNS çözümlemesi yapılır (örneğin, useinsider.com hangi IP’de).</p><p>4. Gerekirse ARP ile MAC adresi öğrenilir.</p><p>5.Cihaz, default gateway üzerinden NAT ile internete çıkar.</p><p>6.Veri paketleri sırasıyla bina kutusu &gt; saha dolabı &gt; santral &gt; router üzerinden internete ulaşır.</p><p>7.Sunucuya HTTP GET isteği gönderilir ve yanıt alınır.</p><h4>HTTP &amp; HTTPS Nedir?</h4><p>HTTP (HyperText Transfer Protocol): Web tarayıcınız ile sunucu arasındaki iletişim protokolüdür.</p><p>HTTPS: HTTP’nin şifrelenmiş versiyonudur; güvenli veri iletimi sağlar.</p><p>200 OK: Her şey yolunda</p><p>404 Not Found: Sayfa bulunamadı</p><p>500 Internal Server Error: Sunucu hatası</p><p>301 / 302: Yönlendirme kodları</p><h4>API Nedir?</h4><p>API (Application Programming Interface), yazılımlar arasında veri alışverişi yapılmasını sağlayan yapıdır.</p><p>Örneğin: Hava durumu uygulaması, bir API üzerinden hava durumu verilerini çeker.</p><p>API genellikle GET veya POST metoduyla çalışır ve genellikle JSON formatında veri döner.</p><h4>Gerçek Hayat Analojisi:</h4><p>Web, bir restorana benzetilebilir:</p><ul><li>Kullanıcı: Müşteri</li><li>Menü: API dökümanları</li><li>Garson: API</li><li>Mutfak: Sunucu</li><li>Yemek: Veri</li></ul><p>Kullanıcı sipariş verir, garson siparişi iletir, mutfak yemeği hazırlar ve garson kullanıcıya getirir. Kullanıcı ise güzel bir deneyim yaşar.</p><h4>Sonuç:</h4><p>Teknolojiyi yalnızca kullanan değil, anlayan biri olduğumuzda daha etkili çözümler geliştirebiliriz. Bir cihazın internete nasıl bağlandığını bilmek, hem sistemin işleyişini kavramamızı hem de problemlerde daha etkili müdahale edebilmemizi sağlar.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=17ee59658baa" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Insider Staj Günlükleri — Bölüm 0: İlk Hafta Notları]]></title>
            <link>https://medium.com/@severustark/insider-staj-g%C3%BCnl%C3%BCkleri-b%C3%B6l%C3%BCm-0-i%CC%87lk-hafta-notlar%C4%B1-97b37f67493a?source=rss-b2a0870810fc------2</link>
            <guid isPermaLink="false">https://medium.com/p/97b37f67493a</guid>
            <category><![CDATA[staj]]></category>
            <category><![CDATA[insider]]></category>
            <dc:creator><![CDATA[Damla ARPA]]></dc:creator>
            <pubDate>Fri, 04 Jul 2025 08:58:01 GMT</pubDate>
            <atom:updated>2025-07-04T11:28:11.966Z</atom:updated>
            <content:encoded><![CDATA[<h3>Insider Staj Günlükleri — Bölüm 0: İlk Hafta Notları</h3><h3>Serhat Soyuerel</h3><h3><strong><em>1. Verimli stajın förmülleri:</em></strong></h3><p>Serhat Bey’in konuşması “merak” kavramıyla başladı.Her ne kadar içimizdeki korkular bazen bizi frenlese de doğru soruları sormaktan çekinmemeliyiz.<em>“Bir soru etikse ve estetikse, herkes her şeyi sorabilir.”</em> Insider’daki insanları “tüketmekten” çekinmemek gerektiğini de özellikle vurguladı.Kim, ne okuyor? Hangi teknolojileri kullanıyorlar? Ne üzerine kafa yoruyorlar? Bu soruları sormak, bu ortamdan en yüksek verimi almak için anahtar niteliğinde.</p><p>“Yazmak” ise staj sürecinde en güçlü araçlardan biri.Her hafta öğrendiklerimizi Medium yazılarına dökmek, bir yandan düşüncelerimizi olgunlaştırırken diğer yandan hedeflerimizi netleştirmemizi sağlıyor.</p><p>Bunun yanında okuma önerileri:</p><ol><li>The Mythical Man-Month</li><li>Zero to One</li><li>How Google Works</li></ol><blockquote>Ne kadar çok proje görür, ne kadar çok elini kirletirsen; o kadar yetkinleşirsin.</blockquote><p>Şu an Avrupa’nın en iyi, dünyanın ise 5. en iyi yazılım şirketindesin… Bunun farkındalığında ol ;)</p><h3>2. Yaşam Sanatı:</h3><ol><li>Sevdiğin işi sevmek zorunda değilsin.<br> Asıl önemli olan, yaptığın işin hizmet ettiği misyona tutkuyla bağlı olabilmek.(müzisyen örneğindeki gibi).</li></ol><blockquote>Önce <strong>emek</strong>, sonra <strong>başarı</strong>, en son ise <strong>sevgi</strong> gelir.<br> Ve o sevgi zaten, yolculuğun tamamına duyulan sevgidir.</blockquote><p>2. Hayat sana her zaman iki seçenek sunar:<br> <strong>Disiplin</strong> ya da <strong>pişmanlık.</strong><br> Seçim senin.</p><p>3. <strong>Bildirimleri kapat.</strong><br> Çünkü bildirimler, başkalarının senin telefonuna kurduğu alarmdır.</p><p>4. Ve cebinde hep şu beceriler olsun:</p><ul><li>İyi derecede İngilizce</li><li>Hızlı okuma</li></ul><p>5. Her sene iş değiştirme.<br>Bu, firmalara kötü bir izlenim verir.Kariyerine başlarken, en az 3 yıl kalabileceğin bir yer seçmeye çalış.</p><p>6. Master yapma. En iyi master programı YouTube’da.</p><p>7. MVP minimum variable world :)</p><p>Ve kapanışta ne yaparsan yap, hep altın madalya peşinde koş.</p><h3>Kerem Bozokluoğlu</h3><p><strong>Dijital Detox ve Boş Vakit Yaratmak</strong></p><p><strong>Meşgul olmak = kendini değerli hissetmek </strong>daha önce benim de sıkça düşündüğüm bir konuyu, birisinin yıllar önce fark edip hayatında uygulaması, bugün en çok dikkatimi çeken şey oldu.</p><p><strong>Fırsat alanları =Boş vakit yaratmak.</strong> İyi bir zaman yönetimiyle aslında her şeye vakit ayırmak mümkün, önemli olan ne için meşgul olduğumuzu bilmek. Hatta FOMO (bir şeyleri kaçırma korkusu) nedeniyle sürekli aktif kalmaya çalışıyoruz; ama bu durumda odağımız asla sabit kalmıyor.Hiç “Yapacak bir şeyim yok” dediğinde huzursuz hissettin mi? İşte tam da burada, fırsat alanları yaratmak gerekiyor. Boş vakitlerimizi düşünme ve gelişme zamanına çevirmeliyiz.</p><p>Ve bu fırsat alanlarında izlenen bir videonun uygulanıp doğru sonuçlara ulaşıldığını duymak, benim için önemli bir kanıt oldu. Bazen sadece 15 dakikalık bir video bile, mikro öğrenme fırsatları yaratıyor; bu sayede boş vakitlerimizi düşünme ve gelişme alanına dönüştürdüğümüzde, çok daha büyük işler başarabileceğimizi deneyimleyerek öğrenmiş oldum.</p><p>En iyi fikirler, aslında sıkıldığımız ve kendimize gerçekten boş zaman tanıdığımız anlarda ortaya çıkıyor. Bu yüzden, zaman zaman kendimize bilinçli olarak “sıkılma” vakitleri yaratmamız gerektiğini fark ettim.</p><p>Bir de kendimize şu soruyu sormalıyız: <strong><em>Kendimi üç cümleyle nasıl tanımlarım?</em></strong><br> Çünkü yöneticilerimizle yapacağımız birebir görüşmelerde kendimizi doğru ifade etmek çok önemli. En azından bunun üzerine düşünmek ve denemek, kendimizi daha iyi tanımamız için değerli bir adım olabilir.</p><p>Sabah yaptığın kısa yürüyüşler bile sana fark yaratma şansı verir. Düşünsene, bir gün boyunca sadece 30 dakika kendinle baş başa kalacak olsan neler yapardın, neler düşünürdün?</p><p>İş hayatında fark yaratmanın en önemli yolu, birisinden görev beklemeden kendi görevini yaratmak. Çünkü gerçekten de, eğer fark yaratmak istiyorsak, kimsenin bize sorumluluk vermesini beklememeliyiz; işleri sahiplenmeli ve inisiyatif almalıyız. Ne kadar çok sahiplenirsek, o kadar fazla farkındalık kazanır, o kadar iyi işler çıkarırız.</p><p>Beklemek, aslında tamamen<em> pasif bir refleks</em>. Zamanla, ekipte bazı kişiler işleri sahiplenip sorumluluk aldıkça, o ekip daha da güçleniyor. Hatta bazen bu kişiler, ekibin önünü açmak için yollarına başka yerlerde devam edebiliyorlar.</p><p>Bu yüzden “beklemek” yerine <strong>proaktif</strong> bir şekilde sürece dahil olmak, fark yaratan kişi olmanın anahtarı. Bunu yapabilmek için ise her gün kendimize şu soruyu sormalıyız:<br> <strong>“Bugün ben, gerçekten elimden geleni yaptım mı?”</strong><br> Bu soruyu sormadıkça farkında olmadan içimize çekiliriz.</p><blockquote>Proaktif olmak = Problemi fark edebilmek ve çözüm üretebilmek.</blockquote><p>Söylemeden, beklemeden iş yapmak için çabalamalıyız. Eğer biri size görev vermeden harekete geçemiyorsanız, gerçekten sevdiğiniz bir alanda mısınız, bunu sorgulamalısınız. Kendinize dürüstçe şu soruyu sorun:<br> <strong>“Ben burada neyi sevmedim?”</strong></p><p>İş yapmak sadece görev tamamlamak değildir; esas mesele proaktif olabilmek, yani problemi fark edip çözüm üretebilmektir. Mikro girişimcilik tam da budur. Girişimcilik illa bir şirket kurmak değildir, bazen sadece bulunduğun yerde fırsat yaratmaktır.</p><p>Unutmamalıyız: Proaktif insanlar değer yaratan insanlardır.<br> Ve en önemlisi; <strong>soru sormak bir zayıflık değil, bir güçtür.</strong><br> Bilgisiz değil, öğrenmeye açık insanlar soru sorar.<br> Bu yüzden derinleştirilmiş, anlamlı sorular sormaktan asla çekinmemeliyiz.</p><h3>Damla Dural</h3><p><strong>Eisenhower Matrisi :</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/799/1*vIYaEejguL2PO_HN6yOi6g.png" /></figure><p>Önceliklerimizi belirlemenin en etkili yöntemlerinden biri Eisenhower Matrisi. Yapmamız gereken işleri bu matrise yerleştirip önem ve aciliyet durumlarına göre sınıflandırmalıyız. Çünkü her zaman işler arasında net bir “deadline” (bitiş tarihi) olmayabiliyor. Örneğin, bir iş diğerinden daha önemli olabilir; ama ikisinin de kesin bir teslim tarihi yoksa odak kaybı yaşamak kaçınılmaz olur.</p><p>İşte tam da bu yüzden <strong>zaman bloklama</strong> yöntemi devreye giriyor. Zaman bloklamada önce önceliklendirilmiş bir iş listesi oluşturuyoruz. Ardından haftalık ve günlük olarak zaman aralıkları belirliyoruz. Hangi gün hangi iş üzerinde çalışacağımızı ve neyi ne zaman bitirmemiz gerektiğini netleştiriyoruz. Eğer bu işleri bir yere yazmazsak, zihnimizde sürekli “Buna ne zaman bakacağım?” sorusu dönüp durur.</p><p>Zaman bloklamanın iki önemli kuralı var:</p><ul><li><strong><em>Bloklara sadık kalmak</em></strong></li><li><strong><em>Esnek olmak </em></strong>(Çünkü bazı işleri tam olarak tahmin edemeyebiliriz; bu durumda stres yapmadan planı güncellemek önemli.)</li></ul><p><strong>Haftalık ve günlük planlama</strong> dağılma riskini azaltır. Bunun için her hafta, hatta her gün, planlarımızı gözden geçirmeliyiz. Tamamlayamadığımız işleri fark edip, planlarımızı güncelleyebiliriz.</p><p><strong>Hedef koyarken</strong> ise SMART yöntemi devreye giriyor. Yani hedeflerimiz görsele uygun bir biçimde koymalıyız:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/318/1*ISfOMEswVfQoYdoBi8uvxw.png" /></figure><p>Tüm bu yöntemler aslında güçlü bir <strong>alışkanlık inşası</strong>.<br> Sürekli öğrenmeye açık olmak ve hedeflerimizi (veya senin deyiminle “almaçlarımızı”) netleştirmek bu sürecin temel taşları.</p><p>Ben de bu alışkanlıkları kazanmak için şimdiden küçük adımlar atmaya başladım.</p><h3>Umur Korkut</h3><p>Bu bölümde Umur Bey’in hem eğlenceli hem de öğretici videolarını izledik. Paylaşacağım linklerden sizler de faydalanabilirsiniz.</p><blockquote>Staj,insani bağlantılar kurmaktır!</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FGgsbG3WEmHs%3Fstart%3D6%26feature%3Doembed%26start%3D6&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DGgsbG3WEmHs&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FGgsbG3WEmHs%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/6489d60278a064d67dca6f6a9d900c19/href">https://medium.com/media/6489d60278a064d67dca6f6a9d900c19/href</a></iframe><blockquote>Empati != Sempati</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FKZBTYViDPlQ%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DKZBTYViDPlQ&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FKZBTYViDPlQ%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/ff7d9e085bdcf714ea628ebae8cccbc9/href">https://medium.com/media/ff7d9e085bdcf714ea628ebae8cccbc9/href</a></iframe><blockquote>Karar öncesi tartış -&gt; Karar sonrası tam destek</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FAfoh23PHVP0%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DAfoh23PHVP0&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FAfoh23PHVP0%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/cdb259dec318013d407631fd586dad8a/href">https://medium.com/media/cdb259dec318013d407631fd586dad8a/href</a></iframe><p>Radikal samimiyet ile iş yerinde gerçek etki yaratmak nasıl mümkün?</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FOmoGLPJOLY8&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DOmoGLPJOLY8&amp;image=http%3A%2F%2Fi.ytimg.com%2Fvi%2FOmoGLPJOLY8%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/110185f7c364946d37ddd73c37411ad8/href">https://medium.com/media/110185f7c364946d37ddd73c37411ad8/href</a></iframe><blockquote>Bir stajyer :)</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FYZ5tOe7y9x4%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DYZ5tOe7y9x4&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FYZ5tOe7y9x4%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/637387c43f6acff3e2c848b376c01e5a/href">https://medium.com/media/637387c43f6acff3e2c848b376c01e5a/href</a></iframe><h3>Emrah Polatcan</h3><p>Bu bölümde Emrah Bey, <strong>“Yapay Zeka = 10x Güç”</strong> yaklaşımını anlattı.<br>Özellikle canlı olarak yaptığı <strong>Copilot</strong> kullanarak bizelere gerçek bir proje üzerinde deneme yapması , yapay zekanın aslında bizim gücümüze nasıl güç kattığını gösterdi.Ancak sadece yapay zekaya güvenmenin yeterli olmadığını; <strong>tecrübe faktörünün</strong> bu süreçte çok önemli bir rol oynadığını da vurguladı. Yapay zekayı doğru kullanan, tecrübesiyle harmanlayan kişilerin fark yarattığına dikkat çekti.</p><h3>Kerem Okudan</h3><p>Kerem Bey, sektörde kullandığımız kelimelerin ne kadar önemli olduğundan ve kelimelerin kökenine dikkat etmemiz gerektiğinden bahsetti. Özellikle, teknik insanlarla aynı masaya oturduğumuzda daha etkili iletişim kurabilmek için dikkat etmemiz gereken püf noktalara değindi.Ama itiraf etmeliyim ki, benim en çok hoşuma giden kısım <strong>aslan, tilki ve tavşan hikayesi</strong> oldu! :)</p><p>Fazlasıyla farklı bir deneyimdi,İnanılmaz keyif aldığım bir 9 saat geçirdim. Hoşgeldim Insider ❤</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=97b37f67493a" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>