Jonathan Blow
· Summarized
Key takeaways
- Game development involves complexities beyond just graphics, requiring integration of various compute aspects to create meaningful user experiences.
- The evolution of game programming has been drastic, moving from simple 2D interactions to complex 3D environments requiring advanced techniques.
- Critical examination of memory management and programming paradigms reveals a need for languages that prioritize performance without sacrificing developer productivity.
- The future of programming should focus on creating robust languages and systems that accommodate the demands of modern software while remaining efficient and user-friendly.
Summary
Game Development and Perspectives on Computation
The podcast begins with Brian Cantrell and Jess Frissell introducing game developer Jonathan Blow, known for his work on 'The Witness.' They discuss the unique perspective game development brings, focusing on how computation is used to create experiences for users. Blow emphasizes the complexities involved in game development, including the intricate nature of graphics, game design, and the interaction of various components which are often overlooked compared to visual fidelity.
The Evolution of Game Programming
The conversation shifts towards the complexities within game programming, comparing older games to modern 3D games and discussing the evolution of collision detection and graphics rendering. Blow highlights how the industry has improved in areas such as animation but acknowledges that many challenges remain. They discuss the historical context of game development, touching on classic games and their innovations, such as 'Prince of Persia' and 'Doom.' They also explore the role of hardware in shaping graphics and the interaction between software solutions and the underlying hardware.
Memory Management and Programming Languages
Blow shares his critical views on programming paradigms, particularly garbage collection and automatic reference counting in modern programming languages. They dive into the trade-offs between performance and convenience, discussing how higher-level languages can create inefficiencies. The importance of understanding how memory allocation and management affects game performance is emphasized, suggesting a need for languages that cater to the unique demands of game development.
The Future of Programming and Software Development
The podcast concludes with a reflection on the future of programming languages, the importance of having languages that can address the demands of today's software development, and the role of the Rust language in this evolution. Blow discusses his own project, a new programming language named JAI, which aims to create a balance between performance and ease of use. They emphasize the need for innovation in software development and the importance of creating systems that allow for reliable and efficient code execution.
Sponsors
- Oxide Computer Company · On the metal is brought to you by Oxide Computer Company. The podcast has been more successful than I originally anticipated, and there's been some negative feedback regarding the repetitive ad content. We're acknowledging it and looking for ways to improve it.
Show notes
You can find Jonathan on Twitter at https://twitter.com/Jonathan_Blow.
Some of the highlights of the show include:
- The Witness: https://en.wikipedia.org/wiki/The_Witness_(2016_video_game)
- Prince of Persia: https://en.wikipedia.org/wiki/Prince_of_Persia_(1989_video_game)
- Prince of Persia source code: https://github.com/jmechner/Prince-of-Persia-Apple-II
- Sprite: https://en.wikipedia.org/wiki/Sprite_(computer_graphics)
- Atari 800: https://en.wikipedia.org/wiki/Atari_8-bit_family
- Atari CTIA (chip performing, among many other things, collision detection for the Atari 800): https://en.wikipedia.org/wiki/CTIA_and_GTIA
- Commodore 64: https://en.wikipedia.org/wiki/Commodore_64
- VIC-II (CTIA-equivalent chip found in the C64): https://en.wikipedia.org/wiki/MOS_Technology_VIC-II
- Skeletal animation: https://en.wikipedia.org/wiki/Skeletal_animation
- GPGPU: https://en.wikipedia.org/wiki/General-purpose_computing_on_graphics_processing_units
- GeForce 2080 Ti: https://en.wikipedia.org/wiki/GeForce_20_series
- Cell microprocessor: https://en.wikipedia.org/wiki/Cell_(microprocessor)
- Dennard scaling: https://en.wikipedia.org/wiki/Dennard_scaling
- Amdahl's Law: https://en.wikipedia.org/wiki/Amdahl%27s_law
- Embarrassingly parallel: https://en.wikipedia.org/wiki/Embarrassingly_parallel
- Client-side prediction: https://en.wikipedia.org/wiki/Client-side_prediction
- Particle system: https://en.wikipedia.org/wiki/Particle_system
- Minecraft: https://en.wikipedia.org/wiki/Minecraft
- Red Dead Redemption 2: https://en.wikipedia.org/wiki/Red_Dead_Redemption_2
- Rewinding time to address lag: https://en.wikipedia.org/wiki/Lag#Rewind_time
- Chronostasis (the illusion of time standing still after eye movement): https://en.wikipedia.org/wiki/Chronostasis
- Counter-strike: https://en.wikipedia.org/wiki/Counter-Strike
- SimCity: https://en.wikipedia.org/wiki/SimCity
- Trinity: https://en.wikipedia.org/wiki/Trinity_(video_game)
- Brian Moriarty: https://en.wikipedia.org/wiki/Brian_Moriarty
- Infocom: https://en.wikipedia.org/wiki/Infocom
- Lost Treasures of Infocom: https://en.wikipedia.org/wiki/The_Lost_Treasures_of_Infocom
- Netrek: https://en.wikipedia.org/wiki/Netrek
- Apollo Computer: https://en.wikipedia.org/wiki/Apollo_Computer
- Silicon Graphics (SGI): https://en.wikipedia.org/wiki/Silicon_Graphics
- Time Warner's "Full Service Network" (SGI Orlando project): https://www.nytimes.com/1994/12/12/business/time-warner-s-time-machine-for-future-video.html
- Netscape Communications: https://en.wikipedia.org/wiki/Netscape
- Doom: https://en.wikipedia.org/wiki/Doom_(1993_video_game)
- Wolfenstein 3D: https://en.wikipedia.org/wiki/Wolfenstein_3D
- Ultima series: https://en.wikipedia.org/wiki/Ultima_(series)
- SGI engineers transferred to Nvidia, ca. 1999: https://www.eetimes.com/sgi-graphics-team-moves-to-nvidia/
- Quake: https://en.wikipedia.org/wiki/Quake_(video_game)
- Quake source code: https://github.com/id-Software/Quake
- John Carmack: https://en.wikipedia.org/wiki/John_Carmack
- Michael Abrash: https://en.wikipedia.org/wiki/Michael_Abrash
- Total Entertainment Network: https://en.wikipedia.org/wiki/Total_Entertainment_Network
- boo.com: https://en.wikipedia.org/wiki/Boo.com
- Braid: https://en.wikipedia.org/wiki/Braid_(video_game)
- SIMD: https://en.wikipedia.org/wiki/SIMD
- Pentium U-pipe and V-pipe: https://en.wikichip.org/w/index.php?title=File:24281603.pdf&page=8
- Data-oriented design: https://en.wikipedia.org/wiki/Data-oriented_design
- Jonathan's rant on Rust: https://www.youtube.com/watch?v=4t1K66dMhWk
- Catherine West's closing keynote at RustConf 2018: https://www.youtube.com/watch?v=aKLntZcp27M
- JAI language: https://en.wikipedia.org/wiki/Jonathan_Blow#JAI_language
- "Worse is better" and the "MIT approach": https://en.wikipedia.org/wiki/Worse_is_better
- Smart pointer: https://en.wikipedia.org/wiki/Smart_pointer
- D language: https://en.wikipedia.org/wiki/D_(programming_language)
- Entity-component-system: https://en.wikipedia.org/wiki/Entity_component_system
- Jonathan's talk "Preventing the Collapse of Civilization": https://ww...
Follow this show on AudioBrevity and new episodes get summarized for you. Create a free account