Emacs isn't for everyone

Chas Emerick recently posted the results of his State of Clojure survey. It turns out that the (self-selected) group of Clojure-using respondents happen to prefer Emacs as their IDE of choice, eclipsing all other editors by a large margin.

Chas then has this to say:

I continue to maintain that broad acceptance and usage of Clojure will require that there be top-notch development environments for it that mere mortals can use and not be intimidated by...and IMO, while emacs is hugely capable, I think it falls down badly on a number of counts related to usability, community/ecosystem, and interoperability.

As an avid, die-hard Vim and Emacs user for life, I'm going to agree.

Mere mortals?

Emacs isn't difficult to learn. Not in the sense of requiring skill or cleverness. It is however extremely painful to learn. I think there's a difference.

The key word is tedium. Learning Emacs is a long process of rote memorization and repetition of commands until they become muscle memory. If you're smart enough to write programs, you can learn Emacs. You just have to keep dumping time into the task until you become comfortable.

Until you're comfortable, you face the unpleasant task of un-learning all of your habits and forming new ones. And you're trying to do this at the same time you're undertaking another, even harder task: writing programs. And if you're a new Clojurist, and you're learning Emacs and Clojure from scratch at the same time, well, get the headache medication ready.

As a programmer and someone who sits in front of a computer 12+ hours a day, I consider myself pretty flexible and capable of picking up a new user interface. As someone who had been using Vim for years prior to trying Emacs, I considered myself more than capable of learning even a strange and foreign interface. I'd done it once before.

But learning Emacs still hurt. Oh how it hurt. I blogged while I was learning it, and you can see my pain firsthand. I sometimes hear people say "I tried Emacs for a whole month and I still couldn't get it". Well, it took me over a year to be able to sit down at Emacs and use it fluidly for long periods of time without tripping over the editor.

To be fair, I'm talking here about using Emacs as a programming environment. Using Emacs as a Notepad replacement could be learned in short order. C-x C-f, C-x C-s, or use the menus, there you go. Using it comfortably as a full-fledged IDE is significantly harder and requires you to touch (and master) many more features. Syntax highlighting, tab-completion, directory traversal and cwd issues, enabling line numbers, version-control integration, build tool integration, Emacs' funky regex syntax for search/replace, Emacs' bizarre kill rings and undo rings, the list goes on. These things are very flexible in Emacs, which is a great thing, but it's also an impediment to learning how to configure and use them. There's no getting around the time investment.

And it's not just a matter of learning some new keyboard shortcuts. There's a new vocabulary to learn. You don't open files, you visit them. What's a buffer? What's a window? (Not what you think it is.) What's a point? What's a mark? Kill? Yank? "Apropos"? Huh? C-c M-o means what exactly? My keyboard doesn't have a Meta key. Yeah, you can use CUA mode and get your modernized Copy/Cut/Paste shortcuts back, but that's the tip of the iceberg. It's hard even to know where to begin looking for help.

Yeah, Emacs came first, before our more common and more modern conventions were established, and that explains why it's so different. That doesn't change the fact that Emacs today is a strange beast.

Community and ecosystem

Personally I find the Emacs community to be a pretty nice bunch. In the highest tradition of hackerdom and open source software, Emacs users seem to be eager and willing to share their elisp snippets and bend over backwards to help other people learn the editor. I got lots of help when I was struggling and learning Emacs.

The Emacs wiki is an awesome resource. The official documentation is so complete (and so long) that it leaves me speechless sometimes. And there are a million 3rd-party scripts for it. Whatever you want Emacs to do is generally a short google away.

If there's anything wrong with the Emacs community, it'd be people who take Emacs evangelism overboard. The answer to "I don't want to have to use Emacs to use your language" can't be "Be quiet and learn more Emacs", or "If you're too dumb to learn Emacs, go away". In some communities there is certainly some of that. But thankfully I don't see it much in the Clojure community. Let's hope it stays that way.

Interoperability

Once someone spends the time to write a suitable amount of elisp, Emacs can interoperate with anything. I think so many people use SLIME for Clojure development precisely because it interoperates so darned well with Lisps. SLIME is amazing. You probably can't beat Paredit either, and Emacs' flexibility is precisely what makes things like Paredit possible.

The problem is the amount of time you have to spend to get that interoperability set up and to learn how to use it. After two years of using Emacs and Clojure together, every once in a while I still find myself bashing my face on my desk trying to get the latest SLIME or swank to work just right, or trying to get a broken key binding fixed, or tweaking some other aspect of Emacs that's driving me crazy. One day, curly braces stopped being recognized as matched pairs by Paredit. Why? No idea; I fixed it, but it was a half hour of wasted time.

Emacs is good at integrating with Git too. So good that there are four or five different Emacs-Git libraries, each with a different interface and feature set. I gave up eventually and went back to using the command line. (You can embed a shell / command line right in Emacs. There are three or four different libraries to do that too.)

The wealth of options of ways to do things in Emacs is simultaneously a good thing, overwhelming and confusing. If all you want is something that works and gets out of your way, too many options can be worse than one option, even if that one option isn't entirely ideal.

Emacs' Java interop, I know nothing about. Almost certainly, Emacs can come close to a modern Java IDE for fancy features like tab-completion and document lookups and project management. But how long is it going to take you to figure out that tab-completion is called hippie-expand in Emacs? That and a million other surprises await you.

What's my point?

There was a pithy quote floating around on Twitter a while back (I think quoting Rich Hickey):

One possible way to deal with being unfamiliar with something is to become familiar with it.

That's true, and you could say that of Emacs. I strongly believe that when it comes to computers, there's no such thing as "intuitive". There's stuff you've already spent a lot of time getting used to, and there's stuff you haven't.

But certain things require more of a time investment than others. Could I learn Clojure if all the keywords were in Russian or Chinese instead of my native English? Sure, but it'd take me a long time. I'd certainly have to have a good reason to attempt it.

I learned Emacs partly because it was hard. I saw it as a challenge. It was fun, yet painful, but more pain, more glory. Mastering it makes me feel like I've accomplished something. I'd encourage other people to learn Emacs and Vim too. I think the benefits of knowing them outweigh the cost and time investment of learning them.

But I didn't learn Emacs with the goal of being productive. I learned it for the same reason some people build cars in their garages, while most people just buy one and drive it to and from work every day. I learned Emacs because I love programming and I love playing with toys, and Vim or Emacs are as nice a toy as I could ask for. (I love programming enough to form strong opinions and write huge blog posts about text editors.) For me, productivity was a beneficial side-effect.

There are only so many hours in a day. There are a lot of other challenges to conquer, some of which offer more tangible benefits than Emacs mastery would get you. Mastering an arcane text editor isn't necessarily going to be on the top of the list of everyone's goals in life, especially when there are other editors that are easier to use and give you a significant subset of what Emacs would give you. We have to pick our battles.

So I understand when people say they don't want to learn Emacs. I think maybe so many Clojurists use Emacs right now because we're still in the early adopter stage. If you're using Clojure today, you're probably pretty enthusiastic about programming. You're likely invested enough to be willing to burn the required time to learn Emacs.

If Clojure becomes "big", there are going to be a lot of casual users. A casual user of Clojure isn't going to learn Emacs. They're going to silently move on to another language. And I really think that new blood is vital to the strength of a community and necessary for the continued healthy existence of a programming language.

So Clojure does need alternatives. I'll stick with Emacs myself, but there should be practical alternatives. I'd encourage the Clojure community to continue to support and enjoy Emacs, but don't push it too hard.

June 08, 2010 @ 4:26 AM PDT
Cateogory: Programming
Tags: Emacs, Clojure

48 Comments

Alex Miller
Quoth Alex Miller on June 08, 2010 @ 5:11 AM PDT

You hit the nail on the head for me with this: "Until you're comfortable, you face the unpleasant task of un-learning all of your habits and forming new ones. And you're trying to do this at the same time you're undertaking another, even harder task: writing programs."

Learning both Clojure and Emacs at the same time was just too big a cognitive load for me. I wanted to focus on Clojure so I just used a text editor I knew well and command-line REPL for a while, then switched to Netbeans/Enclojure when I needed tighter integration. I still have a vague interest in learning emacs, but a much stronger interest in getting work done.

Chas Emerick
Quoth Chas Emerick on June 08, 2010 @ 5:56 AM PDT

Thanks for your perspective, Brian. I think it's spot on, and captures my sentiments exactly -- except for the zeal you clearly have for tackling emacs et al. for the sheer joy of it. :-)

I did a couple of emacs stints myself -- one for a couple weeks, one for just a little over two months. Those were the most frustrating, least productive two months of my professional life, as you can imagine. I don't think I'll ever be able to drag myself back for a third attempt.

Really, what I'd like is to have the editing and customization capabilities dropped into something like Eclipse. I discuss this, and variety of other Clojure development environment issues, in a wiki page if people are interested:

The Ideal Clojure Development Environment

Finally, I just started (yet another!) survey, hoping to motivate some aspiring Clojure tooling company to make all our dreams come true. :-)

Petition / Market Research: For the development of a commercially-supported, polished Clojure development environment

Tchalvak
Quoth Tchalvak on June 08, 2010 @ 6:13 AM PDT

Yeah, emacs wasn't high on the list -before- learning clojure. If I get to the point of using clojure frequently, -then- I might test the waters, but I'm not interested in learning a programming language (emacs) before I can learning the programming language (clojure) that I'm really after. :p

/b
Quoth /b on June 08, 2010 @ 6:49 AM PDT

I am continually confused when people write things like this. I found Emacs no more confusing to learn than any other IDE, with the exception that solutions for problems in Emacs are usually googleable.

It helps that there's nothing that forces you to actually learn emacs to use emacs; like you say, using it as a notepad replacement requires basically zero adaptation (kill and yank vs. cut and paste may be the exception). You can learn advanced features as you grow more comfortable with it, which is exactly the same as with big commercial IDEs. These advanced features are different in every single one of the big IDEs, so they're all on equal footing in terms of this as far as I can tell.

I think they problems that you've had with emacs and swank-clojure (and paredit) breaking can be chalked up to the fact that they're fairly new, rapidly evolving systems, you're using the latest-greatest versions, and they're not made by commercial developers whose work you only see when it reaches a certain level of polish. I've had similar problems when trying to grapple with the Clojure plugins for Eclipse and NetBeans.

If there's one complaint I have about emacs it's a lack of sensible defaults. The enter key mapped to newline instead of newline-and-indent comes to mind.

brad c
Quoth brad c on June 08, 2010 @ 7:03 AM PDT

first of all, i don't think anyone will fault you for finding the tool that suits your needs and your patterns. thats the point of open source - to provide choice. that said, the power of emacs is in its deep feature set. at some point, users of other editors hit a wall...a feature they can't seem to live without. chances are, its available for emacs.

learning emacs can take a while, but once you know it, you know it for life. emacs is in heavy development and isn't going away in your lifetime. it also will likely be more powerful than other editors for your lifetime.

Brian
Quoth Brian on June 08, 2010 @ 7:03 AM PDT

@/b: newline-and-indent is a great example. Tab completion also isn't there by default. Emacs doesn't even have line numbers by default, which I find absolutely essential, and you have to download a 3rd-party script to add them.

Sane defaults are pretty important when it's so hard to figure out how to change the defaults. There's M-x customize but that isn't the most straightforward thing to use or navigate either. A new user isn't going to start hacking their .emacs right off the bat, or else you've added the problem of learning elisp on top of all the other problems.

In other IDEs, things work by default. Everything is in a menu or a toolbar full of buttons. Too many things need to be activated or customized in Emacs before they're useful.

I don't doubt that you learned Emacs easily, but I had a hard time, and a lot of other people seem to have a hard time as well.

Mike
Quoth Mike on June 08, 2010 @ 7:05 AM PDT

I believe your article can be summarized in the learning curve illustration shown here:

http://www.emacswiki.org/emacs/EnjoyWrestlingWithEmacs

leifbk
Quoth leifbk on June 08, 2010 @ 7:15 AM PDT

As a guy who writes maybe 100 loc per month on average, I've long since come to terms with that learning emacs is massive overkill. It's like learning Russian for an occasional weekend trip to St. Petersburg.

I'm very comfortable with the KDE editor kWrite, which felt «just like home» when I migrated from Windows and EditPlus back in 2003. It may not be a great productivity tool, but it does the job remarkably well. And it's totally out of the way. I don't have to memorize a ton of cryptic commands to use it, and can concentrate on the task at hand: writing a few lines of code.

Selecting the right tool for the job is a basic mark of craftsmanship. You don't rent a giant excavator engine to dig up a garden patch; you just get your spade out of the shed.

Phoenix
Quoth Phoenix on June 08, 2010 @ 7:24 AM PDT

I think you should be able to note easily from the Emacs community that learning emacs improves certain traits tremendously.

Parnell Springmeyer
Quoth Parnell Springmeyer on June 08, 2010 @ 7:27 AM PDT

It's been a year and a half since I officially switched over to using Emacs fulltime. What got me to learn Emacs was Erlang. I had proceded to dump Eclipse and begin using Emacs fulltime at work; I was unproductive for about two weeks until the laminated cheat sheet posted next to my desk started to become memorized.

Now, my Emacs environment is heavily customized, I can write ELISP without (much) trouble, and I use Emacs for (almost) everything: ERC for IRC, org-mode for all my non-programming writing and agenda tracking, all of my programming (Python, PHP, Erlang, CL, etc...), Gnus for Email (I have a fetchmail script that spools off of my gmail account), and many other minor tasks.

OS X and Emacs are my two operating systems.

brad c
Quoth brad c on June 08, 2010 @ 7:27 AM PDT

Brian: emacs have the current line displayed by default, and linum-mode, which displays line numbers on the left. linum-mode ships with emacs.

i would fault your comparison of emacs to graphical IDEs. every time you have to take your hands off of the keyboard and use the mouse, you have to make a context switch. most emacs users wish to avoid this at all costs, which is why many hide the menu and just memorize the key sequences. the day emacs requires a mouse is the day i (and many others) will stop using it.

as for tab completion...this i don't understand. tab completion of what? emacs is not a tool dedicated to editing one format of text. that is why modes exist. there are tab-completions for various text formats, but yes, you have to install the right mode.

by the way, i don't think anyone learns emacs easily. its a huge software ecosystem in its own right. don't be discouraged because you see others around you who appear to have some swagger they derive from their depth of technical experience

Brian
Quoth Brian on June 08, 2010 @ 7:55 AM PDT

brad c: Hmm, yeah I guess linum-mode does ship with Emacs now. It either didn't when I was learning Emacs, or I used something other than linum-mode for my line numbers, because I remember having to download it. Or I could be completely mistaken. There are clearly bits of my .emacs that I haven't touched in a long time.

In most editors you don't have to install or enable modes, I think that's what I'm saying. I don't do anything to enable Java tab-completion in Eclipse. I don't do anything to enable C# tab-completion in VS. I understand why Emacs has modes and the advantages they afford (letting Emacs handle arbitrary numbers and types of file formats), but it's another source of complexity and another stumbling block for new users. Even Vim beats Emacs in this regard. It ships with syntax files for almost everything and has lots of magic to enable them for a lot of filetypes automatically.

I understand the benefit of mouse-only usage, it's how I like to operate too. But for a new user, which is faster, taking 5 seconds to use a menu, or taking 15 minutes to search Emacs docs for a function name they have no way of guessing?

The mouse is slow and boring, but predictable and familiar to most people. Click and drag to highlight text, vs. fumbling around with point and mark. I've tried to teach people at work how Visual Line mode works in Vim, and they are always quite confused.

Brian
Quoth Brian on June 08, 2010 @ 9:47 AM PDT

Lisp isn't for everyone, either. Not even Clojure.

It's very unlikely that the world that embraces Visual Basic and Java as the two dominant programming paradigms will ever see a really popular Lisp. Ideas from Lisp will continue to filter down into the more advanced and productive cutting edge languages like Python. Eventually some of those ideas will be found acceptable for mainstream programmers in the next Java or whatever.

In any case, ambitious programmers working on deeper problems will always have a different relationship with their tools. Those are the people who will be writing optimized SIMD assembly cores for analytic code or building rules based predictive experiments in Lisp or squeezing performance out of multi-core systems in Clojure. They will mostly learn EMACS because it is the best tool in the world for writing code and, while those with incipient carpal tunnel might stick with vi, few of them will be satisfied with Eclipse and the like.

Right now folks with that kind of imagination are the base of Lisp and Clojure users. As Clojure use expands, lesser tools with lower learning curves will show up. But I don't ever expect to see the level of beginner tooling that Java can conjure up; Clojure just doesn't justify it the way that audience does.

Of course, the prototypical exception to my concept here is Smalltalk. That was a minority language with really smart people working on it that had great tooling with beginner-focused tools. But Smalltalk was a pure commercial enterprise from the start that cost thousands and thousands of dollars to get started with. Modern languages don't often succeed with that paradigm.

Jeff Heon
Quoth Jeff Heon on June 08, 2010 @ 11:08 AM PDT

Thanks for taking away the guilt of using Clojure and not learning Emacs 8)

Raynes
Quoth Raynes on June 08, 2010 @ 1:33 PM PDT

I totally agree. Nice post.

/me hopes you don't have a spam catcher that will grab this. :\

Josh Anderson
Quoth Josh Anderson on June 08, 2010 @ 1:55 PM PDT

Well said. Time spent learning emacs is time not spent learning Clojure or Common Lisp.

When you have new syntax, new programming techniques, and a slew of other new stuff to learn (How do I format strings? What do I use instead of read/write/select? Why is this macro blowing up?), having to learn to use a new editor feels like a waste of time.

Anonymous Cow
Quoth Anonymous Cow on June 08, 2010 @ 2:00 PM PDT

@/b: newline-and-indent is a great example. Tab completion also isn't there by default. Emacs doesn't even have line numbers by default, which I find absolutely essential, and you have to download a 3rd-party script to add them.

Now I have no idea what you're talking about. I'm almost 100% certain that completion and line numbers have been there by default in every version of emacs I've used, which is on Solaris, Linux, Windows and OSX going back 10 years now. The caveat being that completion isn't mapped to tab (nor is it in any other IDE I've used).

I will readily agree that setting up semantic-based (rather than dabbrev-based) completion for c/c++/java in emacs is incredibly difficult and I wish it wasn't. But in Slime it just works.

brad c
Quoth brad c on June 08, 2010 @ 2:16 PM PDT

Well said. Time spent learning emacs is time not spent learning Clojure or Common Lisp. =

modifying emacs to make it suit your needs is almost certainly the only legitimately productive lisp coding you will do during your lifetime. i'm certain you'll learn more lisp using emacs than not

emacs will evaluate elisp for you on the fly...the emacs shell can act as an elisp repl! its probably the only popular piece of software that encourages you to use lisp!

elisp isn't precisely common lisp, but its very close. i would think if you wanted to immerse yourself in lisp and use it daily, emacs would be your only choice

Anonymous Cow
Quoth Anonymous Cow on June 08, 2010 @ 2:30 PM PDT

Emacs is a Lisp. Clojure is a Lisp. Can the two be put together to form the ultimate dev environment? "Clomacs" perhaps?

Sankara Rameswaran
Quoth Sankara Rameswaran on June 08, 2010 @ 3:08 PM PDT

Very nicely put. Emacs was my primary editor at college. But after using Eclipse and Intellij IDEA, I didn't want to go back to emacs. I'm using Clojure mostly on hobby projects. I did get SLIME setup. It was really cool. But the cost of switching between my primary IDE and emacs was huge. Decided to stay with IDEA and La Clojure. IMHO, there isn't enough ROI to convince me to use emacs on a regular basis (at least as of now). When Clojure becomes my primary language I'm sure I'll give emacs a try again.

John
Quoth John on June 08, 2010 @ 3:19 PM PDT

newline-and-indent is a great example. Tab completion also isn't there by default.

Another thing I find difficult to believe is not there by default is window scrolling.

Incidentally, I use this for scrolling:

(global-set-key "\M-n" '"\C-u1\C-v")
(global-set-key "\M-p" '"\C-u1\M-v")
Minh
Quoth Minh on June 08, 2010 @ 3:37 PM PDT

As someone who had been using Vim for years prior to trying Emacs, I considered myself more than capable of learning even a strange and foreign interface. I'd done it once before.

But learning Emacs still hurt. Oh how it hurt. I blogged while I was learning it, and you can see my pain firsthand.

I just thought it would be fair to point out that using vim for years prior (or any other editor for that matter) may actually make it harder to learn emacs.

That is because after a while we establish expectations and habits for doing stuff. When confronted with doing similar things in a different way, we would most likely prefer the path of least resistance or if not possible, feel more anxiety than if those expectations weren't there.

That said, I agree that there are huge costs to become an expert or proficient with emacs. However, I think the amount of experience you need before you become productive is way before that point (if you're fine with the GUI menus).

emacs aside, I'm +1 accessibility for anything, clojure included.

Glen Stampoultzis
Quoth Glen Stampoultzis on June 08, 2010 @ 5:00 PM PDT

Great post. You clearly hit a nerve judging by the number of responses. I started learning emacs and clojure together after finding La Clojure a bit underbaked. Man it has been hard but it is slowly getting easier. In may ways emacs is great. Elisp works surprisingly well as a scripting system even if you know only a sprinkling of it. I love that I can google a problem and there is a good chance someone has already written some custom code to solve it. I hate that so much of the default behaviour needs to be customized in this way. I learned a lot by just trying to get it to do things they way I wanted them done.

I sometimes day dream about them releasing a new version where they modernize the concepts, defaults, keybindings and interface. You never know. It could happen. No? Maybe not.

Justin George
Quoth Justin George on June 08, 2010 @ 6:37 PM PDT

So an interesting thing that changed me to emacs forever:

Emacs (or vi, if you prefer), will still be around in 20 years. As a reasonably young programmer, this means that time spent learning emacs is an investment.

Time spent learning (latest IDE here) is not. It is something that will be trashed in six or eight years, inevitably. Perhaps Eclipse is an exception to this rule, but I'm not sure.

The bottom line is, no matter how long it takes to become an expert (I suspect a decade, or more), every minute I spend learning and customizing emacs is paid off in the future. Nothing else compares to this.

Michal
Quoth Michal on June 08, 2010 @ 6:47 PM PDT

Come on, the tool should adjust to me, not the other way round. The tail shouldn't wag the dog. As a software engineer I certainly don't feel like the speed of my typing or how fast the tool does things were my bottlenecks.

AverageJoeUser
Quoth AverageJoeUser on June 08, 2010 @ 8:28 PM PDT

That's true, and you could say that of Emacs. I strongly believe that when it comes to computers, there's no such thing as "intuitive". There's stuff you've already spent a lot of time getting used to, and there's stuff you haven't.

Go to a usability conference make a session about how "intuitive" does not exist. That would be fun :)

Great article btw but you are fighting an uphill battle by pitching emacs on the grounds that intuitive does not exist. I have seen other impossible pitches for emacs along the line that serious incremental compiling and all the benefits built on it such as refactoring is only for people who write broken code and needs help fixing it.

Dont get me wrong I certainly admire people how can survive in the woods with a piece of flint. And not to downplay the cabability of emacs I would say that its definately a very powerful tool compared to nano.

There is one important advice however you forget to mention for those users who have mastered emacs at "muscle memory" level - DON'T use another tool for just a few months, stay loyal to emacs forever or you will have to start your training all over again (I know from painfull personal experience).

Elena
Quoth Elena on June 08, 2010 @ 9:53 PM PDT

You nailed it down: learning Emacs is not a difficult task, it's painful one.

Aidan McQuay
Quoth Aidan McQuay on June 08, 2010 @ 10:17 PM PDT

Great article, learning emacs is super hard, I tried to get into emacs quite a few times over the years and always dropped it due to lack of usability. I'm a total convert now, but was only able to fully adopt it by just saying screw it I'm not going to learn emacs, I'm just going to bend emacs to my will.

The great thing about emacs for me is it can be whatever you want it to be. I think for a beginner emacsen ergomacs is a good place to start, much better than the default, just the fact that all the modes are on the file menu makes it much easier to grasp.

hangfire
Quoth hangfire on June 08, 2010 @ 11:31 PM PDT

Unfortunately, the use of emacs significantly increases the incidence of developing RSI. I certainly had a paper on it, but cannot find it. From memory, emacs increases incidence by 36%(!), while vim increases it by 11%. (A note is that emacs/vim users are much more likely to spend more time daily at a computer). As a vim user, who started developing RSI two years ago, the thought of switching to emacs, and increasing my chances for further damage terrifies me.

Maybe you're lucky, and haven't been affected by computer use, but it's well worth thinking about.

Lee Crabtree
Quoth Lee Crabtree on June 09, 2010 @ 1:14 AM PDT

Emacs is one of those things for which I'll never forgive RMS. I know people love it, and they get tons done with it. More power to them. It's never worked for me. It never clicked. I'm at the point that I can successfully (if that's the right word) use it for Python stuff, and even that manages to trip me up at least once a week.

People say that emacs can do anything that needs to be done in the process of writing code. I'm willing to concede that point. But I have to say that the ability to do anything means that it's unbelievably difficult to do any one thing easily.

Meaningful defaults and some attempt to organize key commands into a sane and potentially predictable structure would go so far. Yes, emacs was here first, and that's to its credit. But to claim that emacs is the most adaptable editor around while simultaneously refusing to adapt its defaults to widely recognized and more believable settings smacks of a level of arrogance that really chafes me.

Deep breaths...

John David Eriksen
Quoth John David Eriksen on June 09, 2010 @ 3:45 AM PDT

I learned Common Lisp and Emacs on my own, and found the experience of learning Common Lisp and Emacs both challenging and enlightening. I grew to tolerate Emacs because of the excellent (and well-supported) SLIME. On any Debian-based Linux system, I can set up a complete CL development system using the stable packages provided by the package maintainers.

Same goes for Erlang and Emacs' Erlang mode. And Prolog and Emacs' Prolog mode. These long-established languages have mature and robust Emacs support.

I've been learning Clojure and have really enjoyed data structure immutability, learning the joys of laziness, and enjoying the many small tweaks that have been made to this Lisp to make it concise, modern, and elegant.

However, the current state of the Emacs tools ecosystem for Clojure is not very favorable. I can't just apt-get install foo all the packages I need to get a Clojure system set up. There are lots of tutorials and references out there that conflict with each other. The frustration that the original author feels would likely be reduced if Emacs Clojure tools themselves were more stable and easy to install.

This does not, however, reflect poorly on the developers and maintainers of these tools. Clojure is young and Clojure does not have a huge user base. Articles like these show that there is a very strong desire for improved tools, and it is only a matter of time before this demand is met and a stable tool set emerges.

Mark Saleski
Quoth Mark Saleski on June 09, 2010 @ 5:08 AM PDT

interesting. i too am confused at this idea of emacs being 'difficult'. sure, it's powerful, but the neophyte can pretty much ignore all of the complicated stuff.

but...i say this as somebody who uses none of the features found in ide's...i don't use method completion & the like. i've been writing software since 1984 and have used emacs for nearly all of those years.

it seems to me that the divide comes with the preference between keyboard vs. mouse-based editing...which is why i don't like ide's. i don't want to take my hands off of the keyboard. i don't want to use a menu. i don't want to type a "dot" and have a context menu show me choices: i just want to type, unobstructed.

yeah, it's an old-school approach, but it works for me. that said, i'm not sure that learning emacs would be a useful experience for somebody who is used to all of these "modern conveniences".

brad c
Quoth brad c on June 09, 2010 @ 5:11 AM PDT

But to claim that emacs is the most adaptable editor around while simultaneously refusing to adapt its defaults to widely recognized and more believable settings smacks of a level of arrogance that really chafes me.

but if emacs suddenly adapted to your so-called set of defaults, you still wouldn't use it, and now it would also be useless for people who have been using emacs on its own terms for years

and frankly, i keep hearing people in this thread talk about "defaults" but no one can provide a meaningful example the only thing offered so far is "default tab indenting"...but once again, default tab indenting for what? emacs wasn't designed to edit one kind of file. neither was vi(m) for that matter. as far as i know, most other competent text editors (textmate, coda, etc) are also "modeful" in that they do the right thing for files formatted in a certain way only in the context of an editing mode

otakucode
Quoth otakucode on June 09, 2010 @ 5:25 AM PDT

I'm all for trying a wide variety of things. And I don't even mind a steep learning curve.

But when it becomes clear to me that people working on a project are making up new words for common things simply because they don't want to be using the same words some other group (usually Microsoft) uses? Fuck them. They can waste someone elses brain cycles. This is why I don't use Java, and why I'll never waste my time on emacs. I'm not going to dedicate a portion of my brain to learning a new vocabulary that was created because some assholes were too childish to use the right words for things.

Anonymous Cow
Quoth Anonymous Cow on June 09, 2010 @ 5:32 AM PDT

I'm not going to dedicate a portion of my brain to learning a new >vocabulary that was created because some assholes were too childish to >use the right words for things.

what words are used in emacs that aren't the right ones?

Mark Saleski
Quoth Mark Saleski on June 09, 2010 @ 5:33 AM PDT

woops! sorry for the anonymouse cow post.

/b
Quoth /b on June 09, 2010 @ 6:32 AM PDT

@John David Eriksen

However, the current state of the Emacs tools ecosystem for Clojure is not very favorable. I can't just apt-get install foo all the packages I need to get a Clojure system set up.

Which is exactly what I was talking about when I commented about problems stemming from using bleeding-edge software that hasn't gone through the commercial-polish cycle, rather than problems stemming from emacs. When code gets stable, the Debian project does a very nice job of packaging it up, and the way they've packaged up Emacs and Slime and friends for common lisp is very nice indeed. For those who haven't had the pleasure, you just install the slime package (apt-get install slime), and then M-x slime just works. It installs a lisp for you if you don't have one (when I did it it picked SBCL by default), and whatever else you might need. No touching your .emacs or anything.

@Brad C

and frankly, i keep hearing people in this thread talk about "defaults" but no one can provide a meaningful example the only thing offered so far is "default tab indenting"...but once again, default tab indenting for what?

The problem that I was talking about has nothing to do with not knowing how to indent. The problem is that, by default, emacs doesn't auto-indent (most) code even if it knows how. I think the default behavior should be for return to do what C-j does. I also know that making such a change would raise all sorts of horrifying issues.

Eric
Quoth Eric on June 09, 2010 @ 6:58 AM PDT

Re: comments about carpal tunnel: got it around 1988 after about two years of emacs, mostly on Symbolics machines. Those keyboards were a lot stiffer than modern keyboards but I adapted. Had it only once a bit later but not due to emacs.

Otherwise I mostly agree with Mark. A lot of people have been brought up on visible features, icons and menus. Emacs in pure form gives you nothing but your code, well, and the little status line below it.

Rxantos
Quoth Rxantos on June 10, 2010 @ 12:18 AM PDT

Why not simply make a fork of emacs with defaults paired more with what's used with other editors? Like the cream editor that came as a fork of the vim editor.

That way, new users don't need to face a ridiculous learning curve just to try out and find if emacs is for them.

A tool should adapt to it's users. If the user needs to adapt to the tool, then the tool has failed.

sockmonk
Quoth sockmonk on June 10, 2010 @ 7:39 AM PDT

Emacs adapts to its users better than any other editor I've seen. And no, you don't have to learn elisp to configure it. I didn't.

For instance, if you want your code to be auto-indented when you press return, just copy and paste this line into your .emacs file:

(local-set-key "\C-m" 'newline-and-indent))

To start out, most basic configuration changes can be made either through customize mode, or by a little googling and copy-paste. And if that sounds 'non-intuitive' or frustrating to you, let me just say that I go crazy when I have to wander through a complicated preference system hunting for the right checkbox or radio button to change something in an IDE. If you wanted to tell me how to change the indent behaviour in one of those IDE's, you'd either have to give me a series of click-path instructions, or worse yet a series of screenshots.

I'll take the one-line copy-and-paste setting and get back to work, thank you very much.

Gok Demir
Quoth Gok Demir on June 10, 2010 @ 7:52 PM PDT

No nonsense default configuration is a must for emacs. Convention over configuration must make sense for emacs developers. Ship something that works out of the box! It's really annoying for that simple functionality such as code completion, indentation you have to spent weeks to make it work right. Let's use our commonsense!

mSphix
Quoth mSphix on June 10, 2010 @ 7:56 PM PDT

The only reason I haven't learn Clojure, is that I haven't been able to make it work with SLIME by fallowing instruction on Clojure page.

Travis Grathwell
Quoth Travis Grathwell on June 12, 2010 @ 12:01 PM PDT

The best part of Emacs is how configurable it is. The worst part of Emacs is how configurable it is.

We have a miles-long .emacs at work. When I open a fresh-installed emacs I have no idea how to do the simplest goddamned thing. It's more like emacs is an "IDE-builder" than an IDE.

Jonathan Hayward
Quoth Jonathan Hayward on June 16, 2010 @ 5:06 AM PDT

I'm a Vim user and have made a couple of stints at learning Emacs.

What killed the last one was understanding the different goals Vim and Emacs are optimized for. Emacs is a very flexible bit of programmer putty that is initially configured as one editor/IDE but can be reshaped pretty much as much as you have time, desire, and energy to reshape it. Even the dig "I used to be an Emacs user, but I lost my keybindings file, and then what was I going to do?" attests that Emacs is intended to allow vast programmer customization.

However, what I also found was that I had been taking for granted a Vim strength that is not mainstream in Emacs: being optimized to cut with a hot knife through butter as far as keystrokes for results. Maybe the logical conclusion of this argument is that I should learn Emacs Viper-mode, but outside of Viper, there is simply not the equivalent of Vim's cursor following the user's eyes over the screen.

The equivalent (keybinding) way to slow basic operations down in Vim would be to declare Vim a modeless editor, start in insert mode, and say that you go left by hitting ESC and then 'i', up by hitting ESC and then 'ka', right by hitting ESC and then 'la', and down by hitting ESC and then ESC and then 'ja'. And this "virtual modeless Vim" would neutralize Vim's biggest advantage.

I assumed, incorrectly, that if I spent a bit of time, the cursor would fly around the screen as fast as Vim. Then I found out why one of the main derogatory expansions for Emacs is Escape-Meta-Alt-Control-Shift. There's room maybe to argue that I should learn Viper and have the best of both worlds. But outside of Viper, I realized I was never going to duplicate in Emacs what I have in Vim.

As is, I have a high level of proficiency in Vim. If I were starting over today, I would use IDE's with standard interfaces.

I am in awe of Emacs as one is in awe of an intricately deep game, but it's more like the admiration I would have of a steampunkish early automobile with wheels in front, treads in back, showcased in a museum, than the kind of car I would want to use to drive around and run errands. The steampunk horseless carriage is far more amazing, but if I'm going to get work done, I'm better served by a relatively new beater.

Jack Marxer
Quoth Jack Marxer on June 29, 2010 @ 7:24 AM PDT

Since you mentioned "open source" in connection with emacs, people might get the wrong idea. The GNU emacs developers don't think of it as "open source" but rather as "free software", free in the sense of freedom. For more information you can go to http://www.gnu.org/philosophy/open-source-misses-the-point.html

R. P. Dillon
Quoth R. P. Dillon on July 06, 2010 @ 9:47 AM PDT

What is being lost in all this noise is that there is a reason that Emacs supports Clojure and a whole slew of other languages. The original post pleads for non-Emacs environments for Clojure to improve Clojure's popularity. But the reason Emacs (and often, Vim) get modes before all the other editors is that they are designed to be able to handle new languages, precisely because they are text editors. It is much more involved to write an integrated development environment for a language than it is to write a simple mode for editing a language's files.

So, when languages are new, they tend to ship with a mode for Emacs, but only very rarely for Eclipse, Netbeans, or IntelliJ. There is a reason for that, and it isn't that every language dev uses Emacs. There very thing people don't like about Emacs is the very thing that makes it a desirable first target for new language support.

All the talk about usability is a red herring. First, usability does not equal low learning curve. It is a mistake to conflate the two. Second, the argument that the tool should adapt to the user, and not the other way around is patently false. Every tool since the dawn of time has required some level of training, usually the amount required being in direct proportion to the power of the tool. Can you imagine a usability study on a violin, piano, fighter jet, passenger train, warship, or, dare I say it, Java, Clojure, Common Lisp or .NET?

Somewhere along the way, an expectation has arisen that learning should be instantaneous for some things (text editors, apparently) while other, often less complex things (like cars) take years to develop proficiency with (and that's just driving...repair is a separate issue altogether!) Do you expect to learn object oriented programming in one year? Even learning just the Java API takes years of investment, but you do it because it pays off because that knowledge is reusable across many languages and applications (and operating systems!). The same is true of Emacs.

My argument: Emacs isn't right for everyone. That said, because it is so amenable to customization, it is quite worth the years of investment to learn it, because it will be the editor that will support more languages than any IDE will (that I've heard of, anyway). When you download Ruby or Clojure or Scala or Groovy, they ship with modes for Emacs. The same cannot be said for Eclipse, and that probably won't change anytime soon.

Disclosure: All my Java programming is done in Eclipse and/or Netbeans with Emacs key bindings/plugins. I do everything else in Emacs.

xah lee
Quoth xah lee on April 13, 2011 @ 2:35 PM PDT

emacs doesn't have to be that way, but there set of people who insist that emacs's ways are superior.

if you want a easier to use emacs, there's ErgoEmacs and Aquamacs Emacs. (ErgoEmacs comes with clojure mode)

You can help in changing emacs by spreading some modern UI ideas. http://xahlee.org/emacs/emacs_modernization.html

N.N.
Quoth N.N. on April 11, 2012 @ 3:11 AM PDT

I think Emacs can be intuitive in a way. Once you get the hang of the basics you get the feel for how things works. Of course it takes long to learn the basics as they are were different from other environments, as you point out. I started to learn and use Emacs only eight or nine months ago and I now use it for most of my work. Something that might lessen the pain of learning Emacs is to allow it to take time and not be to hard on yourself.

Speak your Mind

You can use Markdown in your comment.
Email/URL are optional. Email is only used for Gravatar.

Preview