• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
evanofsky

Inventing on Principle - amazing video!

66 posts in this topic

Saw this on /r/gamedev... you should at least skip through it briefly, it's definitely worth your time!

[media]http://vimeo.com/36579366[/media]
0

Share this post


Link to post
Share on other sites
That's pretty bloody impressive. His programming tools are amazing - I hope that sort of thing starts to filter into the mainstream.

And his philosophy is not bad either. Some great words to live by, right there.
0

Share this post


Link to post
Share on other sites
I'm only at the 12 minute mark and my mind is blown. When he started fiddling with "the future", I laughed out loud and said "bugger off" to my computer.
0

Share this post


Link to post
Share on other sites
At first I thought this was a joke, but wow, I am amazed just like everyone else. I couldn't help but laugh at his catchphrase, "but it's not good enough." He's right, those tools are far better than good enough!
0

Share this post


Link to post
Share on other sites
First off, I really like how this guy looks at life and I'm going to snag several ideas he mentioned to guide my own judgement in the future.

However, as far as the presentation at hand itself goes, the only problem I have is the [i]applicability[/i] of the concept in a real world environment. The part about animation is brilliant and I would expect the next generation of artist tools to employ techniques like the ones presented by him. The part about adjusting code parameters in real-time is really useful for a subset of people (in particular any scripted environment).

However, when it comes to actual non-scripted programming that involves a non-trivial code base, I don't really see a benefit (although the concept in its own sense has been present for a while in debug mode - at least in Visual Studio -, which allows you to adjust values, albeit without a temporal aspect, at runtime).

In a broader sense, the problems I see are:

- any algorithm you write should be one that you foremost [i]understand[/i]. True, catching erraneous termination conditions (or a lack of there of) is a really nice thing and can speed up debugging considerably; however, if you really need a complex simulator (which the data-driven concept he advocates is not as it is severely limited by the fixed nature of the input), you will still be stuck with writing your own test cases and custom debugging tools. No one-glove-fits-them-all solution is going to proof your code for you if you, the programmer, don't understand how it works inside your head first
- any algorithm simple enough for a generic debugger like this to handle is in my view, at best, suitable as a learning experience. Writing any more complex piece of code (or algorithm) will quickly reveal that either the feedback mechanism itself becomes too complex to grasp or you will be misjudging the code erraneously either because your approach is "too artistic" (you rely too much on the test data and not the theory behind it) or you simply do not grasp the broader picture in which the algorithm needs to fit. An example would be any sort of recursion, which generally requires a very specific visual "feel" of the algorithm to get down correctly. A tool like that will help you, yes, but only in the most trivial cases

In summary, there is and will always be a barrier between "the artist" and "the programmer". Bridging the gap between the two is a truly noble effort, but I fear is flawed from the start. Simple rewording would help here: eg "expanding the artist's tools to visualize complex work more easily" or "giving the programmer a new perspective on their code". I do realize that I'm narrowing the grand idea behind his talk (which is saving ideas from destruction by inability to realize them due to an a lack of intuition), but he does try to apply the same principle to all walks of life. As for the programmer and the artist - the two will forever remain two different types of people with separate skillsets and [i]purposes[/i].

PS - thanks for sharing the video!
0

Share this post


Link to post
Share on other sites
[quote name='irreversible' timestamp='1329664081' post='4914514']
In summary, there is and will always be a barrier between "the artist" and "the programmer". Bridging the gap between the two is a truly noble effort, but I fear is flawed from the start... As for the programmer and the artist - the two will forever remain two different types of people with separate skillsets and purposes.[/quote]
As someone who's job it is to teach programming to art students, I say: meh.

You know what my art students have trouble with? Text editors, file system paths, FTP uploads, and remembering syntax. Know what they are really good at? Visualising the execution of algorithms. Describing the various sorting algorithms is possibly easier than doing so to CS students, as long as you draw an example on the whiteboard.

There is a huge empty space to be filled by programming languages that are easier to read/write without complex textual syntax/memorisation, and tools that help us to visualise every component of our program. Over 50% of the human brain is dedicated to visual processing - anything that can be done to help move programming from a textual to a visual medium, is going to be a net win in comprehension of code/algorithms and ease of spotting bugs.

Now personally, I don't think his algorithm visualisation in textual-columns was particularly compelling. But it's a step in the right direction, and someone needs to keep making those steps.
0

Share this post


Link to post
Share on other sites
He has some good ideas but after working with such systems I can't say it's really applicable to many problems or actually accelerate development. The problem with immediate feedback schemes, is it requires a nearly complete solution before you can iterate upon it like how he describes, that's nice but programming is problem solving and when you've reached that state, most of the big design decisions have already been made and implemented, you'd be just iterating over the minutiae. It might give u insight into the edge cases but it won't give you fundamentally new or innovative algorithms or designs.

That and also most problem sets are not easily visualized. Maybe that's the bigger challenge. Writing a good visualizer would take a major effort perhaps better spent on pen and paper, but who knows.. maybe you can make it re-usable for other circumstances.

-ddn

Edit : there are a few other good talks on that channel, this one is also worth watching.. I think it's actually more pertinent and impacting.

[url="http://vimeo.com/9270320"]http://vimeo.com/9270320[/url]
0

Share this post


Link to post
Share on other sites
+1 thanks for sharing.

It's a fact of life that when programming, everyone makes obvious mistakes [i]all the time[/i], in simple algorithms and complex ones.
One method for dealing with this is pair programming -- with two people watching the one screen, a lot more of these mistakes get immediately caught, as you partner points out "[i]you forgot a divide by 255 there[/i]" or "[i]don't you mean [/i]minus [i]two[/i]?", etc...

That's not very practical most of the time though, so the method that I use regularly is to use the debugger to step through [i]every [/i]line of code that I write, and watch the execution flow and all values via the 'watch' window. Just by watching the data being transformed by your code, you can catch the majority of these simple human errors.
So, any IDE that made this process easier on me -- such as being able to instantly "step into" a function in the IDE using dummy data -- would be an amazing help for writing bug-free code.

I'm not sure how the rest of you go about writing bug-free code, but personally, watching the code running like this is a vital step in my ensuring it's correctness. If I've not inspected each line via the debugger/watch, then I don't trust there's not a simple logic error waiting to manifest as a bug at some point in the future. It's like the traditional "desk checking" method, but without the possibility of my "internal computer" making the same logic error I did when writing the code originally.
0

Share this post


Link to post
Share on other sites
[quote name='Hodgman' timestamp='1329716080' post='4914735']
+1 thanks for sharing.

It's a fact of life that when programming, everyone makes obvious mistakes [i]all the time[/i], in simple algorithms and complex ones.
One method for dealing with this is pair programming -- with two people watching the one screen, a lot more of these mistakes get immediately caught, as you partner points out "[i]you forgot a divide by 255 there[/i]" or "[i]don't you mean [/i]minus [i]two[/i]?", etc...

That's not very practical most of the time though, so the method that I use regularly is to use the debugger to step through [i]every [/i]line of code that I write, and watch the execution flow and all values via the 'watch' window. Just by watching the data being transformed by your code, you can catch the majority of these simple human errors.
So, any IDE that made this process easier on me -- such as being able to instantly "step into" a function in the IDE using dummy data -- would be an amazing help for writing bug-free code.

I'm not sure how the rest of you go about writing bug-free code, but personally, watching the code running like this is a vital step in my ensuring it's correctness. If I've not inspected each line via the debugger/watch, then I don't trust there's not a simple logic error waiting to manifest as a bug at some point in the future. It's like the traditional "desk checking" method, but without the possibility of my "internal computer" making the same logic error I did when writing the code originally.
[/quote]

The problem I find with this is that this kind of debugging is thoroughly incomplete - by picking dummy data or a specific test case without generic testing you essentially invite more mistakes or you need to manually know to introduce them in the test data to catch most of the bugs IMO. While you can, indeed, catch simple execution ("human") errors that way, this kind of debugging for me is always the last resort as it tends to be too specific and has little to do with a real world environment. In fact, it is doubly useless if there is more than mistake in the code - which is often the case. As for me, I:

1) write the algorithm as best I can
2) I spend 5-10 minutes on the initial problems caused by typos, missing early outs etc (I've generally become quite good at catching them and automatically employ certain failsafes to help locate the bug faster: for instance I always use while(1) and include [i]specific[/i] termination conditions so I can quickly differentiate and test for infinite loops)
3) if the algorithm has any complexity, I will write very specific debug output and that [i]tells me the information I need in the format that I need[/i] and, if needed, a custom test case that executes the algorithm using a configuration that I can control far more easily than typing it in (for instance by using the mouse). I've also spent some time implementing a real-time reflection technique for myself in C++ that allows me to control floats and bools from the UI that often helps FAR more than working with a static dataset (the fact that I had to do this in the first place, of course, is kind of blah)
4) only once I've located the general problem area, I do my best to pinpoint the specific error conditions (eg which iteration, which object, etc), set a breakpoint and step through [i]only[/i] that

Most of the time this catches the error almost immediately at the account of having to identify and write the debug output [i]for [/i][i]only [/i][i]the data that I actually need[/i]. Got a 2k or 4k line algorithm you're debugging with recursions and/or multiple nested loops running for tens of hundreds of iterations? Yeah, you're going to want to be specific about what you actually see (the approach in the video would help if it allowed to pick specific variables or, better yet, form debug [i]statements[/i] on specific lines involving multiple variables and expressions that could be added/removed/manipulated at runtime that the debugger would collate across the execution process and display in proper human-readable fashion).

For instance I spent the past 3 weeks implementing and perfecting my CSG code. At the end of the day I learnt a few things about my implementation that it cannot and is not supposed to handle (eg multiple object overlaps across multiple operations), but more importantly I spent 3 weeks on the code because it's far from trivial to debug and is prone to logic errors rather than coding errors (which only make up a small subset). A debugger like that would not have helped me one bit when dealing with a test case of 80 faces, 300 intermediate vertices, 20-way branching, quadruple-nested loops and two execution paths. In fact, IMO it would've been distracting and misguiding.

For instance I ended up needing far more illustrative debug output and a cold shower to figure out that polygon winding played a huge part in the merging process (a problem I deduced visually that harked way way back to the bottom level deep inside my triangulation code). For a situation like this, which I believe to be much closer to a real-world scenario where the algorithms are far more complex and far more specific, a data-driven debugger would have been useless unless it was really clever about what kind of feedback to actually give me. As such I believe there (at least for now) is no substitute to the human programmer when it comes to implementing non-generic algorithms: the flow NEEDS to be visually present in the programmer's head, the programmer NEEDS to understand all execution paths and fringe cases and the programmer needs to understand that the code will only be as good as he or she is, because no tool will ever fix the biggest problems that cause implementations to fail: logic errors.
0

Share this post


Link to post
Share on other sites
[quote name='swiftcoder' timestamp='1329666130' post='4914523']
Over 50% of the human brain is dedicated to visual processing
[/quote]

I know you were just speaking figuratively but this is completely untrue. The cerebellum actually houses about 60% of the neurons in the human brain. I would say it's probably closer to 10% of the human brain which is dedicated to visual processing. Neural networks are very good at recognizing patterns no matter how abstract they may be. On the other hand things which involve timing and memorization seem to require many more neurons. The reason visual tasks are so easy has less to do with the amount neurons dedicated to the task and more to do with the very way neurons work.
0

Share this post


Link to post
Share on other sites
I think a large point he makes that's overshadowed with his demo is how little progress has been made toward making a language that's more inline with current UI developments than text editing. I think a more visual language could be pretty interesting. To my knowledge there aren't any (good) low level visual programming languages yet?

I do think that his code editing visualizer could break down in more complex cases. It's pretty simple to handle functions more in line with functional programming, but I feel like it would either be unusably slow or just broken in more complex cases when there is a little more dependency on external data.
0

Share this post


Link to post
Share on other sites
I'm confused. The time thing was cool but wasn't he just using a scripting language?

"I can change variables and code at run-time without compiling."
0

Share this post


Link to post
Share on other sites
[quote name='dpadam450' timestamp='1329765197' post='4914911'] I'm confused. The time thing was cool but wasn't he just using a scripting language? "I can change variables and code at run-time without compiling." [/quote]
You try doing that with a scripting language. Go on, fire up Python/C#/JavaScript, and try to do what he's showing there.

There's nothing inherent to the language to what he's demonstrating. In fact, you can do everything he's doing there with a compiled language too (i.e. look at XCode's "Fix and Continue").

But what you do need is tool support. Tools that understand the semantics of your program, not merely the syntax. Tools that understand that you are building an animation, and thus can provide timing and prediction support like his does.
0

Share this post


Link to post
Share on other sites
I doubt one could write bug free code, bugs in a round about way are our limitions. A human being is only so smart we can only hold so many variables in our heads and map out so many states. My coding method is research, gather up examples of existing code, deconstruct the problem, construct a solution.. but more importantly I try to construct a short solutions. All said and done, smaller code is easier to maintain and debug, and i'm not talking about those trying to remove all variable names and spaces, small concise algorithms.

-ddn
0

Share this post


Link to post
Share on other sites
[quote name='ddn3' timestamp='1329770590' post='4914939']
I doubt one could write bug free code, bugs in a round about way are our limitions. A human being is only so smart we can only hold so many variables in our heads and map out so many states. My coding method is research, gather up examples of existing code, deconstruct the problem, construct a solution.. but more importantly I try to construct a short solutions. All said and done, smaller code is easier to maintain and debug, and i'm not talking about those trying to remove all variable names and spaces, small concise algorithms.

-ddn
[/quote]

functional programming is your bff?
0

Share this post


Link to post
Share on other sites
What an absolute boss. I love his principle, I hope too see a wide range of tools going mainstream with this in the near future. Making tools based on this principle can be damn hard and/or time consuming though and might not always be worth it.
0

Share this post


Link to post
Share on other sites
[quote name='way2lazy2care' timestamp='1329772842' post='4914954']
functional programming is your bff?
[/quote]

No I never got into functional programming, my brain doesn't work that way and it's actually harder to understand, for me anyways. I'm sure if your mathematically inclined, functional programming would come naturally but I'm not.. Closest I get to FP is some stuff i do in Lua..

-ddn
0

Share this post


Link to post
Share on other sites
[quote name='ddn3' timestamp='1329775272' post='4914971']
No I never got into functional programming, my brain doesn't work that way and it's actually harder to understand, for me anyways. I'm sure if your mathematically inclined, functional programming would come naturally but I'm not.. Closest I get to FP is some stuff i do in Lua.[/quote]
Functional programming doesn't have to mean LISP. If you've ever used the STL algorithms, a foreach loop, or a lambda function, you are using functional programming techniques.

And the STL algorithms are a great example of just how much trouble can be saved by applying functional techniques to a problem, even in a language that is generally not all that functionally-inclined.
0

Share this post


Link to post
Share on other sites
[quote name='swiftcoder' timestamp='1329775693' post='4914975']
[quote name='ddn3' timestamp='1329775272' post='4914971']
No I never got into functional programming, my brain doesn't work that way and it's actually harder to understand, for me anyways. I'm sure if your mathematically inclined, functional programming would come naturally but I'm not.. Closest I get to FP is some stuff i do in Lua.[/quote]
Functional programming doesn't have to mean LISP. If you've ever used the STL algorithms, a foreach loop, or a lambda function, you are using functional programming techniques.[/quote]

That's one of the things I love about javascript and especially jQuery. It's teaching people functional programming techniques without them really knowing it.
0

Share this post


Link to post
Share on other sites
I like the point he is trying to get across, but his examples to me seem to be more gimmick than practical for software development. As others have stated, you have to build a program specifically for being able to tinker with code in real time like that and it is game or engine specific. I would have loved to have had this functionality while tweaking my WP7 game, and I probably could have had it with a few days to a week of development, but my time was better spent tweaking and running for an hour to get it close enough and moving on.
0

Share this post


Link to post
Share on other sites
[quote]You try doing that with a scripting language. Go on, fire up Python/C#/JavaScript, and try to do what he's showing there.[/quote]
From what I saw he had the ability to load up the last 2 seconds of gameplay, either by having each object keep a stack of information for 2 full seconds, or by using a negative value for his simulation delta. Then show ghost forwarding of the simulation by calling the simluate function a bunch of times and saving those into another stack. Its a cool idea, but I didn't see anything that is unique other than that design. I'm not sure why you feel no one could do that or that it would be remotely impossible for me or anyone else here to implement that. I watched the tree and 2D game. The tree is really just a normal tool editor "I can use control variables at run time to change my tree." I didn't get that part at all.
0

Share this post


Link to post
Share on other sites
[quote name='tstrimple' timestamp='1329796656' post='4915065']I like the point he is trying to get across, but his examples to me seem to be more gimmick than practical for software development. As others have stated, [i]you have to build a program specifically for being able to tinker with code in real time like that and it is game or engine specific[/i].[/quote]I think his point is that [i]you should build said code for your specific game or engine[/i] ;)
His examples are more geared towards how adding visualisation functionality worked for him -- the initial example with the tree is something that he's personally interested in (programmed art).

The 2nd example shouldn't be news for any serious game developer -- we're always adding developer visualisations to our games, simply because his point about being able to see what you're doing is valid. The specific example of diplaying several frames worth of simulation data is just an example -- every game I've worked on has some kind of visualisation modes in it though.

The 3rd example should also be familiar with any game programmer -- it's Visual Studio's "watch" window, but in a different incarnation.
0

Share this post


Link to post
Share on other sites
[quote name='dpadam450' timestamp='1329797092' post='4915069']
I'm not sure why you feel no one could do that or that it would be remotely impossible for me or anyone else here to implement that.[/quote]
WTH did you think I meant? Of course its trivial to implement. The point is the it *isn't* implemented.

Tools should offer this sort of thing out of the box. Editors should popup little variable editor panels, then auto-recompile the function, and patch it into the running executable. Game engines should offer replay functionality, with the ability to observe shadows of previous/future states.

Nothing he shows is impossible, or even very difficult (he implemented it, after all). But in general, people aren't writing this kind of tool, even though it can make one's life so much easier.
0

Share this post


Link to post
Share on other sites
[quote name='Hodgman' timestamp='1329797757' post='4915072']
I think his point is that you should build said code for your specific game or engine ;)
[/quote]
I think his point is that you [i]could[/i] build said code for your specific game or engine ;D
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0