Nasıl Daha Hızlı Öğrenilir?

Gizem Korkmaz
10 min readDec 26, 2022

--

Bu yazı Josh W. Comeau’nun How To Learn Stuff Quickly adlı makalesinin bir çevirisidir.

Çoğunlukla internetin eğitimi demokratikleştirdiğinden bahsedilir; insanlığın tüm bilgi birikimi yalnızca bir Google araması kadar uzağınızdadır! Yine de bilgiye erişim bu hikayenin sadece yarısı; sizin bu ham bilgileri kullanılabilir becerilere dönüştürebilmeniz de gerekir.

Birçoğumuz için bu ikisi arasındaki boşluk, kayda değer bir ilerleme kaydettiğinizi hissetmediğiniz, eğitim üzerine eğitim takip etmek anlamına gelen tutorial helle uzanan sonuçlara yol açabilir.

Nasıl etkili bir şekilde öğrenileceğini öğrenmek, özellikle bir yazılım geliştiricisi için çok önemlidir; yeni şeyler öğrenmek pratikte bu işin kendisidir! Yeni dilleri/frameworkleri/araçları hızlı bir şekilde öğrenmeyi öğrenebilirseniz, ortalama bir geliştiriciden çok daha üretken olabilirsiniz. Bu da bir nevi süper güç!

Bu blog yazısında, doğrudan öğrenmenin kendisi hakkında öğrendiklerimi paylaşacağım ve size yeni becerileri nasıl hızlıca kazandığımı göstereceğim!

Rehberli ve Rehbersiz Öğrenmeyi Birleştirmek

Kabaca bahsetmek gerekirse temelde iki öğrenme şekli vardır:

  1. Rehberli: Eğitici yazılar okumak, kurs almak, YouTube videosu izlemek. Size yol gösteren bir rehber ile takip ettiğiniz her şey.
  2. Rehbersiz: Sıfırdan kendi projelerinizi oluşturma, bir eğitimi detaylandırma, doküman okuma. Bir rehberi takip etmediğiniz herhangi bir şey.

Yalnızca rehberli kaynakları takip ederseniz tutorial hell’e girersiniz. Bir geliştirici olarak başarılı olmak için gereken problem çözme becerilerini geliştirmemiş olacaksınız. Kendi projenizi oluşturmaya çalıştığınızda nereden başlayacağınızı bilemeyeceksiniz. Herhangi bir somut, işlevsel beceri geliştirmeden pratik yaptığınız için çok fazla zaman harcamış gibi hissedeceksiniz.

Öte yandan, tamamen rehbersiz öğrenmeye odaklanırsanız da bu süreç sonsuza dek sürebilir. Deneyimli bir rehber olmadan, zaten çözülmüş sorunları çözmek için günler veya haftalar harcayarak tekerleği sürekli yeniden icat etmeniz gerekecek. Bu uzun ve sinir bozucu bir yol. En kötüsü de kendinizi bu tür işler için yeterince akıllı olmadığınıza ikna ederek (ki bu doğru değil!) öğrenmeyi tamamen bırakabilirsiniz.

Bazı kurslar bu ikilemin farkındadır ve bu yüzden içinde rehbersiz öğrenme için de fırsatlar barındırır. Zorlayıcı hedefler, düşünce deneyleri ve uğraştırıcı alıştırmalar gibi. Keşke bu tür kaynaklar daha yaygın olsa!

Şimdi rehbersiz öğrenmeyi rehberli kaynaklarla nasıl bir araya getireceğinize dair bazı fikirlere bakalım.

Kasıtlı Hatalar Yapmak

Siz de biraz benim gibiyseniz, hata yapmaktan pek hoşlanmıyorsunuzdur. Her şeyin ilk seferde tam anlamıyla mükemmel olmasını istersiniz.

Bu zihniyet genellikle gündelik hayatta ya da diğer alanlarda faydalı olabilir. Bir oto tamircisi olarak çalışıyorsanız, hatalar yüzlerce dolara mal olabilir. Diş hekimi olarak çalışıyorsanız, bir hata birinin gülümsemesine mâl olabilir.

Fakat yazılım geliştirmede hata serbesttir! Bir hata yaparsak editörümüze geri döner, kodu değiştirir ve tekrar deneyebiliriz. Hatta (bazen) bizi doğru yöne yönlendirebilecek, yol gösteren hata mesajlarımız bile vardır. Bu inanılmaz bir lüks ve yeterince faydalandığımız bir şey değil.

Bir eğitimi takip ederken kodları kurcalamayı seviyorum. Verilen kodu aynen kopyalayıp yapıştırmak yerine, onunla biraz denemeler yapın: Satırlardan birini atlarsanız ne olurdu? Ya da bazı değerleri değiştirirseniz?

Bir bilim insanı gibi hareket etmeye çalışıyorum. Bir kodun nasıl çalışması gerektiğine dair bir hipotezim varsa, kodu değiştirerek beklediğim şekilde bozulup bozulmadığına bakarım ve böylece bu hipotezi test ederim. Hipotezimin hatalı olduğunu keşfettiğimde, eğitime ara verebilir ve Google’da biraz araştırma yapabilirim. Veya bu tavşan deliği çok derin görünüyorsa, onu “daha sonra keşfedilecek şeyler” listesine ekleyebilirim.

Bu süreç, otomatik pilota alınmış gibi bir eğitimi takip etmenin, kodla ne yaptığımızı veya neden yaptığımızı gerçekten anlamadan kopyalayıp/yapıştırmanın uğursuz ritminden kaçınmamıza yardımcı olur.

Öğrenme aktif bir süreçtir. Kodu kurcalamak ve karıştırmak, neler olup bittiğine dair zihinsel bir model oluşturmamıza yardımcı olacaktır.

Eğitimlerin gözden kaybolması
Yıllar önce, henüz yeni başladığım dönemlerde “eğitimin yavaşça gözden kaybolması” adını verdiğim bir süreci kullandım.

Temel mantığı şu şekilde:

1. Adım adım ilerleyerek bir eğitimi baştan sona izleyin.
2. Bitirdiğinizde, kodu ilk başlandığınız haline getirerek sıfırlayın ve eğitimi simge durumuna küçültün. Eğitime bakmadan tek başınıza ne kadar ileri gidebileceğinizi görün. Takıldığınızda eğitimi tekrar yukarı çekin, ancak takıldığınız yeri hallettikten sonra tekrar küçültün.
3. Talimatlara bakmadan eğitimi baştan sona tamamlayana kadar bu işlemi tekrarlayın.

Tıpkı yukarıda bahsettiğimiz bilim insanı zihniyeti gibi bu süreç de oldukça faydalı çünkü sizi dikkat etmeye zorlar. Eğitim yavaş yavaş gözden kaybolur ve sonunda bir rehber olmadan kendi başınıza bir şeyi nasıl inşa edeceğinizi öğrenirsiniz.

Bu yöntem son derece etkilidir, ancak herkes aynı şeyi tekrar tekrar yapmaktan hoşlanmayabilir. Yine de tutorial hell’den kaçmak için mücadele ediyorsanız denemeye değer olabilir!

Eğitimleri Genişletme

React’i resmi dokümanları takip ederek bir tic-tac-toe oyunu yaparak öğrendiğimizi varsayalım.

Eğitimi bitirdiğinizde, tamamen işlevsel ancak oldukça minimal bir oyun yaratmış olacaksınız.

Buna çeşitli ilginç özellikler de ekleyebiliriz:

  • Her oyuncunun kaç oyun kazandığını takip edin
  • Daha fazla sunum bileşeniyle kullanıcı arayüzünü geliştirin
  • Pano boyutunun yapılandırılmasına izin verin (4x4, 5x5)
  • Oyuncuya karşı oynayacak bir yapay zeka ekleyin
  • Biraz da mizansen! (animasyonlar, ses efektleri, konfetiler, vb.)

Yaratıcı olun ve gerçekten ilginizi çeken şeyleri seçin!

Bu güzel bir strateji çünkü boş ekran stresinden kaçınıyorsunuz. Zaten tamamen işlevsel, iyi anlaşılmış bir projeniz var. Sağlam bir temele tuğlalar ekliyorsunuz.

Ayrıca bunun bir faydası daha var: Bir eğitim projesine eklentiler yaparsanız, portföyünüzde bunun kredisini kullanabilirsiniz! Bu stratejiyi, Etkili Bir Geliştirici Portföyü Oluşturma adlı kitabımda derinlemesine ele alıyorum.

İlgili Projeler Geliştirmek

Tic-tac-toe projesini bitirdiğinizde, bundan sonra ne yapacağınız konusunda kararsız kalabilirsiniz.

Başka bir eğitime geçmeden önce, benzer bir projeyi sıfırdan oluşturmayı denemek iyi bir fikir olabilir.

Örneğin, bir bingo oyunu yapabilirsiniz! Bazı yeni becerilerinizden (state yönetimi, event listening) yararlanabileceksiniz ancak farklı bir bağlamda. Eğitimde ele alınmadığı için muhtemelen bir şeyleri nasıl yapacağınızı bilmediğiniz bir noktaya geleceksiniz ve çözüm bulmak için Google’da araştırma yapabileceksiniz!

Eğer gerçekten gelişimi hissedemiyorsanız, bu tür bir projeyi o anlık bir kenara bırakabilirsiniz. Birkaç eğitim daha takip edin ve sizi engelleyen o şeyi geçebilecek kadar öğrenip öğrenmediğinizi görmek için daha sonra tekrar deneyin.

Bu stratejinin “bir ileri, bir geri” olarak tanımlandığını gördüm. Eğitim gibi rehberli bir kaynağı takip edip ardından benzer (ancak rehbersiz) bir proje oluşturmak için eşit miktarda zaman harcayın. Eğitim size nasıl bir Instagram klonu oluşturacağınızı gösteriyorsa, kendi başınıza bir Twitter klonu oluşturmayı deneyin!

Doğru dengeyi bulmak
Bir öğrenme yolculuğunun en başındayken, öncelikle rehberli öğrenmeye odaklanma eğiliminde oluyorum. Hâlâ syntax ve temel bilgilerle uğraşırken, herhangi bir şeyi rehbersiz bir şekilde inşa etmek zor!

Kendimi daha rahat hissetmeye başladıkça dengeler değişiyor. Zamanımın çoğunu, bana ilginç gelen şeyleri inşa ederek rehbersiz öğrenmeye harcıyorum. Yeni ve alışılmadık sorunlarla karşılaştığımda eğitimleri araştırıyorum, ancak daha fazla deneyim kazandıkça bu daha az sıklıkta olmaya başlıyor.

Grafiğim şuna benziyor:

Sizin grafiğiniz biraz farklı görünebilir; nihayetinde, doğru dengeyi bulmak size kalmış! Önemli olan, sadece rehberli veya sadece rehbersiz öğrenmeye odaklanmamamızdır.

Düşünce yapısı geliştirme

Yıllar önce birkaç arkadaşımla bovlinge gittim.

Pek başarılı değildim. Toplarımın çoğu oluktan dönüyordu. Maçın sonunda, grubun açık ara en düşük puanına sahiptim.

Bu senaryoyu yorumlamanın iki farklı yolu var:

  1. Bovlingde iyi değilim ve asla iyi olmayacağım. Bovling benim işim değil.
  2. Bovlingde iyi değilim. Yine de istersem, mükemmel bir bovling oyuncusu olabilirim.

Bunun kendi kendini gerçekleştiren bir kehanet yönü var: Hangi yorumu seçerseniz seçin o doğru olacaktır. Bovling beceri seviyenizin değişmez olduğunu düşünüyorsanız, değişmeyecektir. Gelişebileceğinize inanıyorsanız, gelişeceksiniz!

Hızlı bir şekilde yeni beceriler öğrenmek istiyorsanız, doğru düşünce yapısını geliştirmeniz çok önemlidir.

Yazılım geliştirme söz konusu olduğunda da işler asla sorunsuz gitmez. Kaçınılmaz olarak, kodun beklediğimizi yapmadığı zorlu dönemlerle karşılaşacağız.

Bu ya hayal kırıklığı, kendinden şüphe duyma ve sahtekarlık sendromuyla dolu bir düşüş sarmalına yol açabilir ya da harika bir öğrenme fırsatı olarak görülebilir. Doğru düşünce yapısına sahipseniz, hiçbir şey anlaşılmaz bir hata mesajından daha hızlı öğrenmenize yardımcı olamaz.

Dürüst olmak gerekirse, mücadele etmekten ve başarısız olmaktan, zahmetsiz gelen başarıdan öğreneceğimizden çok daha fazlasını öğreniyoruz. Büyüme zihniyetiyle, mücadele her zaman eğlenceli olmayabilir, ancak iyi bir antrenman üretken hissettirir.

Gelişim zihniyeti hakkında daha fazla bilgi edinebilirsiniz.

Hedefler ve motivasyon

Sosyal medyanın abartılı dünyasında yaşıyoruz ve bu sebeple güncel kalmak, Twitter’da gördüğümüz her popüler JS kitaplığını öğrenmek için baskı hissetmek çok normal.

Şahsen, ben bunu ne zaman yapmaya çalışsam işe yaramadı. 😅

Sadece öğrenme aşkı için öğrenmek konusunda pek motive biri değilim. Motive olabilmem için aklımda heyecan verici ve somut bir hedef olması gerekiyor.

Örneğin birkaç yıl önce, bir VR video oyunu olan Beat Saber’ı keşfettim. Bu oyunda, müziğe göre zamanlanmış ışın kılıçlarıyla bloklara saldırıyorsunuz. Her şarkının kendine özgü bir koreografisi var.

Kullanıcıların kendi koreografilerini (toplulukta “haritalar” olarak bilinirler) oluşturmalarına izin veren yazılımlar vardı, ancak ben bunun çok da hayranı değildim. Bu yüzden de Beat Sabre için kendi harita düzenleyicimi oluşturmak istedim.

Birkaç aylık zorlu ve ara ara sinir bozan bir çalışma sürecinin ardından hedefime ulaştım:

(Bu proje ilginizi çektiyse, onu canlı görüntüleyebilir, Github’daki kodlarına göz atabilir veya geliştirilmesi hakkında yaptığım bir konferans konuşmasını izleyebilirsiniz!)

Bu projeden önce 3D deneyimim yoktu ve WebGL, Three.js ve react-three-fiber hakkında bir ton şey öğrenmek zorunda kaldım. Öğrenmek zor bir şey ve gelişim zihniyetiniz ne kadar gelişmiş olursa olsun, her zaman işlerin iyi gitmediği günler olacaktır.

Ama gerçekten istediğim somut bir hedefim olduğu için hayal kırıklığını aşabildim ve ilerlemeye devam edebildim. Bu şeyleri sadece eğlenmek için veya özgeçmişimde iyi görüneceğini düşündüğüm için öğrenmiş olsaydım muhtemelen çok çabuk pes ederdim.

Her insan farklı şekilde motive olur, bu yüzden geliştirmek için niş bir proje bulmanız gerektiğini ima etmiyorum. Ama bence aklınızda gerçekten sizi heyecanlandıran bir hedefinizin olması önemli. Aksi takdirde, ilk yenilik etkisini yitirdikten sonra gerekli motivasyonu sürdürmek zor olacaktır.

Bir şeyleri hatırlamak

Benim gerçekten korkunç kötü bir hafızam var.

Bu bazen sorun olabiliyor. Sonuçta bir şeyleri hatırlayamıyorsanız yeni şeyler öğrenmek de zordur! Neyse ki bunun için bir sistemim var: aralıklı tekrarlar.

Aralıklı tekrarın ardındaki ana fikir şudur: Hafızayı güçlendirmek için, öğrendiğiniz şeyi tam unutmak üzereyken ona yeniden erişmeniz gerekir. Ve hafızayı her güçlendirdiğinizde, bilginin kalıcılığı biraz daha artar.

Kulağa karmaşık geliyor, ancak bunu sizin için takip edebilecek araçlar var. Şahsen, birkaç yüz dizin kartını fizikselsel olarak tutan bir leitner kutusunu kullanıyorum. Ve her gün bir dizi küçük kartı gözden geçiriyorum.

Aralıklı tekrarlama hakkında daha fazla şey öğrenmekle ilgileniyorsanız, Nicky Case’in şu açıklamasına göz atmanızı şiddetle tavsiye ederim: “How to Remember Anything Forever-ish”.

Günlük bir alışkanlık oluşturmak

Haftada 7 saatimizi yeni bir şey öğrenmeye ayırmaya adadığınızı varsayalım. Sizce günde sadece bir saati bu aktiviteye ayırmak mı yoksa her hafta pazar günü 7 saat ayırmak mı daha etkili olacaktır?

Az miktarda zamanı daha sık harcayarak çok daha başarılı olduğumu söyleyebilirim.

Herkesin işleri bu şekilde yapılandırma lüksüne sahip olmadığının farkındayım; ancak bunu başarabilirseniz, her gün öğrenmeye çalıştığınız şeye azar azar zaman ayırmanızı şiddetle tavsiye ederim.

Benim için neden çok daha etkili olduğuna dair bazı hipotezlerim var:

  1. Her gece, beyin o gün öğrendiklerinizi işler ve sindirir. Bundan haftada bir değil, her gün yararlanmak istiyorum!
  2. Her gün pratik yaptığım için kaldığım yerden devam edebiliyorum. Hafızamı tazelemek ve tekrar hızlanmak için bir ton zaman harcamak zorunda değilim.
  3. Daha önce de bahsettiğimiz gibi, yenilik etkisini yitirdikten sonra motivasyonu sürdürmek zor olabilir. Bunu günlük rutininize yerleştirebilirseniz, motivasyon konusunda eskisi kadar endişelenmenize gerek kalmaz; nasıl hissederseniz hissedin, bu her halükarda yaptığınız bir şey haline gelir.

Toplum içinde öğrenme

Swyx’in Learn in Public felsefesinin büyük bir hayranıyım.

Ana fikir, öğrendiklerimizi yayınlayarak gelecekteki kendimize yardımcı olmamızdır. Yeni bir şey keşfettiğimizde, onu belgeleyen bir yapı oluşturmalıyız. Bir blog gönderisi, bir tweet veya bir YouTube videosu gibi.

Bu kulağa biraz mantıksız geliyor olabilir. Sonuçta neden “öğrenme zamanını” blog yazıları yazarak geçiresin ki? Bu büyük bir zaman kaybı değil mi?

Topluluk ile öğrenmenin tonlarca faydası var tabii ancak benim bulduklarım şunlar:

  1. Bugüne kadar birine bir şeyi açıklamaya çalışıp da açıkladığınız şeyi sandığınız gibi tam anlamıyla bilmediğinizi fark ettiğiniz oldu mu? Bir blog yazısı yazmak da bununla etkiye sahiptir. Zihinsel modelinizdeki kusurları/boşlukları ortaya çıkarmanın en iyi yolu bu ve bu teknik ile onları düzeltebilirsiniz.
  2. Dünyanın en kötü hissi, daha önce çözdüğünü bildiğiniz ancak nasıl çözdüğünüzü hatırlayamadığın bir hata ile karşılaşmaktır. Zamanında bununla ilgili bir blog yazısı yazmış olsaydınız, ona referans verebilirdiniz!
  3. Öğrendiklerinizi paylaştığınızda topluluklarda aktif bir katılımcı olursunuz. Yeni arkadaşlıklar ve bağlantılar kurabilirsiniz. Bu eğlenceli ve tatmin edici olabilir, üstelik yeni bir iş bulmak veya yeni bir girişim başlatmak söz konusu olduğunda da faydalı olduğunu söylemeye gerek yok!

Bir uyarı: sıfırdan mükemmel bir blog oluşturmak için haftalar harcama tuzağına düşmeyin! Dev gibi bir platformda, hatta sadece Twitter’da yayınlayarak başlayın! Kendi kişisel blogumu oluşturmadan önce Medium’da düzinelerce blog yazısı yayınladım. Herkese açık bir şekilde öğrenmekten gerçekten zevk aldığınızı keşfederseniz, daha sonra istediğiniz zaman şık ve özel bloga geçebilirsiniz. 😄

Beceriler Ağı

Son zamanlarda kendi kendime Blender kullanarak 3 boyutlu çizimler yapmayı öğrenmeye başladım.

Hala acemiyim. Bu noktada, bu beceriye belki yaklaşık 150 saat yatırım yaptığımı söyleyebilirim. Ancak düzgün görünen sanat eserleri yaratabildim. İşte yaptığım şeylerden bazıları:

Bu beceriyi, bu yazıda belirtilen tüm teknikleri izleyerek çok hızlı bir şekilde öğrenebildim. Ama elimde bir koz daha vardı, o da tamamlayıcı beceriler.

Mesele şu ki, 3D çizim tek bir beceriden ibaret değil; düzinelerce bireysel becerinin bir koleksiyonu. 3D modeller oluşturmak gibi şeyler benim için tamamen yeniydi ve onları sıfırdan öğrenmek zorunda kaldım. Ancak bazıları da deneyimlediğim bir takımyıldızın parçalarıydı.

Örneğin, ben biraz hobi fotoğrafçısıyım. Yıllar önce kompozisyonu, etkileyici çekimler için kadraj içindeki öğeleri nasıl düzenleyeceğimi öğrenmiştim. Render işlemlerinde de nesneleri konumlandırırken bu becerilerden yararlanabilirim.

Bu somut bir örnek oldu, ancak diğerleri daha soyut etkiler. Bir frontend geliştiricisi olarak işimde ayrıntılara dikkat etmek için yıllarımı harcadım. Deneyimlediğim tüm bu piksel ayrıntıları, eğimler ve kalınlıklar için uygun değerler bulmama yardımcı oldu. Ve UI tasarımıyla ilgili işim, renk teorisini ve estetiği anlamama yardımcı oldu.

Hali hazırda sahip olduğum becerilerin öğrendiğim 3D çizim ile sinerji yaratacağını pek düşünmezsiniz, ancak bu bana inanılmaz derecede bir avantaj sağladı.

Gördüğüm kadarıyla, beceriler servet gibidir. Ne kadar çok beceri kazanırsam, o kadar hızlı birikiyorlar. Bir alandaki fikir ve teknikler, başka birinde size yardımcı olabilir.

Her konuda fikri olan biri olmanız gerektiğini söylemiyorum — yine de bir sürü uzmanlık sahip olunmaya değer! Ancak beceri ağınız ne kadar genişlerse, yeni bir şey öğrenmek söz konusu olduğunda avantajınız o kadar büyük olacaktır.

Bazen eğitim kaynakları da bu fikirden yararlanır. Örneğin JavaScript Geliştiricileri için CSS adında bir CSS kursu üzerinde çalışıyorum. Bunu özellikle JS geliştiricileri için yapıyorum çünkü CSS öğrenmeyi kolaylaştırmak için önceden var olan bir dizi bilgiden yararlanabileceğimi biliyorum. Sıfırdan başlamak ve sıfırdan inşa etmek yerine, zaten sahip olduğunuz zihinsel modelleri kopyalayıp/yapıştırarak CSS’i açıklamak için JS bilginizi kullanıyoruz.

Amacım, CSS ile ilişkinizi değiştirmek. Pek çok JS geliştiricisi bunu sinir bozucu ve mantıksız buluyor. CSS becerilerinizin seviyesini yükseltmek istiyorsanız, kurs hakkında daha fazla bilgi edinebilirsiniz.

Bu yazıda çok fazla şeyden bahsettim ve sonuna kadar gelmenizden gerçekten memnunum 💖

Öğrenme yolculuğunuzda bol şans!

--

--