
It's all in the name: Learn You a Haskell for Great Good! is a hilarious, illustrated guide to this complex functional language. Packed with the author's original artwork, pop culture references, and most importantly, useful example code, this book teaches functional fundamentals in a way you never thought possible. You'll start with the kid stuff: basic syntax, recursion, types and type classes. Then once you've got the basics down, the real black belt master-class begins: you'll learn to use applicative functors, monads, zippers, and all the other mythical Haskell constructs you've only read about in storybooks. As you work your way through the author's imaginative (and occasionally insane) examples, you'll learn to: –Laugh in the face of side effects as you wield purely functional programming techniques –Use the magic of Haskell's "laziness" to play with infinite sets of data –Organize your programs by creating your own types, type classes, and modules –Use Haskell's elegant input/output system to share the genius of your programs with the outside world Short of eating the author's brain, you will not find a better way to learn this powerful language than reading Learn You a Haskell for Great Good!
It was a great time - titles like Learn You A Haskell For Great Good and Land of Lisp really capture the zeitgeist.
1. Pro Git, by Scott Chacon and Ben Straub (https://git-scm.com/book/en/v2)
- Skill: Git, covering both high-level aspects (commiting, branching, GitHub/GitLab, etc) and its internals (objects, references, packfiles, protocols, etc)
- Kind of material: free e-book, book and website
- Why is it good: easy to read, even when approaching the inner aspects. It's very unlikely that you won't learn something new and amazing after reading it. The Git internals chapter is a gem, providing and demonstrating the plumbing commands that manipulate the internal data structures.
2. Learn you a Haskell for Great Good by Miran Lipovača (https://learnyouahaskell.com/)
- Skill: Haskell
- Kind of material: free e-book, book and website
- Why is it good: covers the language and functional programming in a very fun and informal way. Reading it and learning Haskell made me a better programmer in other languages (specially in Python and Kotlin)
3. intro_x86-64 by Luana Martins (https://gitlab.com/luamfb/intro_x86-64)
- Skill: x86 assembly (NASM)
- Kind of material: tutorial mixed with code
- Why is it good: covers the x86-64 assembly using the NASM syntax, explaining the basic instructions, the stack, function calls, syscalls and so on. Easy to read, with some exercises. The chapters themselves are valid NASM code that you can assembly and run in your machine.
4. Putting the you in CPU by Lexi Mattick (https://cpu.land/)
- Skill: operating systems and program execution
- Kind of material: website
- Why is it good: explain what happens when you run a program, covering syscalls, multitasking, memory management, fork, exec, ELF and so on. Everything written in a very fun and informal way
5. Fluent Python by Luciano Ramalho
- Skill: Python, but for those who already know Python and want to improve their skills
- Kind of material: book
- Why is it good: explains in depth several Python concepts, sometimes even showing the bytecode.
Haskell
Books:
- Maybe Haskell by Pat Brisbin [https://thoughtbot.gumroad.com/l/maybe-haskell]: Very good book, available under a "pay what you want" model (or free pdf here [https://books.thoughtbot.com/books/maybe-haskell.html]).
- Learn you a Haskell for Great Good by Miran Lipvača: Available to read online for free [http://www.learnyouahaskell.com/].
- Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen: Available to read online for free [http://book.realworldhaskell.org/read/].
Online tutorials:
- List of resources on haskell.org
- Haskell Wiki [https://wiki.haskell.org/Haskell]
- The Basics of Haskell series [https://www.schoolofhaskell.com/school/starting-with-haskell...] by Bartosz Milewski, from the School of Haskell website [https://www.schoolofhaskell.com/] (which also contains a number of other great resources on Haskell more generally).
- The Haskell Phrasebook [https://typeclasses.com/phrasebook]: a free quick-start Haskell guide comprised of a sequence of small annotated programs. It stands out from more traditional Haskell tutorials in that, instead of using the principles of Functional Programming as the theoretical starting point from which to start introducing the motivation and syntax of Haskell as a programming language, instead, it introduces Haskell syntax directly using code snippets that mimic traditional imperative programming as much as possible. This is intended to help users coming from imperative languages familiarise themselves with Haskell syntax first, and then slowly build on that by using progressively more idiomatic Haskell code, motivating its suitability for Functional Programming.
Other:
- The Hoogle Search Engine [https://hoogle.haskell.org/]; search for haskell operators or expressions here to get information on them. Good for looking up functions and operators defined in the Prelude (the haskell standard library) and other modules.
- List of haskell reserved symbols and keywords with brief description / explanations [https://wiki.haskell.org/Keywords].
F#, Jupyter, Python, R, MySQL, PostgresQL, ZSH (awk, sed, fill in the rest), VS Code, Excel, Word, git, and probably more.
This weekend I continued to work my way through Learn You a Haskell For Great Good, taking time to go over the functional programming concepts in both Haskell and F#. In addition I read most of Data Science at the Command Line, where I was introduced to ggplot2, so I then worked my through the online ggplot2 book.
I'm not very interested in memorizing the complete syntax, standard library, and common third-party libraries for the myriad of tools that I've listed above. I don't really see the point of learning how to read through the MySQL documentation.
Here's what I want to have in my brain: Most of Townes Van Zandt, Willie Nelson, and the Grateful Dead's catalog of songs so I can play them on acoustic guitar without a songsheet as I like to make eye contact with the audience.
So yeah, thank you for telling me that my approach is slowly withering my abilities.
I'll put this as nice as I can: You are very judgmental.