Tuesday, July 26, 2005

Are IT developers second class?

Joel Spolsky wrote a new article the other day. For those who don't know(probably all of my audience), Joel Spolsky is a hugely successful software developer. He worked on Excel for MS, and is now one of the owners of a startup software company, Fog Creek Software. If Joel didn't have his company in New York, I would be pestering him on a daily basis for a job. Look at what his interns have been working on this year: Fog Creek Copilot.

Most people agree that Joel knows his stuff when it comes to the software development industry. In fact, along with Eric Sink, Joel is one of the people I aspire to be.

This time, though, I think Joel made a few remarks that he is going to regret. I've already seen two articles bashing Joel for his (somewhat insulting and poorly thought out) comments. The article is entitled Hitting the High Notes.

Here are a couple of the quotes that have generated a response:
Is software really about artistic high notes? "Maybe some stuff is," you say, "but I work on accounts receivable user interfaces for the medical waste industry." Fair enough. This is a conversation about software companies, shrinkwrap software, where the company's success or failure is directly a result of the quality of their code.

Sadly, this doesn't really apply in non-product software development. Internal, in-house software is rarely important enough to justify hiring rock stars. Nobody hires Dolly Parton to sing at weddings. That's why the most satisfying careers, if you're a software developer, are at actual software companies, not doing IT for some bank.

Now, for the responses: Scott Reynolds and Phil Haack.

I have to agree with both of them. I have worked as a corporate developer, and while I much prefer working at a software company, my job in an IT department was just as important. One example is the little FTP client I wrote that handled moving critical data from one server to another. The process was originally carried out by hand, and was error-prone. I whipped up a little app that handled the load for us, and we never had another file get missed. Now, our company didn't go under because those files got lost, but we did get a lot of complaints from our employees about the stale data.

Am I any better of a programmer because I now work on software that is sold? To be perfectly honest, although our software is the product that drives revenue, we don't sell it per se. We sell a service, which is only possible because of our enterprise software. The reason we make so much money(70+% market share) is because of the software that we make internally. We have never sold our software to another company or individual. Does that make me a substandard programmer?

Ask the people that know me. I certainly can amaze my family with my applications. Granted, there aren't any commercially viable applications that I have written alone, but they are all of great value to my family and friends. How much more talented do I need to be?

What about the developers at Microsoft who work on their internal products? Are they second class as well? Someone at MS has to work on their current source control system(which they don't sell, and which doesn't even have a publicly available name)? Are they second class? The are arguably as successful as Eric Sink, with Vault, but they don't sell their software.

I think, Joel, that you may need to reword your article a little. It may be harder for you to find that talent in the future, since you are going to be getting at least some of those resumes from IT-type developers who are interested in trying something new.

Wednesday, July 20, 2005

Artwork from the front

Here's what I've been working on for the last couple of days. I don't count this time against my dev total, since it deals with artwork.

I found the ship models online, as well as a space station model. The magenta color will be transparent in the game.

Take a look:

The Player Ship

An Asteroid

An Enemy Ship

Tuesday, July 19, 2005

Artwork

Yesterday, I chose the model that will be used for the ship. I don't remember where I got it from, but the model came with like 20 or 30 different textures. Courtney and I went through them and found the one that we like the best.

I created an animation in my 3d editor that slowly rotates the ship around its axis, and I took screen shots every 10 degrees. So, now I have a collection of 35 different images to use for animation/ship aiming. I may change that, though, to have more images(like a 2 or 3 degree resolution, instead of 10).

As soon as my picture sharing program comes online, I'll upload a full size image, and a game-sized image of the ship, so yous guys can see them.

Saturday, July 16, 2005

Ship, asteroid objects and test framework


Unit Tests

Today, I spent one hour building the player's ship class. I also set up NUnit, and created my first unit test for the object project. The code to apply thrust to the ship works properly now! That was the part of the game that stumped me before; thus the desire to get that done first.

I have also created an asteroid class, which I think is done. I don't think the asteroid is going to have any additional, non-sprite behavior for v1.

Still on schedule, 3 hours down so far.

Thursday, July 14, 2005

Class Framework, the Second


Class Diagram, v2

My research discovered an important and irritating detail of the Microsoft.DirectX.Sprite class. It's a sealed class. Why did MS choose to make this class un-inheritable? I would love to extend the class, and add my update into it. But I can't, because MS marked it sealed. Irritating. So, I'm going to use the SimpleSprite class from the book I'm reading now. I'm probably also going to use the sound manager and texture manager class from the book.

All part of my new approach: don't write everything. Use code that is out there, and available.

Tuesday, July 12, 2005

Class Framework


Class Diagram

Here's the class framework, at least the first pass at it. This took about 25 minutes.

Total time invested so far: ~1 hour.

Hour 1 complete


Screenshot #1

Well, hour one is complete. And it only took 29 minutes! I'm on the way now, baby.

RockCrusher Plan

The Goal
Create a clone of the classic arcade game Asteroids®.

The player controls their ship, which dropped out of hyperspace in the middle of an asteroid field. The object of the game is to destroy as many asteroids as possible, while avoiding collisions.

Complete the game in 80 hours or less. That's 80 hours of work, not 80 consecutive hours. I'd like to have the installer complete by 90 hours, too. My goal is to use WiX for the installer, though, so it should be done at the same time as the game.

The Tools
  • C#, using Visual Studio 2003
  • Freely available art
  • Freely available sound
By using freely available art and sound, I should prevent myself from getting bogged down working on the stuff I am least proficient at, and give myself more of a chance of completing the game.

Nominal Project Plan
  • 1 hour: Get Managed DirectX to display a black screen
  • 2-3 hours: Design the class framework for the game
  • 2 hours: Develop classes for the player ship and the asteroids
  • 1 hour: Display the ship on the screen
  • 1 hour: Display some asteroids
  • 3-4 hours: Design the physics simulation system
  • 1 hour: Apply the physics engine to the ship
  • 1 hour: Apply physics to asteroids
  • 2 hours: Handle player input for the ship(DirectInput)
  • 3 hours: Make the ship wrap when hitting the edge of the screen
  • 1 hour: Make asteroids wrap when on the edge of the screen
  • 2 hours: Add a bullet class
  • 1 hour: Get ship firing bullets
  • 2 hours: Make bullets his asteroids
  • 1 hour: Make asteroids explode when their damage threshold is reached
That's already 28 hours of work.

At this point, I should have a playable game, v0.5

For the next version, 1.0:
  • 2 hours: Add scoring
  • 2-3 hours: Add sound effects
  • 2-4 hours: Add levels
  • 1-2 hours: Make the asteroids break into smaller asteroids when you blow them up(this should be a random choice)
  • 4-5 hours: Add alien spaceships that can shoot back once you reach a certain level
  • 2-3 hours: Give the aliens some AI
  • 1-2 hours: Track a high score board
  • ? hours: Improve artwork
That's another 19 hours, for a total of 37 estimated hours.

For 2.0:
  • 13-15 hours: Add a 3d view, where you can go 'inside' your ship, and see the controls and such as you fight, with a radar screen
    • 2-3 hours: Find/modify 3d models of asteroids and enemy ships
    • 3-5 hours: Convert 2d asteroid & enemy sprites to 3d meshes
    • 2-3 hours: Make 3d overlay for controls/viewscreen/radar screen
    • 2 hours: Create radar
  • 5 hours: Add power-ups in some asteroids
    • 1 hour: Modify asteroid class
    • 2 hours: Create powerup class
    • 2 hours: Modify player class to accept powerups
  • 3 hours: Add bosses to each level
    • 1 hour: Create boss class
    • 2 hours: Modify Level to only progress after destroying boss
  • ? hours: Improve artwork
  • 2 hours: Add a 'Comet' class in to the game
    • The comet will be faster and smaller than the fastest, smallest asteroid
    • Successfully destroying a comet will give you some type of bonus
Going from 1.0 to 2.0 will take an estimated 24 hours.

The total from 0 to 2.0 will be about 61 hours. Seems like my 80 hour estimate is reachable, especially if I break it up into 1 hour chunks.

Hopefully breaking the project up into 1-3 hour chunks will keep me married, too!
Listening to: You Won - Keith Urban - Golden Road (05:21)

I have been Inspired

As many of you probably know, I have a strong desire to program 3d computer games. I have always had a problem starting something, and not finishing it. Well, I read an article today that totally inspired me to get my first game out the door. I decided a long time ago to write an Asteroids® clone.

My curiosity has always been the greatest threat to my ability to finish the game. At one point, I had a ship on the screen, and asteroids that flew towards the ship. I got stuck trying to figure out velocities for the ship, and kinda gave up on the coding. I focused on 3d modeling for a while, but then XP broke my 3d modeling program, and the project has languished.

Here's the article that inspired me: A Game in a Week. The article inspired me in a very specific way. I am going to write my Asteroids® clone. I am going to complete it soon.

Since my biggest goal is to get a project out-the-door(OTD), I have chosen .Net as my dev platform, using C# for the language. I am going to use freely available artwork and sound, so I don't get tied up in that part again. I am going to use my game dev books as reference, for when I get stuck, rather than for leisure reading(as in the past).

This is my manifesto. I will complete the game. I am giving myself 80 hours of development time before the game goes OTD. Once v1 is in a playable format, I will post it to my gaming site (Games.CSquaredComputing.com), so you can all download and play it. I will try to include some way for you to submit bug reports and comments, so I can make the game better.

Stay tuned for my project plan, it's coming next.
Listening to: Who Wouldn't Wanna Be Me - Keith Urban - Golden Road (04:16)

Monday, July 11, 2005

OId people are funny

Check out this old lady. She is apparently a frequent guest on the Tonight Show. She is hilarious.

Thursday, July 07, 2005

The bastards have to die

I don't normally take a real hard line on things. This time, though, I will.

Every person who participates in, or has unreported knowledge of, a terrorist organization, should be shot.

How does killing a bunch of civilians in London further any cause in the Middle East? Why do so many muslims feel that killing someone that has no authority or power to change national policy is going to make the US or England change its stance on the Middle East?

Beyond the stupidity of murder as a political statement, don't groups like this ever THINK? The only two nations in the world that you REALLY don't want to piss off are the US and UK. Japan and Germany learned that lesson in WWII. I guess it's time for this group of pansies and murderers to learn it too.

Seriously, what person in the entire world doesn't know that the British are known for their tenacity? Many Brits opposed their involvement in the war on terror, and our actions against Iraq. None of those people are going to oppose Blair now, when he announces that the entire British Empire is going to war to kill terrorists.

Hello, these are people who idolize Winston Churchill, the most tenacious leader in history. Al Qaeda must be run by a bunch of idiots. They should have done this in France, where they could have accomplished something other than just sealing their fate yet again. [Edit]That comment was made in the heat of anger, and isn't worthy of publication. I apologize to the French people for saying such a heartless and thoughtless thing. No one should have to suffer the loss of innonence that comes from a major terrorist attack.

My heart goes out to those who have lost loved ones to the cowards. Thankfully, Dave's mum is fine. He called her this morning to verify. At least there is a small ray of happiness in this crap.
Listening to: Inside Out - Eve 6 - Eve 6 (03:39)