Zafer Ayan - Mobile Developer @İSPER

Onur Karagünlü: Merhaba Zafer, öncelikle vakit ayırıp sorularımızı yanıtladığınız için teşekkür ederiz. Kendinizi kısaca bize tanıtabilir misiniz?



Zafer Ayan: Ben Zafer. 2014'ten beri profesyonel olarak yazılım geliştiriyorum. Son zamanlarda İSPER'de android uygulamaları ve JAX-RS web servislerini geliştiriyorum. Ayrıca web bilgim olduğu için gereken yerlerde .NET MVC ve ReactJS ile geliştirme yapıyorum. Bazen de uygulamalarda kullanılabilecek componentleri geliştiriyorum. Örneğin BootstrapOutlookMailView veya DatabaseFolderView gibi JS bileşenleri geliştirip aynı zamanda da GitHub üzerinden public'e açıyorum. Android tarafında da kredi kartı bilgilerinin verimli bir şekilde alınabilmesi için bir CreditCardView bileşeni yazdım. Deneysel olarak bazı web arayüzlerini de Android'de yazmaya çalışıyorum, TruckAnimator butonu da bunlardan biri. Bunun yanında web ve mobil uygulama arayüzlerini tasarlıyorum. Bu amaçla Inkscape ve Photoshop gibi araçlar kullanıyorum. Kısacası uygulama geliştirim sürecinde gerekli olabilecek pek çok yan alanda da uğraşıyorum diyebilirim. Boş zamanlarımda ise devnot.com'da ve medium hesabımda içerik üretip paylaşıyorum.


Pek çok farklı teknoloji kullanmışsınız. Biz daha çok mobil platformlar üzerine eğilen bir topluluk olarak mobil yazılıma başlama hikayenizi dinlemek isteriz.


Zafer: Mobil yazılım geliştirimine aslında üniversite dönemimde başladım. O zamanlarda Çanakkale Onsekiz Mart Üniversitesinde bana yol gösteren İsmail Kahraman hocam sayesinde .NET teknolojileri üzerinde geliştirim yapıyordum. Fiziksel olarak bir akıllı telefonum olmamasına rağmen Windows Phone üzerinde de kendi çapımda birkaç küçük uygulama geliştirmiştim. Bitirme projesi olarak da C# XNA'de TroiaBricks adında mobil bir oyun yapmıştım. Daha sonra profesyonel hayata geçiş yaptığımda .NET temelli olarak çalışmaya başladım. Halihazırda yazılmış bir Windows Phone uygulaması ve başka bir beacon temelli Android uygulamasının kod tarafının geliştirmelerini yaptım. Devamında ise tamamen Android geliştiricisi olarak görev almaya başladım. 



Peki mobil geliştirme yapmak için kullandığınız teknolojiler nelerdir?


Zafer: Mobil uygulama geliştirirken önceden şirket içinde Apache Cordova ile birkaç uygulama geliştirmiştim. Android uygulaması geliştirmek için ise Eclipse IDE kullanıyordum. Biraz meşakkatli ama iş görüyordu. Sonralarında Android Studio çıkınca "Tamam artık kullanmam gereken IDE bu!" dedim ve geçiş yaptım. Vektörel çizim için Inkscape kullanıyorum. PNG ve JPG dosyalarını PS ile düzenliyorum. Telefondan ekran görüntüsü alma ve sonrasında sıkıştırma işlemlerinde ffmpeg CLI'ından yararlanıyorum. Şirket dışında evde hobi amaçlı olarak React Native üzerinde çalışıyorum. VSCode ve iTerm kullanarak geliştirim yapıyorum. Bazen de React Native uygulamaları için Expo kullanıyorum.


Hem native hem Cross platformu yazdığınızı görüyoruz. İkisinin de artılarını eksilerini kıyaslayabilir misiniz? 


Öncelikle Native'de uygulama geliştirmenin cross-platform'da uygulama geliştirmeye göre daha sorunsuz ve stabil olduğunu söyleyebilirim. Geliştirime ortamı da aynı şekilde daha etkili oluyor. Fakat tek platforma uygulama çıkmak küçük ölçekli firmalar için çok da iyi bir durum değil. Cross platform uygulamaların performansı da yeterli seviyede olduğu için güzel bir alternatif oluşturuyor. 


Kendi düşüncem, kurumsal bir firmadaysanız ve büyük yazılım ekipleriniz varsa native uygulama geliştirimini izleyin. Daha küçük ölçekli firmalarda ise cross platform uygulama geliştirmeniz daha iyi olacaktır.


Üsküdar Robogenç Etkinliği



Son dönemlerde cross platform olarak Flutter’ın adını çok fazla duyuyoruz. Siz de daha çok React native kullanıyorsunuz. Peki Flutter hakkında ne düşünüyorsunuz?


Zafer: Flutter'ın Google tarafından aktif olarak geliştirilen bir framework olduğunu biliyorum. Skia Canvas üzerine native'e benzer bir şekilde çizim yapması, Dart dili ile kodlanması ve kodun derlenmesi, ayrıca hazır arayüz widget'larının bulunması ile oldukça iyi uygulamalar çıkarılabiliyor. 


Aslında Dart dili ile tanışmam çok daha öncesine dayanıyordu. 2015 yılında GDG İstanbul DevFest'e Jana Moudrá geldiğinde Dart ile ilgili workshop yaparak bilgilerini aktarmıştı. Halihazırda .NET ile geliştirim yaptığım için, Dart dilinin de oldukça benzer özellikleri içerdiğini gördüm. Dart dilini beğenmiştim ve aynı yıl Vikipedi üzerinde Dart programlama dili başlığı altında yazı yazdım (https://tr.wikipedia.org/wiki/Dart_(programlama_dili). O dönemde Flutter çok yeniydi ve filizlenme aşamasındaydı. Sektörde Dart dili yaygın olarak kullanılmadığı için, zaman içerisinde Dart'a karşı olan ilgim azaldı. Son zamanlarda Flutter'ın yükselişi ile birlikte Dart da global'de önem kazanmaya başladı. Fakat artık ben çoktan web dünyasının büyülü atmosferine kapıldığım için kendi adıma heyecanımı yitirmiştim. HTML, JavaScript ve CSS ile geliştirim yapmak ve her cihazda çalışabilen web sitelerini oluşturmak mükemmel bir olaydı. Cross platform'un geldiği son noktaydı aslında web siteleri. Bu alanda Apache Cordova "yeterli" diyebileceğim bir performansta çözüm sunuyordu. Fakat daha sonra React Native'in gelmesi ile birlikte Cordova'yı bırakmış oldum. Son dönemde Flutter'ın yükselişi ile birlikte küçük bir instagram arayüzü yaparak aradaki benzerlik ve farklılıkları deneyimledim.(https://github.com/ozcanzaferayan/flutter-instagram-posts-clone).



React Native'i seçmemdeki en önemli konu web'e çok yakın olması. Aynı HTML, JS ve CSS ile geliştirim yapar gibi kod yazıyorsunuz. Mevcut JS bilgimi kullanabiliyorum ve halihazırdaki CSS bilgilerimden yararlanabiliyorum. Ayrıca JS'te gördüğüm birçok örneği de React Native tarafında uyarlayabiliyorum. Bu çok güzel bir avantaj. 


Kendi açımdan deneyimlediğim Flutter'ın iki dezavantajı var. 1.si Dart dili, 2.si arayüz geliştirimi. Dart dili kolayca öğrenilebilecek bir dil ama JS tarafı 1995 yılından beri geliştirildiği için daha oturmuş bir seviyede, herkes tarafından biliniyor ve birçok farklı soru için cevap bulabiliyorsunuz. Flutter'daki arayüz geliştirimi Jetpack Composable ve SwiftUI'a oldukça benzediği için native geliştirimine daha yakın. Ben CSS sevdiğim için React Native'deki yapı oldukça iyi geliyor. Web'den kopmamış oluyorum, istediğim zaman web'de de rahatlıkla geliştirim yapabiliyorum. Ayrıca CodePush sayesinde store'a başvuru yapmadan istediğim zaman güncelleme çıkabiliyorum. Bu gibi özellikler benim için daha ön planda olduğundan tercihim bu yönde oldu. 


Cross platformları bir kenara bırakırsak Hem Android hem iOS geliştirmiş biri olarak Android mi geliştirmek yoksa iOS mi geliştirmek sizin için daha keyifli oluyor?


Zafer :Normalde iOS uygulaması geliştirmiyorum ama biraz Swift yazmışlığım var. XCode'daki StoryBoard mekanizması çok iyi fakat arayüzdeki XIB koduna müdahale etmek imkansıza yakın oluyor. Bu nedenle Android'deki arayüz geliştirimi için XML kullanımı bana daha çok kontrol imkanı sunduğu için daha iyi diyebilirim. Gerçi Jetpack Compose ve SwiftUI ile birlikte artık bu problemin de yavaş yavaş giderildiğini düşünüyorum. Fakat Web temelli olduğum için CSS ile geliştirim yapma imkanı daha çok hoşuma gidiyor. Dolayısıyla React Native gibi cross platform bir çatıda uygulama geliştirimi yapmanın daha keyifli olduğunu söyleyebilirim.


Peki siz Türkiye ve Dünya’da mobil sektörünün yerini nasıl görüyorsunuz?


Zafer: Telefonların, aynı zamanda bir bilgisayar gibi işlev görmesi ile birlikte, hanelerdeki bilgisayar kullanımının önemli ölçüde azaldığını söyleyebilirim. Artık kullanıcılar masaüstü / notebook deneyimlerinden çok telefonları üzerinde işlem yapar hale geldiler. Bu nedenle mobil tarafta geliştirim yapmak oldukça önem arz ediyor. Fakat bununla birlikte mobil uygulamalar tarafında ise bir güvensizlik durumunun da hakim olduğunu belirteyim. Kullanıcılar genellikle yeni bir uygulama yüklemek istemiyor. WhatsApp, Facebook, Instagram, Twitter gibi genel uygulamalar ve Candy Crush veya Pubg gibi basit bir oyun ile yetiniyorlar. Hal böyle olunca, kullanıcıyı, bir uygulamayı indirmesi için ikna etmek de gerekiyor. Bu nedenle promosyon olayı şart. Örneğin "X uygulamasını indirdiğinizde anında 50 para puan kazanacaksınız" gibi harici bir kanaldan da reklamını yapmak gerekiyor. Bu olay elbette sosyal uygulamalara reklam vererek halledilebilir. Ancak uygulamanın web arayüzünün de olması gerekiyor ve kullanıcıları bu kanaldan da yönlendirmek gerekiyor.


Web uygulamasında kullanıcının temel olarak kullanacağı use case'ler bulunabilir ve harici işlemler için uygulamaya yönlendirme yapılabilir. Dolayısıyla web uygulaması, IOS ve Android gibi en az 3 platform için uygulama çıkarmak gerekiyor. Bu iş için 3 ayrı ekibe ihtiyaç var. Tabii ki kurumsal firmalarda büyük ekipler ile native olarak yürütülebilir. Fakat daha küçük çaplı firmalarda ise 3 ayrı ekip için eleman barındırmak mali açıdan yük oluşturabiliyor. Bu nedenler ile birçok platform için tek bir uygulama geliştirme yöntemi daha da önem arz ediyor. Flutter ve React Native gibi cross platform teknolojilerin zaman içerisinde daha fazla önem teşkil edeceğini düşünüyorum.


Github yazılımcılar için önemli bir yere sahip. Siz de oldukça aktif olarak kullanıyorsunuz ve pek çok katkıda bulunmuşsunuz. Peki Github kullanma alışkanlığına nasıl başladınız? Bu size neler kattı?


Zafer: Üniversite döneminde github kullanımına başladım. Github üzerinde ilk kod aktarımımı ise 9 sene önce, üzerinde çalıştığım Python ile bir Django uygulaması üzerine yapmıştım (https://github.com/COMU/papatya). O dönemden bugüne kadar yaptığım tüm işleri GitHub'a atmaya çalışıyorum. Örneğin spesifik olarak geliştirdiğim bir kod parçasını biraz düzenleyerek genel hale getirip GitHub'a atıyorum. Bu sayede geriye dönüp baktığımda yaptığım işlere ulaşabiliyorum. Unuttuğum kısımları hatırlamama da yardımcı oluyor. Ayrıca benzer bir uygulamayı diğer insanların nasıl geliştirdiğini inceleyebiliyorum. Zaten Github haricinde git kullanımının yararlarını anlatsak yazı bitmez. Bu nedenle en basit haliyle anlatacak olursam Github'ın avantajı, kodunuzu bir yere kaydederek daha sonra üzerinde kolaylıkla işlem yapabilmenize olanak tanıyor. Google Drive, Dropbox gibi cloud çözümlerine uygulama kodunu attığınızda. Aradığınız kodu tekrar bulabilmeniz daha zor ve meşakkatli. Ayrıca GitHub'ın sosyal bir ağ oluşturma olanağı da artı puan diyebilirim.



Mesleğinizin en sevdiğiniz ve en sevmediğiniz yönleri nelerdir?


Zafer: Mobil uygulama geliştirme alanının, oldukça dinamik ve sürekli kendini yenileyen bir alan olduğunu belirteyim. Bu alanda kendini geliştirmek isteyen biri kesinlikle sürekli öğrenmeye açık olmalı. Ayrıca mobilin birkaç farklı ayağı var: network işlemleri, cache'leme, veri tabanının yönetilmesi, dosya işleme, arayüz geliştirme, pil kullanımını optimize etme, konum bilgilerini verimli bir şekilde alma, uygulamanın güvenliğini sağlama vb. gibi pek çok alanı kapsıyor. Bu nedenlerle, yeni çıkan teknolojileri takip etmek ve sürekli güncel olmak gerekiyor. Bu durumun aslında diğer uygulama geliştirme ortamlarına göre daha yorucu olduğunu söyleyebilirim. Ancak pek çok farklı alanda bilginiz oluyor ve gün sonunda taşınabilir bir cihazda da uygulama üretildiğini görmek oldukça motive edici hale geliyor. 


Devnot'ta yazı yazdığınızdan bahsetmiştiniz. Biraz platformdan ve nasıl aktif olduğunuzdan bahseder misiniz?


Zafer: Halihazırda Devnot ve GDG İstanbul gibi birçok etkinlikte de katılımcı olarak yer alıyordum. Devnot'ta yazarlık başvurusu olduğunu görünce yazarlık hesabı açtım ve yazmaya başladım. Normalde de zaten yabancı kaynaklardan yazılar okuduğum ve aynı zamanda blogspot ve Vikipedi gibi ortamlarda da yazı yazdığım için kolayca adapte olabildim. Devnot'ta pek çok alanda yazı yazdığımı söyleyebilirim. Bu linkten de inceleyebilirsiniz . Son zamanlarda ise React Native ile ilgili akşam yayınları yapmaya başladık. O yayınların tekrarına ise devnotTV’den ulaşabilirsiniz.




Bir çok teknolojiyi deneyimlemişsiniz. Peki bu konularda güncel kalmak ve kendinizi geliştirmek için hangi kaynakları/kişileri takip ediyorsunuz?


Zafer: Hiç bilmediğim bir alanda bilgi edinmek için ilgili teknolojinin github sayfasına giderek README.md dosyasını inceliyorum. İlk bilgileri aldıktan sonra “getting started” bölümlerinden uygulamalı olarak öğreniyorum. Mobil uygulama geliştirme teknolojilerini öğrenirken ise bir mobil uygulamayı seçerek aynı arayüzü ilgili teknoloji ile kodlamaya çalışıyorum. Arayüz işi bittiğinde REST servisten nasıl çekileceğini inceleyip uyguluyorum. State yönetimine bakıyorum. MVC, MVP, MVVM, VIPER gibi mimarileri uyguluyorum. Unit testing, e2e testing gibi testlerin nasıl yazıldığını inceliyorum. Sonrasında ise ilgili framework’ün internal mimarisini inceleyerek yazılan kodun hangi aşamalardan geçerek arayüzü çizdiğini ve nasıl veri alışverişinde bulunduğunu araştırıyorum. Benzer framework’ler ile arasındaki farklılıkları kıyaslıyorum. Google Trends’de ve Stack Overflow’da ne kadar popüler olduğunu inceliyorum. GitHub’daki star sayısına bakıyorum. Kaç issue kapanmış, kaçı açık kalmış, en son ne zaman commit edilmiş inceliyorum. Eğer Slack’te, Discord’da, Gitter’da ve Telegram’da toplulukları varsa onlara katılıyorum. 


Takip ettiğim alanlar:


Newsletter: 

Blog:


Youtube:


Son olarak mobil uygulama geliştirmek isteyen insanlara tavsiyeleriniz nelerdir?


Zafer :Mobil uygulama geliştirimi yapmak isteyenler sürekli öğrenmeye açık olmalılar. Gerçekten mobil uygulama geliştirimini sevmeli ve boş zamanlarının da bir kısmını buna ayırmalılar. Aksi halde edinilen bilgiler yavaş yavaş körelmeye başlayacaktır.


Onur: Zaman ayırıp değerli bilgileri bizimle paylaştığınız için çok teşekkür ederiz.


#mobitalk #zaferayan #röportaj

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
JetBrains Hakkında Detaylı Bilgi Alın

© 2020 by mobiler.dev

mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın