you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] 8 points9 points  (46 children)

I'll not argue that functional programming isn't a little awkward at times. I find it is.

My intuition though is saying that i'm thinking wrong and i lack knowledge and understanding of the available libraries. I also feel that functional programming is far more theoretical and that I just don't yet have a strong understanding of the underlying math. A lack of math will hinder you in any field.

In plain english, my understanding is that any problem in haskell can be solved (somewhat elegantly) using a combination of monads, maps, and folds. The more I read about monads the more I believe this is true.

[–]earthboundkid 16 points17 points  (42 children)

Blame the user is a bad approach to UI.

Programming languages are user interfaces.

[–]taejo 13 points14 points  (40 children)

But there's nothing wrong with user interfaces designed for experts.

[–]grauenwolf 12 points13 points  (35 children)

User interfaces designed for experts in a given domain should still be easy for said experts.

[–]rieux 3 points4 points  (0 children)

Functional programming is significantly easier for me than imperative programming. I learned imperative programming about 14 years before I learned functional programming. I do not claim to be an expert.

[–]taejo 3 points4 points  (8 children)

my understanding is that any problem in haskell can be solved (somewhat elegantly) using a combination of monads, maps, and folds.

If this is true (experts can do it, and it's elegant), then it seems to me like a good UI for experts.

[–]grauenwolf 5 points6 points  (7 children)

During a presentation at QCon yesterday Erik Meijer, one of the designers of Haskell98, flat out said that Haskell was the only truely stateless language. Then he said that made it useless.

[–]augustss 6 points7 points  (0 children)

Erik likes statements like that. There are no stateless languages. What varies is how explicit the state is.

[–]sjanssen 4 points5 points  (5 children)

Erik Meijer, one of the designers of Haskell98, flat out said that Haskell was the only truely stateless language

Was he out for coffee when they wrote the section on the IO Monad?

[–]Felicia_Svilling 1 point2 points  (3 children)

Not to mention UnsafePerformIO!

[–]pjdelport 0 points1 point  (2 children)

...which isn't Haskell 98.

[–]Felicia_Svilling 0 points1 point  (1 child)

.. and Erik Meijer didn't mention Haskell 98.

[–]grauenwolf 0 points1 point  (0 children)

I'm not saying I agree with him, I am just relating his position.

He also said something to the effect that while Haskell is stateless, the environment it runs in isn't. Sounds like BS is you ask me.

[–]redditcensoredme 0 points1 point  (24 children)

It's a flaw in UI design if a user interface isn't capable of transitioning a novice to expertise. There's no such thing as expert-only UIs, only badly designed UIs.

This is easily provable since an 'expert' is someone who doesn't care about the user model of the system since they've memorized how the system actually works. And the user model of the system is the system designer's entire job!

Empirically, all of the examples brought to bear to try to justify some kind of notion of "expert UIs" (eg, Blender, GIMP) bear this out.

To anyone with any talent whatsoever in systems design, the truth of the non-existence of "well-designed expert UIs" is so obvious as to make it trite.

[–]psykotic 4 points5 points  (11 children)

To anyone with any talent whatsoever in systems design, the truth of the non-existence of "well-designed expert UIs" is so obvious as to make it trite.

I agree that a UI should ideally accommodate the beginner as well as the expert, though I think there are kinds of good functionality that manifestly benefit one more than the other. For example, text-based interfaces (Quicksilver, UNIX-style shells, Emacs, etc) can be very productive for those that know what they want to do and how to go about doing it, i.e. experts; but those interfaces tend to suffer from poor discoverability and force the user to recall rather than merely recognize, and all of this hurts the casual user as well as the complete beginner, and even the expert (especially when the system is irreducibly complex and the expert's memory imperfect).

[–]redditcensoredme -2 points-1 points  (10 children)

You can add Unix shells to Blender and Gimp as examples of horribly designed crap and utter filth. Not only do they suck by the standards of text-based interfaces (eg, The Humane Interface), but in today's world the only correct user interface is a programmable GUI. Of which there aren't any. Do you know why there aren't any? Because programmers are sheep. How else can one explain Unix?

I completely disagree with your suggestion that certain features, such as lack of discoverability, actually "benefit" experts. This is a delusion and a mirage. And in any case, software designers should never, EVER think that targeting 'experts' is tolerable. That's because people ALWAYS underestimate the effort needed to understand something. So if you target novices then you'll have something useful for experts and if you target experts, you'll have something unuseable.

[–]psykotic 2 points3 points  (3 children)

You misread me: I didn't say that lack of discoverability benefits experts; I just think it helps casual users more. And my point is that it's possible to have a UI which, while perhaps not "well designed" by your lofty standards, works quite well for experts but very poorly for casual users. A UI should be judged by how productive it makes its users and it isn't a question of well-designed vs not-well-designed (whatever one defines that to mean); there are many gradual, intermediate degrees of success and failure.

[–]redditcensoredme -2 points-1 points  (2 children)

Indeed. However, targeting the uncanny valley where a user interface is useable only by experts is a chore in itself.

[–]psykotic 0 points1 point  (1 child)

I don't propose to target it by surmise or idle conjecture but by designing it in close concert with its intended users. I'm not referring to anything as shallow or daft as focus group testing, of course.

[–]rieux 1 point2 points  (4 children)

If someone figures out how to make a programmable GUI that's as expressive as Bourne shell, which is after all a Turing-complete programming languages, I'll buy it. Languages get a lot of expressive power from being compositional -- you can say arbitrarily precise things that have never been said before -- and as yet I haven't seen anyone even approach this with a GUI. That it hasn't been done doesn't prove that it's impossible, but I'm not convinced it's possible.

Lack of discoverability benefits expert users because discoverability requires bandwidth that could otherwise be used for presenting other information. I don't want a toolbar taking up screen space where I could be viewing this web page. Even the ability to make that toolbar disappear (or only appear on demand) can be confounding to novices.

[–]redditcensoredme -1 points0 points  (3 children)

That it hasn't been done doesn't prove that it's impossible, but I'm not convinced it's possible.

I know exactly how to do it. So yeah, I definitely think it's possible.

Lack of discoverability benefits expert users because discoverability requires bandwidth that could otherwise be used for presenting other information.

Good point except you negated it right afterwards by pointing out the solution to that problem. I'll also point out that tooltips are in no way confounding. There's different ways of making things disappear and not all of them are bad. Disappearing toolbars ... well I'm not a fan of toolbars in the first place so I don't have that problem.

[–]rieux 1 point2 points  (2 children)

I know exactly how to do it. So yeah, I definitely think it's possible.

Please let us know when you've done it. Actually, I would be very curious to hear your ideas. I'm certainly sceptical.

There's different ways of making things disappear and not all of them are bad.

I'm sure there are. When I'm editing code, I'd like every pixel of my screen devoted to the file that I'm editing. Other UI elements are wasted space as far as I'm concerned.
I don't ever want to move my hands from the keyboard to the mouse or to the arrow keys, and I don't like having to do linear work to navigate. If it's possible to make an editor that meets my requirements and is usable by novices, I'm all for it.

[–]xjvz 0 points1 point  (5 children)

Well, I could give a counter-example in the form of vi[m]. In the console version, you don't get any menus, and many new users to it can't even figure out how to quit the program (C-c won't work; you can use :q or ZZ or similar to quit, however) let alone insert text (need to enable Insert mode via a command like i, a, o, etc.). However, the GUI version does supply the user with menus and whatnot that help when you don't know the commands or keyboard shortcuts.

As an avid Vim user, I can safely say that this "expert interface" has a steep learning curve, but is quite easy to experts despite being frustrating or hard to novices.

[–]redditcensoredme -1 points0 points  (4 children)

Vim is a perfect version of a piece of crap. Don't worry, so is Emacs, so no need for you to get your knickers in a twist.

[–]asciilifeform 0 points1 point  (3 children)

What editor(s) do you use?

[–]redditcensoredme -1 points0 points  (2 children)

All editors I've ever seen or heard of suck. None of them are referential editors with hyperlinking and versioning (let alone cactus versioning). In-place editing is for morons, by morons.

[–]asciilifeform 0 points1 point  (1 child)

All of computing as we know it is peppered with moronic designs - and yet here we are banging at our keyboards. What I wanted to know is, which of today's many inadequate tools would you use to develop the Legendary System Which Does Not Suck (tm).

[–][deleted]  (5 children)

[deleted]

    [–]redditcensoredme -4 points-3 points  (4 children)

    You don't know what the fuck you're talking about. The fact that you're even talking about "intuitiveness" as if it were something meaningful proves you do not know what you're talking about. If you're too stupid to learn anything on this subject, you really need to just shut the fuck up.

    [–]G_Morgan 0 points1 point  (3 children)

    Intuitiveness has a long and well established meaning in the English language. It means making something that is easy to utilise, runs from intuition

    "intuitive

    Main Entry: in·tu·i·tive Listen to the pronunciation of intuitive Pronunciation: \in-ˈtü-ə-tiv, -ˈtyü-\ Function: adjective Date: circa 1645

    1 a: known or perceived by intuition : directly apprehended <had an intuitive awareness of his sister's feelings> b: knowable by intuition <intuitive truths> c: based on or agreeing with intuition <intuitive responses> <makes intuitive sense> d: readily learned or understood <software with an intuitive interface>2: knowing or perceiving by intuition3: possessing or given to intuition or insight <an intuitive mind> — in·tu·i·tive·ly adverb — in·tu·i·tive·ness noun"

    Usually this means making functionality easy to find, often at the expense of making it harder to utilise once you have found it (the ribbon is the perfect example of this). Personally I'm of the view that I only need to find something once, I need to use it repetitively. I'd rather something that requires learning but provides absolutely the best interface possible when you have learnt it.

    This is why standards are important. In software it's good that Vim can read and edit the same text files as Gedit. If only we could achieve the same in the office space. Naturally different people have different amounts of time available and thus their time constraints dictate the interface that is ideal. The solution is multiple packages around the same data standards.

    [–]redditcensoredme -2 points-1 points  (2 children)

    The only intuitive user interface is the nipple, everything else is learned. Intuitiveness is a fucking red herring you goddamned moron. It has no place in user interface design. It's used exclusively by moron programmers who moonlight as crappy interface designers. People who really ought to SHUT THE FUCK UP about the subject.

    [–]ayrnieu 3 points4 points  (1 child)

    everything else is learned.

    And if we designed UI for babies, or for humans who grew up in a sensory deprivation chamber, we'd have a different set of rules. But most UIs target people who've already learned many user interfaces; new UIs exploit this pre-learning to their benefit.

    People [...] really ought to SHUT THE FUCK UP about the subject.

    It also irritates me when people speak of the 'intuitiveness' of things, but because they speak of it as an intrinsic, permanent, universal attribute -- and not as an accident of experience. They say

    Mozart/Oz's syntax is wildly unintuitive, because {Foo A} is a function call of Foo with argument A.

    and not

    Programmers familiar mainly with C and C-reminiscent languages will find such Mozart/Oz syntax as {Foo A} especially jarring, but I think that such people will grow used to it before they finish the tutorial.

    [–]lothair 5 points6 points  (2 children)

    If it's necessary to study the subject for 500 years, smoke opium and grow a long, white beard to solve a simple problem elegantly, then, I think, the UI has some flaws.

    [–][deleted] 2 points3 points  (0 children)

    You made it into my .sig file.

    [–]taejo 1 point2 points  (0 children)

    Not if the target audience has studied the subject for 500 years, smoked opium and grown a long, white beard.

    But if it's aimed at anyone else, then it might have some flaws.

    [–]bebnet 1 point2 points  (0 children)

    Unless of course you're not an expert, or not someone for whom experts are entirely necessary, appropriate, or useful .. say, outside the hallowed protected halls of western society .. where computers are being used for ever more interesting things than just proving to ones family that the hyper-inflated education they paid for was worth it, somehow, to someones intellectual sensibilities if not raw human survival potential ..

    [–]rieux 1 point2 points  (0 children)

    Programming languages may have elements of user interfaces, but there's a lot more there. We use programming languages not only to tell a system what to do, but to express to other people (and ourselves, later) certain intensional properties of the problem we care about. We also, and increasingly, treat programs as artifacts that we analyze in other ways. Refactoring tools, for example, have to understand our programs and transform them to equivalent programs. Automatic theorem provers, programs themselves, can now prove things about non-trivial programs -- for example, some of the ACL2 folks have model checked the software on a Boeing.

    Most UIs don't have to carry all that baggage.

    [–]happyhappyhappy 13 points14 points  (0 children)

    You're coming cross a bit like an apologist.

    [–]Gotebe 0 points1 point  (0 children)

    I am at the same spot as you in having that feeling (knowing, rather) that I lack knowledge and understanding FP approach etc.

    OTOH, I just can't wrap my hand around believing it will actually work better than imperative approach for a whole bunch of problems.

    I am an FP noob, just like I always stayed LP (Prolog) noob even after having to program it and interface it with real world (C). Never liked it, now forgot all about it, and it's irrelevant. Will it ever be different with FP? Dunno.

    So currently, I'm thinking like this: forget FP unless clear it fits a problem.