Fonksiyonel programlama öğrenme serüvenim, defalarca aynı kapıyı çalmaya benziyor. Kapı hiç açılmadı, ta ki doğru yerden bakmayı öğrenene kadar. Nesne yönelimli programlamayı öğrendikten sonra kod yazmak benim için somuttu. Nesneler vardı, metodlar vardı, durum değişkenlerdi. Her şeyin bir yeri ve zamanı vardı. Fonksiyonel programlamayı ilk gördüğümde ise karşımda yalnızca matematiksel formüller gibi duran bir şey buldum. Fonksiyonel programlama öğrenme sürecinde ilk tökezlediğim kavram "yan etkisiz fonksiyon"du. "Neden fonksiyon bir değer döndürüp bırakıyor? Neden dış dünyayı değiştirmiyor?" diye soruyordum. Mantığını kavrayamıyordum çünkü kafamda "program = durumu değiştirmek" şeklinde kökleşmiş bir anlayış vardı. Immutability yani değişmezlik kavramı da başlarda saçma geldi. "Veriyi değiştiremiyorsam nasıl program yazacağım?" Cevabın "yeni veri oluşturursun" olduğunu anlamak haftalar aldı. Map, filter, reduce fonksiyonları gördüğümde biraz aydınlandım. Bunları öğrenmek for döngüsünden düşünmeyi bırakmam gerektiğini fark ettirmedi ama en azından pratik karşılıkları vardı. "For döngüsü yerine map kullanmak" diye ezberledim, ama neden sorusunu atlıyordum. Fonksiyonel programlama öğrenme süreci benim için uzun sürdü çünkü kaynaklardaki örnekler çoğunlukla matematiksel ve soyuttu. Gerçek dünya problemi üzerinden anlatılmıyordu. Bir gün bir iş arkadaşım veri işleme kodumu refactor ederken adım adım anlattı. "Bakıyorsun, her adım bir öncekinin çıktısını alıyor, yan etki yok" dedi. O gün bir şeyler yerine oturdu. Benim için anahtar an şu oldu: fonksiyonel programlamayı bir paradigma olarak değil, veriyi dönüştürme süreci olarak düşünmeye başladığımda her şey netleşti. Verinin bir uçtan girip dönüşerek öbür uçtan çıktığını görselleştirdim ve o kapı açıldı.