Bilindiği üzere bilginin yarı ömrü yazılım sektörü için altı aylık bir zamanın bile altına düşmüş durumda. Teknolojiler ve trendler çok hızlı gelişiyor ve birçoğu yine bu hızda kayboluyor. Bu yazımda son zamanlarda yaşanan gelişmelere ve değişimlere değinmek istiyorum.
Yazıma yazılımda ustalık (software craftsmanship) konusu ile başlamak istiyorum. Bundan üç, dört sene önce akım haline gelmiş, uzun bir süre hypelanmış ama günümüzde artık unutulmaya yüz tutmuş bir akım. Ben bu konuda birçok yazı kaleme aldım. Arşivden bu yazılara ulaşabilirsiniz. Bu yazıların çoğunluğu yeniden yapılandırma, test ve çevik programlama üzerine. Yazılımda usta-çırak ilişkisini temel alan bu akım, yazılımın bir mühendislik disiplini değil, daha ziyada bir zanaat olduğu ve çırak olarak yola çıkıp, ustalardan bu işi öğrendikten sonra iyi bir yazılımcı olunabileceği kanısını savunmakta. İdeolojisi çevik programcılık ve yazılıma dayanan bu akımın amacı programcının yeniden yapılandırma ve test etme gibi yöntemlerle yazılım sistemini her zaman yoğrulabilir bir yapıda tutarak, müşteri gereksinimlerini her daim tatmin edici çözümler geliştirecek şekilde kendisini yetiştirmesini ve yazılımda ustalaşmasını sağlamak. Bunun için programcının çırak olarak yola çıkarak, ustalardan bu işi öğrenmesi ve kalfalık sürecinden sonra ustalaşması gerekiyor. Temelinde çevik yazılım prensipleri olduğu için bu akıma sempati duymuş birisi olarak, akımın neden son bulduğunu ya da yakında son bulacağına şu şekilde sıralamak mümkün:
- Çırak olmak için ustayı bulmak gerekli. Yazılımda gerçekten ustalaşmış ve sahip olduğu bilgiyi paylaşmak isteyen çok az sayıda kişi mevcut. Ustası olmayan birisinin çırak olması mümkün değil. Bu durumda programcının kendi, kendisini yetiştirmesi gerekiyor. Durum böyle iken ustalaşma süreci uzayacaktır ya da gerekli bilgi ve tecrübeleri edinemediği için sekteye uğrayacaktır.
- Yazılım sektöründe çalışan yazılımcıların birçoğu bilgisayar ya da yazılım mühendisi. Bir mühendis ya da mühendis olduğunu düşünen bir şahsa sanayideki gibi bir ustalık imajını satmak çok zor bir iş. Nitekim bu akımın sonunu getiren ya da getirecek olan ana unsur budur.
- Ustalaşmak extreme programming gibi çevik süreçlerin ihtiva ettiği çevik yazılım metodolojilerine hakim olmak ve günlük iş hayatında uygulamak anlamına da geliyor. Çevik süreçler doğru anlaşılmadığı ve uygulanmadığı için yazılımda ustalaşma süreci sekteye uğramış durumda. Günümüz yazılımcısı test etme, yeniden yapılandırma ve sürekli entegrasyon gibi konuları angarya olarak görüyor, bu konuların bir yazılım sistemi için ne kadar önemli olduğunu önemsemiyor ve bu konuda kendisini geliştirmiyor.
- Yazılım projelerinde programcıları kenara sıkıştıran ve verimli bir şekilde çalışmalarını engelleyen en önemli problem yapılan tahminler ve konulan bitiş tarihleri. Zamanın daraldığını gören yazılımcı kaliteden ödün vermeye başlıyor. Bunu en usta yazılımcı bile yapmak zorunda kalabiliyor. Buna karşı yazılımda ustalık akımının hiçbir reçetesi olmadığı için bu akımın gerçek hayatta uygulanması da zorlaşıyor.
- Bazı programcıların gözünde yazılım sanat iken, başkalarına göre zanaat ya da bir mühendislik dalı. Yazılım sanat değildir. Sonuç itibarı ile şiir gibi kod yazma yeteneği geliştirilse bile, müşteri için önemli olan işlevdir. Müşteri kod okuyarak gereksinimlerini tatmin etmez. Gereksinimi tatmin eden işlevdir. Program yazarken zanaatten söz etmek mümkün, çünkü temiz kod yazmak çevik yazılım metotlarını da ihtiva ettiği için belirli bir ustalık gerektirmektedir. Bunun yanı sıra yeni çözümler üretmek bir mühendislik becerisidir. Yazılımda ustalık akımı yazılımı sadece zanaat olarak gördüğünden, bazı kesimlerce hiç kabul görmemiştir. Bu kesimler gerekli üniversite eğitimi ve pratik çalışmalarla yazılım yapmak için gerekli bilgi ve becerinin edinileceği fikrine sahiptirler.
Yazılımda ustalık akımından faydalanan ve ün yapan birkaç yazılımcı haricinde mahalledeki programcılarımız yine eskisi gibi paldır, küldür program yazmaya devam ediyorlar. Ne mutlu programcıyım diyene.
Güncelliğini yitirmeye yüz tutmuş diğer bir konu ise çevik yazılım. Ben kendimi bir çevik yazılımcı olarak tanımlıyor ve bu şekilde iş hayatımı sürdürmeye gayret gösteriyorum. Bu konuda birçok makaleyi kaleme aldım ve çevik süreçleri güncel olmaya başladıkları ilk günlerinden beri takip ediyor ve uyguluyorum. Son yirmi senelik zaman diliminde çevik yazılımın gelişim sürecini göz önünde bulundurduğumuzda, geldiğimiz nokta da çevikliğin her türlü derinliği kaybettiğini ve sadece proje yönetim metodoloji olarak algılandığını görebilmekteyiz. Bir scrum takımı bünyesinde her gün on beş dakika daily standup yapmayan programcı kalmadı sanırım bu gezegen üzerinde. İşin kötüsü, çoğunun bu yüzden çevik olduklarını düşünmeleri. Yapılacak bir şey yok. Kendisi okumayan, başkalarının anlatığı hikayelere inanmak durumunda.
Son zamanlarda iş ilanlarında programcı ünvanlarındaki enflasyonu fark etmişsinizdir. Kimisi frontend, kimisi fullstack, kimisi backend, kimisi de devops arıyor. Bana gelen soruların başında “şunu olmak için nereden başlamalıyım” sorusu geliyor. Genç programcı ya da programcı adaylarının kafası iyice karışmış durumda. Piyasa istiyor, boyun eğilmesi gerekiyor diyeceğim, ama bana kızacaksınız muhtemelen. Piyasa her zaman ne istediğini bilemeyebilir. Piyasa doğal olarak sermaya güdümlüdür. En az paraya, en çok işi yaptırmaya çalışıyor doğal olarak. Bu sebepten dolayı fullstack developer gibi absürd bir gereksinim oluşmuş durumda. Fullstack aslında ne tam olarak frontendi ne de backendi bilen bir programcı anlamına geliyor. İkisini de çok iyi derecede bilmek imkansız gibi bir şey. Ama piyasa iki programcı istihdamı yerine, bir programcı ile iki tarafı da götürmek istiyor ki yakında bu fikrin iyi bir fikir olmadığını anlayacaklar. O yüzden “he he” deyip, geçelim. Burada asıl değinmek istediğim nokta, unvandan ziyade bilginin daha önemli olduğunu vurgulamaktır. Tecrübeli ve bilgili bir yazılımcı için yeni bir şeyleri öğrenmek birkaç günlük mesele. Ama bunun için önce bir şeyleri çok derinlemesine ve kapsamlı olarak öğrenmiş ve uygulamış olması gerekiyor. Paranın parayı çektiği gibi, bilgi de bilgi çekiyor ya da doğuruyor. O yüzden buradaki ana mevzu çok okumak, çok öğrenmek ve çok uygulamaktır. Bu yeteneklerin olduğu yerde “öğrenmeye nereden başlamalıyım” soruşnun cevabı bellidir.
Uzun süredir yazılım sektöründe olanlar corba, ejb ya da soa gibi teknolojileri ve bu teknoojilerin başlarına gelenleri bilirler. Her birisi yeni bir hype olarak doğmuş ve bir sonraki hype in gürültü, patırdışı içinde kaybolup, gitmişlerdir. Hani yazılımdaki her türlü problemin çözümü bu ve buna benzer teknolojilerdi? Nerede kaldı o full distributed, mega event bus, kop da gel rest mimarileri? Sıkıntı yok, biri gider, diğeri gelir. Bunların en yenisi microservis diye tabir edilen, aslında sadece bir işi yapacakken yine monolit haline dönüşen uygulamalar. Microservice mimarisi yine her şeyin çözümü gibi satılıyor. Hadi sonumuz hayırlısı. Ne olacağını söyleyeyim. Beş sene sonraki kimse bu mimariyi ne konuşacak ne de uygulayacak. Tarih tekerrürden ibarettir.
Gelelim Java’ya. Şimdilerde Java 12. ve 13. sürüme kadar gelmiş bulunuyoruz. Neler oluyor? Dili hip tutacağız diye, takla üstüne takla atmaya başladılar. Dil nesneye yönelik ve ımperatifti. Şimdilerde functional ya da öyle olduğunu düşünüyor. Doğal olarak benim gibi kalın kafalı javacılar artık ımperatif değil fonksiyonel düşünmek zorunda. Cobolculara OOP öğretmek daha kolaydır sanırım. Imperatif programlamaya alışmış bir programcıya fonsiyonel programlamayı öğretmek, deveyi hendekten atlamaktan daha zor bir şey. Nereden mi anlıyoruz? Bknz. for yerine stream kullanan programcılar.
Yazılım sektöründe yeni diye satılan çoğu şey mevcudiyetin soyutlanmış yeni bir hali. Durum bu iken aslında gelişmelere adapte olmak çok kolay. Bunun için işin temellerini bilmek yeterli. Ama o temeller artık o kadar derinlerde ki çoğu programcı nerede olduklarını bilme ve anlama umudunu bile yitirmiş durumda. Bu durumda teknolojiden teknolojiye savrulmaya ve bir devrin programcısı olmaya hazır olmak lazım (bknz. Zaman Eksenindeki Teknolojik Fay Hatlarının Programcılar Üzerindeki Etkileri).
Saygı ve sevgilerimle.
EOF (End Of Fun)
Özcan Acar
ı>
Özcan Hocam Selamlar,
Ben sektördeki pek çok projenin zanaat bakış açısıyla daha mutlu yürütüleceğini düşünenlerdenim.
Ama bir taraftan da, içinde olduğumuz dönemi bir rönesans dönemi olarak görüyorum. Ve bu dönemin de iticileri program yazabilen insanlar.
Ek olarak bu yazıyı okuyanların Robert C. Martin’in (uncle bob) programcılığın geleceği üzerine yaptığı konuşmayı da izlemesini isterim.
https://www.youtube.com/watch?v=9Xy3QC7yxJw&feature=youtu.be&t=2852
Hocam elinize sağlık. Çok önemli konulara dağinmişsiniz. Durumumuz gerçekten vahim. Hep daha fazlasını isteyen iş dünyası her şeyden biraz anlayan Juniorlar haline getirdi bizi. Full Stack Developer mı Süpermen mı? diye bir yazı yazacağım yakında. Sitemden veritabanına, backendten frontend’e hatta devops süreçlerine kadar bir insan evladının hakim olması mümkün mü? Junior olduk sonunda yine ve bu asla bitmeyecek bir çıraklık, çünkü usta da aynı duruma maruz .
Ellerinize sağlık,güzel ve akıcı bir makale oldu.
Post modern dünyanın bilginin geçerlilik süresine ve yeni ve popüler olanın her daim daha tercihe şayan olduğuna dair zihniyeti yazılım dünyasını da kuşatmış durumda.
Çok teşekkürler
En büyük problem önceden yazılmış büyük ve kullanılan yazılım projelerinin sürekli yeni özellikler istenerek ihtiyacı karşılayamaması ve refactoring süresi verilmemesi, sonuç olarak tıkanan projeler görmekteyiz.