Manşetler sürekli yapay zekanın yazılım geliştiricileri gereksiz kılacağını söylüyor. Ben buna inanmıyorum. Asıl risk makinelerin mühendisliğin üstüne geçmesi değil. Asıl risk, mühendislerin düşünmenin o zorlu kısmını yapmayı bırakmasıdır.
Yazılım hiçbir zaman sadece sözdizimi yazmaktan ibaret olmadı. Yazılım her zaman karmaşıklığı zihninde tutmak, hata modlarını anlamak ve hiçbir seçeneğin mükemmel olmadığı durumlarda ödünleşimler (trade-offs) yapmakla ilgiliydi. Yapay zeka kod üretme hızımızı değiştirdi ancak neden süreçte bir insan faktörüne ihtiyaç duyduğumuzu değiştirmedi. Aksine, net düşünmeyi daha değerli ve daha nadir hale getirdi.
İlk Taslak Mühendislik Değildir
Giderek artan sayıda junior geliştiricinin ChatGPT veya Claude'u yanındaki koltukta oturan kıdemli mühendis gibi gördüğüne şahit oluyorum. Bir iş (ticket) açıklamasını yapıştırıyorlar, yanıtı kopyalıyorlar, testleri çalıştırıyorlar ve commit ediyorlar. Eğer derleniyorsa, görev tamamlanmış sayılıyor. Bu döngü hızlı, zahmetsiz ve tehlikeli.
Yapay zeka kullanmak sorun değil. Ben de kullanıyorum. Tanıdığım en üretken mühendislerin çoğu da kullanıyor. Sorun, yapay zekanın odadaki tek mühendis haline gelmesiyle başlıyor. Bir çözüm işe yaradığı için onu hemen kabul etmek mühendislik değildir. Bu, yargı yeteneğini; kullanıcılarınızı, iş kısıtlamalarınızı veya sisteminizin en son ne zaman gece saat 2'de çöktüğünü bilmeyen bir modele devretmektir.
Büyük dil modelleri, tamamen yanlış olduklarında bile ürkütücü bir özgüvenle cevaplar veriyorlar. Bir mühendis, yapay zekadan ölçeklenebilir bir mimari tasarlamasını istedi. Model, aslında üründe var olmayan bir özellik etrafında tamamen inşa edilmiş, ayrıntılı ve otoriter bir öneri sundu. Doğru görünüyordu. Kendi içinde tutarlıydı. Ama aynı zamanda tamamen işe yaramazdı. Tehlike sadece yapay zekanın halüsinasyon görmesi değil. Tehlike, çok fazla insanın artık bu halüsinasyonlara güvenmesi; çünkü artık yalanı fark edecek bağlama (context) sahip değiller.
Zorluklardan Öğrenirsiniz
Beni bir junior geliştiriciden bir sistemi sahiplenebilecek birine dönüştüren şeyleri düşündüğümde, ezberlediğim sözdizimlerini hatırlamıyorum. Kesintileri hatırlıyorum. Elle izlemek zorunda kaldığım yavaş sorguları, sadece üretim yükü altında ortaya çıkan yarış durumlarını (race conditions) ve yerel ortamım gerçek dünyadan çok farklı olduğu için bozulan dağıtımları (deployments) hatırlıyorum.
Hata ayıklama (debugging) öğrenmenin gerçekleştiği yerdir. Kodun üzerinden manuel olarak geçtiğinizde, sistemlerin gerçekte neden başarısız olduğunu görürsünüz. Darboğazların nerede oluştuğunu keşfedersiniz. On kullanıcılı bir demodan, on bin eşzamanlı isteği yöneten bir üretim sistemine geçtiğinizde mimarinin nasıl davrandığını öğrenirsiniz. Üretim ortamının, güzelce kurgulanmış bir demodan ne kadar farklı olduğunu iliklerinize kadar hissedersiniz.
Bu bilgilerin hiçbiri üretilmiş bir cevabı kabul etmekten gelmez. Sorunla boğuşmaktan gelir. Eğer yapay zeka her türlü zorluğu ortadan kaldırırsa, kodu yazıp hataları düzeltip başarısızlıkları açıklamaya getirirse, yeni nesil geliştiriciler kıdemlerini tam olarak nasıl kazanacaklar? Deneyim, indirilebilir bir sertifika değildir. Üretim olaylarından ve bozulan dağıtımlardan kazandığınız yara dokusudur. Zorluğu ortadan kaldırırsanız, gelişimi de ortadan kaldırırsınız.
Muhakeme, Üretimden Daha Değerlidir
Bir süre sektör, prompt engineering'i özgeçmişe eklenecek yeni ve popüler bir beceri olarak gördü. Bu, meselenin özünü tamamen kaçırdı. Yapay zeka ile doygunluğa ulaşmış bir ortamda en değerli yetenek seçenekler üretmek değil, hangi önerilerin reddedilmesi gerektiğini bilmektir.
Birlikte çalıştığım en iyi mühendisler en çok prompt yazanlar değil; en zor soruları soranlardır. Bir refactoring işleminin gizli bir bağımlılık (dependency) yaratıp yaratmayacağını bilirler. Üretilen bir testin ideal senaryoyu (happy path) kapsadığını ancak müşteri verilerini bozabilecek uç durumları (edge case) göz ardı ettiğini fark ederler. Kusursuz görünen bir koda bakıp, "Bu kod doğru, ancak mimari yanlış" diyebilirler.
Bu son cümle, birbirinden çok farklı iki kültür arasındaki ayrım çizgisidir. Yapay zeka destekli (AI-assisted) mühendislik, beyniniz kararları verirken makineyi iskelet oluşturmak, kalıpları keşfetmek veya boilerplate kodları otomatikleştirmek için kullanmanız demektir. Yapay zekaya bağımlı (AI-dependent) mühendislik ise makinenin sürmesine güvenmeniz demektir. Birçok kuruluş, kısa vadede daha hızlı hissettirdiği için sessizce bağımlılığa doğru sürükleniyor. Hızlı olmak, doğru olmakla aynı şey değildir.
Hâlâ İnsanlara Ait Olan İşler
AI, geliştirme yaşam döngüsünün hemen hemen her aşamasını hızlandırabilir; ancak kesinlikle insan kontrolünde kalması gereken temel uygulamalar vardır. Sistem tasarımı; maliyet, gecikme süresi, güvenilirlik ve gelecekteki sürdürülebilirlik gibi birbiriyle çelişen kısıtları dengede tutmayı gerektirir. Mimari incelemeler, kurumsal hafızaya ve ikinci dereceden etkileri öngörme yeteneğine dayanır. Mentorluk, sizi uyardığı hata modlarını bizzat tecrübe etmiş birini gerektirir. Derin ürün anlayışı, eğitim verilerini okumaktan değil, kullanıcılarla konuşmaktan ve gerçek dünyadaki davranışlarını gözlemlemekten gelir.
Mühendislik muhakemesi, bu deneyimlerin toplamıdır. Kod incelemesi geçmiş olsa bile, bir migrasyon işleminin cuma öğleden sonra yayına almak için çok riskli olduğunu söyleyen o sessiz sestir. Şu an yapılan bir performans optimizasyonunun daha sonra bir güvenlik açığı yaratabileceğine dair sezgidir. Bir LLM'in sezgisi yoktur. Sadece örüntüleri vardır. Örüntüler yararlıdır ancak muhakeme değildir.
Şu an işe alım yapan şirketler, yalnızca yapay zeka araçlarını kullanmakta iyi olan kişilere odaklanmayı bırakmalıdır. Yapay zekaya meydan okuyabilen kişileri işe alın. Durup üretilen çıktıyı dikkatlice okuyan ve neden katılmadığını açıklayabilen adayları arayın. Üretilen kod, üretimin karmaşık gerçekliğiyle karşılaştığında sistemlerinizi sağlıklı tutacak olan mühendisler bunlardır.
Pusulasız Hızlanma
Yapay zekayı bir gaz pedalı olarak düşünün. ... olan bir arabada
