Acil tıp eğitiminin farmakoloji derslerinde hocalarımızın tahtaya vura vura ezberlettiği bir kural vardır: "İlaç ile zehir arasındaki tek fark dozdur."

Ambulansın arkasında, kalbi durmuş (kardiyak arrest) bir hastaya CPR yaparken defibrilatör ritim analiz eder, göğüs kompresyonu devam eder ve ekip lideri bağırır: "1 miligram Adrenalin hazırla!"

O an eliniz ilaca uzandığında zihninizde saniyenin onda biri kadar bir sürede devasa bir doğrulama algoritması çalışır. Çünkü rafta duran ampullere baktığınızda, Atropin de Adrenalin de Aritmal de şeffaf bir cam tüpün içindeki renksiz birer sıvıdan ibarettir. Eğer yorgunluktan gözünüz kararır da 1 mg yerine 10 mg çekerseniz veya mikrogram (mcg) ile miligramı (mg) birbirine karıştırırsanız, hastayı hayata döndürmez; onu kendi ellerinizle öldürürsünüz.

Sağlıkçıların kanına işlemiş olan "5 Doğru İlkesi" tam olarak bu yüzden vardır:

  1. Doğru hasta,
  2. Doğru ilaç,
  3. Doğru doz,
  4. Doğru yol (IV/IM/IO),
  5. Doğru zaman.

Bu beş kuraldan tek bir tanesini bile "esnetemezsiniz". Kimse "Canım ne olacak, 1 ml sıvı işte, damardan gitse ne olur kabadan gitse ne olur" demez. Tıpta tipler (types), miktarlar (values) ve sınırlar (boundaries) tartışmaya kapalıdır.

Peki yazılım dünyasına döndüğümüzde ne yapıyoruz?

JavaScript'in Tehlikeli Esnekliği

Yazılım dünyasının en popüler dili olan JavaScript'in doğuş felsefesini hatırlayalım: Tarayıcıda birkaç butonu hareket ettirmek, form alanlarını kontrol etmek ve kullanıcıya sevimli animasyonlar göstermek. Hata vermesin, çökmesin, ne olursa olsun bir şekilde çalışmaya devam etsin diye tasarlandı.

Ve bu "hoşgörü", modern yazılım dünyasının en ölümcül virüsüne dönüştü.

JavaScript'te bir sayı ile bir metni toplayabilirsiniz: "5" + 3 yazarsınız ve dil size kızmak yerine gülümseyerek "53" cevabını verir. Bir fonksiyon iki parametre beklerken siz sıfır parametre geçersiniz; sistem çökmez, parametrelere sessizce undefined basar. Olmayan bir objenin altındaki özelliği okumaya çalışırsınız; derleme anında tek bir uyarı bile almazsınız.

Sonra ne olur?

Gece yarısı telefonunuz çalar. Şirketin e-ticaret platformunda faturalandırma servisi çökmüştür. Neden mi? Çünkü ödeme API'sinden gelen total_amount alanı bir yerde string ("1500"), diğer yerde number (1500) olarak ele alınmış; indirim kodu uygulanırken matematiksel çıkarma yerine metin birleştirme yapılmış ve müşteriden 1500 TL yerine 0 TL tahsil edilmiştir. Veya daha kötüsü: Canlı ortamda kullanıcı profil sayfasına tıkladığında o meşhur, kan dondurucu hata ekranı fırlar:

TypeError: Cannot read properties of undefined (reading 'map')

İşte bu hata, acil tıpta hastaya yanlış ilacı verdikten sonra monitörde gördüğünüz ventriküler fibrilasyon dalgasıdır. Hasta ölmüştür, monitör ötmeye başlamıştır ve siz neyin ters gittiğini anlamak için panik içinde log kayıtlarını (hastanın dosyasını) karıştırırsınız.

"TypeScript Beni Yavaşlatıyor" Zırvası

Son yıllarda TypeScript sektör standardı haline gelmiş olsa da, hâlâ pek çok geliştiriciden ve startup kurucusundan aynı itirazı duyuyorum:
"TypeScript geliştirme hızımızı kesiyor. Sürekli interface tanımlamakla, type casting ile uğraşıyoruz. Biz hızlıca prototip çıkarıp pazara girmeliyiz (Move fast and break things)."

Bu argüman, sahada acelesi olan bir paramediğin "Ampulün üzerindeki etiketi okumak beni yavaşlatıyor, çekip rastgele basayım işte" demesiyle birebir aynı mantıksal hezeyandır.

Evet, TypeScript yazarken fazladan birkaç satır kod yazarsınız. Fonksiyonunuzun ne aldığını, ne döndürdüğünü, hangi alanların null olabileceğini açıkça belirtmek zorunda kalırsınız. Bazen derleyici (compiler) size inatla kırmızı dalgalı çizgiler çeker ve "Burada tip uyumsuzluğu var, geçemezsin!" der.

Ama o kırmızı çizgi, sizin düşmanınız değildir. O kırmızı çizgi, gece saat üçte yatağınızdan fırlayıp sunucuya SSH ile bağlanmanızı engelleyen dijital bir emniyet kilididir.

TypeScript sizi yavaşlatmaz. TypeScript, hatayı müşterinin ve kullanıcının önünde (Runtime) yapmaktan alıp, henüz kodu yazarken kendi bilgisayarınızın içinde (Compile Time) güvenli bir şekilde patlatmanızı sağlar. Hatayı derleme anında yakalamanın maliyeti sıfır liradır; o hatayı production'da bir kullanıcının satın alma sepetinde yakalamanın maliyeti ise bazen yüz binlerce dolardır.

any Kullanmak: Etiketsiz Ampulü Hastaya Enjekte Etmek

TypeScript projelerinde gördüğüm en büyük günah ise any tipinin pervasızca kullanılmasıdır. Geliştirici derleyicinin uyarısıyla baş edemediği an, kolay yola kaçar:

const processPayment = (data: any) => { ... }

Bir değişkene any atadığınız an, aslında TypeScript derleyicisine şunu söylersiniz: "Gözlerini kapat. Sana güvenmiyorum. Buradaki kuralları askıya al."

Bu, acil tıp dolabındaki ilacın üzerindeki etiketi kazıyıp, üstüne tükenmez kalemle "Bir şeyler işte" yazmaya benzer. O an işinizi görür, derleyici susar, derleme işlemi başarıyla tamamlanır. Ama o fonksiyonun içine neyin gireceği ve oradan neyin çıkacağı artık tamamen karanlıktadır. İlk beklenmedik veri dalgasında sistem patlayacak ve arkasında hiçbir iz bırakmayacaktır.

Eğer bir projede TypeScript kullanıyor ama her sıkıştığınız yere any basıyorsanız, kendinizi kandırıyorsunuz demektir. Güvenlik kemeri takmış gibi yapıp arkadan bağlayan bir sürücüden farkınız yoktur.

Tip Güvenliği Bir Tercih Değildir

Bugün karmaşık dağıtık sistemler, onlarca mikroservis, yüzlerce üçüncü parti API ve devasa ekiplerle yazılım geliştiriyoruz. İnsan beyninin, tek bir projede dolaşan binlerce veri tipinin tüm varyasyonlarını, kenar durumlarını (edge cases) ve null olasılıklarını aklında tutabilmesi biyolojik olarak imkânsızdır.

Tip güvenliği (Type Safety) fildişi kulelerde yaşayan bilgisayar bilimcilerinin bir kaprisi değildir. Tip güvenliği; yorgun, uykusuz, dikkati dağılmış insanların hata yapmasını engelleyen zihinsel bir dış iskelettir.

Dozaj hatasının affedilmediği bir dünyada yaşıyoruz. Kodunuz ister bir hastane cihazını yönetsin, ister sıradan bir e-ticaret sepetini; kullanıcılarınızın güvenini ve paranızı riske atıyorsunuz demektir.

Bir dahaki sefere TypeScript derleyicisi önünüze bir hata çıkardığında ona kızmayın.
Çünkü o kırmızı çizgi; sizi, şirketinizi ve itibarınızı az önce ölümcül bir doz aşımından kurtardı.