Jonathan Blow talking about his past, of course ab...
# thinking-together
s
Jonathan Blow talking about his past, of course about games, but also about programming today, open source, C++, Rust, the future of programming, and many other issues people here will be interested in (and/or annoyed by his perspective ;-): https://oxide.computer/blog/on-the-metal-9-jonathan-blow/
🍰 1
d
I liked Jonathan Blow's use of the term "Stockholm Syndrome" to describe Catherine West’s defence of the Rust borrow checker, and of the code she was forced to write to avoid getting borrow errors. I think it is an apt metaphor for what can happen to our mind when we learn to work around the limitations of any programming language. In particular, it's when we start to tell ourselves that these limitations are for our own good, and that "all is for the best", in the manner of Candide. I don't wish to single out Rust: the truth is all programming languages suck.
k
Heads: "constraints breed creativity" Tails: "constraints breed Stockholm Syndrome" flip
❤️ 2
😀 1
d
Blow's comment resonated with me because it relates to a conversation I've had many times, with multiple people, about multiple languages: 1. In some corner of Language X, there is high incidental complexity and a steep learning cliff. 2. A user expends much intellectual effort climbing this cliff and mastering the complexity. 3. When this user reaches the top of the cliff, they have a "Eureka!" moment. They've figured it out. It all makes sense now. 4. The intense emotions released by the Eureka experience effect a religious conversion. They become disciples of the one true programming language. The cargo cult rituals design patterns required to manage and tame the incidental complexity are best practices: they are important and necessary. Languages that lack this complexity are obviously inferior.
Here's another way of thinking about it. Programming languages that force a lot of incidental complexity on you suck, because that complexity is just a barrier to getting things done. However, lots of people are attracted to the programming field because they love solving puzzles. Languages that suck really badly require more puzzle solving to use effectively, which has the perverse consequence that they get a more devoted cult following.
w
Genuine vs false insight is most certainly a topic near and dear to Blow's heart. This interview was fantastic, and I've noticed that the more Blow talks about this stuff the more nuanced he becomes — not tolerant of ill considered nonsense or the kids these days — but willing to scope claims.
💯 1
👆 1
s
just finished, loved the interview! Alan Kay in one interview talked about one of the tells for a PL designer is to be physically ill when using existing programming languages. Blow embodies this perfectly
g
My personal bias is that JBlow doesn't really know what he's talking about and is ranting about the same things I ranted about before I got schooled. Or in other words, when all my experience was game dev I had a similar opinions (GC is shit, memory allocation should be avoided at all costs, languages far from the metal suck, ...) and that it took getting out of game dev to accept that each thing has their place. As one example back when JAI (his language) started he mentioned he didn't care about memory errors because he doesn't make those kinds of bugs. I nodded in agreement when I read that. But, thinking about it more I'm just guessing most games he worked on first off have to only deal with a limited number of situations compared to many other apps, and are coded by a fairly small team. Compare say to Chrome which in 2013 had at least 700 programmers working on it. You just can't expected 700 programmers to all know exactly what assumptions each other were making. You arguably need the language to help you find, prevent, enforce the very issues he doens't care about. As another example he doesn't care about security what so ever AFAICT. About bad data allowing an app to be compromised, About sandboxing and all the things needed to make an app/os safe from exploitation. He probably uses very few 3rd party libraries and those few he does use are probably trustworth. But, aruably most devs throw libs together and many of those libs do bad things (install hooks for analytics, report data they shouldn't, ...). Mobile apps on both iOS and Android seem to be full of those issues from 3rd party libs. Other examples include hating on GC and yet 10s of 1000s of games have shipped via Unity with GC (and Unreal has GC as well). That includes hit 60fps action games. Maybe you could argue hating on load times (I hate load times) but it's never affected Valve's old games all of which have horrible load pauses (Half Life, Half Life 2, Portal, etc... basically all Source Engine games) He sees browsers as bloated (and I'm not saying they aren't to some degree) but before I worked on one I had no idea all the issues they have to deal with that I never had to deal with in games. Threats from all levels. Untrusted data everywhere, bad videos, bad jpegs, bad network requests, bad code, handling every language on the planet and many other things. He had a rant speech someone else posted here once and in it he had these conflicting rants. He ranted that he was upset that each platform has a different GPU API. But at the same time he wants his own engine. He doesn't want to use Unreal or Unity. To put it another way, he's upset that different people have different ideas for how you should access the GPU and thinks there should be just one way but there shouldn't be just one way to make a game engine. I'd argue the 2 go hand in hand. There are muliple game engines because their are different opinions on what is best. Similarly there are mulitple GPU APIs because their are different opinions on what is best. To have one of either would require commitees to argue forever about what the one true way is and stifle innovation. By having multiple of each different teams can advance faster by not having to coordinate. Microsoft doesn't have to wait for some committee to approve a new feature. They just add what they want to DirectX and the others play catch-up. Apple doesn't have to wait for anyone else to add stuff to Metal. I could go on, like on the ridiculousness of comparing 8bit computers booting up instantly to today's machines. Yes my Atari 800, Apple II and C64 turned on immediately. They didn't connect to hard drives, sd cards, network storage. They had a 320x240 screen with max 4 bits of color. They didn't draw 100k+ international characters, didn't support infinite input devices, multiple monitors, virtual monitors over a network. They didn't multitask. Taking a step up to 80s PCs we no longer have to run QEMM to optimize how are memory is used or set dip switches on our PCI cards to allocate interrupts. That's not to say things couldn't be more optimized if you started from scratch but if you start digging through all the pieces you'll uncover why they are the way they are. Why for example it's better that there is a full computer in your hard drive and it's not just a dumb device run by your PC and why there is a negotiation for how to talk to it etc... as just one example of why todays machines are not comparible to 8bit computers and to see some kind of ideal as more like the 80s is to not really think deeply about the issue. Anyway I liked the idea of JAI optimizing for programmer joy but I don't know if JAI will actually be joyful except for people who drink his kool-aid.
👍 1
1
❤️ 1
w
@gman Yeah, that rant talk isn't Blow's finest. Jai has a niche, and the 700 person team let alone the wide web is not that.
s
thanks for your perspective @gman I think there are a few key kernels / threads to JBlow’s thinking: • I want to make a language for games, for advanced programmers to really push the boundaries of software / hardware. He rails on other dev contexts (like browsers or the web) but I think that’s not as important. • JBlow, Alan Kay, and many others dislike the bloat that modern software + hardware interfaces have. In some areas of computing, we’ve figured out how to have a common building / mental block but support a wide range of configurations and use cases. In areas like talking to the GPU though … I do feel like JBlow may be right about this. Also, more generally … I think JBlow, Alan Kay, and others go back to first principles and are really interested in “WTF is a computer fundamentally about”? What are the barriers in the way to just doing computation that are human, cultural, and arbitrary. GPU drivers / interfaces feel like that to be honest! Unreal / Unity are engineering hacks IMO that create an intermediate layer that’s imperfect to deal with the current situation. But … things could be better! Regardless of JBlow’s specific points … I feel like outside Computer Science, there’s more push to try new things, see wha works, and then radically replace what doesn’t work. In computing, we’re the exact opposite. We keep bad ideas around FOREVER b/c of the switching cost. I think this is the key thread in Blow’s talks, putting aside his specific rants / points.
i
This is the most generous I've yet heard Blow be when talking about the programming communities he doesn't have fondness for — academic, JavaScript/React, visual programming. It was nice to hear him articular the details of his qualms with them, rather than the normal "those people are wrongheaded / idiots"-like statements he's made in every previous instance I've seen. I really enjoyed this podcast, and would have missed it otherwise. Thanks for mentioning it here!
💯 2
* articulate (I would just edit my message to fix that typo, but for some reason the Mac Slack client has had some sort of editing bug in the past week. Thanks, JavaScripters!)
s
Calling Unity and Unreal engine engineering hacks is kind of ridiculous and shows you have a limited understanding of game development
At least modern game development
Also if game engines are hacks so is the browser
k
Personally, I think browsers are hacks just like game engines.
s
Game engines could absolutely be more mature in what they do and how they're architected, even (or especially?) big commercial ones like Unity and Unreal, but the major users of game engines are not only programmers, but artists and designers, and even given that most of the programmers at a game studio are not low level graphics or engine programmers, but gameplay programmers
👍 2
Some uses of the browser are hacky, considering it's a hypertext system that was hacked into an application platform
But I actually think the browser is pretty good for software that looks like dynamic documents, it starts to break down with other uses
👍 1
At some point you can get reductive and all software is engineering hacks
And we should clearly be making custom hardware for everything
But unfortunately there are hacks and abstractions there too :'(
I agree that if you built a browser like platform just for application development you'd build something else that was simpler, but it would still look like a modern browser in some ways
👍 1