Supplementary exercises to go with Learn Haskell by Example (be sure to expense your copy!).
Note: The book is here to support learning, but the focus is the exercises. In other words, being able to do the exercises is the important thing; having read every word of these chapters is a support structure to that goal.
- Increase reliability of learning for new hires by providing plenty of exercise on top of peer feedback structure
- Increase efficiency of learning for new hires through an emphasis on small, focused exercises
- Increase autonomy for new hires through clear direction for productive next steps
- Simplify management for hiring managers through ready-made expectations and tracking structure
- Simplify peer support for onboarding buddies through clear feedback opportunities
- Complete basic web development tasks in a reasonably-sized subset Haskell.
Transparently, there is a lot of wiggle room in "basic" and "reasonably-sized." You can get a lot done with a small subset of Haskell, but in practice it is enormous. You will absolutely come across things in MWB that this repository doesn't directly prepare you for, but you should have a good foundation writing programs on the web in Haskell, and you should know enough Haskell for the long tail of things you could learn to not bury you as you meet them along the way.
- This is expected to take about 3-4 weeks with each chapter taking 1-2 days assuming you are putting in 4-5 hours of focus time each day. Some chapters will be faster than others, but you want to aim for something close to a chapter every day or so.
- Exercises should be reviewed and discussed with your onboarding buddy during regular check-ins. I recommend a 30 minute, daily check-in with the onboarding buddy. These regular check-ins help prevent misunderstandings and allow your buddy to tie your learning directly to real-world applications in mercury-web-backend.
- Onboarding buddies should spend 30 minutes reviewing progress prior to each check-in. Spending this prep time guards against the session turning into a simple reporting exercise for the learner, and allows the time to be spent on richer points of discussion.
- Setup your system by running bootstrap-mercury.
If you've already run
bootstrap-mercury
, simplycd
into this repository's directory. Once you rundirenv allow
in this repository,direnv
will automatically activatenix
and install everything you need inside a nix shell. If Nix asks you to addsubstituters
ortrusted-public-keys
configuration settings, say "yes". (Note: These prompts may interact poorly withdirenv
; try runningnix develop
directly ifdirenv
seems to be hanging.) - Create a workspace for yourself by forking this repository.
- Create a copy of the exercises for yourself by create a GitHub project based on the Learn Haskell By Exercises Template in your fork of this repository.
- Your manager should identify a good first and second ticket and put those in the appropriate tickets on your GH project.
- Moving about a chapter's worth of tickets from
Todo
toReady for review
. Some days will be more, and some will be less. Most of the tickets should take about an hour or less. - Meeting with your onboarding buddy to discuss your work from the last day. You might discuss things that you felt were tough or confusing. Maybe you call out some wins and point out work that you're particularly proud of!
- Your manager will regularly check the GH Project to ensure things are on schedule. If progress is slower than expected, they’ll help identify blockers and ensure you have the support needed to succeed. Ahead or behind, they validate the hard work you're doing and encourage you along the way. 😊
- That's okay. Give it your best go for an hour or so, note down your thoughts as best as you can, and ask your onboarding buddy about it.
- Talk it through with ChatGPT/Claude/MyFavoriteLLM. These tools are super helpful for working through ideas that you are new to. Obviously, they aren't perfect (who is? 🤷), but they can often be pretty helpful. Remember, your goal is to use the LLM to help you think through the problem and improve your understanding, not just to solve the issue for you.
- Chapter 1: This chapter is mostly an introductory, marketing-ish chapter. It doesn’t really teach you how to use Haskell. Of course, feel free to read through it. It introduces some vocabulary, but it doesn’t do much past that.
- Chapter 9: This chapter is mostly about property based testing and getting random values. These are valuable ideas, but they aren’t critical for onboarding into Mercury.
- Chapter 11: This chapter is also not critical for onboarding into Mercury. It covers things like existential quantification and fixity in the context of developing a DSL for music composition.
- Chapter 13-15: These chapters cover useful topics (GADTs and parallelism/concurrency, exceptions, and monad transformers), but these aren’t really hard blockers for getting onto the basics of web development in Haskell. So, these chapters are omitted from this board. It would be great to revisit these chapters later, but it isn’t the priority for a new hire getting started with Haskell.
- Chapter 16-17: These chapters mostly address 3rd party packages that we don’t really use (at least not directly) that much.
- Going back to the skipped chapters and learning the topics there.
- Explore regularly updated resources like Haskell Weekly to keep up with the latest developments in the Haskell ecosystem.
- Revisiting introductory content from a different perspective through another book like Effective Haskell or Haskell Programming From First Principles. Learn Haskell by Example and this repository focus on trying to connect your past programming intuitions, but some of these other resources try to speak to some ideas a bit more directly. These resources might help flesh out some of the more theoretical foundations for working with Haskell.
- Digging a bit deeper with resources like Production Haskell or Haskell in Depth.
- Spice things up and work through a non-Haskell book using Haskell. Having to move ideas between languages will help you focus on the important, shared ideas and exercise implementing them in Haskell. For example, you might work through Functional Programming in Scala or Domain Modeling Made Functional in Haskell.
- Focus on something besides Haskell for a bit and learn about SQL Antipatterns or The Art of PostgreSQL.
The important thing is that you keep your learning story going 😁. You will learn plenty of stuff on the job, but small, regular investment to grow your skills will add up tremendously over time.