Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 08 Sep 2011
Offline Last Active Jun 28 2016 03:06 AM

#4970478 Seniority, and how to get there

Posted by on 17 August 2012 - 02:59 AM

I am right now a the brink to become a senior* developer in a small company, so here is my opinion about it. I work at a quite small company that is currently in a huge upward swing in terms of hiring people, selling products and growth in general. The growth in itself is a major factor in being able to have seniors and juniors at all. When I started at the company we were just a team of equals with different fields of experience in the development team and there was little need for any kind of internal hierarchy, but with more (and younger) people on board this changes now. Since I am there longer and have more experience I gradually grew into a new role by coaching newer and younger team-members and also by accepting broader responsibilities. And of course being a more central part of the company-machine gives me more job-security which for me (and especially for people with families) grew more important as I get older.

So how do I think I qualify for seniority: As the others stated, It took time and effort for me to get there. A lot of time and effort. Before I started with this company I already had finished my engineers degree leaning strongly towards software development and computer graphics and some five years work experience. Apart from the technical skills I gathered experience in handling people while organizing educational ("boot-") camps for future scout leaders as well as being an officer in the civil defense.

In the end I think a lot depends on personal attitude whether you will advance to senior developer or not. However some people are happy without the extra responsibilities.

* Of course the border to seniority is very fuzzy so my situation might not apply to other people and companies. So what we consider "senior" here might just be an "experienced junior" in an other place.

#4968010 "Must-Learn" Languages

Posted by on 10 August 2012 - 02:32 AM

Regarding your question

*What are the insights that those languages offer?*

Applying this to Hodgman's list, here is my opinions about the key insights and as well as some parings which languages go closely together, because you will only get some insights when you see how it is done differently in another language

A systems language, like C, C++ : How your code behaves on a low level and stuff like memory-management
as opposed to
A managed language, like Java, C#: which will let you concentrate on object oriented programming, using frameworks and applying patterns without needing to worry about all those C/C++ pitfalls

A weakly typed language, like Python, Lua: seeing how to bring Ideas quickly into code, how to create "quick'n'dirty" but still maintainable code.
in conjunction with:
An automation language, like Bash, Batch. to easily automate tasks (and recognizing which task are easily automated) without needing to use a full-blown language

A web-server centric language, like PHP, Ruby: The peculiarities of web-development, thinking in multi-tier.software-architecture and asynchronous user-interaction
together with SQL to get a feel of
A domain-specific language, like SQL, Mathematica: The insights will be very domain-specific rather than general, so I would pick a language that is in a domain that interests you. Knowing stuff like that never hurts.

And last but not least
A functional language, like Erlang, Haskell: to see how to code "the other way", meaning non OOP

#4967299 how is stuff done correctly in the C++ World (headers, #include,namespaces)?

Posted by on 08 August 2012 - 02:23 AM

Then I have one last hassle, why do you put your includes in the .cpp files? The Headers can compile without any other classes now, but the body cannot. Is there an upside/downside?

One of the main reason to do this is to reduce compile-time dependencies between modules and classes by separating the implementation from the declaration in the headers. This will increase the compile-speed and also allow you to separate modules better. Usually you only need to know the declaration (method-footprints) of a class and not the definition (implementation) of said methods in another class. The problem behind it is, that in c++ includes are always visible from the outside even if all the methods and class-attributes are declared private.

One of the downside of forward declaration is, that you can only use forward declared classes by using pointers and references and not by value, which may be a bit confusing if you are used to Java/C#.

Here is a simple example:
Say you have a base class "MyBaseClass" which internally (private) uses some helper class and another class that inherits from MyBaseClass. If you include the helper-class in your header like this:

[source lang="cpp"]// file MyBaseClass.h#include "SomeHelperClass"class MyBaseClass{public: // whater is neededprivate: SomeHelperClass myImplementationHelper;}// file MyDerivative.h#include "MyBaseClass.h"class MyDerivative : public MyBaseClass{public: ... // whatever you need}[/source]

If you have changes in SomeHelperClass.h the compiler will of course recompile MyBaseClass which directly uses the helper. But since you indirectly include SomeHelperClass.h also in MyDerivative this will also be recompiled even if MyDerivative has not changed at all. So you compile three cpp files instead of only two. Would you use a forward declaration of SomeHelperClass in your base class and only include the header in MyBaseClass.cpp, you would only need to compile two.

I hope this helps.

edited some typos

#4959531 Zombie game wave difficulty progression

Posted by on 16 July 2012 - 04:44 AM

How should I construct the formula to decide how many spawns should be on every wave?

Having more than one aspect to vary the difficulty enhances the feeling that the difficulty rises non-linear even if you have quite linear formulas in the background. I once did a very simple tower-defence game where instead of just using the number of enemies spawned I also increased their speed and toughness as well as the spawn speed. The first wave started off with all values set to 1 and then I began to increase a random stat every new wave. This had the effect, that even a wave with few enemies could be quite hard to beat and that it didn't feel like the AI was just beating you by increasing the number of enemies. Of course this was far from balanced and it might be a good idea to weight the values somehow, but as Mussi wrote, in the end finding the perfect balance is a matter of testing.

#4957991 unsigned char <-> float

Posted by on 11 July 2012 - 05:38 AM

WIthout any code to see I'm guessing that data structure or variable might not be initialized the right way or might not be initialized at all or that your conversion between unsigend char and floats is not ok. Could you post the code-snippet?

#4955883 Where can I find a rough estimate for my art assets?

Posted by on 05 July 2012 - 01:58 AM

That is definitely more than expecting but at least I have some numbers to work with, and I do understand that greater quality will demand a greater price but this "middle of the road" estimate is very helpful.

Also it might be worth to think about just buying models and/or graphics for some of your assets to reduce the costs. After all a lot of fantasy-weapons tend to look the same or at least very similar. The same goes for some GUI-elements such as health-bars. For enemies and especially bosses (and tilesets) you will still want to custom-model it, as this will make your game look more unique compared to other games of the genre.
Buying models and images will likely prevent you from applying a very unique art-style but the reduce in cost might well be worth it.

#4952929 Rotating specific .obj with keyboard key

Posted by on 26 June 2012 - 01:16 AM

Is your callback called at all? Also you need some kind of loop because you might want to draw everything again after you move or rotate something. Instead of directly calling the gl-functions in your rotateBook()-function, store the transformation of the book in a set of variables and trigger a new Render() call. Maybe your transformation is executed but you don't see it because it's outside your viewport or frustrum.

Something along this, whith bookTransform a struct of position and rotation-data:

void Render(void){

	if (book)
	 	 	  glRotatef(bookTransform.angle, 0, 1,0);
				glTranslatef(bookTransform.x, bookTransform,y, bookTransform.z);

void KeyboardCallback(unsigned char key, int x, int y){
	switch (key)
	case 27:
	case 'c':
	case 'C':
		bookTransform.angle = 45.0f;

#4938918 Design Doc Question

Posted by on 10 May 2012 - 02:30 AM

Depending on the complexity of the game 1000 words might be not much at all or way too much.

How detailed is too detail? I don't want to box my staff in with too much detail but at the same time I don't want to have features that feel half done or a game that doesn't make you feel like you are actually in the game

This does not just depend on the amount of words you put in there, but also on the structure of the document. I personally like it if a document is structured in a way that every developer sees right away which parts are the most important ones for that person. For instance a programmer doesn't care in the first place what kind of style of artwork you have in mind. Also "one pictures says more than 1000 words", trying to describe a sequence of actions with any possible alternative can be very hard in prose, but is quite easy doing a flow-chart. Even a very simple sketch with a pencil of how you Imaging stuff to look and feel can help your team to understand your ideas better.

I'm trying to leave it open enough to let them interpret it in a way that they leave a bit of them in the game but micro manage it so it is just right.

That's generally a good idea, but try to be very conscious about which part you leave open for interpretation, because it will probably not turn out exactly how you imagined it, but since you specified it as open, you might have to let it slide.

Sorry if this sounds like a stupid question but whenever I work in groups I always end up micromanaging and taking most of the responsibility.

You are the team-leader, everything your team does is your responsibility. That's how it works :) Try to give your team-members not just tasks, but communicate your goals and ideas as clear as possible, so they know what is expected of them.

#4938618 Custom cout formatting using /tags

Posted by on 09 May 2012 - 03:49 AM

In the end you have to parse your string somewhere if you want to work with tags like this. Another way would be that your format your streams like the C++ streams with flags that can be passed to the stream instead of stringbased tags. (Google "C++ stream formatting" for this), which might mean that you have to create your own stream implentation and maybe a custom "device" or widget to display your messages.

Another simple way would be to define different macros which encapsulate your stream. But the problem with changing colors inside the message remains.
#define Info std::cout << "INFO: "
#define Warn std::cout << "WARNING: "
Info << "some information message\n";
Warn << "Warning stuff and a float: " << 1.0f << "\n";

#4932061 Help for a total begginer in programming

Posted by on 17 April 2012 - 02:28 AM

When programming, the language is just a tool to solve your problems. Naturally some tools are easier to handle than others, while more complex problems require more complex tools. Since you start from scratch, I would recommend to pick an easier language, possible one of the scripting languages like python, ruby, php etc. for your first steps.

#4928424 Array of pointers help

Posted by on 05 April 2012 - 03:06 AM

Why don't you use std::vectors (or any other STLcontainer)? With it you easily can achieve the same and if you preallocate space the objects will most likely stored in the same way as your array.

#4920620 Documentation for review

Posted by on 09 March 2012 - 03:41 AM

I just skimmed over your documentation without reading it in every detail. I quite like the hello world-example at the beginning, but then I find it a bit confusing, because it jumps straight to some advanced coding stuff without covering the basics first. In the "Types" and Phrases" section you make use of classes and operators, but they are only explained later in the document. Also I split up the where is X-part and put the differences to C# into each subsection, like constructors go into the "Classes" section.

I would suggest a structure more like this:
  • Intro / Getting started
  • Rough Overview of the differences to C#
  • *simple* types
  • Classes and Namespaces
  • Enumerations
  • Control structures / absence of these
  • Your original "Types" section
I hope this helps you a bit.

#4915440 Organizing and managing code?

Posted by on 22 February 2012 - 02:53 AM

IMHO, debugging is a sign of failure. It's better to write correct code than to write buggy code.

Now that's easier said than done, and noone writes 100% bug-free code. But there are some ideas that are useful.

I would not say that debugging (as in "using a debugger to find your bugs") is a sign of failure as such, but finding a bug without a clue where it originated with a debugger can be a real pain. And while nobody writes 100% bug-free code a good way to minimize bugs is to minimize your code, the less code the less bugs. Avoid code duplication under almost every circumstances except maybe for the simplest stuff. Try to find common patterns in your code and put it in a common place and don't reinvent the wheel all the time.

(could be a unit test, or some other kind of test).

Maybe have a look at Design by Contract (http://en.wikipedia....ign_by_contract) as an extension to simple Asserts to check for code correctness. But don't forget to compile the contracts out before you ship. Posted Image

- Refactoring

There are two kinds of coding activities: refactoring existing code and adding new functionality. Only do one activity at a time. When refactoring, don't add new functionality, and test against existing tests. When adding new functionality, modify or design the tests first, then code (see above). Look for suitable refactorings both before and after adding new functionality.

I totally agree on that one and I like to add: Do not be afraid of refactoring. While it may be tedious to do it will lead to a cleaner code base and if it doesn't you're doing it wrong.

#4901218 Team communication software

Posted by on 10 January 2012 - 01:35 AM

We use Skype, Google docs, Trac (wiki & tickets)