Pretty sure John Carmack is the only one that can stand up on stage and talk for hours about stuff that most people don't understand and we all still sit through the whole thing with open ears.
Books and stuff to read John mentions in the talk: - Hackers: Heroes of the Computer Revolution - Paul Graham's esseys - The Unix-Haters Handbook - Programming Languages as Operating Systems: Revenge of the Son of The LISP Machine - Structure and Interpretation of Computer Programs
One of the best things I ever did was teaching myself forth. Its not a language I'd never use for "real" code, but it was great to be able to flip my brain upside down and think of things from the point of view of a stack and *all* my algorithms where viewed from another angle. Ultimately I think it made me a better coder. Forth teaches you the *real* zen of low level coding. Scheme teaches you the mathematical basis of algorithms and Smalltalk teaches you the *real* value of Object orientation. None you'll need much IRL, but it'll make you a better coder.
I know about zero to nothing about programming. But on the contrary there's a real fascination in just watching this genius who set the foundation for shooter games. You do not need to know the (programming) language to be profoundly inspired by a man like this. I owe John Carmack sooo many of my childhood joys(such as Quake and Quake 2 - those games are pretty much the definition of my childhood gaming).
I, too, learned my programming initially through QuakeC - thank you for that, Mr. Carmack :D I still remember taking my first actual programming class on C++ in high school, sitting down and getting the first 'hello world' example in front of me. My reaction was pretty much; "Wait what? This is it? I've been doing this for years with Quake, are you saying I can actually program stuff?" And on it went from there, now I have two games under my belt and third on the way.
I'm a pretty big Lisp enthusiast, and I'd have to agree with everything John said. Lisps can be prone to things like type errors (though there are some efforts like the Shen Language which might mitigate these problems), and depending upon the Lisp dialect you're using, code that feels like it should be terse, can come out rather voluminous.
Visual programming has been use quite a bit in the VFX world, especially for people using Houdini. We use something called Vops, which is pretty much a Visual Programming language. It gets little exposure, it has been done and used for a very very long time. Worth a look for anyone interested.
SICP was life-changing for me. But, I also love statically-typed, pure FPLs too. I use Lisp-variants for quick stuff, and Haskell for when correctness matters. So, I don't think it's an either-or scenario.
"Its amazing how many mistakes and how bad programmers can be. Everything that is syntactically legal, that the compiler will accept, will wind up in your codebase." 🤣🔥🔥🔥👌
I think its amazing and awe inspiring what this man was able to accomplish. And then after all that, think back to it and still wonder the different possibilities he could have done different and where the world would be today. Only a few people that are alive today can say that.
That it is. I love that he went through and learned Lisp and Haskell, though I think only learning Scheme (rather than Common Lisp for example) may have been a mistake for someone as pragmatic as Carmack.
these talks made me passionate to start trying to learn programming again. It tickles my curios-nerve, I wanna understand these things he's talking about.
Im too stupid for programming. Ive tried going through(forgot the name..maybe it was "Learn python the hard way". Ive tried it several times, learned to make programs spit out obscene words and to do math calculations(and I learned to do basic command line stuff, "cd ..", that sort of thing. Maybe Ill give it a go some other time. Or learn whatever scripting-programming whatever game-making software Ill be using in the future. Not really in a good period of my life right now, so stress makes it very hard to actually learn anything new. I just dont think I have the brain for programming.I do think if I would put in the hard work I could become a decent programmer, but not great. But who knows? I learned a lot about myself when I tried doing the course though. Im extremely stubborn and perfectionistic(double-edged sword) so when things are hard, and I REALLY want to get to the next step I work even harder, or try to come up with some other solution. I never give up(but I do take breaks), until I realise if whatever Im working hard at is kind of pointless in the big picture of life. So theres a huge text that said something. No, I did not learn to program lol. That course was awesome though, I remember I had to go through every fucking line of code BACKWARDS when I was done to check if I had errors. The reasoning behind this was something like when you read things backwards you see the code letter for letter and its easier to spot errors that way. Writing this kinda makes me a bit eager to go at it again. But again(sorry about WOT), not a good time in my life now.
desmondsparrs Good for you for making the effort to learn programming. I'm sure some of it will have rubbed off on you, and it will be easier next time if you decide to go back to it. It's hard to learn a major new skill. Please don't call yourself stupid. No matter who anyone is, there will always be people who are smarter and more talented than them. Talking ourselves down just holds us back. I'm a bit like you but with music. I've been trying to learn to play music on and off my whole life. I'm not super-passionate about it; I just want to learn a bit. I haven't had a great deal of success. But for the last few months I've been learning to play the ukulele, and it's going great! I'm learning a lot. I realize that the ukulele is not the coolest instrument in the world, but I don't care. I'm having fun. I think that's the key for learning anything: start small and make it fun.
I'm basically going through the same while learning Python and C (not C++ !!!) I've been able to get a grasp of it pretty quickly and I'm through my first 600 lines of C code, but I'm feeling more like an accountant than anything, I want to find a tutorial to make "real stuff" if you know what I mean, things that run in a GUI, with some graphics... Guess it's going to take a while... Doing a roguelike clone or even Panzer General clone would be cool :D
I'm finding Python to be kind of a hassle to set up in a "portable" way and kind of limiting in some aspects, but what I'm finding great about Python is that the easy syntax lets you get a hold of the concepts easier, after that you're able to learn the same stuff in C much easier because you already have a notion of what to do and how to think. I'm fascinated with C, it's so simple and at the same time so powerful.
It would be beautiful, even if it's not clear to me how it would be possible not to have performance issues, given that everything is immutable and functions end up creating a copy of everything you pass to them. Very interesting.
Functional languages actually do put a lot of computer science into their immutable data structures. Clojure, Scala, Immutable.js for JavaScript use complex and specific tree structures for making lists and hashmaps that have speed guarantees for adding removing changing etc. It's even better than the second best technique which is copy on write, although immutable.js does allow you to just use temporary mutability to avoid excessive copying.
The immutable data structures used in FP langs use a concept called structural-sharing which makes it super easy to create copies. I believe that searching for this particular term will help you understand how you will not have performance issues
Quake 2 was the first game I saw transition from software to hardware rendering. and I still love to play it. Kinda wish the software rendering worked these days but apparently it's too archaic for my laptop to even deal with.
i like rust, a multiparadigm language thats just a bit more functionaly flavoured and a default memory model suited to concurrency. globals only mutable in'unsafe' blocks ..etc
I have the exact same problem he does, it's though man, after work I don't wanna code anymore, or I keep going back to work since the rules are more properly defined, it's hard to push yourself especially on deep topics.
Actually, all you need is an interest in programming, as there are many good resources freely available on the internet to explain things. You can either search for the concepts you didn't understand directly or read functional programming tutorials for Haskell, Lisp or whatever language and learn them that way. The things John talked about aren't that complicated, it's just that the language used sounds alien to many people. You definitely don't need a CS degree to understand what he said.
Well, i had a grasp of C++ in high school, then when at university they thought me some Scheme, i de-understood how recursion works... so it may be true that newcomers work better with these languages... so it sounds true to me :D
Functional programming is a great thing, especially for multi process programming. But I'm wondering what the big revelation is here. People have been writing task based multi-process game engines for a while. There's not much new here. But I'm glad Carmack is fully exploring things. I'm sure he'll come up with some good stuff that others have not.
Right after that he explains pretty well why it can work: most language *default* GC methods are intermittent and that's troublesome from the point of view of a game loop. If you can switch to doing a much smaller GC pass *every frame*, that's a consistent overhead, and you can account for that.
GC can be simplified and made more efficient in pure functional languages (in the context of which he was talking about GC) because newer objects can reference only older objects and never objects which were created after them (because the data is immutable; once an object is created, you can't modify it anymore). This creates some room for optimizations as you don't have to scan the heap for all possible cases, especially fits if the GC knows that the logic is quantized into "old frame" and "new frame" where you can assume that the old frame has old/outdated data and the new frame has the real deal; usual general purpose GC's in c#/java don't work like that unfortunately.
He should try Clojure with Spec instead of Racket. Spec is the solution for the lack of types. And the part about concurrency also (static version of the world state) just screams for Clojure and its persistent data structures + STM.
It's just easier to do SICP in Racket, it basically just works and he clearly doesn't want to waste time on another lisp. I feel kind of the same, that "types is life" (if it's not C or Golang), but very curious about ideas of Rich Hickey and Lispers in general. Also looks like typed Clojure didn't work out.
No. Not at all. He might be Albert Einstein of graphics programming/development. But game development, never. Where did you get that idea from anyway? :-/
microsoft doing a great job ? wow that sounds interesting. I thought the whole planet is aware of what a crap company microsoft is. do we live on the same planet with this guy ?
Pretty sure John Carmack is the only one that can stand up on stage and talk for hours about stuff that most people don't understand and we all still sit through the whole thing with open ears.
Books and stuff to read John mentions in the talk:
- Hackers: Heroes of the Computer Revolution
- Paul Graham's esseys
- The Unix-Haters Handbook
- Programming Languages as Operating Systems: Revenge of the Son of The LISP Machine
- Structure and Interpretation of Computer Programs
One of the best things I ever did was teaching myself forth. Its not a language I'd never use for "real" code, but it was great to be able to flip my brain upside down and think of things from the point of view of a stack and *all* my algorithms where viewed from another angle. Ultimately I think it made me a better coder. Forth teaches you the *real* zen of low level coding. Scheme teaches you the mathematical basis of algorithms and Smalltalk teaches you the *real* value of Object orientation. None you'll need much IRL, but it'll make you a better coder.
I know about zero to nothing about programming. But on the contrary there's a real fascination in just watching this genius who set the foundation for shooter games. You do not need to know the (programming) language to be profoundly inspired by a man like this. I owe John Carmack sooo many of my childhood joys(such as Quake and Quake 2 - those games are pretty much the definition of my childhood gaming).
I, too, learned my programming initially through QuakeC - thank you for that, Mr. Carmack :D
I still remember taking my first actual programming class on C++ in high school, sitting down and getting the first 'hello world' example in front of me. My reaction was pretty much; "Wait what? This is it? I've been doing this for years with Quake, are you saying I can actually program stuff?" And on it went from there, now I have two games under my belt and third on the way.
I want Carmack to read a bedtime story to me every night
I would really, really love to see John's Haskell code.
I'm a pretty big Lisp enthusiast, and I'd have to agree with everything John said.
Lisps can be prone to things like type errors (though there are some efforts like the Shen Language which might mitigate these problems), and depending upon the Lisp dialect you're using, code that feels like it should be terse, can come out rather voluminous.
Visual programming has been use quite a bit in the VFX world, especially for people using Houdini. We use something called Vops, which is pretty much a Visual Programming language. It gets little exposure, it has been done and used for a very very long time. Worth a look for anyone interested.
breaking the myth of "OOP programming" that is shoved down our throats everywhere, love it
It being 2022 now, does anyone know if Carmack managed to push these ideas to reality? Or maybe a follow-up talk?
SICP was life-changing for me. But, I also love statically-typed, pure FPLs too. I use Lisp-variants for quick stuff, and Haskell for when correctness matters. So, I don't think it's an either-or scenario.
"Its amazing how many mistakes and how bad programmers can be.
Everything that is syntactically legal, that the compiler will accept, will wind up in your codebase."
🤣🔥🔥🔥👌
I think its amazing and awe inspiring what this man was able to accomplish. And then after all that, think back to it and still wonder the different possibilities he could have done different and where the world would be today. Only a few people that are alive today can say that.
That it is. I love that he went through and learned Lisp and Haskell, though I think only learning Scheme (rather than Common Lisp for example) may have been a mistake for someone as pragmatic as Carmack.
he basically said "Linus was right-OOP sux"
love it
these talks made me passionate to start trying to learn programming again. It tickles my curios-nerve, I wanna understand these things he's talking about.
+desmondsparrs
It's two years later. Did you learn to program?
Im too stupid for programming. Ive tried going through(forgot the name..maybe it was "Learn python the hard way". Ive tried it several times, learned to make programs spit out obscene words and to do math calculations(and I learned to do basic command line stuff, "cd ..", that sort of thing. Maybe Ill give it a go some other time. Or learn whatever scripting-programming whatever game-making software Ill be using in the future.
Not really in a good period of my life right now, so stress makes it very hard to actually learn anything new. I just dont think I have the brain for programming.I do think if I would put in the hard work I could become a decent programmer, but not great. But who knows? I learned a lot about myself when I tried doing the course though. Im extremely stubborn and perfectionistic(double-edged sword) so when things are hard, and I REALLY want to get to the next step I work even harder, or try to come up with some other solution.
I never give up(but I do take breaks), until I realise if whatever Im working hard at is kind of pointless in the big picture of life.
So theres a huge text that said something. No, I did not learn to program lol. That course was awesome though, I remember I had to go through every fucking line of code BACKWARDS when I was done to check if I had errors. The reasoning behind this was something like when you read things backwards you see the code letter for letter and its easier to spot errors that way. Writing this kinda makes me a bit eager to go at it again.
But again(sorry about WOT), not a good time in my life now.
desmondsparrs Good for you for making the effort to learn programming. I'm sure some of it will have rubbed off on you, and it will be easier next time if you decide to go back to it. It's hard to learn a major new skill. Please don't call yourself stupid. No matter who anyone is, there will always be people who are smarter and more talented than them. Talking ourselves down just holds us back.
I'm a bit like you but with music. I've been trying to learn to play music on and off my whole life. I'm not super-passionate about it; I just want to learn a bit. I haven't had a great deal of success. But for the last few months I've been learning to play the ukulele, and it's going great! I'm learning a lot. I realize that the ukulele is not the coolest instrument in the world, but I don't care. I'm having fun. I think that's the key for learning anything: start small and make it fun.
I'm basically going through the same while learning Python and C (not C++ !!!) I've been able to get a grasp of it pretty quickly and I'm through my first 600 lines of C code, but I'm feeling more like an accountant than anything, I want to find a tutorial to make "real stuff" if you know what I mean, things that run in a GUI, with some graphics... Guess it's going to take a while... Doing a roguelike clone or even Panzer General clone would be cool :D
I'm finding Python to be kind of a hassle to set up in a "portable" way and kind of limiting in some aspects, but what I'm finding great about Python is that the easy syntax lets you get a hold of the concepts easier, after that you're able to learn the same stuff in C much easier because you already have a notion of what to do and how to think. I'm fascinated with C, it's so simple and at the same time so powerful.
I think he just meant calculating the actual animation of the skeleton, not the skinning, which would be done on the GPU.
pylint that comes with most Python IDEs does static type inference to give you type warnings (not errors) that can be ignored.
He means the creation of the per frame skeletal transforms not the application of them to the mesh vertices. That is typical in all game engines.
SICP is light reading for John Carmack.
Well it's a freshman book for programming. If you've been in the industry for a while already, it's very much a light read.
Why wouldn't it? It's introduction to programming and lisp.
It would be beautiful, even if it's not clear to me how it would be possible not to have performance issues, given that everything is immutable and functions end up creating a copy
of everything you pass to them.
Very interesting.
Functional languages actually do put a lot of computer science into their immutable data structures. Clojure, Scala, Immutable.js for JavaScript use complex and specific tree structures for making lists and hashmaps that have speed guarantees for adding removing changing etc. It's even better than the second best technique which is copy on write, although immutable.js does allow you to just use temporary mutability to avoid excessive copying.
The immutable data structures used in FP langs use a concept called structural-sharing which makes it super easy to create copies. I believe that searching for this particular term will help you understand how you will not have performance issues
Wolfenstein 3D in Haskell? God I'd love to see the source of that!
Quake 2 was the first game I saw transition from software to hardware rendering. and I still love to play it. Kinda wish the software rendering worked these days but apparently it's too archaic for my laptop to even deal with.
Structure and Interpretation of Computer Programs, there is an online version too.
But they are. I checked every resolution.
i like rust, a multiparadigm language thats just a bit more functionaly flavoured and a default memory model suited to concurrency. globals only mutable in'unsafe' blocks ..etc
I have the exact same problem he does, it's though man, after work I don't wanna code anymore, or I keep going back to work since the rules are more properly defined, it's hard to push yourself especially on deep topics.
Actually, all you need is an interest in programming, as there are many good resources freely available on the internet to explain things. You can either search for the concepts you didn't understand directly or read functional programming tutorials for Haskell, Lisp or whatever language and learn them that way.
The things John talked about aren't that complicated, it's just that the language used sounds alien to many people. You definitely don't need a CS degree to understand what he said.
i have no idea what he's talking about but i can't help but listen all the way through
This is my favorite part.
This man is the Albert Einstein of Gaming Development. A true genius.
Well, i had a grasp of C++ in high school, then when at university they thought me some Scheme, i de-understood how recursion works... so it may be true that newcomers work better with these languages... so it sounds true to me :D
he is not trying to teach, just telling his opinions - i like that style in a keynote
This part is about programming. So you were not supposed too, unless you are software developer or studying CS.
I'd post you a link for "Frag" in Haskell if RUclips would let me.
Awesome Talk, ML for the win though!
Functional programming is a great thing, especially for multi process programming. But I'm wondering what the big revelation is here. People have been writing task based multi-process game engines for a while. There's not much new here. But I'm glad Carmack is fully exploring things. I'm sure he'll come up with some good stuff that others have not.
Charles Hoskinson brought me here
What's the textbook he is referencing?
Sir, this is a Wendy's.
Idk, Wolfenstein 3D, Doom, Quake. Things of that sort.
Carmack endorsing garbage collection. What the hell.
Right after that he explains pretty well why it can work: most language *default* GC methods are intermittent and that's troublesome from the point of view of a game loop. If you can switch to doing a much smaller GC pass *every frame*, that's a consistent overhead, and you can account for that.
Jess Kay
GC was a mistake
GC can be simplified and made more efficient in pure functional languages (in the context of which he was talking about GC) because newer objects can reference only older objects and never objects which were created after them (because the data is immutable; once an object is created, you can't modify it anymore). This creates some room for optimizations as you don't have to scan the heap for all possible cases, especially fits if the GC knows that the logic is quantized into "old frame" and "new frame" where you can assume that the old frame has old/outdated data and the new frame has the real deal; usual general purpose GC's in c#/java don't work like that unfortunately.
plenty of good games that can be made with it. if you can, it certainly saves you some dev effort.
He should try Clojure with Spec instead of Racket. Spec is the solution for the lack of types. And the part about concurrency also (static version of the world state) just screams for Clojure and its persistent data structures + STM.
It's just easier to do SICP in Racket, it basically just works and he clearly doesn't want to waste time on another lisp.
I feel kind of the same, that "types is life" (if it's not C or Golang), but very curious about ideas of Rich Hickey and Lispers in general.
Also looks like typed Clojure didn't work out.
What are you working on now man?
A shame video and audio is not in sync :(
Or even studying EE! ^^
Im doing both, i fell asleep
I would totally subscribe to a feed of his commits as he screws around with wolfenstein >.>
LOLNO.. HASKELL TO THE RESQUE. You know what. we will do a quake 3 duel to decide which one is better. best out of 3
No. Not at all.
He might be Albert Einstein of graphics programming/development. But game development, never.
Where did you get that idea from anyway? :-/
microsoft doing a great job ? wow that sounds interesting. I thought the whole planet is aware of what a crap company microsoft is. do we live on the same planet with this guy ?
You want to talk about the same specifics or just share consumer like "Microsoft is bad" opinion?
***** I didn't say "microsoft is bad", I said that microsoft is a crap company. are you not aware of this ?
Vakis Durduvakis
Tell me why they are crap...
Microsoft is doing some amazing work right now. In the next few years, you will see a lot of changes.