Bloga geri dön
Yazılım ve kodlama yalnız işlevsel bir eylem olmayıp aynı zamanda etik sorumlulukları taşıyan bir iştir. IEEE Computer Society yazılım mühendislerinin uyması gereken etik ilkeleri belirlemiştir. Bu ilkeler, toplum çıkarına özen, müşteri ve iş veren çıkarına özen, ürün kalitesine özen, mesleki yargılarında dürüstlük ve bağımsızlık, yazılım geliştirme ve bakımının yönetiminde etik bir yaklaşımı benimsemek, mesleğin itibarına özen, destekleyici iş ortamı sağlamak ve mesleklerinde öğrenme, gelişme ve etik kurallara özen gibi ilkelerdir. Bu ilkelerin alt maddelerine linkteki sayfadan erişilebilir.
Bu etik sorumluluklarından biri olan sürdürülebilirlik hem ekolojinin önemli başlıklarından olup hem de kodlamanın işlevselliği açısından önemlidir. Tahminlere göre bilgi ve iletişim teknolojileri sektöründe çok yüksek elektrik tüketiminin sebep olduğu karbon ayak izi, sera gazlarının %2-3 gibi bir oranını oluşturduğu düşünülmektedir (Energy consumption of ICT, UK Parliament). Bu oranın, 2040’a kadar %14 olabileceği öngörülmektedir (Best Practices of Sustainable Software Development in 2025, beetroot.co). 2020 verilerine göre, yalnızca veri merkezleri 300 TWh'ın üzerinde elektrik tüketmiştir ve bu sayının 2023 itibarıyla 400-500 TWh aralığına çıktığı tahmin edilmektedir; bunun %40’ı soğutma sistemlerinde harcanmaktadır (gelişmiş veri merkezlerinde bu oranın %20-30’lara düştüğünü söylemeliyiz).
Dijital dönüşümle birlikte artan veri hacimleri, veri merkezleri ve iletişim altyapılarında elektrik talebini artırmaktadır. 2025 yılında küresel olarak 181 ZB (1 ZB = 1.073.741.824 TB) veri oluşturulduğu, yakalandığı, kopyalandığı ve tüketildiği tahmin edilmektedir. Bu 2020'ye kıyasla neredeyse üç kat daha fazla bir rakam (Data volume is soaring. Here’s how the ICT sector can sustainably handle the surge,).
Bu verileri işlemek dışında veri merkezlerinin harcadığı enerjinin büyük sebebi de soğutma/iklimlendirme sistemleridir. Ayrıca, telekom şirketleri ise 5G altyapısıyla bu yükü katlamaktadır. Yazılım şirketleri tarafında ise bu tüketim daha zor sezilmektedir. Bir mobil uygulama, arka planda sürekli çalışan bir servis, hatta idle durumdaki bir sunucu bile saat başı watt’larca enerji tükettiği sık sık gözden kaçırılmaktadır. Bu noktalar göz önüne alındığında yazılan kodların görünmez bir karbon fabrikası gibi çalıştığını söylemek yanlış olmaz.
BİT sektörünün enerji tüketimi küresel ölçekte diğer sektörlere oranla ne kadar az gibi görünse de hem daha sürdürülebilir bir yaşam hem de etik sorumluluk açısından bu tüketimi yönetmeye çalışmak iyi bir pratiktir. Bu pratik için elimizde bulunan birkaç yöntemden özellikle yazılım sektörlerinin de işine yarayan green coding (yeşil kodlama) yönteminden bahsedebiliriz.
"Yazılıma iki bakış vardır: iklim sorununun parçası olan yazılım ve iklim çözümünün parçası olan yazılım."
— Green Software Foundation
Yeşil kodlama, yazılım geliştirme süreçlerinde enerji tüketimini ve karbon ayak izini bilinçli olarak azaltma disiplinidir. Yazılım sistemlerini mümkün olduğunca az enerji ve doğal kaynak gerektirecek şekilde tasarlama, geliştirme, sürdürme ve (yeniden) kullanma eylemidir. Bu disiplini 7 pratik üzerinden inceleyebiliriz.
Karmaşık problemlere en uygun çözümleri bulmak için kullanılan matematiksel prosedürlerdir.
Genellikle iç içe döngülerde veri boyutu (n) arttıkça işlem süresi karesel artar (O(n2)). Algoritma optimizasyonu, işlem sayısı ve dolayısıyla işlemci (CPU) süresini azaltmak için uygulanır. Daha az işlem süresiyle daha az CPU kullanımı sağlanacağından sunucu/cihazda elektrik tüketimi azalacaktır. Bu algoritmalar, yapay zekâ, makine öğrenimi, operasyon araştırması ve veri bilimi de dahil olmak üzere bilim ve endüstrinin birçok alanının ayrılmaz bir parçasıdır.
Bir JavaScript örneğiyle incelersek:
Lazy loading (tembel yükleme) web sayfasının belirli bölümlerinin (özellikle görsellerin) ihtiyaç duyulana kadar yüklenmesini erteleyen bir tekniktir.
Kod bölme ise çok büyüyen paketleri (bundle / import edilmiş ve merge edilmiş dosyaları tek bir dosyada toplama işlemi) kontrol altına alabilmek için Uygulama kodunu daha küçük parçalara (chunk'lara) bölme işlemidir. Çalışma zamanında dinamik olarak yüklenebilen birden fazla paket oluşturulabilir. Burada amaç, kullanıcının sadece o an ihtiyacı olan kodu/içeriği yüklemektir. Ağ trafiğini ve pil tüketimini azaltmaya yarar.
Web projelerinde verileri daha az bit ile işler hale getirmek için Gzip ve Brotli teknikleri kullanılır. Gzip, metinde tekrar eden dizileri bulup (uzaklık, uzunluk) çiftiyle değiştirerek kayıpsız bir şekilde sıkıştırma sağlar.
Google tarafından 2015’te geliştirilen Brotli ise Gzip’e göre web sitelerine daha hızlı erişim sağlar. Sıkıştırma performansı daha yüksektir.
Bu yöntemler ağ trafiğinde ciddi bir düşüş sağlayarak web sitelerinin verimliliğini artırır.
For döngüleri gibi döngüleri dikkatli tasarlayarak da ciddi bir enerji verimliliği sağlanabilir. Döngüleri gereksiz uzatmaktan kaçınmak, doğru yerlerde kesmek (örn. break, continue), veri tiplerini doğru ayarlamak gibi uygulamalar enerji verimliliğine fark edilmese de etki etmektedir.
Java dili üzerinden verimsiz döngü ile verimli döngü farkını bir örnekle görelim:
String birleştirme örneği:
Bir kaynak yönetimi örneği:
Ekranların, özellikle OLED teknolojisinin enerji tüketimini azaltmak için web ve mobil tasarımlara karanlık mod ve UI optimizasyon seçenekleri eklenebilir. Karanlık modlu ekranlarda, siyah pikseller gerçekten kapalıdır (ışık yaymaz). Bu da enerji verimliliği sağlar.
Bulut bilişim sistemlerini inceleyerek enerji verimliliğine özen gösteren donanımları ve hizmetleri seçmek de yeşil kodlama tekniklerinden biridir. Ayrıca, bulut sağlayıcılar kullanıcının edindiği hizmetlerin tahmini karbon ayak izini görmeyi sağlayan çeşitli araçlar sunmaktadır. AWS Customer Carbon Footprint Tool (CCFT) veya Google Cloud Carbon Footprint… bunlardan bazılarıdır.
Son olarak, yeşil kodlama uygulaması olarak kod birleştirme/dağıtım süreçleri gereksiz test ve derleme (build) işlemlerini önleyerek verimli hale getirilebilir. Gereksiz derlemelerin atlanması, bulut altyapısında harcanan sanal makine (VM) süresini azalır. Böylelikle, bulut maliyeti ve enerji tüketimi tasarrufu sağlanır.
Toparlayacak olursak, yazılım geliştirme süreçlerinin yalnızca işlevsellik açısından değil, doğa karşısında da sorumluluk gerektirdiği açıkça görülmektedir. Belli pratikleri takip ederek yazılım projelerini iyileştirmenin ise karbon ayak izi üretimini ciddi oranda düşürmenin yanında yeşil kodlamayla çalışan firmaların daha yüksek işletme marjı elde ettiği ve zaman kazanımı sağladığı çeşitli çalışmalarda gözlemlenmiştir (IBM Institute for Business Value – CEO Study 2022).