Artik kod yazmamiza gerek yok. Son 10 paylasimima bakarsaniz, yazdiklarimin ana temasi bu noktaya isaret etmektedir. Örnek olarak derleyicileri verdim. Bu konuyu biraz daha irdelemek istiyorum.
Bir derleyici ve bir LLM ayni seyler degiller, ama prensiplte cok benzer calisiyorlar. Ortak özellikleri ve farkliliklarina programci perspektifinden inceleyelim.
Programcinin yazilim konusundaki rolünün baska bir alana kaydigi konusunda hemfikir oldugumuzu düsünüyorum. Bu artik hic kod yazmamayi ya da cok az. kod yazmayi gerektiren bir degisim. Bana göre artik kod yazmaya gerek yok. Bazilarina göre var.
Derleyici-LLM analojisini yakindan inceleyim. LLM öncesi mekanizma su sekilde isliyordu: Programci -> Java kodu -> Derleyici -> Makina kodu. LLM’ler ile bu su sekilde degisti: Programci -> Prompt -> LLM -> Java Code -> Derleyici -> Makina kodu. Buna göre LLM artik yeni derleyici seviyesi.
Hem derleyici hem de LLM örneginde soyutluk seviyesi degisti. Derleyiciler ile makina kodu yazma zorunlulugu ortadan kalkti. Yani programcilar artik makina kodu yazmaz oldular. Bunun icin bir yüksek seviyeye gecerek, isteklerine Java ya da C gibi yüksek bir dilde ifade etmeye basladilar. Ayni sey yapay zeka kullaniminda da gerceklesti. Soyutluk seviyesi Java ya da C ile kod yazmaktan, ne yapilacagini LLM’lere söyleme seviyesine gecti.
Enformatik tarihi aslinda sürekli soyutluk seviyesinin yükselmesinin toplamidir.
Örnegin 1960 larin bir Assembler programcisi günümüz programcisina büyük bir ihtimalle sunu söylerdi: “siz modern programcilar artik programlama yapmiyorsunuz. Sadece mantigi tarif ediyorsunuz”.
1980 lerin bir C programcisi sunu söylerdi: “Java programcilari donanimdan bihaber.”
Günümüzde ise LLM’ler ile artik kod yazmiyoruz. Yapisal olarak bunlarin hepsi ayni kapiya cikiyor.
Tekrar derleyiciye dönelim. LLM ile derleyici arasindaki en önemli fark, derleyicilerin kod derlerken semantik bir garanti vermeleridir. Bu yüzden ciktilari deterministiktir ve hep ayni sonuclari verirler. Ama bir LLM icin bunu söylemek mümkün degildir. LLM bir sonraki token’in ne oldugunu hesaplar ve bu istatistiksel hesaplama her defasinda baska bir sonuc verebilir. Bu yüzden LLM bünyesinde formal bir dogrulama mantigi yoktur. Sonuc deterministik degildir. Ayni prompt degisik kod üretebilir. Ama cikan iki degisik sonuc yine de dogru olabilir. bu kismi biraz acalim.
Bir Java programcisi hayal edelim. Bu programcidan bir Spring boot uygulamasi gelistirmesini isteyelim. Bu programci 3 ay arayla ayni uygulamayi iki sefer sifirdan programlasin. Sizce bir derleyici gibi ayni kodu yazabilir mi? Ama emin olabileceginiz sey ne olacaktir? Uygulama cok degisik yapilandirilmis olsa bile, istedigimiz sekilde calisiyor olacaktir. LLM de zaten ayni seyi yapmaktadir. Her seferinde ayni prompt ile baska bir kodun ortaya cikmasi sorun teskil etmemektedir. Önemli olan semantik transformasyondur. Semantik anlamda kod benzer yapida oldugu sürecek, sonuc istedigimiz sekilde olacaktir.
Günümüzde LLM’lere karsi kullanilan deterministik olmadiklari argümani gecerli bir argüman degildir. Calisan bir kod icin LLM’in deterministik olmayisi önem arz etmemektedir. Ona kalirsa bir programci da deterministik degildir, ama her deneyisinde calisan bir kod üretebilmektedir.
Yine de derleyici ve LLM arasinda mutlak bir farklilik vardir. Derleyici kendi isini yapabilmesi icin kodun sekillendirilmis olmasi gerekmektedir. Yani derleyici cözüm üretemez. Ama LLM ona verilen bir prompt ile bir cözüm üretebilmektedir. Bu yüzden LLM sadece bir derleyici degildir, bir programci gibi cözüm gelistiren birseydir.