Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updating the Documentation page #189

Open
reubenharry opened this issue Apr 3, 2022 · 20 comments
Open

Updating the Documentation page #189

reubenharry opened this issue Apr 3, 2022 · 20 comments

Comments

@reubenharry
Copy link

reubenharry commented Apr 3, 2022

This issue is somewhat related to #61 and #136 and the more general goal of making the Haskell "on-boarding" experience smooth. See also this discussion on the Haskell discourse page: https://discourse.haskell.org/t/rfc-documentation-overhaul-on-haskell-org/1942

Below is a suggested new version of the current Documentation page (https://www.haskell.org/documentation/). I don't have any web design skills, so am just presenting it as Markdown, which is not to say that a fancier layout wouldn't look better. The general philosophy is to present fewer options, so that there's a clearer, more centrally endorsed pathway of what to look at, and less chances of broken links. The equivalent Rust page (https://www.rust-lang.org/learn) seems to me like something to aim for (Julia's one - https://julialang.org/learning/ - feels a bit cluttered IMO).

I'm assuming that the Get Started instructions would be elsewhere (i.e. a link to GHCUP on the front page, along with clear setup instructions for HLS with VSCode, which should be the community endorsed standard IDE).

Beyond updating the page, I think the following ought to happen:

  • the Documentation page should be more prominently linked from the front page (maybe just a larger link - see Rust), and named "Learn", like Rust's, instead of the drier "Documentation"
  • someone has to be in charge of the documentation page and check that it remains up to date. Owners of any resources mentioned on it should be aware that they are mentioned.

This is intended as a draft, not a complete version. The idea is to get a sense of whether people think this is
a) generally a good idea, but disagree with the specifics
b) bad idea, makes things worse, but thanks for the suggestions!
c) good idea, and here are some further suggestions


Learning Haskell

The online course from UPenn goes from the basics, and is thorough and clear. (Homework optional!)

Other courses and tutorials (click to expand)

Using Haskell libraries

Search for functions by name, package or by their type signatures with Hoogle

Alt Text

Find package source code on Hackage, the central package archive for Haskell. Packages are typically documented with marked up source code comments, known as Haddock

Screen Shot 2022-04-19 at 2 25 21 PM

Reference materials

Familiarize yourself with important Haskell concepts and features with this reference

Learn standard style conventions from this guide

Understand what areas of programming Haskell excels in, and what libraries to use from this overview of the ecosystem

Behind the curtain

Understand the internals of Haskell's powerful compiler, GHC, from this documentation

Understand the full specification of Haskell from the language report


@tomjaguarpaw
Copy link
Collaborator

This is great stuff, thank you for putting it together. I will come back and help flesh out these ideas at some point in the near future.

@reubenharry
Copy link
Author

Thanks! There are also some downstream tasks that are connected to this that also occurred to me, such as:

@soupi
Copy link
Contributor

soupi commented Apr 5, 2022

Learn You a Haskell is a community favorite book.

Consider this: LYAH has been the most popular Haskell book in the past 10 years, and Haskell is still known to be very difficult to learn, so maybe putting LYAH front and center isn't exactly going to help the Haskell on-boarding experience?

@soupi
Copy link
Contributor

soupi commented Apr 5, 2022

Some more comments:

I think it's important to recognize that there are many different kinds of people who might be interested in Haskell, such as:

  1. Academics interested in math and research
  2. Curious programmers interested in expanding their horizons
  3. Industrial programmers interested in adding another productive tool to their toolbox
  4. Programmers interested in intellectual challenges

...and so on. I don't think there's no one size fits all here - these groups likely want different things from Haskell and a getting started guide that is tailored to one group will probably make it harder for the other groups.

For example, I think that the industrial programmer will benefit from reading cs240h basics more than from reading LYAH, and the academic might benefit more from reading the Haskell report. Most of them will probably be interested in a super quick tour to what Haskell looks like.

Another example: should the getting started page mention category theory? For the math enthusiasts and academics, probably yes! For the industrial programmers? There's a common conception that to use Haskell you must learn category theory. Maybe this will enforce the wrong impression that category theory is a must which will drive some people away?

In short, the target audience for the getting started page should be clear. Might even be worth considering making multiple getting started pages depending on the audience you'd like to cater to.


Resources for Advanced Haskellers
Know the basics, but unsure how to write real-world Haskell code? Here are some key resources.

Do note that not being able to use Haskell to build things is not a sign of an advanced Haskeller, but of a beginner. A first learning resource should take care of that (even if some of them don't...). The way I see it an advanced Haskell is one who can already build stuff with Haskell, but is interested in getting more out of it with more specific things like reducing boilerplate, improving correctness/static guarantees, improving performance, wrapping C libraries, etc.

What are the features I haven't learned about?
A friendly survey of important language concepts and features

I think WIWIK can be overwhelming rather then friendly. It is a very useful piece, especially for learning specific things or searching for an answer to a question, but I think this phrasing presets it as an article to read.

Library tutorials

This is kind of related to fp complete's haskell page. I think it's a good idea in general, though maybe in a separate page. I also think that a section of beginner friendly project-based tutorials (for example a website, a game, a compiler, etc) can be very useful. I would also mention the haskell phrasebook.

@reubenharry
Copy link
Author

Thanks, this is really useful feedback.

The point about the different groups coming to Haskell is well-taken, but here's my thinking. I'm less worried about groups 1 and 4: academics will be more familiar with the motivations for Haskell and less concerned about its differences to conventional languages used in industry. Programmers interested in intellectual challenges will probably be willing to do their own research into resources too. It's groups 2 and 3 that I think a learning page on haskell.org should principally target, basically to lure them in (or at least avoid repelling them).

That's true re. LYAH. Maybe that detail could be changed to cs240h or similar, or one of the many other Haskell intro books. Or LYAH could be offered as a resource for people with less experience programming.

Maybe "Advanced" could be substituted (copying the Rust page here) for "Grow with Haskell" and the actually advanced features could be "Master Haskell". Re WIWIK, that's a great point too.

I hadn't seen the Haskell phrasebook, it's nice too. One thing I'm aware of is that there are many many good resources, but my thinking is that it's best to pick a small subset, so that subsequent attention can be given to making sure those are as good as possible and kept up to date (again see the Rust page). I'm envisioning a virtuous cycle where a small set of great resources get maintained and improved over time.

@hasufell
Copy link
Contributor

Learn You a Haskell is a community favorite book.

Consider this: LYAH has been the most popular Haskell book in the past 10 years, and Haskell is still known to be very difficult to learn, so maybe putting LYAH front and center isn't exactly going to help the Haskell on-boarding experience?

LYAH has not been recommended by us IRC users for a long time, mainly because it doesn't have any exercises and is not considered an in-depth resource. So I'm strongly -1 on that specific idea.


Also note that ghcup now has a "getting started" page with links to proper learning materials: https://www.haskell.org/ghcup/steps/

@tomjaguarpaw
Copy link
Collaborator

Thanks again to @reubenharry for putting this together and @soupi for @hasufell for the comments. The point about LYAH is pretty compelling to me. Personally I've never read it, but I understand what @soupi means: if so many people have tried it, yet Haskell still has this reputation as "hard to learn", then can it really be such a great introduction? There must be better materials for explaining Haskell. @bitemyapp's "How should I learn Haskell guide" is tried and tested, I think.

I personally don't have time to drive this forward or even participate much, but I think that converting the "Documentation" page to be somewhat more opinionated is a good idea. It will take time to do work out the exact contents and do the necessary consensus-building in the community, but it will be worthwhile I think.

@tomjaguarpaw
Copy link
Collaborator

I would advise @reubenharry to keep going, keep iterating and responding to feedback, and hopefully the result will be something will be a nicely polished page, or introduction to Haskell learning resources, and we can look at incorporating it on the site.

@reubenharry
Copy link
Author

Sounds good. I've started updating the above markdown draft, and will continue. I left LYAH in for now, because it is the only free intro book I'm aware of (Real World Haskell being somewhat out of date) and I at least can attest to having learned the basics of Haskell from it, though I agree that it is flawed.

FP Complete has a bunch of really useful materials, but I assume there are political issues with incorporating those materials with haskell.org? Hopefully not

@hasufell
Copy link
Contributor

Sounds good. I've started updating the above markdown draft, and will continue. I left LYAH in for now, because it is the only free intro book I'm aware of (Real World Haskell being somewhat out of date) and I at least can attest to having learned the basics of Haskell from it, though I agree that it is flawed.

https://github.com/haskell-beginners-2022/course-plan

https://www.cis.upenn.edu/~cis194/spring13/

As linked by https://www.haskell.org/ghcup/steps/#how-to-learn-haskell-proper

These are real learning materials.

@reubenharry
Copy link
Author

OK, I removed LYAH, by way of compromise :) And since the rest of the books were either not for beginners or not free, I took them out too.

(What I removed is below)


Learn You a Haskell is a friendly place to start if you're new to programming. There's also a notebook version if you like to learn interactively.

Other intro Haskell books (click to expand)

@gbaz
Copy link
Contributor

gbaz commented Apr 27, 2022

I think it is wrong to remove the books entirely from the documentation page. Even though some of the books are paid, they are invaluable resources and they should be listed. Additionally, it is worthwhile to list even the intermediate ones, if they are marked as such. I'm fine with not steering users to them as a first stop, but to remove them altogether will have a bad effect.

I also think the haskell wikibook is fine to refer people to.

In general, the material which is on the page and is removed in this PR (not just books) is good material and worthwhile to keep around. Highlighting a "getting started" section that has a few recommended tutorials, and is opinionated and steers people is a good thing. I like the idea behind it!

However, below that section, or on another page, a more comprehensive list of resources would also be very worthwhile. If people found it more difficult to find e.g. the cabal users guide or the typeclassopedia, or marlow's wonderful book on concurrency, or bird's "thinking functionally in haskell" etc., then that would be a real shame.

@gbaz
Copy link
Contributor

gbaz commented Apr 27, 2022

A general proposal would be that this material go under "Learning Haskell" at the top of the page (and the links not just say "this documentation" or "this article" but name the cited resource) but below it there's an "Additional Documentation" section that keeps all the existing resources.

The fact that there's a bunch of actual paid print books about Haskell is a good thing -- some people want them, and it speaks to the quality and scope of the resources available. If that information is not easy to come by, it substantially undersells the language and the material available.

@tomjaguarpaw
Copy link
Collaborator

I think it is wrong to remove the books entirely from the documentation page

I agree, and I think that probably the smoothest approach would be to create an entirely new page called something like "Learn Haskell" or "Start your Haskell journey" and keep the Documentation page as it is.

@hasufell
Copy link
Contributor

I think it is wrong to remove the books entirely from the documentation page

I agree, and I think that probably the smoothest approach would be to create an entirely new page called something like "Learn Haskell" or "Start your Haskell journey" and keep the Documentation page as it is.

It's not really documentation. It's a dump of links. That may be useful, but is not what anyone expects of documentation.

@reubenharry
Copy link
Author

@gbaz I agree that many of the books I removed are very valuable resources that people should definitely have access to. I should emphasize that what I'm advocating is basically what @tomjaguarpaw is saying, which is to make a "Learn Haskell" page with a highly directed set of resources, rather than exposing people to all good resources out there.

Having a larger and more complete listing of all good resources is also nice, but as @hasufell says, that isn't really what the current Documentation page is doing. In fact, doing that well seems like a much larger task, where a large subset of the really high quality resources (books and online articles) are carefully sorted and presented.

What I'm proposing is more of a short term easy improvement, which is to take the current documentation page (that I think is too unstructured) and turn it into a "Learn Haskell" page that serves to orient newcomers. I think that would be a net improvement to the Haskell website.

As a compromise, I could add the books as Further Resources at the bottom though.

@gbaz
Copy link
Contributor

gbaz commented Apr 29, 2022

Removing a bunch of useful stuff and not putting it somewhere else is not an improvement. I support creating an upfront section with a "learn haskell" focus. I oppose removing links to resources that don't fit there. They should either be kept on the same page as a lower section, or moved to another easily accessible page. (here i am not referring simply to books but to all the links that this pr eliminates to useful resources).

@reubenharry
Copy link
Author

OK, that's fair enough, I'll update the above to either preserve those links at the bottom or link to them.

I should say that what I'm concerned about is that having a large dump of links is somewhat overwhelming, and if links are broken (which as far as I know, no-one is in charge of checking) it gives a really bad impression of the Haskell page.

@tomjaguarpaw
Copy link
Collaborator

if links are broken (which as far as I know, no-one is in charge of checking) it gives a really bad impression of the Haskell page

All links are checked, both external and internal, on every CI run:

- name: Check Links
run: >
nix shell \
--quiet \
--file . \
linkchecker \
--extra-experimental-features nix-command \
--command linkchecker built-site

@reubenharry
Copy link
Author

OK, after a bit of thinking, I think you're right that what I'm proposing shouldn't be in replacement of the Documentation page, but in addition. I think what I really want is a "Getting Started" page that recommends a toolchain, links to a single tutorial, and explains the library system (hackage and hoogle, and an overview of which libraries are for what).

(As well as that, I think the current frontpage of haskell.org should have more propaganda on why to use Haskell, but that's a separate issue.)

Separately, I think the current documentation page isn't adding a huge amount of value in its current state. I think having a page with lots of links is useful, but actually not as useful as it might seem, because people are comfortable with using google. For example, anyone who wants a Haskell book can google "Haskell books" and pick one that looks good to them. I'd prefer to see slightly fewer links, with more explanation of each link. In that vein, a link to Hackage and Stackage with no context is not that useful if you don't know how to use them. But improving this is a lot of hard work.

I'll step back and think how I can update the above proposal to make it a "Get started" page, and not a replacement for the Documentation page.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants