Mühendislik Felsefesi

Kodun Ötesinde: Disiplinlerarası Mühendislik Neden Önemlidir?

12 Şub 20246 dk okuma

Yazılım mühendisliği sıklıkla derin bir kimlik krizi yaşar. Malzememiz soyut olduğu için—ekrandaki pikseller, işlemcideki mantık kapıları—fiziksel kısıtlamalara bağlı olduğumuzu kolayca unuturuz. Saf bir programcı sadece sözdizimini (syntax) ve framework'leri görür; gerçek bir mühendis ise kaynak tahsisini, gecikmeyi (latency) ve sistem sınırlarını görür.

Fiziksel Dünyadan Ödünç Almak

Bir inşaat mühendisi bir köprü tasarladığında, çeliğin dayanacağını öylece umut etmez. Yük dağılımını, termal genleşmeyi ve yapısal yorulmayı hesaplar. Her malzemenin bir kırılma noktası (failure point) olduğunu anlar.

Yazılımda bizim "malzemelerimiz" CPU döngüleri, RAM, ağ bant genişliği ve disk G/Ç'sidir (I/O). Bir log dosyasını ayrıştırmak için O(n²) karmaşıklığında bir algoritma yazarsanız, sadece "kötü kod" yazmış olmazsınız—yüksek yük altında çökecek yapısal bir kiriş tasarlamış olursunuz. Bir uygulama memory leak (bellek sızıntısı) yaşadığında, bu mekanik bir motorun yağ sızdırmasıyla aynı şeydir; sonunda sistem durma noktasına gelir. Bu fiziksel sınırları tanımak, bir kodlayıcıyı (code monkey) bir sistem mimarından ayıran şeydir.

Arıza Etki Alanları (Failure Domains) ve Yedeklilik (Redundancy)

Elektrik mühendisleri, lokalize bir kısa devrenin tüm binayı yakmasını önlemek için devreleri sigortalar ve devre kesicilerle (circuit breaker) tasarlar. Dağıtık yazılım sistemlerinde tam olarak aynı kavramları uygularız. Bir veritabanı zaman aşımının (timeout) basamaklanarak (cascade) tüm sunucu kümemizi çökertmemesi için mikroservislerde Devre Kesici (Circuit Breaker) desenini uygularız.

Terminoloji ve matematik genellikle ortaktır. Trafik mühendislerinin otoyol gişelerini nasıl tasarladıklarını belirleyen kuyruk teorisi, iş parçacığı havuzlarını (thread pools) ve Kafka tüketici gruplarını yapılandırmak için kullandığımız matematiksel modelin ta kendisidir. Entropi gibi termodinamik kavramlar, teknik borcun zaman içinde bir kod tabanını nasıl bozduğunu yansıtır.

Sonuç Yerine

Orta seviye (mid-level) mühendisliğin ötesine geçmek istiyorsanız, sadece en yeni JavaScript framework'leri hakkında okumayı bırakın ve sistem mühendisliği hakkında okumaya başlayın. İşletim sistemlerinin sanal belleği nasıl yönettiğini, ağların paketleri nasıl yönlendirdiğini ve donanım önbelleklerinin (hardware caches) dallanmaları (branches) nasıl tahmin ettiğini öğrenin. Makinenin fiziksel kısıtlamalarını anladığınızda, yazdığınız kod doğal olarak daha sağlam, performanslı ve dayanıklı hale gelecektir.

F
Ferivonus
Sistemleri İnşa Ediyor.
Sistem MühendisliğiYazılım MimarisiFelsefe