Yazılımda Teknik Borcun Ahlakı: Bugünün Kolaycılığı Yarının Kimin Sorumluluğu?

Teknik borç çoğu zaman eski kod, eksik test veya aceleyle verilmiş mimari kararlar şeklinde tanımlanır. Ancak mesele yalnızca kod kalitesi değildir. Bugün birkaç saat kazanmak için seçtiğimiz kestirme yol, aylar sonra sistemi devralan başka bir geliştiricinin gecesini, dikkatini ve hatta sağlığını tüketebilir. Bu nedenle teknik borç, ekonomik bir metafor olmanın ötesinde, yazılım ekiplerinin farklı kuşakları arasında aktarılan etik bir yükümlülüktür.

Devamı...

Veri Tipleri, Bellek Boyutları ve Tip Çıkarımının Perde Arkası

Bir değişkeni yalnızca “değer saklayan kutu” olarak düşünmek kolaydır; ancak derleyici için bu kutunun biçimi, kapasitesi ve hangi işlemlere izin verdiği de önemlidir. Tam sayılar, ondalık sayılar ve mantıksal değerler tek bir veriyi temsil ederken; diziler ve demetler birden fazla değeri düzenli biçimde bir araya getirir. Statik tip analizi ise program çalışmadan önce bu yapıların uyumlu kullanılıp kullanılmadığını denetleyen görünmez bir güvenlik görevlisi gibidir.

Devamı...

Veri Gölleri: Yapay Zekânın Geleceği İçin Ham Veriyi Saklamak

Bir şirketin ürettiği metinleri, görselleri, sensör kayıtlarını, uygulama loglarını ve ses dosyalarını henüz nasıl kullanacağını bilmeden sakladığını düşünün. İlk bakışta bu yaklaşım dijital istifçilik gibi görünebilir. Oysa doğru yönetilen bir veri gölü (data lake), gelecekte geliştirilecek yapay zekâ modellerine zengin ve yeniden işlenebilir bir veri kaynağı sunar.

Devamı...

Veri Ambarı ve Yıldız Şeması: Operasyonel Veriden İş Zekâsına

Bir e-ticaret sisteminde sipariş vermek saniyeler sürerken, “Son üç yılda hangi şehirde, hangi ürün kategorisi daha kârlıydı?” sorusunun yanıtı milyonlarca kaydın incelenmesini gerektirebilir. Veri ambarı, günlük operasyonları yavaşlatmadan bu tür geriye dönük analizleri gerçekleştirmek için tasarlanmış merkezi veri yapısıdır.

Devamı...

Rust’ta Yaşam Süreleri: Dangling Referanslara Derleyici Freni

Bir referans, işaret ettiği değer ortadan kalktıktan sonra kullanılmaya çalışılırsa ortaya dangling reference çıkar. C ve C++ gibi dillerde bu hata bazen program çalışana, hatta üretim ortamında gizemli bir çöküş yaşanana kadar fark edilmez. Rust ise yaşam sürelerini derleme aşamasında çözümleyerek “Bu referans hâlâ geçerli mi?” sorusunu program çalışmadan cevaplar.

Devamı...

Rust’ta Kontrol Akışı: if-else, loop, while ve for

Bir programın karar verebilmesi ve tekrarlanan işleri otomatikleştirebilmesi, kontrol akışı yapıları sayesinde mümkündür. Rust; if-else, loop, while ve for yapılarını tanıdık bir söz dizimiyle sunarken ifade tabanlı yaklaşımı, güvenli tür sistemi ve döngü etiketleri gibi kendine özgü özelliklerle işleri daha kontrollü hâle getirir.

Devamı...

Rust’ta Değişkenler: Varsayılan Değişmezlik ve mut Anahtar Kelimesi

Rust’ta bir değişken tanımladığınızda, derleyici onu varsayılan olarak değişmez yani salt okunur kabul eder. İlk bakışta “Değişken değişmeyecekse neden adı değişken?” diye düşünebilirsiniz. Rust’ın cevabı nettir: Bir değerin değişmesi mümkün olabilir, fakat bu yetki açıkça verilmelidir. Böylece kodun hangi noktalarında durum değişikliği yaşanabileceği görünür hâle gelir ve sürprizlerin yerini bilinçli tercihler alır.

Devamı...

Rust’ta Borçlanma ve Referanslar: Sahipliği Vermeden Veriyi Paylaşmak

Rust’ın bellek güvenliğindeki süper gücü, verileri sürekli kopyalamak veya çöp toplayıcı kullanmak değil; sahiplik ile borçlanmayı derleme aşamasında denetlemektir. Bir değeri başka bir fonksiyona gönderirken sahipliğini devretmek istemiyorsak & işaretiyle referans oluştururuz. Böylece fonksiyon veriyi geçici olarak ödünç alır; fakat onun kalıcı sahibi olmaz.

Devamı...

Rust Ownership Sistemi: Çöp Toplayıcı Olmadan Güvenli Bellek Yönetimi

Rust öğrenmeye başlayanların karşısına çıkan ilk büyük bölüm sonu canavarı ownership, yani sahiplik sistemidir. İlk bakışta derleyicinin değişkenlerinize gereğinden fazla karıştığını düşünebilirsiniz. Oysa bu sistem; çöp toplayıcı kullanmadan bellek güvenliği sağlamak, sarkan işaretçileri önlemek ve kaynakların ne zaman temizleneceğini kesin biçimde belirlemek için tasarlanmıştır.

Devamı...

Rust Kurulumu ve Cargo ile İlk Geliştirme Ortamı

Rust öğrenme yolculuğunun ilk durağı, derleyiciyi kurup editörü hazırlamaktır. Neyse ki Rust dünyasında kurulum, farklı araçları tek tek avlamaktan çok daha düzenlidir: rustup araç zincirini yönetir, rustc kodu derler, Cargo ise proje ve bağımlılık işlerini üstlenir. VS Code eklentileri de eklenince geriye yalnızca güvenli ve hızlı kod yazmak kalır.

Devamı...

Rust Felsefesi ve Bellek Güvenliği: Çöp Toplayıcı Olmadan Güvenli Sistem Programlama

C ve C++, programcıya belleğin anahtarlarını teslim eder; fakat anahtarlığın yanında kullanım kılavuzu vermez. Rust ise aynı donanım kontrolünü korurken “Bu bellek hâlâ geçerli mi?” sorusunu çalışma anına bırakmak yerine derleme sırasında yanıtlamaya çalışır. Üstelik bunu kodun arkasında dolaşan bir garbage collector olmadan gerçekleştirir.

Devamı...

Petabaytları Parçalara Bölmek: HDFS ve Hadoop Mimarisi

Bir petabayt veriyi dizüstü bilgisayarınıza kopyalamaya çalıştığınızı düşünün. Diskin itiraz etmesi bir yana, işlem tamamlanmadan bilgisayarınız emekli olabilir! Hadoop Dağıtık Dosya Sistemi, yani HDFS, bu problemi devasa ve pahalı bir sunucu almak yerine veriyi yüzlerce sıradan makineye dağıtarak çözer. Üstelik disk arızalarını istisna değil, sistemin doğal bir parçası kabul eder.

Devamı...

Kodlama Yaparken Akış Hali: Programcılar İçin Meditasyonun Bilimsel Karşılığı

Bazen kod yazarken saatler dakikaya dönüşür; klavye sanki düşüncelerin uzantısı olur ve dış dünya sessize alınır. Psikolog Mihaly Csikszentmihalyi bu yoğun odaklanma, kontrol ve içsel tatmin deneyimini akış hali olarak tanımlar. Programcıların sıkça yaşadığı bu durum meditasyona benzese de mistik bir trans değil; dikkat, beceri ve geri bildirim arasındaki ölçülebilir dengenin sonucudur.

Devamı...

Gerçek Zamanlı Veri Akışı ve Apache Kafka ile Kayıpsız İşleme

Bir web sitesindeki tıklamalar, sunucu logları veya fabrikadaki sıcaklık sensörleri kimsenin “Kaydet” düğmesine basmasını beklemez. Veriler saniyede yüzlerce, hatta milyonlarca olay hâlinde kesintisiz akar. Gerçek zamanlı veri akışı, bu olayları oluştukları anda yakalayıp güvenilir biçimde taşıma ve gecikmeyi mümkün olduğunca düşük tutarak işleme yaklaşımıdır. Apache Kafka ise bu yoğun veri trafiğinin ortasında çalışan dayanıklı bir dijital konveyör bandı gibidir.

Devamı...

ETL Süreçleriyle Ham Veriden Güvenilir Veri Boru Hatlarına

Bir e-ticaret şirketinde siparişler PostgreSQL’de, reklam verileri bir API’de, müşteri yorumları JSON dosyalarında tutulabilir. Analiz ekibinin bütün bunları tek tek toplaması hem zaman kaybettirir hem de hata üretir. ETL süreçleri, dağınık ham veriyi otomatik biçimde çekip temizleyerek analiz edilmeye hazır, güvenilir bir veri kaynağına dönüştürür.

Devamı...

Dağıtık Ekiplerde Ortak Bir “Şimdi” Nasıl Yaratılır?

Uzaktan çalışma ofisi ortadan kaldırırken zamanı da görünmez biçimde yeniden tasarladı. İstanbul’daki bir geliştirici güne başlarken San Francisco’daki ekip arkadaşı uyuyor, Tokyo’daki tasarımcı ise bilgisayarını kapatıyor olabilir. Böyle bir ekipte “hemen konuşalım” masum bir öneri değil, coğrafi bir ayrıcalıktır. Ortak bir “şimdi” yaratmak, herkesi aynı anda çevrim içi tutmak değil; eşzamanlı ve eşzamansız çalışmayı bilinçli biçimde dengelemektir.

Devamı...

Büyük Verinin Temelleri: 3V Kuralıyla Verinin Yeni Dünyası

Bir e-ticaret sitesindeki tıklamalar, akıllı saatlerin ölçtüğü nabız değerleri, sosyal medya paylaşımları ve fabrikalardaki sensör kayıtları… Modern dünyada veri yalnızca çoğalmıyor; hızlanıyor ve biçim değiştiriyor. Büyük Veri (Big Data), tek başına “çok fazla veri” anlamına gelmez. Geleneksel sistemlerin makul süre ve maliyetle saklamakta, işleyip analiz etmekte zorlandığı veri kümelerini ve bu sorunu çözmek için geliştirilen yöntemleri ifade eder.

Devamı...

Apache Spark ile Dağıtık ve Bellek İçi Veri İşleme

Devasa bir veri setini tek bilgisayarda işlemeye çalışmak, taşınma günü bütün kolileri küçük bir otomobile doldurmaya benzer: Bir noktadan sonra ne bagaj kapanır ne de süreç ilerler. Apache Spark, verileri kümeye dağıtarak ve ara sonuçları mümkün olduğunca bellekte tutarak bu sorunu çözer. Böylece haritalama, filtreleme ve indirgeme gibi işlemler, her aşamada diske yazma zorunluluğuna takılmadan çok daha hızlı gerçekleştirilebilir.

Devamı...

Algoritmik Önyargıyı Satranç Metaforuyla Anlamak: Kurallar Adil, Sonuç Neden Değil?

Satrançta kurallar herkes için aynıdır: Piyon bir kare ilerler, fil çapraz gider, şah tehdit altındaysa korunmalıdır. Yine de bir oyuncuya vezir, diğerine yalnızca birkaç piyon vererek oyunu başlatırsak kuralların eşit olması karşılaşmayı adil yapmaz. Kural tabanlı yazılımlarda algoritmik önyargı da çoğu zaman böyle doğar. Kod herkese aynı koşulları uygulayabilir; fakat başlangıç koşulları, kullanılan göstergeler ve geçmişten alınan veriler eşit değilse sonuçlar sistematik biçimde bazı grupları dezavantajlı hâle getirebilir.

Devamı...