Nisa Efendioğlu

Android Developer Mini Yol Haritası :)

Profile picture

Nisa Efendioğlu

Post Image

Herkese merhaba arkadaşlar,

Bu yazımda kendi edindiğim bilgi ve tecrübelerden yola çıkarak, mobil geliştirme sürecine yeni başlayacak veya benimle birlikte bu yolda olanlar için mini bir yol haritası olmak istedim.

Aslında tam öyle de denilmez belki ama ne denir bilemedim, yazının sonunda kendiniz karar verirsiniz. 😂

Eksik gördüğünüz yerleri tamamlamaktan lütfen çekinmeyin. 🙃

İlk olarak en temelden alacağım, isterseniz geçin buraları. 😁

Mobil Uygulama Nedir?

Mobil cihazlarda kullanılmak üzere, her an elimizin altında bulunan akıllı mobil cihazlar üzerinden kolayca bilgiye ulaşma imkanı veren yazılımlar, mobil uygulamalardır.

Örneğin, telefonunuz üzerinden alışveriş yaptığınız, bankacılık işlemlerinizi hallettiğiniz, oyun oynadığınız, mesajlaştığınız platformların hepsi birer mobil uygulamadır. Bu uygulamaları geliştiren kişiler ise "mobile developer" olarak adlandırılır. Yani biz. 😁

Yol haritasına geçmeden önce değinmem gereken bir yer daha olduğunu düşünerek mobil uygulamalarda işletim sistemleri başlığına ufacık bir değineceğim. 🌸

Mobil Cihazlar için İşletim Sistemleri

Mobil cihazlarımızda popüler olarak kullanılan iki tür işletim sistemi bulunmaktadır. Bu İşletim sistemleri : Android ve iOS işletim sistemleridir. Android işletim sistemi, Google tarafından Linux üzerine inşa edilerek geliştirilmiştir ve Android işletim sistemindeki uygulamalara Google Play Store, Huawei App Gallery, Amazon Appstore, Samsung Galaxy Apps gibi uygulamalar üzerinden erişilebilir.

iOS işletim sistemi ise Apple tarafından üretilen bir işletim sistemi olup uygulamalara Apple App Store üzerinden erişilebilir. Uygulama yayınlama kısmında, Android için tek seferlik $25, iOS için ise yıllık olarak ödenen $100 gibi bir ücreti bulunuyor.

Minik bilgileri de aldık, süper. 😁

Platformlar arasında Android'i seçtiğinizi varsayıyorum ve peki neden Android işletim sistemi diye soruyorum. (Kendime)

Öncelikle Android işletim sistemi günümüzde en çok kullanılan ve açık kaynak olan bir işletim sistemidir. Açık kaynak bir işletim sistemine sahip olması herhangi bir sorun oluştuğunda daha çabuk çözüme ulaşmasına, her geliştiricinin geliştirebilmesine ve özelleştirebilmesine olanak sağlar. Ve son olarak Macbook'suz yazılımcı sayılmasak da Windows ve Linux üzerinde çalışarak da Android Developer olabiliriz. 😂

Peki Android Geliştirmeye Nasıl Başlayabilirim?

Android uygulamalar geliştirmek istiyorum fakat nereden başlayacağımı bilmiyorum. Daha önceden herhangi bir yazılım bilgim yok yapabilir miyim? diye sorularla gelen sevgili arkadaşlarım evet yapabilirsiniz. Nereden başlayacağınız kısmında da şimdi ben yardımcı olmaya çalışacağım. ⭐️

İlk olarak daha önce herhangi bir yazılım deneyiminiz yok ise algoritma mantığınızı geliştirebilmeniz açısından bir süre algoritma üzerinde durmanızı öneririm. Yazılım da bir işlemin gerçekleştirilebilmesi için bir planlama yapılması ve bu plan için de gerekli olan bütün adımların belirlenmesi gerekir. Bu planlamanın terimsel ifadesine de algoritma denir. Dolayısıla algoritma tarafını halletmeniz kod yazmanızda büyük katkı sağlayacağını düşünüyorum.

Peki sonrasında ne yapacağız? Gelin bakalım neler yapıyoruz. 🥳

Programlama Dili

Platformu seçtik, neden Android diye de sorguladık. Sıra geldi ben bu Android serüvenine hangi programlama dili ile başlayabilirim? Android geliştirme sürecinde aklımıza gelen iki programlama dili var. Bunlar; Java ve Kotlin.

Peki bunların birbirinden artısı veya eksisi nedir?

İlk olarak şunu söylemeliyim ki hiçbir programlama dilinin bir başka programlama diline göre bir üstünlüğü yoktur. Projenizde nelere ihtiyacınız var ise bunları değerlendirmeniz gerekir. Geliştirmek istediğiniz proje için en doğru ve en avantajlı dil hangisi ise o kullanılır.

Sorumuza geri dönelim :)

Ben Android geliştirme sürecime Java dili ile başlamıştım. Bunun en büyük sebeplerinden biri Java dilini hali hazırda öğreniyor olmam, Backend tarafında birkaç kez çalışıp dile aşina olmamdı. Bunun dışında da Java tarafında hiçbir zaman kaynak sıkıntısı çekmezsiniz. Sizden önce sorulabilecek tüm sorular sorulmuş ve cevaplanmıştır. Java'nın köklü bir dil olması bana bu açıdan çok fayda sağladı.

Kotlin diline gelecek olursak, Java dilinden geçen biri olarak kullanımı, yazımı çok daha kolay. Android geliştirme sürecine yeni başlayacaklar için Kotlin ile başlamalarını öneririm.

Kotlin dili Java dilindeki tüm gereksiz ve uzatılmış işlemleri daha kısa ve kolay şekilde yapmanızı sağlar. Bence ikisinin de birbirine göre avantajları var ama kotlin yazmak işi çok daha hızlı hale getiriyor. Java'da binlerce tanım yapmanız gerekirken, Kotlin çoğu zaman bunu hazır olarak sunar.

Bir projede Kotlin dilinin veya Java dilinin yetmediği durumlar ile de karşılaşabilirsiniz. Bu durumda, Java ve Kotlin yapısı birbirine çok benzer olduğundan bu iki dil arasında herhangi bir sıkıntı yaşamazsınız ve gerektiğinde projeleriniz içerisinde iki dili de aynı anda kullanabilirsiniz.

Java ve Kotlin dilini aynı anda projede kullanabiliyor olmamızın sebebi ise, iki programlama dilinin de JVM üzerinde çalışıyor ve derlenirken byte code'a dönüştürülüyor olmasından kaynaklıdır.

Dil seçimimizi yaptık, artık öğrenme aşamasında o dil ile devam edeceğiz. Peki nasıl ilerleyeceğiz?

Her sene düzenli olarak Android Geliştiriciler için hazırlanan bir yol haritası mevcut. Bu yol haritasına göre ilerleyebilirsiniz. Burada en temelden Android paketleri nedir, mobil geliştirme de hangi diller kullanılır, Manifest dosyası nedir, Activity ve Fragment nedir gibi gibi başlıklar bulunuyor.

Öğrenme aşamasında bu bahsettiğim tüm kavramlar ile karşılaşacaksınız fakat ben yine bir düzene göre bir akış belirlemek istiyorum diyorsanız yol haritasına bakmanızda fayda var ve bence mutlaka bakın. 🥳

Daha detaylı ve yeni başlayanlar için çok daha anlaşılır bulduğum, her konuya tek tıkla ulaşabilir bir yol haritası içinde mutlaka buraya bir bakın. Size çok fazla yardımcı olacaktır. 🌸

Yol haritasında da bulunan ve benim de Android Geliştirme sürecinde en önemli bulduğum iki konu var. Bunlar Android Lifecycle ve Fragment Lifecycle.

Bu iki konuyu kavramanız geliştirme aşamasında size çok fayda sağlayacaktır. Eklemiş olduğum gistler üzerinden veya Android Developers üzerinden konulara ait bilgilere ulaşabilirsiniz.

Android Geliştirme Sürecinizde Sık Karşılaşabileceğiniz Kütüphaneler

Retrofit :

REST API'leri Java interfacelerine dönüştürmeye yarayan, sıkıcı AsyncTask bloklarından kurtaran, GET, POST gibi işlemlerinizi annotation ile kolaylıkla halledebilen bir kütüphanedir. Veri alışverişleri gerektiren uygulamalarınızda bol bol kullanacaksınız. 🌸

GSON :

GSON, Java nesnelerini JSON'dan serialize ve deserialize etmek için kullanılan bir Java kütüphanesidir. API'lerle iletişim kurarken Retrofit ile beraber kullanıldığında işleri çok daha basitleştiren bir yapısı vardır.

Room :

SQLite yapısını bize daha kolay hale getiren bir kütüphanedir. Derleme esnasında SQL sorgularını doğrular. Daha anlaşılır ve sade kod yazmamıza olanak sağlar.

Dagger 2 :

Dagger 2, bir dependency injection kütüphanesidir. Sınıfların birbirine olan bağımlılığını azaltmak için kullanılır. Bir sınıf icin gerekli olan bir objeyi sınıfın içerisinde oluşturmaktansa dışarıda oluşturup sınıf içerisine veriyi saglar. Dolayısıyla sınıf nasıl oluşturulduğunu bilmek zorunda olmaz ve bu durumda iki sınıf arasındaki bağımlığı azaltmaya yardımcı olur. Bir projedeki neredeyse en önemli şeylerden biri projenin bağımlılığını en aza indirgemektir.

Hilt :

Dagger'ın üzerine inşaa edilmiş olan hilt kütüphanesi, jetpack tarafından önerilen bir dependency kütüphanesidir. Dagger kütüphanesine göre daha kolay entegre edilir.

Koin :

Bir başka dependency kütüphanesi olan koin ise, kotlin dili yazılmıştır ve basit ve güçlü bir kütüphanedir. Dagger kütüphanesine oranla daha basit bir yapısı vardır.

Glide :

Androidde resimler ile ilgili bir iş yapacaksanız Glide ile tanışmanızda da fayda var. Ana amacı internet üzerindeki bir resmi indirip imageView'de göstermenize yarayan bu kütüphanenin bunun yanında indirilen görseli önbelleğe alma, boyutlandırma, herhangi bir hata durumunda çıkacak olan görseli belirleme, görseli döndürme, sadece network üzerinden değil cihaz içersinde bulunan bir görselide gösterebilme gibi özelliklere sahip. Tüm bu işlemleri Glide basitçe halledebilirsiniz. Örneğin internet üzerinden resmi indirip, ortadan kırpalım, resim gelmediğinde gösterilecek olan görseli belirleyelim:


Glide
    .with(context)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_spinner)
    .into(myImageView);
    

gibi gibi basit bir kullanıma sahip. 💖

Picasso :

Picasso bizler için resmin yüklenmesi ve işlenmesi olaylarını kolaylaştıran kullanımı kolay bir kütüphanedir. Bu işlevlerinin yanı sıra; indirilen görseli önbelleğe alma, boyutlandırma, herhangi bir hata durumunda çıkacak olan görseli belirleme, görseli döndürme, sadece network üzerinden değil cihaz içersinde bulunan bir görseli de gösterebilme gibi özelliklere sahip.

Coil (Coroutine Image Loader) :

Kotlin Coroutines tarafından desteklenen bir görüntü yükleme kütüphanesi olan coil, hızlı, kullanımı kolay ve modern bir kütüphanedir.

RxJava :

RxJava bir reactive programming kütüphanesidir. Observer/Observable mantığıyla, asenkron ve event-base tabanlı çalışır.

Coroutines :

Coroutines kütüphanesi, asenkron olarak çalışan kodu daha basit hale getirmemize olanak sağlayan bir asenkron tasarım modelidir. Geliştirdiğimiz uygulamanın yanıt vermemesi veya gelen cevapların uzun sürmesi gibi durumlarda kullanıcı etkileşimini engellemek adına arka planda işlemleri yürütmemize yardımcı olan kütüphanedir.

Mimari Yapılar (Architecture) :

Öncelikle neden bir mimari yapıya ihtiyaç duyarız? Mimari yapıları açıklamadan önce buna bir göz atalım.

  • Teste dayalı uygulama geliştirmeyi kolaylaştırır.
  • Yazma ve okuma için kodları basitleştirir.
  • Katmanlı yapısı sayesinde karışıklığı engeller.
  • Tüm katmanlar arasındaki bağımlılığı azaltmaya yardımcı olur.

Mimari yapılar ve detayları ile ilgili daha fazla bilgi için repoya göz atabilirsiniz.

Design Patterns (Tasarım Desenleri) :

Tasarım desenleri, sıkça karşılaşılan ve birbirine benzeyen sorunları çözmek için geliştirilmiş esnek kalıplardır.

Programlama dili gözetmeksizin; sınıf ve nesneler arasındaki ilişkilerin en iyi şekilde nasıl olmaları gerektiğini açıklayan yöntemlerdir.

Tasarım desenleri bize ne sağlar?

Hepimiz bir şey kodlarken gözümüzden kaçan, yada o an hatırlayamadığımız ve ileride bize sorun teşkil edecek hatalar yapabiliriz. İlk başta bunu engeller. Ortak bir dil konuştuğumuz için özellikle takım çalışmalarında büyük kolaylık sağlar. Bir koda baktığınızda "bu adam hangi kafayla bunu yazmış?" sorununu çözer. 😁

Tasarım desenleri ve detayları ile ilgili daha fazla bilgi için repoya göz atmayı bence ihmal etmeyin. :)

Web Servis :

Verilerinizi web sayfanız dışında tüm cihazlara göndermek istediğinizde devreye Web Service kavramı girer. Web Service ile platform bağımsız tüm cihazlara veri aktarımı gerçekleştirilir. Facebook'da mesajlaşırken karşılıklı olarak mesajların hem web sayfasına hemde Facebook Messenger uygulamasına gelmesini Web Service sağlar. Messenger uygulaması, Android, IOS, Wİndows Phone işletim sistemli cihazlarda çalışması Web Service kavramının gücünü kanıtlamaktadır. Kısaca Web servisler platform bağımsız olmak üzere bir çok uygulama, cihaz ya da nodeun birbiri ile iletişim kurmalarını sağlayan yapılardır.

Daha fazla bilgi için repoyu ziyaret edebilirsiniz. :)

Bunlar öyle hap bilgi olsun ayak üstü diye ekledim, projelerinizde kullanırken daha anlaşılır olacaktır. 😄

Bunlar dışında, bol bol proje geliştirin o konuyu anlayana dek gerekirse bakarak yapın. Bir süre sonra zaten öğrenmiş olacaksınız. 🥳

Java dili ile ilgili bilgi almak isterseniz hazırlamış olduğum repoya da bir göz atabilirsiniz.

Kotlin dili ile ilgili soru cevap şeklindeki bilgilere de gist üzerinden ulaşabilirsiniz.

Android Geliştirme sürecinizi tamamladınız ve artık Google Play Store'a uygulama çıkmak isterseniz de şuradan size yardımcı olabilirim. 🥇

Mutlu kodlamalar. 👩🏻‍💻

Go back