Yazılım mühendisliği mühendislik midir?
Yazılım, çok akıllı bir ya da birkaç adamın odaya kapanıp harala gürele kod yazıp sonra da bakın süper program çıktı ortaya, acayip sofistike işler yapıyor dediği türden sanat, zanaat ve teknik bilgi karışımı gizemli bir üretim alanı mıdır? (Olası tepki: E ama DOOM öyle yazılmadı mı? Bak süper oyun yaptı o zeki ve bilgili adam. Yalan mı? Bak filanca da kapandı odaya süper derleyici, işletim sistemi filan yaptı. Efendim? Her şeyi tek başına yapmadı mı? Yaptı yaptı. Kapandı odaya. Tek başına. Canım birkaç kişi destek vermiştir. Onlar da odaya kapanıp yazan çok zeki ve çalışkan adamlardı. Keşke herkes böyle olsa. Hem tek bir kişinin ya da iki kafadarın geliştirdiği ürünler peşinden fanatiklerini yaratmadı mı ve sevilmedi mi?)
Ben ise aksini savunurum, yazılım denen alan mühendislik perspektifini güç bela da olsa benimsemeye başlamıştır yavaş yavaş, çileli, sancılı ve her kafadan bir ses çıkan yolda ilerlesek de süreç içinde biz de (ya da belki çocuklarımız) ciddi üretim tekniklerini benimseyeceğiz.
Yazılım sektöründe çalışanların bir kısmının şikayeti yabancı değildir: Çok çalışıyoruz, iş yetişmiyor, sabahlamak zorunda kalıyoruz.
Yani cin gibi insanlarız, çok zekiyiz ama maalesef yazılım denen bu şeytani disipline içkin öyle garip özellikler var ki ne yaparsan yap başa çıkılamıyor, yola yordama, belli yönteme gelmiyor. Buna inanmak güç. Bunu temellendirmek daha da güç.
Yöntem, disiplin deyince bazı yazılımcılar korkuyor. Yahu işte biraz tasarım yapar, kodu yazar, müşteriye gösterir, geri besleme alır, sonra gene kodu yazar, biraz test eder, hataları düzeltiriz. Müşteriye gösteririz, sonra... şey, sonra bazen yeniden yazarız!
Problem nedir? Yeterince çalışmamak mı? Yeterince zeki olmamak mı? Yeterince eğitimli olmamak mı? Yoksa yanlış eğitim almak mı?
Belki de problem "yazılım mühendisliği" denen şeyin eğitiminin yeterince sıkı verilmemesi ve otoriteler tarafından bunun bir onaya henüz dünyanın hiçbir yerinde doğru dürüst bağlanamamış olması.
Siz hiç üreteceği gemi, gökdelen, otobüs, vs. bazı standartlara çok sert şekilde bağlı olan ve ciddi testlerden geçeceği için oflayıp puflayan makine mühendisi, mimar ya da inşaat mühendisi gördünüz mü?
Deprem esnasında yazılımın altında kalıp da ölen insan yok diye mi bu kadar rahatız?
Bindiğiniz uçağın pilotu yarıyolda uçağın temel sistemlerinden birine bir yama uygulanacağını söylese bir daha o uçak markasını kullanan havayolunun müşterisi olur muydunuz? Ne kadarlık tazminat davası açardınız? (Olası tepki: Abartıyorsun kardeşim, hatalı programdan kim ölmüş. O kadar hayati bir şey değil yazılım. Sadece ve sadece ölüm kalım meselesinde olur o dediğin katı standartlar, testler. Ve sadece ölüm kalım vakalarını engellemeye yarar. Kodluyoruz biz. Kimse ölmez bu yüzden. Abartma abartma, hadi yetiştirmemiz gereken bir yığın kod var.)
Bilgisayar bilimleri eğitimi ile yazılım mühendisliği aynı şey midir?
Programlama ile yazılım mühendisliği aynı şey midir?
Bir odaya kapanıp kod yazan zeki ve gizemli adam profili ile yazılım mühendisliği ile aynı şey midir?
Açık kodlu ve kimseye hesap vermek zorunda olmadığınız yazılım geliştirme eylemi ile yüzbinlerce kişinin değil de sadece belli bir kısım müşterinin kullanacağı ve problemsiz şekilde kullanmak istediği bir uygulamayı geliştirmek ve sizden bazı taahhütleri yerine getirmesini beklemesi aynı şey midir?
Doğru dürüst gereksinim analizi gerçekleştirmek, doğru dürüst yazılı spesifikasyon üretmek, bunlardan yola çıkarak test durumları oluşturmak ve ancak ondan sonra bunlara uygun şekilde, test edilebilir, onaylanabilir, kalite kontrolü %90 otomatik olarak yapılabilir "yazılım ürünleri" geliştirmek görünen o ki, birkaç kitap okuyup yeni bir dili kurcalaya kurcalaya öğrenmekten çok daha zor. Ya da doğru dürüst eğitimi verilmediği için zor gibi görünüyor! (Olası tepki: Ohooo, şimdi kim uğraşacak o kadar kağıt işi ile, bırak da kod yazalım ben adam, olmadı sonra düzeltiriz. Ya da başkası düzeltir. Bu şekilde işi yavaşlatma lüksümüz yok. Yok tabii, yani sonra dönüp dönüp iyice karıştırma ve bunun bedelini ödeme lüksümüz var. Var değil mi, hem işler yıllardır böyle yürümüyor mu? Bir an önce ortaya bir şey koymalıyız. İnşaat mühendisliği değil ki kardeşim bu. Abartıyorsun!)
Lafı uzatmayayım, insan kendisi gibi düşünen başka insanların da olduğunu görünce "herhalde o kadar da salakça düşünmemişimdir" hissiyatına kapılıyor. Bu hisse kapılmama yol açan kişi ise Steve McConnell. Professional Software Development: Shorter Schedules, Higher Quality Products, More Successful Projects, Enhanced Careers kitabının yazarının aşağıdaki sunumu uzun süredir düşündüğüm ve insanlarla tartıştığım konular hakkında beni yeniden düşünmeye sevk etti:
A comprehensive summary of the book Professional Software Development