How much planning do game programmer before writing a single line of code and how do they plan it out

Started by
27 comments, last by Ravyne 10 years, 2 months ago

Others covered that there is no magic approach used in planning, but I want to urge you to fail. You're holding yourself back trying to avoid failure, but failure is part of success. My previous job was obtained by failing at the interview, but impressing just one manager so much that he created a position for me. And it was a way better job as a result. It didn't really have a job description, so I just got to do insane and amazing stuff without worrying if it was in my job description. I got to work with the driver guys, the UI guys, QA, the build team, the team in India, and everyone in between. Most projects I've worked on failed to achieve the original goals, but still succeeded in achieving amazing results. Every bug I ever closed involved failing on every single solution attempted except the final one.

So start working with teams even if you don't think you're ready. Apply for every job you think would be a blast whether or not you meet the qualifications. And tell people straight up that you don't have the experience yet, that you're going to make mistakes, that you're going to learn a lot as you go, but that you're going to work your ass off to make up for it, and you're going to love the work and the challenge.

I would not say I never failed. Every feature I wanted to get right in my rpg game was a failure because it never works the first time. It was only after many hours of thinking was I able to improve the code design and got the feature to work.

Great tip! Thanks!

Advertisement

Maybe I am reading this wrong, but is this not the same thing, with the flow pattern inverted. If I inherit from you, should not the arrow point from you to me ?

UML being just an example to illustrate a point, I am not willing to go too much further with it, but I will at least just respond to this.
This is exactly my point. The mental image you have constructed tells you to have the arrow pointing one way, while my image tells me it should be pointing the other way. I think the arrow should indicate what is being taken, but you think it should indicate what is being given.

Obviously I’ve learned to deal with it, but the conversion process from one line of thought to my native line of thought takes time, and that is the end result any time you tell anyone else how to think.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

Every UML diagram I've ever seen has inheritance arrows point from the derived class to the base class. If you have co-workers that do it the other way round, hit them over the head with the thickest UML book you can find.

In terms of planning, don't overuse UML. It's neat to "get the point across", but to do that, you need just a very basic subset. No point in cluttering up a diagram with tons of obscure symbols to describe unimportant details. Nobody will want to look at that complicated mess and that's where the whole point of using UML in the first place is utterly defeated. For the most part, I'd stick with class diagrams and flow charts.

Tempting as it might be to just start hacking away to get stuff to show up on screen, nail down as many requirements/features as you can in advance. Adding stuff to a code base that isn't prepared for it tends to be messy. At the same time, trying to prepare it for everything you imagine may or may not be needed 10 years from now is even worse.

f@dzhttp://festini.device-zero.de

If I understand the question of the OP, it's how to deal with the problem of bad dependencies in code, especially working in a team.

There's a lot of written material on agile development, but I think the key here is communication. A large enough system will consist of several subsystems, and this usually makes for a natural division of labor. Team planning should focus on the boundaries between the subsystems, because these are the large scope dependencies.

A little planning will help you avoid some of the bad dependencies. But more importantly, you have to constantly keep looking for them, and take the time to refactor the code whenever they pop up. It's just as important as fixing bugs.

As for UML, I find it invaluable for high level brainstorming, and worthless for low-level specification. As for the arrows, it's only a language, like some feel subject-verb-object order is more natural while others prefer object-subject-verb.

openwar - the real-time tactical war-game platform

classdiagramno3d.gif

This means something to someone, but that someone is not me. I have no clue what is happening here.

Which way the arrows actually point in a UML diagram is beside the point; I just recall them rubbing me the wrong way (or perhaps because base classes are displayed above inheriting classes, which is a fundamental violation of the idea that base classes are below their superior classes) and if a “superior” was to impose them upon me then it is exactly the same as asking me to reduce my efficiency by half.

We all have our own way of thinking. That is the lesson the original poster needs to understand.

L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

There's a different between thinking and communicating. If a superior would impose UML it would be for communication purposes, and it's what UML was designed for. One of the key features of UML is precisely the arrows, which represent the various kind of dependencies that occur in a complex system, and I think that's why it's was brought up here.

UML is just a language, and it's efficient for some purposes, but not for others. I find it easy and natural to think in UML but thats me, and just because I've been doing it for a long time. But again, in a team environment communication is important, and it's only possible with a common language, whatever that language may be.

openwar - the real-time tactical war-game platform


This is exactly my point. The mental image you have constructed tells you to have the arrow pointing one way, while my image tells me it should be pointing the other way. I think the arrow should indicate what is being taken, but you think it should indicate what is being given.

This is the point of this thread. Everyone will have separate opinions on how things should be. This is fine as long as you are working alone, you can have things the way you want. While I respect your point of view, you should also respect mine. As part of a team, the direction of the arrow could be part of the planning discussion. If the group decides, based upon your vast experience, (which I am willing to concede) or your leadership qualities that having the arrow point your way is better, I am fine with that. If not then maybe I should not be part of the team.

This is why you need to have team meetings, everyone needs to be on the same page, or you will be singing 1 song while the choir sings another.

In the end, it is all positive.

Your Brain contains the Best Program Ever Written : Manage Your Data Wisely !!

Nothing beats your own experiences in determining how much forethought and planning you need before you start the actual programming process. With that said, I would start with the basic premise of the application: List the features that you would like to have, categorizing them into “needs” and “wants”. Weed out the “wants” until you get something manageable—keeping in mind that some of the “wants” you weeded out can be placed back into the final product. At this point you should make a structure that everyone in the team can understand—this is the key. Now you are ready to code. How much detail involved in the planning phase is up to the team. Don’t let any convention block you from starting you coding.

Nothing beats your own experiences in determining how much forethought and planning you need before you start the actual programming process. With that said, I would start with the basic premise of the application: List the features that you would like to have, categorizing them into “needs” and “wants”. Weed out the “wants” until you get something manageable—keeping in mind that some of the “wants” you weeded out can be placed back into the final product. At this point you should make a structure that everyone in the team can understand—this is the key. Now you are ready to code. How much detail involved in the planning phase is up to the team. Don’t let any convention block you from starting you coding.

I see. Thank you!

Despite the planning, are there situations that results in too many "parameter passing" from one class to the class the programmer wants to be in?

As a self taught game programmer who has been writing the codebase for one month and 2 weeks for a role playing game, I also want to know the thought process of how game programmer think or approach a codebase they are about to write.

Do they write psuedo code just to spot as much future problems in implementing a feature that would make their life easier?

Do they talk to every programmer on the team about how to build their side of the codebase or is this abstracted away from the other programmers?

What exactly would they talk about before writing a single line of code?

How do they put the codebase together before writing a single line of code if they never written the code before?

What is the process like? Is it necessarily

1) communicate some. write pseudo code on whiteboard to spot bad code design.

2) everyone build their side of the codebase

3) merge the codebase together

Repeat the above steps

Since I never worked on a team before, understanding how a team of programmer works in terms planning and approaching the codebase design of a game would be super useful to me. It would probably make me a better programmer so my code can actually work well with the other programmer codebase.

On a side note: When does one start joining a team? How many games does one need to write before joining a team to gain team experience? I heard joining a team can be pretty complicated.

I made 5 games so far in a year time(the role playing game being the most complicated thing I have ever done The DialogueSystem being the most complicated I ever build for a game and took many days before it worked the way I wanted it to work despite some improvement that can be made on the code design ).

I feel I have much to learn before joining a team. I fear I need team experience before I can join the game industry as a game programmer intern.

Any feedback about the above would be appreciated. biggrin.png

To answer your question, it is best that you become familiar with the SDLC (Software Design Life Cycle) and the AGILE-Scrum process of this cycle, including what stories, sprints and backlogs are.

There is something called the Technical Design Specification. It is a book, created by the designers and in part, the developers of the SDLC. It encompasses just about every diagram you can think of: Use Case UML, High Level Class Diagram UML, Database Design, ERD, Dataflow Diagram - Flow Charts.

Before a single code is worked on, the Technical Design Specification should be completed. The reason is because of the first page of this book, being the contents regarding its Purpose and Description of the Requirements. In a nut shell, if either the Purpose or the Requirements are breached or not met, then you either have one really passive and generous client or... you can't adequately define your sprints, which results in project failures (and people start losing their jobs and companies start losing a lot of money). All the pages there after the first page, break down what the program should do. And that breakdown, allows a sprint log to be created, which allows management for the overall project.

As a one man programmer, yes, you can get away with not using this. As a two or three man programmer, you might be able to get away with not using this. But as the numbers increase, so does the unlikeliness of succession from not using the Technical Design Specification.

Hope this helps.

This topic is closed to new replies.

Advertisement