Bir işi ne kadar hızlı bitirdiğimizi çoğu zaman irade, disiplin ve kahve miktarıyla açıklarız. Oysa bilgisayar biliminin soğukkanlı dünyası bize daha rahatsız edici bir şey söyler: Aynı problemi çözmek için seçtiğin yöntem, harcadığın çabadan daha belirleyici olabilir. İşte Big O Notation, yani zaman kompleksitesi, tam olarak bunu ölçmeye yarar. Bir algoritmanın, girdi büyüdükçe ne kadar yavaşladığını anlatır. Hayat da çoğu zaman bir algoritma seçme sanatıdır.
Diyelim ki evde kaybolan anahtarını arıyorsun. Bir yöntem, bütün evi rastgele altüst etmektir. Koltuk altına bak, sonra buzdolabına, sonra tekrar koltuk altına, sonra mont cebine, sonra varoluşsal krize. Bu yaklaşım kötü tasarlanmış bir algoritmaya benzer. Çok enerji harcarsın ama ilerleme hissin yanıltıcıdır. Başka bir yöntem ise son kullandığın yerleri sırayla düşünmek, giriş kapısı çevresinden başlamak, çantaları ve cepleri sistematik kontrol etmektir. Aynı insan, aynı anahtar, aynı ev; fakat farklı algoritma.
Big O bize ne anlatır?
Big O, küçük ayrıntıları değil, büyüme davranışını önemser. Bir işin 10 birimde nasıl davrandığı değil, 10.000 birimde neye dönüştüğü sorulur. O(1) sabit zamandır: Girdi büyüse de işlem süresi değişmez. Mesela telefonunda favorilere eklediğin bir kişiyi aramak gibi. O(n) doğrusal zamandır: Liste büyüdükçe süre de aynı oranda artar. Bir sınıftaki herkesin adını tek tek okumak buna benzer. O(n²) ise tehlikeli bölgedir: Her şeyi herkesle karşılaştırırsın. Toplantıda herkesin herkesle ayrı ayrı fikir alışverişi yapması gibi; katılımcı sayısı arttıkça zaman birden şişer.
Hayatta da bazı işler O(n²) gibi davranır. Gelen kutusunu düzensiz bırakırsan, her yeni e-posta sadece bir e-posta değildir; eski karmaşayla etkileşime giren yeni bir düğümdür. Notlarını kategorize etmezsen, bilgi birikimin büyüdükçe zekân değil, sürtünmen artar. Bir proje planın yoksa, ekipteki kişi sayısı arttıkça iletişim maliyeti patlar. Sonra insanlar şaşırır: Bu kadar çalışıyoruz, neden ilerlemiyoruz? Çünkü çalışma miktarı arttıkça sistemin verimsizliği de büyüyordur.
Bu noktada acı gerçek ortaya çıkar: Yoğunluk verimlilik değildir. Klavyeye hızlı basmak, doğru problemi çözdüğün anlamına gelmez. Bir yazılımcı yanlış algoritmayla milyonlarca işlem yapabilir; bir insan da yanlış alışkanlıkla yıllarca dönüp durabilir. Big O’nun hayata hediyesi, bize şunu sormayı öğretmesidir: Ben bu işi daha fazla kas gücüyle mi çözmeye çalışıyorum, yoksa yöntemi mi değiştirmeliyim?
Hayatındaki algoritmaları denetle
Sabah rutinin O(n²) mi? Yani bir çorabı ararken akşamdan kalan tabakları, bildirimleri, dağınık masayı ve gecikmiş kararları aynı anda mı işliyorsun? Öğrenme biçimin O(n) bile değil de rastgele arama mı? Aynı konuyu tekrar tekrar açıp kapatıyor, fakat hiçbir özet, örnek veya pratik üretmiyor musun? İlişkilerinde her anlaşmazlığı sıfırdan mı tartışıyorsun, yoksa ortak kurallar ve açık beklentiler gibi bir önbellek kurdun mu?
Bilgisayar biliminde iyi bir algoritma, problemi daha akıllıca temsil eder. Hayatta da mesele budur. Takvim kullanmak, zihni boşaltan bir veri yapısıdır. Kontrol listesi, tekrar eden hataları azaltan bir otomasyondur. Önceliklendirme, sonsuz görevler kümesinde arama alanını daraltmaktır. Hayır demek, gereksiz girdiyi sisteme almamaktır. Dinlenmek bile bir optimizasyondur; çünkü yorgun işlemci daha çok hata üretir.
Elbette her şeyi optimize etmeye çalışmak da ayrı bir tuzaktır. İnsan makine değildir; bazen en verimli yol, en anlamlı yol olmayabilir. Ama Big O bize mekanikleşmeyi değil, kör çabayı sorgulamayı önerir. Eğer sürekli yetişemiyorsan, sorun karakterinde olmayabilir. Belki de hayatını O(n²) bir düzende çalıştırıyorsundur.
Sonuç basit ama güçlü: Daha hızlı yaşamak için daha fazla koşmak zorunda değilsin; bazen rotayı yeniden çizmen gerekir. Hayatın performansını belirleyen şey yalnızca motivasyonun değil, kullandığın algoritmadır. Ve iyi haber şu: Algoritmalar değiştirilebilir.