Today I LearnedRSS

January 2025

Lecture Friday: The Ultimate Guide to JTBD

Lecture Friday: Colleague sent me Bob Moesta as a reference when we were talking about a few things. I love the 2x2 framework discussed when thinking about why people change products.

Difference between Spline, B-Spline and Bezier Curves

https://www.geeksforgeeks.org/difference-between-spline-b-spline-and-bezier-curves/

A great primer on a few useful curves. You can never understand curve functions too deeply if you're working in computer graphics.

Beware of Metacognitive Laziness: Effects of Generative Artificial Intelligence on Learning Motivation, Processes, and Performance

https://arxiv.org/pdf/2412.09315

Worth keeping in mind. I'd love to see a replication and further extensions here to see what sort of effects were likely to see.

Let's Talk About AI And End-to-End Encryption

https://blog.cryptographyengineering.com/2025/01/17/lets-talk-about-ai-and-end-to-end-encryption/

Another step towards treating users like cattle instead of pets.

Mistakes Engineers Make in Large Established Codebases

https://www.seangoedecke.com/large-established-codebases/

Another acolyte of Socrates. I like the idea that the ability to work on large legacy codebases is what separates senior developers from junior developers. I mean, it's self serving since I'm someone who works on such code bases. Either way, good food for thought on development.

That's Not an Abstraction, That's Just a Layer of Indirection

https://fhur.me/posts/2024/thats-not-an-abstraction

Go look at abstract art. Now look at your abstraction. Well those don't go together.

Yeah, your abstraction is just giving things names. Real abstraction moves away from the nature of of the thing. Relational algebra is an abstraction away from searching tuples of information. JSX is Javascript wearing an HTML skin suit. Knowing the difference is important.

Why Events Are A Bad Idea (for high-concurrency servers)

https://web.stanford.edu/class/cs240/readings/events-bad.pdf

Paper showing threads and events are just isomorphisms. They advocate for greater compiler support of threads, which is something I haven't really seen outside of language extensions like Cilk. I'd love to see what more we could do with the compiler to better signal context switching to the system rather than trying to outsmart it from our local point of view as we keep trying with userland threading.

Python for Lisp Programmers

https://www.norvig.com/python-lisp.html

I've always thought Python was fairly lisp like if lisp was based on dictionaries instead of lists. Sure Python's syntax isn't expressed in terms of dictionaries, but the runtime generally is.

Wikipedia: Amdahl's Law

https://en.wikipedia.org/wiki/Amdahl's_law

It's important to understand that horizontal scalability is also limited. You can't just throw more cores at a problem. There are those tasks that are embarrassingly parallel, but they represent only a subset of interesting computations.