Finish Damin it!

While looking at books at Amazon, I found an forum discussion that posed the question, "Can a self taught programmer get a job?" The answer was a resounding yes but with a few caveats. Note I'm not really interested in a job; I'm interested in making games which requires being a good programmer. So the discussion was pertinent to my goal and steps that I should take.

The first thing that was rejected was the idea of certifications, most saying they are waste. (My guess is that this is only partially true because you just never know if one word on your resume makes a difference or not to the person screening.)

There also seemed to be a couple of tiers of programming complexity. Many programmers posted that they never used linked lists or hash tables, mostly focusing on the user interface and web side of things.

Others seemed to have quite challenging, problem solving jobs. Programmers seem to come from many different backgrounds, and their performance, and pay, has little to do with their college degree.

What was more relevant to this blog is that several coders said the key to getting yourself trained came in three parts.

1. Finish projects.
2. Learn everything you can.
3. Make your code elegant.

I think there is another important piece to that was stated by Peter Norvig who discusses the foolishness of learning a programming langue in 21 days. He points out that it takes time to master something. So lets add this as the four key to learning programming.

4. Stick with it.

With these four items in mind, let me go over them as they pertain to me. I started programming in Java in mid January of 2009.

1. Finish projects.

This really was a very nice wake up call for me. Taking a hard look at the files on my hard drive and the date, I'm was sitting at about three months since I started learning Java with one semi- playable game and quarter of a playable game. Not good. No finished projects. With this is mind I put away my space game and decided to make something simpler that could be finished. Now it took me over a day trying to figure out what that something was but it was well worth it.

2. Learn everything you can.

As for the learning side of things, I've actually done pretty well. My speed has increased. I've learned more than I ever imagined. Programming is not for the feint of heart. Game programming is only for the brave because it is actually very complex. Currently I'm dreading learning sound for my games. It looked like at one time there was a very nice interface for it but has since been depricated.

But on the positive side of things, not only have I memorized a ton of java syntax, object oriented programming is starting to make sense to me. Abstracting class and making re-usable code is becoming fun. I've become comfortable with Java 2D and have a fair understanding of swing.

When I think about the sound api for my game, in some ways this conflicts with number one. I really don't want to learn how to code sound API. It is one of those things that seems so simple to use. Play this sound once with this animation, or loop some background mood music. Of course you can set up a mixer to play multiple sounds at once with time delays for background moods but really it is just play and loop. But it is quite difficult to build an Ogg streamer. The wav player seems reasonable but even then there are many reports of crackling as well as mix problems. There are also threading issues. So my dilemna is whether or not to hire someone to write the code for me, thus completing my first goal of finish damn it. But at the same time it defeats my goal of learning everything I can.

3. Make your code elegant.

What about elegance? I wasn't quite there. As the blog stated most beginner coders probably don't even know what elegance means in terms of code. I think this probably a pretty fair statement; however I do know that in writing elegance can be gained through a lot of hard work and rewriting. The same seems to be true of coding.

With this in mind, I spent an entire week reworking the Subby code just to make it feel better, make flexible, organized. I looked for patterns in my code and tried to turn those into abstractions for reuse.

The greatest sucess I had in this area was my sprite and sprite manager classes. They were readable, documented, extensible. I had a nice little frame work to add different sprites in a manner of minutes.

4. Stick with it.

This is by far my worst issue. Typically I can dive into something for a few months, then get distracted by something new. Oh, look how cool is that thing over there! This time though I've promised myself to stick with it for a year.

I did have a three month lull but I just took a week and half off then came right back to it, quite refreshed.


Post a Comment

Thanks for the comment.