My talk "Functional Programming: Failed Successfully" is now available!

In addition, more people are either trying to “add-on” what Haskell already has (as I mentioned earlier) or outright questioning the predominant paradigm used in said mainstream (software) technologies:

(…from this post in another “long and winding” thread.)

Software is now a vital part of society, just like bridges, tunnels, apartment and office blocks, etc. So at some point in the future, software development won’t be enough: software engineering will dominate. But just as the transition from mud-and-grass huts to early structures of wood and stone demanded a more formal understanding of what is required to reliably build those structures (to avoid constantly going back to those mud-and-grass huts!), a similar understanding of what is required to reliably build future software structures will be required.

Of course, software development will continue, just as carpentry and other trades continue as needed…but certain tasks now require the skill set of an structural or civil engineer - being a carpenter alone isn’t enough. Like it or not, this is where “software construction” will eventually go - for certain tasks in the future, being a software developer alone won’t be enough: a software engineer will be required.

So what language/s will those software engineers of the future being using? If only I could reliably predict the future! But considering that engineering large physical structures demands a thorough understanding of mathematics and the properties of the materials being used…engineering large virtual structures will most likely require a similar and equally-as thorough understanding. So languages which at the very least do not wantonly interfere with using basic principles of mathematics and logic would most likely be preferred - languages like Haskell, Prolog, Mercury…and perhaps Verse (or successors thereof) which are declaratively-based, but not entirely divorced from the real world:

(Again, though: if only I could reliably predict the future…)

It’s not brutal, it is what it is. It helps building cool stuff and sharing resources. I know I got people to try and like functional programming. Best we can do is try to make everything as ergonomic as possible. No monads as burritos. No semigrupoids as enchiladas. Show them the signature, show them built examples, and let them go at it. There’s a lot of space between 1 + 1 and space probe DSL. Rather than showing concise hieroglyph soup or the Tardis monad show them how you can just build things you can reason about, this I find invaluable and an incredible asset to peddle to industry: proofs for the masses!

Now try selling a language of the APL family to the masses.

Software engineering is not math, and it will never be. Trying to redefine it in these terms will only increase the distance between haskellers and the rest of the world. The industry generally doesn’t care about Math and correctness as haskellers do. What haskellers call “engineering” is actually not an engineering for others. For others, it’s computer science, which is too pure and idealistic to be taken to the flag. Hoping for the industry to suddenly start caring what haskellers care about is wishful thinking. Even in the span of a decade or two, this will not happen as it didn’t for the last multiple decades. And also, in civil engineering, mathematics is only a tiny fraction. A small percentage of people do it. And a bigger fraction is those armies of dirty working non-engineers and non-mathematicians who move materials, put bricks, mix concrete, and risk their lives on the height. It’s that solid civil construction can’t be done without Math and civil engineering, but software can. And mostly, it is done without the direct participation of Math, even without the direct participation of Software Engineering. History shows that the industry is not interested in pure functional/mathematical utopia. This will not change, and it’s haskellers who need to learn what software engineering is, not vice versa.

Fix: grammar

Software engineering is not math, and it will never be.

Neither is civil or electrical engineering! But they very much rely on mathematics, and that is where software engineering will also have to go.


The industry generally doesn’t care about math and correctness as Haskellers do.

Hence the maxim “try rebooting the system”. Now just imagine if we had to “reboot” all our bridges, tunnels, apartment and office blocks, entire cities, energy grids, et al


Hoping for the industry to suddenly start caring what Haskellers care about is wishful thinking.

Is it just Haskellers? I would have most Prologgers and and other declarative-language users also care. But just like Haskellers, most of them also realise that it “won’t happen overnight” - just like the transition humans made from building with mud and grass to stone and wood.


History shows that the industry is not interested in pure functional/mathematical utopia. This will not change […]

This aforementioned reference:

having (apparently) stalled since 2015 certainly attests to that! So “what’s the problem?”

…is that all? Interesting:

  • it isn’t just pure functions which have a problem with I/O:

  • and as for trying to determine when some I/O actions can be used purely:

    Using unsafePerformIO safely?

So it’s fortunate for us that Haskell already has such functions (having no visible side effects) by default: otherwise we would probably be still deciding whether or not to include them!


[…] it’s Haskellers who need to learn what software engineering is, not vice versa.

Apart from (maybe?) a few “Haskell natives” (Haskell ver. 1.0 being released in 1990), the majority of us already know what that so-called “software engineering” looks like. And presumably so did John Backus back in 1978…


But all this talk about pragmatism (or the lack thereof) has has me wondering about something for a little while now:

  • does anyone here remember:

    • a physicist,
    • a chemist,
    • an astronomer,
    • or other scientist,
    • or an applied mathematician,

    …asking a pure mathematician to be (more) pragmatic?

  • if so, what was the response by the pure mathematician?

You can define your own # to do field lookup using HasField, can’t you?

First a disclaimer: I am a mathematician, working at a company with “real” (electrical and mechanical) engineers who build stuff we (have to) control.

That’s another problem. There are (for most software) no incentives at all to make “better” software. As long as companies are not (practically) liable for their software, they continue producing what is “good enough”. This isn’t a problem to be solved by “technology”.

Software engineering did and does always rely “on mathematics”.
Talking about “real” engineers: even then, there are specialist engineers (structural engineers for example, when talking about buildings and bridges) which do most of “the math”, while most of the “normal” civil engineers are mainly doing project management stuff. Which btw. isn’t the kind of (“pure”) math you are talking about at all, but the applied math programmers always have used.
And to take your “real” engineering equivalent to software engineering: there are/will be special software engineers that use some kind of formal method, but there always will be an order of magnitude less of them, as they are consulted when their work is needed.

That they don’t care about “the real world”, because it’s ugly. And this is fine “for Haskell” too, but “the pure Haskellers” lose their “right” to talk about real world usage of Haskell or “functional programming” (in the way “Haskell” likes to define it, in a “pure” language - the lazy part is obsolete anyway). So either you are “pure” and don’t care about “engineers” (as in “inpure people, that don’t know shit about what mathematics actually is” - which coincidentally is what most mathematicians think about engineers and computer scientists in general, especially after having to teach them (and architects) maths at university :wink: or they want them to use it, then they have to be pragmatic and cater for their (actual) needs and “speak their language”.

And the biggest irony: Haskell actually is the pragmatical choice of “functional language” for many, because it actually has the most users and a big ecosystem of libraries.

2 Likes

You mean, “Let’s make a revolution”. This will not work. Haskell should not be a political weapon.

This message can be interpreted in two ways.

  1. “Have you seen what they call ‘software engineering’? Complete nonsense. We’ve seen it, we’re fed up with it.”
  2. “We know what software engineering is. And we are the majority in Haskell.”

If most haskellers know what software engineering is, why have we seen a huge demand for software engineering topics in the past decade? Why did the previous director of HF and many other folks say we don’t have enough understanding of software engineering? That the discipline is yet not formed? If we have software engineering, why does the outside world not agree that the materials we have are software engineering? (Hint: most Haskell books are not on comprehensible software engineering as a discipline but rather about non-systematic, non-universal Haskell wisdom, tips, and tricks.)

The outside world feels this implicit intent to revolutionize the field by rejecting and dismantling what was done in the discipline long ago and what was used in practice with huge success. It is no surprise that Haskell has this reputation and is struggling to get a wider adoption. Mainstream software engineering has its merits, and it is equally applicable in Haskell, with certain adaptations.

Fix: grammar

Haskell should not be a political weapon.

A curious choice of words:

…if only they had used Erlang :-b


Correct: that was my intended interpretation. As for that other interpretation:

…here’s some suggested reading:


>_< …software in space.

I completely forgot about that one: software engineering has existed since (at least) the first (re)programmable computer was sent into space. So plenty of mathematical and logical checks needed for that software, to prevent extremely inaccessible hardware from going very astray…

So many my points from the talk have real ground and are quite widespread across FP communities, especially Haskell. These things prevent its wider adoption and are seen by the outside world as misbeliefs or misconceptions. Of course, not the entire community supports everything but I don’t see a general disagreement with these:

  • “OOP is trash”
  • “Math is king”
  • “Mainstream is wrong. What it does is garbage. We know better”
  • “Software Engineering is Math. FP is Math”
  • “We have our oun way, we don’t need to follow rules of the industry”
  • “We’re fine in our small, isolated world, we don’t need Haskell to become more popular”.
  • “The industry is broken, we need to fix it. Haskell is a political weapon”

I recently learned that the purpose of HF is not industry adoption. The goal has changed therefore, and I can see why. The road to popularity goes through 1) recognizing 2) solving social problems (like those misbeliefs and narratives). This meets too much resistance, and needs a very different approach, so it’s easier to focus on technical terms and forget about wide adoption. If that’s so, let’s at least be honest about this. I will then stop trying to convince the outer world to use Haskell, and will let it sink

Alexander, this feels a bit like an act of rhetorical vandalism in what has been — with highs and lows — an informative discussion.
There are many interesting bits in your presentation; I am unconvinced advocacy will change much with regards to making Haskell more popular to management.

Part of the HF job is fostering industry adoption, e.g. see Haskell Certification Program. There are many ways to skin this functional cat.

4 Likes

I recently learned that the purpose of HF is not industry adoption.

That’s a bit surprising. Where did you learn this? I’m a member of the board and I have not been aware of any change of purpose. The web site says

“An independent, non-profit organization dedicated to broadening the adoption of Haskell, by supporting its ecosystem of tools, libraries, education, and research.”

This is spelled out a bit more in the HF’s vision statement.

I think it is indeed true that industry adoption is not the sole goal of HF. Hence the slogan “Avoid success-at-all-costs”. For example, I would argue against compromising the conceptual integrity of the language in a single-minded pursuit of popularity.

But that does not mean that adoption is a non-goal – quite the reverse (see above). I personally spend a lot of time and effort working out how to reduce the friction of adoption by increasing stability, and the HF has a Stability Working Group that does nothing else. (Here’s a state of play document.)

I think that we should not characterise this conversation in terms of who is “right” and who is “wrong”. Rather, I would say that Haskell takes a single core idea (statically-typed, purely functional programming) and sees how far it will go. If that’s not what someone wants, then they shouldn’t use Haskell; it’s not that they are right or wrong – just that Haskell isn’t right for them. We should not (and I hope do not) claim that Haskell is Definitely Better than alternatives, that we are right and everyone else is wrong. It’s a grand experiment, to take a single radical idea, stick to it like glue, and see where it takes us. That has been the story of my professional life, starting in around 1984, and it has been a pretty exciting journey. I would love more people to adopt Haskell, but I want them to do so because they love the joy and beauty of the core ideas.

All that said, what we should do, I think, is to bear down relentlessly on accidental friction, things that make mainstream developers get fed up with Haskell, but that are not a consequence of the core vision for Haskell, but rather are simply engineering shortcomings. For example, before cabal it was a huge pain to get libraries distributed and installed; now it is a breeze. Huge win. But the list of accidental frictions is long, and it will continue to take a lot of design and engineering work to sort out.

The road to popularity goes through 1) recognizing 2) solving social problems (like those misbeliefs and narratives).

Even if we were to solve all the sources of technical friction, we would still have the social issues of perception, training, certification, recruitment, and so on. I totally agree that it’s not just technical! I also agree that as a community we are less good at addressing social problems than technical ones.

But different people have different skills, and I’d love to hear more from folk with good ideas for addressing “social friction” rather than just “technical friction”.

thanks for starting this thread

Simon

24 Likes

Hi Simon,

This is the first time we’re talking to each other, I appreciate your detailed response.

I learned this from @tomjaguarpaw on Reddit/r/haskell. The exact quote is this:

Firstly, a point of information: (one of) the goal(s) of the Haskell Foundation is to broaden Haskell adoption. It not intended to push Haskell to industry specifically. (I personally happen to to believe it can’t do the former without the latter, but in principle there is a distinction.)

Maybe he can add something on this, because he said there was some discussion with other members of HF, and it’s better for us to get the info from the first hands of that discussion.

I was surprised, too. I often mention HF as an analog of Rust Foundation, and learning that they differ in goals was contradictory to what I thought.

I certainly don’t think that adoption is the only goal. It is essential as Haskell is still a reasearch language.

For our purposes the key word in Tom’s quote is “specifically”. This shouldn’t be taken to mean that industry adoption is necessarily a non-goal. If I’m intepreting him right, he’s saying that the stated purpose is to broaden adoption, and some might interpret that to include industry adoption as a subgoal, and some might not. I hope he’ll clarify if I’m misinterpreting him!

8 Likes

There may have been a miscommunication around “one of the goals” of the HF versus “the singular goal”. In my comment on the matter I was responding to the part of the talk which said:

There is a Haskell Foundation by the way. It’s an organization that is intended to push Haskell to the industry. It works almost for three years but Haskell is still on the decline[*] according to the graph.

I interpreted that to mean that “the singular goal of the HF is to push adoption Haskell in industry”. My comment in response was supposed to clarify that that is only one amongst many goals:

Firstly, a point of information: (one of) the goal(s) of the Haskell Foundation is to broaden Haskell adoption. It not intended to push Haskell to industry specifically. (I personally happen to to believe it can’t do the former without the latter, but in principle there is a distinction.)

So Simon is right: pushing for industry adoption is not the sole or primary goal of the HF, but it is a goal.

(To share more on my personal view: I happen to believe that making Haskell more suitable for adoption in industry should be the HF’s primary focus, but not all board members agree with me.)


N.B.: I’m the Vice Chair of the HF

[*] By the way, I don’t believe that the graph in question provides evidence of decline. For a comparison against Java and C# (as controls) see my comment on that topic on Reddit.

5 Likes

I don’t know what this means, but will try to avoid that.

1 Like

To what matters, I strongly believe HF should do some regular comprehensive sociology in order to have understanding of social and technical situation and to have a measurable Definition of Done to know if the goals are getting closer or not and what was done right/wrong.

So the HF can do that more quickly: are there any analogous organisations (e.g. the Python Steering Council or Rust Foundation) which carry out regular comprehensive sociology and have a measurable definition of “done” or “completed” ? Then the HF can use their experiences as a point of reference…

1 Like

I don’t quite know, but if they don’t do that, HF can be the first. I think the value of such sociology and a measurable (maybe unreachable) DoD can’t be denied

Or perhaps those analogous organisations just don’t require such mechanisms - if that’s the case, then neither does the HF.

1 Like

The Haskell community is by far the nicest and most welcoming community I’ve ever seen. Almost any other community would’ve repelled violently to such an endless stream of baseless accusations and straw man arguments like this one:

yet folks here keeping addressing them politely. Has anyone ever actually heard that software engineering is math? I certainly haven’t, it’s such a ridiculous take, almost like “biology is astronomy”. I can imagine somebody sufficiently crazy believes that software engineering is math, but is that common in the Haskell community? Absolutely not, in my opinion.

To me this all looks like an elaborated ad to boost the Alexander’s following on social media and sell more books, this isn’t an honest attempt to expose the limitations of our community. If you want to see how such an attempt would look like, check out Leaving Rust gamedev after 3 years: you’ll find there plentiful disclaimers, acknowledgements of own limitations, elaborate clarifications etc etc. And this is what the author thinks of Haskell by the way:

The closest thing to Rust’s view on ECS I can think of is Haskell, except, and I know this is an oversimplification but I’ll say it anyway, I do feel that the overall community in Haskell is a lot more mature, and that people in general tend to be more reasonable about the existence of other approaches, and view Haskell as a “fun tool to solve problems where it fits well”.

Haskell has its issues, but the critique here is just made up nonsense.

5 Likes