AI çağının modern dili
Modern Diller
Modern dil, geçmişteki dillere kıyasla daha yüksek üretkenlik, kararlılık, güvenlik ve sürdürülebilirlik sağlayan dili ifade eder. Bu diller, en son teknikleri ve kavramları aktif olarak benimsemekte ve geliştiricilere daha verimli ve güvenli geliştirme araçları sunmaktadır. Önde gelen modern diller arasında Java, Rust, Python, TypeScript gibi diller yer almakta olup, bunlar aşağıdaki özelliklere sahiptir.
1. Nesne Yönelimli Tasarım ( OOP )
Modern dillerin çoğu nesne yönelimli kavramlara dayanarak tasarlanmıştır. Nesne yönelimi, kapsülleme, kalıtım ve polimorfizm gibi prensipleri destekler ve karmaşık sistemleri küçük birimlere ayırarak yönetmek suretiyle programın yapısını net ve esnek hale getirir. Bu durum, özellikle büyük ölçekli yazılım geliştirme sırasında geliştirme maliyetlerini ve iş gücünü kontrol etmede ve bakım sırasında ortaya çıkabilecek sorunları azaltmada etkilidir.
2. Sentaktik Şeker ve İfadeler
Modern diller, kodun okunabilirliğini ve geliştirme üretkenliğini artırmak amacıyla çeşitli sentaktik şekerler ve ifade tabanlı sözdizimi sunar. Ternary operatörü, lambda ifadeleri, desen eşleştirme gibi özellikler, boilerplate kodu azaltır, kodu öngörülebilir kılar ve geliştiricinin üretkenliğini artırır.
3. Modül Sistemi
Modern diller, modül sistemi aracılığıyla programları farklı birimlere ayırarak yönetmeyi mümkün kılar. Bu durum, kodun yeniden kullanılabilirliğini ve bağımlılık yönetimini kolaylaştırır ve proje boyutu büyüdüğünde dahi bakımı sorunsuz hale getirir. Önde gelen örnekler arasında Java'nın Maven/Gradle'ı, Rust'ın Cargo'su, TypeScript'in npm/yarn'ı gibi araçlar bulunmaktadır.
4. Ara Dil ve Sanal Makine
Modern diller, platform bağımsızlığı, performans optimizasyonu ve güvenlik amacıyla ara dil ve sanal makineyi benimser. Önde gelen örnekler arasında JVM, LLVM, WASM, GraalVM gibi teknolojiler yer almaktadır.
Yapay Zeka Çağında Geliştirme ve Modern Dillerin Sınırlılıkları
Modern diller, çoğu kodun insanlar tarafından yazıldığı varsayımı altında ortaya çıkmıştır. Doğal olarak, modern dillerin amacı tekrarlayan işleri azaltmak, üretkenliği artırmak ve geliştiricilerin işbirliği yapabileceği bir yapı aracılığıyla büyük yazılımları etkili bir şekilde gerçekleştirmektir. Ancak, yapay zeka çağında bu varsayım giderek ortadan kalkmaktadır. Copilot, Cody gibi yapay zeka tabanlı araçlar, kod yazımının büyük bir kısmını otomatikleştirmekte ve tek bir geliştiricinin üretebileceği kod miktarında sıçramalı bir artış yaşanmaktadır. Bu durum, geçmişte avantaj olarak görülen modern dil özelliklerinin giderek eski moda dezavantajlara dönüşmesine neden olmaktadır.
Nesne Yönelimli Tasarım
Yapay zeka, bir fonksiyon veya modül içinde tüm bilgilerin açıkça belirtildiği yapıları hızlı ve doğru bir şekilde analiz edebilir. Öte yandan, bağlam arttıkça çıkarım yapılacak alanlar artar, bu nedenle yapay zekanın üretkenliği ve doğruluğu azalır. OOP ile yazılmış kod, mantığı tek bir yerde yönetmek yerine birçok nesneye dağıtır ve bu durum sonuç olarak yapay zekadan daha fazla bağlam talep edilmesine yol açar. Aşağıdaki koda bakalım.
1public class AnimalHandler {
2 public void handle(Animal animal) {
3 animal.speak();
4 }
5}
6
7public class Main {
8 public static void main(String[] args) {
9 AnimalHandler handler = new AnimalHandler();
10
11 Animal a1 = new Dog();
12 Animal a2 = new Cat();
13 Animal a3 = new Horse();
14
15 handler.handle(a1);
16 handler.handle(a2);
17 handler.handle(a3);
18 }
19}
Yukarıdaki kodda, yapay zeka speak() metodunun gerçekte ne gibi bir işlem yapacağını anlamak için aşağıdaki gibi çıkarımları tekrarlamak zorundadır:
- animal'ın hangi somut sınıfın bir örneği olduğu?
- O sınıfta override edilen speak() metodunun nerede tanımlandığı?
- Dog ve Cat sınıflarının tanımının nerede olduğu ve içsel işleyişlerinin ne olduğu?
- Dog ve Cat sınıflarının başka sınıflar tarafından override edilme olasılığının olup olmadığı?
Bu bilgiler tek bir dosya veya tek bir fonksiyonda toplanmış değildir; sınıf dosyaları arasındaki ilişkiler ve kalıtım yapısı takip edilerek ancak anlaşılabilir. Üstelik, reflection veya dinamik yükleme gibi runtime'da karar verilen unsurlar, yapay zeka açısından bir kara kutu gibidir ve fiilen analiz edilmesi imkansızdır.
Sentaktik Şeker ve İfadeler
Yapay zeka, örtük işlemler yerine açıkça belirtilmiş işlemleri tercih eder ve karmaşık yapıları alıp kullanmaktansa, basit yapıları birleştirerek tek bir doğru cevap üretmeyi yeğler. Buna karşılık, sentaktik şekerler çeşitli ifadelere izin verirken, içsel işleyişleri genellikle aynı veya benzerdir. Yapay zeka, bu çeşitli ifadelerin anlamını tek tek öğrenmek zorunda kalır ve belirli bir durumda hangi sözdizimini önermesi gerektiği konusunda öncelik belirlemekte zorlanabilir.
Ara Dil ve Sanal Makine
Yapay zeka çoğunlukla kaynak kodu temel alarak öğrenir. Diğer yandan, ara dil (bytecode), derleme sürecinde değişken adları gibi anlamlardan arındırılır ve yürütme anında sanal makine tarafından yeniden yorumlanması gerekir. Bu durum, yapay zekanın anlaması veya dönüştürmesi için oldukça zor bir iştir. Örneğin, yapay zeka için TypeScript'ten Go'ya dönüşüm mümkün iken, V8 engine'in bytecode'unu JVM'in bytecode'una veya makine diline dönüştürmek fiilen imkansıza yakındır.
Yapay Zeka Çağının Gerçek Modern Dili
Yukarıdaki içerik aracılığıyla, modern dil özelliklerinin aslında yapay zeka dönemine uygun olmayan eski moda unsurlar olduğunu anlayabiliriz. Öyleyse, hangi dil yapay zeka çağının en uygun modern dili olabilir? Bu durum, geçmişteki modern dillerin dışladığı unsurlardan ipuçları elde edilebileceğini göstermektedir. Yapay zeka çağının modern dili,
- Açıkça belirtilmiş bir sözdizimine ve doğal bir akışa sahip olmalıdır.
- Aşırı OOP yapılarından uzaklaşarak düz ve basit bir yapıya sahip olmalıdır.
- Gereksiz sentaktik şekerler veya örtük desenler yerine, sınırlı temel anahtar kelimelerle çeşitli fonksiyonellikler oluşturmalıdır.
- Karmaşık bir build sistemi yerine basit ve öngörülebilir bir build sistemine sahip olmalıdır.
Bu kriterlere en çok uyan dil Golang'dır. Go dili, minimum düzeyde temel anahtar kelime ve basit sözdizimi kombinasyonuyla dahi pratik fonksiyonelliklerin çoğunu gerçekleştirebilecek şekilde tasarlanmış olup, gereksiz soyutlama ve örtük işlemleri kesinlikle dışlar. Bu durum, yalnızca geliştiriciler için değil, yapay zekanın da kodu yorumlaması ve üretmesi açısından avantajlı bir yapıdır.
Bu şekilde öngörülebilir ve düz yapı, açıkça belirtilmiş akış, tutarlı sözdizimi gibi Go'nun özellikleri, insan geliştiriciler temel alınarak tasarlanmış mevcut modern dillerin aksine, yapay zekanın aktif olarak katıldığı geliştirme ortamına daha iyi uyum sağlar. Bir zamanlar eski moda olarak görülen Go'nun muhafazakar tasarım felsefesi, tam tersine yapay zeka çağında en ileri seçenek haline gelmektedir.