Bu yazıyı yazdığım tarih itibariyle SGK dökümüm 20 yıl 1 aydır çalışmakta olduğumu ifade ediyor. Sektöre sigortalı bir çalışan olarak adım attığım 1999 yılında Delphi dili ile geliştirme yapan yeni yetme bir bilgisayar programcısıydım. 20 yıllık iş hayatımın %90'ında ise .Net teknolojileri ve C# programlama dilini kullandım, kullanmaya da devam ediyorum. Bu zaman diliminde telekominikasyondan finansa, eğitimden otomotive farklı sektörlerde çalışma fırsatı buldum. Aslında benim dünyam iş modellerinin nesne yönelimli dillerle buluştuğu, birçok yazılım prensibinin uygulanıp teknik borçların hortladığı, büyük ölçekli teknoloji değişimlerinin yapılıp çevik metodolojilerle ilerlendiği içinde Enterprise kelimesinin sıklıkla zikredildiği devasa bir evren. Bu evrende bir çok Neo ve Trinity var. Gündüzleri kurumsal dünyanın rutin çarklarına adapte olup geceleri farklı dünyaların kapılarını açmaya çalışan. Hal böyle olunca insan ister istemez arada bir düzen dışına çıkıp kendi konfor alanını terk ederek bambaşka maceralara dalmak istiyor. Ben bunun için ağırlıklı olarak farklı programlama dillerini öğrenmeye çalışıyorum. Java, Ruby, Python ve Go bunlardan sadece bazıları. Ciddi anlamda ilgilendiğim bir diğer programlama dili ise Rust.
Esasında benim gibi yıllarını kurumsal projelerde geçiren ve managed ortamlarda koşturan bir geliştirici için oldukça ters köşe yapan bir dil olduğunu ifade edebilirim. Sadece Ownership, Borrow Checker, Resource Acquisition is Initialization(RAII) gibi unsurları anlamak, Garbage Collection, Null Reference ve Exception Handling gibi yönetimli kod dünyasının mekanizmaları olmadan çalışmak bile ilk etapta sizi fazlasıyla zorlayabiliyor. Bu konseptleri anladıktan sonra ise yüksek performanslı ve güvenilir kod yapılarını inşa etmek için C, C++ gibi dillerden çok daha ciddi bir alternatif olduğu da ortaya çıkıyor(Özellikle C, C++ tarafından aşina olduğumuz double free, use after free, dangling pointer gibi kritik hataların henüz derleme zamanında önüne geçtiğini düşünürsek...)
Rust ile yaklaşık üç yıldır hararetli bir şekilde uğraşmaktayım ve bana kalırsa bir programlama dilini öğrenmenin en eğlenceli yollarından birisi de onunla oyunlar yazmaya çalışmaktan geçiyor(Söz gelimi Python ile uğraşıyorsanız onu öğrenmenin eğlenceli yollarından birisi IoT cihazlarda kullanmak bir diğeri de onunla eğlenceli terminal oyunları yazmaktır diyebilirim. Tecrübeyle sabittir) Çok basit bir terminal oyunu bile dile hakim olma noktasında önemli yetkinlikler kazandırabilir. Rust tarafındaki oyun motorları oldukça yetenekli. Her ne kadar henüz Unity veya Unreal Engine gibi gelişmiş IDE'ler söz konusu olmasa da bir oyun motorunun nasıl çalıştığı veya oyun dinamiklerinin ne olduğunu öğrenmek için uğraşmaya değer. Rust oyun programlama tarafı ile ilgili ilk durak noktanız ise Are We Game Yet olmalı.
İşin başında temel bazı matematik enstrümanları da hatırlamak gerekiyor, benden söylemesi :) İşte bu düşünceler ışığında geçtiğimiz günlerde Özgür Yazılım Topluluğunun davetlisi olarak bir sunum gerçekleştirdim. Bir saatlik sunumu iki saat zannedip bana ayrılan zamanı fazlasıyla aştım ve anlatmak istediklerimin tamamını aktaramadım. Bunun için ikinci bir program yapmaya karar verdik ancak şimdilik bu oturumu paylaşabilirim. Lütfen yazmaya çalıştığım çoğu yarım kalan oyunlarımdan yüksek bir beklentiniz olmasın. Aslında hepsi çöp ancak ben yazmaya çalışırken acayip keyif aldım:) İyi seyirler dilerim.
Sunumda üzerinde durduğum oyunlara ait kodlara aşağıdaki github adreslerinden ulaşabilirsiniz.
- Lunar Landing : SDL2(Simple DirectMedia Library) kütüphanesi kullanılarak, 1969 yapımı Lunar Landing oyunundan esinlenilerek geliştirilmiştir.
- Slam Dunk Manager : Herhangi bir oyun motoru kullanmayan, sadece terminalden çalışmak üzere planlanmış bir basketbol menejerlik oyunudur. İlk kez kurcaladığım Game Design Document örneğini de içermektedir.
- Tetra Pong : Tetra framework kullanılarak geliştirilmiş bir oyundur.
- Wing Pilot 2024 : Macroquad motoru kullanılarak Commodor 64 için yazılmış 1942 oyunundan esinlenilerek geliştirilmiştir.
- On My Way : Bevy oyun motoru ile geliştirilmiş ECS(Entity Component System) altyapısı kullanılan bir oyundur.
- Packyman : Hands-on Rust: Effective Learning through 2D Game Development and Play isimli kitabın yazarı Herbert Wolverson tarafından geliştirilmiş Bracket-Lib kütüphanesi kullanılarak yazılmış bir oyundur.
- Missile Command : Macroquad ile geliştirilmiş efsanevi Atari Missile Command oyununun ilkel bir klonudur.
- Unity Learning : Linux üzerinde Unity ile ilgili öğrendiklerime yer verdiğim repodur.
Ayrıca oyun geliştirme macerasında bana yardımcı olan, referans olarak kullandığım kitapları da şöyle sıralayabilirim.