• Buradasın

    Çapraz Platform Geliştirme Teknikleri ve Zorlukları

    youtube.com/watch?v=I9Qwx8Vsy90

    Yapay zekadan makale özeti

    • Bu video, Türkiye Finans Katılım Bankası'nda Framework yöneticiliği yapan Muhammed Cuma Tarih ve Tesla'da çalışan bir teknoloji uzmanı tarafından sunulan eğitim formatında bir içeriktir. Sunum, izleyicilerle etkileşimli bir şekilde ilerlemektedir.
    • Video, çapraz platform uygulama geliştirme sürecinde karşılaşılan zorlukları ve bu zorluklara yönelik çözümleri ele almaktadır. İçerikte Java, JavaScript, Node.js gibi dillerin cross platform özellikleri, mobil platformlarda karşılaşılan zorluklar, yazılım mühendisliği prensipleri ve Spotify, Dropbox, Flipboard gibi popüler uygulamaların cross platform yaklaşımları detaylı olarak incelenmektedir.
    • Sunumda ayrıca asenkron mesajlaşma, WNT pattern, platform uyumluluğu, taşınabilir kod yazma prensipleri ve "bir kere yaz, çok platformda derle" yaklaşımı gibi teknik konular ele alınmaktadır. Microsoft Office ve Google Inbox gibi büyük şirketlerin çapraz platform uygulamalarını nasıl geliştirdikleri örneklerle açıklanmakta ve platforma özgü kısımları ayırt etme (separation of concerns) ve modüler tasarımın önemi vurgulanmaktadır.
    00:03Sunumun Amacı ve Katılımcıların Profili
    • Sunum, çapraz platformda geliştirmede karşılaşılan zorluklar ve bu zorluklara çözüm sunmak amacıyla hazırlanmıştır.
    • Sunucu, katılımcılardan sorulara cevap vermesini rica ederek sunumun dinamikliğini artırmayı amaçlamaktadır.
    • Katılımcılar arasında çoğunluk web geliştiricileri, az sayıda mobil ve masaüstü geliştirici bulunmaktadır.
    01:20Sunucunun Tanıtımı
    • Sunucu Muhammed Cuma Tarih, Türkiye Finans Katılım Bankası'nda Framework tarafında yönetici olarak görev yapmaktadır.
    • On bir yıllık framework kod yönetimi ve uygulama yaşam döngüsü yönetimi deneyimine sahiptir.
    • Kocaeli Üniversitesi Bilgisayar Mühendisliği mezunu olup, aynı şirkette çalışarak teknolojik dönüşümleri yaşamıştır.
    02:20Geliştiricilerin Kariyer Süreci
    • Sunucu, kendisinin geliştirici olarak çalışmaktan memnun olduğunu ve kod yazmaktan zevk aldığını belirtmektedir.
    • Yıllar geçtikçe geliştiricilerin mimari ve analiz taraflarına kayması gerektiğini vurgulamaktadır.
    • Gerçek dünyada beklentilerin daha çok mimari ve tasarım üzerine yoğunlaştığını, kod yazmaktan ziyade sistemleri nasıl kuracaklarını düşünmeleri gerektiğini ifade etmektedir.
    04:24Çapraz Platform Geliştirme Zorlukları
    • Geliştiriciler birçok platforma hitaben kod yazmak zorunda kalırlar, bu durumun maliyeti oldukça yüksektir.
    • Masaüstü işletim sistemleri, mobil platformlar ve web tarayıcıları arasında farklılıklar bulunmaktadır.
    • Özellikle mobil platformlarda hem iOS hem de Android platformlarına uygulama geliştirmek için birçok çözüm metodu geliştirilmiştir.
    06:09Sunumun İçeriği
    • Sunumda farklı platformlarda geliştirme konusu ele alınacaktır.
    • Dışarıdan alınan örnek uygulamalar üzerinden çapraz platform geliştirme stratejileri incelenecektir.
    • Sunucu, kullandığı uygulamaların altyapısını merak ettiği için bu konuda özel ilgi alanına sahiptir.
    06:47Cross Platform Geliştirme ve Java
    • Cross platform teknolojisi yıllardır var ve Java en yaygın kullanılan cross platform teknolojilerden biridir.
    • Java'nın mantığı "bir kere yaz, her yerde çalıştır" prensibine dayanır; bir kez yazılan kod byte kod olarak derlenerek tüm platformlarda çalıştırılabilir.
    • Her platformda JVM (Java Virtual Machine) bulunur ve bu JVM'ler platforma özel işlemler yaparak Java kodlarını çalıştırır.
    09:06Java'nın Avantajları ve Kullanım Alanları
    • Geliştiriciler için cross platform geliştirmek maliyetli olmasına rağmen, Java ile bir kez yazılan kod tüm platformlara dağıtılabilir.
    • Java akademik ortamlarda ve web uygulamalarında (applet'ler) yaygın olarak kullanılmıştır.
    • Bazı uygulamalar Windows spesifik cross platformu dönüşümünü Java ile yapmış ve tüm işletim sistemlerine uyumlu hale getirmiştir.
    10:22JVM ve Derleyiciler
    • JVM'in önemli özelliği just-in-time derleme yapmasıdır, yani kodu çalışma anında derler.
    • Her programlama dili kendi derleyicisine sahiptir; Python, C++, Go gibi dillerin kendi derleyicileri vardır.
    • Görsel olarak bir noktadan sonra diller kendi kendilerini yazmaya başlarlar; örneğin Go dili kendi derleyicisini kendi diliyle yazmıştır.
    11:10JavaScript ve Cross Platform Geliştirme
    • JavaScript zaten cross platform bir dildir çünkü tüm tarayıcılarda çalışır.
    • Node.js, JavaScript'i server tarafta çalıştırabilme imkanı sunarak cross platform özelliğini genişletmiştir.
    • Node.js, V8 motoru üzerine yazılmış bir platformdur ve bu motor, Danimarkalı bir programcı tarafından çiftlikte yazılmıştır.
    12:24V8 Motorunun Hikayesi
    • V8 motoru, Danimarkalı bir programcı tarafından çiftlikte yazmaya başlanmış ve Google tarafından işe alınmıştır.
    • Programcı, Amerika'dan Danimarka'ya dönmüş ve çiftlikte çalışmayı tercih etmiştir.
    • V8 adı, programcı tarafından verilmiş olup, hızlı arabalardaki V8 terimiyle benzerlik göstermektedir.
    15:10Günümüzdeki Cross Platform Geliştirme
    • Günümüzde cross platform geliştirme için Node.js oldukça etkili bir araçtır.
    • JavaScript'in supersetleri (TypeScript), CSS'in üst seviye soyutlamaları gibi geliştirme araçları, Node.js üzerinde çalışmaktadır.
    • Node.js, özellikle geliştirme araçları için cross platform çözüm sunsa da, tüketici uygulamalar (desktop ve mobil) için henüz yeterli değildir.
    16:43Çapraz Platform Geliştirme Sorunları
    • Çapraz platform geliştirme sırasında büyük bir sorun, her platformda sanal makine (VM) bulunmamasıdır; özellikle mobil platformlarda VM yoktur.
    • Her platformun kendi runtime ortamı vardır ve üçüncü parti bir runtime ortamı yoktur; örneğin iOS'ta Flash runtime bulunmamaktadır.
    • Çapraz platform geliştirme en büyük sorunu kod tekrarıdır; aynı kodu farklı platformlara kopyaladığınızda, zamanla bu kodlar birbirinden ayrılmaya başlar ve bugları düzeltirken bir platformda düzeltirken diğerinde aynı sorun devam edebilir.
    18:18Kod Yönetimi ve Otomasyon
    • Kodu kopyalamak bir paten değildir; Dex kavramı gereği, kodu kopyalamak normalden daha fazla efor gerektirir ve iyi bir yönetim sistemi kurulmalıdır.
    • Kodu kopyalayabilirsiniz ancak her yerde eş tutacak bir operasyon mantığına sahip olmalısınız; örneğin GitHub'a kod çekildiğinde, dünya üzerindeki farklı sunuculara otomatik olarak dağıtılması gibi.
    • Kodu ilkel usulde kopyalayıp otomasyon kurmadan bırakırsanız, bu durum gerçekten bir bela haline gelecektir.
    19:29Farklı Platformlarda Farklı İhtiyaçlar
    • Çapraz platform geliştiricilerin en çok cebelleştiği konulardan biri, farklı platformlarda farklı ihtiyaçları karşılamaktır.
    • Geliştiriciler genellikle ikon veya buton konumları gibi detaylarda hassasiyet göstermezler, ancak bu hassasiyet kullanıcı deneyimi (UX) üzerinde yansımalar oluşturur.
    • Kullanıcılar bir uygulamayı sevgiyle kullanmaya başladığında, bu bağlılık ürünün başarısında önemli bir faktördür; örneğin Apple ürünlerinin tutulmasının nedeni bu bağlılıktır.
    22:11Çapraz Platform Geliştirme Karmaşıklığı
    • Çapraz platform geliştirme zaten karmaşık bir iş olup, farklı platformlar eklenince bu karmaşıklık artar ve maliyetler yükselir.
    • Kurumlar uygulama geliştirmek istediğinde, genellikle önce Android, sonra iOS ve bazen Windows platformlarını hedefler.
    • İnsanlar zaman yapılara (örneğin React Native) yönelirler, böylece bir dilde yazılan kodun birden fazla platformda çalışmasını sağlayarak maliyet tasarrufu elde ederler.
    23:43Yazılım Mühendisliği Prensipleri
    • Çapraz platform çözümlerinde genellikle yazılım mühendisliği prensiplerine bağlı kalarak çözümler bulunur.
    • "S" prensibi, her şeyi yerli yerine oturtmak anlamına gelir ve yazılımda özellikle işe yarar.
    • Bir işin görev-sorumluluk alanı vardır; bu alanın dışında başka işler yapmaya başladı mı, kaos ortaya çıkar.
    25:27Teknik Ayrım ve Bağlantılar
    • Fiziksel ayrılıktan ziyade mantıksal ayrımı sağlamak önemlidir; örneğin webde NBC (Model-View-Controller) ile presentation mantığıyla iş mantığını birbirinden ayırmak.
    • Telefon hatlarında da aynı mantık uygulanır; aynı hat üzerinden ses ve internet verisi gönderilirken, ne gönderildiği ve nasıl gönderildiği arasında bir bağlantı yoktur.
    • Teknik ayrımı yaparken ölçüyü kaçırmamak gerekir; çok fazla bağlantı oluşturmak (cuplink) bağımlılığı artırır, ancak çok az bağlantı da derinliği artırır; ideal çözüm orta yoldur.
    28:48Spotify'in Cross-Platform Yapısı
    • Spotify, tüm platformlarda aynı uygulama deneyimi sunuyor ve bu benzersiz bir özellik olarak değerlendiriliyor.
    • Spotify, web kit teknolojisini kullanarak cross-platform grafik arayüz oluşturmuş ve kendine özel bir dil oluşturmuştur.
    • Uygulamanın kullanıcı arayüzü aslında HTML template şeklinde çalışıyor, ancak veriler internetten geliyor ve web servisleri bu template'e basılıyor.
    31:47Web Kit ve Cross-Platform Geliştirme
    • Spotify, web kit motorunu kullanarak internet linklerini uygulama içi event olarak ele alıyor ve böylece cross-platform uygulama geliştirmeyi başarmış.
    • Chrome'un açık kaynak kısmı üzerine emdi framework yazılmış ve bu framework ile uygulamalara web kit motoru gömülüyor.
    • Emdi framework, sabit bir sürüm sunuyor ve bu sayede geliştiricilerin uygulamalarının çalışıp çalışmayacağını garanti altına alabiliyor.
    36:42Cross-Platform Geliştirme Yaklaşımları
    • Cross platform kavramı "write once, run anywhere" (bir kez yaz, her yerde çalıştır) olarak tanımlanıyor.
    • Qt gibi framework'ler de benzer şekilde cross-platform geliştirmeyi sağlıyor, ancak artık pek kullanılmıyor.
    • Modern cross-platform yaklaşımı "write once, compile anywhere" (bir kez yaz, her yerde derle) olarak ilerliyor.
    37:13Mesajlaşma Altyapısı ve Bellek Yönetimi
    • Uygulamada eventler yerine mesajlaşma altyapısı kurulmuş çünkü eventler referanslar içeriyor ve bu bellek yönetimi zorlaştırıyor.
    • Native resource (işletim sistemi kaynakları) kullanıldığında, koleksiyon yöneticisi (garbage collector) çözümlenemeyen referanslar oluşturuyor.
    • Uygulamada kontrol kapandıktan sonra referansları kaldırmaya çalışan kodlar yazılmış ve böylece koleksiyon yöneticisinin işi kolaylaştırılmış.
    39:05Asenkronluk ve WNT Pattern
    • Asenkronluk, bir mesaj atıldığında cevabın ne zaman geleceğini bilmeden çalışabilme özelliğidir.
    • WNT pattern, uygulamalar arasında sanal bir bağ kurarak asenkron iletişim sağlar.
    • Bu teknikte mesaj gönderen, mesajın kimin yakalayacağını bilmeden sadece bir broker mekanizmasına mesaj yayınlar.
    40:22Platforma Uygun Tasarım
    • UX Matters kavramı, platformların doğal özelliklerinin önemini vurgular.
    • Spotify, Mac kullanıcılarının default actionları sağdan basması için butonları platforma göre düzenler.
    • Platforma bağlı tasarım detaylarına dikkat etmek önemlidir, aksi takdirde kullanıcı deneyimi olumsuz etkilenir.
    41:15Dropbox'ın Cross Platform Yaklaşımı
    • Dropbox, cross platform kod oluşturarak Windows ve Mac platformlarında aynı sync agent kodunu kullanabilmektedir.
    • Uygulamada arayüz native olmasına rağmen, dosya eşitleme (sync) kısmında ortak bir kod kullanılarak platformlar arasında uyumluluk sağlanmıştır.
    • Dropbox'ta dosya eşitleme (sync) kısmı platformlar arası çalışmakta ve aynı kodun her iki platformda da çalıştırılması sağlanmıştır.
    42:27Flipboard ve Feature Toggles
    • Flipboard, cross platform uygulamalar için farklı platformlarda benzer deneyimler sunmayı amaçlamaktadır.
    • Feature toggles, uygulamada farklı platformlara göre farklı özelliklerin aktif edilmesini sağlar.
    • Chrome'da flex gibi özellikler kullanıldığında, popülasyonun çalışmasını ciddi derecede etkileyebilir.
    44:16Hybrid Mobile Uygulamalar
    • Hybrid mobile uygulamalarda, iOS uygulamasının içinde gömülü bir web browser bulunur ve haberleşme buradan başlar.
    • Mobil platformlarda JavaScript'i çalıştırmak mümkün olup, bu sayede cross platform kod geliştirilebilir.
    • Web ve native arasında haberleşme, URL şeması kullanılarak yapılabilir.
    47:09Cross Platform Programlama Dilleri
    • Son zamanların en önemli cross platform dili Swift'tir.
    • Objective-C ve Objective-C++ uzantılarıyla C++ kodu açık olarak çalıştırılabilir.
    • Java Native Interface (JNI) ile ortak kod çalıştırılabilir ve C++ kodu aracılığıyla ekran API'leri çağrılabilir.
    48:20Office Uygulamasının Çapraz Platform Yaklaşımı
    • Office, 30 yıllık eski bir kod tabanına sahip olmasına rağmen, kodun çoğunluğunu tek bir C++ koduyla farklı platformlara taşımayı başarmış durumda.
    • Office, platforma özgü kısımları ayrı yerlerde tutarak (separation of concerns) aynı kodu farklı platformlarda kullanabilmeyi başarıyor.
    • Powerpoint'teki kodun %96'sı, Android'deki kodun ise %95'i ortak kullanılıyor, bu da test edilmiş ve hatadan arınmış kodun tüm platformlara taşınabilir olmasını sağlıyor.
    49:47Office'un Mac Platformu Hikayesi
    • Office'un Mac platformu için ilk başta ortak kodla geliştirilen versiyonu kullanıcılar tarafından beğenilmemiş ve kullanım oranı düşmüştü.
    • Microsoft, iki ay içinde Office 98 versiyonunu Mac için özel olarak geliştirmiş ve bu versiyon çok beğenilmiş.
    • Bu durum Microsoft'a iki farklı uygulama geliştirmek zorunda kalmasını ve acı yaşamak zorunda kalmış.
    50:35Google Inbox Örneği
    • Google Inbox uygulaması, web, iOS ve Android platformlarında aynı anda piyasaya sürülmüş bir örnektir.
    • Google, Java ile yazılan kodu iOS'a taşımak için bir derleyici kullanmış ve Objective-C'ye dönüştüren bir transpiler geliştirmiş.
    • Google'ın yeni nesil uygulamalarının çoğu Java'dan derlenmeye çalışılıyor ve Inbox ile birlikte açık kaynak kodlu C2ObjS2 derleyici paylaşılıyor.
    52:29Çapraz Platform Geliştirme İçin Öneriler
    • Çapraz platformda başarılı olabilmek için taşınabilir kod yazmak ve kullanıcının gönlünü fethetmek için platforma uygun UI geliştirmek gerekiyor.
    • Her platformun yerel özelliklerine uyum sağlayarak, butonların ve ekranların platforma uygun şekilde tasarlanması önemli.
    • Kodun taşınabilir olması için separation of concerns prensibi ve modüler tasarım (plug-in yapıları, inversion of control, dependency injection) kullanmak gerekiyor.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor