Yapay Zeka Yanılsaması: Çalışıyor Ama Arkamızda Neyi Bırakıyoruz?
Geçen gün elimde bir fincan kahveyle ekranımın karşısında oturuyordum, kod satırlarına bakıyordum ve sektörümüzün son birkaç yılda ne kadar hızlı dönüştüğünü düşünüyordum. Özellikle geleneksel olarak katı disiplini, kurumsal yapısı ve tür güvenliğiyle bilinen Microsoft .NET ekosisteminin tam kalbinde, yüzeyin altında bir şeyler sessizce çatlıyor. Yapay zekanın günlük iş akışlarımıza girmesiyle teknoloji dünyası güzel bir yanılsamanın içine düştü. Hepimiz aniden süper güçler kazandığımızı sanıyorduk. Ancak son zamanlarda halının altına süpürdüğümüz çok büyük bir "açık sır" var: İş tamamlandı, kullanıcı arayüzü harika görünüyor, ancak kod tabanında tam olarak neyi geride bırakıyoruz?
Eski günleri hatırlıyor musun? Kıdemsiz bir geliştirici için öğrenme eğrisi acı vericiydi ama inanılmaz derecede ödüllendiriciydi. Nesne yönelimli programlamayı kavramak, SOLID ilkelerini beyninize kazımak ve Redis, RabbitMQ veya SignalR gibi yardımcı teknolojileri neden ve nerede kullanacağınızı anlamak, geceler boyu deneme yanılmayla geçti. Bugün, IDE'nizin içinde bir bilgi istemi penceresi açıyorsunuz ve sihirli bir değnek gibi devasa bir modül saniyeler içinde açılıyor. Kıdemsiz meslektaşlarımız için bu inanılmaz bir hız artışı gibi geliyor. Hatta maaş notlarının çok üzerindeki görevlerle başa çıkmalarına bile olanak tanıyor. Ancak diğer tarafı oldukça karanlık. İş akışını gerçekten anlamadan veya belirli bir kod parçasının neden bulunduğu yerde bulunduğunu bilmeden, düşüncesiz bir kopyala-yapıştır döngüsüne düşerek işi bitirirler. Sonuçta kodun kalitesi tek bir soruya indirgenir: "Çalışıyor mu?" Eğer öyleyse, altındaki dijital spagetti kimsenin umurunda değil. Ancak yazılım mühendisliği yalnızca günü kurtarmakla ilgili değildir; sürdürülebilir bir gelecek inşa etmekle ilgilidir.
Temellerini oturtması gereken orta seviye geliştiricilere doğru merdivenden yukarı çıktığımızda, farklı türde bir kriz görüyoruz: ciddi bir odaklanma eksikliği. Birden fazla küçük projeyi yürüten veya eski koda özellikler ekleyen bir geliştirici, artık kendisini hiç bitmeyen bir "istem döngüsü" içinde sıkışıp kalmış halde buluyor. Yapay zekaya bir görev besliyorlar ve yapay zeka kodu oluştururken bir sonraki görev için komut istemi yazmak üzere sekmeleri değiştiriyorlar. Bu, sürekli bağlam değişimine, bölünmüş dikkate ve ironik bir şekilde teslimat sürelerinin gecikmesine neden olur. Geliştirici, koda hayat veren bir mühendis olmayı bırakır ve yalnızca sonuçları devreden ve kontrol eden bir "Test Uzmanı" veya "İstem Yöneticisi"ne dönüşür. Odak noktalarını sürekli bölerek bitkin düşenler, sinsi bir üretkenlik tuzağına düşerler.
Ancak asıl tehlike son sınıfların olduğu mutfakta gizleniyor. Üst düzey mühendislik, sözdizimi yazmaktan ziyade sürdürülebilir mimariler inşa etme sanatıyla ilgilidir. Ancak büyük, karmaşık projelerde tek bir dikkatsiz uyarı veya onay, yıllarca süren mimari kuralları bir anda ihlal edebilir. Bu riski hisseden birçok kıdemli geliştirici, sayfa sayfa, modül modül ilerlemeye başladı. İşte yapısal parçalanmanın derinleştiği yer burasıdır. Çünkü her modül, yapay zeka modelinin o günkü ruh haline göre şekilleniyor ve genel yapı tamamen kopuk kalıyor. Bağımsız, mikro hizmet tabanlı bir "Voltron" oluşturuyorsanız bu kopukluk bir dereceye kadar tolere edilebilir. Ancak monolitik, birleşik yapılarda bu tam bir felakettir. Yapay zekaya açıkça "Mevcut yapıyı bozmadan bu özelliği ekle" diyebilirsiniz, ancak yine de kod tabanının rastgele, öngörülemeyen bir bölümünü sessizce manipüle edecektir. Sonuç? En ufak bir değişiklikten sonra bile yorucu tam regresyon testleri yapmak zorunda kalırsınız çünkü neyin sessizce bozulduğunu artık tahmin edemezsiniz.
Daha da kötüsü, çoğu şirket hâlâ net bir yapay zeka politikasına sahip değil. Kurumsal, güvenli yapay zeka lisanslaması olmadığında iç kaos katlanarak büyür. John Claude'u kullanıyor, Sarah ChatGPT'ye danışmanlık yapıyor ve başka biri Gemini ile kod yazıyor. Aynı takımda bile aynı modelin farklı versiyonları birbiriyle yarışıyor. Bu, adlandırma kurallarını, kodlama standartlarını ve eşzamansız programlama alışkanlıklarını tamamen karmaşık bir karmaşaya dönüştürür. Geliştiriciler ayın ilk haftasında token limitlerini tüketir ve ikinci veya üçüncü kişisel hesap arayışına başlar. Bir araca bu kadar körü körüne bağımlı olmak bizi yavaş yavaş yaratıcılardan sadece tüketicilere dönüştürüyor.
Ve hikayenin en acı kısmı yönetim seviyesinde yaşanıyor. Bu gündelik, küçümseyici ifade "Sadece yapay zeka yapsın, neden zahmet edeyim ki?" endüstrinin en kötü yanılsamasını körüklüyor. Yönetim yalnızca çıktıya, vitrine ve işlerin ne kadar hızlı teslim edildiğine odaklanır. Ancak perdenin ardındaki yakıcı soruları kimse sormuyor: Bu veriler nereye gidiyor? Güvenli mi? Sistem düzgün bir şekilde günlüğe kaydediyor mu? Yedekleme stratejimiz nedir? Gizli güvenlik açıklarını mı ortaya çıkarıyoruz? Ve en kötüsü, bu sistem bundan iki yıl sonra gelecekteki .NET sürümlerine yükseltilebilecek mi, yoksa dijital bir mezarlık mı inşa ediyoruz? Vitrin parlak göründüğü sürece, artan teknik borç dağı görünmez kalacaktır.
Yazılım dünyasında, SOLID ilkelerinin ünlü son harfi Bağımlılığın Tersine çevrilmesi anlamına gelir ve bize modüllerin bağımlılıklarına sıkı bir şekilde bağlanmaması gerektiğini söyler. Belki de bu felsefi kuralı insani bir düzeye, kendi hayatlarımıza taşımanın zamanı gelmiştir. Geliştiricilerin yapay zekaya olan mutlak ve kör bağımlılıklarını kırmaları gerekiyor. Yapay zeka mükemmel bir yardımcı, harika bir yardımcı pilot ve inanılmaz bir sondaj tahtasıdır. Ama hiçbir zaman projenin mimarı, mühendisi ya da gerçek sahibi olamaz. Eğer bu "Hızlı çalışan ama içi boş kod" yanılsamasından uyanmazsak, çok geçmeden büyük sistem arızalarıyla ve giderek artan kartopu etkisinin yol açtığı yönetilemez teknik borçlarla karşı karşıya kalacağız. Kahvemizden bir yudum daha almanın, klavyelerimize bakmanın ve dürüstçe kendimize sormanın zamanı geldi: Biz mi yapay zekayı yönetiyoruz, yoksa yapay zeka mı bizi yönetiyor?