Description
Hi,
I am opening this issue as advised by @tomjaguarpaw , following up on the discussion I started on Haskell Foundation Slack.
I have been using Haskell for years but few days ago I wanted to check what is the current recommended way to install Haskell, hoping I might clean up my mess that somehow works but I can't even remember how I set it up (I am on ArchLinux, using Stack, didn't use ghcup so far).
In this process I actually ended up having a hard time figuring out what is the current recommended approach, which is I am writing this.
My journey
I went to haskell.org first, but didn't see any obvious link/button that would guide me to setting up Haskell on my machine. I did see the "Downloads" link in the top navbar, but it wasn't emphasized in any way, and I usually expect from "Downloads" to be a list of binaries, which wasn't what I was looking for, I was looking for a "Getting started" kind of thing that will take me through the process of setting up Haskell.
I scrolled through the whole webpage and saw link to Haskell wiki at the bottom, so I concluded that might have section "Beginners" or "Getting started" or smth and I clicked on that.
On haskell wiki I saw catchy orange "Download Haskell" button on haskell wiki. That button took me to haskell.org/platform, where I went through some technical noise (details about stack upgrade and libgmp) to at the end learn that I should install ghcup
and stack
.
I then went to haskell.org/ghcup to learn that ghcup also installs stack, so started wondering if I should install stack via ghcup or if I should do it separately as previous instructions said.
At that moment I concluded this is all getting too complicated and maybe I went the wrong way, so I went back to haskell.org because I remembered I saw "Downloads" there, and maybe I should have clicked on that. "Downloads" took me to instructions that sent me to haskell.org/ghcup again.
At this point I gave up for now because I wasn't sure if I should use ghcup to install Stack or not, and I was also afraid it might mess up my hls (does ghcup do the "wrapper" thing to pick correct hls based on project? I wasn't sure), and decided to come back to it once I do more research and have more time.
Thoughts
haskell.org -> "Downloads" -> haskell.org/ghcup is not a bad journey, but it still feels somewhat weird, as "Downloads" is in no way emphasized, and when I end up at ghcup page it feels a bit like this is a third-party project due to different webpage design and style. Plus, top part of GHCup home page is pretty complex and feels more aimed at contributors than first time users.
I know that comparisons with Rust are often made, but it seems to me that they did this right: they have a big yellow "Get Started" button on the top of the homepage, impossible to miss.
That button takes you to the page where almost immediately they tell you to use rustup to install rust (no big intro on rustup like ghcup has, just a couple of sentences and then a command to install it / run it), give you a bit of details on the toolchain, follow up with a super short tutorial to get something working and then send you off to the book/tutorials/examples.
I would imagine that Haskell could also benefit from such direct, guided journey for the new users!
Ideas
Here is how I see possible steps to improving experience of getting started with Haskell, ordered by benefit/complexity ratio:
- Add a big, visible "Get Started" button above the fold on haskell.org home page that just sends user to haskell.org/downloads. "Try it!" interactive section is already occupying a lot of space hm, but easiest thing might be to insert a new section above the "Try it" which would have a big button on the middle that says "Get Started" or "Install Haskell". Or, it could go under the code example on the right + we would add some spacing under the "Haskell - An advanced ..." piece. Besides Rust page, another example could be project I am working on, https://wasp-lang.dev/ -> we put the "Try it" button right under the title and code example, and it takes you to installation instructions.
- Streamline Downloads page just a bit more:
Make "Installation instructions" section more prominent, since it is the main call to action we want them to take -> if there is one thing they will see first on this page, it should be that section. It doesn't mean it has to be first section, but we could for example apply some spacing around it, put some kind of border to emphasize it, maybe change the background color to purple (Same as there is "Try it" on the home page).
Figure out if we should recommend installing stack separately or not. - Make haskell.org/ghcup page feel more "official" -> either by saying it is "recommended" / "official" installer, or by using the same design as on haskell.org.
- Ultimate solution: Create "Getting started" page to which the "Get started" button on haskell.org home page will lead, instead to "Downloads". It would start with short instructions on how to install ghcup, then help you create your very first project and run it, maybe super shortly explain what is stack/cabal/hackage, but in practical way, then quickly cover what is the support like in the editors and which editors are most popular (so I guess covering vscode, vim, emacs would already be enough) and then finally forward you to the further materials for learning with clear path of progress (so instead of huge list of books, there would be an opinionated suggestions on the reading order). Again, I think Rust did this really well with https://www.rust-lang.org/learn/get-started .
Guiding principles
The main idea behind this is that at every step in this journey, it should be very clear what is the next recommended step, and user's focused should be kept on it.
So if there are multiple buttons on the screen, the one that is recommended should be somehow emphasized. Less buttons/links also helps.
If there are multiple pieces of information that might be interesting, the one that is most likely to be important should again be put in focus -> e.g. if we send them to ghcup to install it, installation instructions should be more prominent than list of communities or even GIF showing how ghcup works -> we don't want them to join ghcup Discord at this point, we want them to install ghcup. We also don't need them to look at the GIF of ghcup, it doesn't serve any purpose, they came here anyway to install it and GIF won't convince them further. rustup.rs is great example of this, page is very clean and minimal, with installation instructions emphasized, and list of communities at the bottom and additional resources at the bottom.