1. 7 Years
2. As an indie developer, my day usually began with me getting out of bed at around 15:00. I'd go upstairs, eat breakfast, and spend my time reading e-mails or socialising on some network platform(s) (tumblr, youtube, facebook, forums) with my laptop while I ate. I really started working at around 17:00. Most of my work was done in isolation in my room. I enjoy listening to trance and other forms of smooth music while working. The project had two programmers working on it (including me), and it was mainly coordinated over skype and e-mails. I'd simply work on the more pressing matters, as stated in our issue tracker, and so did he.
Once in a while, we'd meet up in real life and usually sketch down designs and other things on paper together, just to make sure we're on the same page.
I'd work until about 04:00-05:00 in the morning, and would then fall unconscious onto my bed, which was conveniently located right next to my computer.
Working at a company was basically the same. You were also mainly working on your part in isolation, however the working times in which you could work were more sanely adjusted (08:30 to about 17:00). Obviously, the project was far more structured and maintained, but the experience for me wasn't all too different than the one I knew as an indie developer (there was, unfortunately, no bed located in the company right next to my workstation).
3. This is a pretty broad question with a broad answer. The main expectations of a programmer are:
- Be good at the primary programming language being used
- Have a broad knowledge of programming concepts, and when to apply what technique
- Have basic knowledge of all tools being used to make the game you're working on
A programmer is obviously expected to be good at the primary language being used to develop a game (in the case of my indie game: C++, in the case of the company project: C), but I spent a lot of time also working with:
- Shaders for both DirectX and OpenGL (HLSL, GLSL), and how to set up the rendering pipeline correctly so they can be used in-game. The tool I used for prototyping shaders was RenderMonkey.
- The horrors of our build system (CMake)
- Scripting with Lua
- Various bash scripts
And that's just the programming part. With my indie project, when working together with artists, I was also required to know about 3D model conversion (obviously), image manipulation, sound manipulation, etc. At one point I even had to continue work on the rigging and animation of a model because an artist jumped ship. So I have moderate knowledge of Gimp, AC3D, Blender, T.Ed, CharacterFX, Fragmotion, Audacity, and Inkscape.
Again, at the company this was pretty much all taken care of so I could focus on actually programming stuff.
4. Re-inventing the wheel seems to be something companies love to do. A lot. To this day, I still do not understand why I worked on a custom in-game scripting language which came with its own bytecode compiler, and couldn't just use lua. I tried arguing the case, but at the time didn't have enough credibility to be listened to by enough people.
5. Program. All the time. Work on small projects, learn new concepts, push yourself. Reading other people's code and contributing in other projects helps a great deal as well. Also read a lot of books about the subject, and try to participate in programming groups and on forums.
6. Motivation. There are things that just have to be done, but you lack all motivation to do so. I found strolling around outside for a few minutes every two hours or so to clear my mind helped a lot.
"I would try to find halo source code by bungie best fps engine ever created, u see why call of duty loses speed due to its detail." -- GettingNifty