Monday, December 19, 2011

What video games taught me

When I was 4 years old my dad brought home a ColecoVision video game console and introduced our family to a whole new world of entertainment.  Games like Time Pilot, Mouse Trap and Pitfall helped create a warm and fuzzy bond between my dad and I (my Mom really loved Time Pilot too).

A few years later he purchased a family computer with a 286 Intel processor and 4 megs of RAM, loaded with MS-DOS and Windows 3.1.  It was this computer that I would upgrade over the years and enjoy a ton of computer games.  Some of my favorites back then were Ultimate Domain, Commander Keen, XCOM, Wolfenstein 3D, Doom, Diablo, Command and Conquer and Warcraft II.

Throughout those same years I would receive Nintendo, Super Nintendo and Nintendo 64 as Christmas gifts from my parents.  Anyone who has owned Nintendo knows how many awesome games were available with epic stories, silly characters and really fun gameplay.  Games like Secret of Mana, Chrono Trigger, Zelda (I, II and III), Metroid (I and II), and of course Mario Brothers (I, II, III, IV and V).  My best friend Brian owned Sega Genesis and Sega CD which gave me access to even more good stuff.  Seriously though, there are just too many great games.  I haven’t even scratched the surface, and haven’t listed anything relatively new.

Video games are now a hobby of mine and I own 18 game consoles/hand-helds and around 200 games (including computer games).  Needless to say, I’ve played tons of different video games in my life.  Probably somewhere over 500 titles in 20 years.  I’m not even sure I could list them all.  Unless you’re a gamer like me, you might find this horribly unproductive.

Oh but you would be so wrong!  I’ve actually learned so much from playing video games, including real-world skills and knowledge that have helped me even today.  It has been shown that video games offer a great deal of benefits as well, such as good hand-eye coordination, improved motor skills, resistance to distraction, and increased peripheral vision among and other things.

As with any type of learning, it is what you make of it.  There are no guarantees here that kids will learn anything useful while playing video games (especially today as games become more violent and less challenging).



Patience

It’s no surprise that video games test one’s patience.  It doesn’t really matter if it’s a console game, computer game or even a game on your not-so-smart phone.

Games today spoil you a bit too.  Especially in the mobile world, most games have an active save state allowing you to return right where you left off when you last put it down.  Games like Angry Birds set a new standard for level saving, such that when you beat a level you have confidence that it’s beaten.  This just wasn’t always true when I was a kid. 

I remember spending several hours playing Contra, Super Smash TV or  Battletoads, only to lose all my lives so far in and have to START ALL OVER!  Sometimes it would simply be time for homework, or we’d have to leave the house for a while.  I could pause the game I suppose and turn off the TV (something my cousins did often).

This taught me patience and I was having fun in the process.  I had to spend time earning the right to play later levels in the game to achieve that goal of victory!  Sure some games today have this level of challenge, but it’s rare.



Problem solving

While all games have the potential to force you to think of problems in new ways and come up with strategies to solve them, puzzle games do this very well. 

My dad and I love Tetris, and we both have it on our iPhones now (although fun is emphasized more with the upgraded touch abilities).

Zelda is another great example.  While Zelda games place emphasis on their story and adventure, deep down they are puzzle games, but in a very different way.  Most of the enemies in Zelda require some particular item or special way to beat them.  Many rooms require a specific block to be pushed or pulled on.  Sometimes the puzzles themselves aren’t exactly obvious. 

 

In the real-world, it’s doubtful that you’ll ever be thinking to yourself “I’ll just move those boxes I have in the backyard around, and the door to my next new job will be open!  Thanks Zelda!”, but you might find yourself looking at the world with a new perspective.

The main thing about problem solving in games is that it just forces you to think about things differently.



Money management, interest and taxes

Aside from school lunch and saving for toys, why would a child even need to know how to manage money at an early age?  They probably wouldn’t, unless they’re playing video games.

My absolute favorite genre of games is simulation.  Games like SimCity, Utopia and Theme Hospital all involved building an empire.

They taught me about spending and saving, credit through loans and interest when paying them back.  I had a limited amount of starting money, and needed to earn more through a successful empire.

 

Today I’m not exactly fit to fill the shoes of a mayor or run a company as CEO (I’m not sure I’d want to), but I did learn all about money at an early age.



Multitasking

I think the most intellectually demanding genres of games is real-time strategy(RTS).  They really require constant focus because you are always doing something.  At times you feel like an octopus with 100 tasks to get done, but you’re having a ridiculous amount of fun while doing them.

My work requires that I use a computer all day, and I truly believe that playing these games increases my overall productivity.  I can use software more quickly because I utilize hotkeys.  I find myself interacting with buttons and menus more accurately.

For me it started with Command and Conquer, but Blizzard’s RTS games Warcraft and Starcraft are my favorites.



Typing skills

Most modern games are social in some way, either via chat or message boards.  Some games are fast paced enough that if you even want to chat while you play, you should probably have some decent typing skills.  This actually might encourage some kids to learn shorthand, but not me.  Online games was a great way for me to practice “correct” home row typing.

To this day, my typing speed is still well above average I’m sure (somewhere around 80 wpm and closer too 100 on good days).



Spatial awareness, organization and efficiency

The other day I was reorganizing our bathroom closet and realized that I was treating it like an inventory in a game.  I placed items in similar categories together and placed the most common use items within easy reach.  I also put smaller items in front so you could still easily see items in the back.  While this sounds like common sense, this is something that comes up in games quite a bit, albeit in different ways.

In Diablo specifically, your inventory is comprised of several slots.  Depending on the size of the item, you often have to rearrange these items to fit.

 

Games like World of Warcraft and Minecraft have an action bar and you find yourself placing common use items within easy reach of your left hand (the action bars are accessed via the 1-0 keys typically on your keyboard).



Interface design

There isn't anything more frustrating than trying to play a game that has horrid UI (this is also true of websites and apps).  But what is bad UI?

The answer is subjective, but most people will probably agree with at least one of these:

  • Clumped together controls
  • Small or blurry text
  • Complicated HUDs (heads-up displays)
  • Complicated menus (how many actions does it take to use an ability, or save your game, etc.)
  • Improperly categorized controls (what is this button doing here??)

Spending time playing games really helps in the design process.  I find myself thinking of what has worked well in the past, based on my experiences at the time.


 

World history and culture

There are actually quite a few games that let you play as (or play with) a particular ruler or leader of people in history.  Civilization and Empire Earth are my two favorites, though there are others like Caesar and CivCity: Rome.

What makes Civilization so great is it’s in-game “Civilopedia” that had a great deal of historical information.  Every time you gained access to a new military unit or built a building, met a new civilization or made a new scientific discovery, the Civilopedia would popup.

I still love playing Civilization not only because it’s fun, but it’s super interesting.  The replay value is high for me because I have the chance to beat the game using another one of the many nationalities or by initiating a different form of government the second time around.  It also makes for a fun time recreating history (what would it be like if George Washington was a communist?).



Science and Terminology

While most games are made to be fun, often they have ties back to real-life.  Just as with world history and culture, game designers and writers use terms from our real-world in their stories, object and character names and game concepts and mechanics.

More often than not these particular games are on the educational side, but not always.  The game developer Maxis released surprisingly fun simulation games that were really educational. 

SimEarth was full of information you’d learn when taking an earth science course.  SimEarth exposes you to a wide variety of animals and their growth, our Earth’s geosphere, weather systems and other good stuff (many topics of which I hadn’t even learned in school yet).

 

When I took animal diversity in college, several students in our class were confused about a bee’s caste system and how it was different from other species.  I remember thinking to myself: “You should have played SimAnt man…”.  SimAnt introduced castes by allowing you to change the percentage of ant workers, breeders and warriors that were hatched from your queen’s eggs.


 

Scientific research trees are a popular mechanic in games.  It enables the developer to slowly introduce new abilities to the player, while at the same time giving them a sense of accomplishment and reward.  Even though games like Civilization and Ultimate Domain weren’t strictly educational, they had really extensive scientific research trees.  I was probably in 5th grade when I played these games, which taught me about metallurgy, combustion and a bit of chemistry.



How to let go of possessions

Letting go… of possessions… huh?

Think about this one.  How many possessions do you own?  Do you pay for storage for your stuff?  How hard is it for you to de-clutter?  It’s written somewhere, in Luke I think… “Beware!  Guard against every kind of greed.  Life is not measured by how much you own.”  Okay okay, I’m not talking about greed, but just STUFF.  Stuff everywhere

During the Christmas season I was off work for a nice 12 days and did a lot of cleaning and de-cluttering around the house.  It can be really hard to let go of items that you think you might need, but believe it or not, games have helped make this process easier for me.

Take World of Warcraft for example.  This is a game of epic adventuring.  You explore, quest, fight and loot and loot and then loot some more.  You need some place to put these things yes? 

Similar to previously mentioned Diablo, in WoW you have a main backpack and the option of purchasing 4 additional bags (with varying number of ‘slots’ depending on the quality).  Unlike Diablo, Each slot corresponds to a storage place for any item in the game.  You even have a bank with slots!

Over time, you use up your empty slots.  It just happens, and it happens easily.  Sometimes you have to make some tough decisions on what to get rid of.  Some items take hours to find, some are useless but are nostalgic.  In any case, you eventually have to give up something (or come to terms with never looting anything again).

This is similar to life, and working with inventory in games really does help you come to terms with the fact that stuff accumulates, and you have to eventually purge.



Keep learning, keep playing games

These are really only a few examples.  Having played so many games over the years and with so many favorites, it’s a real challenge to come up with a short list.

I still play RTS games to help improve my multi-tasking and problem solving, platformers and first-person shooters to keep my reaction and hand-eye coordination sharp, and Minecraft to… well help me relax after a long day of work.

While there seems to be a movement of games that hold your hand the entire time, I still find myself learning from games.

Do you agree?  Did I miss anything?   If anything, leave a comment with a list of your favorite all time games.

Saturday, December 17, 2011

My ambitious book list for 2012

I love to learn, and learning usually involves a lot of reading.  When I was younger I hated reading books.  They were boring and I felt like I was going cross-eyed staring at the black and white.  Then again, these were books that I felt forced to read (in school, as gifts, etc.).  I often didn’t care about the subject or didn’t find it interesting (actually most of the time I daydreamed about how I could turn the topic into a fun game).

Active developer communities such as channel 9, stack exchange and game dev really changed things for me.  Plus with digital books now, my material is even more accessible.  I find myself consuming more and more information from my iPhone, so having the kindle reader app is huge for me.  Reading and learning is fun again!

I’m already making progress, as you’ll soon find out.

Reading list


C++ Programming with Text-Based Games by Michael Dawson


TextBased Games

I’m actually almost finished with this book (a little over half-way).  It’s super introductory; most of the assignments and challenges I could already do in C#.

But it’s a fun book so far and helps when learning C++.

What I hope to learn:

  • Tricks in memory management
  • Class design
  • Not so much learn, but give inspiration for new projects

Sams Teach Yourself C++ in 21 Days by Jesse Liberty and Bradley L. Jones


21 Days

I actually have a PDF version of this book.  I’m almost done and it’s been extremely useful in catching up on C++.

I’ve found some discrepancies and bad practices in the section on pointers as well as memory management with overloaded operators (stray pointer bugs), but I think that’s to be expected in a crash course book.

What I hope to learn:

  • Templates in C++
  • More on memory management (or what not to do…)
  • Some practice with multiple inheritance and polymorphism

Programming: Principles and Practice Using C++ by Bjarne Stroustrup


programming_front

The C++ book written by the creator himself.

I only list this book because I’m almost finished.  This book really teaches you programming, and uses C++ to do it.  So for me, it hasn’t been all that informative (other than understanding the inner thought processes of Bjarne as he writes a calculator from scratch).

Not super useful for me at this point, but I’m almost done.

What I hope to learn:

  • I have already learned the basics of user interface graphics
  • I’ve learned a particular implementation of building a calculator from scratch
  • I still hope to learn how Bjarne intended multiple inheritance to be used

C++ Primer Plus by Stephen Prata


PrimerPlus

This book is huge and much more comprehensive than the other two C++ books. 

I’ll probably end up skimming the text or trying the exercises first and only going back if I don’t understand something.

What I hope to learn:

  • A more in-depth coverage of C++ language features
  • Good patterns and practices (wishful thinking here I think)
  • Tips and tricks

The Art of Computer Programming Volume 1 of 4 by Donald E. Knuth


ArtofProg

I’ve been told this is an excellent series on algorithms.  I cracked open the first volume already and it looks to be filled with math equations, solutions and example code. 

My curiosity is peeked, however I’m going to need to stay motivated for this one.
Winking smile

What I hope to learn:

  • Introduction to algorithms
  • Solutions to common data problems
  • Sharpen my math skills

Advanced 2D Game Development by Jonathan S. Harbour


2dGame

I’m really excited to read this.  I’ve already read through chapter 2, and it seems to teach a really great implementation of a 2d game engine that is easily portable to other platforms.

Not only that, but his method also allows migration to different IDEs.  Pretty neat.

One of the bummers for me is that it focuses on using 3d model based sprites instead of painted spritesheets (which I understand makes creating sprite animation easier), so I’m sure I’ll get over it.

What I hope to learn:

  • How to build a 2d game engine (one possible implementation)
  • Graphics using DirectX
  • Other game related topics such as input collision and sound

Real-Time Rendering by Tomas Akenine-Moller, Eric Haines and Naty Hoffman


RealTime

As I understand it, this is the book for current day 3d rendering.  It gives an overview of the rendering pipeline, helps get your math up to speed and thoroughly covers advanced concepts.

I think the 4th edition is going to be available soon if not already, but I own the 3rd so I’ll start there.

What I hope to learn:

  • The graphics pipeline
  • Brush up on Trigonometry and Linear Algebra
  • Everything 3d graphics

Steve Jobs by Walter Isaacson


jobscover

Over the past few years I have been largely impressed with Apple.  Their ability to innovate and design has completely influenced the decisions I make as I work.  I even bought a MacBook to accompany my iPhone and I love it.

While I understand that Steve probably did not have his hand in every innovation and decision, I think this will be a great read.

What I hope to learn:

  • Ways to better communicate
  • An inside look at Apple's development process
  • New strategies when making important decisions

Full Steam Ahead

So there you have it!  My reading commitment for 2012.  It might not seem like a lot for a year of studying, but I intend to do many of the exercises (if not all of them).  Game programming books always get me on a project tangent too.  I might lose a ton of sleep this year (and hopefully make a cool iPhone game).

I plan on writing reviews for these books as well, so be on the look out for those.

Do you have any reading plans for 2012?  Leave a list in the comments!

Wednesday, December 14, 2011

I write software, should I blog? (Part n)


I've been coding on and off for about 20 years now making little applications in VBA to help with work stuff, nifty stat tools for my favorite RTS games, and generally learning all that I can.  When I discovered RSS feeds and code blogs several years ago, I really thought it would be cool (and fun!) to start my own.

I didn't really have a good reason though.  My feeds quickly became noisy and finding a signal often consumed a ton of my time.  Enter mobile computing and a boom of social networks... my attention is now on everything.  I don't really need to add to the noise do I?
 
A little over 2 years ago I was hired by a software engineering team within the company I had been working at for 3 years.  My entire world changed.


Working on a team changed everything

Working on a team of engineers after coding solo for so long is a big deal.  Suddenly my code is not my code anymore (and there is even worse code nearby - sometimes I have to fix it!).  I'm a pretty passionate guy too, with a strong work ethic (most of the time :).  Point being, my world changed and I was bombarded with a whole new set of exciting challenges and frustrations.

After two years of learning and using cool Microsoft tech such as C#, EF, WPF and MVC, and having a few successful applications under my belt I'm finding myself with a loss of passion and motivation.


Putting thoughts into words

I think what is really happening is that I have no where to put my thoughts and am just overwhelmed.  This is such an obvious statement; it happens to everyone in any profession.  It’s just that I've learned so much and failed so often in 2 years (it should be said that our team lacks senior engineering expertise), and am already finding myself losing some knowledge here and there, having bounced between WPF and MVC so many times to implement new features or fix a few things.
 
I’m also actively learning DirectX and re-teaching myself C++ (I taught myself the basics in junior high).  I’ve done a little bit of IOS programming too (I love that API).  Ultimately, there is only so much you can shove in your head before overload occurs.


Diving in

I found a few posts on the subject here and here to give me an idea of where to start.  A blog post about blogging seemed pretty good...  

Seeing as this post is part 'n', I may or may not revisit this topic, but I definitely want to make sure I'm contributing good content.  It's one of my main goals of blogging.  I don’t want to be noisy.  If this and future posts helps at least one other person (other than myself) I feel that I’ve contributed to something great.