For me a major hill to overcome for learning any Lisp is Emacs. I've used Vim all my life, but I haven't found any way to make it "S-expression aware" the way emacs is. In emacs, I can navigate and manipulate the code based on S-expressions. I can move, cut, and select up, down, left, and right. In DrRacket I also know how to do things like rotate s-expressions and move an s-expression outside.
Since I've always felt that Vim is inferior for Lisp development, I try to use Emacs. Unfortunately, I feel a million times slower in Emacs than Vim simply because I've used vim for years.
I feel like, if I wanted to feel comfortable coding in any Lisp, I would have to code non-stop in an Emacs-like environment for a year, and I haven't had the discipline to do that yet. Does anyone know how to make Vim comparable to Emacs in this regard?
I had the same struggle and originally used viper-mode + vimpulse to ease the transition. Recently I've switched to Evil, which is excellent and requires very little configuration to give you vim-like navigation with all the other good things in emacs: http://www.emacswiki.org/emacs/Evil
It doesn't take anywhere nearly a year to get that comfortable with emacs. I say this as someone who made the switch a couple of years ago - I was tolerably productive in a couple of days and pretty much at home in a week or so.
I made the switch because I wanted to be able to use SLIME, but it turns out that I'm not actually using Lisps that much day-to-day at the moment. I'm equally at home in both Vim and emacs now, it's not like you instantly forget how to ride that particular bike.
I had a co-worker once that used Emacs and would always enable viper mode for me when I came to help him on his computer. Every time I used it, I always managed to break it or expose some way it didn't work! It left me with a bad impression, but I guess I could give it a try again.
I definetely recommend viper mode. You'll have to install vimpulse also to make it really functional, but once you do that you should feel right at home. Just remember that ctrl-z toggles/untoggles it! So if you ever get into a non viper mode state, control+z should bring you back.
Personally I use it for all the modal editing goodness but I also rely on some emacs features as well such as ctrl-x ctrl-f for opening files, etc.
This is the route I went while using Clojure. I also ended up learning more and more about how to customize emacs with elisp.
Vimpulse and viper got me close enough to vim where I could get things done, and learning more and more elisp, as I went along, allowed me to add or change anything that didn't feel right.
This is precisely what I pictured for clojure when reading fogus' post on scala. Coming from a java background with no lisp experience I did not find clojure syntax "difficult". Any difficulty was, as Alex noted, in not doing things the imperative way. If anything, the fact that the language got out of my way allowed me to focus on writing functional programs.
It's also worth noting that learning new ways to solve problems is fun; learning reams of new syntax is not. It's for this reason that I became frustrated when trying to learn scala after working in clojure for a while.
>It's also worth noting that learning new ways to solve problems is fun; learning reams of new syntax is not.
This is very true. Clojure was the first functional language I learned, and it was actually a ton of fun have to figure out basic things (like writing the fibonacci sequence) in a functional style. Also, Clojure introduced me to concepts I hadn't learned about with my bit of Java experience and moderate Python experience, such as lazy sequences, tail call recursion (and way more recursion in general), STM, and macros. Even though I don't write clojure very often (and not as much as I would like to), I'm still glad I took the time to learn the language just because it introduced me to so many new concepts.
Understanding syntax is a very small part of understanding a programming language. It takes a long time after you've grasped the syntax of a language to begin to understand its idioms and best practices. A talented programmer can pick up a new syntax in a few weeks, picking up a new paradigm takes much longer. The primary obstacle in learning both Clojure and Scala, I would say, is understanding the functional programming paradigm. In that sense, they're not so different.
Since I've always felt that Vim is inferior for Lisp development, I try to use Emacs. Unfortunately, I feel a million times slower in Emacs than Vim simply because I've used vim for years.
I feel like, if I wanted to feel comfortable coding in any Lisp, I would have to code non-stop in an Emacs-like environment for a year, and I haven't had the discipline to do that yet. Does anyone know how to make Vim comparable to Emacs in this regard?