The importance of grades in real life

A big question that many students begin to ask themselves as they go through college is, “what’s the point?”  I’ve heard phrases like “I’ll never use this class for my job!” and “I didn’t really learn anything in this class” over and over in my 3 years at USC.  And 90% of the time I agree.  Why did I have to take “Discrete Methods in CS” or “Environmental Issues?”  Most of the time I cram for midterms and finals and then forget 90% of the material a month later.

Image

And to further validate it’s worthlessness, I NEVER had to remember anything from either of those classes for anything I’ve faced in life.  Why do they make us take it?

My answer to that is: who cares?  To be successful in life you need to do what you need to do.  Almost every graduate comes to realize that most of the work they will be doing is learned on-the-job, and not in school.  But how can you prove to the employers that you’re capable of learning how to do your job if you can’t learn the material to pass a class on environmental issues?  It’s about discipline.  When you write down your university on your résumé you are being judged on how pretigious that school is, but more importantly, how much you took away from your college education.  You may be the brightest kid in your class, but if you have a 2.0 GPA good luck proving that to an employer who tossed your rèsumè into the rejected pile after reading the first couple lines.

I’m not saying that I haven’t learned anything useful in computer science from my major, but I’ve learned a lot more seemingly irrelevant material than directly job-relevant skills.  Do I really need to know modular exponentiation or how much work a heat engine can do?  I’m not going to be a cryptographer or a physicist, so simply put, no, I don’t need to know it.  It was never about WHAT we’re learning, it’s about the concepts you need to understand in order to learn it.  Basically, learning those things makes you smarter in general.  It trains parts of your brain to understand other related things easier.  For example, physics and programming are mathematical in nature.  Strengthening my math skills may indirectly improve my programming skills (evaluating an expression is a common concept between these two fields).

It took me until my last year of college to fully understand and accept this system I was born into.  If you can’t beat it, join it.  A successful person gets an A in that boring class that you absolutely hated, they got that internship that denied your application, and may even later be your boss.  Are you going to accept that?

The future

As I described in my previous post, most of my programming experience during the high school years came from Zombie:Reloaded, a game plugin.  Senior year rolled around and I needed to decide on a major.  I knew that computers were my passion, but I didn’t know what field of computer science I wanted to focus on.  I knew I liked game programming, but that’s all.  I didn’t have a clear picture of what I liked and didn’t like about computer science.  I contemplated the many computer-related majors: computer science/games, computer science/business, computer engineering, computer science, the list goes on.  I decided to go with the computer engineering major.  I did this because computer engineering encampasses all that computers have to offer – software AND hardware.

After two years of computer engineering and registered for my first semester junior year, I realized that I absolutely hated the hardware aspect of computer engineering.  Very tedious low-level work that doesn’t yield a useful product by itself (at least not practically).  Hardware engineering is a very important field nonetheless, but as far as my interests go, it doesn’t quite make the cut.

After this epiphany, I decided that I definitely wanted to pursue a career in software engineering, so I immediately switched my major to Computer Science.  But wait, what field of software engineering?  Artificial intelligence, graphics, simulations, security, networking, games, etc.  I have no idea.  And I’m still trying to decide.

I hope to intern at the USC Health Sciences campus on a cancer cell simulation project this summer, still waiting to hear back, wish me luck!

Introduction (early days of game programming)

Gamers all the way back in the Counter-Strike 1.6 (CS1.6) days all know what I’m talking about when I say “Zombie Mod.”  Zombie Mod (ZM) is a server-side modification to the widely popular multiplayer first-person shooter CS1.6.  To summarize the core concept of ZM in a few simple words: “Humans vs. Zombies.”

The existing terrorist versus counter-terrorist teams are transformed into Zombies vs. Humans.  A  run-through of a typical ZM round:

 

The round starts and everyone is human… for now.  Everyone frantically buys their weapons from the game weapon menu and chooses a fellow human to group up with, praying that they chose the right group.  Together, you run, searching for a place to hide or higher ground.

We’re about 45 seconds into the round and you luckily found a nice perch high enough to be out of reach of any humans.. when you hear a screaching in the distances followed by overlapping gun shots varying from pump shotguns to automatic rifles. You see a human – the one you almost decided to follow at round start – run into view from around a corner being closely tailed by a fast, bloody, scary creature quickly gaining ground.  He continues to shoot the beast away when all the sudden – *click, click click* – his clip is empty.  He’s trapped in a corner and the creature claws him as you watch him transform into one of them, a zombie.

Almost instinctually you begin emptying your clip into the once-human from your perch along with your group of human friends.  They run away, overwhelmed by the storm of bullets coming from your group.  You hear more screams and gunshots in the distance.  The bullet sounds are slowly, yet so quickly, substituted with screams and moans.  The gunfire ceases after another screach.  Your group waits.  They are ready – well, as ready as they can be.  No one is ever ready for what comes next.

You hear the several sets of footsteps approaching you – too many steps to count – coupled with moans that leave no room for silence.  A zombie comes into view, you and your teammates confidently empty bullets into its head, pushing him back.  Another zombie comes into range.  Another, and yet another.  The horde is getting closer as your team struggles to reload and continue pushing them back.  They reach your perch and begin making their way up by jumping onto objects surrounding it.  Your team mate empties a shotgun round into it’s head and it falls limp on the ground.  One down.  Many more to go.

The horde continues to grow, there are 7 or 8 zombies running toward you while 3 are making their way up to you.  One of your teammates gets too close to the ledge as a zombie jumps up and infects him right in front of your eyes.  With quick reflexes and good aim you’re able to shoot the mindless monster off your ledge.  Your teammates don’t even realize what happened in the heat of battle as they continue pushing the horde back.  There are 3 of you left and your ammo supplies are dwindling.  It’s hopeless.

Some youtube videos of gameplay: http://www.youtube.com/results?search_query=css+zombie+reloaded

As you may gather from this dramatization, this mod offers a creative, suspenseful, and dark  twist to the game that a lot of gamers enjoyed playing.  In fact, this gameplay became so popular that thousands of gamers were playing it daily.  This mod carried into the next version of CS, known as Counter-Strike: Source (CS:S).  A new developer came in to play and created a new version of ZombieMod for CS:S.  This version, not surprisingly, became extremely popular very quickly.  Unfortunately, the developer kept the source code to himself, wasn’t responsive to user suggestions, and even made the mod exclusive to only people who would pay for it.  This didn’t sit right with me.

I began making server mods when I was 15 years old.  I started slow with simple scripts that had limited effect on game play.  But as I got the hang of programming I moved on to a more powerful framwork known as MetaMod/SourceMod.  (These frameworks provided a layer of abstraction between server plugins and the game engine.  This was extremely beneficial because when big changes were made to the engine, the SourceMod guys would crank out a new version that would fix any problems between my server plugin and the engine.)

As an avid fan of ZombieMod, I was quite upset when I heard that the new version of ZM had to be bought.  Especially because the older versions had all been broken by an update to the Source engine.  Being the programming superhero that I was, I cranked out a playable Zombie Mod known as “Zombie:Reloaded” (ZR) on the SourceMod framework in a couple weeks and hastily released it.  The code was a mess, there were missing features, and a bunch of bugs.  After weeks of patching (which were more like bandaids than solutions) I scratched the first version of the plugin and started fresh.  I had a better feel for the gameplay mechanics and intricacies that I didn’t account for on my first go.  (I also had no concept of plan first, code later, I was young).  Zombie:Reloaded v2.0.0 was released and it was better, but not great.  As I tried expanding the plugin to add new features the code became very polluted and messy.  The problem was no longer about the features of the mod itself, it was about the structure of how these features were implemented.

At this point, about a year and half after my very first release of the plugin, I was getting busier with school and my social life.  I abandoned the project for months.  When I returned, I was surprised to see another programmer had taken up the project and fixed several issues that had arisen during my period of absence.  At first I was threatened by this new programmer, but later on we teamed up to continue development.  For the next 2 years we developed Zombie:Reloaded v3.0.0.  By now we had a solid base of users who switched from the old ZM to ZR.  During the development of the latest version, a huge update to the game and engine was released which broke everything.  The SourceMod team prompty released a patch which fixed our plugin, but unfortunately the original ZM didn’t have that luxury.  The developer, who is still keeping the source to himself, disappeared.  My plugin was now being picked up by hundreds of server owners and installed on their server.  I was bombarded with hate, praise, friend requests, feature requests, bug reports, you name it.

The thing people loved most about my plugin is the configurability.  ZM was very static as opposed to my version where you could configure just about any component you could think of.  Version 3.0.0 was released in 2010 followed by a few patch updates to fix a couple minor issues.  That version is still being used on hundreds of game servers today.

After years of trial-and-error, I finally released a full-feature, popular server plugin enjoyed by 1000’s of people every day, all for free.  The entertainment provided by my work to all those people along with the invaluable project development and teamworking experience was payment enough.