Live data from Hacker News

Maximally Powerful, Minimally Useful

blog.higher-order.com

11–20 of 26 posts

Re: Maximally Powerful, Minimally Useful

#11

I like what the author is suggesting. It's thought-provoking and is consistent with many experiences I've had in life. An interesting analog in the arts is the notion that a chosen or imposed constraint can provoke creativity and open up new possibilities.

The haiku effect.

Re: Maximally Powerful, Minimally Useful

#12
post #2

While there is some truth to the author's point, and we can see the effect in in a lot in practice, he makes the mistake of confusing "useful" with "analyzable in FP terms". This exact point (comprehensibility vs. power) is why Smalltalk is so amazing: it adds a lot of power while at the same time being more comprehensible, not less. That's no small feat, and IMHO one that is both under-appreciated and under-analyzed…

He isn't talking about comprehensibility but instead analyzeability. For instance a type system normally improves comprehensibility but sometimes can require rewriting your algorithm in a less clear way, reducing how easy it is to understand. In contract it always improves analyzeability as you can say more about the program without going into details.

Re: Maximally Powerful, Minimally Useful

#13
I really like this post; it's a nice look at at issue that comes up over and over again in designing systems.

One thing that occurs to me is that it relates to what part of a system I identify with. For example, I think very differently about a dictatorship if I imagine myself the benevolent dictator than if I think of myself as a citizen.

I also feel very differently about the different sorts of system depending on what I'm up to. When I'm mainly exploring a problem space, I want powerful tools, but when I'm building something to last, I want something safely constrained. In the former, I place my identity with the lone author, where the power to do the unexpected is vital. In the latter, I identify with those maintaining and debugging a system, where the power to do anything is a giant pain.

Re: Maximally Powerful, Minimally Useful

#14
For programming languages, a paradigm allowing to be "as expressive as necessary" is LOP[1] (Language Oriented programming).

With it you can basically choose your level of expressiveness while you develop your program (with different levels for different parts of your program). The frustrating trade-off between expressiveness and readability[2] is the main reason I love this paradigm. Unfortunately LOP has never been really trendy. Hope it will change soon.

[1] http://en.wikipedia.org/wiki/Language-oriented_programming

[2] For programming languages I would rather speak of readability (as opposed to analyzability) because a program is often not written in stone but "alive" (it's modified, enhanced over time...). It probably does not apply to the other fields discussed in the article though.

Re: Maximally Powerful, Minimally Useful

#15

For programming languages, a paradigm allowing to be "as expressive as necessary" is LOP[1] (Language Oriented programming). With it you can basically choose your level of expressiveness while you develop your program (with different levels for different parts of your program). The frustrating trade-off between expressiveness and readability[2] is the main reason I love this paradigm. Unfortunately LOP has never been…

This trade-off is also why I love Lisp. Although you can easily write something totally incomprehensible, people well versed in Lisp manage to be very expressive with a very powerful language. Of course lisp macros are the key.

It's extremely easy to do LOP with Lisp thanks to s-expressions (all those parenthesis :). But you can be much more expressive with LOP.

EDIT: elaborating

Re: Maximally Powerful, Minimally Useful

#16

A familiar example is “goto” versus structured programming. “goto” is supremely expressive—conditional jumps are sufficient to express all of the usual structured programming constructs. But sacrificing “goto” enables much more powerful reasoning about programs because it restricts the shape of the control flow graph to common patterns: “while”, “do…while”, “for”. One of the core features of functional programming is…

> rather than “for” loops, it’s often easier to think in terms of the common patterns: “map”, “reduce”, “filter”.

It is. My lament there is that, at least in my experience, optimizers haven't caught up in this department. So while I invariably start with the higher-order operations, all too often the profiler subsequently informs me that I need to replace that code with a for loop.

I suspect that side effects are the culprit there: In a language without referential transparency, the optimizer's very limited in what kinds of reasoning it can make about a function. I'm not quite ready to give up side effects just yet, though. I wish I could work in a language that only allows them in functions that explicitly declare that they want to use them, though.

Re: Maximally Powerful, Minimally Useful

#17
"That is, the more expressive a language or system is, the less we can reason about it, and vice versa. The more capable the system, the less comprehensible it is."

What makes these assertions true? Research/data/polls etc would be helpful. It is hard to accept such wide-ranging claims without some proof.

Also, could someone please post the effective definitions of "expressiveness" and "capability" as used in the post ?

Thanks.

Re: Maximally Powerful, Minimally Useful

#18

That link http://www.logicmatters.net/resources/pdfs/Galois.pdf (syntax - semantics as Galois Connections) in the comments seems pretty interesting.

When my kids and I play with Legos, I think back to then I was a kid, and all the things we could build with our big box of maybe 20 different kinds of block. They were very compositional.

Today, we have a million different pieces from various sets, and it is difficult to put them together in ways that conform to what we imagine, so they aren't as much fun.

Is this the same idea?

Re: Maximally Powerful, Minimally Useful

#19

For programming languages, a paradigm allowing to be "as expressive as necessary" is LOP[1] (Language Oriented programming). With it you can basically choose your level of expressiveness while you develop your program (with different levels for different parts of your program). The frustrating trade-off between expressiveness and readability[2] is the main reason I love this paradigm. Unfortunately LOP has never been…

Could you not just use an expressive programming language and limit yourself to its more readable components?

Re: Maximally Powerful, Minimally Useful

#20
post #17

"That is, the more expressive a language or system is, the less we can reason about it, and vice versa. The more capable the system, the less comprehensible it is." What makes these assertions true? Research/data/polls etc would be helpful. It is hard to accept such wide-ranging claims without some proof. Also, could someone please post the effective definitions of "expressiveness" and "capability" as used in the pos…

> What makes these assertions true? Research/data/polls etc would be helpful. It is hard to accept such wide-ranging claims without some proof.

Well, the article gave 10 or 20 examples. That's not proof, but it is data...

Post reply on HN