Why Does Everyone Hate Haskell, Jazz, and Pure Math?
The article argues that Haskell, jazz, and pure mathematics, often seen as elitist, are crucial for innovation, leading to practical advancements in programming and music, benefiting society overall.
Read original articleThe article discusses the common disdain for Haskell, jazz, and pure mathematics, often perceived as elitist and irrelevant due to their steep learning curves and abstract nature. Critics argue that these fields produce little practical value, with Haskell programmers creating complex code, jazz musicians playing for each other, and mathematicians engaging in seemingly pointless puzzles. However, the author contends that these disciplines serve as vital playgrounds for innovative ideas that eventually permeate mainstream applications. Concepts like higher-order functions and strong static typing, once considered esoteric, have become integral to modern programming, enhancing efficiency and usability. Similarly, avant-garde musical techniques have influenced popular music, enriching its complexity and appeal. The article emphasizes that theoretical pursuits often lead to significant practical advancements, citing historical examples like Michael Faraday's discoveries in electromagnetism. The author encourages appreciation for those engaged in these highbrow fields, suggesting that their explorations, while initially appearing impractical, can yield profound benefits for society. By venturing into these areas, individuals may uncover valuable insights and innovations that enhance everyday life. The piece ultimately advocates for a broader understanding of the importance of theoretical work in driving progress across various domains.
Related
I Probably Hate Writing Code in Your Favorite Language
The author critiques popular programming languages like Python and Java, favoring Elixir and Haskell for immutability and functional programming benefits. They emphasize personal language preferences for hobby projects, not sparking conflict.
Math is running out of problems
Mathematics faces a decline in engaging problems, emphasizing complexity and specialization. Advocates propose prioritizing simplicity and elegance over quantity in research to maintain relevance and impact.
Don't Let Architecture Astronauts Scare You
Joel Spolsky critiques "Architecture Astronauts" for prioritizing high-level abstractions over practical software solutions, urging developers to focus on user needs and tangible outcomes rather than complex architectural concepts.
Fear of over-engineering has killed engineering altogether
The article critiques the tech industry's focus on speed over engineering rigor, advocating for "Napkin Math" and Fermi problems to improve decision-making and project outcomes through basic calculations.
Objective-C is like Jimi Hendrix (2014)
The author compares Jimi Hendrix's influence on guitar music to Objective-C's impact on programming, noting how perceptions of its features have evolved as newer languages emerged, reflecting on programming history.
It's just wrong to ascribe the popularisation of HOFs like `map` to Haskell. `map` was there in good old (practical) Lisp 1.5 back in the 1960s. Why ascribe this to Haskell (released 1990) rather than Lisp? Guido said Python v1 (1994) got HOFs "courtesy of (I believe) a Lisp hacker who missed them"[1], Ruby had blocks in V1 (1995). Haskell's research direction was not about very, very old news like HOFs, it was about non-strict evaluation, and cool type system stuff.
[1] https://www.artima.com/weblogs/viewpost.jsp?thread=98196
The promise is that you learn this difficult language and you gain a higher-level, cerebral understanding of software, and the type system protects you from bugs.
The reality is that you realize that this language was designed by a merry bunch of category theorists who had little interest in software engineering. The effort put into different parts of the language is super unbalanced. GHC is an impressive feat of compiler engineering. But the other tooling is poor, and so is support for basic features such as records.
Whatever extra bugs are caught by Haskell’s elaborate type system that wouldn’t be caught by a simple type system like Java’s, are replaced by bugs introduced by laziness.
Jazz is a bit different. Non-musicians generally don’t enjoy it. The more knowledge you have of Jazz the more you appreciate it.
Actually, let's be honest, there is hardly a soul that knows what Haskell is either. So hate is not really a great word for this title, nor is the use of jazz and pure math.
Joking aside, 80% of the benefit of functional programming in practice, in my experience, comes from referential transparency, expression-based programming, and sum types. It's even fine to allow for procedural code inside of these referentially transparent functions. The effects these features have on program structure, logic flow, and data structures are profound enough that the benefit of IO monads and other more pure features have diminishing returns for the extra elbow grease that needs to be put in. It's also fine to break the rules in a number of cases you can hopefully count on one hand; stateful code needs to be isolated and well-understood.
* https://www.theonion.com/aging-rock-musician-realizes-it-tim...
"Haskell? I was into those guys before they were cool. Miranda, man, that even had diagonal comprehensions... Have you heard of Hope? Kiff this, mec..."
Lagniappe: https://www.youtube.com/watch?v=nSKp2StlS6s
Jazz musicians literally so, and to a much more insidious degree than Haskellers or mathematicians.
That is-- jazz musicians fall prey to the tendency to fill time with content pulled directly from the exercises they used to gain proficiency on their instrument. These can be simple iterations that step through a sequence of pitches, enumerating through the degrees of the pentatonic scale, compulsively sequencing through patterns in an octatonic scale, etc.
Worse, this tendency can strike old timers just as easily as newcomers. Coltrane famously began to normalize his improvised lines to patterns he'd practice that were straight out of Slonimsky's book of exercise patterns.
To get a sense of how annoying this can be even to jazz insiders-- imagine a math paper written by five researches. They read the paper aloud at a conference, and when one of them gets to the summation symbol, they immediately explain to the audience:
"So for example, here you'd add one, two, three, four, five, six, seven, eight, nine, and so forth..."
As each researcher reads their section of the paper, they do this, incessantly, for every symbol that can possibly be explained with sequences of numbers.
I don't like imperative languages trying to do functional programming. Especially Javascript. It's just pain to debug a `.filter().map().reduce()` chain, you have to create a separate variable every time you want to insert a `console.log` there somewhere to figure it out.
Also I don't like functional programming eating away the performance. You can sure write 3 O(n) loops easily, but you can't see the instant wins to optimize it the same way you can with imperative programming. Maybe the third loop wanted to reuse something that could be found in the first loop? With imperative programming: Great, put it in a variable outside of the first loop, and fill it. With functional programming: Change all the types in the loops to fit this new variable, and remember to return it through all these functions.
EDIT:
Also as jordigh pointed out here https://news.ycombinator.com/item?id=41160794 I don't like how functional programming obfuscates performance a bit. With imperative languages what you code is what you get. Functional languages do so much more behind the scenes, that it's hard to figure it out some times.
Functional programming as in "strong static typing and algebraic data types"? ML.
I try not to begrudge anyone their enjoyment of anything, and I like jazz, for the record. It's good that we have a language for people who want to do Haskell-y things, and y'know, Pandoc is nice.
But this blog had an opportunity to make the case that Haskell innovations are trickling down into mere programming languages for squares (for the squares out there, if you don't like jazz, you're a square), and they offered two things which don't come from Haskell.
So I put it to you, Hacker News: what did the author miss? Where are the great Haskell innovations us mere programmers now benefit from?
I just wish for a dialect with strict evaluation, and side effects instead of the IO monad.
It is a bit like a high level version of Rust, targeted at building web applications, handling concurrency by replacing the borrow checker with Erlang's processes – since it runs in the Erlang's virtual machine.
But I quibble with the broad inclusion of "jazz" in the list. I don't really like the idea that jazz is this never-ending process of avant-garde musical boundary pushing. There are these cults of personality around artists like Miles Davis and Coltrane, and at some point people decided that "easy-listening", "smooth jazz", and "elevator music" were the nadir of "cool", but those particular cultural trends don't necessarily define jazz as a whole. It's also reasonable to regard jazz as having a matured musical vocabulary that we can construct accessible tunes out of without pushing boundaries all the time. I suspect a lot more people do enjoy "lounge" jazz than would admit it.
Many languages fall into this tarpit and will never escape.
I would instead say -
I dislike Haskell because when I tried this book http://web.archive.org/web/20190705205338/https://www.cs.yal... about 20 years ago I thought it had been written in an effort to impress upon the reader how smart anyone using Haskell was, at the expense of me getting anything done.
I like various forms of Jazz but I dislike a certain type of Jazz person who seems to be in to Jazz to let you know just how much better they are than you.
I don't think I've ever had anything but enjoyment and admiration for pure math and pure mathematicians.
I'm not sure I like this blog post though.
Where would F# fall, wouldn't it be hitting the sweet spot of 'Safe' and 'Useful'.
There's a difference between working on something because it is interesting and fun, essentially "hacker mentality" and it turning into something special vs pure theory and it never having use. One tinkers with the world building things, the other just adds complexity to abstract ideas with no utility.
tl;dr Faraday was a tinkerer, pure theory are fiction world builders.
Popular music with 4 cords progressions, languages like python that people need or basic math are popular. People can hate python, or basic math or reggaeton because they are everywhere.
I am a Lisper and Haskell programmer myself(along other languages) and I can tell you the proportion of people that I know that know what Lisp is is a minority, like 1% of the general population. I would say 10-20% of the population knows what Fortran or C is.
"Their practicioners seem to be divorced from the real world. They don’t actually produce anything useful. Rather than working on practical things that everyone can enjoy, they seem to be caught up in silly exercises just to show off to other nerds."
That is right. Most people in the Haskell community are totally divorced from reality. I would say more, they are not interested in reality at all. Do not tell them about engines or User Interfaces or databases. Not interested at all. They also love Pure Math problems.
I don't see the problem with that. I see the problem when people that are not interested in reality want to rule reality like millionaire children's intellectuals(Engels and Marx, Trotsky, Lenin...) wanted to rule work without having worked in their entire lives.
I see a problem if someone that told me he is not interested in how the User Interface of my app(or any user interface btw) works is telling me that I have to rewrite it in Haskell because it is perfect in his mind.
I find Haskell ideas useful up to a level, but not further than that. While science comes from philosophy and philosophy comes from love to knowledge by itself, most people doing philosophy in the past was wealthy people whose wealth came from somewhere else, like commerce having a fertile land.
Related
I Probably Hate Writing Code in Your Favorite Language
The author critiques popular programming languages like Python and Java, favoring Elixir and Haskell for immutability and functional programming benefits. They emphasize personal language preferences for hobby projects, not sparking conflict.
Math is running out of problems
Mathematics faces a decline in engaging problems, emphasizing complexity and specialization. Advocates propose prioritizing simplicity and elegance over quantity in research to maintain relevance and impact.
Don't Let Architecture Astronauts Scare You
Joel Spolsky critiques "Architecture Astronauts" for prioritizing high-level abstractions over practical software solutions, urging developers to focus on user needs and tangible outcomes rather than complex architectural concepts.
Fear of over-engineering has killed engineering altogether
The article critiques the tech industry's focus on speed over engineering rigor, advocating for "Napkin Math" and Fermi problems to improve decision-making and project outcomes through basic calculations.
Objective-C is like Jimi Hendrix (2014)
The author compares Jimi Hendrix's influence on guitar music to Objective-C's impact on programming, noting how perceptions of its features have evolved as newer languages emerged, reflecting on programming history.