Yakın zamanda blogda yapay zeka ve Chatgpt hakkında düşündüklerimi yazmıştım. Ayrıca yazılım geliştiriciliği konusunda 3 yazım da mevcut. Bunlardan birincisi Yazılım yani oluşturmaya çalıştığımız ürün üzerine idi. İkincisi Yazılımcı yani işi gerçeğe çeviren kişi üzerine idi. Sonuncusu ise Yazılım mimarı yani işin başında olması gereken kişi ile alakalı idi. Bu yazıların hepsinde kendimce gördüğüm sorunlardan ve yanlış anlaşılmalardan bahsetmiştim. Bu sorunlardan bir başkası olan Fullstack developer kavramından bahsetmeye sıra gelmişti.
Chatgpt konusunda yazarken yapay zekanın hiçbir zaman yazılımcıların yerini tamamen alamayacağını söylemiştim. Bu yazıda bu düşüncemin nedenini fullstack developer kavramı üzerinden açıklamaya karar verdim. Çünkü bir noktada bu iki kavram kesişiyor. Baştan belirteyim, kendini fullstack developer olarak gören hiç kimseye karşı bir eleştirim veya yargım bulunmamaktadır. Bu yazıyı endüstrideki sorunlara değinmek için yazıyorum. Fullstack developer 'ın ne demek olduğunu sorarak başlayalım.
Yok o steak, bu stack. Konumuz fullstack developer. Bu yazıyı yazılım ile yakından ilginiz olmasa da anlayabileceğiniz şekilde yazmak istediğim için size hikayeyi baştan anlatmama izin verin. Yazılım geliştirmenin bir iş olduğu ilk zamanlarda genelde kişisel kullanım için uygulamalar geliştiriliyordu. O zamanlar az sayıda yazılım dili vardı ve bir geliştiricinin bir şirketin işlerini halledebilecek bir uygulama yazabilmesi para kazanmasına yetiyordu. Bu uygulamalar da genelde şirket içi personel tarafından şirketin işleri için kullanılıyordu. Buna masaüstü uygulaması diyebiliriz. Bu uygulamaların alanı backend dediğimiz kavramdı.
Sonra bu şirketler büyümeye başladı ve büyük verilerle uğraşma ihtiyaçları da doğdu. Bu da insanları veritabanı (database) sistemleri konusunda bilgi sahibi olmaya ve veritabanı kullanmaya zorladı. Sonrasında internet devrimi geldi ve şirketler sundukları ürün ve hizmetlere insanların online olarak da erişebilmesini ister oldu. Buna da web uygulaması demeye başladık. (Enterprise veya kurumsal uygulama da diyebiliriz) Bu yazılımlara internet üzerinden browser ile ulaşırsınız ve karşınıza havalı arayüzler çıkar. Bu arayüze frontend diyoruz. Sonra internetten erişmenin doğası gereği güvenlik sorunları da oluşmaya başladı ve ortaya güvenlik uzmanı şeklinde bir ihtiyaç da çıktı. Büyüyen şirketler daha erişilebilir olmak adına akıllı telefonların üretilebilmesi ile mobil uygulamalara da ihtiyaç duymaya başladılar. Fakat kurumsal yazılımlar büyüdükçe küçük parçalara bölmek ve zorlaşan bakımını kolaylaştırmak için arka plan işleri ortaya çıktı. Buna da devops diyebiliriz, veya development operations yani geliştirmeye yardımcı operasyonlar. Konu ile ilgili ilkokul seviyesi çizimimi bir resim oluşturması açısından aşağıya eklyeyeyim.
Son aşamada insanlar frontend yani önyüz ve backend 'i ayırmaya karar verdiler. Bu aslında doğru bir yaklaşımdı çünkü iki alanda devasa gelişmeler ve gerekli yetenekler vardı. Bu durumda idealde büyük bir yazılım için ortalığı toparlayacak ve projeyi yönetecek bir yazılım mimarına, arkada çalışan kodlar için bir backend geliştiricisine, ön tarafta görünen kısım için bir frontend geliştiricisine, bir veritabanı uzmanına, bir güvenlik uzmanına ve yazılım süreçlerini kolaylaştırabilecek bir devops uzmanına ihtiyacınız hasıl oldu. Bu da 6 kişi demektir dimi? Birbirinden tamamen farklı 6 kafa yapısı demektir. 6 farklı kişilik demektir. Kendi arkasında geniş araştırma alanları olan 6 farklı yetenek demektir. Stack türkçede yığın demektir, yani fullstack yığınla iş demektir :)
Bu ideal durumdu fakat insanoğlunun 2 zararlı alışkanlığı devreye girdi. Aç gözlülük ve cehalet. Aç gözlülük şirketlere 6 kişilik iş için 2-3 kişi işe alabileceklerini düşündürüyor. Cehalet ise bunun gerçekten mümkün olabileceğini, günün sonunda düzgün çalışan yazılımlar yapılabileceğini ve 6 farklı alandaki araştırma ve geliştirmeyi yoksayabileceklerini düşündürüyor. Sonuçta ortaya çıkan ucube yaklaşım ise fullstack developer oluyor. Tabi bazı yazılımcılar bu noktada fullstack dendiğinde frontend ve backend kavramlarından ibaret olduğunu ifade edebilirler ama %99 ihtimalle sorumlulukların bununla sınırlı kalmayacağını biliyoruz. O yüzden fullstack developer dediğimiz kavram yazılım mühendisliğinin dejenerasyonudur diyeceğim. Neden mi?
İnsanlar (normal insanlar) genellikle uzman oldukları işte derinleşmeye çalışırlar, yaptıkları iş ne olursa olsun. Bir doktor, bir pilot, bir mühendis ..vs. Gelişmek için yer varsa genelde o yere ulaşmaya çalışırız. Zamanında yazılım dediğimizde multidisipliner bir alandan bahsederdik ve bu alanlarda derine inen uzmanlar olurdu. Kendi alanlarında bilgilerini arttıracak vakitleri olurdu. İyi backend yazılımcıları veya frontend yazılımcıları veya veritabanı uzmanları olurdu bir zamanlar. Bugün de bu insanlardan var tabi ki ama tahmin edebileceğiniz gibi bir insan 3-4 alanın veya konunun uzmanı olamaz. Halk dilinde buna "herb.kolog" diyorlar :)
Bugünlerde yazılım geliştiriciler bu 6 alanda işi yürütmeye çalışıyorlar. Bütün stack 'ten sorumlu olan geliştiriciye fullstack geliştirici deniyor. Bu da kendini besleyen bir döngüyü başlatıyor. Çünkü eninde sonunda bir yerde çuvallıyor sistem. Uygulamalar hatalar vermeye başlıyor. Yazılımcılar hiçbir alanda kalifiye olamıyor işleri çok ve zamanları az olduğu için. Yazılımların bakımı giderek zorlaşıyor ve yazılımcılar tükeniyor ve terk ediyor. Sonra yeni gelecek yazılımcı adayları bu iş için gereken mantık dışı gereksinimleri ve yetenekleri karşılamaya çalışıyor. Hiçbir konunun uzmanı olamadan her konudan biraz bilmeye çalışıyorlar. İster istemez kötü kod yazıyorlar. Uygulamalar yine hata vermeye başlıyor ...vs başa dönüyor süreç. Bu döngünün kazananı kim gerçekten bir fikrim yok.
İşin kötü tarafı bu döngü kanıksanmış ve normal görülmeye başlanmış. Sanki işin ehli dediğimiz uzmanlar aptaldı veya enayi idi de uzmanlaşmaya çalıştılar. Sadece kebap veya salatada mantıklı olacak "ortaya karışık" anlayışı ile sorunları çözebileceğimizi düşünmeye başladık. Hayır ÇÖZEMEYİZ !!!. Sanırım bu yazdıklarımdan sonra siz de bir mesleği meslek yapan şeyin yetenekler ve emek olduğunu düşünüyorsunuzdur. Örneğin herşeyin doktoru veya öğretmeni veya avukatı olamazsın. Herşey heryerde aynı anda (Everything everwhere all at once) dediğimiz sadece kurgusal (ve gayet iyi) bir filmden ibaret :) Ne yaparsan yap işinin iyisini yap diyebiliyorsak işinizin bir derinliğinin ve uzmanlığının olduğunu bilmek zorundasınız. Dejenerasyon ise yazılımda mesleki olgunluk dediğimiz gerçekleri yoksayarak işleri halledebileceğinize olan inancınızdır. Bir de not olarak, bütün dünyanın bozulmasının sebeplerinden birisi de budur.
Neden özellikle 6 alandan bahsettiğimi açıklamak istiyordum fakat her birisinin kendi içinde bir blog yazısı gerektireceğini fark ettim. Zaten işin garip tarafı benim bu blog yazısını anlamlı kılmak için savunma ihtiyacı duyuyor olmam. Nasıl bir doktorun bir mühendisin bir öğretmenin işi basit ve bayağıdır diyemiyorsak yazılım da öyle ayağa düşmüş bir iştir diyemeyiz. Aaa bir dakika, sahi Chatgpt bunu iddia ediyordu dimi, yada ima ediyordu... Dimi?
Eğer chatgpt ile yaptığım konuşmayı okursanız onun görevinin bilgi sunmak olduğunu fark edersiniz. Tabi ki bir yandan kendince çıkarımlar da yapabiliyor ki bu da gerekten takdir edilesi. Chatgpt 'nin belki de 20 farklı programlama dilinde kod yazabildiğini görmüşsünüzdür. Hatta karmaşık kodlar yazıp bunları açıkladığını da görmüşsünüzdür. Muhtemelen modüler bir yapıda yazılım tasarlayıp bir araya da getirebilir. Kodlarınızın içindeki hataları da bulabilir. Buradan bakınca chatgpt gayet yazılım geliştirme işi yapabilir gibi görünüyor dimi? Veya yakın gelecekte size çat diye koca bir kurumsal uygulamayı yazıp verebilir gibi görünüyor dimi? Sonuçta yazılım dediğiniz sadece kod yazmaktan ibaret dimi?
HAYIR :) Bu yüzden konuyu fullstack developer kavramından ve neden dejenerasyona sebep olduğundan bahsederek yazdım. Kıdemli bir yazılım geliştirici ve eğitmen olarak, inanın bana chatgpt 'nin sizin görebildiklerinizden daha fazlasını yapabileceğini görüyorum. Ayrıca sürekli yeni kodlarla beslenebileceği için yarın birgün çok daha kalifiye işler yapabileceğini de düşünüyorum. Hatta muhtemelen o kadar çok kod görüyor ki o kadar kodu hiç durmadan 1 milyon yıl yazsam ben yazamam. Evet bildiği kodları bir araya getirebilir ve size kodlar önerebilir. Fakat bu kod yazmayı bildiği anlamına gelmiyor. Türkçe biliyorsunuz ama usulüne uygun ve derinlikli bir roman yazamıyorsunuz gibi. önceki yazımda bildiği şeyleri sadece biliyor demiştim. Bir noktada ezberlemek yerine öğrenmeye başlaması lazım. Bu da bizim çalışmak dediğimiz şey değil mi? Açayım konuyu:
Chatgpt hiçbir zaman bir kriz yönetimi yapmadı veya kendi kodunda hatalarla karşılaşmadı veya hatalı olduğunu düşünmedi. Programlama dillerinin evrimleşmesine şahit olmadı. Kendisini güncelleyemez, düzeltemez veya sürekli olarak yeni şeyler öğrenemez. Çok fazla bilgisi var fakat bu tecrübe değildir. Mesela bir iş kolunda şirketin iç işleyişlerini göz önünde bulundurarak yazılım için 4-5 farklı bakış açısı getirip bunlardan en iyisini seçemez. İnsan ve çevre faktörlerini, mesela toplantıları veya çalışan motivasyonunu dikkate alarak yazılım geliştirme sürecini ideale getirmeye çalışamaz. Çünkü günün sonunda ürettiğiniz yazılım insanlar arası ilişkilerden etkilenen ve şirket için süreçlerden süzülen bir ürün oluyor. Chatgpt çalışan kod yazabilir ama siz yaşayan kod yazabilirsiniz.
Chatgpt 'den programlama adına çok şey öğrenebilir miyiz? Kesinlikle. Hatta bunu yapmalıyız da. Yazılım geliştirmede sıradan veya tekrar eden basit işler var mıdır? Kesinlikle. Ben bile bazen benzer işleri tekrar yapmak veya benzer kodları yazmak zorunda kalmaktan sıkılıyorum. Chatgpt bu süreçlerimizi hızlandırabilir mi? Tabi ki evet. Bir yazılımı tamamı ile chatgpt 'ye emanet edebilir miyiz? O yemez :) Eğer gelecekte bir gün yazılımlar tamamen chatbot 'lara devredilmiş ve yazılımcılar sokaklarda aç geziyorsa ve bu yazımı okursanız, savaşı dejenerasyon kazanmış demektir. Bu dijital çağda bile kimsenin yazılımın arkasındaki mesleki yeterliliği umursamadığını gösterir. Mesleklerin içinin boşaldığını gösterir. Bu resim de bana Idiocracy isimli filmi hatırlatır :)
Uzun lafın kısası, mesleklerin alamet-i farika dediğimiz yeterlilikleri kayboluyor veya yok ediliyor. Bu çok ciddi bir sorun. Yazılım geliştirme de bu salgından nasibini aldı ve fullstack geliştirici kavramı hayatımıza girdi. Bu noktada kimseyi eleştirmediğimi tekrar belirteyim, kendinizi bir fullstack geliştirici olarak görüyorsanız sizi yargılamak veya görüş belirtmek bana düşmez. Ayrıca hem frontend hem backend geliştirmeye yardımcı olan yazılımsal araçlar olduğunu da biliyorum ama yukarıda belirttiğim gibi iş bu noktada kalmıyor genelde. Yanlış bir algı yüzünden insanlar bir gün chatgpt 'nin yada yapay zekanın yazılımcıların yerini alabileceğini düşünüyor. Bu da bana mantıklı gelmiyor. 15 yıllık yazılım içindeyim ve gördüğüm kadarıyla yazılımcılık alanında dikkat çekilmesi gereken ciddi sorunlar var. Ben de kendi alanımda iz bırakmaya çalışıyorum. Sizlere bilinçli kodlamalar dilerim. Bir sonraki yazıda görüşmek üzere :)
Bir yorum yazabilirsiniz