Skip to content

Instantly share code, notes, and snippets.

@shapr
Created July 16, 2025 23:46
Show Gist options
  • Save shapr/77f1af0aeb0c7bbb46151f802b46bc03 to your computer and use it in GitHub Desktop.
Save shapr/77f1af0aeb0c7bbb46151f802b46bc03 to your computer and use it in GitHub Desktop.
Slides for my History of Haskell community talk for HFPUG

what I want to communicate to the audience:

You have (my) permission to do anything that you consider beneficial and useful, and you have the ability as well!

All the rules we think are in place are just illusions

if something isn’t being done already, it’s likely there’s no incentive to do that thing (see https://www.noidea.dog/glue ) don’t sacrifice yourself and your future, learn from my mistakes

Inspiration

Most of what follows will be examples where I started things and people showed up.

The goal of these examples is for you to gain inspiration to start your own things.

If you see a need, create the thing, and people will come, or they won’t and maybe it wasn’t needed!

accidental boardgames group

In the 90s I accidentally started a boardgames club by showing up at the same time every week.

Once everyone believed it existed, it did!

After I moved away, the club continued without me.

Suddenly, I wanted to start more events/patterns that people enjoyed and continued after I left.

Developer Mindshare

Java was the first ‘advertised’ programming language with a cutesy mascot and all that.

That worked!

“Developer mindshare” suddenly became a thing.

Programming language communities became a thing!

Haskell is hard

About 1999 I learned Python and elisp, chased purely functional without knowing what it was called A friend asked me why I was writing Haskell in Python, and I was enlightened!

I failed to learn from the Gentle Introduction to Haskell, after years as a #python IRC channel admin, figured I’d start a #haskell IRC channel

I sent an announcement to the mailing list, people showed up!

I realized there wasn’t much Haskell community outside the mailing lists, maybe I could help?

Elitism

Someone showed up on the #haskell IRC channel and said “You don’t have a PhD, I’ve almost finished mine, I’m better qualified to run the channel”

I said “I’m going to try it anyway, if it fails, I’ll hand it off to you”.

People would arrive in #haskell and grumpily complain about requiring a PhD to learn Haskell

I’d tell them I’d never had a math or cs class in uni, and had been paid to write Haskell, and sometimes they would actually try Haskell.

Active Community Building

When new people arrived on the IRC channel, I would greet them and attempt to immediately integrate them into the community.

I would assume anyone who acted badly did so from ignorance rather than spite.

The rare spiteful people got:

  1. first offense - clearly and publicly informed of the community standards
  2. second offense - kicked from the channel after privately informing them what they did that was bad behavior
  3. third offense - banned for six months or longer

The #haskell rules were “Be Nice, Or Else”.

The famous troll

  • Success! https://mail.haskell.org/pipermail/haskell/2016-September/024995.html 13:15 <xQuasar> | HASKELL IS FOR FUCKIN FAGGOTS. YOU’RE ALL A BUNCH OF FUCKIN PUSSIES […] 13:21 <xQuasar> | what’s haskell good for though […] 13:26 <xQuasar> | i can’t believe my attempt to troll has actually got me convinced that i should give haskell a go

This bit of an IRC log was wildly popular for many years, and has been used to inspire many friendly communities. Success?

Community growth

At one point #haskell had about ten thousand members, and was the third largest freenode channel, and the largest programming language channel.

In some ways, #haskell became a victim of its own success because it’s so hard to follow many concurrent conversations happening in the same group chat.

lambdabot

I hosted lambdabot, everyone liked that

Andrew Bromage ( Pseudonym ) wrote and named lambdabot, and wanted a plugin system for his hello plugin.

I wrote the simplest thing that could possibly work, and convinced other #haskell people that I would install any plugins they wrote. I would also give them ops on the bot, meaning they could get it to join other IRC channels and do other nifty things. This worked extremely well

I noticed that the @ sign wasn’t used for anything in IRC, so I chose that for the “plugin command starts now”. That got copied into a Python IRC bot named supybot, and hundreds of other IRC bots got that from supybot There’s a reasonable amount of evidence that the @name pattern on twitter, etc came from its use in IRC bot commands

lambdabot continues

lambdabot is still running, almost twenty years after I stopped hosting it.

Roughly fifty plugins were written, and each creator got to do something and brag about it, in public, in front of their peers.

At least one PhD thesis was published because the author was working on lambdabot instead of their thesis topic, and the hot code reloading they wrote to allow runtime plugin changes without bot restarts later ended up in Facebook’s spam detection software.

EuroHaskell 2003

The joke that turned into a tiny conference

Anders Carlsson’s and I were going to drink a beer in his tiny apartment and talk about Haskell,

but then someone else wanted to join, so we were going to have it at a bar

and then someone joined #haskell and asked for the email address of the conference organizer

and then they submitted a paper

So I asked John Hughes to get us a room for the Saturday after EuroPython 2003 !

AngloHaskell 2005

I applied to Microsoft Research for a GHC assistant job, Simon Peyton-Jones and Simon Marlow would interview three candidates.

Took me fifteen minutes to figure out who the other two candidates were, and another fifteen minutes to convince them that we should all interview on the same day.

Microsoft Research HR in Cambridge UK was rather stressed out by that.

At 8 AM, I stood in front of about twenty people, and asked who was ready to present. That’s how the rest of the day long conference was structured.

AngloHaskell continued for another four years without me.

I didn’t get the job.

The Monad Reader

I had smart Java programmer friends who couldn’t get over the hump of learning to read research papers, so I created a half way point

I wanted something simpler/easier than a research paper, but more formal than a blog post.

https://wiki.haskell.org/index.php?title=The_Monad.Reader/Previous_issues

I recruited a bunch of people who knew things but didn’t realize they wanted to write about those things until I convinced them.

I published quarterly, or whenever I had three to five articles.

I organized TMR for a few years, and handed it off to a ‘real’ academic, who ran it for a few years, etc

TMR lasted ten years and published twenty four issues!

It got cited so many times! The Monad.Reader

What was my goal?

I had the vague idea that organizing a community could possibly get me a job half way between writing Haskell and building community,

and hopefully change the world for the better, in a very small way. I WAS WRONG (about the job part at least)

I did get recognition, the “History of Haskell” paper was published in 2007,

my name shows up twice! https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/history.pdf

Haskell user groups wherever I moved

I kept moving around, started a Haskell user group in Boston, hosted at MIT computer science and AI lab.

I moved to Atlanta and started a Haskell user group there.

I wanted to get paid to write Haskell!

I got paid to build some tiny solutions in Haskell where the client wanted a result, and didn’t care how.

I compiled usenet newsgroups.

I converted ms word files to a custom XML format for e-learning.

At one point, Credit Suisse wanted to hire me, and asked me where I got my PhD.

I’d not yet had a college course for CS or math.

They didn’t hire me.

I applied to Galois five (six?) times, and didn’t get hired. I was told roughly that I wasn’t technical enough.

Finally, Haskell employment!

I attended the Recurse Center in 2019, spent six months writing a bunch of Haskell, wrote a nifty webapp, and THEN I got hired to write Haskell!

I got paid to write Haskell for the next five years!

Haskell now?

The present is discord and matrix, and the Haskell Foundation.

The Haskell job market has shrunk to a very small number of employers, mostly cryptocurrency and one bank.

Conclusion: Don’t try to make a living off open source software, and especially do not try to make money building communities.

The joke at the end?

PostScript: I finished my Bachelor’s Degree in 2013, twenty four years after taking my first college class. (which makes me immune to ageism!)

Questions for you, the audience

  • Why is it so hard to make money doing community organizing?
  • Should I have given up earlier?
  • Does Claude get enough credit for doing unpaid work organizing the HFPUG?

EXTRA CONTENT

patterns:

  • start: announce an event, at the same time every week, and always show up
  • end: if no one shows up for two meetings in a row, close it down, and announce that
  • middle: try new patterns, accept that most of them won’t work (weekend classes on #haskell failed, no one even remembers that)
  • practices: anything that lets people show their skills to the community will reinforce that community ( lambdabot plugins )

Content that didn’t fit

I didn’t have the math, but I got it from Haskell!

metrics for community

What is difficult to measure is difficult for HR and CEOs to put in a budget – @b3n For security, investment comes after failure, a big hack. How could you do that for community organizing? How do you audit a community? Is it easier to get paid for internal community? Metrics are easier?

code required, human not

Good programmer with some human skill, teach and organize around the edges all you want! shit programmer with no human skills, nobody bothers to ask you to teach anything good human skills but no programmer?

funding?

What about funding for training? Is it required in your country? Can it be internal or must it be external? This could save money for your employer, and improve bonds between your employees! Belgium and Netherlands do require training!

Train your coworkers!

Stay in contact with your favorite coworkers! Training increases psychological safety, you are SUPPOSED to ask questions! you don’t have to look like the expert in training!

postscript:

This file is designed to be used with org-present

(use-package visual-fill-column
  :ensure t
  :config
  (setq visual-fill-column-width 110)
  (setq visual-fill-column-center-text t)
  )
(use-package org-present
  :ensure t
  :config
  (add-hook 'org-present-mode-hook
		 (lambda ()
		   (org-present-big)
		   (org-display-inline-images)
		   (org-present-hide-cursor)
		   (setq visual-fill-column-center-text t)
		   (visual-fill-column-mode 1)
		   (visual-line-mode 1)
		   (org-present-read-only))
		 )
  (add-hook 'org-present-mode-quit-hook
		 (lambda ()
		   (org-present-small)
		   (org-remove-inline-images)
		   (org-present-show-cursor)
		   (visual-fill-column-mode 0)
		   (visual-line-mode 0)
		   (org-present-read-write)))
  )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment