bhima21 I've a lot of experience but I would not consider myself an expert by any metric. I transitioned between the different programming paradigms at various points in my career. Each transition had its own pain points and I don't think it's possible to really impart that knowledge, it has to be experienced.
I loved imperative programming and I never foresaw the need to move on. I really struggled to adapt to OOP when I had to transition to C++. The reason for my struggle was that I had a voice in my head screaming "This is a load of shit!" because I was used to writing small tight functions in C and Assembly, while writing C++ was bloated code. I could not get past the mental block I had created for myself for a long time.
Web development appealed to me because it was a blank canvas and allowed me to get away from OOP. The need to write efficient JavaScript to make performance improvements on the front end was like therapy for my soul. I had colleagues who struggled with writing JavaScript code basically because they were caught up in the fact that it didn't use a 'proper' inheritance model and it wasn't strictly typed. Increasingly I was asked to fix their code and it got to the point where it was a lot less stressful if they stayed away from JavaScript. That probably wasn't the best strategy, but they were unwilling to look at JavaScript from a fresh perspective. I found Kyle Simpson's books on JavaScript to be excellent resources and through him I discovered the simplicity of functional programming which led me to [Login to see the link] and Clojure.
At some point I attended a talk given by Sandi Metz and that's when it clicked with me regarding how brain dead I had been when it came to my initial approach to OOP. Sandi succinctly communicated what it was all about and afterwards I read her books.
Peter Norvig : [Login to see the link]