
Sorry if this comes across as the rant it is. If you are interested in doing useful stuff rather then navel gazing please stop here. Where are compute languages going? I think multi core, distributed, fault tolerant. So you would end up with a computer of the sort envisioned by Hillis in the 80s with his data parallel programs. The only language that seems even close to this model is Erlang. What am I missing about the ability of Haskell to distribute across processors or a network? Say instead of fault tolerant it is fault avoiding. Can proving programs correct (with Haskell) really reduce our workload? http://www.seas.upenn.edu/~sweirich/wmm/03-benton.pdf Finally is Haskell a language for programming or a mental gymnasium that might be the proving ground for concepts in the next popular language? To quote from a post on the topic "Old functional programming ideas " on programming.reddit.com "Church-Turing equivalence tells us that all models of recursive computing have the same formal power. But it tells us nothing about which models are the most effective way for humans to understand and express definitions of functions. For some reason I'd expect researchers in programming languages to have a lot of opinions on this subject. But they don't seem to talk about it much. Instead, a cynical and mean-spirited person might come to the conclusion that PL researchers (such as Wadler) are actually just mathematicians, who happen to have discovered a new name for their specialty which comes with a lot more funding. They certainly seem quite comfortable working in a notation that almost no programmers understand or seem to be learning. If a responsible scientist wanted to counter this cynical, mean-spirited, and generally Luddite and Philistine argument, what would he or she say?"

david.curran:
Where are compute languages going? I think multi core, distributed, fault tolerant. So you would end up with a computer of the sort envisioned by Hillis in the 80s with his data parallel programs. The only language that seems even close to this model is Erlang. What am I missing about the ability of Haskell to distribute across processors or a network?
Data parallel Haskell is a very active area at the moment, http://www.cse.unsw.edu.au/~chak/project/dph/ Just last week Roman Leshchinskiy was able to get parallel arrays running SMP GHC on a shared memory 40 cpu Sun sparc server :) Also, GPH and its ilk have a long history: http://www.haskell.org/haskellwiki/Research_papers/Parallelism_and_concurren... -- Don

On Sep 28, 2006, at 8:47 PM, David Curran wrote:
Sorry if this comes across as the rant it is. If you are interested in doing useful stuff rather then navel gazing please stop here.
Where are compute languages going? I think multi core, distributed, fault tolerant. So you would end up with a computer of the sort envisioned by Hillis in the 80s with his data parallel programs. The only language that seems even close to this model is Erlang. What am I missing about the ability of Haskell to distribute across processors or a network?
Say instead of fault tolerant it is fault avoiding. Can proving programs correct (with Haskell) really reduce our workload? http://www.seas.upenn.edu/~sweirich/wmm/03-benton.pdf
I read that paper as saying formal methods have an extremely steep learning curve and large initial investment, but that the learning and initial investment pay off over time. The author found that, even in the short time he worked with it, formal methods saved time when he needed to modify his definitions (third paragraph in the second column). As with many automation tasks, the payoff comes with repeated identical or similar iterations. Furthermore, his acquired knowledge transferred well to an unrelated project. I can personally vouch for many of his experiences, having worked some with Coq myself.
Finally is Haskell a language for programming or a mental gymnasium that might be the proving ground for concepts in the next popular language? To quote from a post on the topic "Old functional programming ideas " on programming.reddit.com
I don't know how much you agree with this quote, but for the purposes of discussion I'll assume that you have expressed these views personally. You did, after all, preface your message by saying it was a rant so I'm going to assume you're prepared for the flames. ;-)
"Church-Turing equivalence tells us that all models of recursive computing have the same formal power. But it tells us nothing about which models are the most effective way for humans to understand and express definitions of functions. For some reason I'd expect researchers in programming languages to have a lot of opinions on this subject. But they don't seem to talk about it much.
I think the Haskell community is doing better than many in this regard. There is a concurrent thread on haskell-prime occurring _right now_ about whether pattern guards should be in Haskell'. The primary point of disagreement is about whether pattern guards are a more effective way for humans to understand and express definitions of functions or not! The ages-old disagreement about top-level state is similar, if more heated. Similar for (n+k) patterns, and a host of other issues. The endless discussions about monads often revolve around the goal of achieving new and better ways to express complicated function definitions. I think this is because a fundamental value of the Haskell community is flexibility of the language. Many languages are presented to the programmer as a complete package, which doesn't encourage them to consider the various possible design decisions that went into creating that language. With Haskell, new users are often quickly confronted with various different ways of expressing their goals and with extensions they can enable (or not) and are forced to consider how best to express their program. I think this is more good than it is bad.
Instead, a cynical and mean-spirited person might come to the conclusion that PL researchers (such as Wadler) are actually just mathematicians,
You seem to say this like its a bad thing; I completely disagree. I don't think of myself as mean-spirited, and I have no problems calling, eg, Wadler a mathematician. Just as I would call Church and Turing and Kleene and Goedel and Milner (etc, etc, etc) mathematicians. If someone were ever to call _me_ a mathematician, I would consider it an honor. Furthermore, if anyone attempted to belittle these distinguished persons or their accomplishments by calling them "just" mathematicians, I would begin to question his or her qualifications to have an opinion on the subject worthy of consideration. The field mathematics has a long and glorious history of helping people to solve real problems. I don't understand this undercurrent of antagonism that some people in our field have towards it. Let's be honest: developing correct programs that perform non-trivial tasks and reasoning about them is HARD. The techniques of mathematics and its sister discipline formal logic can help us with these tasks. I find it a little strange that this position even requires a defense. All of the other scientific and engineering disciplines embrace the mathematics that help them do their work. I don't believe there are very many physicists who would call Newton a mathematician and intend it to be a derogatory term. I personally see some of the primary goals of PL research as 1) to explore new ideas in PLs (obviously) and 2) to try to close the gap between the mathematics underlying computation and the realities of programming in the trenches. I think Haskell has spurred great advances toward both of these goals, and has come closer to achieving the second than any other language I know of (with the possible exception of SML, but *grumble* side-effects *grumble*, etc)
who happen to have discovered a new name for their specialty which comes with a lot more funding. They certainly seem quite comfortable working in a notation that almost no programmers understand or seem to be learning.
Call me elitist if you want, but I don't want anyone who refuses or is unable to learn calculus to be, eg, a civil engineer. He don't have to be an expert in real analysis, but if he don't understand the basics, I don't want him building any bridges that I'm going to be driving on! In a similar way, if a someone refuses or is unable to learn the mathematical foundations of computation, I don't think I really want him programming any systems that I'm going to be relying on. He don't need to be an expert in category theory, but if programmers aren't learning the skills they need to understand the basics and mathematical notation of PL theory, then something is very, very wrong. (Not to beat you over the head with my point, but what I'm saying is that programmers really ought to know this stuff and the fact that most do not is a terrible state of affairs).
If a responsible scientist wanted to counter this cynical, mean-spirited, and generally Luddite and Philistine argument, what would he or she say?"
Mu Rob Dockins Speak softly and drive a Sherman tank. Laugh hard; it's a long way to the bank. -- TMBG

After some thought on your replies I have realised that I was completely wrong.
1. Software needs to be concurrent
Haskell is doing more towards this goal then any other language I know of
2. Software should be provably correct.
Haskell is doing more towards this goal then any other language I know
of. ML and Haskell do seem to be the only communities really trying to
do this. Current systems do need to be easier to use though.
3. Haskell might be too academic
1 and 2 seem to indicate it is academic in the sense of finding out
useful things that a company might consider too blue sky to invest in.
So it might be too academic for now but for five years time maybe not.
David
On 29/09/06, Robert Dockins
On Sep 28, 2006, at 8:47 PM, David Curran wrote:
Sorry if this comes across as the rant it is. If you are interested in doing useful stuff rather then navel gazing please stop here.
Where are compute languages going? I think multi core, distributed, fault tolerant. So you would end up with a computer of the sort envisioned by Hillis in the 80s with his data parallel programs. The only language that seems even close to this model is Erlang. What am I missing about the ability of Haskell to distribute across processors or a network?
Say instead of fault tolerant it is fault avoiding. Can proving programs correct (with Haskell) really reduce our workload? http://www.seas.upenn.edu/~sweirich/wmm/03-benton.pdf
I read that paper as saying formal methods have an extremely steep learning curve and large initial investment, but that the learning and initial investment pay off over time. The author found that, even in the short time he worked with it, formal methods saved time when he needed to modify his definitions (third paragraph in the second column). As with many automation tasks, the payoff comes with repeated identical or similar iterations. Furthermore, his acquired knowledge transferred well to an unrelated project. I can personally vouch for many of his experiences, having worked some with Coq myself.
Finally is Haskell a language for programming or a mental gymnasium that might be the proving ground for concepts in the next popular language? To quote from a post on the topic "Old functional programming ideas " on programming.reddit.com
I don't know how much you agree with this quote, but for the purposes of discussion I'll assume that you have expressed these views personally. You did, after all, preface your message by saying it was a rant so I'm going to assume you're prepared for the flames. ;-)
"Church-Turing equivalence tells us that all models of recursive computing have the same formal power. But it tells us nothing about which models are the most effective way for humans to understand and express definitions of functions. For some reason I'd expect researchers in programming languages to have a lot of opinions on this subject. But they don't seem to talk about it much.
I think the Haskell community is doing better than many in this regard. There is a concurrent thread on haskell-prime occurring _right now_ about whether pattern guards should be in Haskell'. The primary point of disagreement is about whether pattern guards are a more effective way for humans to understand and express definitions of functions or not! The ages-old disagreement about top-level state is similar, if more heated. Similar for (n+k) patterns, and a host of other issues. The endless discussions about monads often revolve around the goal of achieving new and better ways to express complicated function definitions.
I think this is because a fundamental value of the Haskell community is flexibility of the language. Many languages are presented to the programmer as a complete package, which doesn't encourage them to consider the various possible design decisions that went into creating that language. With Haskell, new users are often quickly confronted with various different ways of expressing their goals and with extensions they can enable (or not) and are forced to consider how best to express their program. I think this is more good than it is bad.
Instead, a cynical and mean-spirited person might come to the conclusion that PL researchers (such as Wadler) are actually just mathematicians,
You seem to say this like its a bad thing; I completely disagree. I don't think of myself as mean-spirited, and I have no problems calling, eg, Wadler a mathematician. Just as I would call Church and Turing and Kleene and Goedel and Milner (etc, etc, etc) mathematicians. If someone were ever to call _me_ a mathematician, I would consider it an honor. Furthermore, if anyone attempted to belittle these distinguished persons or their accomplishments by calling them "just" mathematicians, I would begin to question his or her qualifications to have an opinion on the subject worthy of consideration.
The field mathematics has a long and glorious history of helping people to solve real problems. I don't understand this undercurrent of antagonism that some people in our field have towards it. Let's be honest: developing correct programs that perform non-trivial tasks and reasoning about them is HARD. The techniques of mathematics and its sister discipline formal logic can help us with these tasks. I find it a little strange that this position even requires a defense. All of the other scientific and engineering disciplines embrace the mathematics that help them do their work. I don't believe there are very many physicists who would call Newton a mathematician and intend it to be a derogatory term.
I personally see some of the primary goals of PL research as 1) to explore new ideas in PLs (obviously) and 2) to try to close the gap between the mathematics underlying computation and the realities of programming in the trenches. I think Haskell has spurred great advances toward both of these goals, and has come closer to achieving the second than any other language I know of (with the possible exception of SML, but *grumble* side-effects *grumble*, etc)
who happen to have discovered a new name for their specialty which comes with a lot more funding. They certainly seem quite comfortable working in a notation that almost no programmers understand or seem to be learning.
Call me elitist if you want, but I don't want anyone who refuses or is unable to learn calculus to be, eg, a civil engineer. He don't have to be an expert in real analysis, but if he don't understand the basics, I don't want him building any bridges that I'm going to be driving on!
In a similar way, if a someone refuses or is unable to learn the mathematical foundations of computation, I don't think I really want him programming any systems that I'm going to be relying on. He don't need to be an expert in category theory, but if programmers aren't learning the skills they need to understand the basics and mathematical notation of PL theory, then something is very, very wrong. (Not to beat you over the head with my point, but what I'm saying is that programmers really ought to know this stuff and the fact that most do not is a terrible state of affairs).
If a responsible scientist wanted to counter this cynical, mean-spirited, and generally Luddite and Philistine argument, what would he or she say?"
Mu
Rob Dockins
Speak softly and drive a Sherman tank. Laugh hard; it's a long way to the bank. -- TMBG
-- It chews up lies and spits out the gristle of truth http://liveatthewitchtrials.blogeasy.com/

<snip>
Call me elitist if you want, but I don't want anyone who refuses or is unable to learn calculus to be, eg, a civil engineer. He don't have to be an expert in real analysis, but if he don't understand the basics, I don't want him building any bridges that I'm going to be driving on!
Excellent point that certainly does not make one an elitist. Many engineering disciplines such as civil, chemical, architectural, aerospace, etc. enjoy a mature relationship between their best design practices and mathematics/hard science. Also note that a bad bridge almost certainly endangers multiple peoples' lives (consider the history behind http://www.ironring.ca/).
In a similar way, if a someone refuses or is unable to learn the mathematical foundations of computation, I don't think I really want him programming any systems that I'm going to be relying on. He don't need to be an expert in category theory, but if programmers aren't learning the skills they need to understand the basics and mathematical notation of PL theory, then something is very, very wrong. (Not to beat you over the head with my point, but what I'm saying is that programmers really ought to know this stuff and the fact that most do not is a terrible state of affairs).
I hope to someday agree with this, but for now I cannot. The fact of the matter is it's a rare case when a programmer's lack of mathematical background threatens lives. If my GUI crashes, I'm angry but not injured. Programmers make a living without the math background because the vast majority of employers don't seek it--their products simply don't need it. Note that I said "rare case"; I think there are plenty of safety critical programs out there. Consider the shuttle, deep-sea equipment, military or medical equipment, etc. Now if the programmer you're worred about is on one of these projects, I most certainly share your unease. Software engineering is as of yet misnamed. A professional engineer's design work should never include figuring out why the first attempt exploded/collapsed/failed--professionals in mature engineering fields only debug catastrophes. My intended takeaway is that design in software engineering does not yet compare to design in the mature engineering fields. In my engineering-centric opinion, the goal of computer science is to enrich the design principles of software engineering so that it does compare. [Disclaimer regarding that paragraph's punch-line: there's obvious gradations between engineering fields, as well as gradations within a field between researchers progressing the best practices and professionals simply using best practices.]
If a responsible scientist wanted to counter this cynical, mean-spirited, and generally Luddite and Philistine argument, what would he or she say?"
Mu
Rob Dockins
Speak softly and drive a Sherman tank. Laugh hard; it's a long way to the bank. -- TMBG
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Nick Frisby

Nicolas Frisby said: {....} The fact of the matter is it's a rare case when a programmer's lack of mathematical background threatens lives. If my GUI crashes, I'm angry but not injured. Programmers make a living without the math background because the vast majority of employers don't seek it--their products simply don't need it. Note that I said "rare case"; I think there are plenty of safety critical programs out there. Consider the shuttle, deep-sea equipment, military or medical equipment, etc. Now if the programmer you're worried about is on one of these projects, I most certainly share your unease. {...} All those angry office workers with those crashing GUI's cost hundreds of millions of dollars every year... arguably some billions perhaps.. And besides deep space probes and aircraft, there are many machines out in industrial plants that have some pretty dangerous processes and such running on computer instructions... right to a dryer that maybe doesn't shut off the heating element when it should due to a glitch in a program... and burns up. Now as to the need for EVERY programmer to know discreet mathematics and know how to run a proof through a theorem prover, and understand fully all the nuances of lambda calculus, and pi calculus, and all those other calculuses and such.. well, I guess that is why I am happy to be using tools like Haskell, or the ML family of languages, because at least the tool is built by folks the like of Wadler, Peyton Jones, and many other out and out academics and highly skilled and brilliant mathematicians. That means that I benefit from the type checking {and inference} that make my programs more likely to be correct on the first go. I have found that to be the case so far. I was able to build an equation solver in three variable and basically unlimited number of terms in about 6 hours, that would have taken probably weeks to complete in any language other than Haskell or one of the other functionals that support higher order functions, and the mapping and folding functions, and list comprehensions etc. I am just a happy camper that I have the ability to use such fine tools, and not have to be lost in the catacombs of mediocrity: ie. Java, C++, C, and C#. good programming, gene

On 30/09/2006, at 6:15 AM, Nicolas Frisby wrote:
Software engineering is as of yet misnamed. A professional engineer's design work should never include figuring out why the first attempt exploded/collapsed/failed--professionals in mature engineering fields only debug catastrophes.
That is only the case when engineers are performing pure development. When they are involved in research, engineers first attempts routinely explode/collapse/fail. Building a house, bridge, refinery, family car, etc, stopped being research a long time ago. However F1 racing cars, and interplanetary autonomous vehicles are. Software Engineering is so new a discipline that we still don't know how to render any but the most trivial of problems 'pure design'.
My intended takeaway is that design in software engineering does not yet compare to design in the mature engineering fields. In my engineering-centric opinion, the goal of computer science is to enrich the design principles of software engineering so that it does compare.
I couldn't agree more. So I'm going to quote the passage from Robert
Dockins that you objected to.
On 29/09/06, Robert Dockins
In a similar way, if a someone refuses or is unable to learn the mathematical foundations of computation, I don't think I really want him programming any systems that I'm going to be relying on. He don't need to be an expert in category theory, but if programmers aren't learning the skills they need to understand the basics and mathematical notation of PL theory, then something is very, very wrong. (Not to beat you over the head with my point, but what I'm saying is that programmers really ought to know this stuff and the fact that most do not is a terrible state of affairs).
Of course we will have hobbyist programmers, in much the same way we have home handymen or backyard mechanics. However anyone claiming to be a professional programmer has to deal with everything they do not being pure design, but containing a non-trivial element of research. For that reason I have to agree with Robert. I too am very concerned at the number of programmers writing code that I rely on who don't have a basic understanding of the mathematical foundations of what they do. Andrae -- Andrae Muys andrae@netymon.com Principal Mulgara Consultant Netymon Pty Ltd
participants (6)
-
Andrae Muys
-
David Curran
-
dons@cse.unsw.edu.au
-
Gene A
-
Nicolas Frisby
-
Robert Dockins