Android Programlama İçin Kotlin mi Java mı #1

Kotlin mi Java mı

Kotlin ve Java programlama dilleri hakkında onlarca yazı yazıldı çizildi ancak 2020 yılında Kotlin mi Java mı sorusunun cevabı pek çok insan tarafından hala merak edilmekte. Yakın çevremde pek çok farklı kişiden aynı soruyu duymaktayım. İş görüşmelerinde mutlaka sorulan bir sorudur mesela. Kotlin’i tercih etmemin sebebi popüler kültür ve ilgi mi yoksa bilinçli yaptığım bir tercih mi. Amaç bunu ölçmek gerçi. Görüşmelerde “Kotlin diye bişey çıkmış. Herkes ona geçiyormuş ben de geçeyim diye düşündüm” demeyin uyarısını yapmama bilmem gerek var mı.

Peakup’ta işe girdikten sonra birkaç ay içerisinde geliştiricilerden oluşan takım arkadaşlarıma Kotlin mi Java mı konulu yaklaşık 45 dakikalık bir sunum yaptım. İstanbul Aydın Üniversitesi’nde IAU Android Talks etkinliğinde yapmış olduğum konuşmaya katılan öğrenciler ve yakın zamanda İstanbul Teknik Üniversitesi Girişimcilik Kulübü’nden ofisimize ziyarete gelen öğrenciler de aynı soruyu sormuştu. Yani tecrübeli iş arkadaşlarımdan öğrencilere kadar yazılımla ilgilenen herkes hala normal olarak Kotlin ile Java’nın farklarını merak etmekte. Ben de bu konu hakkında bir yazı kaleme alarak daha çok insana ulaşmak ve elimden geldiği kadar yardımcı olmak istedim. Çünkü bu sorunun daha çook sorulacağını düşünüyorum.

 

https://gph.is/2t3wKwS

 

Bu yazıda neden Kotlin, 2020 de Android programlama için Java bilmek gerekli mi, Android uygulama yazmak istiyorum Java öğrenmeli miyim, Android için Java mı Kotlin mi? Java ölecek mi hatta öldü mü gibi sorulara kendimce cevap vermeye çalışacağım. Ayrıca herhangi bir dil kıyaslaması yapmadım. Sadece Kotlin’e geçmeli miyiz veya ne zaman geçmeliyiz sorusunu cevaplamaya çalıştım. Dil kıyaslaması yapacağım bir başka yazı birkaç hafta içerisinde yayında olacak.

Özet Bilgi

Özet olarak Kotlin mi Java mı sorusunun basitçe verebileceğim bir cevabı bence yok ancak yazının özeti olabilecek bir cümle söylemem gereirse:

“Duruma göre değişir” derim

Yapacağınız projeye, öğrenci olup olmadığınıza, öğrenciyseniz üniversitenizin dillere yaklaşımına, sektörde çalışıp çalışmadığınıza, çalıştığınız yerde miras (legacy) kod olup olmadığına… Bu sorunun cevabı bunun gibi onlarca değişkene bağlı. Hap bilgi peşinde koşmak açık net cevap istemek yerine lütfen yazıyı sonuna kadar okuyun. Özellikle yeni jenerasyon çok sabırsız hemen her şey olsun, hemen cevap alayım, hemen bitireyim, hemen çok iyi proje yapayım, hemen… Lütfen biraz sabır. Siyah ile beyaz kadar net değil. Hayatınızın bu kadar hızlı akmasına gerek yok. Nefes alın nefes verin yaşayın. Benim Kotlin mi Java mı sorusuna vereceğim cevap gerçekten uzun. Okumaya üşenen bir insansanız şu an sekmeyi kapatmanızı tavsiye ederim ancak basit bir cevap olmayacağı olamayacağı için vaktinizi ayırmanızı daha çok tavsiye ederim. (Geliştirici olmak istiyorsanız okumaya üşenmeyin bi zahmet) Vakit vermeye değer dolu dolu bir yazı okuyacaksınız buna emin olun.

İnternet ne yazık ki koca bir çöplük haline geldi ve bilenle bilmeyen ayırt edilemiyor. 3 5 fazla reklam gösterelim diye koca sayfaya 3 satır yazılıp geçiliyor. İnternet çöplüğündeki pek çok yazı gibi Kotlin şöyle iyi böyle iyi hadi hemen geçin demeyeceğim bunu baştan belirteyim. Kotlin’e geçmek istiyor ve desteklenmeye ihtiyaç duyuyorsanız o tarz bir yazı tercih etmelisiniz. Bu yazı bambaşka bir yazı olacak.

Başlıyoruz !

Öncelikle şunu söylemek istiyorum ki herhangi bir dilin bir teknolojinin bağımlısı, fanatiği hatta kölesi olmamak lazım. Projeye göre duruma göre dil ve framework değiştirebilir olmak bence daha iyidir. Örnek olarak biz Java’cıyız 20 senedir böyleydik 20 sene daha böyleyiz düşüncesi bence yanlış. Kullandığımız teknoloji dil ve frameworklerin ne kadar süre hayatta kalacağı kesin değil. 2000 li veya 2010 lu yıllarda çok ünlü olup şu an 1 tane bile iş ilanı olmayan kaç tane programlama dili ve framework var. Bu dinamik dünyada ne olacağını asla tam olarak bilemeyiz.

Başka bir örnek vermem gerekirse şu an iOS ve Android çoğunlukla native olarak geliştiriliyor. Biz hala Java mı Kotlin mi diye tartışırken Google bir yandan da Flutter  isimli bir cross platform uygulama geliştirme frameworkü geliştiriyor ki birkaç sene sonra belki de o revaçta olacak. Belki de telefonlarımız Android işletim sistemine değil de ondan çok daha stabil çıkacak olan Fuchsia işletim sistemine sahip olacak. Bu yüzden dile veya frameworke bağımlı kalmak başka dil asla olmaz demek bence yanlıştır.

Bu yazıda kesinlike direkt olarak Kotlin daha iyidir deyip 1995’ten beri gelen Java kültürünü, kaynaklarını ve altyapısını da, kesinlikle Java deyip Kotlin’in getirdiği yenilikleri ve kolaylıkları da çöpe atamam, atmam kimseye de attırmam. Şimdi biraz daha derine inelim isterseniz.

1. Üniversite Öğrencisiyim Kotlin mi Java mı?

Kotlin mi Java mı sorusunun cevabını vermeye öncelikle öğrencilerden başlamak istiyorum. Bu soruyu soran merak eden kişi bir öğrenciyse kendisine olan tavsiyelerim ve sektörde çalışan arkadaşlara tavsiyelerim çok farklı olacak. Hatta sevgili öğrencimizin okuduğu yarıyıla derslerine göre bile değişecek.

 

  1. Okuduğunuz bölüm nedir?
  2. Yazılım dersleri bulunan bir bölümde mi okuyorsunuz?
  3. Hangi yarıyılda okuyorsunuz?
  4. Java dersiniz veya Nesne Tabanlı Programlama (Object Oriented Programming yazının her yerinde kısaca OOP diyeceğim) dersiniz müfredatınızda var mı? Bu dersi aldınız mı yoksa alacak mısınız?

Yazılım dersleri içeren Bilgisayar Mühendisliği, Yazılım Mühendisliği, Yönetim Bilişim Sistemleri… gibi bir bölümde okuyorsanız bulunduğunuz yarıyıl hayati derecede önemli.

1.a ) Daha ilk yarıyılda veya hazırlık sınıfındaysanız ve OOP dersiniz Java dili ile verilecekse

Kotlin mi Java mı sorusuyla üniversitenizin ilk yarıyılında veya hazırlık sınıfı aşamasında karşılaştıysanız müfredatınızı kontrol etmenizi şiddetle öneririm. Üniversitenizde OOP dersini Java ile mi anlatıyorlar? Öncelikle üst sınıflardan veya üniversite ders programından bu bilgiyi öğrenmeniz gerekmekte.  Java veya OOP dersi görecekseniz Java mı Kotlin mi sorusunun cevabı kesinlikle Java olacaktır. Java öğrenmeniz OOP dersinizin notlarına pozitif anlamda çok büyük katkı sağlayacaktır.

İstanbul Aydın Üniversitesi’nde yaptığım konuşmada sorulan bir soru buydu ve ben önce öğrenciye hangi yarıyılda okuduğunu sordum. 1.sınıf ta okuduğunu söyledi ve verdiğim cevap yukarıdakinden başkası değildi. (Şu an napıyor çok merak ediyorum 🙂 Java çalışmaya acilen başlayın. Acilen proje yapmaya ve GitHub’da paylaşmaya başlayın. Kodunuzun kalitesini şu anlık dert etmeyin kötü olabilir iyi olabilir. Kötü de olsa iyi de olsa bir şeyler yapın üretin paylaşın. Çünkü ileride işveren için bir şeyler üretmiş olmanız kesinlikle çok büyük bir önem arzedecek. Nerede bir yazılım öğrencisine rastlasam hep aynı öneriyi yaparım. Yazın boş durmayın kısa bir dinlenmenin, tatilin ardından mutlaka oturup Java çalışın. Eğer Java’yı veya herhangi bir programlama dilini nasıl öğreneceğim diyorsanız Bir Yazılım Dilini Nasıl Öğreniyorum başlıklı kendi blogumda paylaştığım yazıya mutlaka beklerim.

1. b ) Daha ilk yarıyılda veya hazırlık sınıfındaysanız ve üniversiteniz OOP dersini Java haricinde bir programlama diliyle C#, C++… aracılığıyla verecekse

Kotlin mi Java mı sorusuyla üniversitenizin ilk yarıyılında veya hazırlık sınıfı aşamasında karşılaştınız, müfredatınızı kontrol ettiniz ve C# anlatılacağını öğrendiniz. “Ben nasıl olsa Android Developer olacağım canım ne gerek var C# öğrenmeye” demeyin hiç boşa vakit kaybedeceğinizi düşünmeyin. “C++ ı da bitek bizim üniversite kullanıyor bir işe de yaramıyor” diyorsanız çok yanlış
düşünüyorsunuz. OOP Dersinin amacı size nesne tabanlı programlamanın temel prensiplerini öğretmektir. Size dil öğretmek değildir. Üniversite programlama dili kursu değildir. Üniversite size altyapı verir teori verir. Siz o altyapıyı alır nerede isterseniz kullanırsınız. Bu size kalmış. Üniversitenize C++ anlattığı için yeni jenerasyonun deyimiyle “atar yapmayın”. OOP’nin ne olduğunu bir kere öğrendikten, analitik düşünme yetisini bir kere kazandıktan sonra nesne tabanlı bir başka dile geçmeniz çok zor olmaz.

Yıldırım Beyazıt Üniversitesi’nde bir hocam şunu söylemişti “Nesne tabanlı programlama dillerinden kimisi sınıfa import ile başlar kimisi using ile kimisi başka bir şekilde ancak bunun alt kısmı diller arasında çok büyük farklar oluşturmaz.  for if while her programlama dilinde vardır ve aynıdır. Yazılışları farklı olabilir ancak aynı işi yapar aynı anlama gelirler. Bir Object Oriented dili çok iyi bir şekilde öğrendiyseniz bir başkasına geçmek ancak bir kaç haftanızı alabilir.” Kotlin mi Java mı sorusunun cevabına gelirsek Kotlin öğrenmek için acele etmeyin.

OOP dersinizde göreceğiniz dil üzerine çalışın. Hangi dil olduğu önemli değil o dile çalışın ve OOP dersinizi güzel güzel notlar alarak geçin. Sonrasında Android programlama öğrenmek istiyorsanız tekrar Java öğrenmenize bana göre gerek yok. Kotlin’den başlayabilirsiniz. Nesne tabanlı programlamanın temelleri çok önemlidir. Algoritmalar, Tasarım Desenleri, Yazılım prensipleri, Kod standartları… Bunları üniversiteniz hangi dilde öğretiyorsa siz de o dili çok iyi bir şekilde öğrenin. Emin olun ileride Kotlin’e geçmeniz çok daha kolay olacak.

1. c ) Üniversitenin 5. yarıyılından sonra bu soru ile karşılaştıysanız

OOP dersi geçti gitti. Ve siz bu dersten yeterince faydalanmadınız. Veya bu dersi hiç görmediniz. Veya Seçmeliydi zor hoca veriyordu almadınız(mezun olunca geliştirici olmayı düşünüyorsanız çok büyük hata. Mezun olunca ne olacağınıza karar vermediyseniz o çok farklı bir yazının konusu 🙂 İşte bu durumda üniversiteniz size nesne tabanlı herhangi bir dil öğrettiyse yine
Kotlin’den başlayabilirsiniz. Hiçbir yazılım dili göstermeyen veya en azından OOP prensiplerini öğretmeyen üniversite yoktur diye düşünüyorum ama her yer üniversite dolunca kalite düştü haliyle. Belki de vardır diye ben şu eklemeyi de yapayım. Eğer programlamanın temellerini biliyorsanız ama eksikleriniz de varsa Kotlin’e başlamanızı tavsiye etmem. Java ile başlayın. Çünkü Java’da kaynak sorunu çekmezsiniz. Onlarca kitap onlarca blog ve video bulabilir kısa zamanda uzun bir yol katedebilirsiniz. Çeşitli Kotlin kaynakları var ancak Java’nın kaynaklarıyla boy ölçüşebileceğini zannetmiyorum.

Sonuç olarak üniversitenizden güzel bir OOP bilgisi aldıysanız hangi dilde aldığınız önemli değil. Kotlin mi Java mı sorusuna Kotlin diye cevap veririm. Programlama altyapınızı yeterince iyi hazırladıysanız analitik düşünme yetisi kazandıysanız istediğiniz bir başka OOP dilde birkaç hafta içerisinde ufak da olsa proje üretir hale gelirsiniz.

2. Android Geliştirici Olarak Halihazırda Çalışmaktayım Kotlin mi Java mı?

Eğer zaten bir şirkette Android Geliştirici olarak çalışıyor ve Kotlin mi Java mı sorusunu soruyorsanız cevabım direk Kotlin olmayacaktır tabiiki. Size eninde sonunda Kotlin’e geçmenizi tavsiye edeceğim. Zaten Java’yı belli bir seviyenin üzerinde bilen birisi olduğunuz, OOP kavramlarını bildiğiniz için Kotlin’e geçmek sizi zorlamayacaktır. Kotlin’e geçin ama herkes hemen geçecek gibi bir durum yok. Ne zaman geçeceğinizi öğrencilere sorduğum gibi size de birkaç soru sorarak önereceğim.

  1. Şirkette şu an yaptığınız projeleriniz ne büyüklükte?
  2. Şirketiniz ne kadar yenilikçi ve yöneticileriniz kendinizi geliştirme isteğinize destek veriyor mu?
  3. Java ile halihazırda yaptığınız uygulamayı kaç kullanıcı aktif olarak kullanıyor?
  4. Kotlin’e geçirmek istediğiniz uygulamaya sürekli düzeltmeler ve güncellemeler çıkarmanız kullanıcı tarafından bekleniyor mu?

Yeni mezunsunuz üniversitede Java gösterildi. Java ile Android uygulamalar yazmaya başladınız ve bir start up firmaya girdiniz 3 aydır çalışıyorsunuz 2 tane ufak çaplı Android uygulamanız oldu ve bunlarda Java kullandınız. Size bir süre daha bu firmada Java ile devam etmenizi önereceğim. Sizin durumunuzda şu anlık ne yazık ki Kotlin’e ayıracak vaktiniz yok. İşverene kısa vadede sonuç üretmek kendinizi ispat etmek zorundasınız. Çok iyi bilirim o duyguyu. İş değiştirdiğinizde, veya bu iş yerinde 6 ay, 8 ay, 1 sene gibi önemli bir mihenk taşını devirdiğinizde Kotlin’e ufak ufak vakit ayırmanızı boş zamanlarda çalışmanızı tavsiye ederim. Sonra da yavaş yavaş şirket projelerinize entegre edersiniz.

2 3 senedir Java ile geliştirdiğiniz büyük bir projeyi sırf Kotlin çıktı ve Java’dan daha kolay diye direkt olarak bir anda Kotlin’e geçirmek, istemeyeceğiniz sonuçlar doğurabilir. Kotlin’i henüz öğrenme aşamasındayken direkt olarak büyük projeye giriştiğiniz için bocalayabilir, zorlanabilirsiniz ve motivasyon kaybına uğrayabilirsiniz. Benim de zamanında yaptığım hata gibi: Kotlin yazarsınız ancak Java gibi Kotlin yazarsınız.

Böyle bir şey çıkar ortaya ondan sonra

Şunu eklemeden geçemeyeceğim, PEAKUP’ta kendini geliştirmek isteyen her insana daima vakit ve kaynak ayrılır, yaratılır.

İşin bir de kullanıcı boyutu var ki bana göre yenilikçilikten de yöneticilerinizden de önemli bir boyut. Java ile yazdığınız uygulamayı onlarca kullanıcı kullanıyor ve sürekli iyileştirmeler, geliştirmeler yapmanız kullanıcı tarafından bekleniyorsa bu durumda Kotlin’e geçmeniz zor olabilir. Naçizane tavsiyem mesai saatleriniz dışında kesinlikle Kotlin çalışmanız ve Kotlin kullanarak birkaç orta ölçekli proje yapmanız ve kullanıcı da elveriyorsa projenizi yan bir dal (Branch) açıp yavaş yavaş Kotlin’e geçirmeniz olacaktır. Böylece ana dalı etkilememiş olursunuz ve istediğiniz an ana dala gidip hata düzeltme yapıp, özellik ekleyip sonra yine Kotlin migration dalına dönebilirsiniz.

  • Eğer yöneticileriniz kendiniz geliştirmeniz için zaman tanıyorsa,
  • Şirkete yeni girmişseniz ve şirketinizde daha önce hiç Native Android uygulama yazılmamışsa (Peakup’a girdiğimde karşılaştığım durum)
  • Şirkette varolan Java ile yazılmış Android uygulamalarınız stabilse, hata düzeltme ve özellik ekleme maddeleri çok fazla gelmiyorsa

Yukarıda sıralanan durumlarda hiç düşünmeden bir an önce Kotlin’e başlayın derim. Sıfırdan bir proje başlatıyorsanız direk Kotlin ile başlayın. Bilmiyorsanız da öğrenirsiniz ve bir proje yaparak Kotlin öğrenmek öğrenme yöntemlerinin en güzeli. Hem atalarımızın dediği gibi Kervan yolda dizilir, Damlaya damlaya göl olur, Denize dalmadan yüzme öğrenilmez…

Android Java’dan Tamamen Vazgeçecek mi?

https://gph.is/2In7bNS

Çoğunlukla iş arkadaşlarınızın veya iş görüşmelerinin sevilen çok tatlış bir sorusudur bu. Android’in Java’dan vazgeçmesi şu an için mümkün görünmüyor. Çünkü Android işletim sisteminde de milyonlarca satır Java kodu var. Google Play Store’da da sadece Java ile yazılmış onlarca uygulama var. Buna karşın şöyle de bir durum var Android Studio o kadar geliştirildi ki bir Kotlin projesine Java kodu yapıştırdığınızda (eğer yapıştırdığınız kodda syntax hatası yoksa) otomatik olarak Kotlin koduna dönüşüyor. Google, her etkinliğinde Kotlin’i hype yaparken, uzun uzun överken, Java hakkında iyi veya kötü bir açıklama yapmıyor. Şahsi fikrime göre Android Studio bile Kotlin için bu kadar bağırırken Kotlin’e geçmemek yanlış olur. Zaman içerisinde bu geçiş Google tarafından bile somut olarak yapılacaktır. Bir gün mutlaka ama bugün değil.

Kotlin’e Başlama Hikayem

Kısaca kendi Kotlin öğrenme hikayemden de bahsetmek istiyorum. Ben üniversite yıllarımda Java öğrendim. Pişman değilim. Bugün sahip olduğum bilinçle üniversiteye yeni giriyor olsaydım yine Kotlin değil Java öğrenmek isterdim. Java ile arayıp bulamayacağınız kaynak yokken Kotlin’de hala kaynak ve örnek sıkıntısı var. Kotlin pek çok konuda hala Java’dan destek alıyor.

Üniversitede Türk olmayan, Türkçe bilmeyen Java hocamızdan güzel bir OOP bilgisi aldık. Ayrıca önceki yaz ben de kendi çapımda Java çalışmıştım tabiiki bunun da etkisi oldu. Yine kendim uygulayıp faydasını gördüğüm ve öğrencilere sık sık verdiğim önerilerden birisi. Sene içinde göreceğiniz derslere önceki yaz çalışmak.

Üniversitenin ardından 2 sene Java kullanarak Android uygulamalar geliştirdim. Sonra Kotlin, Google tarafından resmi dil olarak ilan edildi ve ben Kotlin öğrenmek için yanıp tutuştum ancak öyle hemen başlayamadım. Çünkü çok büyük bir kaynak sıkıntısı vardı ve o dönemki iş yerimde hadi hemen Kotlin’e geçelim gibi bir ortam da oluşmadı. Daha çok -olması gerektiği gibi- bi bakalım durum ne olacak gibi bir yaklaşıma sahip olmuştuk ama kolaylıklarını kodu ne kadar kısalttığını öğrendiğimde gerçekten çok heveslenmiştim. 2017’de yıl içerisinde Kotlin öğrenme kaynakları artınca ben kendi çapımda kişisel blogumda yazılar yazmaya ufak çaplı projeler yapmaya başladım ama bir yerden sonra tıkandım. Neden ve nerede tıkandım?

Peki Kotlin Biliyor muyum?

“Kotlin öğrendim” veya “Kotlin biliyorum” gibi cümleler fazlasıyla iddalı cümleler. Bunlardan birini kurabilmek için daha büyük ölçekli projeler yapmaya ihtiyacım vardı. Kendi çapımda onu da yapmaya çalıştım. Orta büyüklükte olan eski bir projemi sıfırdan Kotlin kullanarak tekrar yazdım. İş yerindeki projelere entegre etmeye başlamaya hazırdım ki askere gittim. Ve askerde bir Kotlin kitabı edinerek Kotlin çalışmaya devam ettim. Askerlik bitince de PEAKUP’ta işe girdim ve burada sıfırdan başlattığım her projeye Kotlin ile başladım. Peki Kotlin biliyor muyum? Bu soruya hala “çok iyi biliyorum, sınav yapsalar 100 alırım, 10 üzerinden 10 biliyorum, Kotlin’le şöyle uçarım böyle kaçarım” gibi bir cevap veremem. Hem bir dili biliyorum demenin ölçütü nedir? O da çok ayrı bir mesele.

Java Öldü mü, Ölecek mi

Java öyle kolayca ölecek bir dil değil arkadaşlar. Java Android’den çok önce de vardı ve asla Android’e bağımlı bir dil olmadı. Java’nın arkasında dünyanın en büyük teknoloji şirketlerinden birisi olan Oracle var. Bu kadar büyük bir destek ve bitmeyen yatırımla binlerce geliştiricisiyle Java ölebilecek silinip gidebilecek bir dil kesinlikle değil. 20 yıl sonrasını bilemem ama 3 sene 5 sene sonrasını tahmin etmek zor değil bence. Pek çok otoriteye göre hala dünyanın en çok kullanılan 5 dili içerisinde. Oracle teknolojiye yetişmekte zorlanıyor olabilir. Ürünleri ve işlerinde bu günlerde pek çok açık kaynak rakip edindi ancak Oracle’ın asıl ürünü hardware. Kullandığımız onlarca makinenin içinde Oracle ürünü çalışıyor. Zaman içinde yeni dünyanın IBM’i olabilir mi evet olabilir. Oracle düşebilir ancak yakın bir zamanda değil. Oracle fakirleşse bile Java, geliştiricileri ölürse ve üniversiteler yüz çevirirse ölebilir. Belki. Kısa zamanda değil.

PEAKUP Blog‘da çıkan diğer Kotlin yazılarını görmek için tıklayınız

SwiftUI ve Jetpack Compose’dan bahsettiğim yazıyı okumak için tıklayınız