Bir yazılım dilini nasıl öğreniyorum?

Başlamadan önce...

Uzun bir aradan sonra Merhaba. İşler yoğun ilerlediği için biraz ara vermek zorunda kaldım ama Kotlin yazıları devam edecek onu da belirteyim. Hatta bir projeyi burada anlatarak sıfırdan Kotlin kullanarak yapmayı planlıyorum.

Öncelikle bu yazıyı yazmamdaki amaç "Yazılım dili böyle öğrenilir"  şeklinde bir bilmişlik taslamak değil estağfurullah. Çevremde pek çok kişi yazılımla ilgileniyor. Ve pek çok insan, "Hiçbirşey bilmiyorum nasıl başlayabilirim, Java biliyorum nasıl ilerletebilirim, Swift öğrenmek istiyorum nereden başlayabilirim, Şu an başlayacak olsan hangi dili öğrenirdin... " şeklinde pek çok soru soruyor. Bu yazıyı bu sorulara genel bir cevap olarak yazıyorum. Öncelikle nereden başlayabilirsiniz ve ben nereden başladım gibi soruların cevabını, sonra kendim yeni bir dil öğrenirken nasıl bir yol izlediğimi anlatacağım. Bu benim yaratımım olmayan, dünyada pek çok insanın kullandığı ve bahsettiği bir yöntem. Bu yöntem Golden Key dir bununla her dili öğrenirsiniz diye birşey yok. Herkesin farklı bir yöntemi olabilir.  Ben sadece dil öğrenirken kendimi rahat hissettiğim, bana iyi geldiğini düşündüğüm yöntemden bahsedeceğim.

 

Nereden Başlasak İyi Olur ?

Öncelikle front end ve back end kavramlarından kısaca bahsetmek lazım. 

  • Front end : Kullanıcının gördüğü ve direkt olarak etkileşime geçtiği bölümdür. Front end in kapsamı görsel işlerdir. Nerede hangi yazı, hangi buton, hangi uyarı olacak, renkler, resimler genel düzen nasıl olacak, fontlar neler olacak gibi konuları kapsar. HTML, CSS, JavaScript, XML(Android) kullanılarak yapılır. Kullanıcı çok sever :)

 

  • Back end : Arka Plan Geliştiricisi Demektir. Yani kullanıcının gördüğü site için arkaplanda çalışan derin kodlama kısmıdır. Bu kodlar görünümle doğrudan alakalı  olmayıp sistemin çalışmasını sağlayan yapıdır. Örneğin kullanıcı kaydı oluşturulması, veritabanı bağlantıları, bir ürünün bir kullanıcıya ait sepete eklenmesi gibi. Sistemin daha hızlı ve daha güvenilir çalışmasını sağlarlar. PHP, Python, Ruby, Java, ASP.NET kullanılarak yapılır. Kullanıcının haberi de olmaz umrunda da olmaz :)

 

Tıpkı bir film gibi düşünebilirsiniz. Filmin oyuncuları frontend kısmında yer alırken filmi oluşturan asıl ekip backend kısmında yer alır. Mesela bir web sitesi yazacağımızı düşünelim. Bunun 3 adet önemli kolonu olacaktır. Tasarım, Front end, Back end. Tasarımın hazır olduğunu düşünürsek front end ile buton eklersiniz back end ile bu butona tıklandığında ne olacağını yönetirsiniz. Daha derine inersek, Html ile sayfaya bir Giriş Yap butonu eklersiniz, CSS ile butona renk, boyut... gibi özellikler eklersiniz, Javascript ile animasyon, etkileşim, tarayıcı kontrolü, asenkron bir şekilde sunucu ile iletişime geçilmesi ve web sayfası içeriğinin değiştirilmesi... gibi özellikler eklersiniz .NET ile butona tıklandığında neler olacağını belirlersiniz.

Eğer yazılım alanında hiçbir birikiminiz yoksa, ve bir ucundan başlamak istiyorsanız, kişisel tavsiyem Front end e başlamanızıdır.

Neden Front End İle Başlamanız Daha İyi Olur ? 

Herşeyden önce HTML ve CSS çok basit dillerdir. Öğrenmeniz hatta ustalaşmanız için toplamda 1 ay vermeniz yeterli olacaktır. Ayrıca Visual Studio, Android Studio, XCode... gibi ağır bir IDE ye ihtiyaç da duymazlar, duymazsınız. Çalıştır butonuna basıp saniyelerce bazen dakikalarca beklemeniz gerekmez. Hızlı bir şekilde hem öğrenirsiniz hem ilerlersiniz. Mesela kendinize bir Blog sitesi yapmak ile başlayabilirsiniz. Anasayfa, Hakkımda gibi sayfaları tek satır Back end kodu bilmenize gerek kalmadan yapabilirsiniz. 

 

Front End İyi Güzel de Yetmedi Bana 

Blog sitesi yazdım buyur güzel de oldu daha yeni başladık daha ne olsun iyi bu. Ama ben buna yazı eklemek istiyorum nasıl yapacağım şimdi bunu ben? E girişi çıkışı yok güvenliği yok nolacak bu böyle... Gibi düşünceler aklınızda dolaşmaya başladıysa meraklı, öğrenmeye açık, iyi bir developer olma yolunda ilerliyorsunuz. Tebrikler! HTML CSS ile hızlı sonuçlar aldınız, Yazılım çalışmanın keyfine vardınız yapabildiğiniz gördünüz ki merak oluştu. Ve şunu bilin ki bu yola girdiyseniz, daha çoğunu öğrenme isteği ömrünüzün sonuna kadar bitmeyecek. Artık back end öğrenmeye başlayabilirsiniz. Backend de çalışmalarınıza cevap almanız biraz daha gecikebilir. Bu tamamen seçtiğiniz dile (framework e), kapasitenize, ayırdığınız vakte... bağlı olarak değişir.

 

Ben Yazılım Dünyasında Nasıl İlerledim ?

Ben yazılım dünyasında tam size tarif ettiğim şekilde ilerledim. Üniversite 1.sınıftan 2.sınıfa geçerkenki yaz aylarında girmiştim bu dünyaya. Öncelikle 1 ay HTML ve CSS öğrendim. Javascript e hiç girmedim, ucundan kıyısından JQuery çalıştım. JQuery'yi öğrendim bile diyemem sadece çalıştım ve bıraktım. HTML, CSS, JS üçlüsünü pek sevdiğim söylenemez. Sonrasında Üniversitede o dönem Java dersi alacağımızı duydum ve Java öğrendim. NetBeans indirdim ve Console da Java çalıştım. (Hala çok sevdiğim bir ide dir kendileri. Android Studio yazılmamış olsaydı kesinlikle Netbeans ile Android yazardım. Eclipse i bir türlü sevemedim.) Henüz JSF, Spring MVC, Struts... gibi Java Web framework lerinden haberim yoktu. Console da Java çalışmaya algoritma bilgimi ve yeteneklerimi geliştirmeye çalıştım. Bol bol alıştırma yaptım. Az sonra size de bol bol alıştırma sorusu çözmenizi tavsiye edeceğim. Sebebi ise gittikçe o dile aşinalık kazanmanız, o dilde kod yazarken hızlanmanız ve ellerinizin kod yazmaya alışması. O yaz HTML, CSS ve Java ile bayağı verimli geçmişti. Yıl içerisinde üniversitede 2 dönem aldığım Java dersi sayesinde  Java ve algoritma bilgimi daha da geliştirmeye çalıştım. Object Oriented Programming, Exceptions, Generics, File Operations, Polymorphism, Inheritance gibi üst seviye konular öğrendim. 

Hiç unutmam Java çalıştığım günler ramazan ayına denk gelmişti. Sabaha kadar çalışır arada sahur yapar yatardım. Akşam 15.00 dolaylarına kadar da kalkmazdım :) 

Üniversite 2.sınıftan 3.sınıfa geçtiğim yaz staj yaptım. Ve staj esnasında ASP.NET MVC 5 Framework'ünü öğrendim. Bu framework basitçe açıklamak gerekirse, HTML, CSS ve C# ile web siteleri yazmanıza yarıyor. HTML, CSS geçmişim güzel biliyorsunuz :) C# da Java'ya yakın, hatta pek çok otoriteye göre daha basit. Bu framework üzerine çalıştım ve şu an blogumu okuduğunuz site de bununla yazıldı.

Üniversite 4.sınıfta HTML, CSS cepte; ASP.NET MVC 5 bilgim de orta seviyeydi. Ancak Java seviyem de fena olmadığı için bitirme projem olarak bir Android uygulama geliştirdim. Wi-Fi modemlerini kullanarak bina içi navigasyon konulu bir Android uygulamaydı. Sözkonusu avmden izin almadığımız için hiç yayınlanmadı. Ancak özet olarak o gün bugündür Android Uygulama Geliştiricisiyim. Ayrıca mesleğimi de seviyorum. Birşeyler üretmek fikri gerçekten güzel.

Ayrıca bitirme projesi olarak bir e-ticaret sitesi değil de Android uygulama yazmamı sağlayan takım arkadaşlarım Ömür Bayav ve Taner Han'a buradan tekrar teşekkür ediyorum.

 

İyi Hoş da bi HTML, bi CSS, bi Java, bi C# Diyorsun Nasıl Öğreneceğiz?

Bir dil öğrenmem gerektiği zaman ben nasıl hareket ederim ?

HTML, CSS, Java, Asp.Net MVC 5, Android, Kotlin... tüm bu diller için benim uyguladığım ortak bir yöntem vardır ki genelde en fazla 1 ay içerisinde o dilde orta seviyede bir proje yapacak seviyeye gelirim. Diyelim ki Swift öğrenmek istiyorum. Önce kalitesi tescillenmiş bir Swift video serisi ve sağlam bir Swift kitabı bulurum.

Java için tercih ettiğim ilk kitap :  Java How to Program (Bu Java 8 ve 9 u da kapsayan yeni bir kitap. Benim 5 sene önce kullandığım bunun önceki versiyonlarından biriydi.)

Video serisini açarım ve bir IDE kurmam gerekiyorsa kurarım. (Swift için XCode gerekli) Ardından bilgisayarımın ekranını ikiye bölerim. Bir tarafta video açık ve diğer tarafta da XCode açık olur. Videoda yazılan kodu aynen kendim de yazarım. Bu hem XCode'un özelliklerini öğrenmek, hem Swift'e aşinalık kazanmak hem Swift'te kod yazmaya alışmaya başlamak için gereklidir. Bu yöntemi uygulayacaksanız mutlaka eğitim videosu eşliğinde orada yazılan kodu yazın. Gereken yerlerde videoyu durdurun. Bu tip video serileri bölüm bölümdür. 1.bölümde genelde ekrana veya konsola Hello world yazarsınız. Her bölümün sonunda videoyu durdururum, Swift kitabımı açarım ve o videoda bahsedilen bölümü(chapter) okurum. Kitaptaki bölüm sonu sorularını çözerim. Bu şekilde bir zincir oluşturur ve video+kod -> kitap, video+kod-> kitap zincirine devam ederim. 

Bu zincirde eğer yapabilirseniz benim eklediğim ve çok sevdiğim şu değişikliği de yapın. Zorunlu değildir yapmasanız da olur. Bölüm sonu sorularını çözdükten sonra o bölüm sonu sorularından bir kaçını kendimce daha da zorlaştırarak çözmeye çalışırım. Örneğin kitapta yıldızlardan merdiven yapılması istendi ve doğru bir şekilde yaptınız. Bir sonraki hedefiniz bunu biraz daha zorlaştırarak tersten yapmak olsun. Mesela soldaki şekli yapmanız istendi ve yaptınız. Ellerinize sağlık. Şimdi de sağdakini yapın. Kolay gelsin :)

Şu unutulmamalıdır ki yöntemler insanlara bağlı olarak değişir. Mesela video izleyip not almak da bir dil öğrenme yöntemidir. Mesela video izlemeden sadece kitap edinerek de çalışılabilinir. Her ne kadar sıkıcı bulsam ve önermesem de video kitap olmadan döküman okunarak da dil öğrenilebilinir. Bunları sizin tek tek deneyip size en uygun yöntemi bulmanız ve sıradaki dillere onunla çalışmanız gerekmektedir.

 

Ben zamanında bu konuyu araştırırken aklıma şu soru gelmişti.

Bir dili öğrendim diyebilmek için o dilde neler yapabiliyor olabilmek gerekli ? Ne yapabiliyorsak dil öğrenmiş sayılıyoruz ? Bir sonraki yazının konusu da bu olsun.

Ellerim karıncalanmaya başladı ben kod yazmaya gidiyorum. Kendinize çok iyi bakın :)

Blog yazılarına abone olmak ister misiniz ?

Her yeni blog yazısı çıktığında veya soru yayınlandığında bildirim almak için e-mail adresinizi yazmanız yeterli.