I went through HtDP awhile back. Mind-blowing, changed the way I approached programming, yada yada. Scheme held a special place in my heart for years after.<p>Back then I would have loved to have found a job where I could have used it. I settled for Ruby. After a year of using Ruby seriously, I started to wonder again about using Scheme, so I took a look at some of the available options.<p>Naturally, like everyone else in this situation, I ran into the brick wall of just not having the community support Ruby has, so it's very difficult to justify using it on any project except purely personal projects, and even then, it's more about exploring a domain rather than exploring a programming paradigm, so I never did get to do anything serious in Lisp. Clojure's nice and all, but the JVM is turning into quite the bit of baggage, hard to justify using it over Ruby.<p>That's when I took another look at Ruby and realized it did pretty much everything I needed, meta-programming-wise, why bother with continuations and macros when you can use composition and module mixins to achieve practically the same thing? (environment tracking and easy DSL creation) Sure it's not as mathematically pretty as Lisp is, but Ruby syntax is still much prettier than Lisp's.<p>After awhile I realized that the HtDP way of solving problems and the OO/SOLID way work equally well. You'd just use one with a language like Ruby and the other with a more functional paradigm like Lisp. OO is plenty flexible if you avoid listening to the zealots.<p>One focuses on the functions/data and the other focuses on the classes/objects. Screw that, I say focus on the domain. Make that logic as tight as you can, then introduce interfaces to it. With that model, Ruby works Just Fine.