Tembelliğin Erdemini Kaybetmenin Tehlikesi
(bcantrill.dtrace.org)- Programlamadaki tembellik, basit bir ihmal değil, soyutlama ve sadeliği arayan entelektüel bir erdem olarak tanımlanır
- Gerçek tembellik, sorunu derinlemesine düşünüp gelecekte zamandan tasarruf etme sürecidir ve bu, sonraki kuşak geliştiricilere de fayda sağlar
- Modern yüksek seviyeli soyutlamalar ve 'brogrammer' kültürü, bu erdemin kaybolmasına ve onun yerini sahte çalışkanlığın almasına yol açar
- LLM'ler bu eğilimi uç noktaya taşır ve kod miktarını değerle karıştıran aşırı üretim araçları olarak işlev görür
- İnsanın sınırlı zamanından doğan erdemli tembelliği koruyup, LLM'leri basit ve sürdürülebilir sistem tasarımı için kullanmak gerekir
Programcının Erdemi Olarak Tembellik ve Onu Kaybetmenin Tehlikesi
- Larry Wall'un 『Programming Perl』 kitabında ortaya koyduğu programcının üç erdemi olan tembellik (laziness), sabırsızlık (impatience) ve kibir (hubris) arasında, tembelliğin en derin anlama sahip olduğu vurgulanır
- Tembellik, basit bir öz eleştiri değil, soyutlama ihtiyacı ve estetiğini içinde barındıran bir kavramdır
- Sistemi mümkün olduğunca basit kılmanın ve güçlü soyutlamalarla daha fazla işi daha kolay yapabilmenin itici gücüdür
- Gerçek tembellik, 'hammock-driven development' örneğinde olduğu gibi dışarıdan dinleniyormuş gibi görünse de, gerçekte sorunu derinlemesine düşünüp gelecekte zamandan tasarruf etmek için entelektüel emek yürütme sürecidir
- Doğru soyutlama bir kez kurulduğunda, yalnızca geliştiricinin kendisine değil gelecek kuşak geliştiricilere de fayda sağlar
- Bu tür tembellik, yazılımın daha kolay yazılmasını ve sistemlerin daha kolay kurulmasını sağlar
-
Tembellik erdeminin kaybolduğu çağ
- Son 20 yılda yazılım üretiminin kapsamı genişledikçe, kendini programcı olarak görmeyen insanların sayısı arttı
- Bu kişiler için tembellik erdemi asıl anlamını yitirdi
- Modern yüksek seviyeli soyutlamaların getirdiği üretkenlik patlaması, tersine sahte çalışkanlığı (false industriousness) teşvik etti
- Bu durum 'brogrammer' kültürü ve 'hustle porn' şeklinde ortaya çıktı; ironik tembelliğin yerini sonsuz kod dökme davranışı aldı
- Son 20 yılda yazılım üretiminin kapsamı genişledikçe, kendini programcı olarak görmeyen insanların sayısı arttı
-
LLM'lerin getirdiği yeni aşırılık
- LLM'lerin (büyük dil modelleri) ortaya çıkışı bu eğilimi en uç noktaya taşıdı
- LLM'ler, insanın üretim tarzını büyüten araçlar olarak 'brogrammer' kültürünün steroidli hali gibi işliyor
- Örnek olarak Garry Tan, LLM kullanarak bir günde 37.000 satır kod yazdığını söylemiştir
- Karşılaştırma için DTrace'in tüm kod tabanı yaklaşık 60.000 satırdır
- Ancak bu yaklaşım, tembellik erdeminden yoksun bir kusur olarak, yazılımın değerini kod miktarıyla ölçme hatasını ortaya koyar
- LLM'lerin (büyük dil modelleri) ortaya çıkışı bu eğilimi en uç noktaya taşıdı
-
LLM'lerin sınırları ve insan tembelliğinin değeri
- LLM'lerin emek maliyeti 0 olduğu için, gelecekte zamandan tasarrufu hesaba katmadan sonsuz derecede karmaşık sistemler üretebildiği belirtilir
- Sonuç olarak sistemleri daha büyük ve daha karmaşık hale getirir; gösterişe dayalı metrikleri tatmin ederken özsel kaliteye zarar verir
- İnsani tembellik, zamanın sınırlı olması kısıtından doğar ve bu da net soyutlamaları ve sadeleştirilmiş sistem tasarımını zorunlu kılar
- En iyi mühendislik her zaman kısıtlardan doğar; insanın zaman kısıtı bilişsel yükü sınırlar ve sadeliği aramaya iter
- LLM'lerde bu tür bir kısıt bulunmadığından, kendi başlarına sadeliği aramak için bir motivasyonları yoktur
- LLM'lerin emek maliyeti 0 olduğu için, gelecekte zamandan tasarrufu hesaba katmadan sonsuz derecede karmaşık sistemler üretebildiği belirtilir
-
LLM'leri araç olarak kullanmanın yönü
- LLM'ler hâlâ yazılım mühendisliği için güçlü araçlar olarak önemli bir rol oynayabilir
- Oxide'ın LLM kullanım rehberine göre, LLM yalnızca bir araçtır ve insan erdemlerinin yerini alamaz
- LLM'ler, teknik borç (technical debt) gibi üretken olmayan tembellik sorunlarını çözmekte ya da mühendislik disiplinini güçlendirmekte kullanılabilir
- Ancak kullanım amacı mutlaka 'erdemli tembelliği' gerçekleştirme yönünde olmalıdır
- Yani daha basit ve daha güçlü sistemler kurarak, gelecek kuşak geliştiricilere fayda sağlayan sonuçlar bırakmalıdır
- LLM'ler hâlâ yazılım mühendisliği için güçlü araçlar olarak önemli bir rol oynayabilir
1 yorum
Hacker News yorumları
Benim alanım olan Computational Fluid Dynamics tarafında da, LOC ile övünür gibi test sayısıyla övünen insanlar var
Ama yakından bakınca bu testler pek de sıkı değil ve benim elle hazırladığım testlerden çok daha gevşek kalıyor
1 milyon kolay test, kodun kritik kısımlarını kapsamıyorsa hiçbir anlam ifade etmiyor
Ayrıca Claude kod çalışmadığında testleri “düzeltivermesin” diye test değişikliklerini her zaman
git diffile kontrol ediyorumTestleri sıkı yönetince Claude zor makale algoritmalarını bile iyi uyguluyor ve zaman kazandırıyor, ama çok fazla bakım istiyor
Model, test denilen ödül fonksiyonunu “kazandım ilanı” için kötüye kullanıyor
Muhtemelen RL ön eğitim verilerinde de buna benzer örüntüler vardır diye tahmin ediyorum
assert(1==1)gibi işe yaramaz yüzlerce test çıkıyorBu yüzden “böyle testler üretme” diye ayrı bir yasaklar listesi tutmak gerekiyor
30 yıl boyunca bizzat kod yazdıktan sonra artık tamamen AI coding tarafına geçtim ama insanların AI’ın ürettiği kodun LOC’unu ya da özelliklerini kendi başarısı gibi sunması bana tuhaf geliyor
Günde yüz binlerce satır “kod yazdığını” söyleyip övünmek, sonuçta sadece birkaç satır prompt girmek değil mi?
Bizzat onayladığın değişikliklerde belli ölçüde emek payı sayılabilir ama tamamen vibe-coded app tarafında neredeyse hiç müdahale yok
Ben ortalardayım — AI’ın ürettiği kodun tamamını tek tek incelemiyorum ama mimari tasarımı ve refactoring yönünü ben belirliyorum
Ortaya çıkan sonuç, kendim yapsam çıkacak olana benziyor ama çok daha hızlı tamamlanıyor
Meta’nın Claude kullanması Anthropic için herhalde epey sevindiricidir
Çünkü artık implementation, test ve maintenance’ın tamamını ajanlar üstleniyor
LoC’yi, ajanın gereksinimleri ne kadar zorlayabildiğini gösteren bir tür yetenek göstergesi olarak görüyorum
İnsanın eleştirel incelemesi ise hâlâ geri bildirim olarak sisteme verilebiliyor
“Daha fazla soyutlama kullanmalıyız” sözü eskiden doğru olabilir ama bugün sanki tam tersi geçerli gibi geliyor
Ben WET (Write Everything Twice) felsefesini seviyorum — iki kez yaz, soyutlamayı ancak üçüncüde düşün
Wiki maddesine bakılabilir
İşletim sistemleri, RDBMS’ler, bulut orkestrasyonu gibi yenilikler bunun örneği
Ama kodların çoğu basit iş mantığından ibaret, bu yüzden soyutlama çoğu zaman köstek oluyor
O yüzden benim ilkem şu: “üç gerçek kullanım senaryosu kanıtlanmadan platform kurma”
Üçüncüde soyutlamaya kalkarken Second-System Effect tehlikesine dikkat etmek lazım — aşırı özgüven karmaşık sistemler doğuruyor
Alman general Kurt von Hammerstein-Equord’un ünlü bir sözünü paylaşıyor
Zeki ve çalışkan insanlar kurmay olur, aptal ve tembel insanlar gündelik işlerde kullanılır, zeki ve tembel insanlar lider olur,
ama aptal ve çalışkan insanlar tehlikelidir; onlara asla sorumluluk verilmemelidir
LLM ile 200 bin LOC yazdığını söyleyip övünmek ne kadar aptalcaysa, bunu görüp “bu kod aptalca” diye küçümsemek de o kadar yanlış bir tavır bence
Sonuçta önemli olan kod çıktısı değil, değer üretimi
Garry Tan’ın gerçekten değerli bir şey üretip üretmediğini bilmiyorum
Horizon IT skandalı gibi örneklerde kötü kod gerçek zarar veriyor
Garry’nin projesini inceleyen Polonyalı geliştirici Gregorein’in değerlendirmesine göre uygulamada test harness, Hello World uygulaması, yinelenen logo dosyaları gibi bir sürü dağınıklık vardı
Böyle kodun güvenlik saldırı yüzeyini büyütmüş olmasından endişe ediyorum
LOC’a odaklanmıyor; yaptığı şey daha çok AI tanıtım gönderisi paylaşmak
AI geliştirme ve işletim maliyetlerini düşürüyor ama güvenlik ve hukuki risk gibi gizli maliyetleri artırıyor
AI övgücüleri hep ilk kısmı öne çıkarıyor
Bunu kanıtlama yükü vibe coder tarafında olmalı
LOC ile övünmenin hâlâ aptalca olduğunu düşünüyorum
Fosil yakıt temelli büyümede olduğu gibi, kısa vadeli değer uzun vadeli maliyetler doğurabilir
Son birkaç PR’da LLM’in yanlış çözümler ürettiğini sık sık görüyorum
Mesela zaten mevcut olan bir JSON parser varken gidip yeniden parser yazıyor
Bir insan olsa “bu çok verimsiz” derdi ama LLM’de tembellik olmadığı için yanlış yönde bile gayretle çalışıyor
formatTimestampgibi bir fonksiyonun üç kopyası olduğunu tek bir grep ile görmek mümkünken bunu görmezden geliyorLLM’in tembel olmaması tespitine katılıyorum
Ama bunun kalıcı bir sorun mu olduğu, yoksa bir sonraki model yükseltmesinde ya da CICD pipeline içinde çözülecek bir şey mi olduğu belli değil
Ben genelde özellik tamamlandıktan sonra “hata veya refactor gerektiren yer var mı kontrol et” diye prompt veriyorum,
ileride sistemin otomatik biçimde son commit’leri analiz edip sadeleştirme önerileri sunduğu bir aşama da gelebilir
Bu yüzden bitiş koşulunu tanımlamak zorlaşıyor
“Ekle” dersen ekliyor, “azalt” dersen LOC’u düşürüyor
Büyük işleri verip incelemeyi atlarsanız code slop birikmesi çok kolay oluyor
LLM, basit bir konsol çıktı programı yerine tam bir SPA üretmeye eğilimli oluyor
Ayrıca
spec.mddosyasını kısa ve öz tutmayı da beceremiyor“Bu belgeyi güncelle ve çevresindeki içeriği sadeleştir” dendiğinde daha da karmaşık hâle getiriyor
Sonuçta okunabilir bir belge için özetlemeyi insanın bizzat yapması gerekiyor
LLM çıktısını düzenlemek acı verici ve metni doğrudan yazınca kavrayış da korunmuş oluyor
Yazılım geliştirmenin klasik derslerini artık LLM’lere ve vibe coder’lara öğretme zamanı geldi
Negative 2000 Lines of Code hikâyesindeki gibi, bazen kodu azaltmak gerçek ilerleme demektir
Böyle bir liderlikle çalışabilmek ne güzel olurdu diye düşünüyorum
Gerçekten kavrayış sahibi bir liderle çalışmak büyük şans