2019 yılı gibi ileri bir internet devrinde hala size cevap vermeyen, kötü tasarımlı, hatalarla dolu online alışveriş ya da başvuru siteleri ile karşılaşmak can sıkıcı. Üstelik birçoğunun tasarımları dev bütçeli büyük uluslararası şirketler ve devletlere ait ve maalesef karşımızdalar.
Bir web uygulaması, bir makine ile etkileşim ve iletişime giren bir kullanıcı modeli üzerine kurulu. Otomobilinizi kullandığınızdaki durum gibi...  Ayağınızı debriyaj pedalına bastığınızda ya da vites değiştirmek için vites kolunu hareket ettirdiğinizde bunun pürüzsüz olmasını beklediğiniz ve hareket gerçekleştiğinde de geribildirim almayı beklediğinizde olduğu gibi. Motor sesini ve sarsıntıları otomobilden tümüyle arındırdığınızı hayal edin. Bu durumda otomatik vitesli olmayan bir otomobili sadece ve tamamen görsel ipuçları ve geribildirimler ile kullanmak güç gelecektir.


1990'larda, bir programcı olarak eğitim gördüğüm yıllarda, Fred Brooks adlı yazarın 'The Mythical Man-Month' (Efsanevi Kişi-Ay) adlı ufuk açıcı kitabını okumam istendi. Bu mükemmel kitabında Brooks şunu savunuyor: Yazılım geliştirme o kadar karmaşık ve zor ki, bir projeye sadece daha çok para ve daha çok geliştirici vakti harcamak başarıyı garantilemez. (1 kişi-ay, proje yönetiminde kullanılan bir terim ve bir programcının bir ay çalışmasının maliyeti olarak tanımlanıyor ve hesaplanıyor.)
'Tersine' diyor Brooks, 'Bu yöntem, çoğu zaman işleri daha da kötüye götürür.' Brooks bir öngörüde de bulunuyor ve 'Bilgisayar programcılığında 'gümüş mermi' yoktur!' diyor. (Gümüş mermi, efsanelerde kurt adamları tek mermi ile yok etme çözümünde seçilmesi gereken tek ölümcül mermi.)
Bu kitabın, 1975 yılında yani bilgisayarların bazen geniş bir oda büyüklüğüne ulaştığı ve yüz binlerce dolara mal olduğu bir dönemde yazıldığını öğrenmek şaşırtıcı tabii. O yıllarda bilgisayar yazılım projeleri, üzerinde çalışan programcı, analist, test elemanı ve proje müdürü ordusu ile birlikte, işlemelerini sağladıkları bilgisayar donanımları kadar önemli ve görkemli idi.


Tüm projelerde kullanılan bir 'şelale' metodolojisi  (yöntembilim) vardı: Müşterinin gereksinimlerini öğren - Tasarla - Uygula - Dene -Yürüt, Sürdür. Eğer uygulama safhasında iseniz ve müşteri istek ve gereksinimlerini doğru tespit edememiş olduğunuzu fark etti iseniz, değişiklikler yapmak size pahalıya mal olur.
21. yüzyılda ise birçok yeni yazılım geliştirme metodolojisi kullanabiliyoruz. Bunların her biri müşterinin değişen gereksinimlerine ve gördüğümüz karmaşık yazılım mimarilerine ayak uydurmakta çok iddialı.
Bugün bile, başarısız, gecikmiş, ya da açıkçası, işlevini yerine getirse de ağızda kötü bir tat bırakan projelerin sayısı yüksek seviyede. Sektörün kendi tahminlerine göre, IT (Information Technology - Bilişim Teknolojisi) projelerinin % 68'i başarısız oluyor.
Sorun ne? Sorunun bir kısmı yazılım geliştirmesinin biraz çapraşık bir uğraş olmasından kaynaklanıyor. Brooks'un şakacı kehanetine göre hiçbir zaman bulunamayacak 'gümüş mermi'yi akademisyenler de hala bulamadılar.  
Sorunun ikinci kısmına gelirsek, sektörde teknoloji ve metodoloji konularında ne tam anlaşma var, ne de uyum. Her ne kadar, bir proje için başlangıç noktası olabilecek, Google ve Apple gibi çığır açıcı internet şirketlerin kullandığı ve bir çoğu ücretsiz metodoloji ve teknolojiler varsa da, bir çok yazılım geliştiricisi ya bunlardan bihaber ya da öğrenme zahmetine bile katlanmıyor.
Web sitelerini 1990'larda PHP (web uygulamaları için geliştirilmiş bir programlama dili) ile inşa edenler şimdiki yeni ve muhtemelen daha iyi geliştirme gereçlerine konusunda atalet hissediyorlar.
Bir de geliştiriciler, proje müdürleri, müşteriler ve diğer ilgili taraflar arasında bir iletişim sorunu var. SCRUM (*) yönetim modeli, AGILE (Çevik) yazılım geliştirme modeli ve benzer çağdaş teknolojik metodolojik çözümler bunun üstesinden gelebilir. Ancak gerçek durum ise farklı. Silikon Vadisi'nin en gözde unsuru olmasına rağmen SCRUM'u bile kullanan pek az proje timi var.


Sorunun son kısmı ve belki de toplumun en kolay ele alabileceği ve çözebileceği unsur ise eğitim. Bazı üniversiteler lisans öğrencilerine hala ve sadece C ve C++ programlama dillerini öğretiyorlar. Her ne kadar bunlar özellikle bilgisayar bilimi öğrenimini besleyici mükemmel program dilleri olsalar da, bugün için yazılım sektörünün çoğunluğunda C ve C++ programcılarına ihtiyaç yok.
Üniversiteler anlamalılar ki mezunlarının çoğunluğu konularında daha ileri çalışmalar yapmayacak ve kendilerine eğitim gördükleri alanda iş arayacaklar. Öğrencilere en iyi uygulanan dilleri kapsayan bir 'alet çantası' öğretilmeli, yazılım mühendisliği eğitimi sadece yorgun bir profesörün bir kitabı kullanarak verdiği tek dönemlik bir ders olmak yerine tam kapsamlı bir program içinde yürümeli.
Bugünün sorunlarını bugünün teknolojileri ile çözme konusunda öğrencilerin ilgisi çekilmeli.
Yarınlarda her şey değişecek... Ancak iyi bir yazılım mühendisi zamanı geldiğinde bu yeni teknolojiler konusunda kendini eğitecek zamanı bulmalı ya da işvereni bu zaman ve fırsatı vermeli. Yeniye uyum sağlayamayanın yarınlarda yeri yok. Yeniye uyum ise sadece eğitim ile olur...

(*) NOT: 'SCRUM ', rugby oyununda oluşturulan takım kenetlenmesidir. Top, kenetlenmiş iki rakip takımın (16 oyuncuyu bulabilir) oluşturduğu 'SCRUM'un ortasına atılır. Oyuncular topu takım arkadaşlarına kazandırmak için arkaya sürüklemeye çalışırlar. 'SCRUM' yazılım yönetim sistemi, gereksinimleri açıkça belirli olmayan, değişime açık, karmaşık yazılım projelerinin yönetimi için uygulanır. 'SCRUM' yönetim biçimi esnektir ve süreç içerisinde aksayan noktaların açığa vurulması için şeffaftır. Proje ekibini aksaklıkları çözümleme ve sürekli iyileştirme yönünde motive eder.