What is an Entrepreneur?

At the beginning of my Junior year of college I decided to pick up a minor, both to diversify my engineering education with some business knowledge, and to fill my schedule as I finished up a couple more computer science courses (more-so the latter).  In the very first entrepreneurship class they asked us what qualities and characteristics entrepreneurs possess that are unique from a non-entrepreneur.  The class began spouting off adjectives such as “motivated” or “self-reliant.”  While I do not dispute that these qualities may to a successful entrepreneur, I have come to view entrepreneurship in a new light.  I even created a new term for it;

Business Engineering

After a quick google search I see this term has already been taken, but for the sake of this post, let’s pretend it’s a new concept.

Let me begin by defining the term “engineering” in my own words; the use of science to systematically advance society through the development and implementation of new technology.  So how does this relate to entrepreneurship?  It describes entrepreneurship almost perfectly;

Except a business is the product.

Engineers must make trade-offs when designing a product.  Entrepreneurs must make trade-offs when determining a business model. Engineers build products to increase efficiency, reduce costs, and solve a pain.  Entrepreneurs build organizations of people to increase efficiency, reduce costs, and solve a pain.  An engineer may decide to switch out a circuit board to improve energy efficiency.  An entrepreneur might decide to lay off an employee to increase gross profit.  The parallels are endless.  And while it is the case that products by engineers and products by entrepreneurs are fundamentally different, they are innately related;

Entrepreneurs build a product to sell a product.

The real product of an entrepreneur is a business model tailored to the actual product it aims to sell.  And much like an engineer must go through a repetitious process of design, trial-and-error, and testing; the path to a viable business can only be achieved through the same processes.

The entrepreneur is its own breed of engineer.

Web Programming

In the past two weeks I have taught myself

<ul><li>HTML</li>, <li style=’color: blue’;>CSS</li>, <li><button type=’input’ onclick=’printJS();’></button></li>, and <li><?php if ($not_done_learning) { echo ‘in the process of learning ‘ } ?> PHP.</li></ul>

<script>function printJS() {

this.innerHTML = ‘Javascript‘;

}</script>

If you understood that then you’re probably a web developer, if you didn’t then filter out all the non-bolded garbage and you should get the point (well, probably not because those abbreviations probably mean nothing to you).

So many languages to handle so many different aspects of a web page.  Luckily for you, all you need to worry about is the browser which pieces it all together on a simple viewport that we can click and type on.  Which brings me to my next point:

INTERNET EXPLORER.  For some reason it’s still one of the most-used browsers, probably because its users don’t know how to install a better one.  I think the more one knows about web programming the more they despise IE.  Everywhere you turn you’ll hear people saying “except in IE,” ESPECIALLY versions before IE10.  Browser-specific code is something everyone would like to avoid, but as long as the old IE versions are around, it’s unavoidable.

Luckily, these days a lot of libraries are available that abstract browser-dependent functions and provide us a nice simple function that has cross-browser support.

Now I want to dedicate the rest of this post to giving a broad overview of the different languages involved in most websites and how they affect you.

Image

Hyper-text Markup Language (HTML) – The structure of the web page.  The browser receives an HTML file from the web server you are visiting.  (Ex: A server hosting facebook sends you an HTML file every time you visit a page).  The HTML technically doesn’t define anything to do with how the page looks, we have Cascading Style Sheets (CSS) for that.

Image

CSS – This is the presentation of our web page.  This code “augments” the display of specific HTML elements.  For example you can set the background of the page to be an image, or you can force all links to be red.  Still, with just HTML and CSS you are very limited.  You can make a simple, presentable website with static content, but that’s about it.  If you want to go beyond that you can use Javascript.

Javascript – This defines the behavior of the page.  For example, how do you change an image every 5 seconds or control what happens when you click a button?  Javascript allows the user to interact with the page by allowing us to do stuff when you press a key or click an element.  With this thrown into the mix we can make our website a lot more interactive, but still there are limitations.  Javascript is run on the client by the browser.  This restricts you from accessing databases from the code mainly because of security issues and it’s generally regarded as bad practice.  Here’s where PHP Hypertext Preprocessor (PHP) comes into play.

Image

PHP – PHP is embedded into the HTML of the page, but isn’t processed by the client, it’s processed on the server.  The chain of events is: You request a web page -> the web server processes the PHP -> and then the web server sends you the web page (there is no trace of PHP on the client because it’s already been processed by the time it gets to you).  By processing the language on the server, it is much more suited for communicating with a database.

Combining all 4 of these languages gives you a lot of control over a website, but I’m sure I have much more to learn.

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.