Tüm yazılar Kariyer

Kendi Kendine Yazılım Öğrenmek: Yedi Yılda Ne İşe Yaradı

2018’den beri kendi kendime öğreniyorum. Bu süreçte işe yarayan üç alışkanlığı, hiç işe yaramayan iki yöntemi ve bir dili öğrenirken izlediğim sırayı yazdım.

DT
Demir Taşdemir Mobil Uygulama & Web Geliştirici
— dk okuma

2018’de Python ile başladım. Ne bir bölüm okuyordum ne de birinin rehberliği vardı. Bugün Swift, Kotlin, Java, Dart ve JavaScript ile çalışıyorum, mağazalarda yayınlanmış uygulamalar var. Arada geçen sürede bir sürü şeyi yanlış yaptım.

Bu yazı, o yanlışların hangilerinin gerçekten zaman kaybı olduğu ve hangi alışkanlıkların işe yaradığı üzerine. Genel tavsiyeler değil — kendimde ölçebildiğim şeyler.

İşe yaramayan birinci şey: sırayla kurs izlemek

Uzun süre şöyle bir düzenim vardı: bir eğitim serisi bul, baştan sona izle, sonra diğerine geç. Yanımda editör açık, anlatılanı aynen yazıyorum, çalışıyor, bir sonraki bölüme geçiyorum.

Bu yöntemin sorunu, öğrendiğinizi sanmanız. Videoda her şey mantıklı geliyor çünkü karar zaten verilmiş; siz sadece yazıyorsunuz. Kursu bitirip boş bir dosya açtığımda ne yapacağımı bilmiyordum. Bilgi vardı, karar verme pratiği yoktu.

Şu an kullandığım yöntem tersine: önce yapmak istediğim küçük şeyi belirliyorum, sonra o şeye takıldığım yerde kaynağa gidiyorum. Kaynak bir bütün olarak değil, ihtiyaç anında tüketiliyor. Öğrenme yavaşlıyor gibi hissettiriyor ama kalıcılığı kıyaslanamayacak kadar yüksek.

Takıldığınız yer, öğrendiğiniz yerdir

Bir şeyi rahatça yaptığınızda öğrenmiyorsunuz, tekrar ediyorsunuz. Öğrenme, tam olarak ne yapacağınızı bilmediğiniz ve bir süre orada kaldığınız anda oluyor. Bu yüzden takılmayı bir işaret olarak görüyorum artık: canımı sıkan bir problem varsa, muhtemelen orada öğrenilecek bir şey var.

İşe yaramayan ikinci şey: dil koleksiyonu yapmak

Bir dönem her yeni dile bir hafta ayırıp temellerini öğrenmeyi hedefledim. Sonuçta beş dilin sözdizimini bilen ama hiçbiriyle bir şey bitirmemiş biri oldum.

Şunu geç fark ettim: diller arasındaki fark, sanılandan çok daha küçük. Asıl öğrenilen şey dilin kendisi değil — durum yönetimi, eşzamansız çalışma, bellek, veri modelleme, hata yönetimi gibi kavramlar. Bunları bir dilde derinlemesine öğrendiğinizde ikinci dile geçmek haftalar değil günler alıyor.

Bende bu somut olarak şöyle oldu: Java ile Android tarafında kavramları oturttuktan sonra Kotlin’e geçmek zorlayıcı olmadı, çünkü öğrenilecek olan yeni sözdizimiydi, yeni kavram değil. Aynı şekilde Swift’te öğrendiğim eşzamansız akış mantığı, Dart tarafında karşılığını bulduğunda tanıdık geldi.

İşe yarayan birinci şey: bitirilecek kadar küçük proje

Kendi kendine öğrenirken en büyük risk, motivasyonun bitmesi. Bunu engelleyen tek şey, düzenli aralıklarla bitmiş bir şeye bakabilmek.

Proje seçerken ölçütüm şu oldu: bir hafta sonunda çalışır halde olabilecek kadar küçük, ama gerçek bir problemi çözecek kadar da anlamlı. “Öğrenmek için” yapılan yapay projeler beni hiç sürüklemedi; kendi ihtiyacım olan küçük araçlar sürükledi.

Bitirmenin bir faydası daha var: bir projeyi tamamlarken kaçınılmaz olarak sıkıcı kısımlarla karşılaşıyorsunuz — hata durumları, kenar durumlar, kurulum. Gerçek işin çoğu orada ve sadece bitirdiğinizde öğreniyorsunuz.

İşe yarayan ikinci şey: hata ayıklamayı ciddiye almak

Uzun süre hata çözmeyi “aramak” olarak yaptım: hata metnini kopyala, yapıştır, çıkan ilk cevabı dene. Bazen çalışıyordu ama neden çalıştığını bilmiyordum, dolayısıyla bir sonraki sefere bir şey birikmiyordu.

Değiştirdiğim şey, çözmeden önce hipotez kurmak oldu. “Bence şu değişken burada beklediğim değeri taşımıyor” diye bir cümle kuruyorum, sonra onu doğrulayacak en küçük kontrolü yapıyorum. Doğruysa sebebi buldum; yanlışsa bir olasılığı elediğim için ilerledim.

Bu alışkanlık, öğrenme hızımı en çok değiştiren tek şey oldu. Çünkü artık her hata, sistemin nasıl çalıştığına dair bir bilgi bırakıyor.

İşe yarayan üçüncü şey: resmî dokümantasyona alışmak

Başlangıçta dokümantasyondan kaçıyordum — kuru, ayrıntılı ve giriş seviyesine göre yazılmamış geliyordu. Video ve blog yazıları daha kolaydı.

Ama bir noktadan sonra ikinci el kaynaklar yetmemeye başlıyor: aradığınız şey yeterince özel olduğunda, o konuda yazılmış bir yazı bulunmuyor. Resmî dokümantasyonu okumaya alışmak, bağımsız çalışabilmenin ön koşulu.

Alışmak için kullandığım yöntem şuydu: zaten çalışan bir kodda kullandığım bir fonksiyonun dokümantasyonunu açıp okumak. Problemi çözmeye çalışırken değil, sakinken. Böylece dokümanın nasıl organize edildiğini öğreniyorsunuz ve gerçekten ihtiyacınız olduğunda kaybolmuyorsunuz.

Kopyaladığınız kodu anlayana kadar bırakmayın

Bir çözümü bulup yapıştırdınız ve çalıştı. Burada durursanız borç almış olursunuz — o borcu, benzer bir problemde tekrar takılarak ödüyorsunuz. Ben artık yapıştırdığım her bloğu satır satır okuyup ne yaptığını kendime anlatıyorum; anlatamadığım satır varsa orayı araştırıyorum. Beş dakika sürüyor ve aynı problemi ikinci kez yaşamamı engelliyor.

Bir dili öğrenirken izlediğim sıra

Yeni bir dile geçerken artık standart bir sıram var:

  1. Temel sözdizimi — değişken, koşul, döngü, fonksiyon. Bir günden az.
  2. Tip sistemi ve null davranışı — dilin en çok hata ürettiren yeri burası, erken öğrenmek gerekiyor.
  3. Koleksiyonlar ve dönüşümler — listeyi filtrelemek, dönüştürmek, gruplamak. Günlük işin çoğu bu.
  4. Eşzamansız model — ağ isteği nasıl yapılıyor, sonuç nasıl bekleniyor, hata nasıl yakalanıyor.
  5. Ekosistem — paket yöneticisi, proje yapısı, yaygın kütüphaneler.
  6. Küçük bir uygulama — yukarıdaki beşini bir arada kullanan bitmiş bir şey.

Bu sırayı takip ettiğimde bir dile üretken şekilde geçmek, uzun kurslardan çok daha kısa sürüyor. İlk üç madde zaten benzer; asıl zaman dördüncü ve beşinci maddede geçiyor.

Diploma olmadan ne oluyor

Kendi kendine öğrenenlerin en çok sorduğu soru bu. Benim gözlemim şu: karşı taraf sizden kanıt istiyor. Diploma bir kanıt biçimi; ama yayınlanmış bir uygulama, açık kaynak bir katkı ya da anlattığınızda derinliği belli olan bir proje de kanıt.

Bu yüzden öğrenirken ürettiğim şeyleri saklıyorum ve anlatılabilir hale getiriyorum. Bir projeyi “şunu yaptım” diye değil, “şu problemi şu yüzden şöyle çözdüm, alternatifi şuydu, şu sebeple seçmedim” diye anlatabildiğinizde, konuşma tamamen farklı bir yere gidiyor.

Kendi kendine öğrenmenin dezavantajı geri bildirim eksikliği. Avantajı ise şu: neyi neden öğrendiğinizi biliyorsunuz, çünkü her konuya bir ihtiyaçtan girdiniz. Yedi yıl sonra bakınca, bu ikincisinin daha ağır bastığını düşünüyorum.

  • Kariyer
  • Öğrenme
  • Yazılım
  • Deneyim
Paylaş: LinkedIn X WhatsApp
DT

Demir Taşdemir

Mobil Uygulama & Web Geliştirici

2018'den beri yazılım geliştiriyorum. App Store ve Google Play'de 11 uygulama yayınladım; şu an 6 mobil uygulama, 1 e-ticaret platformu ve 1 masaüstü oyun üzerinde çalışıyorum.

Nereden başlayacağınızı mı bilmiyorsunuz?

Aynı yoldan geçen biri olarak sorularınızı cevaplayabilirim. Hangi dille başlanacağı, hangi projenin seçileceği gibi konularda konuşmak isterseniz iletişim sayfasından yazabilirsiniz.