Yazılım Geliştirme Neden Daha da Karmaşıklaşıyor?
Benim gibi uzun yıllardır IT sektöründe olan ve IC (Individual Contributor) olarak çalışmaya devam eden yazılımcıların (dinozorlar diyebilirsiniz) arada bir kendilerine sordukları bir soru vardır: “O kadar yeni araçlar ve frameworkler çıkmasına ve kullanmamıza rağmen, yazılım geliştirme neden daha da karmaşıklaşıyor?”
Her çıkan araç veya framework mevcut işlerimizin bir parçasını kolaylaştırmayı vadediyor. Ve birçoğu gerçekten de ediyor. Ama MVC pattern üzerinden gidersek, eskiden SQL + 1 veritabanı (Oracle, SQL Server, MySQL..) + birkaç frontend teknolojisi (HTML, JavaScript, JSF, PrimeFaces, …) + bir backend dili (C#, Java, Delphi..) ile full stack developer olmak ve bir uygulamayı komple yönetebilmek mümkün iken, bugün daha specific bir alan seçsek dahi (mesela backend developer) karşımıza kabarık bir tech stack (teknoloji seti) çıkıyor.
Bunun sebepleri arasında birkaçını saymak gerekirse:
- Uygulamaların modernleşmesi: Değişen talepler, beklentilerin artması ve rekabet ile birlikte uygulamalar daha fazla kullanıcı dostu olmak ve hizmet sunmak zorunda. Örneğin eskiden büyük bir kısmı statik içeriklerden oluşan web siteleri var iken, bugün interaktif, dinamik ve daha fazla fonksiyonları olan web uygulamaları karşımıza çıkıyor. Bunlar için de yeni araçlar/kütüphaneler entegre edilmesi gerekiyor.
- Alternatif teknolojilerin artışı: Daha önce bir ihtiyaçtan bahsedildiği zaman, herkesin aklına benzer teknolojiler gelirdi. Bugün ise aynı işi yapabilen onlarca alternatif var. Bu alternatifleri birbirleri karşılaştırıyor ve bazen de tartışıyoruz. Teknolojideki hızlı değişiklikleri de hesaba katarsak ilk defa duyduklarımız bile olabiliyor.
- Entegrasyon artışı: Modern uygulamalar çok nadir standalone çalışıyor. Genelde başka uygulamalar ile entegre olurlar. Mikroservice mimaride olabiliyorlar, API/Web servis çağrımları ile birbirleriyle konuşuyorlar. Bu da uygulama geliştirme ve testi biraz daha karmaşık hale getiriyor.
- Deployment: Eskiden serverlara deployment genelde manual olarak yapılırdı. Build ve test sonrası onaylanmış paket (mesela war, ear…) bir webserver a kopyalanır ve ayağa kaldırılırdı. Bugün ise CI/CD entegrasyonu yapılmamış uygulamaya az rastlanıyor. Build, test, deployment gibi adımları otomatize eden bu araçlar kolaylık sağlasa da, bu araçları da öğrenmek zorunda kalıyoruz. Tech stack kabarıyor.
- Scalibility (Ölçeklenebilirlik) ve performans ihtiyaçları: Eskiden desktop uygulamaları revaçtaydı. Her client kendi makinesine uygulamayı kurur ve kendi kaynaklarını kullanırdı. Bir ölçeklendirme ihtiyacı pek yoktu. Ama günümüzde modern web ve enterprice uygulamaların kolay ölçeklenebilir olması çok kritik. Yeni bir clientın gelmesi veya requestların artması durumunda bir sorun yaşamamanız lazım. Bunun için de mimarinize distributed sistem, load balancer, api gateway, caching, read replicas ve message queue gibi yetenekler kazandırmanız gerekiyor. Bunların yolu da yeni araçlar öğrenmekten geçiyor.
Özetle, yeni araç ve frameworkler yazılım geliştirmeyi daha verimli ve kaliteli hale getirmesinin yanında, geliştirme sürecindeki karmaşıklığı azaltmıyor, aksine artırabiliyor. Bugünlerde en fazla konuşulan konulardan biri olan “AI developerların sonunu getirebilir mi?” sorusuna ben kabaca olumsuz yanıt dönüyorum. CoPilot veya ChatGPT gibi araçlar belki bazı hamallık işleri bizden alacak ama bu defa da bu araçların kullanılmasını öğrenmemiz gerekecek. Kullandığımız IDE’lere ilgili pluginleri yükleyip onların da verimli kullanımını öğreneceğiz.