10 Nisan 2023 Pazartesi

Framework Kullanmak

     S.A. Arkadaşlar,

    Zaman zaman tartışılan ve son günlerde yine birkaç yerde karşıma çıkan "framework" konusunda ben de birkaç kelam etmek istiyorum. Framework'lar gerekli midir, işi kolaylaştırır mı, zorlaştırır mı, seni geliştiri mi, köreltir mi? Ne gibi avantaj ve dezavantajları var. Özel/gizli (private) ve açık kaynaklı olarak arada farklılıklar var mıdır gibi bazı soruları cevaplamaya çalışacağız. Öznel de olsa farklı tecrübeleri içeren bir yazı olacak. Hazırsak başlayalım...

    Framework bir yazılım geliştirmek için kurulmuş başka bir yazılım olarak düşünebiliriz. Ben bunu sektörden olmayan arkadaşlarıma anlatırken genelde şu örneği kullanıyorum. Size kabası yapılan bir ev veriliyor ve siz onun içini istediğiniz şekilde dizayn edebiliyorsunuz. En başından size bu altyapıyı tasarlasınız hem bilginiz sınırlı hem de daha pahalıya patlayabilir, ama aynı şekilde bu şablon sizi kısmen kısıtlayabilir ve tam olarak istediğiniz şey de olmayabilir. Genel olarak böyle anlatmak umarım yanlış olmamıştır.

    Özel Framework'ler genel itibarıyla şirket içi geliştirilen ve kullanılan veya dışarıya açık kaynaklı olarak sunulmayan farklı firmalar tarafından geliştirilmiş çatı yazılımlarıdır. Açık Kaynaklı olanlar ise belirli kişi veya şirketler tarafından geliştirilmiş ve herkesin katkı verebileceği çatılar olarak özetleyebiliriz.   

    Kariyerime başladığım dönemlerden bu yana zaman zaman bu konuyla muhatap oldum. Özellikle ilk dönemlerde Java kodluyorken bu durumla daha çok karşılaşıyordum. Java'nın kendi web framework'leri (strust, jsf, jsp, spring) yetmezmiş gibi her çalıştığımız firmanın kendine ait framework'ları zaten zor olan süreci daha da zorlu kılıyordu. Açıkçası başlarda hem bunun farkında olmak zordu hem de yazılımcılar olarak bugünkü kadar şanslı değildik :). O yüzden bir şekilde bir yerden tutunmaya çalışıyorduk...

    Şirketlerin kendi framework'leri tarafında karşılaştığım ciddi sıkıntılardan biri Hybris framework'üydü. Açıkçası şu an geldiği noktayı tam bilmiyorum ama ilk kullanılan dönemlerde çok acı verici tecrübelere sahne oluyordu. E-ticaret için bir sürü güzel avantajı olsa da bir yerde takıldığın zaman şirket içi yardım alman şarttı maalesef. Kendilerine özel bir arama motorları yapmaya çalışmışlardı, maalesef çok çok kötüydü (muhtemelen şimdi daha iyidir). Stackoverflow'da zaten soru sorulması yasak, bir şekilde bu soruları siliyorlar bildiğim kadarıyla. Şirketteki arkadaşların eline düşüyorsun işin özü :) Onların da bitirmeleri gereken işleri varsa değme keyfine gitsin... 

    Şirketlerin kendi özelinde yazdıkları veya Hybris gibi kapalı framework'lara oldum olası sıcak bakamadım. Tabii sıcak bakamayışımın nedeni biraz da bu yukarıda saydığım maddeler. Ayrıca bu tarz işlerde şirketin çalışana, çalışanın da şirkete olan bağımlılığı artıyor. Bir yerden sonra ne şirket elemanı işten çıkarabiliyor ne de eleman şirketten ayrılabiliyor. Tam bir kangren ilişkiye dönme tehlikesi olduğunu da hatırlatmakta fayda var.

    Bu framework'leri öğrenmenin başka bir sıkıntısı da öğrenme eğrisinin uzun olması. O şirkete has bir şey olduğu için istediğiniz kadar tecrübeli olun yine de bu yeni ortama adapte olmak zorundasınız, tabi tecrübeniz doğrultusunda bu süreci kısaltmanız mümkün. Mümkün, mümkün olmasına da dokümantasyon varsa tabii ki :) Şirket içi olan hiçbir framework'ta maalesef dokümantasyona denk gelmedim, varsa da 3-5 tane yazmış olmak için yazılmış güncelliğini kaybetmiş sayfalar.

    Bunun yanında kullanılan 3. parti yazılımların bağımlılıklar nedeniyle projelerin bir süre sonra güncellenemeyecek noktalara gelmesi var. Bu tabii ki her projede olmaz, özellikle açık kaynaklı projelere bu tarz şeylere mümkün mertebe dikkat ediyorlar, ama içeride kalmış, aman çalışan sistemi bozmayalım diyen sistemlerde sıklıkla rastlanabilir. Bunun yanında geriye dönük kodlara destek verme konusu da elinizi kolunuzu bağlayabilir. Özellikle "core" yerlerde yapacağınız değişiklikler sistemin birçok yerini etkileyeceğinden bunları yapmak bir yerden sonra imkansıza dönebilir. Normal şartlarda bunu farklı test yapılarıyla desteklemek lazım ama maalesef nerede o günler ...

    Hiç bir olumlu yanı yok mu derseniz, tabii ki var, çalışanını mutlu edip tutabilirsen güzel ve hızlı ürünler ortaya koymak mümkün, ama piyasanın bu kadar hızlı olduğu şu dönemlerde maalesef bunu yapabilmek daha da zor. Takdir edersiniz ki eski zamanlarda bu nispeten daha kolay yapılıyordu, fakat pandemiden sonra hiçbir şey artık eskisi gibi değil, en azından yazılım dünyası için...

    Başka bir nokta ise bu framework'ü kodlayan olmak veya framework ile kodlayan olmak arasındaki fark. Bence burada da yine bir farklılık var. Genelde framework takımları şirketin içindeki havalı tayfa olur. Kendilerini veli-nimetten saymak gibi triplere girebiliyorlar. Ha burada çalışmak, insanı farklı düşünmek ve geliştirmek açısından çok faydalı olabilir. Bunu da göz ardı edemeyiz, ama bu yazılan kodlarla geliştirme yapmak çalışanı geliştirmek yerine geriye bile götürme ihtimali var. Business ve CRUD işlemleri arasında yıllarını geçirebilir. Küçük şirketlerde nispeten durum farklı olup her iki tarafta da rol alabilirsiniz. Bu bana kalırsa fena olmayan bir durum. Özellikle de sizi geliştirebilecek birileriyle çalışıyorsanız bu gayet güzel bir şey olabilir. Bildiklerini aktaran ustalara selam olsun.

    Şimdiye kadar şirket içi ve açık kaynaklı olmayan framework'lerden bahsettik. Şimdi ise açık kaynaklı olan framework'lerden bahsetmek istiyorum. Bunlara bakışım ise nispeten olumlu. Bazı sevmediğim noktalar olsa da genel itibariyle daha olumlu bakıyorum. En azından bir topluluk desteği, güzel bir dokümantasyon, durumu tartışabileceğin iş arkadaşların dışında birileri var. Burada da tabii bir süre sonra yazdığın framework ile düşünmeye başlıyorsun ve yavaş yavaş büyük resimden çıkıp küçük resimde takılmaya başlıyorsun. Bu da yine kapsamı veya hareket alanını kısıtlıyor bence.

    Bu framework'ların genelinde benim hoşlanmadığım nokta, yazılımcıya biz seni bir sürü "architecture" dertten kurtaracağız, sen sadece işine odaklan demeleridir. İyi hoş da yazılımcının tek işi verilen "business" işini mi yapmak? Soyutladığın şey, benim derinlere inmeme engel oluyor ve sen bunu bana iyi bir şey gibiymiş yansıtıyorsun. Dürüst olayım işveren için çok güzel bir durum. Hazır bir yapı ile orta halli birkaç yazılımcı ile güzel ürünler çıkarma düşüncesi, ama çalışan için sizce de aynı durum geçerli mi?

    Yukarıdaki birkaç farklı durumu ayrı ayrı ele almaya çalıştım. Konuyu hem framework geliştiren hem de framework ile kodlayan bazı arkadaşlarımla tartışma fırsatı buldum. Onların da fikirlerini alarak yazıyı harmanlamaya çalıştım. Kaçırdığım, düşünemediğim farklı bir sürü noktalar olabilir. Yukarıda da belirttiğim gibi bunlar edindiğim tecrübeler ve öznel düşünceler. Konuya farklı bakmamı sağlayacak her türlü fikre açık olduğumu belirtmek isterim.

    Özetle diyebileceğim, açık kaynaklı ve güncel framework'lere genel itibarıyla daha olumlu yaklaşıyorum. Bununla birlikte bu ekiplerin kendi bünyelerinde veya en azından katkı sağlayan gönüllüler olabiliyorsanız ne ala.  Tek kişinin/şirketin tekelinde olanlara ise nispeten daha mesafeliyim. Elde ettiğiniz bilgi birikimi, tamamıyla olmasa da büyük bir kısmı o şirkete özel olarak kalabilir. Naçizane bunları göz önüne alarak karar vermekte fayda görüyorum.

    Yazıyı bir hadis-i şerif ile bitirelim.
"Müjdeleyin, nefret ettirmeyin; kolaylaştırın zorlaştırmayın." [Müslim, Cihâd, (1732)]

 

Hiç yorum yok:

Yorum Gönder