Bir düzenli ifadeye baktığımızda yalnızca parantezler, yıldızlar ve gizemli ters eğik çizgiler görürüz. İşlemci ise bu sembollerin şiirselliğiyle ilgilenmez; ona karşılaştırmalar, geçişler ve kesin kurallar gerekir. Otomat kuramı, a(b|c)*d gibi bir metin kalıbını sonlu sayıda duruma sahip bir makineye dönüştürerek bu iki dünya arasında köprü kurar.

Devamı...

Bir yazılım sisteminin mimari diyagramına bakarak onu geliştiren şirketin organizasyon şemasını tahmin edebilir misiniz? Conway Yasası’na göre çoğu zaman evet! Ekipler arasındaki iletişim sınırları; servislerin, modüllerin ve API’lerin sınırlarına dönüşür. Başka bir deyişle şirket yalnızca yazılım üretmez, kendi iletişim biçiminin dijital bir kopyasını da üretir.
Devamı...
Bir geliştirici “Bu iş iki gün sürer” dediğinde odadaki herkes farkında olmadan iki gün çevresinde düşünmeye başlayabilir. İlk söylenen sayı, teknik bir hesaplamadan çok zihinsel bir mıknatısa dönüşür. Çevik Poker veya yaygın adıyla Planning Poker, tahminleri aynı anda ve gizlice açıklatarak bu çapa etkisini azaltan ekip tabanlı bir yöntemdir.
Devamı...

Bir API herkese açık bir kapıysa rate limiting, kapıdaki soğukkanlı güvenlik görevlisidir. İstemciler saniyeler içinde binlerce istek gönderdiğinde CPU, bellek, ağ bağlantıları ve veritabanı havuzu tükenebilir. Hız sınırlama algoritmaları, normal kullanıcıları cezalandırmadan bu trafik selini matematiksel kurallarla kontrol altında tutar.
Devamı...
Bir video izlerken görüntünün donduğunu, aynı anda servis sağlayıcınızın kendi video platformunun kusursuz çalıştığını düşünün. Bu durum teknik bir arızadan çok daha fazlası olabilir: Ağ tarafsızlığı tartışmasının tam merkezindesiniz. Ağ tarafsızlığı, internet servis sağlayıcılarının paketleri kaynağına, hedefine, içeriğine veya uygulamasına göre haksız biçimde engellememesi, yavaşlatmaması ya da ücretli “hızlı şeritlere” ayırmaması ilkesidir.
Devamı...
Bir yapay zekâ modelini eğitmek için binlerce sağlık kaydına ihtiyacınız olduğunu, ancak gizlilik yasaları nedeniyle bu kayıtlara dokunamadığınızı düşünün. Çözüm, gerçek kişileri temsil etmeyen fakat gerçek verinin istatistiksel davranışlarını taklit eden sentetik veri üretmektir. Böylece Ayşe Hanım’ın tansiyonunu paylaşmadan, toplumdaki tansiyon dağılımını modellemek mümkün olur.

Devamı...
Telefonunuzun klavyesi bir sonraki kelimeyi tahmin ederken yazdığınız özel mesajların merkezi bir sunucuya gönderilmesi pek hoş olmazdı. Federatif öğrenme, diğer adıyla federal öğrenme, tam bu noktada devreye girer: Veriyi modele götürmek yerine modeli verinin bulunduğu cihazlara götürür. Kullanıcı cihazları modeli kendi verileriyle geliştirir ve sunucuya ham verileri değil, yalnızca hesaplanan ağırlık güncellemelerini yollar.
Devamı...
Elinizde kaynak kodu olmayan derlenmiş bir program bulunduğunu düşünün. Program çalışıyor, dosyalar okuyor ve hesaplamalar yapıyor; fakat içeride neler döndüğünü bilmiyorsunuz. Tersine mühendislik, bu kapalı kutunun davranışını assembly kodu, decompiler çıktısı ve çalışma zamanı gözlemleri üzerinden anlamaya çalışır. Elbette bu teknikler yalnızca size ait veya inceleme izniniz bulunan yazılımlarda kullanılmalıdır.
Devamı...
Bir uygulamayı tamamladıktan sonra güvenlik testi yapmak, evi inşa edip anahtarı teslim ettikten sonra kapısının olmadığını fark etmeye benzer. Güvenli Yazılım Geliştirme Yaşam Döngüsü veya kısaca SSDLC, güvenliği son dakikada eklenen bir kontrol olmaktan çıkarır; planlama, tasarım, geliştirme, test, dağıtım ve bakım aşamalarının tamamına yerleştirir.
Devamı...

Kod inceleme, yalnızca hataları yakalamak için açılan teknik bir kontrol kapısı değildir; bilginin ekip içinde dolaşmasını, ortak standartların oluşmasını ve geliştiricilerin birbirinden öğrenmesini sağlayan sosyal bir sistemdir. Ancak yanlış kurulduğunda “Bu kod kötü” cümlesi kolayca “Sen kötü bir geliştiricisin” şeklinde algılanabilir. Sağlıklı bir kültürün temel amacı, insanları yargılamak değil ürünü birlikte iyileştirmektir.
Devamı...
Bir geliştirici için dikkat dağınıklığı yalnızca telefona bakmak değildir; açık sekmeler, derleme bildirimleri, Slack mesajları ve “şu fonksiyonu da düzelteyim” dürtüsü aynı zihinsel kaynakları tüketir. Pomodoro tekniğini doğrudan IDE içerisine taşımak, zamanı ölçmekten çok çalışma sınırlarını görünür hâle getirir. Böylece zamanlayıcı, kod yazarken sürekli pazarlık yaptığımız beynimize küçük ama etkili bir çalışma sözleşmesi sunar.
Devamı...
Dağıtık bir sistemde herkesin baktığı kusursuz bir duvar saati yoktur. Düğümlerin fiziksel saatleri farklı hızlarda ilerleyebilir, ağ paketleri gecikebilir ve mesajlar gönderildikleri sıradan farklı bir sırada ulaşabilir. Vektör saatleri, “Saat kaç?” sorusunu cevaplamak yerine daha yararlı bir soruya odaklanır: “Bu olay, diğer olaydan önce mi gerçekleşti; yoksa ikisi birbirinden bağımsız mıydı?”
Devamı...
Sunucu odasını su bastığını, kritik verilerin yanlışlıkla silindiğini veya fidye yazılımının tüm sistemleri şifrelediğini düşünün. Böyle bir anda “Yedeğimiz vardı galiba” cümlesi pek güven vermez. Felaket Kurtarma Planı, yani Disaster Recovery Plan (DRP), bilişim sistemlerini önceden belirlenen süre ve veri kaybı sınırları içerisinde alternatif bir ortamda yeniden çalıştırmak için hazırlanan teknik ve operasyonel yol haritasıdır.

Devamı...
Uzun süre çalışan bir sunucu uygulaması başlangıçta uslu bir ev arkadaşı gibi davranıp günler sonra bütün belleği işgal edebilir. Trafik sabitken RAM kullanımının sürekli yükselmesi, gecikmelerin artması ve sonunda sürecin işletim sistemi tarafından sonlandırılması tipik belirtilerdir. Neyse ki Linux ve popüler çalışma zamanlarının yerleşik araçları, uygulamayı hemen durdurmadan bu gizli tüketimi izlememizi sağlar.

Devamı...
Bir GitHub deposundaki “open source” etiketi, yazılımı istediğiniz gibi kullanabileceğiniz anlamına gelmez. GPL, MIT ve Apache 2.0 lisanslarının üçü de ticari kullanıma izin verir; ancak kaynak kodunu paylaşma, telif bildirimlerini koruma, patent hakları ve türev eserlerin dağıtımı konusunda farklı yükümlülükler doğurur. Kısacası lisans dosyası, projenin sıkıcı aksesuarı değil, kullanım sözleşmesidir.

Devamı...
Kod kapsamınız yüzde 100 olabilir; ancak bu, testlerinizin gerçekten hata yakaladığı anlamına gelmez. Belki testler yalnızca satırları çalıştırıyor, sonuçları ise yeterince sorgulamıyordur. Mutasyon analizi, kaynak kodda kontrollü ve küçük hatalar oluşturarak test takımına şu eğlenceli soruyu sorar: “Bunu da yakalayabilecek misin?”
Devamı...
Bir hastanın ateşi, öksürüğü ve laboratuvar sonuçları bilgisayara girildiğinde makine nasıl teşhis önerir? Tıbbi yapay zekânın ilk yanıtı oldukça insansıydı: Uzman doktorların kullandığı kuralları açıkça yazmak. Günümüzde görüntüleri milyonlarca parametreyle inceleyen derin öğrenme modellerine ulaşmış olsak da kural tabanlı uzman sistemler; açıklanabilirlikleri, denetlenebilirlikleri ve kritik kararları standartlaştırmaları sayesinde hâlâ önemini koruyor.

Devamı...

Akıllı bir kamera düşünün: Karşıdan gelen yayayı fark etmek için görüntüyü kilometrelerce uzaktaki buluta gönderip yanıt bekliyor. İnternet kısa süreliğine yavaşlarsa kamera da düşünme molasına çıkıyor! Uç bilişim, veriyi üretildiği cihazda veya yakındaki bir ağ düğümünde işleyerek bu bağımlılığı azaltır. Böylece daha hızlı kararlar, daha düşük bant genişliği tüketimi ve daha güçlü veri gizliliği elde edilir.
Devamı...

Bir özelliği cuma akşamına yetiştirmek için katmanları atlamak, testleri ertelemek veya iki servisi geçici bir bağımlılıkla bağlamak oldukça caziptir. Üstelik sistem çalıştığı sürece kimse alarm zillerini duymaz. Fakat geniş ölçekli projelerde bu tavizler birikir; birkaç ay sonra küçük bir değişiklik bile onlarca dosyaya dokunan, günlerce test edilen bir operasyona dönüşür. Teknik borç tam olarak bu görünmeyen yavaşlamadır.
Devamı...

Bir bilgisayar için konuşma, yalnızca zaman boyunca değişen sayılardan oluşur. İnsan kulağı ise bu değişimleri doğrusal biçimde algılamaz: düşük frekanslardaki küçük farklara oldukça duyarlıyken yüksek frekanslarda daha geniş aralıkları benzer kabul eder. Mel-Frequency Cepstral Coefficients (MFCC), ses sinyalini bu algısal özelliğe göre sıkıştırarak konuşma tanıma algoritmalarının kullanabileceği kompakt öznitelik vektörlerine dönüştürür.
Devamı...