<?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[Kodcular - Medium]]></title>
        <description><![CDATA[“Kodcular, Türkiye’nin En Büyük Medium Yazılım Topluluğudur.” Bu yayın yazılım üzerine üretilen blogların bir araya geldiği bir Türkçe yayındır. - Medium]]></description>
        <link>https://medium.com/kodcular?source=rss----ff2de8699413---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Kodcular - Medium</title>
            <link>https://medium.com/kodcular?source=rss----ff2de8699413---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 27 May 2026 22:41:13 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/kodcular" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Frontend Ekosistemi İnşa Etmek: Zanaattan Mühendisliğe Bir Yolculuk]]></title>
            <link>https://medium.com/kodcular/frontend-ekosistemi-i%CC%87n%C5%9Fa-etmek-zanaattan-m%C3%BChendisli%C4%9Fe-bir-yolculuk-78111c2d96dc?source=rss----ff2de8699413---4</link>
            <guid isPermaLink="false">https://medium.com/p/78111c2d96dc</guid>
            <category><![CDATA[frontend-development]]></category>
            <category><![CDATA[virastack]]></category>
            <category><![CDATA[frontend-architecture]]></category>
            <category><![CDATA[frontend]]></category>
            <dc:creator><![CDATA[Ömer Gülçiçek]]></dc:creator>
            <pubDate>Sun, 05 Apr 2026 15:10:12 GMT</pubDate>
            <atom:updated>2026-04-05T15:10:10.215Z</atom:updated>
            <content:encoded><![CDATA[<p>Frontend dünyasında her gün binlerce paket yayınlanıyor. Ancak benim için bu süreç, “<strong>hazır olanı kullan geç</strong>” kolaylığından ziyade, her satırın arkasındaki matematiği anlama ve kendi standartlarımı kurgulama tutkusuyla başladı. Bu yazı; kişisel bir meraktan doğan isimlendirmelerin, nasıl global bir mühendislik ekosistemine -<a href="https://github.com/virastack">ViraStack</a>’e- dönüştüğünün hikayesidir.</p><h4>İlk Göz Ağrısı: Turkuaz CSS</h4><p>Her şey <a href="https://getbootstrap.com/">Bootstrap</a> ve <a href="https://materializecss.com/">Materialize</a> gibi devlerin kaynak kodlarında kaybolduğum günlerde başladı. Amacım onlarla yarışmak değil, bir UI kütüphanesinin arka planda nasıl nefes aldığını anlamaktı. Bu merakın ilk somut çıktısı <a href="https://github.com/omergulcicek/turkuaz">Turkuaz</a> oldu. Turkuaz sayesinde CSS’in teknik derinliklerini keşfettim ve zorluklarını bizzat deneyimledim. Bugün artık modern standartlar (<a href="https://tailwindcss.com/">Tailwind CSS</a>, <a href="https://ui.shadcn.com/">shadcn/ui</a>) yerleştiği için bu projeyi rafa kaldırmış olsam da Turkuaz, bana bugünkü vizyonumu kazandıran ilk göz ağrım olarak kaldı.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*kJR4tK49p_EhaF_93YqhvQ.jpeg" /><figcaption>ViraStack logosu</figcaption></figure><h4>İsimlerin Ruhu ve Karşılaşılan Bariyerler</h4><p>Turkuaz’dan sonra her projeye karakterini yansıtan Türkçe isimler verdim. Next.js mimarisini disipline eden Nizam, yapay zekayı bir asistan gibi eğiten mimari kurallar seti Kaide ve React Hook Form için geliştirdiğim hafif maskeleme paketi Beti bu dönemin ürünleriydi. Bu isimler kısa, akılda kalıcı ve ASCII standartlarına uygun olsa da; zayıf keşfedilebilirlik ve dokümantasyonu incelemeden projenin amacının anlaşılamaması gibi sorunları da beraberinde getirdi.</p><p>@omergulcicek/beti gibi bireysel isim-soyisim içeren paketler, geliştiricilerde &quot;<strong>kişisel bir deneme</strong>&quot; algısı yaratıyor ve güven bariyeri oluşturuyordu. Bu durum, nitelikli bir mühendislik çalışmasının hak ettiği ilgiyi görmesini engelliyordu. Ayrıca bu derin Türkçe isimlerin global arenasinda telaffuzu zor, SEO karşılığı zayıf ve domain erişilebilirliği kısıtlıydı. Profesyonel bir büyüme için bireysel repolardan, topluluk odaklı ve ölçeklenebilir bir organizasyon yapısına geçmek zorundaydım.</p><h4>ViraStack: Bir Ekosistemin Doğuşu</h4><p>Zanaatkarlıktan mühendisliğe geçiş, stratejik bir karar gerektiriyordu. İsim arayışımda Türkçe kökenli, fonetik olarak güçlü ve yabancıların da kolayca telaffuz edebileceği bir kelime aradım. Sonunda <strong>Vira</strong> isminde karar kıldım. Bana Karadeniz’in o mücadeleci ruhunu, balıkçıların “Vira Bismillah” diyerek yola çıkışını çağrıştırıyordu. Hem kısa hem de <strong>Meta</strong>, <strong>Vite</strong> veya <strong>Vue</strong> gibi teknolojik bir tınısı vardı. <strong>Vira</strong> ismi tek başına dolu olduğu için, bu yapıyı bir “stack” disipliniyle birleştirerek <a href="https://github.com/virastack">ViraStack</a> organizasyonunu kurdum.</p><h4>Peki, Bunlarla Neden Uğraşıyorum?</h4><p><strong>ViraStack</strong> sadece bir isim değişikliği değil, bir vizyon değişikliği. Bu benim öğrenme biçimim; bir işin mutfağına girip detaylara ve kaliteye en uç noktada hakim olmayı seviyorum. Her projeyi markalaştırarak o fikri benimsiyor, böylece sadece kod yazmakla kalmayıp bir standart inşa ediyorum. Eskiden Turkuaz ile CSS dünyasını araştırırken; bugün <strong>ViraStack</strong> çatısı altında <strong>React mimarileri</strong>, <strong>Hook yapıları</strong> ve <strong>Yapay Zeka protokolleri</strong> gibi konularda en güncel standartları keşfetmeye itiliyorum. Tüm paketleri birbirine kenetli, tutarlı ve üst kalite bir alet çantası olarak kurgulamaya özen gösteriyorum. SEO dostu isimlendirmeler ve organizasyonel yapı sayesinde, artık bireysel bir çabanın ötesinde, topluluğa ait ve güven veren bir ekosistem inşa ediyorum.</p><h4>Sonuç: Geleceğe Vira!</h4><p>Frontend ekosistemi inşa etmek benim için sadece kod yazmak değil; her parçası özenle düşünülmüş, tutarlı bir düzen kurmaktır. <strong>ViraStack</strong> ile sadece bir ekosistem inşa etmekle kalmıyor; bu yapının hangi kurallar <strong>(AI Rules)</strong> üzerine kurulacağını ve hangi standart başlangıç yapılarıyla <strong>(Boilerplate)</strong> ayağa kaldırılacağını uçtan uca tasarlıyorum. Bu yolculuğun teknik mimarisini, geliştirdiğim paketlerin derinliklerini ve ekosistemin işleyişini bir sonraki makalede kapsamlı bir şekilde ele alacağım.</p><p>ViraStack ekosistemi, topluluktan gelen geri bildirimlerle büyümeye devam ediyor. Projeleri GitHub üzerinden yıldızlayarak ve sosyal medyada takip ederek bu açık kaynak yolculuğuna destek olabilirsiniz:</p><ul><li><strong>GitHub</strong>: <a href="https://github.com/virastack">github.com/virastack</a> (<em>Yıldızlayarak destek olun ⭐</em>)</li><li><strong>X (Twitter)</strong>: <a href="https://x.com/virastack">x.com/virastack</a></li><li><strong>LinkedIn</strong>: <a href="https://linkedin.com/company/virastack">linkedin.com/virastack</a></li></ul><p>Yeni proje fikirleriniz veya teknik sorularınız için bana her zaman bu kanallar üzerinden ulaşabilirsiniz. Geleceğe vira!</p><p><strong>Kişisel Sitem</strong>: <a href="https://omergulcicek.com/">omergulcicek.com</a><br><strong>Blog</strong>: <a href="https://omergulcicek.com/blog/frontend-ekosistemi-insa-etmek/">https://omergulcicek.com/blog/frontend-ekosistemi-insa-etmek/</a><br><strong>X (Twitter)</strong>: <a href="https://x.com/omergulcicek">@omergulcicek</a></p><p><em>Makaleyi alkışlayarak destek olabilirsiniz </em>🌹</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=78111c2d96dc" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kodcular/frontend-ekosistemi-i%CC%87n%C5%9Fa-etmek-zanaattan-m%C3%BChendisli%C4%9Fe-bir-yolculuk-78111c2d96dc">Frontend Ekosistemi İnşa Etmek: Zanaattan Mühendisliğe Bir Yolculuk</a> was originally published in <a href="https://medium.com/kodcular">Kodcular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Claude Alışkanlıklarımı Nasıl Değiştirdi?]]></title>
            <link>https://medium.com/kodcular/claude-al%C4%B1%C5%9Fkanl%C4%B1klar%C4%B1m%C4%B1-nas%C4%B1l-de%C4%9Fi%C5%9Ftirdi-a8a838b23282?source=rss----ff2de8699413---4</link>
            <guid isPermaLink="false">https://medium.com/p/a8a838b23282</guid>
            <category><![CDATA[github-copilot]]></category>
            <category><![CDATA[cursor]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[yapay-zeka]]></category>
            <category><![CDATA[claude]]></category>
            <dc:creator><![CDATA[Umutcan Karakaş]]></dc:creator>
            <pubDate>Sun, 05 Apr 2026 15:09:48 GMT</pubDate>
            <atom:updated>2026-04-05T15:09:47.445Z</atom:updated>
            <content:encoded><![CDATA[<h4>Aslında her şey çok daha önce başladı.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*zT41zmBWIhL4x6Eh.png" /></figure><p>2023 başları, o dönem çalıştığım şirkette haftada bir kısa bir sunum oluyor. Her seferinde farklı birisi diğerlerine yararı olacağını düşündüğü bir konuda kısa bir eğitim, peşine de soru-cevap yapıyor.</p><p>O dönem bir ekip arkadaşım Github Copilot’tan bahsetti, nasıl kullanıldığını, nasıl kod önerileri yaptığını anlattı. O dönem çok ilgimi çekmedi açıkçası, belki arkadaşımın verdiği örneklerden, belki de o dönem Copilot’un kapasitesinin gerçekten o kadar olduğundan bilmiyorum, aa bir de ben deneyeyim demedim. Daha da dürüst olmak gerekirse, yakın zamanda bunun pek de bir yere gideceğini düşünmedim. Ama aklımda bir köşede kaldı bu.</p><p>2025 başları, bu sefer bir bankaya çalışıyorum. Banka kendi “Copilot”unu üretmeye çalışıyor çünkü dışarıdan bu şekilde bir araç kullanılırsa güvenlik zaafiyeti yaratabilir düşüncesi hakim. Yüklettikleri araç 2023&#39;te gördüğüm Copilot’un bile daha gerisinde. Heh diyorum, tam da düşündüğüm gibi. Pek de ilerleme yok. Ama nasıl yanılıyorum.</p><p>2025 ortalarında, şirkette bir yapay zekâ eğitimi oluyor. Bir düzine yapay zeka aracı tanıtılıyor, ama aklımda Claude ve NotebookLM kalıyor. NotebookLM başka bir yazının konusu olacak, burada Claude’dan bahsedeceğim. Claude MCP sunucuları kullanıyor, MCP sunucularının listesinin olduğu GitHub reposu kaydırdıkça bitmiyor, tüm bunların yapay zekâ tarafından kullanılabilir hale geldiğine inanamıyorum. İleride çok işime yarayacağını düşünüyorum fakat o an pek de kullanım alanı bulamadığımdan Claude’a geçmiyorum. Fakat Claude aklımda yer ediyor.</p><p>2025 devam ediyor, bense kodlama sorularım için direkt olarak ChatGPT ile sohbet ediyorum. Bankaya çalışmaya devam ettiğim için herhangi bir kodu alıp da ChatGPT’ye atmam mümkün değil, o yüzden hâlâ tam olarak bir kodlama asistanı olarak kullanamıyorum ama aldığım cevaplardan yapay zekâ destekli kodlamanın geldiği seviyeleri yavaş yavaş anlamaya başlıyorum.</p><p>2026 başı, en sonunda X’te gördüğüm bazı twitlerden sonra Cursor’a bir şans vermeye karar veriyorum. Üzerinde çalıştığım repoyu Cursor’da açıyorum. Eklemek istediğim deneyi prompt ile yazıyorum. Biraz deneme yanılma sonrasında tek satır kod yazmadan deneyimin koda eklenip çalıştırıldığını, sonuçlarının kaydedildiğini ve yorumlandığını görüyorum. Hemen aylık Cursor üyeliği alıyorum. Artık hem ChatGPT hem de Cursor kullanıyorum.</p><p>Cursor’u keşfetmeye devam ederken Copilot olayının ne kadar mesafe kat ettiğine hayret ediyorum, X’te bu konuda daha fazla içerik takip etmeye başlıyorum. En sonunda Claude Code ile ilgili twitler görmeye başlıyorum. Tam o sıralarda başka bir arkadaşım da Claude Code ile oyun geliştirmekte olduğunu, sonlarına yaklaştığını söylüyor.</p><p>Aynı anda hem Cursor, hem ChatGPT, hem de Claude’a para vermek biraz gözümde büyüyor fakat Claude’un vaat ettikleri beni çok cezbediyor, Claude Pro alıyorum. İlk birkaç günün sonunda Cursor ve ChatGPT üyeliklerimi sona erdiriyorum, çünkü Claude ikisini birden karşılıyor.</p><p>Cowork ve Code beni hem iş tarafında hem de doktora tarafında defalarca saatler sürebilecek eforlardan kurtarıyor; hem ben memnun kalıyorum hem de çalıştığım insanlar çıktılardan memnun oluyor. Hızlı bir şekilde prototipler, POC’ler yapabiliyorum, makaleleri topluca verip analiz ettirebiliyorum, sunulmaya neredeyse hazır sunumlar hazırlatabiliyorum. Öyle ki, aylardır kangren olmuş bazı kodlama sorunlarımı birkaç promptta çözüyor, senelerdir yapmak istediğim <a href="https://umutcankarakas.github.io/riddle/">hobi projelerimi</a> bile yapabilir hale geliyorum.</p><p>Sorumluluk almaktan kaçınmıyorum, çünkü artık kodlama eforu neredeyse fikri üretme eforuyla benzer seviyelere geliyor.</p><p>Şu anda tek problem usage limit gibi duruyor. Bunun için de alternatif çözümler arıyorum; bu limit olayı çözülse Claude’dan çıkmam gibi geliyor.</p><p>Günümüzde hâlâ Claude kullanmaktayım. Ne yazık ki özelleştirilmiş, MCP’ler ile güçlendirilmiş versiyonları hâlâ çok başarılı değil, fakat eskisi gibi başarılamaz, çözülemez diye bakmıyorum. Ayrıca Office eklentileri de hoş, fakat çok token harcadığından çok gerekmedikçe kullanmamaya çalışıyorum. Onun haricinde hem işte hem akademide elim ayağım oldu diyebilirim. 3 ayda, özellikle Claude kullandığım bu kısa sürede bu araçları neden daha önce kullanmadığımı düşünüp hayıflanıyorum, geç olsun güç olmasın diyorum.</p><p>Sizden ricam, eğer bu yazıyı okuduysanız ve henüz bu araçlardan birini bile kullanmadıysanız, sadece sohbet ile yetiniyorsanız, biraz daha derinlere inmeniz, biraz daha elinizi kirletmeniz. İnanın, verdiğiniz efor aldığınız ödül yanında çok ufak kalacak. Eğer halihazırda bu araçları kullanıyorsanız ve anlattıklarımdan da fazla yararlanabiliyorsanız, lütfen bunu yorumlarda paylaşın.</p><p>O halde bir sonraki yazıda görüşmek üzere :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a8a838b23282" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kodcular/claude-al%C4%B1%C5%9Fkanl%C4%B1klar%C4%B1m%C4%B1-nas%C4%B1l-de%C4%9Fi%C5%9Ftirdi-a8a838b23282">Claude Alışkanlıklarımı Nasıl Değiştirdi?</a> was originally published in <a href="https://medium.com/kodcular">Kodcular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Modern Yönetimin Büyük Yanılsaması: Neden “Kolay” Her Zaman Kazanır?]]></title>
            <link>https://medium.com/kodcular/modern-y%C3%B6netimin-b%C3%BCy%C3%BCk-yan%C4%B1lsamas%C4%B1-neden-kolay-her-zaman-kazan%C4%B1r-f149b45cf94e?source=rss----ff2de8699413---4</link>
            <guid isPermaLink="false">https://medium.com/p/f149b45cf94e</guid>
            <category><![CDATA[drucker-vs-deming]]></category>
            <category><![CDATA[modern-yönetim]]></category>
            <category><![CDATA[modern-managment]]></category>
            <category><![CDATA[sistem-düşüncesi]]></category>
            <category><![CDATA[yönetim-bilimi]]></category>
            <dc:creator><![CDATA[Adnan Yağmur]]></dc:creator>
            <pubDate>Fri, 20 Feb 2026 11:48:09 GMT</pubDate>
            <atom:updated>2026-02-20T11:48:07.801Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*i664Q-DyM5xD3ROcrR-12Q.png" /></figure><p>Modern yönetim dünyası, yirminci yüzyılın ortalarında şekillenen ve günümüzde dijital dönüşümle evrilen iki devasa düşünce okulunun gerilimi üzerine kurulu görünüyor. Ancak bu gerilim, sandığınız gibi dengeli bir mücadele değil; zemindeki levhalar kaymış bir bina gibi, temelleri çürük bir zaferin hikayesi.</p><p>Bir yanda modern yönetimin babası sayılan Peter Drucker ve onun “Hedeflerle Yönetim” (MBO) felsefesinin güncel maskeli balosu olan OKR sistemleri; diğer yanda ise kalite devriminin mimarı, Japonya’nın savaş sonrası mucizesinin arkasındaki isim W. Edwards Deming ve onun “Derin Bilgi Sistemi” (SoPK) duruyor.</p><p>Peki, Batı dünyası neden Drucker’ı bir kahraman gibi kucaklarken, Deming’i neredeyse bir sürgüne mahkum etti? Cevap, iş dünyasının en karanlık sırrında saklı: <strong>Kolay olanın, doğru olanı her zaman yenmesi.</strong></p><p>Bu makalede, panellerdeki gösterge tablolarının (dashboard) arkasında yatan boşluğu, OKR hırslarının bitirdiği ruhları ve yöneticilerin kendilerine kurdukları en büyük yalanı masaya yatırıyoruz.</p><h3>İki Dev, İki Farklı Evren</h3><p>Peter Drucker ve W. Edwards Deming, 20. yüzyılın yönetim anlayışını inşa eden iki temel figür olarak tarihe geçmiştir. Ancak bu iki ismin organizasyonel karmaşıklığa yaklaşımı, birbirinden tamamen farklı iki evreni temsil eder.</p><p><strong>Peter Drucker’ın dünyası:</strong>1954 yılında yayımlanan <em>The Practice of Management</em> eseriyle Drucker, yöneticilerin kantitatif hedeflere sahip olmasının gerekliliğini vurguladı. Ona göre bir yöneticiye hedefi vermek, enerjisini odaklaması için yeterliydi.</p><p>Yani:</p><ul><li>“Nereye gideceğini söyle, nasıl gideceğini sen bilirsin.”</li><li>Kontrol basit ve doğrusaldır.</li><li>Sorumluluk, hedefi alan bireydedir.</li></ul><p><strong>W. Edwards Deming’in dünyası:</strong>Deming ise bu yaklaşımı sert bir dille eleştirdi. Ona göre hedeflerle yönetim, “ne yapılacağını bilmeden yönetme girişimi”ydi ve yönetimin “ölümcül hastalıklarından” biriydi.</p><ul><li>“Sistemi anla, süreci iyileştir, sonuçlar kendiliğinden gelecektir.”</li><li>Kontrol istatistiksel ve bütünseldir.</li><li>Sorumluluk %94 oranında sistemi tasarlayan yönetimdedir.</li></ul><p>Bu ayrım, günümüzde hâlâ geçerlidir. Amerikan ve Batılı şirketlerin büyük çoğunluğu, Deming’in sistem düşüncesini görmezden gelerek Drucker’ın hedef odaklı kontrol sistemlerini tercih etmektedir. Peki neden?</p><p>Termostat Yanılsaması: Neden Kontrol Ettiğimizi Sanıyoruz?</p><p>Yönetim yaklaşımlarını anlamak için en etkili metaforlardan biri “termostat” örneğidir. Drucker’ın hedef odaklı sistemi, klasik bir geri besleme kontrol sistemi olan termostata benzer.</p><p>Bir yönetici, istenen bir “sıcaklık” (hedef) belirler. Sistem bu hedefe ulaşmak için çıktı üretir. Eğer hedef ile mevcut durum arasında bir fark (varyans) varsa, sistem bu farkı kapatmak için zorlanır.</p><p>Bu model size güven verir mi? Vermeli. Çünkü bu model:</p><ul><li>Yöneticinin sınırlı bilişsel kapasitesini korur.</li><li>Karmaşık dünyayı “hedef” ve “gerçek” ikilemine indirger.</li><li>Yöneticiye sürekli bir “aksiyon alma” yetkisi verir.</li></ul><p>Ancak Deming’in yaklaşımı bu noktada devreye girer ve oyunu bozar. Deming, istatistiksel kontrolü savunur. Ona göre bir sistemin “kontrol altında” olup olmadığını anlamak için değişkenliğin doğasını gözlemlemek gerekir.</p><p>Deming’in ünlü <strong>Huni Deneyi (Funnel Experiment)</strong>, istikrarlı bir sisteme yapılan müdahalelerin (tampering), sistemi iyileştirmek yerine aslında değişkenliği artırarak performansı kötüleştirdiğini kanıtlamıştır.</p><p>Yani termostatı sürekli kurcaladığınızda, odayı ısıtmazsınız; sadece sistemi yorar ve dengesizleştirirsiniz.</p><h3>Yöneticinin Konfor Alanı: Bilişsel Tasarruf Tuzağı</h3><p>Modern iş dünyasında yöneticiler, zamanlarının neredeyse tamamını toplantılarda geçiren ve aşırı bilgi yüklemesine maruz kalan aktörlerdir. İşte Drucker’ın fikirlerinin ve OKR gibi sistemlerin baskın hale gelmesinin altında yatan gerçek neden budur: <strong>Bilişsel Tasarruf.</strong></p><p>Bir organizasyon, doğası gereği karmaşık ve kaotik bir yapıdır. Drucker’cı yaklaşım, yöneticilerin bu karmaşıklığı basit metriklerle (Key Results) filtreleyerek “kontrol yanılsaması” (illusion of control) elde etmesini sağlar.</p><p>Bu durum, yöneticinin kendisini yetkin ve kontrol sahibi hissettiği bir “konfor alanı” yaratır. İki yol olduğunu düşünelim:</p><p><strong>1. Kolay Yol (Drucker):</strong></p><ul><li>Hedefleri belirle.</li><li>Dashboard’u izle.</li><li>Sapma olduğunda hesap sor.</li></ul><p><strong>2. Doğru Yol (Deming):</strong></p><ul><li>Sistemin neden bu sonucu ürettiğini anlamak için derinlemesine araştırma yap.</li><li>Çalışanların psikolojisini ve süreçlerin birbirine bağımlılığını analiz et.</li><li>Sabırla sistemin kapasitesini artır.</li></ul><p>Psikolojik araştırmalar, insanların belirsiz ve karmaşık sistemleri anlamaya çalışmak yerine, basit ve doğrusal (A sebep olur B) modelleri tercih etme eğiliminde olduğunu göstermektedir.</p><p>Yönetim dünyasında, yöneticinin hayatını kolaylaştıran (fakat sistemi iyileştirmeyen) yöntemler, kurumsal birer standart haline gelmiştir. Bu, “Başarı Çukuru” (Pit of Success) kavramıyla açıklanabilir: Sistemler, doğru olanı zor yapacak şekilde tasarlanmıştır, ancak insanlar kolay olanı seçtiği için çukurun içinde kalırlar.</p><p>Deming’in “Derin Bilgi Sistemi”: Neden Bu Kadar Zor?</p><p>Deming’in yönetim felsefesi, uygulanması oldukça zor olan dört temel sütun üzerine inşa edilmiştir. Bu sütunlar arasındaki etkileşim, organizasyonun “derin bilgisini” oluşturur. Peki, neden bu kadar kaçınılıyor?</p><p>1. Sistem Anlayışı (Appreciation for a System)</p><p>Deming, bir organizasyonu ortak bir amaç doğrultusunda çalışan birbirine bağımlı bileşenler ağı olarak tanımlar. Bir sistemin parçalarını optimize etmek, sistemin bütününü genellikle alt-optimize eder.</p><p>Drucker’ın MBO ve OKR sistemleri ise, doğası gereği birimleri kendi hedeflerine odakladığı için departmanlar arası silolar ve çatışmalar yaratma eğilimindedir. Yönetici, “Benim departmanım hedefine ulaştı” diyebilir ama şirket batmış olabilir.</p><p>2. Varyasyon Bilgisi (Knowledge about Variation)</p><p>Her sistemde değişkenlik vardır. Deming, bu değişkenliği “genel nedenler” (sistemin kendisinden kaynaklanan) ve “özel nedenler” (dışsal müdahaleler) olarak ikiye ayırmıştır.</p><p>Batılı yöneticiler genellikle genel nedenli varyasyonlara (sistemin doğal dalgalanmalarına) birer özel nedenmiş gibi tepki vererek sistemi kurcalarlar. Bu da hataların artmasına yol açar.</p><p>3. Bilgi Teorisi (Theory of Knowledge)</p><p>“Bildiğimizi nasıl biliyoruz?” sorusunu sorar. Deming’e göre yönetim bir tahmin işidir ve tahmin için teori gereklidir. Drucker’ın modeli yöneticilerin halihazırda bu bilgiye sahip olduğunu varsayar, Deming sürekli bir test ve doğrulama süreci talep eder.</p><p>4. Psikoloji Bilgisi</p><p>İnsanlar işlerinden gurur duymak ve bir anlam bulmak ister. Deming, sayısal hedeflerin, sıralama sistemlerinin ve performans primlerinin içsel motivasyonu öldürdüğünü ve yerine korkuyu getirdiğini savunur. Korku ise verilerin manipüle edilmesine ve gerçek sorunların gizlenmesine neden olur.</p><h3>MBO ve OKR’lerin Gizli Maliyeti: Sistemi Oyunlaştırmak</h3><p>Drucker’ın MBO sisteminin en büyük eleştirisi, süreçten bağımsız olarak hedefe odaklanmanın etik olmayan davranışları teşvik etmesidir. Deming’in uyarısı nettir:</p><blockquote><em>“Eğer yönetici sayısal hedefler koyar ve insanların işini buna bağlarsa, insanlar o hedeflere ulaşacaklardır — gerekirse şirketi mahvetmek pahasına.”</em></blockquote><p>Wells Fargo Örneği: Sistemsel Bir Patoloji</p><p>Wells Fargo bankasında yaşanan skandal, Deming’in teorilerinin acı bir kanıtıdır. Banka yönetimi, “Eight is Great” (Her müşteriye sekiz ürün satma) hedefi koymuş ve bu hedefe ulaşamayan çalışanları işten çıkarmakla tehdit etmiştir.</p><p>Sonuçlar ortadadır:</p><ul><li><strong>Sayısal Hedeflerin Baskısı:</strong> Çalışanlar, sadece kotaları dörmak için müşterilerden habersiz milyonlarca sahte hesap açmıştır.</li><li><strong>Metrik Takıntısı:</strong> Üst yönetim, satış rakamlarındaki patlamayı kutlarken, bu rakamların nasıl elde edildiğine dair “yöntem” bilgisini tamamen görmezden gelmiştir.</li><li><strong>Korku Kültürü:</strong> Uyarıda bulunan çalışanlar susturulmuş veya cezalandırılmıştır.</li></ul><p>Bu durum, Drucker’ın “yöneticiler ne yapacaklarını bilir” varsayımının çöküşüdür. Yöntem belirtilmeden verilen hedefler, sistemi iyileştirmek yerine sistemi oyunlaştırmaya (gaming) zorlar.</p><p>OKR’lerin Çıkmazı: Yeni Bir İsim, Eski Bir Sorun mu?</p><p>Günümüzde OKR (Objectives and Key Results) sistemleri, özellikle teknoloji dünyasında MBO’nun daha modern ve çevik bir versiyonu olarak pazarlanmaktadır. Ancak Deming perspektifinden bakıldığında, OKR’ler de aynı temel hataları barındırmaktadır.</p><p>OKR’lerin uygulanmasında karşılaşılan temel sorunlar şunlardır:</p><ul><li><strong>Hiyerarşik Kaskat Yanılgısı:</strong> Hedeflerin tepeden tırnağa “kaskat” şeklinde indirilmesi, organizasyonel hiyerarşiyi dondurur ve esnekliği yok eder.</li><li><strong>Stratejik Boşluk:</strong> Çoğu zaman OKR’ler, gerçek bir stratejik seçimden ziyade sadece “yapmak istediğimiz şeylerin listesi” haline gelir.</li><li><strong>Bant Genişliği Sorunu:</strong> Çok fazla OKR belirlenmesi, odaklanmayı artırmak yerine kaynakların dağılmasına ve stagnasyona yol açar.</li><li><strong>Psikolojik Güvenlik Eksikliği:</strong> Hedeflere ulaşamama korkusu, ekiplerin “güvenli” ve sönük hedefler belirlemesine (sandbagging) neden olur.</li></ul><p>Bazı uzmanlar, OKR’lerin yerine süreç odaklı olan SLO (Service Level Objectives) ve SLI (Service Level Indicators) kullanımını önermektedir. Bu yaklaşım, çıktıyı değil, sistemin sağlığını ölçtüğü için Deming’in felsefesine daha yakındır.</p><h3>“Management by Means” (MBM): Toyota Yolu ve Deming’in Zaferi</h3><p>Drucker’ın MBO felsefesi Batı’da hüküm sürerken, Toyota gibi şirketler Deming’in ilkelerini “Management by Means” (Yöntemlerle Yönetim — MBM) adı altında kurumsallaştırmıştır.</p><p>Bu iki yaklaşım arasındaki fark, gece ile gündüz kadardır:</p><p><strong>Management by Results (MBR/Drucker):</strong></p><ul><li>Öncelik: Finansal hedefler ve kotalar.</li><li>Yöntem: Sayıları zorlamak (Manipülasyon riski).</li><li>İnsan Rolü: Hedefe ulaşmak için kullanılan bir araç.</li></ul><p><strong>Management by Means (MBM/Deming/Toyota):</strong></p><ul><li>Öncelik: Süreç istikrarı ve çalışan gelişimi.</li><li>Yöntem: Sistemin kapasitesini sürekli iyileştirmek.</li><li>İnsan Rolü: Sistemi iyileştiren aktif bir problem çözücü.</li></ul><p>Toyota, hedeflerini belirlerken “Gemba”da (işin yapıldığı yer) vakit geçiren ve sistemin gerçek kapasitesini bilen liderleri sürece dahil eder. Bu, Drucker’ın merkeziyetçi hedef koyma modeline kıyasla çok daha yavaş ancak çok daha dirençli bir yapı inşa eder.</p><h3>Neden Hâlâ Drucker’ı Seçiyoruz?</h3><p>Deming’in yöntemlerinin daha başarılı sonuçlar verdiği (Toyota ve Scania örneklerinde olduğu gibi) açıkken, neden modern yöneticiler hâlâ Drucker’cı yöntemlere sadık kalmaktadır?</p><p>Cevap sadece psikolojik değil, aynı zamanda nörolojik ve kurumsal faktörlerde gizlidir.</p><p>1. Nöral Yollar ve Alışkanlıklar</p><p>Sınıf temelli yönetim eğitimi, beynin belirli bölüllerini (kodlanmış ve açık bilgi) çalıştırır. Deming’in önerdiği “Toyota Kata” gibi yöntemler ise pratik ve sürekli uygulama gerektiren yeni nöral yollar inşa etmeyi gerektirir. Bu da biyolojik olarak zahmetli bir süreçtir.</p><p>2. Sorumluluğun Devri</p><p>Yöneticiler, sayısal hedefler koyarak başarısızlığın sorumluluğunu çalışanlara devredebilirler (“Hedefi tutturamadılar”). Deming’in sisteminde ise başarısızlık %94 oranında yöneticinin sorumluluğundadır çünkü sistemi o tasarlamıştır. Bu sorumluluk duygusu, çoğu yönetici için dayanılmaz bir strese neden olur.</p><p>3. Kısa Vadeli Beklentiler</p><p>Finans piyasaları ve hissedarlar, üç aylık (quarterly) sonuçlar bekler. Deming’in sistemik iyileştirmesi ise zaman alır. “Kolay olan”, bir sonraki toplantıya kadar sayıları “parlatmak” iken; “doğru olan”, sistemin temelini yeniden inşa etmektir.</p><h3>Sonuç: Kolay Olanın Doğru Olanı Yenmesi Bir Kader mi?</h3><p>W. Edwards Deming’in “sürgünde” kalması ve Peter Drucker’ın hakimiyeti, yönetim biliminin bir zaferi değil, insan doğasının karmaşıklıktan kaçma ve kısa vadeli konforu arama eğiliminin bir sonucudur.</p><p>Drucker, yöneticilere bir “termostat” ve bir “kontrol paneli” sunarak onlara modern dünyanın karmaşasında bir güvenlik hissi vermiştir. Deming ise onlara bir “laboratuvar” ve “bitmek bilmeyen bir sorumluluk” teklif etmiştir.</p><p>Ancak Wells Fargo skandalı ve benzeri kurumsal facialar göstermektedir ki, “kolay olanın” maliyeti uzun vadede “doğru olanın” zorluğundan çok daha yüksektir. Geleceğin organizasyonları, Drucker’ın sağladığı “odaklanma” ve “hizalanma” yeteneklerini, Deming’in “sistem bilinci” ve “değişkenlik bilgisi” ile harmanlamak zorundadır.</p><p>Aksi takdirde, sadece hedeflere ulaşan ama bu süreçte ruhunu ve dayanıklılığını kaybeden “mekanik” yapılar olarak kalmaya mahkum olacaklardır.</p><p>“Doğru olan yöntem” zor olsa da, organizasyonun hayatta kalması için tek gerçek yoldur; çünkü Deming’in de dediği gibi:</p><blockquote><em>“Değişmek zorunda değilsiniz, hayatta kalmak zorunlu değildir.”</em></blockquote><p>Kısaca Özet (TL;DR)</p><ul><li><strong>İki Farklı Dünya:</strong> Drucker “sonuçlara”, Deming “sisteme” odaklanır. Drucker kolay ve konforludur, Deming zor ama sürdürülebilirdir.</li><li><strong>Termostat Yanılsaması:</strong> Yöneticiler, hedefleri sürekli kurcalayarak (termostat gibi) kontrol ettiklerini sanırlar, ancak bu genellikle sistemi daha da bozar (Huni Deneyi).</li><li><strong>Bilişsel Konfor:</strong> OKR ve MBO sistemleri, yöneticinin karmaşıklığı basit metriklerle filtreleyip “kontrol yanılsaması” yaşamasını sağladığı için tercih edilir.</li><li><strong>Sistemsel Patoloji:</strong> Wells Fargo örneğinde görüldüğü gibi, süreçten bağımsız hedefler (MBO/OKR), çalışanları sistemi manipüle etmeye ve etik dışı davranışlara iter.</li><li><strong>Gelecek:</strong> Drucker’ın odaklanma yeteneği ile Deming’in sistem bilincinin birleşimi gereklidir. Kolay yolu seçmek, uzun vadede şirketin ruhunu öldürür.</li></ul><p><strong>Peki ya siz?</strong></p><p>Çalıştığınız veya yönettiğiniz organizasyonda “hedef takıntısı” yüzünden sistemsel sorunlar görüyor musunuz? Sizce bir yönetici, kısa vadeli “parlak sonuçlar” yerine uzun vadeli “sistem sağlığı”nı seçebilir mi?</p><p>Düşüncelerinizi yorumlarda belirtin, bu önemli tartışmayı büyütelim.</p><p><a href="https://x.com/search?q=%23Y%C3%B6netimBilimi&amp;src=hashtag_click">#YönetimBilimi</a></p><p><a href="https://x.com/search?q=%23DruckerVsDeming&amp;src=hashtag_click">#DruckerVsDeming</a></p><p><a href="https://x.com/search?q=%23SistemD%C3%BC%C5%9F%C3%BCncesi&amp;src=hashtag_click">#SistemDüşüncesi</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f149b45cf94e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kodcular/modern-y%C3%B6netimin-b%C3%BCy%C3%BCk-yan%C4%B1lsamas%C4%B1-neden-kolay-her-zaman-kazan%C4%B1r-f149b45cf94e">Modern Yönetimin Büyük Yanılsaması: Neden “Kolay” Her Zaman Kazanır?</a> was originally published in <a href="https://medium.com/kodcular">Kodcular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Kaide: Yapay Zekâ Odaklı Mimari Kit]]></title>
            <link>https://medium.com/kodcular/kaide-yapay-zek%C3%A2-odakl%C4%B1-mimari-kit-d323a9b81552?source=rss----ff2de8699413---4</link>
            <guid isPermaLink="false">https://medium.com/p/d323a9b81552</guid>
            <category><![CDATA[react]]></category>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[llm]]></category>
            <category><![CDATA[cursor]]></category>
            <category><![CDATA[agents]]></category>
            <dc:creator><![CDATA[Ömer Gülçiçek]]></dc:creator>
            <pubDate>Sun, 15 Feb 2026 22:08:49 GMT</pubDate>
            <atom:updated>2026-03-04T15:12:48.069Z</atom:updated>
            <content:encoded><![CDATA[<p>Yapay zekâ, kod yazma alışkanlıklarımızı kökten değiştirdi. Artık sadece kod yazan değil, yapay zekâ asistanlarını yöneten, onlara doğru bağlamı sunan ve çıktılarını denetleyen operatörler haline geliyoruz. İşte tam bu noktada, yapay zekâ ile çalışma verimliliğini en üst düzeye çıkarmak için araştırmalara başladım.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iiUsJ0fAIcH5_bIe.png" /><figcaption>Kaide: AI-native agents</figcaption></figure><p>Kaide, modern React uygulamaları için geliştirilmiş, yapay zekâ (AI) odaklı bir mimari kitidir. Özellikle Cursor gibi yapay zekâ destekli editörler ve LLM’ler ile çalışırken, modelin proje bağlamını kaybetmesini önlemek, halüsinasyonları azaltmak ve yüksek disiplinli bir kod yapısı oluşturmak amacıyla tasarlanmıştır.</p><h3>İsmin Hikayesi</h3><p>Projelerimde genellikle tek kelimelik, Türkçe ve projenin amacını doğrudan çağrıştıran isimler seçmeye dikkat ediyorum. Tıpkı <a href="https://omergulcicek.com/blog/nizam-nextjs-16-boilerplate/">Nizam</a> projemde olduğu gibi, bu mimari kit için de anlamlı bir isim arayışındaydım.</p><p>“<strong>Kaide</strong>” kelimesi; kural, temel ve esas anlamına geldiği için projenin vaadiyle birebir örtüşüyordu. Ancak asıl karar vermemi sağlayan detay, kelimenin tam ortasında gizli olan “ai” (k<strong>ai</strong>de) vurgusuydu. Hem yapay zekâ odaklı bir temel sunması hem de npm’de bu ismin henüz alınmamış olması, onu bu proje için en doğru tercih haline getirdi.</p><h3>Yapay Zekâ Mimari Kurallara İhtiyaç Duyar?</h3><p>Yapay zekâ ile kod yazarken karşılaşılan en büyük sorunlardan biri, doğru bağlamın ve kısıtlamaların sağlanamamasıdır. Çoğu geliştirici, prompt girerken modele bir persona atamayı, neyi yapması gerektiğinin yanı sıra neleri yapmaması gerektiğini belirtmeyi atlar. Oysa kaliteli bir çıktı alabilmek için bu detaylar kritiktir. Eksik yönergelerle çalışan yapay zekâ, boşlukları kendi yorumlarıyla doldurmaya çalışır; bu da genellikle halüsinasyonlara, proje standartlarına uymayan kodlara veya istenenin çok dışında sonuçlara yol açar.</p><p>Kaide, tam bu noktada devreye girerek sizi uzun ve karmaşık prompt yazma yükünden kurtarır. Projenize entegre edildiğinde; persona, mimari kurallar, kod standartları ve yasaklar zaten tanımlı haldedir.</p><h3>Doğru Prompt Stratejisi</h3><p>Kaide ile çalışırken en sık yapılan hata, yapay zekaya “nasıl” kod yazması gerektiğini (kütüphane seçimleri, dosya yapısı, test kuralları vb.) dikte etmektir; oysa Kaide’nin temel amacı bu teknik yükü sizin omuzlarınızdan almaktır. Doğru bir prompt stratejisinde, halihazırda AGENTS.md içerisinde tanımlı olan &quot;Staff Architect&quot; personasına veya .mdc dosyalarında mühürlenmiş mimari yasalara atıf yapmanıza gerek yoktur; çünkü bu kurallar yapay zekanın işlem çekirdeğine zaten entegre edilmiştir. Yapmanız gereken tek şey, teknik detaylarda boğulmadan doğrudan &quot;ne yapılacağına&quot; odaklanmak ve görevi tanımlamaktır.</p><p>Örneğin; <em>“Bana Next.js 16 ile Zod doğrulamalı, shadcn bileşenleri kullanan, features yapısına uygun, server action’lı ve Vitest testleri yazılmış bir kullanıcı kayıt formu yap”</em>. Bu kadar teknik detayı tek tek hatırlatmak, yapay zekâyı basit bir “bot” seviyesine indirger. Oysa siz teknik detayları bırakıp sadece iş hedefine odaklanmalısınız.</p><p>Bunun yerine sadece; <em>“Kullanıcı listesini görüntülemek için bir </em><em>Users sayfası oluştur. Veriler </em><em>/api/users endpoint&#39;inden çekilecek ve bir tablo içerisinde gösterilecek.&quot;</em> komutunu vermek, tüm çarkları doğru sırayla hareket ettirir. Bu süreçte siz sadece vizyonu sunarsınız, yapay zekâ ise anayasadaki kuralları uygulayarak bu vizyonu teknik bir gerçeğe dönüştürür.</p><h3>Teknoloji Yığını</h3><p>Kaide, modern web geliştirme standartlarını benimser:</p><ul><li><strong>Framework</strong>: Next.js ya da TanStack Start</li><li><strong>Server State</strong>: TanStack Query</li><li><strong>Client State</strong>: Zustand</li><li><strong>Validasyon</strong>: Zod</li><li>Test: Vitest + RTL</li><li><strong>Stil</strong>: Tailwind CSS</li></ul><h3>Kurulum</h3><p>Kaide’yi kullanmaya başlamak oldukça basittir. CLI aracı sayesinde saniyeler içinde projenize entegre edebilirsiniz:</p><pre>npx kaide init</pre><p>Bu komut, gerekli konfigürasyon dosyalarını ve kuralları projenize otomatik olarak ekler.</p><h3>Sonuç</h3><p>Kaide, yapay zekâyı basit bir kod üreteci olmaktan çıkarıp, projenizin kurallarını bilen ve uygulayan yetkin bir ekip arkadaşına dönüştürmeyi hedefler. Eğer siz de yapay zekâ ile kod yazarken kontrolü elden bırakmak istemiyor ve mimari bütünlüğü korumak istiyorsanız, Kaide’ye bir şans verin.</p><p>⭐ GitHub: <a href="https://github.com/omergulcicek/kaide">github.com/omergulcicek/kaide</a></p><p><strong>Kişisel Sitem</strong>: <a href="https://omergulcicek.com/">omergulcicek.com</a><br><strong>Blog</strong>: <a href="https://omergulcicek.com/blog/kaide-yapay-zeka-odakli-mimari-kit/">https://omergulcicek.com/blog/kaide-yapay-zeka-odakli-mimari-kit/</a><br><strong>X (Twitter)</strong>: <a href="https://x.com/omergulcicek">@omergulcicek</a></p><p><em>Makaleyi alkışlayarak destek olabilirsiniz </em>🌹</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d323a9b81552" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kodcular/kaide-yapay-zek%C3%A2-odakl%C4%B1-mimari-kit-d323a9b81552">Kaide: Yapay Zekâ Odaklı Mimari Kit</a> was originally published in <a href="https://medium.com/kodcular">Kodcular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[TanStack Start: tanstack-start-injected-head-scripts Hatası ve Çözümü]]></title>
            <link>https://medium.com/kodcular/tanstack-start-tanstack-start-injected-head-scripts-hatas%C4%B1-ve-%C3%A7%C3%B6z%C3%BCm%C3%BC-69de117093a0?source=rss----ff2de8699413---4</link>
            <guid isPermaLink="false">https://medium.com/p/69de117093a0</guid>
            <category><![CDATA[tanstack]]></category>
            <category><![CDATA[frontend]]></category>
            <dc:creator><![CDATA[Ömer Gülçiçek]]></dc:creator>
            <pubDate>Wed, 04 Feb 2026 16:20:59 GMT</pubDate>
            <atom:updated>2026-02-04T16:20:57.964Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Next.js</strong> ile uzun süre çalıştıktan sonra, <strong>type-safety</strong> ve <strong>streaming</strong> odaklı modern full-stack framework’ü olan<strong> TanStack Start</strong> ilgimi çekti. Aslında bu geçişteki en büyük motivasyonum, daha önce <strong>TanStack Query</strong> ve <strong>TanStack Table</strong> gibi kütüphaneleri kullanmış olmamdı; bu araçların sağladığı harika geliştirici deneyimi ve başarıdan ötürü ekosistemin yeni üyesi olan Start’ı da mutlaka öğrenmek istiyordum. Uçtan uca tip güvenliği, sunucu fonksiyonları ve Vite tabanlı hızlı geliştirme döngüsü gerçekten heyecan verici. Fakat <strong>Supabase</strong> ile bir oyun projesi geliştirirken karşılaştığım bir hata, bana hem teknik derinlik hem de “hazır cevap” tuzağı hakkında önemli dersler verdi.</p><h4>Problem Senaryosu: Sayfa Patladı, Konsol Kıpkırmızı</h4><p>Supabase kullanarak geliştirdiğim sayfada bir anda her şey bozuldu. Sayfa yüklenirken konsolda şu hata belirdi:</p><pre>[vite]: Rollup failed to resolve import &quot;tanstack-start-injected-head-scripts:v&quot;<br>from &quot;.../node_modules/@tanstack/start-server-core/dist/esm/loadVirtualModule.js&quot;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*seQi9ZQnaQuR9XodIvxrCg.png" /><figcaption>tanstack-start-injected-head-scripts</figcaption></figure><p>Bazen Pre-transform error olarak da görünüyordu: Failed to resolve import &quot;tanstack-start-injected-head-scripts:v&quot;. Geliştirme ortamında bazen sessiz kalıyor, vite build ile production build alırken kesin şekilde patlıyordu. Hata mesajı, @tanstack/start-server-core içindeki sanal modül çözümlemesiyle ilgiliydi ve ilk bakışta framework veya Vite/Rollup tarafında bir bug gibi görünüyordu.</p><h4>AI ile Çatışma: Halının Altına Süpürmek</h4><p>Sorunu çözmek için AI asistanlarına (ChatGPT, Gemini ve Cursor) danıştım. Öneriler genelde şu yöndeydi:</p><ul><li><strong>Hata mesajını gizle</strong>: build.rollupOptions.external veya Vite config içinde bu import&#39;u external yap, uyarıyı kapat.</li><li><strong>Hydration / script hatalarını yok say</strong>: “Bu tür hatalar bazen olur, suppress edebilirsin” tarzı yorumlar.</li></ul><p>Bu “çözümler” sorunu çözmek yerine <strong>halının altına süpürmekti</strong>. Bir kez external / suppress yoluna girdiğimde site inanılmaz yavaşladı ve davranışlar tutarsız hale geldi. Demek ki sorun, mesajı gizlemekle değil, <strong>kök nedeni</strong> bulmakla çözülecekti.</p><p>Bu deneyim şunu netleştirdi: <strong>Dokümantasyonu okumak ve elle debug yapmak, AI’ın hazır cevaplarından çoğu zaman daha üstün.</strong> AI hızlı bir başlangıç noktası sunabilir ama kök neden analizi ve mimari kararlar için yetersiz kalabiliyor.</p><h4>Sorunun Asıl Kaynağı: Yanlış Context, Yanlış Instance</h4><p>Bu hata mesajı bazen farklı sebeplerden de çıkabilir; burada anlattığım çözüm, Supabase (veya benzeri bir client) ile server/client sınırının karıştığı senaryoya özgü.</p><p>Hata mesajı “injected head scripts” ve “virtual module” diye görünse de, asıl problem framework değildi. Problem, Supabase (veya Clerk vb) client’ı ile sunucu tarafı (server-side) bir sayfada aynı fonksiyonun veya client örneğinin (instance) yanlış context içinde kullanılmasıydı.</p><p>Yani:</p><ul><li><strong>Server</strong> tarafında çalışması gereken bir şey (veritabanı, Supabase admin/client) <strong>client</strong> bundle’ına karışıyor veya client’tan doğrudan çağrılıyordu.</li><li>Ya da tam tersi: client-only bir instance, sunucu render path’inde kullanılıyordu.</li></ul><p>Bu karışıklık, TanStack Start’un sanal modül ve script enjeksiyonu mekanizmasını tetikliyor; Rollup/Vite da “tanstack-start-injected-head-scripts:v” modülünü beklenen yerde bulamayınca build kırılıyordu. Yani <strong>semptom</strong> “injected head scripts”, <strong>kök neden ise server/client ayrımının ihlali</strong> idi.</p><h4>Hatalı Kullanım</h4><p>Aynı Supabase client örneğini veya veritabanı çağrılarını hem sunucu hem istemci tarafında kullanmak:</p><pre>// ❌ Hatalı: Client ve server&#39;da aynı instance / aynı fonksiyon<br>// Bu dosya client bundle&#39;a da giriyor, server context&#39;i karışıyor<br>import { createClient } from &quot;@supabase/supabase-js&quot;;<br> <br>const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY);<br> <br>export async function getGameData(id: string) {<br>  const { data } = await supabase.from(&quot;games&quot;).select(&quot;*&quot;).eq(&quot;id&quot;, id).single();<br>  return data;<br>}</pre><p>Bu fonksiyon veya client, client tarafında da import edilip kullanılıyorsa (örneğin bir sayfa bileşeninde veya loader’da yanlış yerde), TanStack Start’un server/client ayrımı bozuluyor ve “injected head scripts” benzeri çözümleme hataları ortaya çıkabiliyor.</p><h4>Gerçek Çözüm: Server/Client Arayüzünü Net Ayır</h4><p><strong>Client tarafında</strong>, sunucu fonksiyonlarını veya veritabanı client’ını doğrudan import edip çağırmayın. Bunun yerine:</p><ol><li><strong>API / veritabanı işlemlerini</strong> yalnızca <strong>server-side</strong> bir dosyada tanımlayın (örneğin createServerFn veya sadece sunucuda çalışan modüller).</li><li><strong>Client tarafına</strong> sadece <strong>temiz bir arayüz</strong> sunun: örneğin server fonksiyonlarını import edip kullanın; Supabase client’ı sadece sunucu kodunda oluşturulup kullanılsın.</li></ol><p>Böylece client bundle’a server-only kod ve Supabase instance’ı karışmaz; TanStack Start’un sanal modülleri de doğru context’te çözülür.</p><h4>Doğru Kullanım</h4><pre>// ✅ Doğru: Sadece server tarafında çalışan modül<br>// Örn: app/utils/db.server.ts veya server-only bir modül<br>import { createClient } from &quot;@supabase/supabase-js&quot;;<br> <br>function getSupabaseServer() {<br>  return createClient(<br>    process.env.SUPABASE_URL!,<br>    process.env.SUPABASE_SERVICE_ROLE_KEY!<br>  );<br>}<br> <br>export async function getGameData(id: string) {<br>  const supabase = getSupabaseServer();<br>  const { data } = await supabase.from(&quot;games&quot;).select(&quot;*&quot;).eq(&quot;id&quot;, id).single();<br>  return data;<br>}</pre><pre>// ✅ Doğru: Client tarafı sadece server fonksiyonunu çağırır<br>// createServerFn ile sarılı bir arayüz kullanın<br>import { createServerFn } from &quot;@tanstack/start&quot;;<br>import { getGameData } from &quot;./db.server&quot;;<br> <br>export const fetchGameData = createServerFn().handler(async ({ data: { id } }) =&gt; {<br>  return getGameData(id);<br>});</pre><p>Client bileşenleri yalnızca fetchGameData gibi server fn&#39;leri çağırır; Supabase client&#39;ı ve getGameData implementasyonu yalnızca sunucuda çalışır. Bu ayrım hem tanstack-start-injected-head-scripts hatasını çözer hem de güvenlik ve performans açısından doğru mimariyi kurar.</p><h4>Topluluk Etkisi</h4><p>Bu analiz ve çözümü <a href="https://github.com/TanStack/router/issues/5196">GitHub’daki ilgili issue (#5196)</a> altında <a href="https://github.com/TanStack/router/issues/5196#issuecomment-3690214286">yorum olarak paylaştım</a>. Aynı hatayı yaşayan birçok geliştirici beğeni bıraktı. Bu da gösteriyor ki sorun sadece “config’de bir satır” değil; <strong>server/client sınırını doğru kurmak </strong>birçok TanStack Start + Supabase (veya benzeri backend) projesi için kritik.</p><p>Özetle: <strong>TanStack Start ile çalışırken “tanstack-start-injected-head-scripts” benzeri hatalar gördüğünüzde, önce server ve client tarafında hangi instance’ın nerede kullanıldığını kontrol edin.</strong> Supabase (veya başka bir client) yalnızca sunucu tarafında kullanılmalı, client’a sadece server fonksiyonları üzerinden temiz bir arayüz sunulmalı. Bu hem hatayı çözer hem de mimarinizi sağlamlaştırır.</p><p><strong>Kişisel Sitem</strong>: <a href="https://omergulcicek.com/">omergulcicek.com</a><br><strong>Blog</strong>: <a href="https://omergulcicek.com/blog/tanstack-start-injected-head-scripts-hatasi-cozumu/">https://omergulcicek.com/blog/tanstack-start-injected-head-scripts-hatasi-cozumu/</a><br><strong>Instagram</strong>: @<a href="https://instagram.com/omerilekesfet/">omerilekesfet</a></p><p><em>Makaleyi alkışlayarak destek olabilirsiniz </em>🌹</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=69de117093a0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kodcular/tanstack-start-tanstack-start-injected-head-scripts-hatas%C4%B1-ve-%C3%A7%C3%B6z%C3%BCm%C3%BC-69de117093a0">TanStack Start: tanstack-start-injected-head-scripts Hatası ve Çözümü</a> was originally published in <a href="https://medium.com/kodcular">Kodcular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2026 için React ve AI Stack’i]]></title>
            <link>https://medium.com/kodcular/2026-i%C3%A7in-react-ve-ai-stacki-f3f9cc815674?source=rss----ff2de8699413---4</link>
            <guid isPermaLink="false">https://medium.com/p/f3f9cc815674</guid>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[tanstack]]></category>
            <category><![CDATA[react]]></category>
            <dc:creator><![CDATA[Ömer Gülçiçek]]></dc:creator>
            <pubDate>Wed, 28 Jan 2026 20:32:50 GMT</pubDate>
            <atom:updated>2026-02-01T15:27:31.722Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Bu yazı, </em><a href="https://www.builder.io/blog/react-ai-stack-2026"><em>Builder.io</em></a><em> sitesinde yayınlanan “The React + AI Stack for 2026” başlıklı makalenin çevirisidir. Orijinal makale </em><a href="https://vishwas.dev/"><em>Vishwas Gopinath</em></a><em> tarafından yayınlanmıştır. Çeviri sırasında kendi deneyimlerim ve görüşlerimi de katarak içeriği revize ettim.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*BmZZtjdKrwGTjGs9" /><figcaption>2026 için React ve AI Stack’i</figcaption></figure><p>Yapay zekâ, kod yazma şeklimizi değiştirdi ve sessizce bir kazanan seçti. 2025 Stack Overflow Developer Survey’e göre, profesyonel geliştiricilerin %51&#39;i artık AI araçlarını günlük olarak kullanıyor. AI’dan bir UI oluşturmasını istediğinizde, neredeyse her zaman React’e yöneliyor. Bunun sebebi milyonlarca GitHub deposunda eğitilen LLM’ler için React bu veri setinde baskın durumda.</p><h4>Çekirdek: React + TypeScript</h4><p><a href="https://www.typescriptlang.org/">TypeScript</a>, JavaScript’e tip güvenliği ekleyerek hataları çalışmadan önce yakalamanı, refactoring’i kolaylaştırmanı ve büyük kod tabanlarını daha güvenle yönetmeni sağlar. Tipler aynı zamanda AI asistanlarına da net bir yol haritası sunar.</p><h4>Framework: Next.js veya TanStack Start</h4><p>İhtiyacınıza göre iki sağlam seçenek var.</p><p><a href="https://nextjs.org/">Next.js</a> olgun ve yaygın seçenek. En geniş ekosisteme sahip, tam React Server Components desteği sunuyor ve Vercel tarafında partial pre-rendering gibi özelliklerle gelişmeye devam ediyor. RSC, streaming ve savaşta test edilmiş bir framework arıyorsanız, Next.js doğru adres.</p><p><a href="https://tanstack.com/start">TanStack Start</a> ise daha az sihir, daha fazla kontrol vaat ediyor. Verinin nasıl yükleneceği, nerede çalışacağı ve neyin render edileceği sizin elinizde. Tip güvenliği çok güçlü ve TanStack ekosisteminin geri kalanıyla <em>(Query, Router, Table, Form vb.)</em> kusursuz uyumlu.</p><p>2025&#39;in sonlarından itibaren ben de kişisel tercihimi Next.js yerine TanStack Start’tan yana kullandım ve ilk günden beri memnunum. Next.js’in bol kod örneği ve ekosistemi sayesinde AI araçları onu daha iyi “anlıyor”; TanStack tarafında bu konuda bazen zayıf kaldığını hissettiğim oldu. Dokümantasyonun da biraz daha olgunlaşması gerektiğini düşünüyorum. Buna rağmen DX (developer experience) açısından esnekliği ve sunduğu özellikler beni cezbediyor. Performanstan da oldukça memnunum; kişisel projelerimde TanStack Start’ı ilk tercih olarak kullanmaya devam etmeyi planlıyorum. Tüm TanStack ekosistemini birlikte kullanmak (Start, Query, Router, Table, Form vb.) bana Apple ekosistemini <em>(MacBook, iPhone, Watch hepsi birbirine entegre ve tek dil konuşuyor)</em> kullanmak gibi hissettiriyor.</p><h4>Stil: Tailwind CSS</h4><p><a href="https://tailwindcss.com/">Tailwind CSS</a> utility-first CSS tartışmasını kazandı. AI araçları Tailwind sınıflarını rahatça üretebiliyor, ölçeklenmesi iyi ve projelerde gereksiz CSS şişkinliğini azaltıyor.</p><p>İlk çıktığında Tailwind’e mesafeliydim, adeta inline CSS yazıyormuşum gibi geliyordu. Zamanla vazgeçilmezim oldu ve bir anlamda Bootstrap’ın tahtını aldı. Artık yeni bir proje kurduğumda boilerplate’e Tailwind eklemek ilk yaptığım işlerden biri.</p><h4>UI Bileşenleri: shadcn/ui</h4><p><a href="https://ui.shadcn.com/">shadcn/ui</a> bileşenleri paket olarak değil, doğrudan projenize kopyalıyor, yani koda tam sahipsiniz ve istediğiniz gibi değiştirebiliyorsunuz. Arada soyutlama katmanı olmadığı için AI araçları da bu dosyaları okuyup düzenleyebiliyor. Yeni npx shadcn create akışıyla özelleştirme bir adım öteye taşındı. Yakın zamanda ise Radix UI olan bileşent tabanına Base UI desteği de eklendi.</p><p>shadcn/ui’nin gelişimi beni heyecanlandırıyor; yeni özellikler ve iyileştirmeler için merakla takip ediyorum.</p><h4>Veri Çekme: TanStack Query</h4><p><a href="https://tanstack.com/query">TanStack Query</a> sunucu state için de facto standart. Cache, arka plan refetch, stale ve error state’leri tek yerde topluyor; zihinsel model oturduktan sonra senkronizasyon kaynaklı hataları büyük ölçüde eliyor. React ile veri çekiyorsanız ilk bakmanız gereken yer burası.</p><h4>Routing: TanStack Router</h4><p><a href="https://tanstack.com/router">TanStack Router</a> rotalar, params ve search params için gördüğüm en güçlü tip güvenliğini sunuyor; hatalar runtime’a düşmeden TypeScript tarafında yakalanıyor. Next.js kullanıyorsanız App Router yeterli ve RSC ile uyumlu. Vite tabanlı veya TanStack Start stack’inde ise TanStack Router net seçim.</p><h4>Durum Yönetimi: Zustand</h4><p><a href="https://zustand.docs.pmnd.rs/">Zustand</a> minimal boilerplate ile hook tabanlı, Redux karmaşası olmadan client state yönetimi sunuyor; basit başlıyor, ihtiyaç arttıkça ölçekleniyor.</p><h4>Formlar: React Hook Form</h4><p><a href="https://react-hook-form.com/">React Hook Form</a> Zod vb. doğrulama kütüphaneleriyle sorunsuz entegre ve temiz bir API ile form state’ini yönetmek için hâlâ en sağlam seçeneklerden biri.</p><p>Yıllardır React Hook Form kullanıyorum ve memnunum. Kişisel projelerimde TanStack ekosisteminde olduğum için TanStack Form’a geçtim; her iki kütüphane de AI araçlarıyla çok uyumlu çalışıyor.</p><h4>Test: Vitest + React Testing Library + Playwright</h4><p><a href="https://vitest.dev/">Vitest</a> ES modules ile sorunsuz çalışan, Vite pipeline ile uyumlu ve hızlı bir test runner; birim ve entegrasyon testleri için günlük kullanımda rahat. <a href="https://testing-library.com/react">React Testing Library</a> bileşenleri kullanıcı davranışına göre sorgulamanızı sağlayarak testleri sürdürülebilir kılıyor ve erişilebilirlik problemlerini yan ürün olarak ortaya çıkarıyor. <a href="https://playwright.dev/">Playwright</a> ise çoklu tarayıcı, görsel ve mobil emülasyon desteğiyle E2E katmanını kararlı ve tekrarlanabilir şekilde kapatıyor.</p><h4>AI SDK: Vercel AI SDK veya TanStack AI</h4><p><a href="https://sdk.vercel.ai/">Vercel AI SDK</a> streaming, tool calling ve chat UI için hazır hook’lar sunuyor; OpenAI, Anthropic ve diğer sağlayıcılarla out-of-the-box çalışıyor. AI Elements ile mesaj thread’leri, reasoning panelleri ve ses arayüzleri için shadcn/ui tabanlı 20+ bileşen geliyor, LLM destekli ürünlerde hızlı prototipleme ve production UI için ciddi zaman kazandırıyor.</p><p><a href="https://tanstack.com/ai">TanStack AI</a> daha yeni; sağlayıcıdan bağımsız tek arayüz ve tam TypeScript tip güvenliği vaat ediyor. TanStack ekosistemine geçiş yaptım fakat TanStack AI’ı henüz deneyimleyemedim. TanStack ekibinin Query ve Router’daki siciline bakınca, zamanla bu alanda da referans olma ihtimali yüksek.</p><h4>Tip Güvenli API’ler: tRPC</h4><p><a href="https://trpc.io/">tRPC</a>, frontend’inizin sunucu fonksiyonlarını tam TypeScript tip güvenliğiyle doğrudan çağırmasına izin verir. Dokümante edilecek REST endpoint’leri yok. Manuel olarak senkronize edilecek tipler yok. Mantığınızı bir kez tanımlarsınız ve her iki tarafta da kullanırsınız. Tam stack TypeScript uygulaması oluşturuyorsanız, tRPC bir kategori hatayı ortadan kaldırır ve geliştirmeyi hızlandırır.</p><h4>Doğrulama: Zod</h4><p><a href="https://zod.dev/">Zod</a>, TypeScript doğrulaması için güvenli seçim. En büyük ekosisteme, en çok öğreticiye sahip ve her şeyle entegre oluyor. React Hook Form, TanStack Form, tRPC, API route’ları. Zod hepsiyle çalışır. Bundle boyutu kritikse daha hafif alternatifler var, ancak çoğu proje için Zod’un ekosistem avantajı ekstra kilobaytları ağır basar.</p><h4>Backend Servisleri: Supabase veya Convex</h4><p><a href="https://supabase.com/">Supabase</a> PostgreSQL üzerine inşa edilmiştir. Auth, storage, gerçek zamanlı abonelikler ve otomatik oluşturulmuş API’ler elde edersiniz. AI özellikleri için, pgvector vektör benzerlik aramasını halleder ve ilişkisel verilerinizin yanında embedding’leri saklayabilirsiniz.</p><p>Kişisel oyun projemde ilk kez Supabase kullandım ve çok memnun kaldım. Arayüzü ve performansı beni tatmin etti; kişisel projelerimde kullanmaya devam edeceğim. Backend derdimi büyük ölçüde ortadan kaldırdı, özellikle Auth katmanının hazır gelmesi büyük dertten kurtarıyor ve doğrudan SQL ile frontend’e odaklanmamı sağlıyor.</p><p><a href="https://convex.dev/">Convex</a>, reaktivite-öncelikli bir yaklaşım benimser. Sorgular, veriler değiştiğinde otomatik olarak React bileşenlerinize senkronize olur. TypeScript entegrasyonu yerel gibi hissettirir. Yerleşik vektör araması, bir RAG bileşeni ve AI agent iş akışları, LLM destekli uygulamalar için zaten orada.</p><h4>Animasyon: Motion</h4><p><a href="https://motion.dev/">Motion</a> <em>(eski adıyla Framer Motion)</em> declarative API ile karmaşık ve layout animasyonlarını yönetir; CSS geçişleri yeterli gelmediğinde React tarafında ilk bakılacak kütüphane.</p><h4>Tablo: TanStack Table</h4><p><a href="https://tanstack.com/table">TanStack Table</a> headless ve tam tip güvenli; sıralama, filtreleme ve sayfalama mantığını sağlar, UI kararlarını size bırakır. Veri ağırlıklı ekranlarda kendi markup ve stillerinizle kullanılacak standart seçenek.</p><h4>Bileşen Geliştirme: Storybook</h4><p><a href="https://storybook.js.org/">Storybook</a> bileşenleri izole geliştirme, görsel test ve otomatik dokümantasyon için kullanılır; geliştirici ve tasarımcıların uygulamayı ayağa kaldırmadan UI üzerinde çalışmasını sağlar.</p><h4>AI Destekli Geliştirme</h4><p><a href="https://claude.ai/">Claude Code</a>, Anthropic’in agentic kodlama aracıdır. Terminalde, VS Code’da bir uzantı olarak veya doğrudan web’de çalışır. Codebase’inize işaret edin ve değişiklikleri planlayabilir, kod yazabilir, testleri çalıştırabilir ve saatlerce görevler üzerinde döngü yapabilir. Yalnız çalışmayı veya yalnızca geliştirici ekiplerinde çalışmayı tercih ediyorsanız, bu harika bir seçenektir.</p><p><a href="https://cursor.sh/">Cursor</a>, geleneksel IDE iş akışını tercih ediyorsanız başka bir harika seçenektir.</p><p><strong>MCP (Model Context Protocol)</strong> ile AI asistanları harici veri kaynaklarına, API’lere ve araçlara güvenli şekilde bağlanabiliyor. Frontend geliştirmede ben <strong>Figma</strong>, <strong>Context7</strong>, <strong>Next.js</strong>, <strong>shadcn</strong> ve <strong>Supabase</strong> MCP’lerini kullanıyorum; tasarım token’ları, dokümantasyon ve backend kaynaklarına doğrudan erişim sağlıyor.</p><p>VS Code kullanırken <strong>Cursor</strong>’a geçtim ve bir yılı aşkındır kullanıyorum. Son dönemde aşırı token tüketimi ve sürekli değişen -bazılarına alışmakta zorlandığım- UI güncellemeleri can sıkmaya başladı. Yakın vadede farklı bir arayüze veya araca yönelebilirim.</p><p><strong>Kişisel Sitem</strong>: <a href="https://omergulcicek.com/">omergulcicek.com</a><br><strong>Blog</strong>: <a href="https://omergulcicek.com/blog/react-ai-stack-2026/">https://omergulcicek.com/blog/react-ai-stack-2026/</a><br><strong>Instagram</strong>: @<a href="https://instagram.com/omerilekesfet/">omerilekesfet</a></p><p><em>Makaleyi alkışlayarak destek olabilirsiniz </em>🌹</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f3f9cc815674" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kodcular/2026-i%C3%A7in-react-ve-ai-stacki-f3f9cc815674">2026 için React ve AI Stack’i</a> was originally published in <a href="https://medium.com/kodcular">Kodcular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[2026'da Hayatımıza Girecek Yeni CSS Özellikleri]]></title>
            <link>https://medium.com/kodcular/2026da-hayat%C4%B1m%C4%B1za-girecek-yeni-css-%C3%B6zellikleri-f48158357b77?source=rss----ff2de8699413---4</link>
            <guid isPermaLink="false">https://medium.com/p/f48158357b77</guid>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[css]]></category>
            <dc:creator><![CDATA[Ömer Gülçiçek]]></dc:creator>
            <pubDate>Thu, 25 Dec 2025 14:34:26 GMT</pubDate>
            <atom:updated>2025-12-25T14:34:31.919Z</atom:updated>
            <content:encoded><![CDATA[<p>2026 yılı, CSS dünyası için birçok heyecan verici yenilik getiriyor. Bu yazıda, web geliştiricilerin mutlaka bilmesi gereken yeni CSS özelliklerini ele alacağız.</p><h3>corner-shape: Köşeleri Şekillendirme</h3><p>CSS’in yeni corner-shape özelliği, border-radius ile birlikte kullanılarak köşeleri farklı şekillerde şekillendirmemize olanak tanıyor. Bu özellik sayesinde artık sadece alıştığımız rounded <em>(yuvarlatılmış köşeler)</em> değil, bevel <em>(kesik köşeler)</em>, scoop <em>(içe çekilmiş köşeler)</em>, notch <em>(çentikli köşeler)</em> ve squircle gibi modern köşe şekilleri oluşturabiliyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rFf1KJzTPCyLgZCP5Vo2gg.png" /><figcaption>corner-shape</figcaption></figure><p>İnteraktif olarak test etmek için <a href="https://omergulcicek.com/blog/2026da-hayatimiza-girecek-yeni-css-ozellikleri/">kişisel sitem üzerinden önizleyebilirsiniz</a>.</p><h3>clip-path: Görsel Kırpma</h3><p>CSS’in clip-path özelliği, bir elementin hangi bölümünün görünür olacağını belirleyen bir kırpma bölgesi oluşturur. Bu özellik sayesinde elementleri çeşitli geometrik şekillerle kırpabilir, modern ve yaratıcı tasarımlar oluşturabiliriz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hEvMA7xfNS77gsMj6nAfnQ.png" /><figcaption>clip-path</figcaption></figure><p>İnteraktif olarak test etmek için <a href="https://omergulcicek.com/blog/2026da-hayatimiza-girecek-yeni-css-ozellikleri/">kişisel sitem üzerinden önizleyebilirsiniz</a>.</p><h3>::picker-icon: Dropdown İkonunu Özelleştirme</h3><p>CSS’in yeni ::picker-icon pseudo-element&#39;i, özelleştirilebilir &lt;select&gt; elementlerinin dropdown ikonunu stillendirmemize olanak tanıyor. Bu özellik sayesinde varsayılan üçgen ikon yerine checkmark, plus, arrow veya herhangi bir özel ikon kullanabiliyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yLWLRMQzGMtgwrO-1EmBgw.png" /><figcaption>::picker-icon</figcaption></figure><p>İnteraktif olarak test etmek için <a href="https://omergulcicek.com/blog/2026da-hayatimiza-girecek-yeni-css-ozellikleri/">kişisel sitem üzerinden önizleyebilirsiniz</a>.</p><p>::picker-icon özelliği kullanmak için &lt;select&gt; elementinin appearance: base-select olarak ayarlanması gerekiyor. Bu özellik ile birlikte, özelleştirilebilir select elementleri için birçok yeni CSS seçicisine de erişebiliyoruz:</p><ul><li>select:open - Dropdown açık olduğunda select elementini stillendirme</li><li>select:open::picker-icon - Dropdown açık olduğunda picker icon&#39;unu stillendirme (örneğin rotasyon animasyonu için)</li><li>option:checked - Seçili option elementini stillendirme</li><li>option::checkmark - Option&#39;lardaki checkmark ikonunu özelleştirme</li></ul><h3>width/height: stretch: Taşmayı Önleme</h3><p>CSS’in yeni stretch değeri, width ve height özelliklerinde kullanılarak elementlerin padding ve margin&#39;i hesaba katarak taşmasını önler. 100% değeri, padding ve margin&#39;i hesaba katmadığı için taşmaya neden olabilir, ancak stretch değeri bu sorunu çözer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Vu8uX-fvhPUiYU05Y4T_Wg.png" /><figcaption>stretch</figcaption></figure><p>İnteraktif olarak test etmek için <a href="https://omergulcicek.com/blog/2026da-hayatimiza-girecek-yeni-css-ozellikleri/">kişisel sitem üzerinden önizleyebilirsiniz</a>.</p><h3>text-box: Metin Hizalaması</h3><p>CSS’in yeni text-box özelliği, metin elementlerinin block-start ve block-end kenarlarındaki fazla boşluğu (leading) kırparak, görsellerle metinlerin daha iyi hizalanmasını sağlar. Bu özellik özellikle görsel ve metin yan yana olduğunda, line-height&#39;tan kaynaklanan boşlukların neden olduğu hizalama sorunlarını çözer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CfpacRm_2Xp-qo29dTkFwA.png" /><figcaption>text-box</figcaption></figure><p>İnteraktif olarak test etmek için <a href="https://omergulcicek.com/blog/2026da-hayatimiza-girecek-yeni-css-ozellikleri/">kişisel sitem üzerinden önizleyebilirsiniz</a>.</p><h3>sibling-index(): Sıralı Animasyonlar</h3><p>CSS’in yeni sibling-index() fonksiyonu, her elementin kardeş elementler arasındaki pozisyonunu döndürür (1&#39;den başlar). Bu fonksiyon sayesinde JavaScript veya Framer Motion gibi kütüphaneler olmadan, sadece CSS ile sıralı animasyonlar oluşturabilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wxgS2WDYczYSkzTcgyHfXQ.png" /><figcaption>sibling-index()</figcaption></figure><p>İnteraktif olarak test etmek için <a href="https://omergulcicek.com/blog/2026da-hayatimiza-girecek-yeni-css-ozellikleri/">kişisel sitem üzerinden önizleyebilirsiniz</a>.</p><p>sibling-index() fonksiyonu özellikle animation-delay ile birlikte kullanıldığında güçlü bir kombinasyon oluşturur. calc(sibling-index() * 100ms) gibi bir değerle, her element sırayla animasyonlu şekilde görünebilir. Bu sayede kart listeleri, grid layout&#39;lar ve diğer sıralı UI elementleri için JavaScript&#39;e ihtiyaç duymadan animasyonlar oluşturabilirsiniz.</p><p><strong>Kişisel Sitem</strong>: <a href="https://omergulcicek.com/">omergulcicek.com</a><br><strong>Blog</strong>: <a href="https://omergulcicek.com/blog/2026da-hayatimiza-girecek-yeni-css-ozellikleri/">https://omergulcicek.com/blog/2026da-hayatimiza-girecek-yeni-css-ozellikleri/</a><br><strong>Instagram</strong>: @<a href="https://instagram.com/omerilekesfet/">omerilekesfet</a></p><p><em>Makaleyi alkışlayarak destek olabilirsiniz </em>🌹</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f48158357b77" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kodcular/2026da-hayat%C4%B1m%C4%B1za-girecek-yeni-css-%C3%B6zellikleri-f48158357b77">2026&#39;da Hayatımıza Girecek Yeni CSS Özellikleri</a> was originally published in <a href="https://medium.com/kodcular">Kodcular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[AI Çağında Frontend Bitti mi?]]></title>
            <link>https://medium.com/kodcular/ai-%C3%A7a%C4%9F%C4%B1nda-frontend-bitti-mi-17fedba66f96?source=rss----ff2de8699413---4</link>
            <guid isPermaLink="false">https://medium.com/p/17fedba66f96</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[cursor]]></category>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[yapay-zeka]]></category>
            <dc:creator><![CDATA[Ömer Gülçiçek]]></dc:creator>
            <pubDate>Mon, 01 Dec 2025 18:37:48 GMT</pubDate>
            <atom:updated>2025-12-01T18:37:46.945Z</atom:updated>
            <content:encoded><![CDATA[<p>Herkes “<em>frontend bitti, öldü</em>” diyor. Pandemi dönemindeki agresif işe alımların ardından şişen ekipler, ekonomik daralmayla birlikte küçülmeye ve ardı arkası kesilmeyen işten çıkarmalara gitti. Peki gerçekten sektör mü bitti? Yoksa yaşanan şey, çok daha derin bir dönüşümün yüzeye vuran etkileri mi? Bu sorunun cevabı aslında işin doğasında saklı.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6wu-8iXnlGBO4Zt_OUE8kg.png" /><figcaption>AI Çağında Frontend Bitti mi?</figcaption></figure><h4>Geçmişten Günümüze Frontend Rolü</h4><p>Geçmişte Frontend; HTML, CSS ve temel JavaScript ile sayfa düzenlemekten ibaretti. Statik yapılar, sınırlı etkileşimler ve küçük ekiplerle yürüyen işler, geliştiriciye mimari veya sistemsel sorumluluk pek yüklemezdi. Bugün ise tablo tamamen farklı: performans optimizasyonu, UX kurgusu, güvenlik, API cache stratejileri, server–client hibrit mimariler, ölçeklenebilir React yapıları ve çok katmanlı veri yönetimi gibi konular işin merkezinde. Frontend artık sadece ekran oluşturan bir rol değil; ürünün davranışını tasarlayan, kullanıcı deneyiminin tamamını yöneten bir teknik mimari alanı.</p><h4>AI ve Otomasyon: Rakip Değil Performans Hızlandırıcısı</h4><p>AI’nın yükselişi özellikle <em>tekrarlayan işleri</em> otomatikleştirdi. Formlar, basit component’ler, CSS düzenlemeleri artık saniyeler içinde üretilebiliyor. Bu durum geliştiriciyi değersizleştirmek yerine ona zaman kazandırıyor: daha iyi testler yazmak, edge-case senaryolarını düşünmek, performansı artırmak veya yeni özellikleri denemek için alan açıyor. Basit işler otomatikleşiyor, ancak değer üreten işlerin önemi katlanıyor.</p><h4>Prompt Odaklı Frontend Geliştirici</h4><p>Burada belirleyici olan şey, yapay zekayı nasıl kullandığın. Bazıları karşısında bir insan varmış gibi basit bir cümle kurarken, bazıları bir makineyle konuştuğunun bilincinde olup teknik, tutarlı ve bağlama uygun komutlar veriyor. Bu fark, çıktının kalitesini de geliştiricinin seviyesini de açık şekilde ortaya koyuyor. Aşağıdaki JSON prompt örneği, modern bir login sayfasının AI’a nasıl talep edilmesi gerektiğine dair daha kapsamlı ve hataya kapalı bir iskelet sağlıyor:</p><pre>{<br>  &quot;task&quot;: &quot;Create an enterprise-grade, production-ready login page.&quot;,<br>  &quot;stack&quot;: &quot;Next.js 16 App Router, React 19, TypeScript, shadcn/ui, React Hook Form + Zod, Edge compatible&quot;,<br>  &quot;features&quot;: [<br>    &quot;email + password fields with shared Zod schema (client + server)&quot;,<br>    &quot;disabled + loading state on submit, Enter key submit&quot;,<br>    &quot;show backend error messages as toast + field-level errors&quot;,<br>    &quot;password show/hide toggle&quot;<br>  ],<br>  &quot;ux&quot;: &quot;Fully accessible, mobile-first, clear and concise error/success messages.&quot;,<br>  &quot;structure&quot;: &quot;Feature-based architecture.&quot;,<br>  &quot;output&quot;: &quot;Single TSX code block, all imports included, minimal comments.&quot;,<br>  &quot;constraints&quot;: &quot;No inline styles, no any, follow TypeScript best practices.&quot;<br>}</pre><p>Bu ayrım, gelecekteki rol tanımlarını da değiştirecek. Dün “junior–mid–senior frontend” ayrımı varken, yarın “Prompt-Oriented Frontend Developer (Entry/Advanced)” veya “Frontend Prompt Engineer” gibi roller görmemiz şaşırtıcı olmayacak. Çünkü artık farkı yaratan, kodu yazmak değil; kodu yapay zekaya nasıl yazdıracağını bilmek olacak.</p><h4>Liderlik, Stres Yönetimi ve İnsan Faktörü</h4><p>Elbette teknik dönüşüm tek boyutlu değil. Yapay zeka tekrarlayan işleri çözse de sektörde “<em>stres yönetimi</em>” diye bir gerçek var. Eskiden junior’ların üzerinde senior’lar, onların üzerinde mimari kararları veren lead’ler olurdu. Yeni dönemde ise AI ile çalışan geliştiricilerin üzerinde, AI’yı daha iyi kullanan, doğru prompt stratejilerini belirleyen, mimaride son sözü söyleyen ve deadline baskısını yöneten güçlü liderlere ihtiyaç duyulacak. İnsan faktörü, organizasyonel yük ve psikolojik dayanıklılık hâlâ geliştirici rolünün en kritik parçaları.</p><h4>Şirketler Açısından Yeni Denge</h4><p>Şirketler açısından da benzer bir tablo var: Daha az kişiyle daha fazla ürün çıkarabilecekler, bütçenin bir kısmı çalışan yerine yapay zeka araçlarına kayacak. Ancak bu, nitelikli geliştirici ihtiyacını azaltmıyor. Aksine, artık sadece UI çizmek veya CSS bug çözmek gibi günü kurtaran işler devrin sonuna geldi. Beklenti; yapay zekayı aktif şekilde kullanarak daha hızlı, daha temiz ve daha mükemmel kod üretmek.</p><h4>Veri Ne Diyor? AI İş İlanları ve Yeni Roller</h4><p>AI’nın yazılımı “bitirmediğini” görmek için rakamlara bakmak yeterli. OpenAI’nin Eylül 2025 tarihli “<a href="https://cdn.openai.com/global-affairs/06025361-1ede-4402-97d2-daf1e5918b43/jobs-in-the-intelligence-age-sept-2025.pdf?utm_source=chatgpt.com">Jobs in the Intelligence Age</a>” raporunda, AI becerisi gerektiren ilanların hem sayısının hem de ücret primlerinin belirgin şekilde arttığı vurgulanıyor. Örneğin PwC’nin 2025 Global AI Jobs Barometer verisine atıfla, AI becerisi isteyen rollerin ortalama %56 ücret primi taşıdığı, buna karşılık toplam ilan sayısı düşerken AI becerili ilanların yıllık %7,5 artış gösterdiği belirtiliyor.</p><p>AWS ve Access Partnership tarafından hazırlanan “<a href="https://accesspartnership.com/wp-content/uploads/2023/11/aws-accelerating-ai-skills-us-en.pdf?utm_source=chatgpt.com">Accelerating AI Skills: Preparing the Workforce for Jobs of the Future</a>” raporu da benzer bir tablo çiziyor: Rapora göre işverenlerin %73&#39;ü AI becerisine sahip çalışanları işe almayı önceliklendiriyor. Aynı çalışma, AI becerisi kazanan çalışanlar için departmana göre değişmekle birlikte ortalama %35 ve üzeri maaş artışı beklendiğini, ayrıca işverenlerin büyük çoğunluğunun AI’nın önümüzdeki yıllarda iş gücü verimliliğini ciddi biçimde artıracağını düşündüğünü gösteriyor.</p><p>Benzer şekilde, çeşitli işveren araştırmalarında şirketlerin çok büyük bir çoğunluğunun önümüzdeki dönemde çalışanlarının AI yetkinliğine yatırım yapmak istediği, hatta bunun işletmenin geleceği için kritik görüldüğü aktarılıyor. Kısacası şirketler daha az ama çok daha yetkin, AI destekli geliştiricilerle ilerlemek istiyor.</p><p>Yani toplam pasta daralsa bile, AI ile çalışabilen geliştiriciler için hem talep hem de maaş seviyesi yükseliyor; bu da “iş bitti” yerine, “rol yeniden tanımlanıyor” sonucuna işaret ediyor.</p><h4>Sonuç: Kabuk Değiştiren Bir Meslek</h4><p>Sonuç olarak Frontend ölmedi; yalnızca kabuk değiştiriyor. Basit işler otomatikleşirken, uzmanlık gerektiren alanların değeri arttı. Kapsam genişledi, rol derinleşti ve gelişmeye devam ediyor. Bu dönüşümün merkezinde ise hâlâ kaliteli, vizyoner ve üretken geliştiriciler bulunuyor.</p><p><strong>Kişisel Sitem</strong>: <a href="https://omergulcicek.com/">omergulcicek.com</a><br><strong>Blog</strong>: <a href="https://omergulcicek.com/blog/ai-caginda-frontend-bitti-mi/">https://omergulcicek.com/blog/ai-caginda-frontend-bitti-mi/</a><br><strong>Instagram</strong>: @<a href="https://instagram.com/omerilekesfet/">omerilekesfet</a></p><p><em>Makaleyi alkışlayarak destek olabilirsiniz </em>🌹</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=17fedba66f96" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kodcular/ai-%C3%A7a%C4%9F%C4%B1nda-frontend-bitti-mi-17fedba66f96">AI Çağında Frontend Bitti mi?</a> was originally published in <a href="https://medium.com/kodcular">Kodcular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Makine Öğrenmesi 201- part2]]></title>
            <link>https://medium.com/kodcular/makine-%C3%B6%C4%9Frenmesi-201-part2-e585602ed34b?source=rss----ff2de8699413---4</link>
            <guid isPermaLink="false">https://medium.com/p/e585602ed34b</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[regression]]></category>
            <category><![CDATA[türkçe]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Safiye Alaca]]></dc:creator>
            <pubDate>Thu, 20 Nov 2025 21:16:09 GMT</pubDate>
            <atom:updated>2025-11-20T21:16:08.206Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/595/1*w10V-WNERwaZV7d3dYKPRA.png" /></figure><p><strong>Mustafa Vahit Keskin</strong> hocamızın mükemmel anlatımıyla takip ettiğim <strong>Makine Öğrenmesi 201</strong> dersinden aldığım notlarla hazırlanan bu yazı dizisinde, klasik regresyonun en büyük zorluğu olan <strong>aşırı öğrenme (overfitting)</strong> sorununu ele alıyoruz. Model katsayılarına “ceza” uygulayarak genellemeyi artıran ve istikrar sağlayan <strong>Düzenleme (Regularizasyon) Yöntemleri</strong> devreye girer. Bu yazıda, bu güçlü tekniklerin en önemlilerini; <strong>Ridge (L2)</strong>, <strong>Lasso (L1)</strong> ve ikisinin hibriti olan <strong>ElasticNet</strong> regresyonlarını hem teorik temelleri hem de pratik kod uygulamaları üzerinden derinlemesine inceleyeceğiz. Kendisine, bu karmaşık konuları anlaşılır kıldığı için teşekkür ederim.</p><h3>Ridge Regresyon : Cezalandırma Yöntemi</h3><p>Bu modelin ana amacı, klasik <strong>En Küçük Kareler (EKK)</strong> yönteminin (Normal Regresyon) zayıf noktalarını gidermektir. Klasik EKK sadece hatayı en aza indirmeye odaklanırken, Ridge Regresyon bu hedefe <strong>bir ceza</strong> ekler.</p><h4>1. Ridge Regresyonun Amacı (Yeni Hata Fonksiyonu)</h4><p>Ridge Regresyon, normal hata karesi toplamına (SSE) yeni bir terim ekleyerek, katsayıları (beta) çok büyük seçen modelleri cezalandırır. Bu, modelin ezberleme (overfitting) yapmasını engeller.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/471/1*NICg6XOqnClyGzDEwav5ow.png" /></figure><ul><li><strong>Tahmin Hatası (SSE):</strong> Modelin yaptığı yanlış tahminlerin karesel toplamıdır.</li><li><strong>Ceza Terimi:</strong> Bu kısım, tüm katsayıların beta karesini toplar. Katsayılar ne kadar büyükse, ceza o kadar artar. <strong>Büyük katsayılar = Aşırı Karmaşıklık.</strong></li></ul><p><strong>Temel Amacı:</strong> Amaç, <strong>toplam hatayı minimum yapan</strong> katsayıları bulmaktır. Model hem doğru tahmin yapmaya çalışır hem de katsayıları <strong>küçük</strong> tutarak ceza almamayı hedefler.</p><h4>2. Lambda Ayar Parametresi</h4><p>Formülün en kritik kısmı Lambda’dır.</p><ul><li><strong>Tanımı:</strong> lambda, <strong>cezanın şiddetini belirleyen</strong> bir <strong>hiperparametredir</strong> (kullanıcı tarafından belirlenir).</li><li><strong>Rolü:</strong> lambda ne kadar büyükse, ceza teriminin etkisi o kadar fazla olur ve model, katsayıları o kadar çok sıfıra yaklaştırmak zorunda kalır.</li><li><strong>Kontrol:</strong> lambda bu iki terimin (tahmin hatası ve ceza) birbirine göreceli etkilerini kontrol etmeyi sağlar.</li></ul><h4>3. Ridge Regresyonun Avantajları ve Güçlü Yönleri</h4><p>Ridge Regresyon, normal OLS regresyonunun çözemediği sorunlara çözüm getirir:</p><ul><li><strong>Aşırı Öğrenmeye Karşı Direnç:</strong> Katsayıları küçülttüğü için modelin <strong>genelleme yeteneği</strong> artar ve veriyi ezberlemez.</li><li><strong>Çoklu Bağlantı Çözümü:</strong> Bağımsız değişkenler birbiriyle çok ilişkili olduğunda bile (TV ve Radyo gibi), modelin katsayılarını istikrarsız hale getirmek yerine, onları kontrollü bir şekilde küçülterek <strong>daha güvenilir</strong> sonuçlar verir.</li><li><strong>İlgisiz Değişkenler:</strong> İşe yaramayan değişkenlerin katsayılarını modelden tamamen çıkarmaz, ancak <strong>sıfıra çok yaklaştırarak</strong> etkilerini neredeyse yok eder.</li></ul><h4>4. Lambda Değerini Belirleme Süreci</h4><p>Lambda’yı doğru seçmek hayati önem taşır, çünkü modelin ne kadar cezalandırılacağına karar verir.</p><ul><li><strong>Yöntem:</strong> lambda için rastgele bir değer seçilmez. Genellikle belirli bir lambda değer kümesi seçilir ve her bir değer için <strong>K-Katlı Çapraz Doğrulama (CV)</strong> testi yapılır.</li><li><strong>Seçim:</strong> Çapraz doğrulama testi sırasında <strong>en küçük test hatasını veren lambda değeri</strong>, modelin ayar parametresi olarak seçilir ve model bu nihai lambda ile tüm veriye tekrar eğitilir.</li></ul><h3>Ridge Regresyon Uygulaması: Lambda Optimizasyonu</h3><h4>Bölüm 1: Veri Hazırlığı ve Ön İşleme</h4><p>Bu ilk aşama, regresyon için verinizi hazırlama, temizleme ve <strong>kategorik değişkenleri</strong> modele sokmak için dönüştürme adımlarını içerir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/942/1*Tj-BC1vT4qGeR6gKcOWizw.png" /></figure><ol><li>import numpy as np: <strong>NumPy</strong>, sayısal ve matematiksel işlemler (karekök, ortalama, dizi işlemleri) için dahil edildi.</li><li>import pandas as pd: <strong>Pandas</strong>, verileri tablo (DataFrame) halinde okumak, temizlemek ve işlemek için dahil edildi.</li><li>from sklearn.linear_model import Ridge: <strong>Ridge Regresyon</strong> modelini kurmak için gerekli araç dahil edildi.</li><li>from sklearn.metrics import mean_squared_error, r2_score: Modelin başarısını ölçmek için <strong>hata metrikleri</strong> (MSE, R2) dahil edildi.</li><li>from sklearn.model_selection import train_test_split: Veriyi eğitim ve test kümelerine ayırmak için gerekli araç dahil edildi.</li><li>from sklearn.linear_model import RidgeCV: <strong>En iyi lambda (alpha) değerini otomatik bulmak</strong> için özel Ridge aracı dahil edildi.</li></ol><p>Bu aşama, ham veriyi modelin anlayacağı formata dönüştürme sürecidir.</p><p><a href="https://www.kaggle.com/datasets/serdargurler/hitterscsv">https://www.kaggle.com/datasets/serdargurler/hitterscsv</a></p><p>Kullanılan veri setine yukarıdaki url’den ulaşabilirsiniz.</p><ol><li>df = pd.read_csv(...): Veri setiniz olan <strong>&#39;Hitters.csv&#39;</strong> dosyasını okuyarak df adlı tabloya yüklüyorsunuz.</li><li>df = df.dropna(): Tablodaki <strong>eksik değer içeren tüm satırları siliyorsunuz</strong>. (Veri temizliği).</li><li>dms = pd.get_dummies(df[[&#39;League&#39;, &#39;Division&#39;, &#39;NewLeague&#39;]]): Modelin anlayamayacağı <strong>kategorik (metinsel) değişkenleri</strong> (League, Division, NewLeague) alıp, onları <strong>sayısal 0/1 değişkenlerine</strong> (dummy) dönüştürüyorsunuz.</li><li>y = df[&quot;Salary&quot;]: Tahmin etmeye çalıştığınız bağımlı değişkeni (<strong>Maaş/Salary</strong>) belirliyorsunuz.</li><li>X_ = df.drop([&#39;Salary&#39;, &#39;League&#39;, &#39;Division&#39;, &#39;NewLeague&#39;], axis=1).astype(&#39;float64&#39;): Maaş ve az önce dönüştürdüğünüz eski kategorik sütunları tablodan atarak, <strong>sayısal bağımsız değişkenlerin iskeletini</strong> oluşturuyorsunuz.</li><li>X = pd.concat([X_, dms], axis=1): Sayısal değişkenleriniz ile yeni oluşturduğunuz <strong>dummy (0/1) değişkenleri</strong> birleştirerek, modelin kullanacağı son <strong>girdi kümesini (X)</strong> hazırlıyorsunuz.</li><li>X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42): Tüm veriyi, aşırı öğrenmeyi kontrol etmek için <strong>%25 test</strong> ve <strong>%75 eğitim</strong> olacak şekilde ikiye ayırıyorsunuz.</li></ol><p>Model Eğitimi</p><p>ridge_model = Ridge(alpha=0.1).fit(X_train, y_train):</p><ul><li><strong>Ridge Regresyon</strong> modelini, <strong>0.1</strong> gibi rastgele bir lambda (alpha) değeri ile başlatıyorsunuz.</li><li><strong>.fit(X_train, y_train):</strong> Modeli, ayırdığınız <strong>eğitim verisi</strong> ile eğitiyor ve modelin tüm katsayılarını hesaplamasını sağlıyorsunuz.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/937/1*Oj3z9JCY28apr7IowGEglQ.png" /></figure><p><strong>Modelin Katsayıları ve Kesişim Noktası</strong></p><p><strong>ridge_model.coef_ (Satır 19):</strong></p><ul><li>Modelin, veriyi inceleyerek bulduğu <strong>tüm katsayıları </strong>görüntülediniz.</li></ul><p><strong>ridge_model.intercept_ (Satır 30):</strong></p><ul><li>Modelin öğrendiği <strong>kesişim noktasını </strong>görüntülediniz.</li></ul><p>Lambda Değer Aralığının Oluşturulması</p><p>Bu kısım, Ridge Regresyon’un en kritik adımıdır. Doğru cezalandırma şiddetini (Lambda) bulmak için bir arama listesi oluşturuluyor.</p><p><strong>np.linspace(10, -2, 100)</strong></p><ul><li><strong>NumPy</strong> kütüphanesi kullanılarak 10² (yani 100) ile 10^-2 (yani 0.01) arasında, logaritmik olarak eşit aralıklarla dağılmış <strong>100 farklı sayısal değerden</strong> oluşan bir dizi oluşturuldu.</li><li><strong>Anlamı:</strong> Bu, modelin test edeceği <strong>güçlü ve zayıf ceza şiddetleri</strong> (Lambda değerleri) listesinin taslağıdır.</li></ul><p><strong>lambdalar = 10**np.linspace(10, -2) * 0.5</strong></p><ul><li>Yukarıdaki taslak değerlerin her biri 10’un üssü alınarak (logaritmik ölçekte) gerçek lambda değerleri listesi (lambdalar) oluşturuldu.</li><li><strong>Anlamı:</strong> Bu nihai lambdalar dizisi, modelinizin <strong>en uygun cezalandırma miktarını</strong> bulmak için <strong>K-Katlı Çapraz Doğrulama</strong> yapacağı 100 farklı lambda değerini içerir.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/925/1*g7dFrDSutI_jJsqwnpAW4g.png" /></figure><p>Bu kodlar, Ridge Regresyon modelinizi alıp, aşırı öğrenmeyi önlemek için gereken <strong>en iyi cezalandırma miktarı (lambda)</strong> nedir, sorusunun cevabını otomatik olarak aramaktadır.</p><p>İlk olarak, <strong>lambdalar</strong> adlı uzun bir dizi görüyorsunuz. Bu dizi, modelin test edeceği lambda&#39;nın <strong>tüm olası ceza şiddetlerini</strong> içerir. Bu değerler, hem çok küçük (0.01 gibi) hem de çok büyük (10.000.000 gibi) cezaları içerir ve her biri eşit öneme sahip olacak şekilde logaritmik olarak düzenlenmiştir.</p><p>Kodun kalbi, <strong>for i in lambdalar:</strong> ile başlayan döngüdür. Bu döngü, arka planda şu talimatı verir:</p><ul><li>“Al bu 100 farklı lambda değerini ve her bir lambda için şu adımları yap:”</li><li><strong>Ayarı Değiştir:</strong> ridge_model.set_params(alpha = i) komutuyla, modelin mevcut ceza şiddetini, o anki yeni lambda değeriyle değiştirir.</li><li><strong>Yeniden Eğit:</strong> ridge_model.fit(X_train, y_train) komutuyla modeli, bu yeni ceza ile <strong>tekrar</strong> eğitir.</li><li><strong>Katsayıları Sakla:</strong> katsayilar.append(ridge_model.coef_) komutuyla, modelin bu yeni ceza ile bulduğu beta katsayılarını bir listeye kaydeder.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/931/1*XOGppRKWBCEK5H-WyB4JBw.png" /></figure><p>Kaydettiğiniz bu katsayıları burada katsayilar yazarak çağırıyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/922/1*mJ3Gr6bLqj0-_vWEmAhqNQ.png" /></figure><p>Bu grafik, <strong>lambda (Lambda)</strong> değeri değiştikçe, modelinizdeki <strong>tüm bağımsız değişkenlerin katsayılarının (beta)</strong> nasıl tepki verdiğini gösterir.</p><h4>Eksenlerin Anlamı</h4><ul><li><strong>Y Ekseni (Dikey): Katsayı Değerleri (beta):</strong> Modelinizdeki her bir özelliğin aldığı sayısal ağırlık değeridir.</li><li><strong>X Ekseni (Yatay): Lambda Değerleri :</strong> Bu, Ridge modelinin ceza şiddetini gösterir. Eksen logaritmik ölçektedir (ax.set_xscale(&quot;log&quot;)), yani küçük değerlerden (10^-1) çok büyük değerlere (10^9) kadar uzanır.</li></ul><h4>Grafiğin Yorumu (Ridge’in Çalışma Mantığı)</h4><p>Grafikte gördüğünüz her bir renkli çizgi, bir bağımsız değişkenin lambda’ya karşı aldığı katsayı değerini temsil eder.</p><h4>Sol Taraf (lambda Düşük, Cezalandırma Zayıf)</h4><ul><li><strong>Durum:</strong> Sol tarafta lambda değerleri çok küçüktür. Ceza etkisi zayıftır.</li><li><strong>Gözlem:</strong> Katsayı çizgileri <strong>çok dağınık</strong> ve <strong>büyük</strong> değerler alır (bazıları +100’e, bazıları -100’e yakındır). Bu durum, modelin <strong>olduğu gibi (OLS gibi)</strong> çalıştığını ve verideki küçük gürültüleri bile yakalamak için katsayıları şişirdiğini gösterir.</li></ul><h4>Sağ Taraf (lambda Yüksek, Cezalandırma Şiddetli)</h4><ul><li><strong>Durum:</strong> Sağ tarafa (10⁵, 10⁷) doğru ilerledikçe lambda değerleri çok büyür. Cezalandırma şiddeti artar.</li><li><strong>Gözlem:</strong> Tüm renkli çizgiler (beta katsayıları), merkeze doğru (sıfıra) <strong>hızla yaklaşır</strong> ve nihayetinde sıfırda buluşur.</li><li><strong>Anlamı:</strong> Model, büyük ceza almamak için tüm katsayılarını küçültmek zorunda kalmıştır. Bu, modelin <strong>aşırı öğrenme eğilimini bastırdığını</strong> ve gereksiz karmaşıklıktan kurtularak <strong>sadeleştiğini</strong> gösterir.</li></ul><h3>Ridge Regresyon: Performans Ölçümü ve Doğrulama</h3><p>Bu kod bloğu, daha önce teorisini öğrendiğiniz <strong>Ridge Regresyon</strong> modelini kullanarak, modelinizin <strong>eğitimdeki başarısını, testteki genelleme yeteneğini ve çapraz doğrulama ile istikrarını</strong> ölçtüğünüz en kritik aşamanın kodlarıdır. Şimdi tek tek kodalrı daha yakından inceleyelim:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/939/1*6vRyXmfQQeB82IuANYEnkg.png" /></figure><h4>Model Eğitimi ve Tahminler</h4><p><strong>ridge_model = Ridge().fit(X_train, y_train)</strong></p><ul><li>Ridge Regresyon modeli kuruldu ve <strong>eğitim verileri</strong> (X_train, y_train) kullanılarak eğitildi. (Bu aşamada lambda varsayılan bir değerle başlar.)</li></ul><p><strong>y_pred = ridge_model.predict(X_train)</strong></p><ul><li>Eğitilmiş model, <strong>kendi gördüğü</strong> (X_train) verileri kullanarak tahminler (y_pred) yaptı. Bu tahminler, modelin ne kadar iyi <strong>ezberlediğini</strong> görmemizi sağlar.</li></ul><p><strong>y_train[0:10] ve Çıktıları :</strong></p><ul><li>Gerçek maaş değerleri (y_train) ile modelin bu maaşlar için yaptığı tahminler (y_pred) ilk 10 satırda karşılaştırıldı.</li></ul><h4>Eğitimin Başarısını Ölçme (Train Error)</h4><p><strong>RMSE = np.sqrt(mean_squared_error(y_train, y_pred))</strong></p><ul><li>Modelin <strong>eğitim hatası</strong> (RMSE) hesaplandı. Gerçek eğitim değerleri (y_train) ile modelin bu veriler için yaptığı tahminler (y_pred) arasındaki farkın karekökü alındı.</li><li><strong>Mantık:</strong> Bu değer, modelin <strong>eğitim setini ezberleme</strong> (veya öğrenme) başarısını gösterir. Bu değerin düşük olması beklenir.</li></ul><h4>Model İstikrarını Ölçme (K-Katlı Çapraz Doğrulama)</h4><p><strong>from sklearn.model_selection import cross_val_score (Satır 76):</strong></p><ul><li>K-Katlı Çapraz Doğrulama (CV) aracını programa dahil ederiz.</li></ul><p><strong>np.sqrt(np.mean(-cross_val_score(...)))</strong></p><ul><li>Modelin <strong>eğitim verisini 10 eşit parçaya bölerek</strong> (cv=10) 10 farklı test yaptıktan sonra, elde edilen hataların (MSE) ortalamasının karekökü alındı.</li><li><strong>Mantık:</strong> Bu, modelin <strong>tek bir test setine bağımlı olmadan</strong>, verinin farklı parçalarında <strong>ne kadar istikrarlı</strong> çalıştığını gösteren en güvenilir hata ölçütüdür.</li></ul><h4>Genelleme Yeteneğini Ölçme (Test Error)</h4><p><strong>y_pred = ridge_model.predict(X_test)</strong></p><ul><li>Modelden, <strong>daha önce hiç görmediği</strong> (X_test) test verilerini kullanarak tahmin yapması istendi.</li></ul><p><strong>RMSE = np.sqrt(mean_squared_error(y_test, y_pred))</strong></p><ul><li>Modelin <strong>test hatası</strong> (RMSE) hesaplandı. Gerçek test değerleri (y_test) ile modelin bu veriler için yaptığı tahminler arasındaki hata ölçüldü.</li><li><strong>Mantık:</strong> Bu değer, modelin <strong>gerçek dünya genelleme yeteneğini</strong> gösterir. Bu skorun, eğitim hatasına <strong>çok yakın</strong> olması beklenir. Arada büyük fark varsa, model <strong>aşırı öğrenmiş (overfitting)</strong> demektir.</li></ul><h3>Model Tuning Nedir?</h3><p><strong>Model Tuning (Model Ayarlama)</strong>, bir makine öğrenimi modelinin performansını optimize etmek için kullanılan bir süreçtir.</p><p>Kısaca, modelin öğrenme sürecini kontrol eden ve veri setinden otomatik olarak öğrenilemeyen <strong>hiperparametreler</strong> adı verilen ayarların en iyi kombinasyonunu bulma işlemidir.</p><h4>Temel Kavramlar</h4><ul><li><strong>Model Parametreleri:</strong> Modelin eğitim sırasında verilerden öğrendiği değerlerdir (Örn: Doğrusal regresyondaki eğim ve kesme noktası, veya sinir ağlarındaki ağırlıklar).</li><li><strong>Hiperparametreler:</strong> Modelin kendisinin değil, öğrenme algoritmasının davranışını kontrol eden dışsal ayar değerleridir. Model tuning, bu değerleri bulmaya odaklanır.</li></ul><h3>Model Tuning kodları:</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/932/1*L9y6GJTNwGzkZY079esTvA.png" /></figure><h4>Temel Ridge Modeli ve Performans</h4><p><strong>Amaç:</strong> Hiperparametre ayarına başlamadan önce basit bir Ridge modelinin (varsayılan ayarlarla) performansını görmek.</p><ul><li>ridge_model = Ridge(1).fit(X_train, y_train): alpha=1 (varsayılan) ile bir Ridge modeli eğitilir.</li><li>y_pred = ridge_model.predict(X_test): Test seti üzerinde tahmin yapılır.</li><li>np.sqrt(mean_squared_error(y_test, y_pred)): Modelin performansı, <strong>Kök Ortalama Karesel Hata (RMSE)</strong> ile değerlendirilir.</li><li><strong>Sonuç:</strong> 356.808.... Bu, modelin ortalama hata miktarını gösterir.</li></ul><h4>alpha Adaylarının Oluşturulması</h4><p>Ridge regresyonunda ayarlanması gereken ana hiperparametre alpha’dır (düzenleme kuvveti). <strong>RidgeCV</strong> (Çapraz Doğrulamalı Ridge) modelinin deneyeceği alpha (düzenleme) değerlerinin bir listesi oluşturuluyor.</p><ul><li>np.random.randint(0, 1000, 100)</li><li>0 ile 1000 arasında rastgele 100 adet tam sayı seçilir.</li><li>lambdalar1 = np.random.randint(0, 1000, 100)</li><li>0 ile 1000 arasında rastgele 100 adet tamsayı içeren bir alpha adayı listesi oluşturulur.</li><li>lambdalar2 = 10**np.linspace(10, -2, 100)*0.5</li><li>Bu, genellikle daha iyi sonuç veren bir yaklaşımdır. 10^-2’den 10^10’a kadar logaritmik olarak eşit aralıklarla 100 adet alpha değeri oluşturulur ve 0.5 ile çarpılır.</li></ul><h4>Hiperparametre Ayarı: RidgeCV Kullanımı</h4><ul><li>ridgecv = RidgeCV(alphas=lambdalar2, scoring=&quot;neg_mean_squared_error&quot;, cv=10)</li><li>RidgeCV modeli, en iyi alpha değerini bulmak için 10 katmanlı (10-fold) çapraz doğrulama yapar.</li><li><strong>Parametreler:</strong></li><li>alphas=lambdalar2: Denenecek alpha adayları listesi (lambdalar2 kullanılıyor).</li><li>scoring=&quot;neg_mean_squared_error&quot;: Performans metriği olarak Negatif Ortalama Karesel Hata (Negative MSE) kullanılır. (Pozitif değere dönüştürüldüğünde MSE elde edilir.)</li><li>cv=10: 10 katmanlı çapraz doğrulama kullanılır.</li><li>ridgecv.fit(X_train, y_train): Model, bu alpha adaylarını kullanarak eğitim verisi üzerinde en iyi alpha&#39;yı bulmak için eğitilir.</li></ul><h4>En İyi alpha Değeri ve Final Model</h4><ul><li>ridgecv.alpha_</li><li>RidgeCV eğitimi tamamlandıktan sonra, çapraz doğrulama ile bulunan <strong>en iyi alpha (düzenleme)</strong> değeri bu öznitelikte saklanır.</li><li><strong>Sonuç:</strong> 1526927.7544167063. Bu, modelin bulduğu en iyi alpha değeridir.</li></ul><h4>Final Modelin Eğitilmesi ve Değerlendirilmesi</h4><ul><li>ridge_tuned = Ridge(alpha=ridgecv.alpha_).fit(X_train, y_train): Bulunan en iyi alpha değeri (ridgecv.alpha_) kullanılarak <strong>son</strong> Ridge modeli eğitilir.</li><li>y_pred = ridge_tuned.predict(X_test): Test seti üzerinde tahmin yapılır.</li><li>np.sqrt(mean_squared_error(y_test, y_pred)): Performans (RMSE) tekrar hesaplanır.</li><li><strong>Sonuç:</strong> 385.864....</li></ul><p>kodlara Kaynakça kısmındaki github reposundan ulaşabilirsiniz.</p><h3>Lasso Regresyon Modeli</h3><p>Lasso Regresyonunun temel amacı, tıpkı standart regresyonda olduğu gibi, <strong>hata kareler toplamını (SSE)</strong> en aza indirmektir.</p><p>Ancak, bunu yaparken bir kural ekler: <strong>katsayılara (yani modeldeki değişkenlerin ağırlıklarına) bir ceza uygular.</strong></p><h4>1. Amaç Fonksiyonu</h4><p>Lasso’nun minimize etmeye çalıştığı denklem şudur:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/606/1*V-a2z0y19mnfEPhxrJYI4w.png" /></figure><ul><li><strong>İlk Kısım:</strong> Tahminlerimiz ile gerçek değerler arasındaki hatayı minimum yapmaya çalışır.</li><li><strong>İkinci Kısım (Ceza Terimi):</strong> Modelin katsayılarının beta_j mutlak değerlerinin toplamını (L1 normu) ceza olarak ekler ve bu ceza <strong>Lambda</strong> ile çarpılır.</li></ul><blockquote>Lasso Regresyonu, ceza teriminde mutlak değerleri kullandığı için L1 Regresyonu olarak da adlandırılır.</blockquote><h4>Lasso’nun Özel Gücü: Değişken Seçimi</h4><p>Lasso’yu Ridge Regresyonundan ayıran en önemli özellik, <strong>otomatik değişken seçimi</strong> yapabilmesidir.</p><h4>Ridge Regresyonunun Dezavantajı</h4><p>Ridge Regresyonu da ceza terimi kullanır (L2 normu), ancak <strong>ilgisiz değişkenlerin katsayılarını sıfıra yaklaştırır, ama asla tam olarak sıfır yapmaz.</strong> Bu, modelde hala yüzlerce hatta binlerce değişkenin kalmasına neden olabilir.</p><h4>Lasso’nun Çözümü</h4><p>Lasso’da, lambda (ayarlama parametresi) <strong>yeterince büyük</strong> seçildiğinde:</p><ol><li>Model, hatayı ve cezayı aynı anda düşürmek ister.</li><li>Bunu başarmanın en iyi yolu, modelin performansına <strong>hiç katkı sağlamayan</strong> veya <strong>çok az katkı sağlayan</strong> değişkenlerin katsayılarını <strong>TAM OLARAK SIFIR beta_j = 0</strong> yapmaktır.</li><li>Bir katsayı sıfır olduğunda, o değişken modelden <strong>otomatik olarak çıkarılmış</strong> olur.</li></ol><p>Böylece Lasso, en önemli değişkenleri bırakarak <strong>değişken seçimi (feature selection)</strong> yapmış olur, bu da daha basit ve yorumlanabilir modeller oluşturur.</p><h4>lambda (Lambda) Ayar Parametresinin Belirlenmesi</h4><p>lambda’nın model üzerindeki etkisi çok kritik olduğu için, doğru lambda değerini bulmak anahtar adımdır.</p><ul><li><strong>lambda = 0 ise:</strong> Ceza terimi ortadan kalkar ve Lasso, <strong>Standart En Küçük Kareler (EKK)</strong> yöntemine eşdeğer olur.</li><li><strong>lambda &gt; 0 ise:</strong> lambda büyüdükçe ceza artar ve katsayılar sıfıra yaklaşır.</li></ul><h4>En İyi <strong>lambda</strong>’yı Bulma Süreci (Çapraz Doğrulama — CV)</h4><ol><li><strong>Aday Kümesi Seçimi:</strong> lambda için geniş bir aralıkta (genellikle logaritmik olarak) birden fazla aday değer içeren bir küme belirlenir.</li><li><strong>Çapraz Doğrulama (Cross Validation — CV):</strong> Bu aday lambda değerlerinin her biri için <strong>çapraz doğrulama testi hatası</strong> hesaplanır. (Bu, modelin yeni veriler üzerindeki genelleme yeteneğini ölçer.)</li><li><strong>En İyi lambda Seçimi:</strong> <strong>En küçük cross validation hatasını</strong> veren lambda değeri, optimal ayar parametresi olarak seçilir.</li><li><strong>Final Model:</strong> Son olarak, bu seçilen <strong>en iyi lambda</strong> kullanılarak model tüm eğitim verisi üzerinde yeniden eğitilir.</li></ol><h3>Lasso Regresyon Uygulaması:</h3><p>Bu kısımdaki kodlar daha önceki <strong>Ridge Regresyonu</strong> uygulamasında gördüğünüz veri hazırlama, eğitim ve test verisi ayırma, temel model fit etme adımları büyük ölçüde aynı kalmaktadır. Bu nedenle, tekrar eden kod bloklarını ve temel süreçleri atlayarak, <strong>yalnızca Lasso Regresyonuna özgü</strong> olan adımlara, özellikle <strong>hiperparametre optimizasyonu ($\lambda$ seçimi)</strong> ve <strong>katsayıların (coefficients) sıfırlanması</strong> gibi kritik noktalara değinilecektir.</p><p>Temel kodların işlevini anlamakta zorlandığınız yerler olursa, lütfen Ridge Regresyonu açıklamalarına başvurarak Lasso’ya uyarlayabilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/937/1*y90LsuLNKefbsBNRCe9edA.png" /></figure><h4>Katsayıların lambda’ya Göre Görselleştirilmesi</h4><p>Bu kısım, farklı lambda değerleri için katsayıların nasıl değiştiğini gösteren grafiği çizer.</p><p>lasso = Lasso():</p><ul><li>Düzenleme parametresi lambda (alpha) ayarlanacak olan Lasso sınıfından bir model nesnesi oluşturulur.</li></ul><p>coefs = []:</p><ul><li>Her lambda değeri için bulunacak olan katsayıları (coef_) depolamak amacıyla boş bir liste tanımlanır.</li></ul><p>alphas = 10**np.linspace(10, -2, 100)*0.5:</p><ul><li>Bu geniş aralık, en iyi lambda’yı bulmak için önemlidir.</li></ul><p>for a in alphas: lasso.set_params(alpha = a):</p><ul><li>Oluşturulan her bir $ambda adayı (a) için döngü başlatılır ve bu değer, lasso modelinin alpha parametresine atanır.</li></ul><p>lasso.fit(X_train, y_train):</p><ul><li>Model, o anki lambda değeri kullanılarak eğitim verisi (X_train, y_train) üzerinde eğitilir.</li></ul><p>coefs.append(lasso.coef_):</p><ul><li>Eğitilen modelin bulduğu tüm katsayılar (coef_), coefs listesine eklenir.</li></ul><p>ax = plt.gca():</p><ul><li>Grafik çizmek için mevcut çizim eksenlerine erişilir.</li></ul><p>ax.plot(alphas, coefs):</p><ul><li>X ekseninde lambda değerleri (alphas) ve Y ekseninde bu lambda&#39;lara karşılık gelen katsayı değerleri (coefs) kullanılarak grafik çizilir.</li></ul><p>ax.set_xscale(&quot;log&quot;):</p><ul><li>lambda aralığı çok geniş olduğu için X ekseninin <strong>logaritmik ölçekte</strong> gösterilmesi sağlanır.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/927/1*mlRXp2x4-1Y_AUZ2c8SAbA.png" /></figure><h4>Temel Model Tahmini ve Performansı</h4><p>Bu kısım, genellikle varsayılan bir lambda ile eğitilmiş modelin test verisindeki tahmin yeteneğini değerlendirir.</p><p>lasso_model:</p><ul><li>Kullanılan lasso_model nesnesinin detaylarını gösterir.</li></ul><p>lasso_model.predict(X_train)[0:5]:</p><ul><li>Modelin, <strong>eğitim</strong> verisinin ilk 5 gözlemi için yaptığı tahminler gösterilir.</li></ul><p>lasso_model.predict(X_test)[0:5]:</p><ul><li>Modelin <strong>test</strong> verisinin (modelin hiç görmediği veri) ilk 5 gözlemi için yaptığı tahminler gösterilir.</li></ul><p>y_pred = lasso_model.predict(X_test):</p><ul><li>Modelin <strong>tüm test verisi</strong> üzerindeki tahminleri yapılır ve sonuçlar y_pred değişkenine atanır.</li></ul><p>np.sqrt(mean_squared_error(y_test, y_pred)):</p><ul><li>Tahminlerin gerçek y_test değerlerine göre <strong>Kök Ortalama Karesel Hatası (RMSE)</strong> hesaplanır (356.097).</li></ul><p>r2_score(y_test, y_pred):</p><ul><li>Modelin test verisindeki <strong>R-kare (R²) skoru</strong> hesaplanır (0.414).</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/913/1*xGHoxIjEO9KE6nyHe0Mbog.png" /></figure><h4>Optimal lambda ile Model Ayarlama ve Final Katsayılar</h4><p>Bu kısım, <strong>Çapraz Doğrulama</strong> kullanarak en iyi lambda’yı bulur ve nihai modeli bu değerle eğitir.</p><p>lasso_cv_model = LassoCV(cv = 10, max_iter = 100000).fit(X_train, y_train):</p><ul><li>LassoCV (Çapraz Doğrulamalı Lasso) modeli oluşturulur. <strong>10 katmanlı (cv=10) çapraz doğrulama</strong> kullanarak en iyi lambda değeri bulunur ve model eğitilir.</li></ul><p>lasso_cv_model.alpha_:</p><ul><li>Çapraz doğrulama sonucunda modelin bulduğu <strong>en iyi lambda (alpha) değeri</strong> gösterilir (563.467).</li></ul><p>lasso_tuned = Lasso().set_params(alpha = lasso_cv_model.alpha_).fit(X_train, y_train):</p><ul><li><strong>Final Model Eğitimi:</strong> Yeni bir Lasso modeli oluşturulur, lasso_cv_model.alpha_ ile bulunan <strong>optimal lambda değeri</strong> atanır ve model tüm eğitim verisi üzerinde son kez eğitilir.</li></ul><p>y_pred = lasso_tuned.predict(X_test):</p><ul><li>Ayarlanmış modelin test verisindeki tahminleri yapılır.</li></ul><p>np.sqrt(mean_squared_error(y_test, y_pred)):</p><ul><li>Ayarlanmış modelin <strong>RMSE</strong> değeri hesaplanır (373.595).</li></ul><p>pd.Series(lasso_tuned.coef_, index=X_train.columns):</p><ul><li><strong>Final Katsayıları:</strong> Ayarlanmış modelin bulduğu katsayılar (coef_), ilgili değişken adları ile birlikte liste halinde gösterilir. Bu çıktı, Lasso&#39;nun yaptığı <strong>değişken seçimi</strong> sonucu bazı katsayıların <strong>tam olarak 0.000000</strong> olduğunu gösterir.</li></ul><h3>ElasticNet Regresyonu:</h3><p><strong>ElasticNet Regresyonu</strong>, temelde, daha önce gördüğünüz <strong>Ridge Regresyonu</strong> (L2) ve <strong>Lasso Regresyonu</strong> (L1) yöntemlerinin en iyi yönlerini birleştiren bir düzenleme (regularizasyon) tekniğidir.</p><h4>Temel Amaç</h4><p>Standart regresyonda olduğu gibi, amaç <strong>hata kareler toplamını</strong> minimum yapan katsayıları bulmaktır. Ancak ElasticNet, bu katsayılara <strong>iki farklı türde ceza</strong> uygulayarak bunu gerçekleştirir.</p><p>ElasticNet, L1 ve L2 yaklaşımlarını birleştirdiği için, her iki yöntemin avantajlarından da faydalanır.</p><h4>ElasticNet’in Matematiksel Yapısı</h4><p>ElasticNet’in minimize etmeye çalıştığı fonksiyon (maliyet fonksiyonu) üç ana bileşenden oluşur, tıpkı görselde gördüğünüz gibi:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/714/1*57hA8rvWZ4f0CmAXBVaWOQ.png" /></figure><ol><li><strong>Hata Kareler Toplamı:</strong> Modelin tahmini ile gerçek değerler arasındaki farkın karesidir.</li><li><strong>L2 Ceza Terimi (Ridge Kısmı):</strong> Katsayıların karesini (beta_j²) ceza olarak ekler. <strong>lambda_1</strong> bu cezanın gücünü kontrol eder.</li><li><strong>L1 Ceza Terimi (Lasso Kısmı):</strong> Katsayıların mutlak değerini (|beta_j|) ceza olarak ekler. <strong>lambda_2</strong> bu cezanın gücünü kontrol eder.</li></ol><h4>Neden L1 ve L2 Birleştirilir?</h4><p>ElasticNet, her iki yöntemin avantajlarını aynı anda sunar:</p><ol><li><strong>Değişken Seçimi (Lasso/L1 Etkisi):</strong> lambda_2 sayesinde, Lasso’daki gibi <strong>önemsiz değişkenlerin katsayıları tam olarak sıfır</strong> yapılabilir. Bu, modelin basitleşmesini ve yorumlanabilirliğini sağlar.</li><li><strong>Korelasyon Sorunlarının Çözümü (Ridge/L2 Etkisi):</strong> Eğer veri setinde birbiriyle yüksek derecede ilişkili (korelasyonlu) çok sayıda değişken varsa, Ridge Regresyonu bu gruplanmış değişkenlerin katsayılarını eşit olarak dağıtmada daha başarılıdır. ElasticNet, bu özelliği sayesinde <strong>Ridge’den daha kararlı sonuçlar</strong> verir.</li></ol><p><strong>Özetle,</strong> ElasticNet hem <strong>değişken seçimi</strong> yapmak ister (Lasso gibi), hem de yüksek korelasyonlu değişkenler kümesiyle karşılaştığında <strong>daha stabil</strong> davranmak ister (Ridge gibi). Bu iki gücü birleştirerek güçlü bir düzenleme yöntemi oluşturur.</p><p>Bu kısımdaki uygulama kodları diğer kodlara çok benzediğinden dolayı ekstra açıklamaya girilmeyecektir. Tüm kodlara ulaşmak için kaynaklar kısmındaki github reposu ile ulaşabilirisiniz.</p><h3>Sonuç</h3><p>Bu detaylı analizde, regresyon modellerinin genelleme yeteneğini artırmanın yollarını inceledik.</p><ul><li><strong>Ridge Regresyonu (L2)</strong>: Modelin <strong>aşırı öğrenmesini (overfitting)</strong> önlemek için katsayıları <strong>sıfıra yaklaştırarak</strong> modeli istikrarlı hale getirmeyi öğrendik. Yüksek korelasyonlu değişkenlerde kararlılık sağlar.</li><li><strong>Lasso Regresyonu (L1)</strong>: lambda parametresi yeterince büyük olduğunda, ilgisiz değişkenlerin katsayılarını <strong>TAM OLARAK SIFIR</strong> yaparak <strong>otomatik değişken seçimi</strong> yapmanın gücünü gördük.</li><li><strong>ElasticNet Regresyonu</strong>: L1 ve L2&#39;nin en iyi yönlerini birleştirerek, hem <strong>değişken seçimi</strong> yapar hem de yüksek korelasyonlu veri setlerinde daha <strong>stabil</strong> sonuçlar verir.</li></ul><p>Tüm bu süreçte, <strong>Çapraz Doğrulama (CV)</strong> ile en uygun <strong>lambda (alpha)</strong> değerini bularak modellerimizin gerçek dünya başarısını maksimize etmenin kritik önemini anladık.</p><p>Bu düzenleme yöntemleri, daha güvenilir tahminler yapmak ve modelin karmaşıklığını kontrol altında tutmak için elinizdeki en güçlü araçlardır. Bir sonraki yazıda görüşmek üzere…</p><h3>Kaynakça</h3><ul><li><a href="https://gelecegiyazanlar.turkcell.com.tr/egitimler/makine-ogrenmesi/makine-ogrenmesi_201">Makine Öğrenmesi 201 | Geleceği Yazanlar</a></li><li><a href="https://github.com/Safiye-alaca/ML_Basics">GitHub - Safiye-alaca/ML_Basics: This repository contains foundational data science and machine learning projects implemented as part of the courses I completed on the Turkcell Geleceği Yazanlar platform. The projects aim to translate theoretical knowledge into practical skills using libraries such as Python, Pandas, Scikit-learn, and Matplotlib/Seaborn.</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e585602ed34b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kodcular/makine-%C3%B6%C4%9Frenmesi-201-part2-e585602ed34b">Makine Öğrenmesi 201- part2</a> was originally published in <a href="https://medium.com/kodcular">Kodcular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Nizam — Next.js 16 Boilerplate]]></title>
            <link>https://medium.com/kodcular/nizam-next-js-16-boilerplate-3015d8945f39?source=rss----ff2de8699413---4</link>
            <guid isPermaLink="false">https://medium.com/p/3015d8945f39</guid>
            <category><![CDATA[nizam-boilerplate]]></category>
            <category><![CDATA[nizam]]></category>
            <category><![CDATA[nextjs-16]]></category>
            <category><![CDATA[nextjs-boilerplate]]></category>
            <category><![CDATA[frontend]]></category>
            <dc:creator><![CDATA[Ömer Gülçiçek]]></dc:creator>
            <pubDate>Thu, 06 Nov 2025 11:38:14 GMT</pubDate>
            <atom:updated>2025-11-06T11:38:13.335Z</atom:updated>
            <content:encoded><![CDATA[<h3>Nizam — Next.js 16 Boilerplate</h3><p>Modern web uygulamalarını hızlı, güvenli ve zevkli şekilde inşa etmek için hazırladığım yeni Next.js 16 boilerplate’imi tanıtıyorum: Nizam.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*l8Td4TmrFJe2aiuK.png" /><figcaption>Nizam — Next.js 16 Boilerplate</figcaption></figure><h3>Neden “Nizam”?</h3><p>“Nizam” Türkçe’de düzen, yapı ve uyum anlamına geliyor. Tam da bir boilerplate’ten beklediğimiz gibi: iyi organize edilmiş, anlaşılır ve ölçeklenebilir bir temel. Ayrıca yabancı geliştiricilerin de kolayca telaffuz edebileceği, akılda kalıcı bir isim. Projenin adıyla felsefesi birebir örtüşüyor.</p><h3>Neden yenilendi?</h3><p>Önceki sürüm (Next.js 15) deneyiminden sonra, Next.js 16’nın getirdiği yenilikler ve React 19 ile birlikte mimariyi sıfırdan, daha yalın ve odaklı olacak şekilde yeniden kurdum. Storybook ve Sentry gibi her projede gerekmeyebilecek bağımlılıkları çekirdekten çıkardım; artık opsiyonel. Böylece boilerplate, çoğu projeye “direkt uygun” bir hafif çekirdek sunuyor, ihtiyaç duyanlar ise kolayca entegre edebiliyor.</p><h3>Nizam ile gelenler</h3><ul><li>Next.js 16 App Router: Dosya tabanlı yönlendirme, server-first desenler, concurrency dostu mimari.</li><li>Tip güvenliği ve env doğrulama: TypeScript 5, Zod ve @t3-oss/env-nextjs ile runtime doğrulamalı ortam değişkenleri.</li><li>Veri katmanı: TanStack Query 5 ile akıllı önbellekleme, arka planda yeniden doğrulama ve güçlü mutasyon akışları.</li><li>Uluslararasılaştırma (i18n): next-intl ile locale-aware routing ve çeviri dosyaları.</li><li>Tema ve UI: Tailwind CSS v4 + shadcn/ui ile erişilebilir ve hızlı arayüzler; next-themes ile açık/koyu tema.</li><li>Durum yönetimi: Hafif global state için Zustand.</li><li>Geliştirici deneyimi: ESLint 9, Prettier 3, Husky, lint-staged, Knip; absolute importlar (@/), paket analizörü ve SEO yardımcıları.</li></ul><p>Bu özelliklerin detaylarını hem canlı demoda hem de README’de görebilirsiniz.</p><h3>Önceki sürüme göre neler farklı?</h3><ul><li>Güncel yığın: Next.js 16 + React 19, Tailwind CSS v4, TanStack Query 5 ve modern araç setleri.</li><li>Env ve güvenlik: @t3-oss/env-nextjs + Zod ile env değişkenleri tip-güvenli ve runtime doğrulamalı.</li><li>Standartlar ve kurallar: Yeni alias kullanımı, dosya adlandırmaları ve kod yazım konvansiyonlarını netleştirdim; .cursor/rules ile editör/AI akışını da standardize ettim.</li><li>Sürdürülebilir repo hijyeni: Conventional Commits, Knip ve otomasyonlarla temiz, izlenebilir bir sürümleme ve bakım deneyimi.</li><li>Sıfırdan kurulan daha yalın bir çekirdek: Storybook/Sentry gibi &quot;her FE projesinde olmayabilecek&quot; parçalar çekirdekten çıkarıldı; isteyenler kolayca ekleyebilir.</li></ul><h3>Neden Nizam’ı kullanmalısınız?</h3><ul><li>Hızlı başlangıç, minimum uğraş: Çoğu projeye uygun, görüş bildiren ama dayatmacı olmayan bir çekirdek.</li><li>Güçlü ama sade: Performans, a11y ve DX’i önceleyen, gereksiz bağımlılıklardan arınmış bir temel.</li><li>Net kurallar, tutarlı kod: İsimlendirme, alias ve konvansiyonlar projeye disiplin kazandırır; ekip büyüdükçe değerini artırır.</li><li>Gerçek dünyaya hazır: i18n, tema, SEO ve veri katmanı gibi “genelde gereken” bloklar hazır gelir.</li></ul><h3>Hızlı başlangıç</h3><pre>git clone --depth=1 https://github.com/omergulcicek/nizam my-project<br>cd my-project<br>npm install<br>npm run dev</pre><p>Varsayılan .env örnekleri ve env şeması için src/env.ts dosyasına bakabilirsiniz.</p><h3>Bağlantılar</h3><ul><li>Canlı Demo: <a href="https://nizam-boilerplate.vercel.app/tr">nizam-boilerplate.vercel.app</a></li><li>GitHub: <a href="https://github.com/omergulcicek/nizam">omergulcicek/nizam</a></li></ul><p>README’de tüm teknik detaylar, proje yapısı, isimlendirme önerileri ve ipuçları yer alıyor. İnceleyin, klonlayın ve kendi ihtiyaçlarınıza göre özelleştirin.</p><h3>Destek olun</h3><p>Projeyi beğendiyseniz GitHub reposuna ⭐ vererek destek olabilirsiniz. Görüş ve katkılarınız için issue veya PR açmaktan çekinmeyin. Teşekkürler!</p><p><strong>Kişisel Sitem</strong>: <a href="https://omergulcicek.com/">omergulcicek.com</a><br><strong>Blog</strong>: <a href="https://omergulcicek.com/blog/nizam-nextjs-16-boilerplate/">https://omergulcicek.com/blog/nizam-nextjs-16-boilerplate/</a><br><strong>Instagram</strong>: @<a href="https://instagram.com/omerilekesfet/">omerilekesfet</a></p><p><em>Makaleyi alkışlayarak destek olabilirsiniz </em>🌹</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3015d8945f39" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kodcular/nizam-next-js-16-boilerplate-3015d8945f39">Nizam — Next.js 16 Boilerplate</a> was originally published in <a href="https://medium.com/kodcular">Kodcular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>