Modern arayüzlerde temel problem basittir: Uygulamanın durumu değiştiğinde ekrandaki doğru bölüm de güncellenmelidir. Birçok framework bu problemi tarayıcıda çalışan bir Sanal DOM katmanıyla çözerken Svelte farklı bir soru sorar: Yapılacak güncellemeleri derleme sırasında biliyorsak neden çalışma zamanında tekrar hesaplayalım?
Devamı...
Bir satış tablosundaki her kaydı korurken toplam ciroyu, ürün sıralamasını veya önceki güne göre değişimi görmek istediğinizi düşünün. GROUP BY satırları özetleyerek detayları ortadan kaldırırken pencere fonksiyonları, satırlara dokunmadan analitik sonuçlar üretir. Başka bir deyişle veri aynı kalır, fakat her satır yanında küçük bir analist taşımaya başlar!

Devamı...
Rust denince akla ilk olarak bellek güvenliği gelir. Ancak dilin ortasında, üzerinde kocaman bir uyarı etiketi varmış gibi duran unsafe anahtar sözcüğü bulunur. Bu ilk bakışta çelişkili görünebilir: Bellek hatalarını önleyen bir dil neden güvenlik kontrollerini aşmaya izin versin? Çünkü bazı doğru programların güvenli olduğunu derleyici kanıtlayamaz. unsafe, güvenliği çöpe atmak değil; belirli kuralları doğrulama sorumluluğunu programcıya devretmektir.
Devamı...
Python’da her şeyin bir nesne olduğunu duymuşsunuzdur; buna sınıflar da dahildir. Bir sınıf örnekleri üretirken, metaclass da sınıfları üretir. Kulağa programlama dünyasının matruşka bebeği gibi geliyor: nesnenin arkasında sınıf, sınıfın arkasında ise metaclass vardır. Genellikle “ihtiyacın olduğunu düşünüyorsan muhtemelen yoktur” uyarısıyla anılsalar da metaclass’lar, Django ve SQLAlchemy gibi araçların etkileyici otomasyonlarının temel parçalarındandır.

Devamı...
Bir uygulamanın ürün kataloğunda telefonların ekran boyutu, ayakkabıların numarası, kahvelerin kavurma derecesi olabilir. Her kategori için onlarca nullable sütun açmak istemiyorsanız PostgreSQL’in JSONB tipi imdada yetişir. JSONB, değişken yapılı verileri saklarken SQL, transaction ve ilişkisel bütünlük gibi PostgreSQL güçlerinden vazgeçmeden doküman yaklaşımından yararlanmanızı sağlar.
Devamı...

Bir arkadaşının beğendiği filmi sana önermek kolaydır; arkadaşının arkadaşlarının izlediği, senin tür tercihlerinle örtüşen ve benzer kullanıcıların yüksek puan verdiği filmi bulmak ise ilişkiler derinleştikçe zorlaşır. Neo4j, verileri satırlar yerine düğümler ve doğrudan bağlantılar biçiminde saklayarak bu tür soruları doğal şekilde modellememizi sağlar. Cypher sorgu dili de karmaşık ilişki ağlarında gezinmeyi, okunabilir desenler tarif etmeye dönüştürür.
Devamı...
Kotlin’de suspend anahtar sözcüğünü gördüğümüzde kodun sihirli biçimde arka plana taşındığını düşünebiliriz. Oysa coroutine’lerin asıl numarası yeni bir thread oluşturmak değil, çalışmayı uygun noktalarda durdurup daha sonra kaldığı yerden sürdürebilmektir. Kotlin derleyicisi bunu gerçekleştirmek için askıya alınabilen fonksiyonları birer durum makinesine, yani state machine’e dönüştürür.
Devamı...

Bir program aynı anda durum tutmak, hata üretmek ve dış dünyayla konuşmak isteyebilir. Haskell ise bu etkileri görünmez mutasyonlarla birbirine karıştırmak yerine açıkça modellemeyi tercih eder. Monad transformatörleri, farklı etkileri LEGO parçaları gibi üst üste koyarak tek bir hesaplama bağlamında kullanmamızı sağlar.
Devamı...

Go’nun Garbage Collector’ı geliştiriciyi manuel bellek yönetiminden kurtarır; ancak milyonlarca nesneyle çalışan servislerde bu konforun küçük bir faturası vardır: GC, canlı işaretçileri bulmak için heap üzerindeki nesneleri tarar. Struct’larımızı işaretçi içermeyecek biçimde tasarladığımızda Go çalışma zamanı bu nesneleri noscan olarak sınıflandırabilir. Böylece nesnelerin kapladığı bellek hâlâ yönetilirken içlerinin pointer aramak amacıyla taranmasına gerek kalmaz.
Devamı...
Geleneksel nesne yönelimli programlamada bir nesne diğerinin metodunu çağırır ve çoğu zaman aynı belleği paylaşır. Actor modelinde ise bağımsız aktörler birbirlerine mesaj gönderir. Böylece kilitler, yarış koşulları ve hata yayılımı daha yönetilebilir hâle gelir. Elixir ile Akka bu fikri farklı araçlarla uygular; biri Erlang VM’nin doğal yeteneklerine, diğeri JVM ve Scala ekosistemine yaslanır.

Devamı...
Node.js’in yaratıcısı Ryan Dahl, yıllar sonra bazı tasarım kararlarından pişman olduğunu açıkladı ve bu deneyimden doğan fikirlerle Deno’yu geliştirdi. Deno; varsayılan güvenlik kısıtlamaları, yerleşik TypeScript desteği ve URL tabanlı modül sistemiyle JavaScript çalışma ortamlarına daha modern bir yaklaşım getiriyor. Peki bunlar gerçek projelerde ne kadar fark yaratıyor?
Devamı...
Bir e-ticaret sisteminde iki sunucunun aynı son ürünü eş zamanlı sattığını düşünün. Her ikisi de stok değerini 1 olarak okur, siparişi onaylar ve stoğu 0 yapar. Sonuç: Bir ürün, iki mutlu müşteri ve kısa süre sonra pek de mutlu olmayan bir destek ekibi! Dağıtık kilitler, farklı makinelerde çalışan süreçlerin ortak bir kaynağı kontrollü biçimde değiştirmesini sağlar.
Devamı...

CSS güçlüdür; ancak standartlara eklenmemiş bir görsel efekt veya yerleşim davranışı istediğimizde çoğunlukla JavaScript ile DOM elemanları üretmeye başlarız. CSS Houdini ise sihirbaz şapkasından tavşan değil, tarayıcının işleme sürecine kontrollü kancalar çıkarır. Böylece geliştiriciler özel CSS özellikleri tanımlayabilir, görseller çizebilir ve deneysel olarak yeni yerleşim algoritmaları geliştirebilir.
Devamı...
Dağıtık sistem tasarlarken CAP teoremi genellikle sahnenin yıldızıdır: Ağ bölünmesi yaşandığında tutarlılık mı, erişilebilirlik mi? Fakat sistemler hayatlarının büyük bölümünü ağ felaketi yaşamadan geçirir. İşte PACELC, projektörü bu sakin anlara çevirir ve rahatsız edici soruyu sorar: “Ağ düzgün çalışırken düşük gecikme mi, güçlü tutarlılık mı istiyorsun?” Çünkü dağıtık sistemlerde ücretsiz öğle yemeği yoktur; yalnızca faturanın farklı zamanlarda gelmesi vardır.
Devamı...
C++ şablonları güçlüdür; ancak yanlış bir tür kullandığınızda derleyici bazen küçük bir hatayı yüzlerce satırlık bir destana dönüştürür. C++20 ile gelen Concepts, şablon parametrelerinden ne beklendiğini açıkça tanımlayarak bu sorunu büyük ölçüde çözer. Böylece hem derleyici daha anlaşılır hata verir hem de fonksiyonun kabul ettiği türler kaynak koddan okunabilir.
Devamı...
Terraform ile birkaç kaynak oluşturmak kolaydır; asıl macera aynı altyapıyı bir ekip yönetmeye başladığında ortaya çıkar. Terraform State dosyası, tanımladığımız kod ile bulutta gerçekten bulunan kaynaklar arasındaki köprüdür. Ancak yanlış saklanan veya eş zamanlı güncellenen bir State, altyapıyı otomatikleştiren dostumuzun kısa sürede kaos makinesine dönüşmesine neden olabilir.
Devamı...
Bir sistemin hiç bozulmamasını istemek kulağa harika gelir; ancak yüzde yüz güvenilirlik hedefi, ekipleri yenilik yapmak yerine sonsuza kadar risk azaltmaya sürükleyebilir. Google’ın Site Reliability Engineering yaklaşımıyla yaygınlaştırdığı hata bütçesi, kullanıcıların kabul edebileceği arıza payını ölçülebilir bir geliştirme özgürlüğüne dönüştürür. Böylece ekip, “Hiç hata olmasın!” gibi gerçekçi olmayan bir hedef yerine, “Ne kadar hata kabul edilebilir ve bu payı nasıl yöneteceğiz?” sorusunu sorar.
Devamı...

Bulut faturanız roket gibi yükselirken spot sunucular bir indirim kuponu gibi yetişebilir. Bulut sağlayıcıları, boşta duran işlem kapasitesini standart fiyatın oldukça altında kiralar. Ancak küçük bir şartları vardır: Sağlayıcı kapasiteye ihtiyaç duyduğunda sunucunuzu kısa bir bildirimle kapatabilir. Dolayısıyla spot dünyasında temel soru “Sunucu kapanır mı?” değil, “Kapandığında uygulama ne yapar?” olmalıdır.
Devamı...
Bir uygulamaya yeni özellik eklemek bazen küçük bir değişiklik gibi başlar, ardından onlarca if bloğuna dokunulan riskli bir operasyona dönüşür. SOLID ilkelerinin O harfiyle temsil edilen Açık/Kapalı Prensibi, yazılım bileşenlerinin genişletilmeye açık, değiştirilmeye kapalı olmasını önererek bu soruna çözüm getirir. Amaç mevcut kodu sonsuza kadar dondurmak değil, yeni davranışları mümkün olduğunca yeni kod yazarak sisteme katabilmektir.
Devamı...
Mikroservis mimarisinde servis sayısı arttıkça ağ trafiği küçük bir şehir merkezine dönüşür: İstekler farklı rotalara sapar, bazı servisler yavaşlar ve güvenlik kontrolleri her köşede yeniden yazılır. Service Mesh, uygulama kodunu değiştirmeden bu karmaşayı yöneten bir trafik katmanıdır. Istio ise Envoy proxy’lerini kullanarak güvenlik, gözlemlenebilirlik ve akıllı yönlendirme özelliklerini Kubernetes ortamına taşır.

Devamı...