Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    J

    James Sinclair

    jrsinclair.com · Personal blog · on HN since 2016

    James Sinclair writes about JavaScript and functional programming, including monads, function composition, algebraic data types, and array reduce.

    Visit blogRSSHN submissions
    ProgrammingWeb DevelopmentLanguages & Compilers
    What HN says

    HN commenters call his JavaScript and functional programming essays great, praise his typography, and recommend his book for functional-curious JS developers.

    Stats for nerds
    48HN people shared it
    78linked in comments
    2.5Kstory points
    Jun 2026last shared
    2018people per year2026

    Top posts on HN

    1. 1
      What’s so great about functional programming anyway?
      2 people · 402 points · first shared 2022 · 567 comments on HN
    2. 2
      Algebraic Structures: Things I wish someone had explained about FP
      2 people · 357 points · first shared 2019 · 93 comments on HN
    3. 3
      Algebraic Data Types: Things I wish someone had explained about FP
      4 people · 334 points · first shared 2019 · 112 comments on HN
    4. 4
      Why would anyone need JavaScript generator functions?
      2 people · 250 points · first shared 2022 · 177 comments on HN
    5. 5
      Elegant Error Handling with the JavaScript “Either” Monad
      6 people · 182 points · first shared 2019 · 235 comments on HN
    6. 6
      Faster, Better, Cheaper – The Art of Making Software
      1 person · 154 points · first shared 2017 · 23 comments on HN
    7. 7
      How to deal with dirty side effects in your pure functional JavaScript
      2 people · 144 points · first shared 2018 · 36 comments on HN
    8. 8
      How to use array reduce for more than just numbers
      4 people · 139 points · first shared 2019 · 103 comments on HN
    9. 9
      The algebraic structure of functions, illustrated using React components
      2 people · 109 points · first shared 2020 · 10 comments on HN
    10. 10
      The joy of recursion, immutable data, & pure functions: Making mazes with JS
      1 person · 92 points · first shared 2025 · 20 comments on HN

    What HN people wrote when they linked it

    • netcraftJun 2019

      I dont disagree - where things like either, maybe or result really shine is when its baked into the stdlib _and_ there is machinery built into the language to make using them easy (like pattern matching, and them being in scope by default). I have used and written several libraries trying to make them work in js/ts and while they are beneficial around my custom domain specific code, you still spend a bunch of time wrapping things coming from libraries or other code you dont have control over.

      But the benefit of them over a check against null is that you can write a pipeline of functions that dont have to handle those cases and you know that its always safe to do so. This other article by the same author as the OP I think illustrates it well https://jrsinclair.com/articles/2016/marvellously-mysterious-javascript-maybe-monad/

    • zanellato19Oct 2022

      Enums are Sum Types, which are a type of ADT[1].
      Tuples are a Product Types, which are another type of ADT[2];
      Sum Types are so called because when you add one to that, you add just one more possibility (It could be A,B now it can be A,B,C). Product Types, on the other hand, give out possibilities based on their Product, so if you add a new property, you multiply it (A,B can both be two things, so you have 4 possibilities, if you add C that can also be two things, then you now have 8 possibilities).

      This is a good explanation: https://jrsinclair.com/articles/2019/algebraic-data-types-what-i-wish-someone-had-explained-about-functional-programming/

      [1]https://en.wikipedia.org/wiki/Tagged_union

      [2]https://en.wikipedia.org/wiki/Product_type

    • bern4444Feb 2021

      I kind of agree with your comment here and with what mlinhares responded with. There are a few engineers I enjoy following who give good, and actionable advice.

      One is Scott Wvlaschin especially if you're interested in Functional Programming

      Another is James Sinclair[0].

      A couple other names, Ryan Florence and Michael Jackson (the dev, not the singer).

      And one last one is Kent Dodds.

      These are mostly people on the front end (since that's where I work). I've found content put out by all of them (articles, videos, tutorials etc) to be excellent and if not directly practical insightful.

      They also all actively write software. I recommend taking a look when you have a chance. Better than uncle bob

      [0]https://jrsinclair.com/

    • Pr0ject217Feb 2022

      EDIT:

      Paste this hacky snippet into your browser's console to save all of the links into your clipboard:

      (() =>
      {
      let result = [...document.querySelectorAll('td a')]
      .map((link) =>
      link &&
      !link.href.includes('ycombinator') &&
      !link.href.includes('javascript:void')
      ? link.href
      : ''
      )
      .filter(Boolean);
      result = [...new Set(result)];
      result.sort();
      copy(result.join('\n\n'));
      })();

      Just to help, here's a compiled-list of all of the links shared here so…

    • accrualJul 2025

      Definitely, I think I wrote imprecisely when I used "humanity". I meant more like I personally wrote it, the sentence structure and grammar are mine, the mistakes are mine, and hopefully it's still clear and easy to understand.

      Speaking of mixing technical text and style/prose, I feel this link from yesterday did a great job executing both (granted it is an article, not a paper):

      https://jrsinclair.com/articles/2025/whats-the-difference-between-named-functions-and-arrow-functions/

    • onetomNov 2022

      omg, so much negativity here...

      you should read the previous articles from the author, eg.
      https://jrsinclair.com/articles/2022/javascript-function-composition-whats-the-big-deal/

      then

      https://jrsinclair.com/articles/2022/what-if-the-team-hates-my-functional-code/

      it would address some of the concerns and critiques ppl had on this topic here.

    Related

    F# for Fun and Profitfsharpforfunandprofit.com334 people

    Railway-Oriented Programming (2015)

    F# for Fun and Profit
    Personal · last shared 2026
    James Hagueprog21.dadgum.com472 people

    Things That Turbo Pascal is Smaller Than

    James Hague
    Personal · last shared 2026
    FP Complete Blogfpcomplete.com201 people

    Monads and GATs in Nightly Rust

    FP Complete Blog
    Company · last shared 2025
    James' Coffee Blogjamesg.blog38 people

    Serving my blog posts as Linux manual pages

    James' Coffee Blog
    Personal · last shared 2026
    Haskell for Allhaskellforall.com190 people

    The category design pattern

    Haskell for All
    Personal · last shared 2026
    James Coglanblog.jcoglan.com93 people

    The Myers diff algorithm: part 1

    James Coglan
    Personal · last shared 2026
    James Longjlongster.com118 people

    A future for SQL on the web

    James Long
    Personal · last shared 2025
    Alexis Kinglexi-lambda.github.io172 people

    Parse, Don’t Validate

    Alexis King
    Personal · last shared 2026