Python geliştiricilerinin performans sohbetlerinde er ya da geç karşılaştığı bir kötü karakter vardır: Global Interpreter Lock, yani GIL. İlk bakışta çözüm basit görünür: Kilidi kaldır, bütün işlemci çekirdekleri aynı anda Python kodu çalıştırsın! Ne var ki GIL, kapının önüne yanlışlıkla bırakılmış bir sandalye değildir; CPython’ın bellek yönetimine ve geniş C uzantısı ekosistemine bağlanmış yapısal bir parçadır.

Devamı...
Bir web sitesini uçakta, metroda veya internetin naz yaptığı bir kafede açtığınızı düşünün. Normalde tarayıcı üzgün bir hata sayfası gösterirken Progressive Web App, yani PWA, daha önce kaydedilmiş kaynakları kullanarak çalışmaya devam edebilir. Bu küçük sihrin arkasında, tarayıcı ile ağ arasında görev yapan Service Worker bulunur.
Devamı...
Julia’nın bilimsel hesaplamada parlamasının arkasında yalnızca hızlı döngüler veya LLVM bulunmaz. Dilin asıl süper güçlerinden biri multiple dispatch, yani çoklu dağıtımdır. Bu yaklaşımda çalıştırılacak metot sadece ilk argümanın sınıfına göre değil, fonksiyona verilen bütün argümanların tip bileşimine göre seçilir. Böylece matematiksel işlemler hem doğal biçimde ifade edilir hem de derleyiciye güçlü optimizasyon fırsatları sunar.
Devamı...
Bir pozisyona yüzlerce kişi başvurduğunda bütün CV’leri insanların incelemesi zorlaşıyor. Şirketler bu sorunu ATS adı verilen aday takip sistemleri ve yapay zeka destekli sıralama algoritmalarıyla çözmeye çalışıyor. Ne var ki hız kazandıran bu dijital kapıcılar, liyakati ölçmek yerine CV’de doğru sihirli kelimelerin bulunup bulunmadığını kontrol edebiliyor. Sonuçta güçlü bir aday, yalnızca deneyimini algoritmanın beklediği lehçeyle anlatmadığı için daha kapıyı çalamadan elenebiliyor.
Devamı...

Bir sıcaklık sensörü düşünün: Her saniye ölçüm gönderiyor. Şimdi buna binlerce sensör, sunucu metriği ve uygulama olayı ekleyin. Ortaya sürekli büyüyen bir veri nehri çıkar. InfluxDB’nin TSM, yani Time-Structured Merge Tree motoru, bu nehri klasik veritabanları gibi satır satır saklamak yerine zamanın düzeninden yararlanarak sıkıştırır ve diske verimli biçimde aktarır.
Devamı...
Basit bir kullanıcı ayarı kaydetmek için neden üç arayüz, iki fabrika, bir strateji deseni ve gelecekte kurulabilecek uzay kolonilerine hazır bir eklenti sistemi yazdık? Yanıt her zaman teknik gereksinimler değildir. Bazen yazılımcı, yeterliliğini kanıtlamak veya eleştiriden korunmak için çözümü bilinçsizce karmaşıklaştırır. İmposter sendromu ile aşırı mühendislik arasındaki ilişki tam da bu noktada ortaya çıkar.

Devamı...
Bir mesaj uygulamasında yeni iletileri görmek için sayfayı sürekli yenilemek zorunda kaldığınızı düşünün. Pek modern sayılmaz, değil mi? GraphQL Subscription, sunucuda gerçekleşen olayları WebSocket bağlantısı üzerinden istemciye anında ileterek bu sorunu çözer. Böylece sohbet mesajları, bildirimler, canlı skorlar ve sipariş durumları gecikmeden arayüze yansıtılabilir.

Devamı...
Bir kullanıcı “bilgisayar mühendisliği” yerine “bilgisar muhendisligi” yazdığında arama motorunun küsmek yerine doğru sonuçları getirmesini isteriz. Elasticsearch bunu tek bir sihirli ayarla değil; karakter normalizasyonu, tokenization, kök bulma, durdurma kelimeleri, eşanlamlılık ve bulanık eşleştirme katmanlarını birlikte kullanarak başarır.
Devamı...
Yeni bir özellik geliştirmek çoğu yazılımcıya heyecan verir: problem çözülür, testler yeşile döner ve ekranda somut bir sonuç belirir. Aynı geliştiriciden özelliği açıklaması istendiğinde ise görünmez bir duvar yükselir. Çünkü kod yazmak makineye kesin talimatlar vermekken dokümantasyon yazmak, başka insanların eksik bilgilerini ve muhtemel yanlış anlamalarını tahmin etmeyi gerektirir.

Devamı...
Flutter uygulamanız akıcı biçimde kayarken bir JSON dosyasını ayrıştırmaya başladınız ve ekran aniden buza mı dönüştü? Suçlu çoğu zaman Dart değil, ağır işi arayüzün çalıştığı isolate üzerinde yapmamızdır. Dart isolate’leri; hesaplama, ayrıştırma ve veri dönüştürme gibi pahalı görevleri bağımsız çalışma alanlarına taşıyarak kullanıcı arayüzünün nefes almaya devam etmesini sağlar.
Devamı...
Bir milyon sayıyı dönüştürmek, bazılarını elemek ve sonucu toplamak istediğinizi düşünün. Klasik bir map–filter zinciri gayet okunaklıdır; ancak her adım ara koleksiyonlar üretebilir veya tembel diziler üzerinden ek soyutlama maliyeti getirebilir. Clojure transducers, dönüşümün nasıl saklandığını değil, nasıl uygulandığını tarif ederek bu zinciri veri kaynağından bağımsız ve şaşırtıcı derecede verimli hâle getirir.
Devamı...
Agile, uzun planların ve ağır onay mekanizmalarının yerine esneklik, iş birliği ve otonomi getirme vaadiyle doğdu. Ne var ki bazı şirketlerde bu fikir; günlük sorgular, saatlik performans takibi ve geliştiricileri yarıştıran puan tablolarıyla bambaşka bir şeye dönüşüyor. Böyle ortamlarda Scrum, çevikliği sağlayan bir çerçeve olmaktan çıkıp takımın üzerine giydirilmiş renkli bir mikro-yönetim kostümüne benzeyebiliyor.
Devamı...
LINQ sorguları ilk bakışta koleksiyonlar üzerinde çalışan zarif döngüler gibi görünür. Ancak aynı sözdizimi bazen bellekteki nesneleri filtrelerken bazen de kilometrelerce uzaktaki bir veritabanına SQL gönderir. Bu küçük sihrin arkasında iki önemli mekanizma bulunur: sorguyu veri yerine bir mantık modeli olarak temsil eden Expression Tree yapıları ve çalışmayı ihtiyaç duyulana kadar erteleyen deferred execution davranışı.
Devamı...

Dağıtık sistemlerin klasik kâbusu şudur: Servis ödemeyi işler, Kafka’ya onay gönderirken ağ kopar ve mesajın ulaşıp ulaşmadığını öğrenemez. Tekrar gönderirse müşteri iki kez ücretlendirilebilir; göndermezse işlem kaybolabilir. Apache Kafka’nın Exactly-Once Semantics, yani EOS mimarisi, yeniden denemeleri yasaklamak yerine aynı mantıksal işlemin sonuçlarını yalnızca bir kez görünür hâle getirir.
Devamı...
Açık kaynak projeleri yalnızca kod depolarından ibaret değildir; kuralları, statüleri, ritüelleri ve güç ilişkileri bulunan küçük toplumlardır. Bu nedenle bir projenin forklanması bazen teknik bir ihtiyaçtan çok anayasal kriz gibidir. Geliştiriciler kodu kopyalarken aslında yönetişim modelini, liderlik anlayışını ve topluluğun geleceğine ilişkin beklentilerini de yeniden tanımlar.
Devamı...
C makrolarının metin değiştirme numaralarıyla, C++ şablonlarının hata mesajı destanları arasında kaybolduysanız Zig’in comptime özelliği ferah bir nefes gibi gelebilir. Zig, metaprogramlamayı ayrı ve gizemli bir alt dil olmaktan çıkarır: Normal Zig kodunu, uygun veriler biliniyorsa derleme sırasında çalıştırır. Böylece tür üretmekten matematiksel hesaplamalara kadar pek çok iş, çalışma zamanına yük bindirmeden yapılabilir.

Devamı...
WebAssembly denildiğinde çoğumuzun aklına tarayıcıda çalışan hızlı uygulamalar gelir. Oysa Wasm, taşınabilir bir ikili kod biçimidir; JavaScript’e veya tarayıcıya mahkûm değildir. Eksik parça, modülün dosya sistemi, saat, rastgele sayı üreticisi ve ağ gibi işletim sistemi kaynaklarıyla nasıl konuşacağını tanımlayan standart bir arayüzdür. İşte WASI, yani WebAssembly System Interface, bu boşluğu güvenli ve taşınabilir biçimde doldurur.

Devamı...
Modern web geliştirme denince akla hemen React, Angular veya Vue geliyor. Oysa tarayıcılarımız uzun süredir kendi bileşen sistemini taşıyor: Web Components. Custom Elements, Shadow DOM ve HTML Templates standartlarını bir araya getirerek herhangi bir çerçeveye bağlanmadan yeniden kullanılabilir arayüzler oluşturabiliriz. Üstelik ortaya çıkan bileşenler düz HTML’de, React projesinde veya yıllar sonra çıkacak başka bir teknolojide çalışabilir.

Devamı...
JavaScript nesneleri çalışma sırasında özgürce değişebilir: Yeni özellikler eklenir, eskileri silinir ve türler aniden dönüşebilir. Bu esneklik kullanışlı olsa da işlemci açısından pek romantik değildir. V8 motoru, nesnelere Hidden Class adı verilen dahili şekil haritaları atayarak bu belirsizliği azaltır ve özellik erişimini statik dillere şaşırtıcı derecede yaklaştırır.

Devamı...
TypeScript’in tip sistemi yalnızca string veya number yazıp hataları erkenden yakalamaktan ibaret değildir. Conditional Types ve Mapped Types sayesinde tipler üzerinde koşul çalıştırabilir, koleksiyonları dönüştürebilir ve API sözleşmelerini otomatik üretebiliriz. Başka bir deyişle derleyiciye küçük ama son derece titiz bir program yazdırırız; üstelik bu program çalışma zamanında değil, kod daha çalışmadan önce görev yapar.
Devamı...