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.
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?
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.
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.
> 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.
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.
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.
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 [email protected]