News for hackers. Stuff that matters.
Re:Haskell for a New Decade [pdf] by nh2 on Tuesday June 23, 2020 @07:45PM (#23621930)
Counter point on "investment":

I was in a Haskell team at Google, and have trained groups at various companies professionally. From that experience, for a normal developer with working experience in Java, Python, or C++:

* It takes 2-3 weeks of full-time onboarding (half with a coach, half self-study) to work on a typical industrial Haskell project.

* It takes around 3 months of full-time participation in such a project to know a wide array of libraries and feel ready to tackle almost anything.

The companies involved were happy to make this time investment for increased productivity over the time they expected their employees to stay with them.

On an individual level, it makes sense that if you're just getting into programming, and you have the choice between investing 2 weeks into Python to be productive, or 3 months for Haskell, you pick Python. It's rational. But after you've been in it for a few years, and you realise you want to do it for another 40 years, investing 3 months for life-long increased productivity (even if it's just a few percentage points; most feel the effect is larger) suddenly becomes a great deal.

Counter point on "complex topics":

After 6 years of industrial Haskell, I know nothing about category theory. It has not prevented me from using web frameworks.

Re:Haskell for a New Decade [pdf] by quickthrower2 on Tuesday June 23, 2020 @08:22PM (#23622279)
Thanks for that.

Everything you said is from the perspective on being not only in a Haskell job but in a Haskell team. Your 3 months is 5 years for someone trying to learn on their own in their spare time. And then they need this to get a Haskell job due to the competition for such job and the queue of super smart people lining up for a Haskell job. And the pay cuts are brutal. Now you are an outlier, working on a Haskell team for Google, the rare triad of using Haskell at work, presumably being well paid, and having that mentorship from other team members.

> After 6 years of industrial Haskell, I know nothing about category theory. It has not prevented me from using web frameworks.

As someone in as Haskell team, maybe this is possible. You don't have to try and pick apart the online knowledge. For example a lot of libraries use Lens. I want to understand Lens? It is not simple: check out the diagram on https://hackage.haskell.org/package/lens. "Yeah but it's just X Y Z". Great - I've been to many FP meetups, and seen a lot of stuff online and there is no simple help for this stuff.

Re:Haskell for a New Decade [pdf] by ArchD on Tuesday June 23, 2020 @08:59PM (#23622647)
> For example a lot of libraries use Lens. I want to understand Lens? It is not simple: check out the diagram on https://hackage.haskell.org/package/lens.

You're making it seem harder that it really is. Yes, it's hard if the package documentation is all you have, but that's the hard way to learn. There are other online unofficial documentation and tutorials (of diverse quality). There's also a book (https://leanpub.com/optics-by-example) that I find adequate for a reasonable learning experience (I think I would have saved much time if I had started learning lens using this book.). And, you don't need to know the entire lens package to use it. The most commonly used part of lens (Lens proper, not Prisms, Isos, etc) is only a small fraction of the whole thing.

Re:Haskell for a New Decade [pdf] by quickthrower2 on Wednesday June 24, 2020 @12:33AM (#23624122)
Ah OK, things have moved on in recent years. Maybe there are more resources out there than I thought.
Re:Haskell for a New Decade [pdf] by platz on Wednesday June 24, 2020 @01:44AM (#23624492)
and you can learn enough lens to be productive in 1 hours with this talk without reading docs at all.

You can skip the theory and go straight to usage: https://www.youtube.com/watch?v=QZy4Yml3LTY

Re:Haskell for a New Decade [pdf] by nh2 on Tuesday June 23, 2020 @11:15PM (#23623614)
> Your 3 months is 5 years for someone trying to learn on their own in their spare time.

I learned the key parts of Haskell in 3 months of my spare time from university (where I had much less spare time than I have now in industry). And that was at a time where learning Haskell was much harder than it is now; today there are a lot of really detailed books, tutorials, and videos available, tooling works out of the box with few surprises, and error messsages are way better.

Of course learning in your spare time does not give you as much practical experience and feedback as you get on a job, but it gets you enough to get into such a job.

> You don't have to try and pick apart the online knowledge.

Not any more.

* Step 1, buy a beginner book and work through it.

* Step 2, work through FP Complete's [1] Applied Haskell Syllabus (https://www.fpcomplete.com/haskell/syllabus/). This will make you comfortable with most day-to-day data structures, techniques, testing, benchmarking and so on.

* Step 3, practice building some small applications that you think companies will actually need. Web servers, input validation, streaming data processing, and so on. It doesn't have to be fancy or use "cool" techniques, it just has to be /useful/.

* Optional Step 4, for extra hireability: Become better-than-average in a specific topic. This could be testing, performance, developer tooling, documentation, web stuff, anything that gets your juices flowing. Do a bit of open-source work in that area. Go to some meetups or conferences to see who's hiring, what they are doing, and what might be useful for them

> I want to understand Lens?

Again, you don't need to do that to get a job. I've conducted ~ 40 technical interviews for filling Haskell positions for various companies, and none required this. What is required is that you can do normal /useful/ things, with the high amount of correctness, clarity, refactorability, and reliability that Haskell provides.

Haskell, like mathematics, knitting, and C++, offers near infinite avenues of special topics that you can deep-dive into if you want. People talk about those at meetups because they excite them. But you don't have to do that to build useful software or get a job.

[1] This is the consulting company as part of which I gave most of aforementioned training. It makes most of the training material publicly available.

Re:Haskell for a New Decade [pdf] by SparklingCotton on Wednesday June 24, 2020 @02:59AM (#23624905)
I've used lens for years and years, but don't fully grok it. Who cares? Lens is also like category theory, you don't need to understand the details in order to use it.
Re:Haskell for a New Decade [pdf] by Jeff_Brown on Wednesday June 24, 2020 @11:12AM (#23628771)
More generally, trying to learn the whole language -- for almost any language -- is usually a waste of time.
Re:Haskell for a New Decade [pdf] by lallysingh on Wednesday June 24, 2020 @09:55AM (#23627895)
Generally I easily found C++ as difficult to learn as Haskell. Mastering C++ takes a half-dozen books -- although that number's starting to reduce as the language is getting a bit cleaner. Haskell takes 2-3. The last is just the optics book, if you want to learn lenses, which are worth it.
Re:Haskell for a New Decade [pdf] by evertedsphere on Wednesday June 24, 2020 @03:37AM (#23625184)
Anecdata point: I'm comfortable with lens at a very basic level, and if you have a good grasp of "normal" Haskell you can just compose lens operators and use combinators by playing the usual "type tetris" game of "what fits here?" and eventually you pick up a few idioms that are enough for most normal lens usage.
Re:Haskell for a New Decade [pdf] by tluyben2 on Wednesday June 24, 2020 @03:48AM (#23625246)
There are many people (at least that from the developers I know) who need to understand things fully before they 'can' use them. One of my friends is mentally stuck for 30 years on a platform because he cannot use what he does not fully understand. He tried Haskell (a few years ago) but instead of going through exercises or just trying to implement something, he read a book and noticed he did not understand basic (monads and such...) things and quit. He cannot touch a computer unless understanding arrives first. He is an extreme case but many (especially non-entrepreneurial in my experience) people I know have this in some ways.
Re:Haskell for a New Decade [pdf] by giantDinosaur on Wednesday June 24, 2020 @08:38AM (#23627164)
So they're essentially non-functional with today's technology stack? I think it's safe to declare the entire thing essentially incomprehensible to a single person. Sure - you can understand all the basics, and achieve expertise in a lot of it, but modern software and computing is essentially fractal in its complexity. Even when you think you understand, it often ends up being an abstraction which is re-written by some routine further down, deep within some area which raises even more questions.
Re:Haskell for a New Decade [pdf] by somethingsome on Friday June 26, 2020 @11:08PM (#23659204)
Why would they be non-functional with today's technology stack? The whole stack is complex, but everything depends in general on very basic principles (eg: basic information knowledge about parallelism, how a compilation works, etc.. and hardware knowledge : how parallelism is handled, why do we need asynchronous jobs and how they work, etc..). Any complex piece of software can be decomposed into basic principles and very often without a lot of work. The only softwares that require more time to understand are the ones that solve some physical or mathematical problems IMO, as you need to understand the math underlying them. But again, this is not an impossible task
Re:Haskell for a New Decade [pdf] by jose_zap on Wednesday June 24, 2020 @04:00AM (#23625351)
Ask him to explain in full detail how the flushing mechanism of a WC works. Then ask him if he uses any alternative solution he understands better.

I think it is quite common, even for people who want to understand things at a fundamental level, to just use stuff without said understanding.

Re:Haskell for a New Decade [pdf] by akho on Wednesday June 24, 2020 @11:14AM (#23628802)
What sort of hidden knowledge do you see in the flushing mechanism? It’s pretty straightforward.

(If you don’t want to go into how plastics are made, &c — but that stretches the metaphor way too far)

Re:Haskell for a New Decade [pdf] by jose_zap on Wednesday June 24, 2020 @12:39PM (#23630274)
I would personally have trouble naming all of the pieces in the flushing mechanism and being able to put y them together if I asked someone to buy them for me. That’s seems to be the same for many people I know.
Re:Haskell for a New Decade [pdf] by somethingsome on Friday June 26, 2020 @11:02PM (#23659175)
It is not because you cannot name something that you don't understand something, even in profound levels.. the knowledge of the name is only conventional against the underlaying mechanism. It suffice to repair one wc, one time to have a pretty good idea on how it work without much effort
Re:Haskell for a New Decade [pdf] by akho on Monday June 29, 2020 @05:07PM (#23683082)
It’s easy to do. You should get at least some more handy friends — or become one yourself: it will broaden your understanding of your environment, most things are very easy to fix and change.
Re:Haskell for a New Decade [pdf] by tluyben2 on Wednesday June 24, 2020 @09:31AM (#23627658)
It is not so consistent; I guess when they think about it consciously, they want to understand it. For all the rest (more low level, a WC etc) they, inconsistently, do not care. It is not really for me to change their behaviour, I just know that some of them are really crippled by this.
Re:Haskell for a New Decade [pdf] by jose_zap on Wednesday June 24, 2020 @12:40PM (#23630295)
I agree, there is no point in trying to change their behavior, we can at best understand them and offer alternatives
Re:Haskell for a New Decade [pdf] by marcosdumay on Wednesday June 24, 2020 @01:00PM (#23630638)
Has he got any luck on that Quantum Mechanics and General Relativity harmonization or he simply avoids using a computer in a gravity wheel?
Re:Haskell for a New Decade [pdf] by pydry on Tuesday June 23, 2020 @07:58PM (#23622050)
I've always been somewhat skeptical of Haskell due to the scarcity of things you could point to and say "that was made with Haskell and it made it so much better". it's usually the same 3 pieces of software people point to, none of which are particularly noteworthy.

with rust, by contrast, which is ostensibly much less general purpose and hasn't been around as long there's already quite a collection and it's easy to see why it was chosen for those things.

Re:Haskell for a New Decade [pdf] by JoelMcCracken on Tuesday June 23, 2020 @08:37PM (#23622439)
Haskell does have an issue of people using it being more interested in doing clever things and researching topics than building cool applications.

Haskell jobs do exist, I have one of them. The big problem is that there are more people who want to do those jobs than there are jobs, so they seem very scarce.

But anyway there are also a number of investment banks I have heard that use Haskell as their “secret weapon” and do not advertise it, in fact those who could speak to details are all under NDA.

Personally I am hoping to help with this issue by building cool open source things in Haskell (and purescript)

I was skeptical for years for all the reasons you said, but I finally decided to set my skepticism aside and see for myself, and oh boy is Haskell great. It has a lot of problems, but I consider myself at least 2x more productive in Haskell.

Re:Haskell for a New Decade [pdf] by nh2 on Tuesday June 23, 2020 @10:13PM (#23623168)
> “secret weapon” and do not advertise it

Both Standard Chartered and Barclays loudly advertise that they use Haskell.

A quick web search turns up their job offers on Reddit, and both also send people to conferences such as Haskell eXchange, to talk about their team tasks, structure, and size. Example: [1]

Their code bases were discussed on HN before, e.g. [2].

Standard Chartered also funded the development of GHCs low-latency, non-stop-the-world, incremental GC, for 2 years until it was recently released [3].

[1] https://skillsmatter.com/skillscasts/9098-haskell-in-the-lar...

[2] https://news.ycombinator.com/item?id=13073605

[3] https://www.well-typed.com/blog/2019/10/nonmoving-gc-merge/

Re:Haskell for a New Decade [pdf] by dmitriid on Wednesday June 24, 2020 @02:03AM (#23624598)
Is Standard Chartered the bank that actually uses its own eager subset of Haskell and built everything in it from scratch?
Re:Haskell for a New Decade [pdf] by willtim on Wednesday June 24, 2020 @03:18AM (#23625034)
Yes Standard Chartered does have its own strict Haskell scripting language (Mu). But it mostly wraps C/C++ quant libraries, it's used as a alternative to Python (because Python is a bad idea at scale). GHC is used too and is what Mu was built in.
Re:Haskell for a New Decade [pdf] by tome on Wednesday June 24, 2020 @02:44AM (#23624817)
I'm not sure if you're being facetious or asking a genuine question. The answer is "yes", with the exception of the word "actually". The "eager subset" was written to target a pre-existing runtime, which before then only supported an in-house, fairly poorly-designed, functional language called Lambda. Some of the team there wanted to be able to use Haskell instead (understandably).

For stuff that doesn't require that runtime (as convenient as it is) they just use familiar old lazy GHC. My understanding is that they are progressively moving more and more to GHC, although my knowledge is five years out of date.

Re:Haskell for a New Decade [pdf] by dmitriid on Wednesday June 24, 2020 @02:59AM (#23624906)
> I'm not sure if you're being facetious or asking a genuine question.

A genuine one. I remember a presentation by a bank about their use of Haskell, and wasn't sure if it was Standard Chartered. I remember they had the subset, and mentioned they basically had to a lot from scratch to interface with various systems.

And now that I have the name, I found a link to someone's copy: https://dshevchenko.biz/hs-research/Haskell-in-the-Large.pdf (used to be available at code.haskell.org). My recollection of the paper isn't perfect :)

> My understanding is that they are progressively moving more and more to GHC, although my knowledge is five years out of date.

Ah, thank you!

Re:Haskell for a New Decade [pdf] by JoelMcCracken on Tuesday June 23, 2020 @10:33PM (#23623327)
There are numerous others who do not, though.
Re:Haskell for a New Decade [pdf] by goto11 on Wednesday June 24, 2020 @02:28AM (#23624743)
> use Haskell as their “secret weapon” and do not advertise it, in fact those who could speak to details are all under NDA.

I remember hearing this said about Perl back in the day! Language X is so awesome businesses use it in secret because they don't want their competitors to discover the secret to their success.

Not saying it couldn't happen, but you can say it about any language and it can't really be disproven.

Re:Haskell for a New Decade [pdf] by JoelMcCracken on Wednesday June 24, 2020 @06:29AM (#23626297)
Right. It’s frustrating. I’m not under NDA with them but I don’t want to get anyone into trouble, but even if I did name names I don’t think anyone would back it up.

This is why we need more publicity-visible Haskell success stories.

Re:Haskell for a New Decade [pdf] by goto11 on Wednesday June 24, 2020 @07:41AM (#23626735)
If the "secret weapon"-theory is true, then I guess the companies loudly proclaiming they use Haskell could just be trying to trick their competitors into using it...
Re:Haskell for a New Decade [pdf] by JoelMcCracken on Wednesday June 24, 2020 @03:04PM (#23632407)
Yeah I mean you can take it a lot of ways lol. I think some companies are just secretive about their practices and others are open.

Really the thing that convinced me to really dig into haskell was that there were so many things that I wanted to learn but so much of the extra information had roots in haskell topics. So i basically said "to achieve my goals I need to know haskell even if i never use it for anything practical".

Slowly, as I learned more, I realized it is great. I wish I had chosen to learn haskell 10 years ago instead of like two years ago.

Re:Haskell for a New Decade [pdf] by dTal on Wednesday June 24, 2020 @01:32PM (#23631099)
Not only can you, it is standardly asserted about a variety of obscure, fun languages. Lisp, APL, and J/K spring to mind.
Re:Haskell for a New Decade [pdf] by regisg on Wednesday June 24, 2020 @05:10AM (#23625804)
Top blockchain development in Haskell soon on Cardano... https://prod.playground.plutus.iohkdev.io/
Re:Haskell for a New Decade [pdf] by gilmi on Wednesday June 24, 2020 @02:16AM (#23624682)
This is a very good comment.
Re:Haskell for a New Decade [pdf] by svara on Wednesday June 24, 2020 @06:28AM (#23626295)
Parent comment said 100 hours to be productive, 1000 to be reasonable, so your experience (2-3 weeks, 3 months) is actually pretty close to that.
Re:Haskell for a New Decade [pdf] by foolmeonce on Wednesday June 24, 2020 @07:05AM (#23626517)
True, but then the multiple for C# is either nonsense or a false comparison of going between near identical languages or of writing code of very different quality and utility.

There are plenty of cases where a broken notebook is about as good as a spreadsheet, and languages suited/typical to that use have a psychological victory that results in apples to oranges comparisons.

Re:Haskell for a New Decade [pdf] by kungato on Wednesday June 24, 2020 @04:13AM (#23625446)
My first job was at faang and it took me 3 months to be productive in C# working on a compiler and everyone said 3 months is expected so 3 months for Haskell is nice
Re:Haskell for a New Decade [pdf] by cpeterso on Tuesday June 23, 2020 @10:22PM (#23623239)
Can you share what kind of system your Haskell team worked on at Google? I thought Google projects were limited to a few blessed languages. Once upon a time that was Java, C++, and Python but I guess that would now include Go and Rust (in parts of Fuchsia and possibly Chrome).
Re:Haskell for a New Decade [pdf] by seangrogg on Tuesday June 23, 2020 @11:33PM (#23623739)
Ex-googler here: While the "blessed languages" still exist in a way, it's mostly about not really needing to explain the language choice when considering/pitching a project. Choosing a different language (such as Haskell) is allowed, sure, but it'll be one more hurdle to clear when trying to get go-ahead compared to just using, say, Java.
Re:Haskell for a New Decade [pdf] by nh2 on Tuesday June 23, 2020 @11:23PM (#23623660)
Yes: Ganeti, an open-source cluster-management system:

https://en.wikipedia.org/wiki/Ganeti

Re:Haskell for a New Decade [pdf] by yomly on Wednesday June 24, 2020 @07:54AM (#23626825)
Incidentally, I am learning Haskell right now. And fwiw don't have a CS degree.

I think the difficulty of Haskell is overrated. It's just different. The crowd who complain about Haskell being hard despite x years experience are the same people who speak English and think Mandarin is hard.

And yet 1.7+ billion people speak Mandarin, and most linguists agree that English is actually the harder language owing to its more branched roots.

Haskell is what happens when you go full lambda calculus, and the dedication to referential transparency really forces you down some interesting paths/abstractions. It's also worth noting that other functional languages like OCaml and lisp do not force purity so the idioms are not as extreme.

The impedance mismatch essentially boils down to Turing Machine vs Lambda Calculus and as such you don't find many familiar friends when switching camp (to begin with, at least!) The Haskell idioms are very different and the consequences of referential transparency ripple throughout the way you need to think about computation.

It's also worth noting that Haskell is a language laid bare - much of the features and abstractions are plain-old functions which means you can "just" duck into them, implement them for yourself or read them as libraries. But what we often forget is all the abstractions we needed to learn when grokking "programming" (which was probably imperative style programming) the first time round. Most people have moved on from the time when trying to conceptualise what an object is or how methods work or even working with mutable state. When you get to design patterns - some of the implementations are quite complex the first time round. Eg the visitor pattern/double dispatch is not particularly simple when you sit down and manually expand the execution of those calls and yet when you use it, it's quite simple.

When we program with objects, most of us don't stop to think about vtables anymore* we just use the object to solve our immediate problem.

The more I see of Haskell, the more confident I am that it just uses a very different set of abstractions that you can just use and forget about except you get the benefit of a HM type system and referentially transparent code. It's also nice that that itself somewhat forces you towards a more functional-core imperative style architecture where your business logic is pure and mostly happy path code and your boundary is a bunch of monad imperative glue.

I think at the end of the day FP makes the hard things easy and the easy things hard. But as the Turing Machine and Lambda Calculus are equivalent then being adept at both schools is like having twice the arsenal for dealing with a given problem.

*naturally when performance becomes a problem you start to unravel abstractions.

Re:Haskell for a New Decade [pdf] by jiyinyiyong on Friday June 26, 2020 @04:12AM (#23649818)
> Haskell is what happens when you go full lambda calculus, and the dedication to referential transparency really forces you down some interesting paths/abstractions. It's also worth noting that other functional languages like OCaml and lisp do not force purity so the idioms are not as extreme.

Clojure does, in some degree.

Re:Haskell for a New Decade [pdf] by yomly on Friday June 26, 2020 @04:45AM (#23649983)
Clojure encourages functional style code through its immutable data structures and a set of (mostly) referentially transparent functions that operate on them.

But clojure is very strictly imperative. Atoms are easily accessible in the stdlib and side effects can be called inline and hidden within functions. This masks IO from a perceived return type.

Haskell differs here because it forces you down the path of "everything explicit" and "everything referentially transparent". Essentially monads emerge as a result of this, but their use definitely feels unergonomic in clojure

Re:Haskell for a New Decade [pdf] by platz on Wednesday June 24, 2020 @11:50AM (#23629360)
I agree, well stated!
Re:Haskell for a New Decade [pdf] by hopia on Wednesday June 24, 2020 @04:05AM (#23625386)
I'd say it took roughly 3 months on my own to learn enough Haskell to write a web server that does what I want. So I'd expect with professional coaching a smart person would end up on a decent level in 3 months, ready to put code to production.
Re:Haskell for a New Decade [pdf] by dmitriid on Wednesday June 24, 2020 @02:00AM (#23624583)
> It takes 2-3 weeks of full-time onboarding > It takes around 3 months of full-time participation

Compare that to Erlang's half a day to a day for onboarding, and one to two weeks before pushing stuff to prod.

I can't imagine any company that could afford three full-time weeks of onboarding.

> investing 3 months for life-long increased productivity (even if it's just a few percentage points; most feel the effect is larger)

The tales of increased productivity are purely anecdotal. Especially if you're talking about a few percentage points.

Re:Haskell for a New Decade [pdf] by jerf on Wednesday June 24, 2020 @09:20AM (#23627508)
"Compare that to Erlang's half a day to a day for onboarding,"

Erlang's a half day for onboarding if you're onboarding a Haskell programmer, not because Haskell programmers are that awesome but because they've already had to learn the hard things involved in Erlang to work with Haskell [1]. Otherwise, that's ludicrous nonsense. Most programmers will need several hours just to figure out how to write the equivalent of lists:map in the new Erlang, immutable world, more hours to figure out how to write things non-trivially with it, and a good couple of weeks at a bare minimum to figure out how to structure applications in an OTP world, then some more time to figure out how to debug it.

It's not especially harder than learning SQL or the latest Javascript framework or other things that aren't Algol-descended languages, but it's nowhere near that easy.

[1] I went the other way. I found Erlang an excellent introduction to Haskell; you get to absorb some of the challenges like working in pervasive immutability in an environment where you're not also swallowing a complicated type system or strict effects separation.

Re:Haskell for a New Decade [pdf] by Rick1 on Wednesday June 24, 2020 @02:02AM (#23624590)
> I can't imagine any company that could afford three full-time weeks of onboarding.

Oh yes. Months even. Routinely.

Re:Haskell for a New Decade [pdf] by co_dh on Tuesday June 23, 2020 @08:46PM (#23622520)
It was google, a bad sample of programmers.
Re:Haskell for a New Decade [pdf] by nh2 on Tuesday June 23, 2020 @10:01PM (#23623087)
It's odd how the various smaller companies I referred to, many of which are normal enough that you may never have heard of them, get summarised as "It was Google". I only mentioned it to also include the largest org I know where onboarding onto a Haskell project was not a problem.
Re:Haskell for a New Decade [pdf] by sizeofchar on Tuesday June 23, 2020 @10:23PM (#23623242)
I think he meant "bad sample" in the sense that those programmers aren't representative of abilities of average programmers. Ie, he thinks Google programmers are top programmers.
Re:Haskell for a New Decade [pdf] by nh2 on Tuesday June 23, 2020 @11:25PM (#23623676)
I got that, and it's an often-heard argument, which is why I stated that it worked as described for other companies as well.