top | item 22402789

(no title)

kurnikas | 6 years ago

> We've simply gotten used to them: Dealing with the idiosyncracies of bash, vi, or the JavaScript type system

This stuck out to me, there seems to be a trend in UX/UI where any move away from the "simplest path" is seen as a huge negative. Could it be the case that we use these tools (especially UI patterns like vi) because after the learning curve the give a huge amount of value? It seems like we are assuming that we should make a developer tool with the same level of "immediate familliarity" that we try to build into a website where customers will bounce easily, for an audience who is willing to spend time learning a tool if it provides value to them.

discuss

order

adamkl|6 years ago

Rich Hickey has a pretty interesting take on this very topic where he compares programming languages to instruments, and how instruments aren’t for beginners. How it takes work to become good at playing an instrument, and how that isn’t a bad thing.

> But look at this guitar player with blisters. A harpist has blisters, a base player with blisters. There's this barrier to overcome for every musician. Imagine if you downloaded something from GitHub and it gave you blisters. Right? The horrors!

That whole talk is filled with some interesting takes on designing and building software (with the usual skew that paints Clojure in a good light, so take it with a grain of salt if necessary).

[1] https://github.com/matthiasn/talk-transcripts/blob/master/Hi...

inetknght|6 years ago

> Imagine if you downloaded something from GitHub and it gave you blisters. Right? The horrors!

I'll have to remember that next time someone mentions that C should be a dead language.

(I actually think C is a fine language, but should be deftly handled)

waste_monk|6 years ago

> Imagine if you downloaded something from GitHub and it gave you blisters

You mean Haskell?

rolleiflex|6 years ago

I'm a designer [0] and an engineer — you'll take my shell from my cold, dead hands.

There are two issues here:

a) Designers trying to simplify everything beyond usefulness is a good instinct gone haywire. Simplification helps, but without an understanding of accidental complexity versus essential complexity, one is bound to end up painted into a corner with no flexibility left in the app. Few designers understand this, and those who do got it the long way round — by working on products that have a lot of essential complexity, like AdWords, and by repeatedly fighting those battles

b) An engineer's operating environment, OS, IDE, shell, terminal, is a reflection of the inside of his or her mind writ large. Like every Jedi has to build their own lightsaber, every engineer has to go through this pain of building out their weapon, because one's workflow is how one thinks, how you look at the problems at hand. No UI designer can help with that.

[0] (Because it's relevant to the context: ex-Google, ex-Facebook as professional experience)

gatleon|6 years ago

I like this idea of how "one's workflow is how one thinks".

There is a great little book - Daily Rituals [0] - that goes into many artists' and scientists' daily habits. The habits are very much along the same lines as your thought - they are workflows for how the individual tends to think best.

I'd love to see someone put together a website or book that did that in the context of software engineers' workflows. Does someone know if a resource like that already exists?

[0] https://www.goodreads.com/book/show/15799151-daily-rituals

-edited for grammar.

arvinsim|6 years ago

I digress but I am really interested in your experience as both dev and design as I am going in this path too.

How did you juggle acquiring skills for both roles? Also, where there times you had to struggle between the two mindsets on a task?

meagain3|6 years ago

[deleted]

vsareto|6 years ago

>An engineer's operating environment, OS, IDE, shell, terminal, is a reflection of the inside of his or her mind writ large.

Shout out to the people that don't really bother because they're good enough to adapt to any setup. :)

pjc50|6 years ago

For things like vi, I'm developing the "left handed mouse" analogy:

Many mice are ambidextrous (e.g. the Apple puck). Most are weakly right-handed with a slightly assymetrical shape. Some are very strongly right-handed (e.g. vertical mice) and can't be used sensibly in the left hand. So left-handed mice also exist.

Some people are naturally left-handed. We (as a civilisation) used to treat this as aberrant but have now recognised it, and that different tools suit different people.

I believe that something similar exists in programming tooling in relation to how people think about programs. There are clearly some people who have a strong, unusual "handedness" and have developed tools to match (e.g. Colorforth). A few people discover these and find them amazingly usable. Most other people find them baffling.

Consider the three propositions:

a) Jimi Hendrix played guitar in the wrong way with the strings in the wrong positions

b) Jimi's configuration was correct and everyone else was wrong, because he's producing the objectively best music

c) Jimi was left handed, and had constructed an accomodation which worked for him but should not be expected to work for anyone else

Far too many discussions of programming tools devolve into (a) versus (b), largely because people want there to be an objective ranking of who the best programmer is and what the best tools are, rather than allowing for diversity of (programmer x tool).

dehrmann|6 years ago

> aberrant

Pretty sinister, if you ask me.

ailideex|6 years ago

Maybe a bit unrelated, I got used to Windows 2000, then window XP, then Gnome 2, then Gnome 3 came. So I stuck with Gnome 2, then moved to XFCE, and now with RHEL 8 I had to use Gnome 3 because there were no other options. Gnome 3 is an absolute horror show. I don't know who made it, for who, and what the theory behind it is but I don't see how it would be easier to use for someone non technical, my parents both understood how to use Windows 2000. It is just weird. It is harder to multitask as efficiently as I did in XFCE and Gnome 2. Gnome 3 is not simpler - it is just more convoluted.

And I feel this is a very similar situation with other tools. I edit code with vim, in a terminal. This is simple as dirt. I do it because it is simple as dirt. Visual Studio is incredibly complicated to me because to do the creating code part my job I need to understand the following:

- How code is built.

- How to build the code without using any graphical front end.

- But now when you bring VS into the mix I need to also understand visual studio. It does not remove complexity, it adds it.

Similar thing with debugging, I need to understand all the ins and outs of debugging but now bring VS into the mix and I need to understand it's stupid UI.

I like simple, my mind is simple. I can learn things, if there are rules and patterns it makes it easier to learn, but the less things I have to learn the happier I am. I don't have an option to not learn some things, like how to do build automation, how to debug code, how computers work, etc. But I do have an option to not learn something entirely useless like VS.

I think the lie being sold is that somehow you can be a programmer without actually knowing how to use a computer. And to know how to use a computer is not the same thing as knowing how to click on things in the UI with a mouse. To know how to use a computer you need to understand how to use it to do automation - and once you need to do this VS is just a nuisance.

Just a rant I guess.

tsimionescu|6 years ago

I think you are missing an important aspect: VS can help you in mental tasks the same way a jackhammer can help more than a pickaxe in physical tasks.

Sure, the pickaxe is simpler, but it will take you a lot longer to break that concrete with a pickaxe than with a jackhammer, because of simple human limitations.

Similarly, refactoring and advanced code navigation support takes a while to learn how to use, but once you do, it empowers you through technology to quickly do things that your mind would take much longer to do by hand.

For example, say you want to extract some code from the middle of a function into a separate function. With vim, you would generally have to manually move the code, write the new function header, then start to painstakingly inspect the code to identify the parameters to pass between the two. You will probably make mistakes and have to wait for the compiler to find them. All in all, assuming it's a bit of hairy code, it might easily take you more than an hour to get it working. In VS, you would type ctrl-r, ctrl-m (Refractor, extract Method) and it would automatically detect all of these for you, pop out a dialog box, you'd enter the new function name, Tab, param name, tab, param name etc, and enter when you're done. Maybe 5 minutes all in all, assuming you also do some ctrl-r, ctrl-p (refractor, parameter) afterwards to extract some larger expressions back into the original function.

Similarly, you have things like 'analyze data flow to...' which can find all places in your program where a particular value can be written to, and do that recursively until you get to the original source. Same thing - this can be done by hand with a series of finds and so on, but an advanced tool will just help you do it faster.

But, just like with advanced editing in vim, you need to take the time to learn the tool until you can get the most out of it. Same as the first time you enter vim you're likely to fumble to even be able to exit, you can't expect to be productive in VS if you don't take the time to learn what it can do for you.

de_watcher|6 years ago

VS is great for visual debugging, the build was secondary: you set it once and forget. But it only worked in the era of the proprietary software because you didn't have much third-party stuff to link into your project. Testing has changed too: you'll write an automatic test anyway, which means that the software is shaped for debugging by writing tests.

thaumasiotes|6 years ago

> then moved to XFCE, and now with RHEL 8 I had to use Gnome 3 because there were no other options.

Wait, what happened to XFCE? I use it right now.

meddlepal|6 years ago

RHEL8 doesn't let you install a different desktop environment?

I'd look into switching to Fedora. I use the XFCE spin and it is stable.

beefield|6 years ago

I think there should be a clear distinction between your tools and... let's call them "utilities" what comes to UI. It is perfectly okay to make electricity plug, water faucet, toaster and the power button on your computer not only so easy that an idiot can use them, but so easy that an idiot can't use them wrong. Not only because requiring mental energy to use these is irritating but also because it can be dangerous.

Your tools, then again, chainsaw, microscope, text editor... have no reason whatsoever to have an UI that is intuitive without training[1]. Because without training you are anyway going to be either dangerous, useless or in best case just really unproductive.

[1] of course, the UI needs to be efficient after training.

ghaff|6 years ago

And, in the case of things like chainsaws, they shouldn't be needlessly dangerous if a user is not as well trained as they should be or if they're simply inattentive/tired/etc. (And in the case of software, you should generally not be able to cause massive damage/loss of work because you picked the wrong menu item.)

izietto|6 years ago

My point of view is different: there has to be a really strong reason to move my eyes from the code, and in the editors there should be respect for that. For example, I don't want to move from Atom to VSCode because VSCode has those huge icons that take space and distract me, when all I want in the default editor UI is the project directory tree and the code. Everything else should be opt-in.

frosted-flakes|6 years ago

For what it's worth, you can easily hide those icons and access everything through the menu or command bar.

BjoernKW|6 years ago

In "The Design of Everyday Things" Don Norman describes this distinction as knowledge encoded in the head versus knowledge encoded in the world.

For professional tools knowledge encoded in the head supported by appropriately encoded knowledge in the world absolutely is a viable approach, provided there's appropriate feedback and conceptual mapping corresponds to the mental model a user has about how that tool works, i.e. actions and reactions should be consistent.

With modal design patterns such as the ones used by vi, for example, this can become a problem.

addicted44|6 years ago

Listing vi in there shows that the OP, even if they may have good points in general, is limiting what good UX is to certain specific attributes, whereas developers want to optimize for additional attributes.

And this isn't just me saying that because I like vim. It's because of the objective fact that nearly every developer tool that is created will include a vim mode. And if included as an extension it will often be one of the most popular extensions. What that objectively indicates is that there is a large contingent of developers who genuinely find the vim modal editing UX excellent, to the point they seek it in other tools as well (including browsers, mail clients, RSS readers, etc).

werg|6 years ago

Yes, you are right I didn't put that very well. Modal editing really has a lot of benefits, even if I personally don't go for them (am more of an Emacs guy).

What I would say is that vi really doesn't give you a lot of interactive context -- and it's hard to add it on.

Gehinnn|6 years ago

I think even complex products should have a linear progression from newcomers, curiously exploring the product for the first time, to experts, who want to do certain tasks as fast as possible.

It's simply not possible to learn vi by just using vi.

Also, the author emphasizes that just dumbening a product is not the solution.

robenkleene|6 years ago

Any examples of software that accomplishs this well?

A quick summary of my experience:

- Most complex apps are not learnable linearly: Ableton Live, Final Cut Pro, Logic Pro X, Photoshop, After Effects, Blender, all practically require reading the manual.

- A few apps are ok at it: Adobe Lightroom, and Sketch, although those apps also are probably less powerful than those in the first category, e.g., Photoshop can do the majority of what both of those apps can do, and more.

I would actually put shells and text editors as some of the easiest complex apps to learn linearly, because you can do so much with them with just cut and pasting text from the internet. Try following along with a Blender tutorial video that's not for an absolute beginner, and you'll get stuck almost immediately, because you won't know the keyboard shortcuts to perform the actions in the video. This happens far less with programming tutorials involving text editors and terminals.

ailideex|6 years ago

> It's simply not possible to learn vi by just using vi.

I did. I learnt vi when I was told go fix this file on that computer, you have ssh, x forwarding won't work because you have 3 hops (embedded devices that won't allow forwarding of any kind), there is only vi on the box.

So I figured out how to use vi. It is not rocket science, there is not that much to learn, vi muscle memory takes time but also not even that long I think.

werg|6 years ago

Oh yes, that is certainly what we do. And there's nothing wrong about that. We are definitely in the business of building tools for professionals, i.e. a bit of a learning curve is not the issue. The "professional hazing process" isn't necessarily bad. What I would say is that there is some (maybe a lot of) potential value that vi cannot develop simply due to the very reduced form factor that it has. I believe this never really has come to the fore because most programming languages are designed in a fairly limited way. I.e. they don't really take into account that they are a User Interface.

As positive examples I would point out the kind of interactive editing mode that you can find in dependently typed programming languages. I believe e.g. Idris has a pretty cool Emacs mode.

dehrmann|6 years ago

Bash and JS are interesting cases because they're so ossified core problems are impossible to touch.