7 puan yazan chebread 2026-01-29 | 12 yorum | WhatsApp'ta paylaş

Giriş

Merhaba. Bilgisayar mühendisliğine ilgi duyan bir öğrenciyim. Bu kez lx adlı bir program geliştirdiğim için, şimdiye kadar sadece yazılarını okuduğum GeekNews'e ilk kez gönderi paylaşmak istedim.

Son dönemde, yapay zekaya doğal dille komut verince kodu kendi başına yazan vibe coding akımı revaçta.
Ben bu tür vibe coding'den korkuyorum.
Bu korku basitçe işsiz kalma endişesi değil; daha çok "kod yazmanın keyfinin (Wrangling code) (kaynak: Kent Beck - Augmented Coding: Beyond the Vibes)" ve "geliştiricinin kontrol hakkının" elimizden alınmasının yarattığı programlama kaybı hissi.

Bazıları bu değişimi, delikli kartlardan makine diline, assembly'e ve C diline uzanan programlamanın doğal evrimi olarak görüyor. Ama bence bu benzetme yanlış.
Geçmişteki soyutlamalar, geliştiricinin eline 'daha iyi bir çekiç' vermek anlamına geliyordu.
Araçlar sürekli gelişti ama o çekici sallayan özne hâlâ insandı ve sonuç tamamen geliştiricinin kontrolü altındaydı.
Ama bugünün AI coding yaklaşımı farklı.
Artık çekici robot sallıyor; geliştirici ise sadece izleyen ya da en fazla robotu biraz ikna etmeye çalışan biri hâline geldi.
Eğer çekici biz sallayamıyorsak, bunun artık programlama olarak adlandırılamayacağını düşünüyorum.
Çünkü o zaman her şey tamamen bizim kontrolümüz altında olmuyor.

Bu yüzden lx'i yaptım.
lx, çekici robottan alıp yeniden geliştiricinin eline veren bir araç.
lx, yapay zekayı baştan sona sıkı biçimde kontrol edilebilen bir araç olarak kullanmanızı sağlar.

Ana bölüm

lx, "arayüz insana, mantık AI'a" felsefesine sahiptir.
Geliştirici, fonksiyonun giriş-çıkışlarını ve ne yaptığını tanımlayarak bir 'sözleşme' kurar; AI ise yalnızca o fonksiyonun iç implementasyonundan sorumludur.

Bu yaklaşım, geliştirme sürekliliğini garanti eder.
Fonksiyonun giriş-çıkışını yazdığınız anda ilgili mantık zaten tamamlanmış kabul edilir.
Programcı, ayrıntılı implementasyona saplanmadan hemen üst seviye mantığı yazabilir ve geliştirme akışını kesintisiz sürdürebilir.

Ayrıca lx basit bir metin değiştirme aracı değildir. github.com/tree-sitter/go-tree-sitter paketini kullanarak kaynak kodu AST (soyut sözdizimi ağacı) tabanlı olarak parse eder. Bu sayede dosya içindeki diğer kodları, yorumları ve girintileri kirletmez; yalnızca belirtilen scope içindeki mantığı güvenli şekilde değiştirir.

Temel kullanım

lx kullanmanın temel biçimi şöyledir.

package main  
  
import (  
	"fmt"  
  
	lx "github.com/chebread/lxgo"  
)  
  
func main() {  
	var year string = "2025-01-02"  
    // Geliştirici, fonksiyon çağrı noktasını ve akışı kontrol eder.  
	result1 := LX_GetYear(year)  
  
	var age = 30  
	result2 := LX_GetAge(age)  
  
	fmt.Println(result1, result2)  
}  
  
func LX_GetYear(year string) (result string) {  
	// AI'ya iletilecek prompt  
	lx.Generate("yyyy-dd-mm biçimini Kore tarzı tarihe dönüştür")  
	return  
}  
  
func LX_GetAge(year int) (result string) {  
	// Programlama diline göre lx kütüphanesini ayrıca kurmakla uğraşmak istemeyenler için aşağıdaki gibi lx() yorum işaretçisi biçimi de desteklenir.  
    // lx("Kore yaşını uluslararası yaşa dönüştür")  
	return  
}  

Yukarıdaki kodda LX_GetYear fonksiyonu, geliştiricinin tanımladığı sözleşmedir.
lx aracı çalıştırıldığında lx.Generate(...) veya // lx(...) işaretçisini algılar, prompt'u LLM'e gönderir ve ilgili fonksiyonun gövdesini gerçekten çalışan kodla üzerine yazar.

Bu sırada token optimizasyonu uygulanır. Tüm dosya gönderilmez; yalnızca ilgili fonksiyonun signature'ı ve prompt LLM'e gönderilir. Böylece maliyet düşer ve güvenlik artar.

2. Geliştiricinin kontrolü

lx fonksiyonunun içindeki mantığı AI yazsa da, o fonksiyonu kullanan taraf geliştirici olmalıdır.
Ancak lx fonksiyonunun içine kullanıcı tanımlı mantık karıştırılırsa bu yok sayılır; bu yüzden aşağıdaki gibi bir wrapper fonksiyon aracılığıyla kontrol sağlanabilir.

package test  
  
import (  
	"fmt"  
	lx "github.com/chebread/lxgo"  
)  
  
func main() {  
	var year string = "2025-01-02"  
	result1 := ParseYear(year) // wrapper fonksiyon çağrısı  
  
	fmt.Println(result1)  
}  
  
// Geliştiricinin kontrol ettiği iş mantığı  
func ParseYear(year string) string {  
    // AI tarafından üretilen mantığı bir bileşen gibi kullan  
	res := LX_GetYear(year)  
    
    // Sonuç üzerinde ek işlem yapmak geliştiricinin işidir  
	foo := fmt.Sprintf("Bugün %v!", res)  
	return foo  
}  
  
func LX_GetYear(year string) (result string) {  
	lx.Generate("yyyy-dd-mm biçimini Kore tarzı tarihe dönüştür")  
	return  
}  

3. Güvenli bağımlılık yönetimi ve şeffaflık

lx, tek sorumluluk ilkesini (SRP) hedefler.
Yalnızca kod üretir; programı derlemez veya çalıştırmaz.
Ayrıca AI tarafından üretilen kod dış kütüphaneler gerektiriyorsa lx rastgele paket kurmaz.

  1. Code: Üretilen kodun üst kısmında // lx-dep: ... yorumunu belirtir

  2. Output: Kurulması gerekenlerin listesini CLI standart çıktısında raporlar

Bunun yerine geliştiriciye bu iki yöntemle bilgi verir.
Geliştirici bunu kontrol edip bağımlılıkları doğrudan kurup kurmamaya kendisi karar verir.

4. Yapılandırma

lx kullanmak için LLM yapılandırması gerekir. Ana dizinde (~/) veya proje kökünde (./) lx-config.yaml oluşturmanız yeterlidir. Eğer iki konumda da dosya varsa, yerel yapılandırma dosyası öncelikli uygulanır; böylece her proje için farklı lx ayarları yönetilebilir.

# lx-config.yaml  
provider: "gemini"  
api_key: "foo"  
model: "bar"  

5. Kurulum ve çalıştırma

Mac kullanıcıları Homebrew üzerinden kurulum yapabilir; diğer işletim sistemlerinde ise lx'in GitHub Releases sayfasından binary indirerek kurabilirsiniz.

brew tap chebread/lx  
brew install lx  

Kurulumdan sonra proje yolunda lx komutunu çalıştırırsanız gerçek kod üretilir.
lx'te akıllı üretim özelliği bulunduğundan, kodu daha önce üretilmiş fonksiyonlar için LLM yeniden çağrılmaz; bu yüzden lx komutunu gönül rahatlığıyla tekrar tekrar çalıştırabilirsiniz.

Not: lx, üretilen kodun biçimlendirilmesi için her dilin kendi aracını kullanır (Go: goimports, Python: ruff, JS: prettier). Bu araçların önceden kurulmuş olması gerekir.

6. Lisans

lx, AGPL-3.0 License altında dağıtılır.
Amaç, lx'in açık kaynak ekosistemine katkı sunarken bu aracın kapalı biçimde özelleştirilmesini engellemektir.

Sonuç

Yazılım, insanın durmaksızın verdiği emeğin dokunmuş bir kristalidir. Yapay zeka çağında da programcı kodun sahibi olmaya devam etmelidir.
lx, uğraştırıcı regex veya veri parse etme gibi "sıkıcı implementasyonları" AI'ya bırakırken, programın yapısı ve akışının tamamen insanın elinde kalmasını sağlar.
Kod yazmanın keyfini (Wrangling code) ve kontrolünü kaybetmek istemeyen geliştiricilere bu aracı tavsiye ederim!

12 yorum

 
moderator 2026-01-31

İşletme politikasına göre uygunsuz yorum silindi ve ilgili hesabın kullanımı kısıtlandı.

 
callakrsos 2026-01-30

Artık kodlama da aslında insan merkezli bir ölçüte göre yapılıyor.
Gelecekte bunun verimsiz, insan merkezli diller yerine başka biçimlerde geliştirileceğini düşünüyorum.
Şimdilik insan merkezli framework'lerin tadını bol bol çıkaralım.

 
galadbran 2026-01-31

Bugünlerde işi düzgün yapmak için koda hiç bakmamak gerekiyormuş gibi bir hava varken, buna tamamen ters bir yerden yaklaşması çok ilginç.
Tercihe göre, bunu AI'ın dokunduğu alanı net biçimde belirleyen bir araç gibi kullanmak da mümkün olabilir.
Bunu kodlama ajanlarının yetenekleriyle denemek de fena olmayabilir, değil mi?

 
chebread 2026-01-31

Bunu aktif olarak değerlendireceğim. İlgileniyorsanız, lütfen bol bol PR gönderin!

 
narubrown 2026-01-30

Eğlenceli bir proje gibi görünüyor!

Görünüşe göre Ix spesifikasyonu yazılıyor -> Ix Tool ile lx fonksiyonları gerçek fonksiyonlarla değiştiriliyor -> sonra Go derleniyor.
Projede lx kullanan bir katman oluştuğu için
LLM ile yazılmış katmanı ayırmak mümkün olabilir; böylece ileride bakım yaparken de daha rahat olunabilir gibi görünüyor.

LLM kullanan ilginç bir deneme gibi duruyor!

 
chebread 2026-01-30

Teşekkürler. lx, Go dili dışındaki dilleri de destekliyor; bu yüzden bol bol kullanmanızı ve geri bildirimlerinizi rica ediyoruz!

 
iknowca 2026-01-30

Hedef ilginç ama metnin genelinde yapay zekaya özgü üslup çok güçlü hissedildiği için
güvenmek zor geliyor.

 
chebread 2026-01-30

Haklı bir noktaya değinmişsiniz. Ben lise öğrencisi olduğum için pek fazla zamanım yok; bu yüzden yazı yazarken yapay zekadan yararlanırken metinlerin güvenilirliği oldukça düşen yazılara dönüşmüş. Biraz rahatsız edici olsa da anlayış göstermenizi rica ederim.

 
wegaia 2026-01-31

Vay canına, bir lise öğrencisinin böyle bir şeyi tasarlamış olması gerçekten çok etkileyici.
Deneyimi arttıkça daha da etkileyici şeyler yapacak gibi görünüyor.

 
siabard 2026-01-30

lx.Generate çağıran kodun, komut satırından komut verildiğinde LLM’in yazdığı kodla değişmesi şeklinde çalıştığını varsayıyorum, değil mi?
Çağıran kısmın bir tür tip kısıtı görevi görebilmesi bence iyi bir fikir gibi görünüyor. Editör vb. ortamlarda lx komutunun otomatik çalıştırılıp implementasyon kodunu bununla değiştirmesi gibi bir yaklaşımı da düşünüp düşünmediğinizi merak ediyorum. (Ayrıca üretilen kod beğenilmediğinde yeniden üretmenin bir yolu olması da güzel olabilir.)
Projeye keyifle baktım.

 
chebread 2026-01-30

Komut satırından komut verildiğinde lx.Generate çağıran kodun, LLM’in yazdığı kodla değişmesi şeklinde çalışıyor, doğru mu? -> Evet, doğru!

Çağıran kısmın bir tür tip kısıtı işlevi görebilmesi güzel bir fikir gibi görünüyor. Editör vb. ortamlarda lx komutunun otomatik olarak çalışıp uygulama kodunu onunla değiştirmesi gibi bir yöntemi de düşünüp düşünmediğinizi merak ediyorum. -> Gerçekten çok iyi bir fikir gibi görünüyor. Bunu ciddi şekilde değerlendireceğiz.

Ayrıca, üretilen kod beğenilmediğinde yeniden üretmenin bir yolu olması da iyi olabilir. -> Projenin felsefesi geliştiricinin kontrolü altındaki yapay zeka olduğundan, yeniden üretim gerekirse tekrar lx işaretleyicisi oluşturulacak şekilde tasarladık.

 
maneuling 2026-01-30

Bunu liseli küçük birinin yaptığını görüp de hırsla buraya sürünerek gelip bıraktığınız yorumun seviyesi, zeka seviyenizi ele veriyor.

Aynaya bakıp biraz tedavi olun.

killdong | 9 ay önce | parent | on: Sunucumu korumak için ZIP bombası kullanıyorum (idiallo.com)
İnternette de dışkısını bırakan bunun sorumluluğunu taşımıyorsa internet kullanması yasaklanmalı diye düşünüyorum. Etrafa saçtığınızı biraz toparlayın.