FRONTEND KAPSAM
Teknolojinin Geliştiriciler Üzerindeki Baskısı
Ben bu yazıyı yazarken bile yeni kütüphaneler/ framework’ ler çıkmış, bu kütüphanelerin, teknolojilerin duyurusu bir yerlerde yapılıyordur. Geliştiricinin üzerindeki yeniyi kullanma, teknolojiyi yakalama baskısı her geçen gün bizleri daha fazla ezmeye, daha fazla bilgisayar başında zaman geçirmeye zorluyor. Zamanımızın büyük bir kısmı teknoloji takibi yaparak geçirmeye zorluyor.
Soyutlama biz geliştiricileri ileriye götüren kütüphanelerin yazılarak daha büyük ve kapsamlı projeler geliştirmemizi sağlayan bir kavram. Peki bu gelişim ve değişim son zamanlarda biz geliştiricileri işin içinden çıkılmaz bir hale mi getirdi ?
Aslında konu bütün sektörü (Backend, DevOps, Frontend, Mobil, Makine Öğrenmesi, Büyük Veri vb..) ilgilendirse de ben daha çok Frontend üzerinden yola çıkarak konuyu irdeleyeceğim.
2011'den itibaren JQuery ile uğraşmaya başlamıştım. Bu süreçte ExtJS, Backbone basit kütüphaneler ile Web Uygulamalarımızı yapabiliyorduk. Daha etkileşimli, zengin içerikli ekranlar içinse Adobe Flash, Microsoft Silverlight, JavaFX gibi tarayıcı üzerinde plugin mantığı ile çalıştırılan uygulamalar geliştiriliyordu. Piyasanın hakimi Adobe Flash ve diğer ürünleriydi. Bir anda Steve Jobs iPad/iPhone Flash desteklemeyeceğini HTML5 geldiğini ve tüm yapısını bunun üzerine kuracağını söylemesi üzerine JS inanılmaz büyümesine, Adobe Flash çöküşüne neden oldu.
İlerleyen süreçte JS mobilde kullanma düşüncesi hatta tüm App bu kütüphanelerle yapabilme düşüncesi vardı. JQuery Mobile, Sencha Touch gibi Mobil Web furyası, hatta Native Wrapper içerisinde HTML rendering yöntemleri ile PhoneGap gibi kütüphaneler ortaya çıktı. Bunlar daha tam oturmadan Facebook — Zuckerberg ve Linked ortak görüşü Web henüz Mobil uygulama geliştirmek için yeterli performansı sağlayamıyor demeleri ve Apple Hibrit uygulamaları ortamımı bozuyor demesi üzerine herkes Native uygulamalara döndü. Bu süreçte Blackberry popülerliğini yitiriyor, Microsoft Nokia satın alarak Windows Phone ile Android/iPhone yanında yer almaya çalışıyordu.
Uzunca bir süre Native alanda iPhone Objective C ile stabil kalabildi. Tek değişiklik Xib’den Storyboard değişikliğiydi. Android Eclipse bırakıp Android Studio kullanmaya başlamıştık. Hataları yakalamak için Fabric ve Beta Testleri için TestFlight yeterli oluyordu. Windows Phone telefon dünyasında olma yarışını kaybetmiş , Blackberry ve Nokia tamamen silinmişti resmen.
İlerleyen zamanda JS gibi dinamik dillerin etkisi ile iOS tarafında Swift dili, Android tarafında Kotlin dili ortaya çıkacak, Cross Platform Native alanında Xamarin Microsoft tarafından alınacak, Google Flutter çıkarak, React Native her ortam için Native projeler oluşturabilecekti. JS , Electron ile desktop uygulamaları geliştirebilecektik.
Web’de önce Twitter Bootstrap CSS altlığı ile web uygulamalarında büyük bir ivme kazandırdı. Ardı sıra MVC(Model View Controller) çerçeve altyapıları çıkıyordu. Angular1, Ember, Knockout artık Adobe Flash yerini alacaktı. İnsanlar zengin içerikli Web uygulamalarını bu Web Framework ile geliştirebileceklerdi.
Sonra bir baktık ki NodeJS sadece sunucu tarafında değil aynı zamanda bizim Local geliştirme ortamlarımızda da geliştirme aracı olarak da kullanılır hale gelmiş. Bir anda JS teknolojileri her yerde yeni kütüphaneler çıkarmaya başladı. npm/yarn paket yöneticileri, npm scripts, gulp görev çalıştırıcıları ile webpack, parcel birleştirici araçlarla bizim geliştirdiğimiz Component Based yüzlerce JS,CSS,HTML dosyalarımız build olup tek dosyalarda birleştirilebilir hale gelmişti. Neden o zaman bir seviye daha soyutlama yapmalım ki ? Daha farklı dillerle kodumuzu geliştirelim ve Transpiler bizim kodumuzu arkaplanda istenilen ortama dönüştürsün mantığı ortaya çıktı. Bir baktık ki CSS → için SASS, PostCSS, LESS , JS → TypeScript, Flow çıktı. Geliştirici editorleride ardı ardına çıkmaktaydı Atom, Visual Studio Code, ve diğer araçlar Vim, SublimeText, IntelliJ bu yeni özellikleri destekler hale geliyordu. Yazılım geliştirmeyi daha kaliteli hale getirmek içinde araçlar Prettier, EsLint gibi araçlar ve kodda hata çıkmaması için bir çok Test kütüphanesi Jest, Mocha, Storybook, Cypress, Enzyme ortaya çıktı.
Sonra acaba MVC(Model-View-Controller) örüntüsü acaba UI Bileşenleri için uygun bir örüntümü MVP, MV* yerine Flux örüntüsü kullanmak acaba daha mı mantıklı o zaman View ve Data katmanı farklı olmalı. O zaman ortaya View oluşturmayı sağlayan kütüphaneler çıkmalı belkide denildi. React, Vue gibi kütüphaneler ortaya çıktı. DOM rendering Virtual DOM üzerine yaparak gerçekleştiriyordu. Aslında Shadow DOM’da vardı Polymer bunu kullanıyordu ama React ve Vue kadar popüler olmadı. Bu zamana kadar her kütüphanenin kendi Model verisine erişim için Flux Örüntüsüne uygun olarak data kütüphaneleride vardı Redux , MobX, RxJS, NgRx, VueRx . Sonra bileşenler için işler karıştıkça High Order Components, ContextProvider vb yöntemler ile veri taşıma yöntemleri bulundu ama bunlar veriyi istenildiği gibi esnek bağlayamıyordu. Kütüphanelerde daha yapısal değişikliklere ihtiyaç vardı. React, Vue UI bileşen yapısı extend veya mixin yerine ClassComponent → FunctionComponent ve Hook kütüphanesi ve Vue Composition API bu binding ve State aktarma olaylarını olabildiğince esnek bir hale getirdiler. Bu sırada bir yandan da Svelte diye bir kütüphane ortaya çıkmıştı. VirtualDOM gerek yok diyordu. Aynı zamanda React State yönetimi için Recoil.JS diye ayrı bir kütüphanede ortaya çıkıyordu.
Teknoloji o kadar hızlı ilerliyordu ki bu View kütüphaneleri varsa bunlar üzerine bir çok UI Layout kütüphaneleri, UI bileşen Kütüphanesi, Chart Kütüphaneleri oluşturulabilirdi , Meterial Design implement eden React, Angular, Vue kütüphaneleri, SemanticUI, KendoUI, AtlassionUI Kit, Rechart, vb… bir çok bileşen kütüphanesi ortaya çıktı.
İşler biz frontend geliştiricileri için her geçen gün daha karmaşık hale modül yükleme(require.JS) , async kütüphaneleri, FP (functional programming) kütüphaneleri, AJAX/http kütüphaneleri (Axios) zamanla ES6, ES7, ES8, ESNext içinde en azından standartlaştı.
Request için standart JSON ve RESTful kullanıyorduk ama Backend kısmında buda yetmemeye başladı. Rest soyutlaşmalı istenilen request göre şemanızın elverdiği ölçüde dinamik sorgularınız doğrultusunda istediğiniz JSON size dönebilen bir mekanizma geliştirilmeliydi. Hop ortaya GraphQL çıktı. Aynı ES(ElasticSearch) ile veritabanlarında standart sorgular yerine dinamik sorgular yapabilir hale gelmemiz gibi.
Bu sırada JS giderek backend sunucu kısmına el atmaya başladı, NodeJS üzerine geliştirilen kütüphaneler Express.JS ile Rest API sağlayıp backend API oluşturabilecek uygulamalar geliştirmenizi olanak sağlayarak Ruby on Rails, Python, .Net, Servlet pay kapmaya başladı. Birde Statik sayfaların üretildiği Blog, CMS (Content Management System) bir sektör vardı. Bu sektörde Wordpress, Joomla, Drupal, vb gibi LAMP Stack (Linux, Apache, MySQL, PHP) yerine A headless Node.js CMS Ghost ve JAM Stack (JavaScript, APIs, and Markup) üzerine Jekyll, Hugo, Nuxt, Next, Gatsby ve Server Side Rendering kütüphaneleri ortaya çıktı. Artık JS Backend iyice yayılmaya başladı.
Angular ve Ember kendisi bir Framework ama React, Vue, Svelte bir View kütüphanesi nasıl geliştiricilerin Routing, SEO vb birçok konuda bir Framework olarak kullanabilmesini sağlayacağız. React → Next, Vue → Nuxt, Svelte → Sapper gibi framework oluşturulmaya başlandı.
Peki Uygulamaların backend içinde hazır bir takım araçlar olsa, deployment direk biz yapabilsek tabiki ortaya BaaS ve MBaaS mekanizmaları ortaya çıktı. Artık konfigürasyon ve çok az kod geliştirerek arkaplanları hızlıca geliştirebiliyorduk. İlk önce Google → Firebase çıktı. Authentication, Authorization, DB, Log, Analytics, Notification Gönderimi olabildiğince kolay bir şekilde Frontend geliştiricisinin kontrol edebileceği ve yöneteceği bir hale getirdi. Sırası ile Amazon → Amplify(AppSync, Cognito, S3, DynamoDB, SNS..) ve Microsoft → Azura Static Web Apps. Halbuki biz Heroku PaaS olarak diğer AWS,Google, MS daha kolay bir kullanımı var derken büyük firmalar bu alanda bir açık yakaladılar ve burayı hemen doldurmaya başladı. Static Page Deploy konusunda Netflix, Vercel bir anda popüler hale gelen Hosting hizmetlerinden oldu.
Son dönemlerde Node geliştiricilerinden günümüzün özelliklerine uygun, Node geliştirirken yaşadıkları pişmanlıklardan yola çıkarak geliştirdikleri Deno duymaya başladık. Microservis , frontend dokunmaya başladı artık Frontend’de Micro Frontends konuşulmaya başladı.
SONUÇ
Yukarıda yazdığım bold italic olanlar kütüphanelerden, bazıları yeni yeni duyulurken , bazılarıda ya hiç kullanılmıyor yada popülerliğini yitirmiş durumda.
Artık teknoloji ve kütüphane üretim hızı inanılmaz duruma gelmiş durumda. Bizler teknolojiyi geliştiren tarafta değilde kullanan tarafta olduğumuz için hayat her geçen gün gittikçe zorlaşmakta. Teknolojiyi üretenler daha çok standartlar üzerinde low-level çalıştıkları için daha fazla algoritma ve kütüphane mantıkları ile uğraşıyorlardır diye düşünüyorum. Ama biz bu teknolojiyi tüketen geliştiriciler olarak bu değişime direnç göstermek istesek bile bu pek mümkün gözükmüyor. Sektör bu hype üzerine yükseldiği için tüm şirketler bu teknolojileri yakalamak için canla başla çalışıyor. En sonunda hepimiz kendimizi bu girdapın içerisine sürükleniyor olarak buluyoruz. Bu teknolojileri bilmeyen kişiler iş bulamıyor, yada işe girenlerden bu standartta iş bekleniyor. Ortam geliştiriciler için her geçen gün daha çok ısınmakta ve zorlaşmakta.
Okumaya Devam Et 😃
Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.