I have been helping a good friend of mine to hire Clojure developers for the last couple of months. While doing so, I also started learning a thing or two about FP and Clojure.
Thought of sharing my experience in getting started with FP and Clojure.
One of the questions that comes frequently while I speak to my friends is that Why functional programming? Though many people have tried answering this in various shapes and forms, I couldn’t find an answer which has 10 bullets explaining why functional programming and why it is different?
The first place you may want to start with is Uncle Bob’s NDC 2014 session on Functional Programming; What? Why? When?
Couple of posts/videos that I thought worth reading
How do I get started?
If you are like me who is lazy to setup anything in your local machine, use https://repl.it/ .My son and myself, we both are using repl to learn programming these days 🙂
- I have started adding the videos I like on this topic in my playlist. You may want to go through my playlist.
- Functional Programming Learning Path
- I liked the following books
- Programming Clojure
- Clojure Applied
- The Joy of Clojure
- Clojure in Action
- Clojure for the Brave and True
- Clojure Reactive Programming
- ClojureTV – Playlist for Clojure Videos
Disclaimer: I have read only a few chapters in all these books. Just too many things to cover these days 😦
So far, it’s not very easy for me. It’s definitely new and it’s a lot of unlearning. I am taking my time to get used to this style of programming. May be I should be able to write few lines of my code on my own without any help soon.
I saw someone talking about this here. https://medium.com/@cscalfani/so-you-want-to-be-a-functional-programmer-part-1-1f15e387e536
If there are so many good things about Functional Programming and the salary is literally 2 or 3 times of a Java developer why do we not see enough Functional programming developers in India/elsewhere?
Let me use the analogy of agile and scrum in this context. Scrum is not new and we all at least pretend to know what agile is. However if you want to communicate to someone, you still prepare an Milestone chart and conveniently call this milestone chart as Release Plans.
Why does this happen? Is this a capability issue. IMO, it’s more of a mindset issue. Your Management/Leadership/VP of XYZ/Sales team wants it in a Milestone format, because that’s what they understand.
I believe you could relate the same here as well. If you try to do everything stateless, your tech lead/architect may start saying that either you don’t know programming or your program uses lot of memory than the other developer. Sorry state… But unless the senior members understand FP, I believe the adoption will be very slow and this might be the universal syndrome. For the senior members to move, its lot of unlearning. Like Waterfall is in our blood, Imperative programming style is also in our blood
Couple of years back, i was involved in developing a data platform and we used Scala as our language for data processing. It took us a while to get there, we made significant progress over the time. The moment, i moved out of the product, they moved to python stating resource unavailability. At the end its a mindset 🙂
In this process, I have met few guys who have been developing FP style applications for some time and are training others. Happy to see a small community!