One of the interesting things about the lambda calculus is its universality: by itself, it's a complete foundation for computation.
Here's a different old post of mine showing how to build the rest of the programming language, all in a miniscule subset of Python that is the pure lambda calculus:
You can even extract recursion out of the Y combinator or the more primitive U combinator -- out of nothing but lambdas!
So, it's lambdas all the way down.
Another interesting thing about the lambda calculus is that it wasn't intended to be a programming language. When Alonzo Church created it, there were no computers to program.
Alonzo Church was trying to solve problems in the foundations of mathematics.
But, untyped lambda calculus has a "bug" that makes it problematic for mathematics -- the self application that enables recursion is a problem if you're a logician who cares about soundness, but it's fantastic if you're a programmer.
I don't think of functional languages as obfuscating. I think of them as terse and expressive. They let me most directly encode the model in my head as running code.
I think what I don't get is a mental model of what they do, and how that maps onto problems I write code to solve. It's possible it's just that s-expressions are good at solving a problem I don't have and don't really understand.
Indeed! And since your article is not particularly about JS and can be read by anybody, including people not familiar with (modern) JS, I'd argue that the form you used is way clearer than the arrow function form and would probably still be a better choice should you write this article today :-)
Wondering the same, and in somewhat different terms.
And as models shrink in size yet go up in intelligence and performance, I'm finding ever more life in older hardware.
When I got my M1 Max in 2021, GPT-3 was about 1.5 years old and it was SOTA.
Yet, that machine is now able to run models that crush with gpt4, and even compete with o1 (SOTA from about 1.5 years ago.)
The idea that I could run something like that locally would have seemed absurd in 2021.
Yet, if somehow I'd had those local models in 2021 on the exact same hardware, I would have had, by far, the most powerful AI on the planet -- and that would have remained true for the next several years.
I'm also noticing that the ever-improving smaller models I can run on this machine are crossing the "good enough" threshold for ever more tasks by the month.
I just don't need a frontier model for every task.
I have an M4 Max 128 GB RAM now, but I still find plenty of tasks to delegate to the M1 Max machine.
I don't know how far this can go in the limit in terms of packing more intelligence into smaller models, but older hardware, if maintained well, seems like it's going to increase the value it can deliver in terms of "intelligence per watt-hour."
Original author of the guide here. Wonderful to see these little illustrations still making the rounds. I first published them in 2010!
To those in the comments who mentioned you are just starting your own PhD: Good luck to you! And, I hope you, like I once did, find a problem that you can fall in love with for a few years.
To those just finished: Congratulations! Don’t forget to keep pushing!
To those many years out: You have to keep pushing too, but there can be tremendous value in starting all over again by pushing in a different direction. You have no idea what you may find between the tips of two fields.
Nothing to feel bad about. Thank you for sharing that too.
My son’s life changed my own in profound ways, and even though he died four years ago, he is still changing my life in profound ways. I am always grateful for the reminder and to reconnect with the purpose that his life gave to mine.
That post also reminds me that while he was alive, I did the best I could for him under my abilities, and that’s all any parent can do in the end.
Any advice for PhD dropouts? I spent years and years pushing against that boundary in an obscure corner of my field and it never moved. What little funding I had dried up and I left grad school with a half finished dissertation, no PhD, and giant pile of broken dreams.
I'm sure over the years you've known students who have started a PhD and not finished. What (if anything) have you said to them? Do you feel their efforts had any value?
I'm a PhD dropout myself. Serious question: what kind of advice are you looking for exactly? This is not intended as an insult, but it sounds like what you're looking for is not advice but rather consolation, which is natural and understandable given the circumstances.
I'll give you advice. Success in pursuing a PhD isn’t just about the discipline or the degree—it’s about finding the right environment to support you. If earning your PhD is still a dream, focus on identifying a program that aligns with your needs and strengths. Look for a school with the right resources, a program that’s well-structured, and, most importantly, a supportive advisor who believes in your potential. Combined with your dedication and passion, these factors can make all the difference in achieving your goal. Don’t lose heart—sometimes, the right opportunity can change everything.
Disclaimer: I have no idea what I'm talking about. I've never participated in a graduate program.
>>> but there can be tremendous value in starting all over again by pushing in a different direction.
This rings true for me at this time. Done about 10 years now, never went into academia but direct into industry. Things seem a bit stale, maybe its time to pick and research something new. I've been hesitating on the "going back to school" thing. But quantum does show promise, for curiosity and potential rather than immediate impact.
Matt thanks for the encouraging words... enjoyed your compiler class and sad that you didn't end up in my PhD committee... done 3 years now but stuck lol.
Same! I use ollama a lot, but when I need to do real engineering with language models, I end up having to go back to llama.cpp because I need grammar-constrained generation to get most models to behave reasonably. They just don't follow instructions well enough without it.
One of the interesting things about the lambda calculus is its universality: by itself, it's a complete foundation for computation.
Here's a different old post of mine showing how to build the rest of the programming language, all in a miniscule subset of Python that is the pure lambda calculus:
https://matt.might.net/articles/python-church-y-combinator/
You can even extract recursion out of the Y combinator or the more primitive U combinator -- out of nothing but lambdas!
So, it's lambdas all the way down.
Another interesting thing about the lambda calculus is that it wasn't intended to be a programming language. When Alonzo Church created it, there were no computers to program.
Alonzo Church was trying to solve problems in the foundations of mathematics.
But, untyped lambda calculus has a "bug" that makes it problematic for mathematics -- the self application that enables recursion is a problem if you're a logician who cares about soundness, but it's fantastic if you're a programmer.
I don't think of functional languages as obfuscating. I think of them as terse and expressive. They let me most directly encode the model in my head as running code.