.NET dünyasında son 5-6 senedir yaşanan büyük değişikler malum; birden fazla farklı işletim sistemlerinde çalışabilmesi, açık-kaynak yaklaşımlar ile geliştirilmesi, birleşik bir kod tabanı üzerinde sunulan geniş API özellikleri, yazılım geliştirme dünyasında oldukça sıcak konular.

.NET Framework ve .NET Runtime şeklinde hayatımıza giren kavramlardaki değişiklikleri ve yaklaşımları, mevcut durumu ve yol haritasını baz alarak basitçe anla(t)maya, kendimce yorumlamaya çalışacağım. Bazen sorulan sorularda, muhabbetlerde, .NET ile yeni tanışanlarda ya da uzun süredir .NET ile çalışmış ama yenilikleri çok takip edememiş kişilerde kavram karışıklıkları gördüğüm (ya da öyle sandığım) için böyle bir paylaşımda bulunmak istedim. .NET’i daha iyi anlamak geliştirilen çözümlerin kalitesini olumlu yönde de etkileyeceği için umarım faydalı olur.

.NET artık sadece bir Framework değil…

.NET kavramları artık sadece bir “framework” ya da “runtime” yaklaşımı ile yorumlanacak kadar yalın değil. Böyle bir başlıkla yazıyı paylaşmamın sebebi de biraz bu. 😀 Artık .NET kendi içinde bir eko-sistemi olan bir platform. Günümüzün gerektirdiği sistemlerde (web, “cloud”, mobil cihazlar, masaüstü, IoT cihazlar… gibi) çözümler geliştirmek için tercih edilebilecek bir platform. Bu platformun sağladığı API’lar, run-time’lar, framework’ler, araçlar geliştiriciler için kolaylıklar ve imkanlar sağlıyor.

Genel yazılım geliştirme eko-sistemindeki gelişmeler, yazılım geliştirme araçlarının çeşitlenmesi ve yeni fırsatların ortaya çıkması .NET için böyle bir değişikliğin gerekliliğini gösteriyordu zaten. Büyük resme biraz daha yukarıdan bakabilmek ve o şekilde hareket etmek güzel yaklaşım. Bu yüzden Microsoft’un, .NET’e olan bu yeni yaklaşımını bir yazılımcı olarak memnuniyetle karşılıyorum.

Değişim ve adaptasyon

Bulunduğumuz çağda “hızlı” değişim ve “adaptasyon” yazılım çözümlerinin sağlaması gereken en önemli özellik diye düşünüyorum. Bir yazılımın ne kadar uzun süre yaşayabildiğinden çok, yazılımın ne kadar hızlı değişim yaşayabiliyor olması ve yeniliklere adaptasyon sağlaması artık daha önemli. Dolayısıyla değişime ayak uydurmak için .NET platformu da artık daha hızlı değişiyor ve gelişiyor diye düşünüyorum. 2-3 yıl boyunca platform içinde olan bir kavram, 5. yılında belki baştaki desteği sunamayacak, daha farklı ve etken bir alternatifi sunabilecek. Hatta belki de daha da kısa zaman aralıklarında… Alışa gelmiş yazılım geliştirme yaklaşımlara göre belki, “Olur mu ya öyle, niye artık yok. O nasıl kaldırılıyor?” gibi söylemlerde bulunabiliriz belki. Ama artık günümüzde ne kadar geçerli bir bakış açısı bilemiyorum. Geliştirmelerin “topluluk” odaklı ve açık-kaynak odaklı bir şekilde yapılıyor olmasına ek, böyle bir bakış açısından dolayı da .NET’in ara sürümler(preview, release candidate) ile daha sık karşılaşıyoruz, karşılaşacağız. Tabi ki bu ara sürümleri, üretim ortamlarında kullanmak çok sağlıklı değil(?) ama yayınlanacak sürümleri anlamak, gelişmelere adaptasyon sağlamak için bu ara sürümler üzerinde de çalışabilmek önemli.

Microsoft, artık .NET’in çift sayı olan versiyonlarına “Long-term support(LTS)” yani daha uzun süreli destek sağlayacak. Belli versiyonlara olan desteğin daha kısa süreli olacağından, aslında sürekli “güncel” kalabilmeyi desteklemek adına güzel bir hareket.

.NET performansı

.NET platformu, günümüz “büyüklüklerine” uygun çözümler sunmak için performans açısından da büyük getirileri de sunuyor. Runtime içinde Garbage Collector(GC)‘da yapılan iyileştirmeler, network API’larındaki gelişmeler, Just-In-Time(JIT) derleyicideki performans iyileştirmeleri gibi gibi yenilikler önceki sürümlere göre platformu çok öne taşıyan gelişmeler.
7-8 sene önce yazılım teknolojilerinin çeşitlenmesi ile zamanın ihtiyaçları için .NET Framework’ün performansının beklentiler ile çok uyuşmadığını gösteriyordu. En azından böyle bir bakış açısı daha yüksek sesle dile getiriliyordu. .NET Core değişikliği ile performans odaklı yeniden yazılan bir çok yaklaşım, .NET’in performans açısından belli noktalarda öne çıkmasını sağlıyor. Performans konusunda .NET günümüz ihtiyaçlarına artık çok daha yakın ve çok daha iyi sonuçlar veriyor.

Yazılım çözümlerinde, gereksinim göre farklı performans yaklaşımları olabildiği için en “iyi” performans aracı da değişiklik gösterecektir. Dolayısıyla, .NET’in en iyi performansa sahip platform olduğunu söylemek çok iddialı ve doğru değil. Ama genel ihtiyaçlara eski sürümlerine göre çok daha iyi durumda performans açısından.

İnternette çeşitli değerlendirmeler mevcut, ama aşağıdaki linklerden başlangıç olarak bakmanızı tavsiye ederim.

Performance Improvements in .NET Core 3.0 | .NET Blog (microsoft.com)
Performance Improvements in .NET 5 | .NET Blog (microsoft.com)
Round 20 results – TechEmpower Framework Benchmarks

Aynı kod alt yapısı

Farklı platform ve işletim sistemlerinde aynı kod alt yapısı ile çözüm geliştirme imkanı, yeni .NET platformun öne çıkan, ilerleyen dönemlerde daha da çıkacak bir diğer farkı. Microsoft yıllardır bu tarz çalışmaları dener ama çok olgun sonuçlar çıkartamazdı. .NET, farklı işletim sistemlerinde de çalışabilme özelliğini kazanması ile platform içindeki yine bileşenler ile biraz daha olgun sonuçlar çıkacak gibi. Mesela ilerleyen dönemlerde daha sık duyacağımız “.NET Multi-platform App UI”(a.k.a Xamarin Forms) ve Blazor(WebView, Desktop) ile farklı işletim sistemlerinde ve platformlarda çalışabilen tek bir kod alt yapısı ile ön yüz uygulamaları geliştirmek mümkün olabilecek. Tabi ki olgunlukları ve beklentilere cevap verme özellikleri, “geliştiriciler” olarak bizlerin tercihleri ile gelişecek. Bunlara geliştiriciler olarak, “native” araçlar yerine geçecek bileşenler değil de, onlara alternatif ve kolaylık sağlayan araçlar olarak yaklaşmak daha doğru olur. Günümüzde cihaz ve işletim sistemi çeşitliliğinden dolayı, .NET platformundaki bu yeniliklerin yazılım çözümleri için önemli olacağını düşünüyorum. Tek(?) bir temel kod alt yapısı ile çözümlerin farklı işletim sistemleri ve cihazlarda çalışabilir olması önemli olacak.

“Cloud-native” yani bulut odaklı…

“Cloud” yani bulut bilişim günümüzün yazılım çözümleri için önemli oyuncu. Yavaş yavaş bir çok çözüm bulutlara çıkıyor. Bulut bilişim destekli bir platform olarak geliştirilen .NET, “cloud” platformlarındaki servisler ile kolaylıklar çalışabilmek üzere bir çok API ve arayüz sunmakta. Tabi ki Microsoft Azure servisleri ile daha olgun bir ilişkiye sahip, ama AWS ve Google Cloud platformlarındaki servisleri de kullanmak için hem Amazon’nun geliştirdiği hem de Google’ın sağladığı “extension” kütüphaneleri mevcut. Docker imajları ile de farklı “cloud” platformlarında dağıtmak oldukça kolay, -ki zaten “native” olarak AWS ve Google Cloud’da da .NET destekli servisler direkt sunulmakta. Dolayısıyla, “cloud” platform servislerini kullanan uygulamalar geliştirmek oldukça kolay.

Belki biraz reklam gibi oldu ama açıkcası daha çok .NET ile haşır neşir olduğum için, .NET dünyasında neler oluyor daha net anlaşılması için bu konulardan bahsetmek istedim. Altını özellikle çizmek isterim ki; .NET’in kesinlikle kusursuz, en iyi ya da ideal geliştirme platformu olarak yorumlanmasını istemem. Yazılım dünyasında ne yazık ki kusursuz bir yaklaşım/yöntem/platform yok. Farklı ihtiyaçlara, zorunluluklara ve yetkinliklere göre her geliştirme araçının, platformunun ya da dilin artıları-eksileri var. Bunların farkında olabilmek yazılımcılar olarak bizler için çok önemli. Umarım bu bağlamda faydalı bir yazı olur. Bir sonraki yazıda görüşmek üzere, mutlu kodlamalar. 😀