Yazılımcılar İçin Hafta Sonu Okumaları - Sezon #5 / Sayı #82(2022 Derlemesi)
Muhtemelen email'de yazının tamamını göremeyeceksiniz. Bunun için sağ üstteki "Online" butonuna veya en altta göreceğiniz "Tüm iletiyi görüntüle"(benzeri) butona tıklayabilirsiniz.
Merhabalar.
Aralık sonu — Ocak başı geçmiş yılın muhasebesi, değerlendirmeleri, özetleri, raporları, almanakları; gelecek senenin öngörüleri gibi içeriklerle doluyor. Ben de geçen 4 senede yaptığım gibi bu sene de biten yılın sayılarından bir derleme ile karşınızdayım(Bir nevi flashback’lerden oluşan düşük bütçeli bölüm. Hatta bu giriş kısmı bile yüzde 90 geçen seneki derlemeden kopya.) İlk başlık olan Yazılım Trendleri 2023 çalışması istisna elbette. Fark ettiğinizi umduğum üzere 2022 yılında da istediğim sıklıkta sayı çıkaramadım. Yıl boyunca toplamda 11 sayı çıkarmışım. Tabi yine de önceki seneye göre(6) gelişme var. Çok istediğim halde maruz kaldığım yoğunluk nedeniyle yeterince vakit ayıramadım. Ama verdiğim aralar ayları bulsa da bülteni devam ettirmek için direniyorum. Her neyse sadede gelelim.
Derleme yapmaya karar vermemin akabinde büyük bir özenle(kopyala-yapıştır marifetiyle) okumakta olduğunuz bu sayıyı hazırladım. Binâenaleyh bu sayı yeni bir sayı değil. Yani yeni bir sayı ama içeriği yeni değil. Bir nevi özel sayı(böyle daha havalı oldu sanki). Buradan da şu sonucu çıkarmamız gerekiyor:
Aşağıda geçen “bu hafta”, “geçtiğimiz çarşamba” vb. ibareler güncel değil, ilgili sayının yayımlandığı tarihle ilişkili ifadeler.
Şunu da ifade edeyim: Bu derlemede yer alan içerikler tamamen subjektif bir değerlendirme neticesi öne çıkardığım yazılar.
Buyursunlar…
Yazılım Dünyasında 2023 Trendleri
Bu sene dördüncü sayıya ulaşan “Yazılım Trendleri” raporunun 2023 versiyonu çıktı!
Ekosistemdeki uzmanlardan 30 kişiye 2023 yılı için yazılım dünyasında öngördükleri trendleri sordum, Tarık Çayır da bu çalışmayı pdf formatında e-kitap haline getirdi.
Önce Reklamlar
Şekil A’da gözüktüğü üzere 82 sayıdır işbu bülteni ve sık olmamak kaydıyla yaklaşık 10 yıldır blog yazıları yazıyorum. Bolca da blog okuyorum. Geçtiğimiz aylarda bu süreçte edindiğim tecrübeleri “Yazılımcılar için İçerik Üretimi ve Tüketimi” başlıklı online bir sunum halinde paylaştım. Kendim yazılı içerik üretimi ile iştigal ettiğim için sunumun -başlığı genel olsa da- yüzde 90'ı bu konuyla alakalı oldu.
İlginizi çektiyse buradan veya direkt aşağıdan sunumun videosuna ulaşabilirsiniz.
Derin JavaScript
Oğuz Kılıç, bir kez daha temel(fundamental) bir konuyu ele alıp enine boyuna anlattığı bir seriye başlamış: Javascript uygulamalarında performans. İlk yazı JavaScript’te Concurrency, -geçen haftaların popüler konusu- Garbage Collection, bellek yönetimi, memory leak, Server Side Rendering gibi mühim başlıkları içeriyor.
Onur Dayıbaşı, ürünler ve kütüphaneler başlıklı serisinde kaynak kodu üzerinden jQuery’nin nasıl çalıştığını anlatmış.
Göç Vakti
Rıdvan Nuri Göçmen, Sahibinden’de “mağaza yönetim takımı”nın monolit mimariden mikroservis mimarisine geçişini anlattığı bir seriye başlamış. İlk yazıda planlama aşaması(dönüşüm stratejisi, bounded context’lerin belirlenmesi vb.) ve dönüşümün başlangıcından bahsetmiş.
Serkan SAKINMAZ, monolit mimariden olay tabanlı(event driven) mikroservis mimarisine geçişi anlatmış.(İng)
Orhan Tuncer, bir örnek üzerinden model odaklı tasarımdan DDD(Domain Driven Design)‘ye dönüşümü anlatmış.(İng)
Biraz Daha Mimari
Huseyin Kutluca, yazılım mimarileri hakkındaki yazılarına durmaksızın devam ederek temiz mimari(clean architecture) ile bir servis geliştirmeyi, C4 yaklaşımı ile mimari gösterimini ve olay tabanlı mimarileri(event driven architecture), olay tasarım kalıplarını anlatmış.
Cem Başaranoğlu, mikroservis mimarilerde kullanılan mesajlaşma yaklaşımlarından bahsettiği bir seriye başlamış.(İng)
yiğit darçın, mikroservis mimaride yaşadığı zorlukları ve bunlardan çıkardığı dersleri yazmış.(İng)
Ezran Bayantemur, React‘te “best practice”lere uygun proje mimarisi oluşturmayı anlatmış.
Yapay Zeka Aleminden Havadisler
Başak Buluz Kömeçoğlu, geçtiğimiz aylarda açıklanan Ulusal Yapay Zeka Stratejisi‘ne dair notlarını paylaşmış.
Yavuz Kömeçoğlu, Ulusal Yapay Zeka Stratejisi ile ilgili Twitter paylaşımları üzerinde bir duygu(sentiment) analizi yapmış.
Ayyüce Kızrak, Ph.D., Yapay Zeka’da önyargıyı anlattığı programdan notlarını paylaşmış.
Fatih Cagatay Akyon, görüntülerde uzak mesafedeki nesneleri tanımlama ve segmente etmek için geliştirdikleri açık kaynak bilgisayarlı görü kütüphanesi SAHI(Slicing Aided Hyper Inference)’den bahsetmiş.(İng)
İrem Kömürcü, Makine Öğrenmesi’nde sınıflandırma modelinin performansını yorumlamak için kullanılan Confusion Matrix’i anlatmış.
Hasan Ersan YAĞCI, makine öğrenmesinde kategorik modelleri sayısallaştırmak için kullanılan label encoding ve one hot encoding yöntemlerinden bahsetmiş. Diğer bir yazısında ise makine öğrenmesinde dengesiz veri probleminden ve buna karşı kullanılabilecek yöntemlerden bahsetmiş.(İng)
M. Akif Bıyıklı, feature engineering(özellik mühendisliği?) ile Hitters isimli bir veri setini kullanarak uçtan uca makine öğrenmesi projesi geliştirmeyi anlatmış.(İng)
Rust Gele
Sektörün yılmaz öğrenicisi ve öğreticisi Burak Selim Şenyurt, bu kez Rust‘a el atmış. Rust Web Programming kitabının bir bölümünden -genişçe- çıkardığı notları paylaşmış.
Dovlet Ataballyyev, Rust dilinin Linux Kernel’ında kullanımına dair gelişmelerden ve tartışmalardan bahsetmiş.
Test Yazmak ya da Yazmamak
Sedat Kapanoglu, yazdığı Street Coder kitabından daha az test yazmayı sağlayan(teste ihtiyaç bırakmayan) stratejilerden bahsettiği bir bölümü paylaşmış.(İng)
Ömer Korkmaz, test yazmayı istemememizin sebeplerinden ve bunları nasıl aşabileceğimizden bahsetmiş.
Pull Request ve Code Review Adabı
Açık kaynağa katkı yapmak isteyenlerin veya Git kullanan ve commitleri kontrol altında tutmak isteyen yazılım takımlarının önemli uğrak noktaları: pull request ve code review süreçleri.
Erhan Yakut, bu süreçlerde yaşadığı tecrübeler üzerinden code review ve (açık kaynak projelere) pull request açma hakkındaki tavsiyelerini paylaşmış.
M. Kerem Keskin, şirket içi PR süreçlerinde uyguladıkları pratikleri yazmış.
Mert Akkaya ise Code Review sürecinin nasıl yapılmaması gerektiğini yazmış.
Micro Frontends Tecrübeleri
Trendyol GO ekibi, monolitik React uygulaması olarak geliştirilen uygulamayı DDD yaklaşımına geçiş kapsamında Webpack Module Federation kullanarak Micro Frontends mimarisine dönüştürmüş. Sercan Eraslan, bu sürecin karar, Webpack Module Federation seçimi ve PoC aşamalarını; Doğan Öztürk ise bu sürecin canlıya geçiş deneyimini anlatmış.
Engin Üstün, micro frontends yaklaşımında farklı modüllerin CSS’lerinin birbirine ezmemesi için kullandıkları yöntemden bahsetmiş. (İng)
Yapay Zeka Alemi
Ömer SAVAŞ, bu aralar yapay zeka ve derin öğrenmeye merak salmış. Akabinde bu süreçte öğrendiklerini 6 yazılık geniş bir seri halinde bizlerle paylaşmış.
Mehmet Akturk, Ensemble Learning yöntemleri(Bagging & Boosting) hakkında 6 yazılık bir seri kaleme almış. (İng)
Ayyüce Kızrak, Ph.D., Veri(doğruluğunu artırma) Odaklı Yapay Zeka yaklaşımından bahsetmiş.
“Buluta Doğru”
Orhun ERDEM, Banabi uygulamasını AWS servislerini kullanarak buluta taşıma serüvenlerini anlatmış. (İng)
yiğit darçın, özellikle yazılımı yeni öğrenenler için küçük bir projeyi alıp pipeline kurarak buluta deploy etmeyi(geliştirme, ci/cd, test, deploy vs) içerecek şekilde yayına almayı ve bunun getirilerini anlatmış.
Ufuk Aytaş, Azure’un pek çok derde(authentication, caching, monitoring, analytics…) deva olarak sunduğu API yönetim servisi Azure API Management hakkında bir seriye başlamış
Performans ve Ölçekleme
Abdullah KARATEKIN, dağıtık sistemlerde yük dengelemeye ve ölçeklemeye yardımcı olan Consistency Hashing kavramından bahsetmiş. (İng)
Furkan Topaloğlu, memoization kavramını ve çalışma mantığını anlatmış.
Mustafa Batuhan Bayoglu, React’te memoization kullanımını anlatmış. (İng)
Yiğit At, Elasticsearch’te index performansını nasıl optimize ettiklerini anlatmış. (İng)
Hüseyin Demir, PostgreSQL versiyonunu neredeyse sıfır hizmet kesintisiyle nasıl upgrade ettiklerini anlatmış. (İng) Diğer bir yazısında ise PostgreSQL’de okuma hızını(SELECT sorgularını) etkileyen faktörleri yazmış.
Fatih Kahveci, hayata tutunmaya çalışan PHP’de(tamam tamam vurmayın :)) yüksek trafik alan uygulamaların optimizasyonu için kullanılan kütüphanelerden bahsetmiş. Diğer bir yazısında ise Redis’te Lua scripti çalıştırmayı anlatmış.
Deniz AYDIN, Trendyol’da veri merkezini nasıl ölçeklediklerini anlatmış. (İng)
Kaliteli Kod
Kaliteli yazılım deyince aklıma ilk olarak temiz, rahatça düzenlenebilir, genişletilebilir, test edilebilir kod; tasarım prensipleri ve desenleri, dokümantasyon gibi kavramlar geliyor. Bu konularda güzel yazılara rast geldim.
Recep İnanç, Martin Fowler’ın Refactoring kitabından notlarını paylaştığı bir seri kaleme almış. Diğer bir yazısında ise teknik kitapları “efektif” okuma konusunda tavsiyelerini yazmış.(İng)
Cihat Solak, Dependency Inversion prensibi hakkında 3 yazılık bir seri kaleme almış.
Emre Tanriverdi, tasarım desenleri hakkında yazdığı ve gerçek hayat örnekleriyle bezediği yazıları toparlayıp tek yazı halinde paylaşmış. (İng)
Kalitenin Temini ve Muhafazası için Test
Kaliteli yazılımın bir özelliği olarak test edilebilir demiştim. Birim testi ve entegrasyon testi kodun kalitesi için önemli bir etken iken ortaya çıkan yazılımın kalitesini muhafaza etmek için de QA ekiplerince biraz daha üst seviye yapılan testler önem kazanıyor.
Evren Pehlivan, .NET 6‘da mevcut bir veritabanı yerine SQLite kullanarak entegrasyon testleri oluşturmayı anlatmış. (İng)
Sevilay Ağıl, Trendyol’da “Sipariş Yönetim Sistemi”nin test mimarisini anlatmış. Yasin Onur Gürbüz ise bu test yapısını nasıl izlediklerini(monitoring) anlatmış. Feyza Dayan, Android International takımı olarak uyguladıkları test pratiklerini yazmış.(İng). Hazel Turan İnel ise bu global uygulamanın testlerinde karşılaştığı zorlukları anlatmış.
Tecrübeler, Vaka Çalışmaları
Hüseyin Polat Yürük, büyüyen bir startup’ta VP of Engineering olarak geçirdiği bir yılı; yaptığı hataları, karşılaştığı problemleri, bunları nasıl aştığını ve bunlardan çıkardığı dersleri genişçe yazmış.
Abdullatif Topçu, monolitik bir uygulamayı mikroservis mimariye nasıl dönüştürdüklerini ve konteynerlaştırdıklarını anlatmış.
Blockchain Dünyası
Mithrandir, Blokzinciri teknolojisini, işleyişini, çözdüğü ve uğraştığı problemleri genişçe yazmış. Teknolojiyi tanımak isteyenler için rehber niteliğinde bir yazı.
Turan Sert, Blokzincirler hakkında hazırlanan bir geliştirici raporunu inceleyerek farklı blokzincirlerinin geliştirci ekosistemlerinin değişiminden bahsetmiş.
İsmail Emin Erdoğdu ve Alim Şahin, Blokzinciri ağlarında kullanılan konsensüs yöntemlerini anlatmış.
Elif Hilal Umucu, farklı blokzinciri ağlarının mesajlaşabilmesini ve birlikte çalışabilmelerini sağlamayı vaat eden CCIP protokolünü anlatmış.
Uygulama Güvenliği
Ziyahan Albeniz, SOCRadar’ın Türkiye saldırı yüzeyleri(Attack Surface) hakkında hazırladığı rapordan dikkatini çeken noktaları paylaşmış.
Berkay Şen, zafiyet içeren bir sisteme nasıl sızılabileceğini örnek bir saldırı üzerinden anlatmış.
Message Broker’ları Daha İyi Tanıyalım
Haydar Can Kubilay Gümüş, Kafka‘yı anlattığı seride biraz daha detaylara dalarak Producer yapısını anlatmış. (İng)
Hakan Yalıtekin, RabbitMQ’ya oldukça geniş bir giriş yapmış ve örneklerle tüm Exchange türlerini anlatmış
Huseyin Dursun, asenkron iş akışı tasarlamadan ve RabbitMQ’daki exchange tiplerinden bahsetmiş.(İng)
Dağıtık Uygulamalar
Faruk Terzioğlu, bir servisten birden fazla instance oluşturup bunu yönetmek için kullandığı service discovery ve API Gateway uygulamasından bahsetmiş. Servis olarak bir Bitcoin node’u(bitcoind) ayağa kaldırdığı örnekte yönetim için KrakenD ve etcd‘yi kullanmış.
Malik Masis, dağıtık yapılarda eşzamanlı veritabanı okuma yazma işlemleri için kullanılan lock mekanizmalarını anlatmış.
CQRS
Engin UNAL, kullanımı, artıları-eksileri ile CQRS tasarım kalıbını anlatmış.
Emre Odabas, CQRS desenini kullandıkları ve yazma için Couchbase, okuma için ise ElasticSearch kullandıkları projede bu 2 veritabanı arasında oluşan senkronizasyon problemini ve bu problemi nasıl aştıklarını anlatmış.(İng)
Mehmet Sezer, özellikle CQRS desenini uygulayan mimarilerde kullandıkları ve açık kaynak olarak paylaştıkları Command Bus çözümü kediatR’ı anlatmış.(İng)
Sistem Tasarımı
Señorita Developer sistem tasarım mülakatları(system design interview) hakkında tükettiği farklı kaynaklardan aldığı notları paylaştığı bir seriye başlamış.(İng)
Engincan Veske, System Design Interview kitabından paylaştığı notlara Rate Limiter konusuyla devam etmiş.
Mikroservisler
Adem Olguner, MassTransit, Azure Service Bus ve ASP.NET Core 5.0 kullanarak bir mikroservis uygulaması oluşturmayı detaylıca anlatmış.
Mesut Yakut, monolit mimariden mikroservis mimarisine geçiş sürecinde teknik olmayan ama gerekli dönüşümleri yazmış.(İng)
Blockchain
Orientus Prime, kuşbakışı(ama geniş çerçeveden) Blockchain teknolojilerini anlatmış.
Mithrandir, Blockchain teknolojisindeki ölçekleme problemlerine karşın kullandığı parçalama(sharding) algoritmalarıyla çözüm vaat eden Near projesini anlatmış.
Eray USTA, Solidity‘ye giriş için oldukça geniş kapsamlı bir yazı kaleme almış.
Uygulama Güvenliği
Anil Ozturk, National Security Agency(bildiğimiz NSA) tarafından hazırlanan konteyner mimarisinde güvenlik konusunda hazırlanan Kubernetes Hardening rehberini çevirip seri olarak paylaşmış.
Çağdaş Alagöz, geçtiğimiz aylarda Java geliştiricilerin başını çok ağrıtan log4j‘de ortaya çıkan zafiyeti ve çözümünü anlatmış.(İng)
Makine Öğrenmesi
Fethi Tekyaygil, Makine Öğrenmesinde sınıflandırma problemlerinin çözümü için neden Lineer Regresyon yönteminin tercih edilmediğini anlatmış. Diğer bir yazısında ise modelleri eğitirken insan yanlılığı ve devreye giren önyargılar nedeniyle modelin performansını düşüren durumlardan bahsetmiş.
Barış Hasdemir, Trendyol’da yoğun talep gelen Slack kanallarına gelen mesajları makine öğrenmesi ile analiz edip doğru birime/kanala yönlendiren bir Slack botu nasıl yazdıklarını anlatmış.(İng)
Test ve Otomasyon
Tarik Kilic, birim testlerin sağlıklı olmasını ve gerçekten kodları kapsamasını teşvik eden mutasyon testlerini Spring Boot‘ta bir örnek üzerinden anlatmış.(İng)
Hakan Karabulut, .Net’te bir örnek üzerinden mutasyon testleri eklemeyi anlatmış.
hüseyin nurbaki, NestJS uygulamasını Dockerize edip Kubernetes üzerinden deployment oluşturduğu 4 yazılık bir seri kaleme almış.(İng)
Gökhan Gökalp, Azure hizmetlerini(Azure Functions, Logic Apps, Azure Computer Vision API) kullanarak bir OCR(görselden metin okuma) akışı oluşturmayı anlatmış.
Yine Reklamlar
4 sene kadar önce Redis‘te Master-Replica(o zamanki ismiyle Slave) ve Sentinel yapılarıyla yüksek erişilebilir(highly available) dağıtık mimariler oluşturmayı anlattığım 2 yazılık bir seri yayımlamıştım.
Bu kez -İngilizce olarak- güncel Redis versiyonuyla, Docker kullanarak ve aynı konuyu daha geniş anlatmayı planladığım bir seriye başladım. İlk yazıda Master-Replica yapısını anlattım.(İng)
Dağıtık Uygulamalar
Hazır dağıtık uygulamalar demişken ilgili başka yazılara da göz atalım:
Hüseyin Demir, dağıtık veritabanlarında yazılan verinin yeterli sayıda node’a yazılmasını amaçlayan durability kavramından ve Couchbase‘de uygulamasından bahsetmiş. Diğer bir yazısında ise PosgreSQL’de yüksek erişilebilirlik için kullanılan farklı HAProxy mimarilerinden ve farklı senaryolardaki kıyaslamalarla pgbouncer aracının avantajlarından/dezavantajlarından bahsetmiş.
Bilal Dinç, dağıtık uygulamalarda olayların gönderilip alınmasını takip etmeyi ve yönetmeyi sağlayan .NET Standard tabanlı CAP kütüphanesinden ve görsel arayüz sağlayan dashboard’undan bahsetmiş.
Erdi Gürbüz, mikroservis kullandıkları dağıtık bir uygulamada bir kaydı bir intance’ın işlemesi için MongoDB’nin ShedLock kütüphanesiyle nasıl dağıtık kilit(distributed lock) mekanizması oluşturduklarını anlatmış.
Eren Yılmaz, Redlock algoritması ve Redis kullanımı ile dağıtık kilit(distributed lock) uygulamasını anlatmış.
Derin Blockchain
En meşhur dağıtık teknolojilerden olan Blockchain ile devam edelim:
Mithrandir, Blockchain ağlarında işlemleri ağ dışında gerçekleştirip sonuçları ağa ileterek performans ve veri kazancı sağlamayı vaat eden Rollup mekanizmalarını detaylıca anlatmış. Diğer bir yazısında ise oldukça geniş bir şekilde Blockchain teknolojisinde kullanılan cebirsel şifreleme yöntemlerini anlatmış.
Elif Hilal Umucu, Blockchain teknolojisi ve kripto paraların çözmeye çalıştığı asıl problemleri, çözüm yöntemlerini ve karşılaştıkları zorlukları anlatmış.
Derinlemesine Başka Şeyler
Murat Çabuk, derinlemesine Git‘i anlattığı serinin 3. yazısında Git’te geçmişi değiştirmeyi sağlayan interaktif Rebase özelliğini detaylıca anlatmış.
şuayip üzülmez, genişçe Python’da metaprogramlamayı anlatmış.
Çağlayan DÖKME, C++’ta Singleton tasarım deseninin uygulanışını incelemiş.(İng)
Eşzamanlılık(Concurrency)
Ayşe Nur Bakırcı, iOS‘te eşzamanlı(concurrent) çalışan uygulamalar geliştirmek için kullanılan GrandCentralDispatch(GCD) ve operasyon yapılarını anlatmış.
Hüseyin Kaya, eşzamanlılık(concurrency) kavramından, Go’daki eşzamanlı programlama için kullanılan Goroutine’lerden ve bunların kullanımında dikkat edilmesi gereken kritik noktalardan bahsetmiş.(İng)
Hasan Kadir Demircan, Java’da eşzamanlılığı(concurrency) anlattığı bir seriye başlamış. İlk yazıda Atomic yapısını ve Concurrent Collection’ları anlatmış.(İng)
Bir CTO’nun Tecrübeleri
Oğuzhan Yılmaz, son 3 yılda CTO olarak edindiği tecrübeleri, acısıyla tatlısıyla yaşadıklarını ve bunlardan çıkardığı dersleri yazmış.
ElasticSearch ve Şürekası
Metin tabanlı sorgulama için vazgeçilmez teknolojilerden ElasticSearch ve birlikte kullanıldığı teknolojiler hakkında bolca yazıya denk geldim:
Cemal Ünal, ElasticSearch‘te kaybolan verilerin Snapshot’tan nasıl geri yüklenebileceğini anlatmış.(İng)
Berkay Yalçın, ElasticSearch’te eş anlamlı kelimelerin arama sonuçlarına dahil edilmesi için kullanılan yöntemleri anlatmış.(İng)
Tuğrul Bayrak, ElasticSearch kullanırken yaptıkları hataları ve bunları nasıl aştıklarını anlatmış.(İng)
Furkan Özmen, Java, Kotlin, Spring Boot, Kafka, PostgreSQL ve ElasticSearch gibi teknolojileri kullanarak oluşturduğu projeyle CQRS desenini anlatmış.
Nazelin Özalp, MongoDB ve PostgreSQL loglarını Filebeat ve Logstash kullanarak ElasticSearch’e aktarmayı anlatmış.(İng)
onur ozan Korkmaz, MSSQL veritabanındaki verileri ELK stack(ElasticSearch-Logstash-Kibana) ile görselleştirmeyi anlatmış.
Soner Paycı, log4net kullandıkları mevcut bir backend servisin loglama kısmına ElasticSearch — Kibana — Filebeat stack’ini nasıl entegre ettiklerini anlatmış.
Bir Tutam Kubernetes
Ferhat Candaş, yapılan deployment’ı yavaş yavaş tüm kullanıcılara yansıtmayı sağlayan Canary Deployment yaklaşımını Kubernetes ile ile uygulamayı anlatmış.
Erkan Şirin, Kubernetes‘te bazı pratik bilgiler ve komutlara ait notlarını paylaşmış. Diğer bir yazısında ise makine öğrenmesi modellerinin canlı ortamlara taşınması ve bu süreçlerin otomatize edilmesiyle ilgilenen MLOps rolünü anlatmış.
Bu Algoritmalar Gerçek Hayatta Ne İşimize Yarayacak?
Can Bayar, gerçek hayatta kullandığımız algoritmaları anlattığı “Algorithms in Context” diye bir seri kaleme almış. Serinin 8. yazısında karıştırma(rastgele karışık sayı/sayı listesi) üretme algoritmalarının nasıl çalıştığından bahsetmiş. 9. yazısında ise otomatik metin tamamlama algoritmalarının nasıl çalıştığını anlatmış.(İng)
Serinin önceki yazılarına da göz atmanızı öneririm.
Domain Driven Design
Son yıllarda popülaritesi oldukça artan bir yaklaşım Domain Driven Design. Özellikle iş kurallarının kompleks hale geldiği uygulamalarda çözüm sunabiliyor. Tabi başta veritabanı odaklı düşünmeyi bırakıp domain ve iş kuralları odaklı düşünceyi benimsemek gerekiyor.
Cem Süsal, Domain Driven Design yaklaşımını uygulamadan önce domain odaklı düşünmenin öneminden bahsetmiş.(İng)
Emre Altun, Domain Driven Design yaklaşımının ve Event Sourcing yönteminin avantajlarından bahsetmiş.(İng)
Eşzamanlılık
Mehmet Can Tas, Go‘da eşzamanlı programalamayı(concurrency) anlattığı serinin 2. yazısında Go Scheduler ve Goroutine’lerin nasıl çalıştığını anlatmış.
Ali GÖREN, eşzamanlılık(concurrency) kavramından ve Go’da concurrent uygulama geliştirmekten bahsetmiş.
Hasan Kadir Demircan, Java’da eşzamanlı programalamayı(concurrency) anlattığı serinin 2. yazısında Executer, Callable ve Scheduled Executer Service yapılarını anlatmış.
Göç Hikayeleri
Gerçek tecrübelere ait, yaşanmışlıklar içeren vaka çalışmalarını severek okuyorum ve elbette severek sizlere aktarıyorum. Okuyalım o halde:
Ali Yetkin, ElasticSearch kullandıkları arama motorunu ölçeklendirebilmek için Kubernetes‘e taşıma süreçlerini hazırlık ve araç seçiminden başlayıp yaşadıkları zorluklarla birlikte adım adım anlatmış.(İng)
Sevcan Doğramacı, ilişkisel veitabanından Couchbase’e verileri denormalize edip taşımayı anlatmış.(İng)
Beytullah Gurpinar, MySQL’den MongoDB’ye gerçekleştirdikleri veritabanı göçünün hikayesini, bu süreçteki kazanımlarını ve çıkardıkları dersleri anlatmış.(İng) Diğer bir yazısında ise SaaS ürün geliştirenler için tavsiyelerini paylaşmış.
Taylan Kasap, yenilemek istedikleri legacy web uygulaması için seçtikleri yöntemi ve seçim nedenlerini yazmış.(İng)
Emre Tanriverdi, bir uygulamanın yeni versiyonunu kullanıcılara peyderpey açmayı sağlayan Blue-Green ve Canary deployment yöntemlerini ve ikisini bir arada nasıl kullandıklarını anlatmış.(İng)
Yeni Başlayanlara Tavsiyeler
Elif Hilal Umucu, Smart Contract developer olma yolculuğundan bahsetmiş.
Onur Dayıbaşı, frontend alanında ilerlemek isteyenler için kendi ürettiği içerikler üzerinden bir roadmap hazırlamış.
Uygulamalarda Veri Tutarlılığı
Nil Seri, mikroservis mimarilerde transaction yönetimi için kullanılan tasarım desenlerinden bahsetmiş. Diğer bir yazısında ise Java dünyasında popülerleşen sanal makine(VM) çözümü GraalVM‘i anlatmış. (İng)
Rohat Şahin, Outbox tasarım desenini ve Couchbase ile uygulamasını anlatmış.(İng)
Alper Baysal, programlama esnasında veriye erişimin ve veri güncellemelerinin kontrolü için kullanılan kilit(lock) mekanizmalarından bahsetmiş.(İng)
Dolu Dolu Seriler
Ali Osman Menekse, gün geçtikçe daha kompleks hale gelen frontend uygulamaları için mimari tasarım yapmayı anlattığı bir seriye başlamış.
Şuayb Şimşek, Spring Boot ve Hyperledger Fabric kullanarak Kubernetes üzerinde çalışan bir Blockchain uygulaması yazmayı anlattığı -an itibariyle 6 yazıya ulaşan- bir seri kaleme almış.(İng)
OnurKiris, Unity‘de gelişme yaparken kullanılan tasarım desenlerini anlattığı bir seri kaleme almış. Serinin 5. yazısında sonlu durum makinelerini(finite state machine) anlatmış.(İng)
Can Bayar, “Algorithms in Context” başlıklı önemli serisinin 10. yazısında birbiriyle bağlantısı olmayan veri ağaçlarını(tree) ifade eden ayrık küme(disjoint) veri yapılarını ve ağaçları birleştirmek için kullanılan algoritmalardan bahsetmiş.(İng)
Muhammet Nusret Özateş, Python’da iyi yazılım tasarımı pratikleri hakkında bir seri kaleme almış. Tasarım prensiplerinden, defansif programlamadan ve Design by Contract yaklaşımından bahsetmiş. (İng)
Uygulamaları İzleme
İsmail DENİZ, dağıtık uygulamaları izlemek için kullanılan bazı tracing araçlarından bahsetmiş ve birbiriyle kıyaslamış.
Furkan Güngör, modern yazılım sistemlerini izlemek için kullanılan OpenTelemetry ve SigNoz araçlarından bahsetmiş.
Sefa Pehlivan, uygulamalarındaki HTTP trafiğini nasıl izleyip görselleştirdiklerini anlatmış.
Hakan Güzel, loglama konusunda genelgeçer yöntemlerden ve doğru uygulamlardan bahsetmiş.(İng)
Bulutlarda Yazılım
Cihat Solak, Azure’un aynı anda dosya depolama ve paylaşım, kuyruk yapısı ve aynı zamanda NoSQL veritabanı hizmetleri sunan Azure Storage servisini anlattığı bir seriye başlamış.(1, 2)
Eren Yılmaz, kullandıkları Microsoft SQL Server hizmetini AWS‘den GCP(Google Cloud Platform)’ye minimum kesinti ile nasıl taşıdıklarını anlatmış.
Test
Oğuzhan Erdem, test kapsamını artırmak için geliştirdikleri Automation Test Analyzer aracından bahsetmiş.(İng)
Gülsen Keskin, Flutter ile entegrasyon testleri yazmayı anlattığı bir seri kaleme almış.(1, 2)
API Güvenliği
Anil Ozturk, web uygulamaları için güvenlik açıklarını takip ve analiz edip indeksleyen OWASP‘ın API güvenliği için derlediği ilk 10 açığı ve korunma yollarını anlatmış.
NoSQL Veritabanlarından
Gizem Saruhan, ElasticSearch‘ü sabote ettikleri farklı senaryolar üzerinden Kaos mühendisliğini anlatmış.
Furkan Karaoğlu, kuşbakışı Couchbase’i anlatıp .NET ile nasıl kullanıldığını göstermiş.
Mert Kağan Topal, ElasticSearch’te indeksleri otomatik yönetmeyi sağlayan Index Lifecycle Management’ın nasıl yapılandırıldığını anlatmış.(İng)
Saygı Duyulası CTO
Kıvılcım Hindistan, geçtiğimiz yıllarda kaleme aldığı bir yazıda “bir CTO gerekirse oturup kod yazacak” muhabbetinden başlayarak saygı duyulan veya saygı duyulmayan bir CTO’nun nasıl olabileceğini irdelemiş.
Pair Programming
Pair programming, doğru yapıldığında ekiplerin verimini artıran ve silolaşmayı azaltan bir sonuç veriyorken hatalı uygulanmasıyla zaman kayıplarına ve ekip içi çatışmalara neden olabilecek bir pratik.
Suat KÖSE, pair programing’den yüksek verim almak için neler yapabileceğimizden bahsetmiş.
Bellek Yönetimi
Gökhan Gökalp, Kubernetes‘te üzerindeki Windows ve Linux konteynerlarında çalışırken çöken veya bellek problemleri yaşayan uygulamaların hata tespiti için nasıl dump alınacağını anlatmış.
Furkan Güngör, .NET’te Boxing-Unboxing kavramlarından ve gerçekleştiği durumlarda performansa etkisinden bahsetmiş.
Yazılımcılar İçin Şahıs Şirketi Kurma(Sponsorlu)
Yazılımcıların belirlediği beklentileri göz önünde bulundurarak, firmalara yazılımcı değil yazılımcılara firma bulan nevi şahsına münhasır startup TalentGrid(dilerseniz şuradan benim selamımla gidip profilinizi oluşturabilir ve beklentilerinizi girebilirsiniz.) blogunda yayımlanan bir yazıda yazılımcılar için şahıs şirketi kurma hakkındaki detaylar anlatılmış.
Konteynerleştiremediklerimizden misiniz?
Akın IŞIK, Go ile yazdığı SimpleApp isimli projenin geliştirme sürecini uçtan uca anlattığı(MongoDB entegrasyonu, API Gateway entegrasyonu, Dockerize etme, Kubernetes ile deploy, service discovery eklenmesi…) bir seriye başlamış.
Barış Tutakli, Repository ve Unit of Work gibi tasarım desenleri kullanarak geliştirdiği .NET 6 API uygulamasını Dockerize etmeyi anlatmış.(İng)
Dağıtık Sistemler ve Veritabanı
Murat Çabuk, detaylıca MongoDB anlattığı 10 yazılık bir seri kaleme almış. İlk yazısında dağıtık sistemlerde veri tutarlılığını ve doküman tabanlı veritabanlarının özelliklerinin kıyaslamasını yazmış.
Sarav Asiye Yiğit, veritabanını Kubernetes üzerinde çalıştırma senaryolarını ve bu konuda göz önünde bulundurulması gereken önemli noktaları anlatmış.
Kuşbakışı
Hakan Eröztekin, kuşbakışı ama biraz genişçe Kubernetes‘i anlatmış.(İng)
Engin UNAL, Solidity’yi anlattığı güzel bir seriye başlamış.
Dilaver Demirel, Go dilini öğrenmeya başlamış ve Java dünyasından gelen bir yazılımcı gözünden kuşbakışı anlattığı bir seri kaleme almış.
Biraz daha Go
Oğuzhan Yılmaz, bir kısmı fazla bilinmeyen oldukça kullanışlı Go ipuçları paylaşmış.
Furkan Samaraz, IPFS protokolünü kullanarak Go ile merkeziyetsiz dosya saklama uygulaması geliştirmeyi anlatmış. Bir diğer yazısında ise Go‘da bellek yönetimi ve çöp toplama(Garbage Collection) mekanizmasını anlatmış.
Kod Kalitesi ve Test
Osman Başkök, Trendyol GO uygulaması için oluşturdukları otomatize test akışını anlatmış.(İng) Doğan Öztürk de front-end uygulamasının test süreçlerini anlatmış.(İng)
Pınar Koçak, code review süreçleri için bir kontrol listesi(checklist) paylaşmış.(İng)
Mimari ve Tasarım Desenleri
Metin Barkın Narin, Mikroservis mimarilerde karşılaşılan problemlerin çözümü için bazı stratejilerden bahsetmiş.(1, 2)(İng)
Yusuf Yılmaz, Java ile CQRS deseninin uygulanmasını Docker, Elasticsearch, RabbitMQ, Spring ve MySQL gibi teknolojileri kullandığı bir örnek üzerinden anlatmış.
Damla Çim, Swift örnekleri üzerinden SOLID prensiplerini anlatmış.(İng)
Performans ve Ölçeklenebilirlik
Eren Arslan, Yasin Kızılkaya ve Yusuf Saglam, 2 milyondan fazla ürün içeren bir Excel raporu saniyeler içerisinde hazırlamak için nasıl ölçeklenebilir ve hataya dayanıklı bir sistem kurduklarını anlatmış.(1, 2, 3)(İng)
Mustafa Emre Başar, Java uygulamlarında hata toleransını(fault tolerence) artırmayı sağlayan Resilience4j kütüphanesinden bahsetmiş.
JavaScript Uygulamalarında Performans
Oğuz Kılıç, daha önce JavaScript uygulamalarının performansı üzerine süper akıcı bir yazı yazmıştı ve bu bültende yayımlamıştık. Ben bu tür low level içeriklerin direkt mühendislik kasına gittiğini düşünüyorum. Şimdi serinin devamı olan ikinci yazıyı yazmış ve üçüncüsünü yazmayı vaadetmiş. Özellikle frontend tarafında çalışan arkadaşlar için şiddetle tavsiye ediyorum.
Tasarım Desenlerini Anlamak
Tasarım desenleri çoğunlukla önemi ve kullanma gerekliliği konusunda hemfikir olduğumuz ama rahatlıkla unuttuğumuz ve kullanamadığımız yöntemler olabiliyor. Murat Çabuk, bu konuya kafa yorarak tasarım desenlerini neden aklımızda tutamadığımızı irdeleyip bunu nasıl aşabileceğimizi anlattığı 3 yazılık ama geniş bir seri kaleme almış.
Kısa Kısa
Engincan Veske, System Design Interview kitabından çıkardığı notları bir seri halinde paylaşmaya başlamış. Bir diğer yazısında ise C#‘ta method chaining(zincirleme metodlar?) oluşturma yöntemlerinden bahsetmiş.
Yakup Çilesiz, tarayıcıda birden fazla kaynaktan gelen medyaları(online toplantı gibi) birleştirmek için WebRTC Insertable Streams API kullanımından bahsetmiş.(İng)
Çağlayan DÖKME, C++’ta geliştirme yaparken binary çıktının bellek boyutunu aşmasını ve bu problemi nasıl çözdüğünü anlatmış.(İng)
Oguzhan Ergun , Go ile BFF(Backend For Frontend) desenini, REST servisleri ve gRPC protokolünü kullanarak mikroservis mimaride bir uygulama geliştirmeyi anlatmış.(İng)
Betul İnce, Apache Solr kütüphanesine bir hatayı düzeltmek için yaptığı katkıyı ve süreci anlatmış. (İng)
Alper Güven, SOLID prensiplerini anlattığı oldukça keyifli bir seriye başlamış. İlk yazısında Single Responsibility prensibini anlatmış.
Emre MERT, yazılıma yeni başlayanlara/başlamaya çalışanlara önerilerini yazmış.
Furkan, bir lise öğrencisi olarak 16 yaşında ilk işinde nasıl çalışmaya başladığını anlatmış.
Onur Dayıbaşı, web uygulamalarında routing hakkında 5 yazılık bir seri kaleme almış.
Burak Selim Şenyurt, son dönemdeki gözdesi Rust’ı detaylı yazılarla anlatmaya hız kesmeksizin devam ediyor.
Hamit SEYREK, “ileri seviye yazılım geliştirici” olmak için öğrenilmesi gerekenleri yazdığı güzel ve uzun bir seriye başlamış.
Ferhat Özkan, CAP(consistency, availability, partition tolerance) teoremini, dağıtık sistemleri ne kadar kapsadığını ve güncelenmiş versiyonu denilebilecek PACELC teoremini yazmış. (İng)
Ayşe Nur Bakırcı, iOS‘te eşzamanlılık(concurrency) yönetimini anlatmış.
Mehmet Can Tas, eşzamanlılık(Concurrency) ve paralel çalışma(Paralellism)dan başlayarak Goroutine ve Go Scheduler’ı anlattığı bir seriye başlamış.
Fatih Küçükkarakurt, bir React projesinin planlanmasını, geliştirme aşamasını; yayımlama, test, performans stratejilerini ve bütün bu aşamalarda kullanılan araçları anlatmış. (İng)
Ogi Ergun, Go, React ve gRPC-Web ile pratik şekilde mikroservis mimarisinde Web uygulamaları oluşturmayı anlatmış. (İng)
Serkan SAKINMAZ, Kubernetes hakkında workshop uygulaması tarzında geniş bir yazı yazmış. (İng)
Salih Cantekin, Dapper ve Entity Framework arasında yaptığı detaylı kıyaslamaları paylaşmış.
Akif Safa Yıldız, frontendde atomik tasarım yaklaşımını(atomic design system) anlatmış. (İng)
Erman Terciyanlı, Redis’te milyonlarca key ile çalışmak için kullandıkları Hash Structure yapısından bahsetmiş. (İng)
Betul, Sticky Session’ları Redis ve load balancer kullanarak hibrit olarak nasıl yönettiklerini anlatmış.
Ali Elmalı, şirketlerde SRE(Site Reliabilty Engineering) kültürünü geliştirme hakkında 5 yazılık bir seri kaleme almış.
Beykan Şen, legacy projeleri daha geliştirilebilir ve bakımı yapılabilir hale getirmek için bazı yöntemlerden bahsetmiş.(İng)
Onur Dayıbaşı, bu kez React’in temellerini ve çalışma prensibini anlattığı geniş bir seri kaleme almış.
Ecesu Olgun, ElasticSearch temellerini anlattığı bir seriye başlamış.(1, 2)(İng)
Ayşe Nur Bakırcı, iOS‘te eşzamanlılığı(Concurrency), bu konuda yaşanabilecek problemleri ve Thread Safety konusunu anlatmış.
ümit Samimi, Java’da eşzamanlılığı(concurrency) anlatmış. Ayrıca Java’da thread yapısını anlattığı serinin 3. yazısını yayımlamış.
İbrahim Halil Altun, Apache Ignite’ta Garbage Collector üzerinde optimizasyon yapmayı anlatmış.
Burak Selim Şenyurt, Rust ile Wordle oyunu geliştirmeyi anlatmış.
Recep İnanç, InnoDb üzerinden transaction yönetimi, veri tutarlılığı ve kilit(locking) mekanizmalarını anlatmış.(İng)
Mehmet Ersan Uzun, Microfrontends yaklaşımında mikro uygulamaların script dosyalarını versiyon değiştikçe nasıl dağıttıklarını anlatmış.(İng)
Burak Selim Şenyurt, Rust pratikleri serisinde önce C# ile geliştirdiği bir örnek üzerinden Rust‘ta nesne tabanlı programlama(OOP) özelliklerinin nasıl uygulanabileceğine kafa yormuş.
Eray Akartuna, nesne yönelimli programlamada “basitliğin” önemimden ve gözden kaçırdığımız noktalardan bahsetmiş.(İng)
İbrahim Doğan, sürekli büyüyen ve 500 milyonu aşkın canlı veriyi Couchbase’den PostgreSQL’e nasıl arşivlediklerini anlatmış.(İng)
Sertaç Kağan Aydın, bazı batch işlemler için verileri geçici olarak Couchbase’e(Couchbase Eventing ile) yazmak ve Kafka ile (Kafka Connectors kullanarak) yayımlayarak tüketmek için oluşturdukları mekanizmayı anlatmış.(İng)
Burakcan Ekici, Couchbase’de veri değişikliklerini cURL ve Eventing Service ile yakalayıp gerekirse aksiyon almayı anlatmış.(İng)
Ahmet GÜL, Kafka ile Avro formatını kullanarak ilişkisel veri tabanlarına sürekli veri akışı sağlamayı(streaming) anlattığı bir seriye başlamış.
Harun Pekşen, farklı consumer-consumer grup senaryolarıyla Kafka consumer’larının nasıl çalıştığını anlatmış.(İng)
Pınar Koçak, MVC, MVP, MVI, MVVM ve VIPER gibi mimari tasarım desenlerinden bahsetmiş. Diğer bir yazsında ise bu desenlerden VIPER’ı iOS uygulaması örneği üzerinden daha detaylı anlatmış.(İng)
Gürkan Bulca, MVC(model-view-controller) deseninden, genişletilmiş versiyonu AMMVC(application-monitoring-model-view-controller) deseninden ve bunların Unity oyun projelerinde uygulanışından bahsetmiş.(İng)
Bora Kaşmer, Redis‘te liste barındırma ve güncelleme işlemleri için kullanılabilecek yöntemlerden bahsetmiş. Diğer bir yazısında ise .Net 6’da Bitwise implementasyonu anlatmış.(İng)
İrem Ateş, JavaScript’te callback, promise ve async-await kavramlarını, bunların kullanımlarını anlatmış.(İng) Diğer bir yazısında ise farklı metodolojiler ve yaklaşımlar ile bakımı daha rahat yapılabilen CSS yazmayı anlatmış.
Süleyman Can, Trendyol’da sayısı 500 milyona ulaşan kuponların üretimini ve yönetimini yaptıkları servislerin işleyişinden bahsetmiş.(İng)
mustafa aktaş, ödeme sistemlerinde yapay zeka ve derin öğrenme kullanılan bazı senaryolardan bahsetmiş.
Begüm Özkısaoğlu, Python ve XGBoost algoritmasını kullanarak araçların yakıtı tüketimini tahmin eden bir makine öğrenmesi projesi geliştirmeyi anlatmış.
Murat Çabuk, Linux‘un sağladığı izolasyonlarla Docker gibi konteyner teknolojilerine altyapı sağlayan Namespace özelliğini detaylıca anlatmış.
Buğra Mert Ayar, JavaScript’te olay döngüsünü(event loop) ve tek thread çalıştığı söylenen JavaScript’in nasıl multi-threaded gibi davrandığını anlatmış.(İng)
Çağlayan DÖKME, C++ 17 ile gelen gömülü sistemler için kullanışlı özelliklerden bahsetmiş.(İng)
Mithrandir, Blockchain teknolojisinde ve “Zero Knowledge Proof” üretiminde kullanılan matematik kavramı Elliptic Curve’ü detaylıca anlatmış.
Hatice Surumlu, tarayıcıda veri depolamak için kullanılabilecek yöntemlerden(Cookie, Local Storage & Session Storage) bahsetmiş ve bunları kıyaslamış.(İng)
Engincan Veske, Github Pages ve Jekyll ile pratik şekilde kişisel blog oluşturmayı anlatmış. Diğer bir yazısında ise lokalde çalışan bir uygulamayı direkt public olarak internete açmayı sağlayan ngrok aracını anlatmış.
Gökhan Ayrancıoğlu, PostgreSQL örneği üzerinden ilişkisel veritabanlarında index yapısının işleyişinin ve kullanımını anlatmış.
Hüseyin Demir, bir graph veritabanı olan Neo4j‘nin kuruşumunu, konfigürasyonunu, monitoring ve yedeklenmesinin nasıl yapıldığını anlatmış.
Elif Hilal Umucu, Blockchain alanında dünya çapında regülasyonları ve örnek davaları anlattığı bir seriye başlamış. An itibariyle 4 yazıya ulaşmış.
Emre Karaoğlu, bir sunucu kurulduğunda alınması gereken temel güvenlik önlemlerini yazmış.
Çağlayan DÖKME, gömülü Linux işletim sistemlerinde kalıcı hafıza görev gören Flash Memory‘ye erişimi ve bu bileşenin güncellenmesini anlatmış.(İng)
Mustafa Mert Tunalı, dar ve genel yapay zeka kavramlarını ve aralarındaki farkları anlatmış.
Bitirirken
Bu sayı da, geçen senenin derlemesi de nihayete erdi. Umarım istifade etmişsinizdir.
Beğendiyseniz daha fazla insana ulaşması için paylaşmayı unutmayın.
Sağlıklı, keyifli ve afiyetli bir yıl diliyorum efendim.
Zâtınıza çook iyi davranın.
Bana ulaşmak için: Linkedin, Twitter, superpeer
Daha fazla motive etmek için: Patreon