Where will we be in another 4 years?
Possibly somewhere amazing, but see also: https://x.com/pronounced_kyle/status/1768852493092680036
HN user
I'm Bob Nystrom.
I worked at EA for eight years. I wrote "Game Programming Patterns" (gameprogrammingpatterns.com) and "Crafting Interpreters" (craftinginterpreters.com). I work at Google on the Dart language. I'm into programming languages, music, UX, software architecture, electronics, cooking, and lots of other stuff.
https://github.com/munificent robert@stuffwithstuff.com
Where will we be in another 4 years?
Possibly somewhere amazing, but see also: https://x.com/pronounced_kyle/status/1768852493092680036
<3
As a user and consumer of objects, sometimes I want a meaningful experience with a thing made lovingly by human hands. I will take a dinner cooked by my friends over take-out any day of the week even if the restaurant makes objectively better food. But sometimes I am happy to use a mass produced utilitarian object because it solves the problem. I don't have an emotional relationship with my stapler.
These two perspectives are not completely separate. In practice, every object has some mixture of human care and machine optimized productivity.
Likewise, as a producer of objects to be used by others, I want them to have a meaningful connection to me as the maker. But I also want to be able to produce more objects more efficiently so I can affect the lives of more people.
Again, those are not entirely separate stances. With my books, I hand-lettered every single word in the illustrations. But I scanned those and cleaned them up in Photoshop instead of painting over mistakes with correction fluid, and I use the magic of the web and print on demand to put those books in front of thousands of people.
I think most people have had a very uneasy truce with the amount of soulless manufactured junk in our lives versus the crafted things that we cherish. Most of us have a nagging feeling as we sit in our IKEA-filled homes watching parasocial videos on our phones that despite all the material boons industrialization has given us, we are suffering from a poverty of meaningful connection. But, also... we keep buying that stuff because stuff is nice and solves real problems.
AI has set off a bomb right in the center of that uneasy truce and now all of us are struggling to work through the psychological fallout. It is a true fact that AI will make it much easier and cheaper to produce more digital goods with real utilitarian value. It is also a true fact that it will flood our social spaces with slop and make it even harder to find a real connection with a real human in that hazy smoke of AI bullshit.
Reconciling those is the existential question of our generation. I don't believe it will be solved by taking a side. It will be solved, if at all, through some sort of more meaningful synthesis of the two halves.
Why bother having Copilot write documentation ahead of time? For the people who need it, they can just ask Copilot the one targeted question they have in that moment and it will serve them a textual answer to exactly that.
Having an AI write docs which are then saved and served strikes me as in the same uncanny valley as fax machines. It's a halfway step that doesn't understand the full import of a new technology. In that case, what you really want is emailing PDFs around and docusigning.
With AI documentation, let users request the docs they need on-demand.
"Musician" is the obvious answer but so many people who make electronic music are hesitant to call themselves that, maybe because they think you have to have mastered some physical instrument to call yourself that?
Oh yeah, Quincy Jones was a genius. I listened to the whole "Off the Wall" album a while back with headphones on and it's just a sonic masterpiece.
I make electronic music as a hobby, and I feel the same way about the term "producer".
I understand the history behind where that term came from. (The people who were making musical decisions while standing behind the mixing board often were initially producers: people whose job it was to oversee the entire production and coordinate between the musicians, engineers, etc. Then when DJs at discotheques wanted longer versions of songs for dancefloors, remixes were invented. Producers took existing recordings and made longer versions. Then electronic dance music sort of evolved out of that.)
But it still feels like such a soulless term. And most "producers" today are just sitting at home alone with a laptop and Ableton, so the role is very different than it was.
I think you may be underestimating how much photographers and cinematographers also compensate for this by choosing subjects and lighting carefully to re-convey a sense of depth lost by stereoscopic vision.
This is, I think one of the biggest differences between a skilled and amateur photographer. Amateur photo and video work looks flat because they are pointing the camera at a scene that looks fine to them in reality, but the resulting 2D image is flat and they don't know why or what to do about it.
I find a particularly stark example is forests. Walk into a random forest and you will find your sense of being surrounded and in an immersive, evocative, deep space to be very strong. Then fire off a quick photo and the result will be a chaotic uninspiring flat mess.
Yeah, something the article doesn't mention is that videogames have to overcompensate with things that provide the illusion of depth because the viewer is missing their usual stereoscopic vision. The game is already at a disadvantage, and players need to be able to read scenes quickly to play the game effectively.
Your comment is very assertive, but also doesn't offer much in the way of science.
Being able to compile ML quickly in the 90s tells you little about being able to compile Roc or some other language today because the language design enforces hard constraints on the algorithms necessary to compile it and the hardware today is much more complex. It's not hard to write a fast Pascal compiler that targets a 1980s chip with shallow pipelines. But that's not the problem being solved here.
I don't know much about Roc but it looks like it's got some amount of overloading and the linked article alludes to sophisticated algorithms to avoid heap allocating closures. Those can enforce algorithmic complexity in the compiler that is essential and can't be eliminated.
Once you're at the limits of algorithmic optimization, all that's left is reducing constant factors. I've written code in many languages in different performance regimes over the years and it's certainly the case that higher level languages, especially managed memory ones, put a hard floor in terms of how low you can go when optimizing to improve those constant factors.
I have seen in real-world code where explicit control over memory layout improved performance by more than an order of magnitude. I have friends in the game industry where much of their career is this kind of work. Those people would love to live in the luxurious world you describe where all they need to do is find a sufficiently clever algorithm and all of their performance problems will disappear.
Good article. Some related bits that other languages do:
Swift is able to avoid monomorphizing even when the type arguments have different GC shapes and allocation strategies. To do that, the dictionary (what Swift calls a "witness table") has entries for the functions the memory manager needs to allocate and trace a value of type argument's type.
Go's notion of dictionary and Swift's witness tables share a lot of DNA with how Haskell compiles generic code using type classes.
C#/.NET does an interesting hybrid approach. When source code is compiled to .NET bytecode, the generic code is only compiled once. Then at load time, the JIT will take that bytecode and monomorphize it to native code for each instantiation using a value type (primitive or struct). But instantiations of reference types all share a single JITTed implementation.
My restorative mode is also "turn self towards sun, don't do anything unnecessary".
Dueling is a very different phenomenon. Duels were typically done away from urban centers and involved only the participants. They were not done to annoy other random people.
I'm no expert, but you could do a whole deep dive on the sociology behind dueling to get a better sense of what socioeconomic conditions led to it.
Just saying "the stegosaurus is like a peanut butter cookie" to establish an analogy doesn't immediately confer wisdom. An analogy has to actually be between things that have meaningful similarity. If we were, say, talking about street racing for pink slips, then maybe the dueling analogy would be more useful.
How is it possible for deciding whether or not to build on the labor of some other organized group of people to not be politics?
Someone putting performance exhaust on their cool car isn't likely to disturb me in my home.
We are not all so lucky. I live one door down from an avenue that does sometimes get these kinds of vehicles and it 100% disturbs me in my home.
I understand that living in a society means that sometimes people will do things that inconvenience me. I am much more understanding of that when the inconvenience provides some clear benefit to the other person in return.
But in this case, annoying strangers is the point. When you're in the car, you aren't hearing the 100+dB exhaust. It's not a necessary path to optimizing the car's performance. It's just being an asshole to demonstrate to the world that they are powerless to stop you from being an asshole.
they will finally get the respect they deserve.
I believe this is a big part of it. With the rise of corporations and media, we have seen a loss of any sort of public commons. A consequence of that is that I think many people here in the US don't feel like they are part of a community. They don't feel seen by any sort of meaningful tribe, outside of their job, which is transactional and subject to the whims of corporate overlords.
So much pathological behavior in society today makes sense when seen through the lens of "this is a person who feels isolated screaming out for any kind of acknowledgement of their existence".
This is a good time to point out that slippery slope is a fallacy.
Saying, "Experiencing some friction is good for building character" is not equivalent to saying "We should demolish all technology and force babies to survive on their own in the woods."
That the extreme position is wrong does not strictly imply that the moderate position is too.
I mean, he's 83. No one's battery runs forever.
Everyone lives in a world deeply affected by social media. Even if you've never looked at a screen your entire life, you have spent thousands of hours talking to and being informed by people who did.
Anyway, telling agent to NOT do something is always worse than telling agent to do something.
That's why you should say something like "Use constants instead of magic strings/numbers" rather than "Do not use magic strings/numbers".
Pro tip: This is good guidance for communicating with humans as well. Don't just block people but give them a path forward. (But don't force them down that path, because people really hate feeling like their agency is being impinged.)
and the latter is neither unique nor particularly widely used (hot reloads have to tangle with state and patching, so resetting the world for ease of reasoning is considered a best practice for a reason).
For what it's worth, hot reload is very widely used in Dart/Flutter. When you are writing UI code using a reactive style framework where rendering the UI appears to be "generate a new UI from scratch on each frame", it's more straightforward to have an intuition about what does and doesn't get reloaded.
It's not perfect, of course. But it works really well for the kind of changes you make when iterating on a user experience.
When you buy a book, it doesn't include the typewriter it was written with.
Because big companies can spend way more on marketing than you.
If a big company decides to make a game very similar to yours, they can make theirs win by throwing more money into marketing than you can. Do you want them to spend that marketing budget on your competition or on you?
All of this is true and has been true for decades in the game industry.
The other side of this seesaw is: Games are fundamentally in the novelty business. Players like some amount of familiarity, but they want new experiences. Every game engine has a sort of "grain" to it where it tends to produce games with a certain look and feel. The flat-ish shading and floaty physics of Unity is a particularly visible example of this. So using a widely used game engine can put you at a disadvantage if you're trying to make a game that doesn't go with that grain and offers players something different.
As more studios consolidate on the same engine, more players will get tired of that sameness and reward other studios more. As more studios do their own thing, players will become saturated with novelty and the benefits of not using an engine will go down. There is no stable equilibrium.
No screen glow, no keyboard, no chat UI.
Is this not just... a chat UI?
It's fascinating how "profitable but low margins" equates to "struggling" to so many.
A high revenue but low margin business is a lost opportunity to invest that same revenue in a different area with better margins.
When I had kids, I made a deliberate choice to focus on hobbies that were more amenable to interruption.
I mostly put aside music and any physical artform that required getting out and putting stuff away each session. Instead, I did a lot more writing, programming, and making stuff on my laptop since pausing and resuming was only a Ctrl-S away.
It also required learning the meta-skill of being able to break a large project into tiny pieces. I got a lot better at leaving notes to myself, not having too many projects going on in parallel, and thinking about problems when I was otherwise idle.
By that same logic, you could compare a room full of 7-year-olds to a room full of teenagers and claim that the school system gives people sexual libidos.
It's true that adolescents are very behaviorally different from younger kids, but it isn't clear how much of that is natural biological development, how much is parenting, how much is culture, and how much is the school system.
This is a really good article. Not to take away from its insight, but I think the author is very close to restating some of the central points of "The Pragmatic Programmer", especially around YAGNI and KISS.
the whole speech is taking Matt Damon’s character down a peg.
That's the entire point. That's why the speech ends with "your move, chief".
Sean (Williams' character) is deliberately being confrontational because Will is avoiding making any psychological progress by putting on a fake mask, an avoidance strategy which has been successful with previous psychologists. Sean sees what Will doing and knows that the only way to get Will to stop is to knock the mask off.
In order to get through to Will, Sean has to make Will stop putting up a front, which Will doesn't want to do. So Sean has to go on the attack and break down Will's resistance. He does that by taking a direction that he know will be effeective: Will's own insecurities about his lack of lived experience.