Sign in

noelwelsh.bsky.social

@noelwelsh.bsky.social
175 followers 191 following 215 posts

I'm writing a book, online at functionalprogrammingstrategies.com My personal site is noelwelsh.com

PostsRepliesMedia
Reposted by @noelwelsh.bsky.social
Shriram Krishnamurthi @shriram.bsky.social · 13/09/2026
I've been crystalizing some advice for first-year college students: "Advice to the New College Student in the AI Era". Thesis: "the purpose of going to college is to emerge as close to middle-aged as possible". docs.google.com/document/d/e...
docs.google.com
Advice to the New College Student in the AI Era
1193
noelwelsh.bsky.social @noelwelsh.bsky.social · 12/09/2026
Claude Code on a mission to reinvent Emacs.
120
Reposted by @noelwelsh.bsky.social
Joshua Eaton @joshuaeaton.bsky.social · 02/09/2026
“There’s a new Mr. Beast book.” You bolt awake in your workshop in Mainz. It’s 1450. You’re Johannes Gutenberg, and you’ve changed your mind. The future cannot come to pass. Your printing press must burn.
6979561452
noelwelsh.bsky.social @noelwelsh.bsky.social · 14/08/2026
@felienne.bsky.social I really liked your recent episode on the Turing test. One suggestion: perhaps have the host that isn't leading the discussion read out the quotes. This makes is clearer when a quote ends. (Idea stolen from @ifbookspod.bsky.social podcast.)
100
noelwelsh.bsky.social @noelwelsh.bsky.social · 30/07/2026
The 3N model of radicalization: * Need: a threat to personal significance that creates openness. * Narrative: an ideology that explains the loss and offers a path to restore significance. * Network: a social group that validates the narrative and rewards adoption of it.
"It was during that rough going where Andreessen came in. We were a small company of 60 people and 20 took the offer and left. That's almost a third of the company that decided to leave and we got to a point where we were thinking that not many more have to leave before we need to worry about whether we can keep the lights on.

And it was actually Tobi who then put me in contact with Marc Andreessen because Marc had been exposed to this phenomenon at some of his portfolio companies. 

And Marc gave us reassurance and a bunch of contacts. Marc said, "Do you need someone to come in to help do programming or help with operations or whatever?" 

And I was floored by the generosity because Marc and I haven't always seen eye to eye on things. Especially in terms of venture capital. He's been one of the main faces of venture capital for decades and I've been kind of critical at times.

And it was just a realization that all those grievances we might have thought to be so big once upon a time were actually minuscule. We were fighting the white walkers on the other side of the wall and all our internal squabbles were going to be for nothing if those f*ckers got inside the wall and destroyed everything. And that felt like a real threat at the time. That could've happened. They could very well have just ripped the whole thing apart.

And Marc clearly saw that that this was a collective, almost existential threat to the entire industry. If these activists were able to take over these institutions in the same way that they have taken over academia we would be f*cked and not just for a little while but potentially for decades. That couldn't stand. 

And Marc was incredibly helpful not just in terms of these contacts and introductions and so on but it was very powerful. When you have literally 40,000 people on Twitter calling you all the worst things in the world even the strongest individual might go for a second like "Holy sh*t. The mob is coming for me and there's no one else there."

And there are other people there. Tobi was there. Marc was there.

And it was incredibly helpful to give us the fortitude to go like "No do you know what? We're going to stick with it. We're not going to grovel. We're not going to apologize. We're not going to revert."
And then what Marc also did was he gave me a syllabus for understanding the history of wokeness going all the way back to the '60s and beyond. 

That this didn't just come as lightning from a blue sky. This had an institutional grounding that was set in motion particularly in the '60s and the long march through the institutions, Herbert Marcuse and a lot of The Frankfurt School and all of these groups that had designs on how to reshape society and create the revolution they so dearly wanted, but with a timeline and a roadmap that was demarcated in decades. 

That it wasn't just like "Well we're going to put something together and then in two years something's going to happen." No they were sitting in the fucking '60s fantasizing about how to overthrow everything in the 2000s.

It's actually incredible in a Dr. Evil sense of it but when you're on the receiving end of it it seemed a little less incredible and it was just difficult not knowing where's this coming from? Why is this happening all of a sudden?

Well it wasn't happening all of a sudden. There was this long history of it and when you understood that history it made a lot more sense. We weren't just making a rejection for our little corner of the world. We were chipping in in the great civilizational battle of where this country was going to go, whether the white walkers beyond the wall were going to win.
100
noelwelsh.bsky.social @noelwelsh.bsky.social · 29/07/2026
LLM-for-programming discourse really needs more nuance. It's great at some tasks and sucks at others. E.g. for work with any design requirements I've found it makes bad decisions. The framework I'm working on really doesn't need two event queues, for example. For filling in the blanks it's great.
010
noelwelsh.bsky.social @noelwelsh.bsky.social · 16/07/2026
Just released v0.6.0 of my terminal interaction library Terminus, adding a complete TUI framework based on capability-passing. No documentation yet (working on that!) but the screenshot below shows a small example program. Check it out: github.com/creativescal...
A simple example program written in Terminus:

val fullScreen = FullScreen { ctx ?=>
  val name = ctx.signal(text.Line(""))

  Column(Size.fixed(50, 5)) {
    Text(Size.fixed(50, 1), _.withBox(_.withoutBorder)) {
      staticText("Type a name. Ctrl+Q to quit.")
    }
    TextInput(Size.fixed(50, 3), _ => inputStyle, name)
    Text(Size.fixed(50, 1), _.withBox(_.withoutBorder)) { ctx ?=>
      ctx.computed {
        val typed = name.get.value
        text.Text(if typed.isEmpty then "" else s"Hello, $typed!")
      }
    }
  }
}

fullScreen.run(NativeTerminal)
110
noelwelsh.bsky.social @noelwelsh.bsky.social · 16/07/2026
I'm now curious if Claude writes profiles for other people. Only one of my projects had a profile, so it's not automatic. For science: check projects within your ~/.claude for user_profile.md and report back! fd user_profile.md ~/.claude (or the equivalent w/ find)
000
noelwelsh.bsky.social @noelwelsh.bsky.social · 16/07/2026
I discovered that Claude had created a user profile for me for a project we're working on. I didn't ask it to write this, but I'll take it! 😆
A screenshot reading: Experienced Scala developer building a terminal UI toolkit (Terminus). Deep understanding of FP, type theory, and UI framework design. Thinks carefully about architecture before implementing — prefers extended design discussions to establish the right model, then moves quickly to code. Values principled design that can evolve; dislikes premature optimisation but wants the scaffolding for future work to be in place. Conversational style is concise and expects concise responses.
210
noelwelsh.bsky.social @noelwelsh.bsky.social · 13/07/2026
Just arrived! Curiously, published in 2027 so I'm living in the future. Looking forward to diving in. Should be a quick read as it's less than 200 pages. (Why am I writing a 600 page book? Because I'm an idiot.) Cc: @grimalkina.bsky.social
A copy of the Psychology of Software Teams by Cat Hicks
040
Reposted by @noelwelsh.bsky.social
Felienne Hermans @felienne.bsky.social · 01/07/2026
Podcast alert!!!! Together with Hanna Schraffenberger I am launching the Computer Science Off Course Podcast Today! Computer Science curricula are very very narrow in scope with a lot of math and algorithms, but very little meta science, philosophy or history.
A laptop screen showing our new podcast Computer Science Off Course on rss.com
54419
Reposted by @noelwelsh.bsky.social
zeu @zeu.dev · 29/06/2026
third paragraph killed me
2211
Reposted by @noelwelsh.bsky.social
Crystal Fleming is on sabbatical @alwaystheself.bsky.social · 17/06/2026
I could scarcely believe my intuition was right. I sort of said it as a joke -- "How do we know your talk wasn't written by AI?" But in truth, something in the rhetoric, argumentation, possibly even the tone, felt AI-ish. When he shifted in his seat, I thought he was offended by the implication..
52372102
noelwelsh.bsky.social @noelwelsh.bsky.social · 01/06/2026
Today is the day all the pieces came together and I figured out the capability-passing UI library 🎉 The idea has been obvious to me for a while, but the details (if you want to the type system to be useful) had eluded me.
110
noelwelsh.bsky.social @noelwelsh.bsky.social · 29/05/2026
man pages are basically Jeopardy: if you know the answer they'll tell you the question.
020
noelwelsh.bsky.social @noelwelsh.bsky.social · 27/05/2026
I'm a committee member this year, and I would rank >90% of the current proposals more highly if they fixed some basic mistakes. The number one mistake is not including enough information to allow me to properly assess the proposal. I'll be at this event, and will offer all the advice I can.
010
noelwelsh.bsky.social @noelwelsh.bsky.social · 27/05/2026
This year's @scaladays.org is accepting 2 hour workshop proposals, in addition to the more usual 30 minute talks. I'm thinking a workshop on building terminal apps using Scala Native could be fun. What do you think? What workshops would you like to see at the conference?
100
Reposted by @noelwelsh.bsky.social
London Scala @londonscala.bsky.social · 27/05/2026
Interested in speaking at Scala Days? Join us this evening at the Scala Days proposal hack! Informally discuss your proposal with members of the program committee and other speakers. Join us online at 7PM BST / 6PM UTC: meet.google.com/uay-ynsm-djx Find out more: www.meetup.com/london-scala...
meet.google.com
Meet
Real-time meetings by Google. Using your browser, share your video, desktop, and presentations with teammates and customers.
011
noelwelsh.bsky.social @noelwelsh.bsky.social · 22/05/2026
Scala Days CFP is open and the London Scala User Group is running an online event to help people create a proposal: www.meetup.com/london-scala... I'll be attending to help out. I'm also on the program committee this year. I encourage any potential speakers to attend!
meetup.com
Scala Days proposal online hack, Wed, May 27, 2026, 7:00 PM | Meetup
Are you interested in speaking at [Scala Days](https://scaladays.org/), but not sure what to speak about? Join the Scala Days proposal hack! Come and discuss ideas in a fri
021
noelwelsh.bsky.social @noelwelsh.bsky.social · 18/05/2026
It's time to take capture checking for a spin. I know this should work in theory, which in theory is the same as practice.
000
noelwelsh.bsky.social @noelwelsh.bsky.social · 05/05/2026
Coding agents are great at minutiae, but lack taste. Given the chance, they will quickly turn a code base into a big ball of mud. The question is, is this a limitation of the reasoning ability of LLMs, or is it replicating the patterns in the training data?
130
noelwelsh.bsky.social @noelwelsh.bsky.social · 28/04/2026
I hold this truth to be self evident (until I get around to writing it up): Capability passing is a great way to structure a UI toolkit. In fact it's the model implicitly behind many current frameworks. Capability passing effect handlers formalize what is already going on, and add expressive power
000
noelwelsh.bsky.social @noelwelsh.bsky.social · 27/04/2026
IIUC, capability passing effects (see Effekt language) are another example of def/use distinction, in this case pushing requirements for effects from point of definition to point of use. Interesting how often this comes up, but it doesn't seem to be widely recognized as a general pattern.
se.cs.uni-tuebingen.de
110
noelwelsh.bsky.social @noelwelsh.bsky.social · 24/04/2026
What are the best practices for creating APIs in a post-LLM world? I think that was is good for humans is also, broadly, good for LLMs. But what about a builder API, that optimizes for dot-driven development (press . and follow the autocomplete). Does that still make sense, or is it unnecessary?
100
Reposted by @noelwelsh.bsky.social
London Scala @londonscala.bsky.social · 18/03/2026
Thank you for attending last week's Scala Talks! Thanks go to Medidata for having us round for pizza, drinks and a beautiful venue. Special thanks go to our fantastic speakers Tomasz Godzik and @noelwelsh.bsky.social . See you next time!
112
Reposted by @noelwelsh.bsky.social
London Scala @londonscala.bsky.social · 18/03/2026
🗒 from us docs.google.com/presentation... 🗒 from "Metals Version 2!" by Tomasz Godzik : slides.com/tomekgodzik/... 🗒 from "Code as Communication: Lessons from Crashing Production" by @noelwelsh.bsky.social : noelwelsh.com/talks/commun...
docs.google.com
2026-03-11-London Scala Talks Intro Deck
START: 6:40PM Join our Discord https://discord.gg/aRCVCHmHES
011
noelwelsh.bsky.social @noelwelsh.bsky.social · 17/03/2026
@shriram.bsky.social Looks like your grousing about train refunds on social media has paid off! www.bbc.co.uk/news/article... Myself and other Brits will now be queuing up with other policy suggestions we'd like publicized 👍
bbc.co.uk
Train delay repay rule changes to make claims easier
There will also be additional checks on railcards during a trial to crack down on fraud.
110
noelwelsh.bsky.social @noelwelsh.bsky.social · 11/03/2026
I wrote up some thoughts on Zig's comptime: Parametricity, or Comptime is Bonkers noelwelsh.com/posts/compti... I think comptime is great (staging!) but it's not the right approach to generic types in my opinion.
noelwelsh.com
Noel Welsh: Parametricity, or Comptime is Bonkers
021
noelwelsh.bsky.social @noelwelsh.bsky.social · 03/03/2026
Just installed speech-to-text (Voxtype) on my Linux PC. It's incredible that this is all free and runs locally. It feels like magic.
110
Reposted by @noelwelsh.bsky.social
The Scala Programming Language @scala-lang.org · 02/03/2026
🛠️ sbt 2 is nearing stable release - let’s migrate the plugin ecosystem together! The new sbt2-compat plugin was developed by the Scala Center to simplify cross-building sbt plugins for sbt 1 and sbt 2. Learn more on how to migrate:
scala-lang.org
Migrating sbt plugins to sbt 2 with sbt2-compat plugin
A case study of how sbt-assembly uses sbt2-compat to cross-build for sbt 1 and sbt 2, and a guide of how to use it for your own plugins.
0142
noelwelsh.bsky.social @noelwelsh.bsky.social · 02/03/2026
Claude makes an incredible writing companion. I took @shriram.bsky.social's advice and installed Claude code, and I'm using it a sounding board for working on my book. What would have been a day or two kicking around a concept until it crystalizes has become tens of minutes of discussion.
151
noelwelsh.bsky.social @noelwelsh.bsky.social · 24/02/2026
Subtle effect of the rise of LLMs: I can no longer write "the person writing the code".
110
Reposted by @noelwelsh.bsky.social
André Arko @indirect.io · 16/02/2026
OH so like a functional programmer to not have class consciousness
49114
noelwelsh.bsky.social @noelwelsh.bsky.social · 16/02/2026
I don't normally post my email newsletter, but I thought this one was a banger: on the dualities between constructor injection, the reader monad, comonads, and effect handlers. If that sounds like your jam: buttondown.com/functionalpr... (Or just grab the book! functionalprogrammingstrategies.com)
functionalprogrammingstrategies.com
Functional Programming Strategies
065
Reposted by @noelwelsh.bsky.social
Mimi Reyburn @mimi.computer · 09/02/2026
come join us again @feelingof.london for demos and good vibes! 😌💚
075
Reposted by @noelwelsh.bsky.social
Liz Fong-Jones (方禮真) @lizthegrey.com · 07/02/2026
🎯🎯🎯 "When you start to treat an LLM with cruelty, the only thing you're really revealing is what you have in your heart, not whether the machine has one... Practicing this language - even toward AI - normalizes the social patterns that enable cruelty toward humans."
2123429
Reposted by @noelwelsh.bsky.social
chrisb @boscolo.co · 05/02/2026
AGI is when everyone is using emacs
1133
noelwelsh.bsky.social @noelwelsh.bsky.social · 04/02/2026
I wrote up my recent exploration of OxCaml: noelwelsh.com/posts/a-quic... This is a quick overview, and an example and discussion of unboxed types. More to follow, if time allows!
noelwelsh.com
Noel Welsh: A Quick Introduction to OxCaml
020
Reposted by @noelwelsh.bsky.social
Anil Madhavapeddy @anil.recoil.org · 01/02/2026
Got my website running live on my zero-allocation (ish) OxCaml webserver! First of a series of posts on building out our planetary computing system infrastructure using the performance extensions in the Jane Street fork of OCaml. anil.recoil.org/notes/oxcaml... (and thanks @thenumb.at for tips)
anil.recoil.org
My (very) fast zero-allocation webserver using OxCaml
Building httpz, a high-performance HTTP/1.1 parser with zero heap allocation using OxCaml's unboxed types, local allocations, and mutable local variables.
3164
noelwelsh.bsky.social @noelwelsh.bsky.social · 02/02/2026
For five years I convinced myself I was a boring Linux user who would stick with Ubuntu. One week ago I cracked, installed Arch, and now I'm onto my second window manager (Niri) and in love with tweaking little dotfiles (and keyboard oriented workflows)
030
noelwelsh.bsky.social @noelwelsh.bsky.social · 26/01/2026
¡ʎɐp ɐᴉlɐɹʇsn∀ ʎddɐH Getting ready for the traditional Australia Day barbie! 🇦🇺🐨🦘🪃🪰🦈🐊🐍🕷️
A BBQ setup inside a conservatory. It's an electric BBQ, so we aren't going to die of carbon monoxide poisoning. That would be downright un-Australian!
000
noelwelsh.bsky.social @noelwelsh.bsky.social · 24/01/2026
Used OxCaml unboxed types to create a very simple arithmetic interpreter with ~zero allocation. The documentation is lacking but the overall vision is compelling! I find it more ergonomic to work with than Rust; there is a very gentle slope from writing normal GC'ed code to optimized code.
010
noelwelsh.bsky.social @noelwelsh.bsky.social · 19/01/2026
Thanks for some help from @jonoabroad.bsky.social, Doodle now supports tags and attributes in SVG drawings! A few examples here in the documentation: www.creativescala.org/doodle/svg/t...
creativescala.org
Tagging Pictures
docs
050
Reposted by @noelwelsh.bsky.social
Michael "Fallen Coffee Pot of Shadows" Senters the Sigillite:ABD @mikesenters.bsky.social · 19/01/2026
61542435
Reposted by @noelwelsh.bsky.social
Daniel Benneworth-Gray @danielgray.com · 19/01/2026
COW TOOLS COW TOOLS COW TOOLS
theguardian.com
Back-scratching bovine leads scientists to reassess intelligence of cows
Brown Swiss in Austria has been discovered using tools in multiple ways – something only ever seen in humans and chimpanzees
212180785022
Reposted by @noelwelsh.bsky.social
Joe @doscienceto.it · 15/01/2026
Yesterday Evening, I gave a talk about using #Haskell for #3DPrinting at the London #Scala User Group @londonscala.bsky.social https:// doscienceto.it/cad-talk-scala/
doscienceto.it
How I Use Haskell for 3D Printing
151
noelwelsh.bsky.social @noelwelsh.bsky.social · 07/01/2026
Finished the chapter on types in the book! This was a fun one. Got to revisit the @lexi-lambda.bsky.social classic "Parse, don't validate" and waffle a bit about extensional versus intensional view points. This duality comes up surprisingly often! It's the same thing as FP (data) vs OO (codata).
100
Reposted by @noelwelsh.bsky.social
Jess Rose @jesslynnrose.bsky.social · 24/12/2025
Early Christmas present from me if you're reading this and you're a: - Senior web developer - In London - Really into books and libraries - Looking for work rn I am excited to inform you that the British Library is hiring a new head of web development ce0752li.webitrent.c...
22319
noelwelsh.bsky.social @noelwelsh.bsky.social · 17/12/2025
This is how you nerd!
010
noelwelsh.bsky.social @noelwelsh.bsky.social · 16/12/2025
@kubukoz.mstdn.party.ap.brid.gy made this very nice video about the web framework I've been working on in my spare time: youtu.be/lY88Z1JnUpI You should check it out! (The framework itself is at www.creativescala.org/krop/)
youtu.be
Make delightful web apps with Scala and Krop!
YouTube video by Jakub Kozłowski
021