Why do all code editors look the same?
medium.com
medium.com
Image editors, of course, have all sorts of tools and buttons, not just the image. But this is just a function of the main modes of interaction: mouse vs keyboard. Unlike an image editor, a text editor is used almost exclusively by a keyboard, so most of the controls are optimally presented as keyboard shortcuts.
Then, the post goes on to argue by analogy: always a risky strategy. Would I put two pieces of paper side-by-side when I'm writing an essay? Probably not. But code is not text; often, I do want to compare two pieces of code next to each other, line-by-line... which is done perfectly by putting them next to each other. And the rest of the paragraph goes on to pretty much describe my Emacs workflow[1] anyhow: I often have one main buffer and a bunch of random resources in another buffer which I periodically move around or swap. Sometimes, I also have a browser window or two open in the same way.
The buffers don't overlap per se. In practice, they actually do: each one shows a window into the underlying text or image or whatnot, and can just show a small part. (Moreover, I can have multiple windows into one document, which is occasionally useful in practice). The only constraint is the physical grid... which I might use anyhow if it was easy with physical things. I lose a bit of flexibility in how things overlap in return for not having to worry about positioning and having everything line up nicely; a great compromise.
An important detail is that, in Emacs at least, open, closing and swapping panes is trivial. I constantly bring up new ones, look at new things in existing ones and then close them in the normal act of editing. Very transient, very flexible and largely possible because they don't overlap so that we can lay out new ones automatically instead of giving me a floating window to manually drag out of the way.
My workflow still looks just like the wireframe in the blog post. Interesting.
In the end, this is just going from the cozy world of tiling window management into the frontier of floating windows. While it might be friendlier to newcomers, floating windows are simply not as good for experts and, presumably, most code editors are aimed at experts.
I would much rather take on a slightly worse learning curve to get my stuff laid out automatically, all from keyboard commands. My code editor is one of the tools I use the most, so the trade-off is a no-brainer.
In fact, by using Emacs, that's exactly what I've already done!
I think of it as a bug that's really a feature: it makes the subscripts stand out. I'm tempted to add a special case to other language modes to highlight ₁ (and the ASCII version _1) differently, just because it turned out to be so useful.
And the main thing I notice about most of the examples given in the article is that they involve most of the screen not containing text. In fact, most of the screen appears to contain nothing useful.
There's a reason why the major popular editors all fill the screen with text, and it's something I've discovered from years of editing code: nothing is more important to programmer productivity than being able to pack a lot of code on the screen at once. There is probably an upper bound to this, but I suspect it is higher than available space on my desk to put monitors in.
You don't really need annotations and graphics and dotted lines to show you how things relate. You just need to have all the things in front of you so that you can read them together. Since we tend to write code vertically, this is usually best achieved with a small number of side-by-side panes of text, a feature which basically every decent editor has.
"forking the current panel using Ctrl+F is a game changer, as you don’t have to scroll away from your current code location when looking up something at a different place in the same file."
A game changer over what? Are there editors that don't let you do this? The two I mostly work in are Emacs and Visual Studio, and you can do this in both. (I'd actually have to hunt around for how to do it in VS, I use both side by side because of a whole lot of Emacs muscle memory, but it's there for sure)
It worries me that he's not actually aware of the features available in the editors he's trying to improve upon.
It seems like the author might not have ever learned how to properly use the existing editors.
Even Eclipse allows you to do this.
It's heavily inspired by Code Bubbles as well. However, instead of working with code on a file-by-file basis, we're working with code on a function-by-function basis.
We've got a demonstration video here: https://www.youtube.com/watch?v=CuQ8NJOypqs
And we'll be shipping an alpha version for people to play with over the next two weeks.
I love how it has autocomplete due to VS integration. With the right keyboard shortcuts and some polish, I think your editor would be very useful. Keep us updated.
Like you said the user experience is key with a tool like this, so we're constantly working to refine it.
The biggest thing we're looking for right now is feedback, so I'll definitely keep you updated on our progress, videos and alpha release date.
* I didn't leave KDE for XMonad to get a window manager in my editor. I'm interested in maximizing the real estate for my code, because I also need a web browser and two or three terminal windows.
* I don't see how that's going to scale to something useful when you have a project with hundreds of files where you often need 10 files open at the same time.
I asked him about the code he was working on. How much of it did he write? "A lot". How much was written by people at the company "100% in house - we write everything from scratch". OK, great. Working on the exact same codebase with the same core team for years on end (2+ years in their case), you probably know every single bit and byte by heart - awesome. Very few of us operate in that world. Many of us come in to codebases where we didn't write every line. The original gone, hostile or possibly even dead at this point. Full-featured IDEs (the guy in question kept gushing over sublime-text and how fast and lean it was) provide another level of code insight that basic editors don't provide (not ragging on ST, just pointing out it doesn't do what I need for the breadth of projects I work on).
I think the OP needs to look deeper at the tools he's criticizing before writing them off. His ctrl-f example demonstrates that he doesn't seem aware of other IDEs that provide this (and... I'd probably use ctrl-f to find something, not fork).
In the vEdit example, we get 'what file do you want to open?' That's generally precisely what I don't want to think about when I come in to a new project, because I want a visual overview of what's available. I want to see the naming convention, the layouts, note what's available and what's not. Removing that in an effort to be 'simple' hinders a heck of a lot of automatic project discovery for the sake of ... what? 'Simplicity'?
Given about 2 minutes of thought I'm leaning towards this being the wrong approach. The challenge with verbose languages is getting enough context on screen or in your head to think about the real problem; it's a pretty old problem and a lot of things have been tried, but not much has really worked. What I would like to see is something that hides more of the incidental complexity and lets you not think about it.
Similar ideas on the problems with code editors / current programming, but Bret Victor's ideas are a little more fleshed out.
Also, if you haven't seen it, it's a pretty funny talk. Brilliant guy.
[1] https://www.youtube.com/watch?v=BMmwhjfVSbk#t=1h16m30s (next minute) [2] http://en.wikipedia.org/wiki/Croquet_Project
class UserController
def create
...
UserMailer.send_invitation(user) # expanded line
def send_invitation(user) # implementation from UserMailer
...
end
end
end
This way you could unfold the entire call stack in place i.e. you can see all the code you're working on at once.That is an amazing demo feature -- but maybe not as useful day to day versus just hoping around functions.
Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.
I still haven't committed to either one paradigm, there are just certain problems with an open large canvas model that need to be resolved for it to be usable for large tasks.
https://github.com/shurcooL/Conception#demonstration
One reason "all code editors look the same" is because they're really mostly "text editors" with some coding-functionality on top. And as tikhonj explains, they display text prominently like image editors display images.
I used to think writing code as text was an inefficient legacy decision and that moving up to working with higher level concepts would be a big improvement, since we usually think about code at a higher level than an ascii-character-at-a-time.
However, the limiting factor is the input hardware we use to interact with computers. The most efficient input device is a keyboard, and text is most efficient to manipulate with a keyboard.
Those who live in an iPad-only world may still be slightly stuck though.
The most different editor is 'ed' though :)
You get out of the way by emulating what people know to at least such a degree that they can filter it out easily and concentrate on the task, not the environment.