Categories
Personal Development

The Thousander Club in 2007

Scott Hsu-Storaker founded The Thousander Club about a year ago, and he recently posted a summary of his year in the article Thousander Club Take 2.

For those of you who have no idea what the club is, the idea is to become an expert at something. How do you become an expert at something? Practice. A lot of it.

Let’s recall what was said about how much time is required to become an expert. 10,000 hours over the course of 10 years might make you a master, and that seems like a lot of time to put in. It is, and you’ll note that the experts at chess or dance or baseball or writing invest that time anyway. Of course, if you break it down, it can seem more manageable:

  • 1,000 hours is doable within a year if you work full time, and you can be an experienced expert.
  • 100 hours can be done on the side, and you can still be somewhat of an expert.
  • 10 hours could be a dedicated weekend or spread over a few of them, and you’ll definitely learn enough to be dangerous.
  • Even dedicating an hour to a task will give you practice with the basics.

Can you do 1,000 hours in the coming year? That translates into almost 3 hours per day if you include weekends, or about 20 hours per week. You can easily accomplish it if your full-time job involves becoming an expert at a certain skill, but even a dedicated, part-time effort can get you there.

You don’t even necessarily need to dedicate hours. Scott had a goal of creating 1,000 3D models. I had a goal last year to create 1,000 game ideas. Maybe you’ll try to create 1,000 doodles, or 1,000 songs, or 1,000 pages for a novel.

The main idea is that by practicing a lot, you can’t help but become an expert. So will you join the Thousander Club and gain expertise in your chosen skill?

Like Scott, I didn’t hit my Thousander Club goals for the year, but I am going to continue towards my goal of 1,000 game development hours. I will keep track of my hours for this year separately from last year’s hours, but I will total them to count towards my goal. After all, the main point is to do many hours. Doing them sooner rather than later is ideal, but doing them at all is better than not.

Categories
Personal Development

Resolutions for 2007

Last year’s resolutions didn’t all work out. I have to admit that I forgot about them, and a week or so ago I remembered that I had written a post listing my resolutions for the year.

I did actually form a formal company, but it took me months later than I originally planned. Instead of Oracle’s Eye, I finished Pong and will finish Space Invaders. I played a number of games over the course of the year, including games that I never had a chance to play when they were originally released such as Mega Man and Prince of Persia: Sands of Time. Once again, I didn’t read 52 books for the year, but there was a period of time towards the end of the year when eating and breathing were all I could do between sleep cycles.

But what about for the coming year?

  • I want to sell my first game.
  • I want to create a backup system to replace the one that died last year.
  • I want to become proficient with autotools, such as autoconf and automake.
  • I want to be able to walk up multiple flights of stairs without feeling winded.
  • I want to form at least one good, productive, and/or useful habit per month.

I will try to post about my plans to accomplish each of these resolutions later in the week. I am keeping these resolutions in a list that I will check daily instead of keeping them solely in this blog post. B-)

Happy New Year!

Categories
Game Development Personal Development

Thousander Club Update: December 25th

For this week’s Thousander Club update:

Game Hours: 262.25 / 1000
Game Ideas: 616 / 1000

Target: 1008

Merry Christmas! Apparently I was off a bit in my calculations, as there is almost another week to go before the year’s end…hmm…

In any case, I managed to hit over 25% of my goal for the year, which isn’t too bad. It’s not very good compared to actually doing 1,000 hours, but it wasn’t bad.

Space Invaders is playable as a real game, but I am amazed at the long list of things I have left to do! There is no real animation to speak of, there are no menus or text, there is no way to get to a game over state, and you can’t restart from in-game.

Still, you can continue to shoot enemies for as long as you have ships left. There is no indicator, but you start with the standard three ships. If you lose them all, you need to shutdown the game and start it over if you want to continue playing.

Categories
Game Development Personal Development

Thousander Club Update: December 18th

For this week’s Thousander Club update:

Game Hours: 241.25 / 1000
Game Ideas: 616 / 1000

Target: 987

Only two more weeks!

So I found that I could still come up with 100 ideas, which was surprisingly difficult and easy, depending on the hour. I managed to get multiple aliens to move about, which involved replacing the single alien sprite with a vector of alien sprites. It was a bit tricky, but it was due to my lack of experience with erasing members from a vector.

To handle the movement of the aliens, I have a section of code that looks like:


static int step = 1;
...
if (alien->X() > 970 || alien->X() < 74)
{
step *= -1;
}

Basically, if the alien goes too far to either side, it reverses direction. I thought I would need to replace this variable with an array of variables, but it worked surprisingly well. The aliens all reverse direction together when the far left or far right aliens exit the range.

I am thinking that the alien sprite is too large, however. There are only eight aliens across right now, and they move back and forth too quickly. If I add code to allow them to move down after hitting the sides, the player would have almost no time to fight back. I should also find a way to slow them down in general.

The good news is that I am taking the rest of the year off at my day job, which means that I have this week to work on my own game development. Next week I will be celebrating Christmas and getting last minute shopping/gift wrapping/etc done. I will break down my week into certain tasks I would like to accomplish, and I will try to give progress reports each day.

Categories
Game Development Personal Development

Thousander Club Update: December 11th

For this week’s Thousander Club update:

Game Hours: 238.25 / 1000
Game Ideas: 507 / 1000

Target: 966

I managed to add the ability to shoot a weapon in my Space Invaders clone. As of now, if the bullet collides with the enemy sprite at the top of the screen, the enemy disappears.

Space Invaders clone

Yes, that orange thing at the bottom is the player’s ship. Hey, it works.

I am giving myself permission to stop every so often and plan my next move. Getting this far was actually simple since I had a fairly good idea what I needed to do. My next moves are not as clear. I think I will work on abstracting the interface. Right now, I have code that looks like “If Space is pressed, then make the bullet move up”. Everything is hard-coded, and I think at the very least the aliens can be made into a more abstract entity. In fact, I should be able to take my one alien and give it some friends. Otherwise, it would be a very boring game.

Also, I am not happy with the speed. It runs very fast, and I think I can experiment some more with the delta code I am using.

I don’t want to try to abstract things too much. I have already been down the road of abstracting too much, which resulted in not getting anything concrete accomplished. I don’t want my code to be completely hard-coded, either. If I keep doing small changes, though, I should be able to mold the project the way I see fit.

Categories
General Personal Development

Shut Down Your Lemonade Stand

I came across an interesting quote a few weeks ago: “If you don’t like the world sending you lemons, shut down your lemonade stand!”

If you don’t like your situation, simply get out of it! You don’t like doing homework at the last minute? Do it earlier. You don’t like your abusive relationship? Remove yourself from it. You don’t like how much you weigh? Lose weight. You don’t like your financial situation? Earn more money and/or cut expenses.

Sometimes it seems like things are more complicated than just deciding to change something about your life, but everything you do begins with a thought. Don’t just accept what you don’t want. If you relegate yourself to a life you don’t like, you can’t expect to get anything but lemons. You can be more creative, and you can create a course of action that will take you away from the lemonade stand.

If you are stuck in a routine or have a habit that takes you to that lemonade stand, it can be tough to change. There is a feeling of safety in sticking with the familiar. Just deciding that you need to change is a good first step, though. The next step is to do what you need to do to shut down the lemonade stand. For example, if you want to become healthier and maybe lose some weight, throw out all of the junk food and get yourself a pedometer. If you know that you don’t want to eat food that is bad for you, then there is no reason to keep it in your home. Get rid of it, and you no longer leave the temptation to revert to old habits.

Is there any aspect of your life that you feel stuck in? Identify your lemonade stand, and shut it down.

Categories
Game Development General Personal Development

Thousander Club Update: December 4th

For this week’s Thousander Club update:

Game Hours: 235 / 1000
Game Ideas: 507 / 1000

Target: 945

I started working on my Space Invaders clone. I first created a mind map, trying to come up with as many ideas as I could regarding the project. I didn’t want to make a standard clone when I could make something a bit different. I gave myself permission to let the ideas flow. In the end, I had a really complex game that only vaguely resembled Space Invaders. It featured multiple planets, multiple weapon types, multiple types of aliens, politics, research and development, and various resources. Even time played a role in this grand game.

Then I remembered that the point of doing this game was that it was simple. So I scaled back to the basic Space Invaders game. I could always add a feature later, but I won’t let myself do so until I actually finish the basic game.

So now that I had a good idea of what game I would make, where did I start? Fred Brooks wrote that representation is the essence of programming, referring to the data structures that you would use to code any software. Someone else once wrote that the user interface IS the game. Put those two together, and I realized that the easiest way to start working on this new project was to start with the interface.

My first running program was just a blank 800×600 window. When you press the left or right arrow keys, text would appear in the console indicating which direction you pressed. When you press space, the console states that you are firing your weapon. It was a simple yet fundamental accomplishment. It showed progress.

Then I added a background graphic, which required initializing the Kyra Sprite Engine. I then made a small alien sprite and displayed it at the top of the screen. Then I made it move back and forth along the top of the screen. Then I made a ship graphic display. Then I made the ship move depending on the arrow keys being pressed.

And just like that, taking small steps, I have the beginnings of a Space Invaders clone. Many months ago, I would probably have tried to do everything at once. For instance, the player’s ship would be an entire class with all sorts of features, like thrusters and a weapon, which would be a different class. I would try writing all of this code at the same time, and debugging would be incredibly hard. This time, I put together one thing, and it worked. Then I did another small thing. Then another. And another. Each step was simple and yet brought me closer to finishing the game.

Currently, if you press the fire button, the text still appears in the console. If you press the arrow keys, no text appears, but the ship moves. This week I will work on getting the weapons systems online, and I will work on this problem in a similar way. Previously I would have tried to get a weapon that shoots bullets that cause damage against aliens that get hit, which involves code for the weapon, the bullet, the interaction between the enemies and the bullets, and explosions. It is just too complex to handle all at once. Now, I know that I will do one thing at a time. Maybe I’ll start by creating a bullet that simply moves. It doesn’t have to do anything other than move. No damage assessment, no launching it from a non-existent weapon. Just movement. I can then worry about creating and destroying bullets. Then I can worry about the bullet-alien contact causing the two things to be destroyed.

And eventually I will have waves of aliens moving back and forth, slowly descending. Eventually I will have multiple levels. A menu system. Possibly some new, unique features?

Conquering complexity. Representation. The interface. Did I really not think about these things before? They seem so obviously useful.

Categories
Personal Development

Setting the Right Kind of Goals

How to Set Goals You Will Actually Achieve is an article about setting goals, but it dismisses the idea of SMART goals.

It addresses time differently from the way most people think of it. I think that even if you don’t agree with the idea that only the present moment exists, it is a useful exercise to sit down for a few minutes and ask yourself, “What would improve the quality of my life right now if it were true?”

I took out an index card, wrote the question at the top, and came up with the following list:

  • Working backup system for media and data
  • LCD instead of CRT for home office
  • Replace dead lightbulbs in kitchen and bathroom
  • Repair kitchen sink stopper
  • New shoes for exercising
  • Fix car’s turn signal
  • Fix car’s suspension
  • Fix car’s engine light

What this list tells you other than the fact that my car is badly broken is that I now have some results that I would like to have in my life. My original backup system had a hard drive failure months ago, and I still haven’t replaced it. It would be nicer on my eyes to have an LCD instead of a CRT monitor. I lost a few lights in my kitchen and bathroom, and replacing them would sure make the place brighter. The kitchen sink stopper just broke apart one day, and now food can too easily get down the drain. My shoes were really in need of replacement.

So what can I do with such a list? Well, I can make goals from them. “Buy new gym shoes by end of November” and “Plan budget for backup system by end of week” are examples of the kinds of goals I can create.

One other thing the article mentions is that your mindset is important. I put off repairing my car because I kept thinking about the expense and hassle of taking time to bring it in to a mechanic. I thought about how much I hated shoe shopping because I can never find simple shoes. They always have to have some widgets or air cushions or something. When you think about how difficult or arduous something will be, it will be. On the other hand, if you can envision how it will make you feel to have the outcome right now, how motivated it makes you, then you have yourself a good goal. New shoes meant that I no longer had to worry about the old ones falling apart. I wouldn’t need to worry about a shoe slipping and twisting an ankle. Fixing my car would mean no longer worrying about my car. I would be able to drive it without concerning myself with a broken turn signal or failing an emissions test. I could drive it with confidence. Even though I hated shopping for shoes, I went out and got two pairs. My feet feel great, and I also have the peace of mind that my shoes won’t wear down as quickly since I have another pair as backup.

And what about bigger goals? You can set them as large as you want. If it motivates you, if it inspires you, then it is obviously worth it to set that goal.

What would improve the quality of your life right now if it were true? Does it inspire you? Then make it a goal, and go achieve it!

Categories
Game Development General Personal Development

Thousander Club Update: November 27th

For this week’s Thousander Club update:

Game Hours: 227.75 / 1000
Game Ideas: 501 / 1000

Target: 924

I went out of town on Wednesday, and so I have only spent a few minutes here or there writing down some notes for the Space Invaders clone I will be working on. Well, that’s pretty much it.

Oh, and I signed up for the Supreme Commander Beta. B-)

I also found that when I am away from my computer for a few days, I can get almost 1,000 spam emails and hundreds of comment spam. Lovely.

Categories
Marketing/Business Personal Development

A Bad Decision is Worth More Than No Decision

Some indie game developers will tell you about the importance of NOW, and I thought the following article might illustrate the idea even more.

Why You Should Stop Planning Now tells you that while planning is nice, you eventually have to DO something.

You can prepare, plan, and document everything you are going to do, but unless you actually do something, all you have is a book of plans.

All the planning in the world won’t build your great business.

Making quick decisions will. Even making bad decisions drives you to learn more about your situation — and adapt accordingly.

I remember reading an article by Steve Pavlina in which he describes his decision making process. He would start a timer for 60 seconds, and then he would make a decision within those 60 seconds. Making a decision should be quick so that you can get to the actual work. Otherwise, you can agonize over details that may not be relevant. After all, no plan survives contact with the enemy.

If you find that you have made a bad decision, you can always change it. Be adaptable. The important thing is that you are moving forward.

Now, I don’t think plans are useless. The process of planning is good since it gives you insight into what might be coming. Just don’t spend all of your time making plans!